'===========================================================================
' Subject: HTML LISTING OF ABC PACKETS        Date: 11-05-96               
'  Author: Charlie Quante                     Code: QB, PDS                
'  Origin: charlie@charlie.seanet.com       Packet: HTML.ABC
'===========================================================================
'FULL Header Extraction for this Source Code has been Enabled
'Program Name :  ABCINDEX
'Programmed by: Charlie Quante
'Last revised : 11-04-96
'Purpose      : Create an HTML page that lists the contents of any ABC
'               packet.
'----------------------------------------------------------------------------
DECLARE SUB CheckHeading (Heading$(), ABCName$, HeadCount!, TableTitle$, Target)
DECLARE FUNCTION ULCASE$ (X$)
       
        CLS
        DIM ABCIndex AS STRING * 78
        DIM Heading$(2, 50)
        DIM GraphicNumber(50)
        IndexFile = 1
        AbcList = 2
        HtmlPage = 3
        TYPE ABCIndexType
                Code AS STRING * 1
                Position AS STRING * 10
                NumLines AS STRING * 5
                Subject AS STRING * 31
                From AS STRING * 31
        END TYPE
       
        DIM IndexABC AS ABCIndexType
       
        PacketDate$ = COMMAND$
        
        'TestDIR$ = "H:\ABC\"
       
        IF PacketDate$ = "" THEN
                PageName$ = "ABCLIST.HTM"
                PacketDate$ = DATE$
        ELSE
                PageName$ = "LIST" + PacketDate$ + ".HTM"
        END IF
       
        Q$ = CHR$(34)
        LCount = 1

'----------------------------------------------------------------------------         
        OPEN "I", IndexFile, "ABCINDEX.DAT"     'ABCKeyword,SectionTitle,# for graphic

'       ABCINDEX.DAT is an ASCII file that contains the ABC packet keywords,
'       such as MOUSE, TEXT, DOS, etc.  The keyword is followed by a more
'       informative description, and then an integer number that indicates
'       which graphic to use.
'----------------------------------------------------------------------------

        DO WHILE NOT EOF(IndexFile)
                HeadCount = HeadCount + 1

'----------------------------------------------------------------------------          
'               Read the ABC keyword into Heading$(1,HeadCount)

                INPUT #IndexFile, Text$
                Heading$(1, HeadCount) = Text$

'----------------------------------------------------------------------------        
'               Read the description into Heading$(2,HeadCount)            

                INPUT #IndexFile, Text$
                Heading$(2, HeadCount) = Text$

'----------------------------------------------------------------------------
'               Read the graphic number into GraphicNumber(HeadCount)

                INPUT #IndexFile, GraphicNumber(HeadCount)
'----------------------------------------------------------------------------     
        LOOP
        CLOSE #IndexFile

'----------------------------------------------------------------------------     
'       Use a simple bubble sort to alphabetize the keyword array

        Flag = -1
        DO WHILE Flag = -1
                Flag = 0
                FOR I = 1 TO HeadCount - 1
                        IF Heading$(1, I) > Heading$(1, I + 1) THEN
                                SWAP Heading$(1, I), Heading$(1, I + 1)
                                SWAP Heading$(2, I), Heading$(2, I + 1)
                                SWAP GraphicNumber(I), GraphicNumber(I + 1)
                                Flag = -1
                        END IF
                NEXT I
        LOOP

'----------------------------------------------------------------------------
'       Use the SHELL command to get a directory listing of all the
'       *.ABC files, and store the results in ABC.LST

        DosCommand$ = "DIR /A /O:N " + TESTDIR$ + "*.ABC >ABC.LST"
        SHELL DosCommand$
'----------------------------------------------------------------------------

'       Open ABC.LST so we can read the names of the *.ABC files.
'       Also open the PageName$ file so we can start creating our html
'       page listing the contents of the ABC packet.

        OPEN "I", AbcList, "ABC.LST"
        OPEN "O", HtmlPage, PageName$
'----------------------------------------------------------------------------    

'       The first five lines of ABC.LST contain directory information that    
'       we wont need. The For/Next loop skips past them.

        FOR I = 1 TO 5
                LINE INPUT #AbcList, Trash$
        NEXT I

'----------------------------------------------------------------------------
'       Add the opening HTML code, the HEAD code, and the TITLE code to
'       the HTML page.

        PRINT #HtmlPage, "<HTML>"
        PRINT #HtmlPage, "<HEAD>"
        PRINT #HtmlPage, "<TITLE>";
        PRINT #HtmlPage, "ABC packet contents for: " + PacketDate$ + "</TITLE>"
        PRINT #HtmlPage, "</HEAD>"
'----------------------------------------------------------------------------

'       Write the BODY command so that it will use a background .GIF file.

        PRINT #HtmlPage, "<BODY BACKGROUND=" + Q$ + "backgrnd.gif" + Q$ + ">"
        PRINT #HtmlPage, " "

'----------------------------------------------------------------------------     
'       Write the main heading for the page.   

        PRINT #HtmlPage, "<CENTER>"
        PRINT #HtmlPage, "<H1><IMG SRC=" + Q$ + "abc" + PacketDate$ + ".gif" + Q$ + " ALT=" + Q$ + "ABC Packet Contents" + Q$ + "></H1>"
        PRINT #HtmlPage, " "

'----------------------------------------------------------------------------    
'       Write the table for the main menu, and all the hyperlinks to the
'       different ABC catagories included in the packet.

        PRINT #HtmlPage, "<A NAME=" + Q$ + "Index" + Q$ + "><HR ALIGN=RIGHT WIDTH=90%><BR>"

        PRINT #HtmlPage, "<TABLE CELLPADDING=3 BORDER=3 WIDTH=475>"
        PRINT #HtmlPage, "<TR>"
        PRINT #HtmlPage, "    <TD COLSPAN=3 ALIGN=CENTER><IMG SRC=" + Q$ + "abcmenu.gif" + Q$ + " ALT=" + Q$ + "Menu" + Q$ + "></TD>"
        PRINT #HtmlPage, "</TR>"
       
        TotalCount = 1
        RowCount = 1
        PRINT #HtmlPage, "<TR>"
        DO WHILE NOT (EOF(2))
                LINE INPUT #AbcList, ABCName$
                CheckHeading Heading$(), ABCName$, HeadCount, TableTitle$, Target
                IF LEFT$(ABCName$, 1) <> " " THEN
                        HyperLink$ = LTRIM$(STR$(TotalCount))
                        PRINT #HtmlPage, "    <TD><B>";
                        PRINT #HtmlPage, "<IMG SRC=" + Q$ + "blue.gif" + Q$ + " ALT=" + Q$ + "*" + Q$ + "> ";
                        PRINT #HtmlPage, "<A HREF=" + Q$ + "#L" + HyperLink$ + Q$ + ">" + TableTitle$ + "</A>";
                        PRINT #HtmlPage, "</B></TD>"
                        RowCount = RowCount + 1
                        TotalCount = TotalCount + 1
                END IF
                IF RowCount = 4 THEN
                        RowCount = 1
                        PRINT #HtmlPage, "</TR>"
                        PRINT #HtmlPage, " "
                        PRINT #HtmlPage, "<TR>"
                END IF
        LOOP
        PRINT #HtmlPage, "</TR>"
        PRINT #HtmlPage, "</TABLE>"
        PRINT #HtmlPage, " "
        
        RESTORE IndexABC
        READ Text$
        PRINT #HtmlPage, "<BR>";
        PRINT #HtmlPage, "<B>";
        PRINT #HtmlPage, Text$; PacketDate$ + CHR$(34) + ">Previous page</A> |"
        PRINT #HtmlPage, "</B>"
        PRINT #HtmlPage, " "
       
        CLOSE #AbcList
        
        OPEN "I", AbcList, "ABC.LST"
        FOR I = 1 TO 5
                LINE INPUT #AbcList, Trash$
        NEXT I
        
        DO WHILE NOT EOF(2)
                LINE INPUT #AbcList, ABCName$
                IF LEFT$(ABCName$, 1) <> " " THEN
                        CheckHeading Heading$(), ABCName$, HeadCount, TableTitle$, Target
                        GraphicCode$ = LTRIM$(STR$(GraphicNumber(Target)))
                        HyperLink$ = LTRIM$(STR$(LCount))
                        PRINT #HtmlPage, "<BR><A NAME=" + Q$ + "L" + HyperLink$ + Q$ + "><HR ALIGN=RIGHT WIDTH=90%><BR>"
                        PRINT #HtmlPage, "<TABLE CELLPADDING=3 BORDER=3 WIDTH=475>"
                        PRINT #HtmlPage, "<TR>"
                        PRINT #HtmlPage, "    <TD COLSPAN=2 ALIGN=CENTER><H3>"
                        PRINT #HtmlPage, "       <IMG SRC="; Q$; "list" + GraphicCode$ + ".gif" + Q$ + " ALT = " + Q$ + TableTitle$ + Q$ + " > "; ""
                        PRINT #HtmlPage, "    </H3></TD>"
                        PRINT #HtmlPage, "</TR>"
                        PRINT #HtmlPage, " "
                        LCount = LCount + 1
                        DEX$ = RTRIM$(LEFT$(ABCName$, 8)) + ".IDX"
                        IndexFile$ = DEX$  ' and make sure they exist.
                        COUNT = 0
                       
                        OPEN TESTDIR$ + IndexFile$ FOR BINARY AS #IndexFile  ' Open the .IDX file
                       
                        DO WHILE NOT EOF(1)
                                GET #IndexFile, , ABCIndex      ' Get first record (Nah, too easy, always 1)
                                Temporary$ = ABCIndex
                               
                                IndexABC.Code = LEFT$(Temporary$, 1)
                                IndexABC.Position = MID$(Temporary$, 2, 10)
                                IndexABC.NumLines = MID$(Temporary$, 12, 5)
                                IndexABC.Subject = MID$(Temporary$, 17, 31)
                                IndexABC.From = RIGHT$(Temporary$, 31)
                                COUNT = COUNT + 1
                                LOCATE 1, 1, 0
                                R = INT(RND * 16) + 1
                                COLOR 15, 0
                                PRINT "ABC Index processing:";
                                LOCATE 1, 23, 0
                                PRINT STRING$(30, 32);
                                IP = IP + 1
                                IF IP > 20 THEN IP = 20
                                LOCATE 1, 23, 0
                                COLOR R, 0
                                PRINT STRING$(IP, "þ");
                               
                                IF VAL(IndexABC.NumLines) > 0 THEN
                                        IndexABC.Subject = RTRIM$(IndexABC.Subject)
                                        IndexABC.Subject = ULCASE$(IndexABC.Subject)
                                        PRINT #HtmlPage, "<TR>"
                                        PRINT #HtmlPage, "    <TD>";
                                        PRINT #HtmlPage, "<B>"; RTRIM$(IndexABC.Subject); "</B>";
                                        PRINT #HtmlPage, "</TD>";
                                        PRINT #HtmlPage, " <TD>";
                                        PRINT #HtmlPage, RTRIM$(IndexABC.From);
                                        PRINT #HtmlPage, "</TD>"
                                        PRINT #HtmlPage, "</TR>"
                                END IF
                        LOOP
               
                        PRINT #HtmlPage, "</TABLE>"
                        PRINT #HtmlPage, " "
                        PRINT #HtmlPage, "<BR>"
                       
                        RESTORE IndexABC
                        READ Text$
                        PRINT #HtmlPage, "<B>";
                        PRINT #HtmlPage, Text$; PacketDate$ + CHR$(34) + ">Previous page</A> |"
                        PRINT #HtmlPage, "</B>"
                        PRINT #HtmlPage, " "
                       
                        CLOSE #IndexFile
                END IF
        LOOP
       
        PRINT #HtmlPage, "</CENTER>"
        PRINT #HtmlPage, "</HTML>"
       
        CLOSE


IndexABC:
        DATA | <A HREF="#Index">Menu</A> | <A HREF="http://charlie.simplenet.com/abc/thefiles.html#List
END

SUB CheckHeading (Heading$(), ABCName$, HeadCount, TableTitle$, Target)
        Test = INSTR(ABCName$, " ")
        Test$ = LEFT$(ABCName$, Test - 1)
        FOR ICH = 1 TO HeadCount
                IF Test$ = Heading$(1, ICH) THEN
                        Flag = -1
                        Target = ICH
                        EXIT FOR
                END IF
        NEXT ICH

        IF Flag = -1 THEN
               TableTitle$ = Heading$(2, Target)
        ELSE
               TableTitle$ = "*** Possible new heading! [" + Test$ + "] ***"
        END IF
END SUB

FUNCTION ULCASE$ (X$)
        L = LEN(X$)
        Temporary$ = LEFT$(X$, 1)
        FOR J = 2 TO L
                EXTRACT = ASC(MID$(X$, J, 1))
                IF EXTRACT = 32 THEN
                        Temporary$ = Temporary$ + " " + MID$(X$, J + 1, 1)
                        J = J + 1
                ELSE
                        Temporary$ = Temporary$ + CHR$(EXTRACT OR 32)
                END IF
        NEXT J
        ULCASE$ = Temporary$
END FUNCTION

