Option Compare Database 'Use database order for string comparisons Option Explicit Sub EmitRTFFootnote (FileNum As Integer, FootnoteChar As String, FootnoteBody As String) ' Routine to emit an 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 EmitRTFHeader (FileNum As Integer) ' Generate RTF file header using passed file number ' Assumes that the file has been previously opened successfully ' First emit RTF file identifier, default 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, "\red0\green127\blue0;" Print #FileNum, "}" ' Set the default font to Times New Roman Print #FileNum, "\deff0" ' Generate an initial topic separator Print #FileNum, "\page" End Sub Sub EmitRTFHotLink (FileNum As Integer, HotLinkString As String, TargetString As String) ' Routine to emit RTF hotlink to the specified file. ' The RTF encoding for a hotlink is double-underlined text ' followed by hidden text. The double-underlined text is the ' visible portion of the hotlink to be clicked on by the user. ' The hidden text is the "context string" for the target topic. ' Note: Prefixing the hidden text with "%" suppresses visible ' underlining of the hotlink. We assume that the color of the ' text will be set to something other than black elsewhere. Print #FileNum, "{\uldb " & HotLinkString & "}{\v %" & TargetString & "}" End Sub Sub EmitRTFTabStopInches (FileNum As Integer, TabStop As Variant) ' Called with tab stop in fractional or integer inches. ' Converts inches to Twips and calls EmitRTFTabStopTwips to ' generate the RTF command. Call EmitRTFTabStopTwips(FileNum, Int(TabStop * 1440)) End Sub Sub EmitRTFTabStopTwips (FileNum As Integer, TabStop As Integer) ' Generates the RTF command to set a tab stop. ' 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, TopicTitle As String, ContextString As String, KeywordString 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, keyword list, and browse sequence, followed ' by the topic heading which appears in a nonscrolling region ' in 14 pt. type. The 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 keyword footnote iff keyword string was supplied If KeywordString <> "" Then ' write keyword string footnote for use with Search button Call EmitRTFFootnote(FileNum, "K", KeywordString) End If ' write browse sequence footnote iff browse sequence was supplied If BrowseSequence <> "" Then ' write browse sequence number footnote Call EmitRTFFootnote(FileNum, "+", BrowseSequence) End If ' 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, TopicTitle Print #FileNum, "\par " ' Restore default paragraph formatting and font. ' The {dtype} command is needed for the multimedia compiler's ' full-text indexing, but does no harm if the WinHelp ' compiler is used instead. 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 [[caption]] Figure 3: These RTF generator routines were used to build the WinHelp version of the employee database.