Go to:  Davar site entry | Site contents | Site index | Personal Computer | PowerBASIC | Text bottom

CONVLNK  PowerBASIC  Procedure

         

CONVLNK procedure (external program executable from the DOS command prompt) converts plain text link list into HTML insert for preexisting specially formatted HTML link page.  This permits to minimize the effort of supporting link lists all editing is done basically by simple cutting-and-pasting into plain text link list using any text editor, while the tedious job of maintaining the hyperlinked HTML link page is handled by the CONVLNK procedure.

Direct dependencies:

COMPRES$ Compress character string
PARSE% Parse character string into substring array
REVERSE$ Reverse character string
TAILSTR$ Get character string tail
PRNTCLR Print colored text to screen
PROGRES Display file processing progress indicator



 CONVLNK  Source  Program                                                              Debugging examples

      ' CONVLNK(2.4)  Conv Plain Text Link List into HTML    02/11/2003-07/21/2005
      ' --------------------------------------------------------------------------
      ' Copyright (C) 2003-2005 by Vladimir Veytsel                  www.davar.net

      ' Type ---------------------------------------------------------------------

      '    Procedure

      ' Parameters (up to 2 Optional Separated by "," or " ") --------------------

      '    1. Name of the links TXT/HTM file (Deflt:  LINKS in the CURRENT direct)

      '    2. Replacement specification (Default:  No replacements)
      '       Form:   <Key_1>-<Val_1>/<Key_2>-<Val_2>/<Key_3>-<Val_3>...
      '       E.g.:   INT-E/INF-H
      '       ("-" is used instead of "=" to simplify setting it via environment)
      '       Up to 10 replacements may be specified as the second parameter.
      '       Replacement might be necessary only for conversion of personal
      '       links that are used instead on Netscape's "Personal Toolbar".
      '       They provide the mechanism to specify local drives for the local
      '       links, so that the same *.TXT personal links file could be adjusted
      '       to the specific computer at the time of links' conversion.

      ' TXT Links File Format ----------------------------------------------------

      '  - First line is always a title, last 10 positions of which represent
      '    link list modification date to be inserted into the <name>.HTM file
      '    first and second lines.  Title should be delimited from dates by
      '    at least TWO spaces.  Year is inserted in the right part of the
      '    Copyright range if one is found.

      '  - Any blank lines are ignored (serve as convenient vertical visual
      '    delimiter) - link formatting is controlled by the indentation only.

      '  - Any lines starting with "*" (which might be preceded by spaces)
      '    are ignored.  This permits to imbed any comments within <name>.TXT
      '    links file as well as to comment out certain lines.

      '  - Line consisting of all "=" terminates reading of plain text links
      '    file.  This permits to keep any links yet to be verified below
      '    this EOF line.

      '  - If replacement is specified, every *.TXT line is checked for the
      '    presence of every specified %<Key_x>%, and, if found, it gets
      '    replaced by the corresponding value.  This permits to tune personal
      '    links during conversion (substitute for "personal toolbar") according
      '    to the specific computer where it has to be used.
      '    E.g.:   Manual (vendor manuals) | file:///%INF%:/Manual/HTM
      '    The "Manual" directory is located on different drives for different
      '    computers of the group, and using %INF% parameter in *.TXT permits
      '    to replace it with the proper drive letter at the time of conversion
      '    (conversion batch script has to take care of that).

      '  - Unindented lines are section headers in the form of:
      '    <text> [(<comment>)] [| <URL>]
      '    <text> represents the name of the section (preferably short, since
      '           it goes into top and bottom internal navigation bars),
      '    <comment> is optional (might be useful to explain short section name),
      '    <URL> is optional and, if used, provides the link to the related
      '          section of the same web site (directory structure), where
      '          the <name>.HTM links page is located.

      '  - Indented lines (indent size is irrelevant - at least one blank
      '    is sufficient) are links in the form of:
      '    <text> [(<comment>)] | <URL>
      '    <text> represents the name of the link,
      '    <comment> is optional,
      '    <URL> provides link to the named page.

      '  - The most obvious way to specify the URL is to specify it complete
      '    with the protocol, i.e., "http://www.davar.net", not "www.davar.net".
      '    However, it's obvious that close to 100% of all URLs will always
      '    start with "http://", and it's pointless and wasteful to specify it
      '    each time.  Exceptions, though negligible in volume, are still very
      '    important, so, while assuming the "http://" as a default, the following
      '    rules are used to handle the exceptions:

      '    - If URL starts with the "_" (protocol is not necessary),
      '         then "_" is trimmed away and the rest of URL is taken as is -
      '              this covers rare, but vital case when it refers to the
      '              page within the same directory structure.
      '    - If URL contains "://" within the first 8 characters
      '         (protocol is specified explicitly),
      '         then URL is taken as is - this covers the cases when either
      '              "http://" is already specified (e.g.:  got there by
      '              cut-and-paste), or another protocol is necessary for
      '              this link, e.g.:  "https://", or "ftp://", or "file:///"
      '    - If none of the above conditions is met (protocol is defaulted),
      '         then "http://" is inserted in front of specified URL.

      '    Note:   The above doesn't apply to section links - they are needed only
      '           for cross-references (if any) within the same web site (directory
      '           structure), and for this reason are always taken as is.

      '  - E.g.:

      '    Client / Server Links  (DAVAR\CS\LINKS.TXT)  09/27/2001-08/29/2002

      '    Reference | REFER/REFER.HTM

      '     On-Line Dictionary of Computing | wombat.doc.ic.ac.uk/foldoc
      '     Dictionary of PC Hardware and Data Communication Terms | www.oreilly...

      '    UNIX

      '     UNIX References (HTML and PDF, University of Northern Carolina) | help...
      '     UNIX Commands (University of Central Florida) | www.acs.ucf.edu/man...

      ' HTM Links File Format ----------------------------------------------------

      '  - HTML prologue of the <name>.HTM links page that is finished by the line
      '    "<!-- Links Start -->" (possibly padded with blanks on on both or any
      '    side).  Indent of this line (if any) is used as the BASE indent for
      '    all converted links.

      '  - List of links to be substituted by the newly generated from <name>.TXT
      '    file.  Note:  There is no <HR> before the FIRST section.

      '  - E.g.:

      '    <CENTER><FONT SIZE=4 COLOR=Red><B><U>Client / Server  Links</U></B></FONT></CENTER>
      '    <BR><!--------------------------------------------------------------->
      '        <A NAME="Reference"></A>
      '        <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0>
      '          <TR>
      '            <TD> <A HREF="REFER/REFER.HTM"><I><B>Reference</B></I></A></TD>
      '            <TD ALIGN=Right>
      '              <I>
      '                <FONT COLOR=Green>Go to:</FONT> 
      '                                          <A HREF="#UNIX">Next sect</A>
      '                <FONT COLOR=Green>|</FONT>
      '                                          <A HREF="#Bottom">List bot</A> 
      '              </I>
      '            </TD>
      '          </TR>
      '        </TABLE>
      '             
      '        <A HREF="http://wombat.doc.ic.ac.uk/foldoc/index.html">
      '           On-Line Dictionary of Computing</A>
      '    <BR>     
      '        <A HREF="http://www.oreilly.com/reference/dictionary/">
      '           Dictionary of PC Hardware and Data Communication Terms</A>
      '    <HR><!--------------------------------------------------------------->
      '        <A NAME="UNIX"></A>
      '        <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0>
      '          <TR>
      '            <TD> <FONT COLOR=Navy><I><B>UNIX</B></I></FONT></TD>
      '            <TD ALIGN=Right>
      '              <I>
      '                <FONT COLOR=Green>Go to:</FONT> 
      '                                          <A HREF="#Top">List top</A>
      '                <FONT COLOR=Green>|</FONT>
      '                                          <A HREF="#Reference">Prev sect</A>
      '                <FONT COLOR=Green>|</FONT>
      '                                          <A HREF="#Solaris">Next sect</A>
      '                <FONT COLOR=Green>|</FONT>
      '                                          <A HREF="#Bottom">List bot</A> 
      '              </I>
      '            </TD>
      '          </TR>
      '        </TABLE>
      '             
      '        <A HREF="http://help.unc.edu/index.xsp?id=1603&trail=1146,1603&sort=score&">
      '           UNIX References</A>  (University of Northern Carolina  HTML and PDF)
      '    <BR>     
      '        <A HREF="http://www.acs.ucf.edu/manuals/unix/commands.html">
      '           UNIX Commands</A>  (University of Central Florida)
      '    <BR>     
      '        <A HREF="http://www.acs.ucf.edu/manuals/unix/email.html">
      '           E-Mail</A>  (University of Central Florida)

      '  - HTML epilogue of the <name>.HTM links page that is started by the line
      '    "<!-- Links Finish -->".

      ' Action -------------------------------------------------------------------

      '  - Reads <name>.TXT file and saves section titles to be used for
      '    generating of the internal navigation links.

      '  - Reads <name>.HTM file until it encounterers the line
      '    "<!-- Links Start -->".  Every line of input file <name>.HTM gets
      '    copied to temporary file <name>.ZZZ; modification date in the first
      '    two lines being substituted by modification date from <name>.TXT file.

      '  - Skips all lines of <name>.HTM file up to "<!-- Links Finish --> line.

      '  - Writes top internal navigation bar to the <name>.ZZZ file.

      '  - Converts all links in <name>.TXT file writing their HTML text to the
      '    <name>.ZZZ file.

      '  - Writes bottom internal navigation bar to the <name>.ZZZ file.

      '  - Writes to the <name>.ZZZ file "<!-- Links Finish --> line.

      '  - Reads <name>.HTM file up to its end copying every line to <name>.ZZZ
      '    file.

      '  - Deletes <name>.HTM file.

      '  - Renames <name>.ZZZ file file into <name>.HTM file.

      ' Notes --------------------------------------------------------------------

      '  - CONVLNK serves to support the 2-level link hierarchy that is quite
      '    sufficient for most practical purposes.

      '    1. Link page    within the web  site.
      '    2. Link section within the link page.

      '  - To avoid any possible problems with the presentation of delimiter lines
      '    "<!-- Links Start -->" and  <!-- Links Finish -->" text of lines read
      '    gets converted to the upper case before testing for delimiter line,
      '    all successive internal spaces get compressed to single space, and
      '    external spaces get truncated.

      '  - If the line that immediately precedes the "<!-- Links Start -->"
      '    delimiter line ends with "<I>", internal inter-section navigation
      '    bars at section title get italicized.

      '  - CONVLNK is supposed to be triggered by batch script that checks if the
      '    <name>.TXT file date-time is later than that of the <name>.HTM file,
      '    in which case CONVLNK is called to refresh the <name>.HTM file.

      '  - This procedure presumes that ALL changes to the links list are done
      '    ONLY in the corresponding <name>.TXT file.  Any direct changes to the
      '    links body of the <name>.HTM file will be overwritten by the nearest
      '    CONVLNK run.

      '  - CONVLNK also is suited to be run from command line to convert the
      '    individual links file.  In this case the most simple way is to run
      '    CONVLNK within the current directory of the links file.

      '  - CONVLNK operation is controlled by processing flags that are defined
      '    separately as string constants and are expected to be present in the
      '    <name>.HTM file.  Their absence in an anticipated context will yield
      '    an unpredictable results.

      ' External SubProgram Library ----------------------------------------------

           $LINK "MODULE.PBL"

      ' External Functions -------------------------------------------------------

           DECLARE FUNCTION COMPRES$(Strng$,Chars$)
           DECLARE FUNCTION PARSE%  (Strng$,SubStr$(),Delim$)
           DECLARE FUNCTION REVERSE$(Strng$)
           DECLARE FUNCTION TAILSTR$(Strng$,Delim$)

      ' External Routine ---------------------------------------------------------

           DECLARE SUB PRNTCLR(Text$)
           DECLARE SUB PROGRES(File%,Nam$,Title$,Record$,Mode$,Appear$)

      ' Start Procedure ----------------------------------------------------------

           DEFINT A-Z     ' All defaulted variables are integer
           OPTION BASE 1  ' Default array indexation starts from "1"

      ' Constants ----------------------------------------------------------------

           Q$ =CHR$(34)  ' Quotation mark
           HR$="<HR><!--------------------------------------------------------------->"

      ' Processing Flags ---------------------------------------------------------

           Copyright$   ="<!-- Copyright (C)"

           Top.Nav.Bar$ ="Go to:</FONT>  <A HREF="
           Bot.Tag$     ="<A HREF="+Q$+"#Bottom"+Q$+">"

           Links.Start$ ="<!-- LINKS START -->"
           Links.Finish$="<!-- LINKS FINISH -->"

      ' Working Variables --------------------------------------------------------

           DIM Parameter$(2)
           DIM Repl$(10)
           DIM Src$(10)
           DIM Trg$(10)

      ' Get and Validate Control Parameter (Links' File Name) --------------------

           Parm$=UCASE$(COMMAND$)
      '    Parm$="C:\DEBUG\LINKS-X"        ' Non-existent LINKS-X.TXT file
      '    Parm$="C:\DEBUG\LINKS-0"        ' Non-existent LINKS-0.HTM file
      '    Parm$="C:\DEBUG\LINKS-1"        ' Single section  layout
      '    Parm$="C:\DEBUG\LINKS-2"        ' Two    sections layout
      '    Parm$="C:\DEBUG\LINKS-3"        ' Three  sections layout
      '    Parm$="C:\DEBUG\LINKS-R"        ' Regular font test (no Italics)
      '    Parm$="C:\DEBUG\LINKS-M"        ' Mother's links (special formats)
      '    Parm$="C:\DEBUG\LINKS-V,INF-H"  ' Vlad's personal links (toolbar equivalent)

           I=PARSE%(Parm$,Parameter$(),"")

      ' Form File Name Actual Value ----------------------------------------------

           File.Name$=Parameter$(1)
           IF (File.Name$="") THEN
               File.Name$="LINKS"
           END IF

      ' Form Replacement Table ---------------------------------------------------

           IF (I>1) THEN
              Replacements=PARSE%(Parameter$(2),Repl$(),"/")
              FOR I=1 TO Replacements
                  Src$(I)="%"+EXTRACT$(Repl$(I),"-")+"%"
                  Trg$(I)=    TAILSTR$(Repl$(I),"-")
              NEXT I
           END IF

      ' Check Files' Existence ---------------------------------------------------

           IF (LEN(DIR$(File.Name$+".TXT"))=0) THEN
              CALL PRNTCLR("%R%CONVLNK(2.4)  Text file %M%"+File.Name$+".TXT %R%doesn't exist - %M%program stopped%D%")
              STOP
           END IF

           IF (LEN(DIR$(File.Name$+".HTM"))=0) THEN
              CALL PRNTCLR("%R%CONVLNK(2.4)  Link file %M%"+File.Name$+".TXT %R%doesn't exist - %M%program stopped%D%")
              STOP
           END IF

      ' Allocate Array for Section Titles ----------------------------------------

           OPEN File.Name$+".TXT" FOR  INPUT AS #2
           LINE INPUT #2,Link.Line$  ' Skip link list title

           WHILE NOT EOF(2)
                 LINE INPUT #2,Link.Line$
                 IF (LEFT$(Link.Line$,1)<>" ") THEN  ' Section title
                    Max.Sections=Max.Sections+1
                 END IF
           WEND

           CLOSE

           DIM Section$(Max.Sections)

      ' Read and Save Section Titles ---------------------------------------------

           OPEN File.Name$+".TXT" FOR  INPUT AS #2
           LINE INPUT #2,Link.Line$  ' Skip link list title

           WHILE NOT EOF(2)
                 LINE INPUT #2,Link.Line$
                 IF (Link.Line$="") THEN ITERATE  ' Ignore blank line
                 IF (LEFT$(LTRIM$(Link.Line$),1)="*") THEN ITERATE  ' Ignore comment line
                 IF (VERIFY(Link.Line$,"=")=0) THEN EXIT  ' EOF line of all "="
                 IF (LEFT$(Link.Line$,1)<>" ") THEN
                    IF (INSTR(Link.Line$,"(")>0) THEN
                       Section.Title$=COMPRES$(LTRIM$(RTRIM$(EXTRACT$(Link.Line$,"(")))," ")
                    ELSEIF (INSTR(Link.Line$,"|")>0) THEN
                       Section.Title$=COMPRES$(LTRIM$(RTRIM$(EXTRACT$(Link.Line$,"|")))," ")
                    ELSE
                       Section.Title$=LTRIM$(RTRIM$(Link.Line$))
                    END IF
                    Sections=Sections+1
                    Section$(Sections)=Section.Title$
                 END IF
           WEND

           CLOSE

      ' Open Data Files ----------------------------------------------------------

           OPEN File.Name$+".HTM" FOR  INPUT AS #1
           OPEN File.Name$+".TXT" FOR  INPUT AS #2
           OPEN File.Name$+".ZZZ" FOR OUTPUT AS #3

      ' Get Link List Title and New <name>.HTM Date from <name>.TXT --------------

           CALL PROGRES(1,"CONVLNK(2.4)","Convert Link List "+File.Name$+".TXT"+" into HTML","","S","")

           LINE INPUT #1,HTML.Line$
           LINE INPUT #2,Link.Line$
           PRINT #3,LEFT$(HTML.Line$,LEN(HTML.Line$)-14);RIGHT$(Link.Line$,10);" -->"
           Year$=RIGHT$(Link.Line$,4)

           Work$=LTRIM$(EXTRACT$(Link.Line$,"  "))
           Title$=LEFT$(Work$,1)
           FOR I=2 TO LEN(Work$)-1
               IF (MID$(Work$,I,1)=" ") THEN
                  IF ((UCASE$(MID$(Work$,I-1,1))<>LCASE$(MID$(Work$,I-1,1)))AND _
                      (UCASE$(MID$(Work$,I+1,1))<>LCASE$(MID$(Work$,I+1,1)))) THEN
                     Title$=Title$+"  "
                  ELSE
                     Title$=Title$+" "
                  END IF
               ELSE
                  Title$=Title$+MID$(Work$,I,1)
               END IF
           NEXT I
           Title$=Title$+RIGHT$(Work$,1)

           LINE INPUT #1,HTML.Line$
           PRINT #3,LEFT$(HTML.Line$,LEN(HTML.Line$)-14);RIGHT$(Link.Line$,10);" -->"

      ' Insert Converted Links into Links HTML Text ------------------------------

           WHILE NOT EOF(1)
                 Prev.Line$=HTML.Line$
                 LINE INPUT #1,HTML.Line$
                 IF (LEFT$(HTML.Line$,18)=Copyright$) THEN
                    PRINT #3,LEFT$(HTML.Line$,24);Year$;MID$(HTML.Line$,29)
                 ELSEIF (INSTR(HTML.Line$,Top.Nav.Bar$)>0) THEN
                    Top.Nav=-1
                    Nav.Length=LEN(EXTRACT$(MID$(LTRIM$(REVERSE$(HTML.Line$)),5),">"))+9
                    PRINT #3,HTML.Line$
                 ELSEIF (Top.Nav) THEN
                    Nav.Length=Nav.Length+LEN(EXTRACT$(MID$(LTRIM$(REVERSE$(HTML.Line$)),5),">"))+3
                    PRINT #3,HTML.Line$
                    IF (INSTR(HTML.Line$,Bot.Tag$)>0) THEN
                       Top.Nav=0
                       Nav.Length=Nav.Length-3
                    END IF
                 ELSEIF (UCASE$(LTRIM$(RTRIM$(HTML.Line$)))=Links.Start$) THEN
                    Links.Body=-1
                    IF (RIGHT$(RTRIM$(Prev.Line$),3)="<I>") THEN
                       Italics=-1
                    END IF
                    Base.Pos=VERIFY(HTML.Line$," ")
                    Base.Pos.4=Base.Pos+4
                    Base.Pos.6=Base.Pos+6
                    Base.Pos.7=Base.Pos+7
                    Base.Pos.8=Base.Pos+8
                    Base.Pos.12=Base.Pos+12
                    Base.Pos.13=Base.Pos+13
                    Base.Pos.18=Base.Pos+18
                    Base.Pos.19=Base.Pos+19
                    Base.Pos.29=Base.Pos+29
                    Base.Pos.37=Base.Pos+37
                    PRINT #3,TAB(Base.Pos);"<!-- Links Start -->"
                 ELSEIF (UCASE$(LTRIM$(RTRIM$(HTML.Line$)))=Links.Finish$) THEN
                    Links.Body=0
                    GOSUB Convert.and.Insert.Links
                    PRINT #3,TAB(Base.Pos);"<!-- Links Finish -->"
                 ELSEIF (NOT Links.Body) THEN
                    PRINT #3,HTML.Line$
                 END IF
           WEND

      ' Finish Program -----------------------------------------------------------

           CALL PROGRES(1,"","","","F","")

           CLOSE

           KILL File.Name$+".HTM"
           NAME File.Name$+".ZZZ" AS File.Name$+".HTM"

           END

      Convert.and.Insert.Links:   ' Routine ---------------------------------------

           GOSUB Write.Internal.Navigation.Bar

           WHILE NOT EOF(2)
                 LINE INPUT #2,Link.Line$
                 CALL PROGRES(1,"","",Link.Line$,"P","")
                 IF (Link.Line$="") THEN ITERATE  ' Ignore blank line
                 IF (LEFT$(LTRIM$(Link.Line$),1)="*") THEN ITERATE  ' Ignore comment line
                 IF (VERIFY(Link.Line$,"=")=0) THEN EXIT  ' EOF line of all "="
                 IF (Replacements>0) THEN
                    FOR I=1 TO Replacements
                        REPLACE Src$(I) WITH Trg$(I) IN Link.Line$
                    NEXT I
                 END IF
                 IF (LEFT$(Link.Line$,1)<>" ") THEN  ' Process section header
                    Curr.Sect=Curr.Sect+1
                    IF (INSTR(Link.Line$,"|")>0) THEN
                       Section.Title$=COMPRES$(LTRIM$(RTRIM$(EXTRACT$(Link.Line$,"|")))," ")
                       Section.Link$ =COMPRES$(LTRIM$(RTRIM$(TAILSTR$(Link.Line$,"|")))," ")
                    ELSE
                       Section.Title$=LTRIM$(RTRIM$(Link.Line$))
                       Section.Link$ =""
                    END IF
                    IF (INSTR(Section.Title$,"(")>0) THEN
                       Section.Comm$ ="("+LTRIM$(RTRIM$(TAILSTR$(Section.Title$,"(")))+" "
                       Section.Title$=    LTRIM$(RTRIM$(EXTRACT$(Section.Title$,"(")))
                    ELSE
                       Section.Comm$ =""
                    END IF
                    GOSUB Write.Section.Entry
                 ELSE  ' Process link
                    Link.Name$=COMPRES$(LTRIM$(RTRIM$(EXTRACT$(Link.Line$,"|")))," ")
                    Link.URL$ =COMPRES$(LTRIM$(RTRIM$(TAILSTR$(Link.Line$,"|")))," ")
                    IF (LEFT$(Link.URL$,1)="_") THEN
                       Link.URL$=MID$(Link.URL$,2)
                    ELSEIF (INSTR(LEFT$(Link.URL$,8),"://")=0) THEN
                       Link.URL$="http://"+Link.URL$
                    END IF
                    Link.Comm$=""
                    IF (INSTR(Link.Name$,"(")>0) THEN
                       Link.Comm$="("+TAILSTR$(Link.Name$,"(")
                       Link.Name$=RTRIM$(LTRIM$(EXTRACT$(Link.Name$,"(")))
                    END IF
                    GOSUB Write.Link.Entry
                 END IF
           WEND

           GOSUB Write.Internal.Navigation.Bar

           RETURN  ' From Convert.and.Insert.Links routine

      Write.Internal.Navigation.Bar:   ' Routine ----------------------------------

           IF (Sections=1) THEN RETURN  ' From Write.Internal.Navigation.Bar Routine

           Top.Bar=(Curr.Sect=0)

           IF (NOT(Top.Bar)) THEN  ' Bottom internal navigation bar
              PRINT #3,TAB(Base.Pos);HR$
           END IF

           PRINT #3,TAB(Base.Pos);"<CENTER>"
           PRINT #3,TAB(Base.Pos);"  <FONT COLOR=Green> Go to:</FONT> "
           Bar.Length=8

           FOR I=1-Top.Bar TO Sections  ' Start with "2" for Top Bar
               IF (Bar.Length+3+LEN(Section$(I))<Nav.Length) THEN
                  IF (I=1-Top.Bar) THEN
                     PRINT #3,TAB(Base.Pos.29);"<A HREF=";Q$;"#";Section$(I);Q$;">";Section$(I);"</A>"
                     Bar.Length=Bar.Length+LEN(Section$(I))
                  ELSE
                     PRINT #3,TAB(Base.Pos);"  <FONT COLOR=Green>|</FONT> <A HREF=";Q$;"#";Section$(I);Q$;">";Section$(I);"</A> "
                     Bar.Length=Bar.Length+LEN(Section$(I))+3
                  END IF
               ELSE
                  PRINT #3,TAB(Base.Pos.13);" <BR> <A HREF=";Q$;"#";Section$(I);Q$;">";Section$(I);"</A>"
                  Bar.Length=LEN(Section$(I))
               END IF
           NEXT I

           PRINT #3,TAB(Base.Pos);"</CENTER>"
           IF (Top.Bar) THEN
              PRINT #3,TAB(Base.Pos);HR$
           END IF

           RETURN  ' From Write.Internal.Navigation.Bar routine

      Write.Section.Entry:   ' Routine --------------------------------------------

           IF (Curr.Sect=1) THEN
              PRINT #3,TAB(Base.Pos);"<CENTER><FONT SIZE=4 COLOR=Red><B><U>";Title$;"</U></B></FONT></CENTER>"
              PRINT #3,TAB(Base.Pos);"<BR><!--------------------------------------------------------------->"
           ELSE
              PRINT #3,TAB(Base.Pos);HR$
           END IF

           IF (Sections=1) THEN
              PRINT #3,TAB(Base.Pos.4);
              GOSUB Write.Section.Title
              RETURN  ' From Write.Section.Title routine
           END IF

           PRINT #3,TAB(Base.Pos.4);"<A NAME=";Q$;Section.Title$;Q$;"></A>"
           PRINT #3,TAB(Base.Pos.4);"<TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0>"
           PRINT #3,TAB(Base.Pos.6);"<TR>"
           PRINT #3,TAB(Base.Pos.8);"<TD>";
           GOSUB Write.Section.Title
           PRINT #3,"</TD>"

           PRINT #3,TAB(Base.Pos.8);"<TD ALIGN=Right>"
           IF (Italics) THEN
              PRINT #3,TAB(Base.Pos.8);"  <I>"
           END IF
           PRINT #3,TAB(Base.Pos.8);"    <FONT COLOR=Green>Go to:</FONT> "
           PRINT #3,TAB(Base.Pos.37);"<A HREF=";Q$;"#Top";Q$;">List top</A>"

           IF (Curr.Sect=1) THEN
              PRINT #3,TAB(Base.Pos.12);"<FONT COLOR=Green>|</FONT>"
              PRINT #3,TAB(Base.Pos.37);"<A HREF=";Q$;"#";Section$(Curr.Sect+1);Q$;">Next section</A>"
              PRINT #3,TAB(Base.Pos.12);"<FONT COLOR=Green>|</FONT>"
              PRINT #3,TAB(Base.Pos.37);"<A HREF=";Q$;"#Bottom";Q$;">List bottom</A> "
           ELSEIF (Curr.Sect=Sections) THEN
              PRINT #3,TAB(Base.Pos.12);"<FONT COLOR=Green>|</FONT>"
              PRINT #3,TAB(Base.Pos.37);"<A HREF=";Q$;"#";Section$(Curr.Sect-1);Q$;">Previous section</A>"
              PRINT #3,TAB(Base.Pos.12);"<FONT COLOR=Green>|</FONT>"
              PRINT #3,TAB(Base.Pos.37);"<A HREF=";Q$;"#Bottom";Q$;">List bottom</A> "
           ELSE
              IF (Curr.Sect>1) THEN
                 PRINT #3,TAB(Base.Pos.12);"<FONT COLOR=Green>|</FONT>"
                 PRINT #3,TAB(Base.Pos.37);"<A HREF=";Q$;"#";Section$(Curr.Sect-1);Q$;">Prev sect</A>"
              END IF
              IF (Curr.Sect<Sections) THEN
                 PRINT #3,TAB(Base.Pos.12);"<FONT COLOR=Green>|</FONT>"
                 PRINT #3,TAB(Base.Pos.37);"<A HREF=";Q$;"#";Section$(Curr.Sect+1);Q$;">Next sect</A>"
              END IF
              PRINT #3,TAB(Base.Pos.12);"<FONT COLOR=Green>|</FONT>"
              PRINT #3,TAB(Base.Pos.37);"<A HREF=";Q$;"#Bottom";Q$;">List bot</A> "
           END IF

           IF (Italics) THEN
              PRINT #3,TAB(Base.Pos.8);"  </I>"
           END IF
           PRINT #3,TAB(Base.Pos.8);"</TD>"
           PRINT #3,TAB(Base.Pos.6);"</TR>"
           PRINT #3,TAB(Base.Pos.4);"</TABLE>"

           First.Link=-1  ' For spec prefix of the first link after section title
                          ' (for the multisection page only)

           RETURN  ' From Write.Section.Entry routine

      Write.Link.Entry:   ' Routine -----------------------------------------------

           IF (First.Link) THEN
              PRINT #3,TAB(Base.Pos.4);"     "
              First.Link=0
           ELSE
              PRINT #3,TAB(Base.Pos);"<BR>     "
           END IF

           PRINT #3,TAB(Base.Pos.4);"<A HREF=";Q$;Link.URL$;Q$;">"

           PRINT #3,TAB(Base.Pos.7);Link.Name$;"</A>";
           IF (Link.Comm$<>"") THEN
              PRINT #3,"  ";Link.Comm$
           END IF

           RETURN  ' From Write.Section.Link routine

      Write.Section.Title:   ' Routine --------------------------------------------

           IF (Section.Link$ ="") THEN
              IF (Italics) THEN
                 PRINT #3," <FONT COLOR=Navy><I><B>";Section.Title$;"</B></I></FONT>";
              ELSE
                 PRINT #3," <FONT COLOR=Navy><B>";Section.Title$;"</B></FONT>";
              END IF
           ELSE
              IF (Italics) THEN
                 PRINT #3," <A HREF=";Q$;Section.Link$;Q$;"><I><B>";Section.Title$;"</B></I></A>";
              ELSE
                 PRINT #3," <A HREF=";Q$;Section.Link$;Q$;"><B>";Section.Title$;"</B></A>";
              END IF
           END IF

           IF (Section.Comm$<>"") THEN
              IF (Italics) THEN
                 PRINT #3,"  <I>";Section.Comm$;"</I>";
              ELSE
                 PRINT #3,"  ";Section.Comm$;
              END IF
           END IF

           RETURN  ' From Write.Section.Title routine
  
         

 CONVLNK  Debugging  Examples                                                                       Source program
         

For each test case below (defined by uncommenting the corresponding Parm$ line) the CONVLNK program was executed with the corresponding *.TXT and *.HTM files as its input.

         

   Parm$="C:\DEBUG\LINKS-X"        ' Non-existent LINKS-X.TXT file
   Parm$="C:\DEBUG\LINKS-0"        ' Non-existent LINKS-0.HTM file
   Parm$="C:\DEBUG\LINKS-1"        ' Single section  layout
   Parm$="C:\DEBUG\LINKS-2"        ' Two    sections layout
   Parm$="C:\DEBUG\LINKS-3"        ' Three  sections layout
   Parm$="C:\DEBUG\LINKS-R"        ' Regular font test (no Italics)
   Parm$="C:\DEBUG\LINKS-M"        ' Mother's links (special formats)
   Parm$="C:\DEBUG\LINKS-V,INF-H"  ' Vlad's personal links (toolbar equivalent)
        
      
         

   Thu  7-21-05  8:10  C:\> PBE CONVLNK
   CONVLNK(2.4)  Text file C:\DEBUG\LINKS-X.TXT doesn't exist - program stopped
   CONVLNK(2.4)  Link file C:\DEBUG\LINKS-0.HTM doesn't exist - program stopped
   CONVLNK(2.4)  Convert Link List C:\DEBUG\LINKS-1.TXT into HTML
      100% [*]   ================================================
   CONVLNK(2.4)  Convert Link List C:\DEBUG\LINKS-2.TXT into HTML
      100% [*]   ================================================
   CONVLNK(2.4)  Convert Link List C:\DEBUG\LINKS-3.TXT into HTML
      100% [*]   ================================================
   CONVLNK(2.4)  Convert Link List C:\DEBUG\LINKS-R.TXT into HTML
      100% [*]   ================================================
   CONVLNK(2.4)  Convert Link List C:\DEBUG\LINKS-M.TXT into HTML
      100% [*]   ================================================
   CONVLNK(2.4)  Convert Link List C:\DEBUG\LINKS-V.TXT into HTML
      100% [*]   ================================================
        
      
         

Results of CONVLNK debugging executions are presented in the table below, where:

  • Plain text links is the name of source plain text link file.
  • HTML link page is the name of the link list in the HTML format.  This is both input and output file that retains its prologue and epilogue, while having it's body substituted by the link list generated by CONVLNK from the plain text link list.
    Note:  HTML link pages are out of their intended context here, so when viewing them please don't click any links except page internal links.
  • HTML source is the name of the file identical to the above one with the HTML tags disabled (every "<" changed to "&lt;") to make source view available.  (Browser "View Source" [Ctrl]+[U] in Netscape is not quite accurate in presenting HTML source).
  • Comment is a brief description of each test case.
Plain text links HTML link page HTML source Comment
LINKS-0.TXT None None Non-existent LINKS-0.HTM file
LINKS-1.TXT LINKS-1.HTM LINKS-1.SRC Single section layout with end-of-list delimiter
LINKS-2.TXT LINKS-2.HTM LINKS-2.SRC Two sections layout
LINKS-3.TXT LINKS-3.HTM LINKS-3.SRC Three sections layout with comment-outs
LINKS-R.TXT LINKS-R.HTM LINKS-R.SRC Regular font test (no Italics)
LINKS-M.TXT LINKS-M.HTM LINKS-M.SRC Mother's links (special formats)
LINKS-V.TXT LINKS-V.HTM LINKS-V.SRC Vlad's personal links (toolbar equivalent)

         

View [and save] CONVLNK.BAS text       Download CONVLNK.EXE file
(Use [Back] button or [Alt]+[CL] to return here from the viewed text)
To make CONVLNK.BAS source text compilable
change globally of "&lt;" into "<" signs and "&amp;" into "&" signs.
Copyright © 20032005 by
Go to:  Davar site entry | Site contents | Site index | Personal Computer | PowerBASIC | Text top