Sub EmitRTFFileHeader (FileNum As Integer)

  ' Generate RTF file header using passed file number
  ' Assumes that the file has been previously opened successfully

  ' Emit RTF file identifier, character set, etc.
  Print #FileNum, "{\rtf1\ansi \deff0\deflang1024"

  ' Generate a minimal font table containing just enough
  ' fonts to support Windows and Macintosh viewing
  Print #FileNum, "{\fonttbl"
  Print #FileNum, "{\f0\froman Times New Roman;}"
  Print #FileNum, "{\f1\froman Symbol;}"
  Print #FileNum, "{\f2\fswiss Arial;}"
  Print #FileNum, "{\f3\fswiss Helvetica;}"
  Print #FileNum, "{\f4\fswiss Hel;}"
  Print #FileNum, "}"

  ' Generate a minimal color table consisting of black,
  ' blue, green, red, and white.
  Print #FileNum, "{\colortbl;"
  Print #FileNum, "\red0\green0\blue0;"
  Print #FileNum, "\red0\green0\blue255;"
  Print #FileNum, "\red0\green255\blue0;"
  Print #FileNum, "\red255\green0\blue0;"
  Print #FileNum, "\red255\green255\blue255;"
  Print #FileNum, "}"

  ' Set the default font to Times New Roman
  Print #FileNum, "\deff0"

  ' Generate an initial topic separator
  Print #FileNum, "\page"

End Sub

Sub EmitRTFFootnote (FileNum As Integer, FootnoteChar As String, FootnoteBody As String)

  ' Routine to emit RTF footnote record.
  ' Assumes output file has been previously opened as #FileNum.
  ' Superscripting of FootnoteChar is not really necessary
  ' but looks nicer if RTF file is read into WinWord later.

  Print #FileNum, FootnoteChar + "{\footnote ";
  Print #FileNum, "{\fs16\up6 " + FootnoteChar + "} ";
  Print #FileNum, FootnoteBody + "}"

End Sub

Sub EmitRTFTabStop (FileNum As Integer, TabStop As Integer)

  ' The RTF \tx command parameter and thus the TabStop parameter for
  ' this subroutine is given in twips. 1440 twips = one inch.

  Dim Str1 As String

  Str1 = "\tx" & LTrim$(Str$(TabStop)) & " "
  Print #FileNum, Str1

End Sub

Sub EmitRTFTopicDivider (FileNum As Integer, TopicHeading As String, ContextString As String, 
                         TitleFootnote As String, BrowseSequence As String)

  ' This routine emits the RTF code to begin a new "topic".
  ' The code consists of a "page break" command followed by
  ' footnotes for the topic's context string, title footnote
  ' for history list, and browse sequence, followed by the
  ' topic heading which appears in a nonscrolling region in
  ' 14 pt. type. Default paragraph formatting and font are
  ' then restored.

  ' signal start of new viewer topic
  Print #FileNum, "\page"
  
  ' write context string footnote as label for this topic
  Call EmitRTFFootnote(FileNum, "#", ContextString)
  
  ' write title footnote to be used in history
  ' window and (for multimedia viewer) in search dialogs
  Call EmitRTFFootnote(FileNum, "$", TitleFootnote)

  ' write browse sequence number footnote
  Call EmitRTFFootnote(FileNum, "+", BrowseSequence)

  ' Write the topic header text, using the keep with next
  ' attribute to put the header in a nonscrolling window
  Print #FileNum, "\keepn \f2\fs28 ";
  Print #FileNum, TopicHeading
  Print #FileNum, "\par "
  
  ' Restore default paragraph formatting and font
  Print #FileNum, "\pard \f2\fs20 {\dtype}"

End Sub

Sub EmitRTFTrailer (FileNum As Integer)

  ' Routine to generate RTF file trailer.
  ' Just emits RTF codes to close out the current
  ' paragraph if any and then close out the current
  ' topic, following all with a closing brace to
  ' balance the initial brace written by the
  ' EmitRTFHeader routine.

  Print #FileNum, "\par"
  Print #FileNum, "\page"
  Print #FileNum, "}"

End Sub
