| 
| 
        |  | 
                About Giovanni's Boats CGI Demo
                 |  |   |  |  | 
|  | 
| 
| 
 1. BOATSCH0 Program 
        BOATSCH0 is activated by HTML member
        
        DEMOMENU in source file DEMOHTML
        when the following button is pressed
         Program flowThe main job of this program is to write the HTML which will be input to
        program BOATSCH1 (boat search form), setting up the background color selected by
        the web user and other related colors used in the body of the HTML. 
        Note.
        This same technique of generating output HTML with variable
        background, links and texts colors is adopted for the other
        two programs of this demo, though it is not mentioned
        in their program flows.Receive the input string (subprocedure zhbGetInput)
        Parse the input string into program variables (subprocedure zhbGetVar)
        Load skeleton output html member
            
            BOATSCH0
            in CGIDEV2/DEMOHTML (subprocedure GetHtml)
        Get server's protocol
            for later html output display (subprocedure getEnv)
        Set html output variables
            
            and write out html output section top (the first part of the html script)
            using subprocedure wrtSectionfor the <FORM> hidden input fields
                related to the background color and the national
                language desired
            for the HTML <BODY parameters>
            The selection list (boat) Type
            was designed to be dynamic (generated from a database file).
            To provide this, database file
            cgidev2/boatTypes
            is used. This file is opened the first time this program
            runs, and is never closed, in order to provide best
            performance.A routine would read the records of this file and for
            each record would write section typsltrow
            after setting the appropriate output variables.
 At the end of the file, it would write section
            typsltend which contains the following
            part of the html script.
Last, the program would
            
            write html section endhtml
                (after setting its output variables, including
                 the response time)
            send the html output buffer (by writing the
                pseudo section *fini
            return leaving the LR indicator off,
                to provide more performance the next time it is called.
             
 |  | 
| 
| 
 2. BOATSCH1 The html issued by program
        BOATSCH0
        contains a
        form
        with a button
        When the user presses that button, program
        BOATSCH1
        (which is mentioned in the
        action of the
        form)
        is invoked. 
 The following input string is made available to the program:
        (the *** stay for the user inputs)
         
        | lng=*** &bckgnd=*** &boatnbr=0 &type=*** &maker=*** &units=*** &minlen=*** &maxlen=*** &minpri=*** &maxpri=*** &city=*** &state=*** &country=*** &lstbrd=*** | 
 Program flow 
        Receive the input string (subprocedure zhbGetInput)
        Parse the input string into program variables (subprocedure zhbGetVar)
        Load skeleton output html member
            
            BOATSCH1
            in CGIDEV2/DEMOHTML (subprocedure GetHtml)
        Get server's protocol
            for later html output display (subprocedure getEnv)
        Set html output variables
            
            and write out html output section top (the first part of the html script)
            using subprocedure wrtSectionfor the <FORM>s hidden input fields
                related to the background color and the national
                language desired
            for the HTML <BODY parameters>
            for the user-specified search criteria
            If the first time through,
            override and open database file
            cgidev2/boatsale
            containing the boats catalog.Note that this file is never closed,
            in order to provide the best performance.
Position the file to the next boat not yet listed
            (input field boatnbr
            is used for that).
            This input field contains 0 when the program is called
            through the html output from 
            BOATSCH0. On the other site, when the program
            is called by pressing the button
            Show nnn more, this input field contains
            the serial number of the last boat listed.
        Read the database file
            to find how many boats match the search criteria.
            Write the html output section howmany
            and, if more than 30 boats matching, the html output session
            30more
        Write the html output section tablestr
            which defines the start of a html table
        Set again at the starting database record and read through
            until maximum 30 boats matching the search criteria
            are found.For each such record, set the variables, and write html output section
            tablerow showing boat length, make, type, year built,
            price, and city where located.
 However, this table row is not that simple,
            as it carries information able to activate CGI program
            BOATSCH2,
            the one that displays boat detailed information
            along with images and boat dependent html text.
 
            It contains a link to program
                BOATSCH2,
                along with a string that this program should receive in order
                to show a single boat. The link, before variable substitution, is
                <a href="/cgidev2p/boatsch2.pgm? serno=/%bnbr%/">
 where
                /%bnbr%/
                will be replaced by the serial number of the boat
It also contains the following checkbox
                <input type="checkbox" name="serno" value="/%bnbr%/">
 When the user presses the button
                Show these vessels,
                program
                BOATSCH2
                (mentioned in the
                action
                of the
                <form >)
                will be invoked and will receive a string
                containing both the hidden fields
                (such as national language and background color)
                and the values of the checkboxes checked-in.
 As an example, the input string could be
 lng= &bckgnd=white &serno=0008745 &serno=0009784 &serno=0012509
                
                if the user selected three boats.
When no more matches, or 30 matches found, write html output section
            tablend which ends the html table
        If at least one row in the table, write html output section
            foundsome containing the submit button
            Show these vessels. Please note that the action of this submit button
            (call program BOATSCH2) is defined
            in the
            action
            of the
            <form >,
            up in the output skeleton html
        If more than 30 matches found, write html output section
            showmore which allows to relink to program
            BOATSCH1 passing the same values for search criteria
            along with the boat number it should start from
        Finally, the program would
            
            write html section endhtml
                (after setting its output variables, including
                 the response time)
            send the html output buffer (by writing the
                pseudo section *fini
            return leaving the LR indicator off,
                to provide more performance the next time it is called.
             
 |  | 
| 
| 
 3. BOATSCH2 Program 
        BOATSCH2 is activated by HTML output from program BOATSCH1
        when the web user takes one of the following actions
         
        User decides to display a single boat by clicking
            on the link displayed in a table row. In a case like this
            the string sent to program BOATSCH2 looks like
            lng=&bckgnd=white&serno=0008745
User decides to display more than one boat by clicking
            on some table row check buttons, and clicking on the
            button Show these vessels. In a case like this
            the string sent to program BOATSCH2 looks like
            lng= &bckgnd=white &serno=0008745 &serno=0009784 &serno=0012509
 
        Program flow 
        Receive the input string (subprocedure zhbGetInput)
        Parse the input string into program variables (subprocedure zhbGetVar)
        Load skeleton output html member
            
            BOATSCH2
            in CGIDEV2/DEMOHTML (subprocedure GetHtml)
        Get server's protocol
            for later html output display (subprocedure getEnv)
        Read skeleton output html mbr
            
            BOATSCH2
            in CGIDEV2/DEMOHTML (subprocedure GetHtml)
        If the first time through
            override and open database file
            cgidev2/boatsale1
            containing the boats ordered by boat number.Note that this file is never closed,
            in order to provide the best performance.
Set html output variables and write out html output section top (html start)
            (subprocedure WrtSection)
        For each occurrence of the variable
            serno
            (boat serial number) in the input string,
            perform the following
            
            Retrieve boat data (GIF, boat length, make, etc.)
                chaining corresponding record in file BOATSALE1
            Write output html output section found
                which contains the boat data and the boat image
            Provide "boat dependent html text" (features, link to other pictures etc.)
                As boat dependent html cannot be in the skeleton html output,
                boat dependent html texts are maintained instead in
                members of file
                CGIDEV2/BOATTXTS. Skeleton output html member
                BOATSCH2, on the other way, contains a section
                named text with just a single variable, named
                /%text%/.
                This is how the program
                moves the boat dependent html into the skeleton html member:
                
                Overrides file BOATTXTS to the member associated
                    to the boat serial number
                Opens file BOATTXTS
                reads records; for each record
                    substitutes variable
                    /%text%/.
                    and writes section text
                on end-of-file, closes file BOATTXTS
                    and removes the override
                When all requests processed:
            
            write html section endhtml
                (after setting its output variables, including
                 the response time)
            send the html output buffer (by writing the
                pseudo section *fini
            return leaving the LR indicator off,
                to provide more performance the next time it is called.
             
 |  
 
 |