switch to american english
Giovanni's logo
La demo CGI "Barche" di Perotti
questa e' la Versione 2
blue line

Questa dimostrazione si trova nella libreria CGIDEV2. Si tratta di tre programmi:
BOATSCH0, BOATSCH1, e BOATSCH2

1. BOATSCH0

Il programma BOATSCH0 viene attivato dal membro html DEMOMENU nel file sorgente DEMOHTMLIT quando viene premuto il bottone go (non lo si prema qui, non è attivo)

Colore di sfondo
bianco grigio  
azzurro nero
Al programma viene resa disponibile la seguente stringa di input: (gli *** rappresentano gli input dell'utente)
bckgnd=***&x=***&y=***
dove
  • bckgnd= è il colore di sfondo prescelto
  • x= and y= sono le coordinate del punto all'interno dell'immagine (il bottone go) dove l'utente ha premuto. Queste coordinate non sono usate dal programma.
Flusso del programma
  • Riceve la stringa di input (procedura zhbGetInput)
  • Fa il parsing della stringa di input nelle variabili del programma (procedura zhbGetVar)
  • Carica il membro esterno di html BOATSCH0 in cgidev2/DEMOHTMLIT (procedura GetHtml)
  • Riceve la variabile di ambiente SERVER_PROTOCOL per esibirla più tardi (procedura getEnv)
  • Imposta le variabili di output html
    • per i campi di input hidden del <FORM> relativi al linguaggio nazionale ed al colore di sfondo
    • per i parametri della tag html <BODY >
    e scrive la sezione html top (parte iniziale dello script di html) utilizzando la procedura wrtSection
  • L'elenco di scelta Tipo (barca) è stato progettato per essere dinamico (generato dai record di un file database). Per far questo, si utilizza in input il file cgidev2/boatTypes. Questo file viene aperto la prima volta che il programma riceve controllo e non viene mai chiuso, in modo da evitare aperture successive così da fornire l'optimum di prestazioni.
    Una rutine si incarica di leggere i record del file e per ogni record scrive la sezione typsltrow, dopo aver impostato le variabili di output.
    A fine file, s'incarica di scrivere la sezione typsltend che contiene la parte successiva dello script html.
  • Alla fine, il programma
    • scrive la sezione html endhtml (dopo aver impostato le relative variabili, compresa quella che visualizza il tempo di risposta del servente)
    • spedisce il buffer di output (scrivendo la pseudo-sezione *fini)
    • ritorna lasciando in off l'indicatore LR, in modo tale che sia utilizzata questa stessa copia di programma alla prossima chiamata, ciò che si traduce in prestazioni ottimali.
Nota. La tecnica, adottata da questo programma, di utilizzare un script html dove tutti i parametri della tag <:BODY > sono gestiti come variabili, è adottata anche dagli altri due programmi, anche se è citata nella descrizione del loro flusso.

2. BOATSCH1

L'html emesso dal programma BOATSCH0 contiene un form con il bottone

Quando l'utente preme quel bottone, viene invocato il programma BOATSCH1 (in quanto è citato nella action del form)

Questa è la stringa di input che viene resa disponibile al programma:

lng=***&bckgnd=***&boatnbr=0&type=***&maker=***&units=***
&minlen=***&maxlen=***&minpri=***&maxpri=***&city=***&state=***
&country=***&lstbrd=***
Flusso del programma
  • Riceve la stringa di input (procedura zhbGetInput)
  • Fa il parsing della stringa di input nelle variabili del programma (procedura zhbGetVar)
  • Carica il membro esterno di html BOATSCH1 in cgidev2/DEMOHTMLIT (procedura GetHtml)
  • Riceve la variabile di ambiente SERVER_PROTOCOL per esibirla più tardi (procedura getEnv)
  • Imposta le variabili di output html
    • per i campi di input hidden del <FORM> relativi al linguaggio nazionale ed al colore di sfondo
    • per i parametri della tag html <BODY >
    • per i parametri di ricerca specificati dall'utente
    e scrive la sezione html top (parte iniziale dello script di html)
  • Se è la prima volta che riceve il controllo, effettau l'override ed apre il file database cgidev2/boatsale contenente il catalogo delle barche.
    Si noti che questo file non verrà mai più chiuso, in modo da non dover rieffettuare la apertura nelle chiamate successive.
  • Posiziona il file subito dopo l'ultima barca precedentemente elencata (a questo fine viene utilizzato il campo di input hidden boatnbr; questo campo di input contiene 0 quando il programma viene invocato dall'html generato dal programma BOATSCH0; quando invece il programma viene invocato premendo il bottone Visualizzane altre nnn, questo campo di input hidden contiene il numero di matricola dell'ultima barca elencata)
  • Legge il file database per trovare quante barche soddisfano ai criteri di ricerca Scrive la sezione di output howmany e, se le barche trovate sono più di 30, scrive anche la sezione di output 30more
  • Scrive la sezione di output tablestr per definire l'inizio della tabella (elenco)
  • Si riposiziona sulla barca di partenza e rilegge sino a trovare un massimo di 30 barche che corrispondano ai criteri di ricerca.
    Per ciascun record imposta le variabili di output e scrive la sezione tablerow in modo tale da visualizzare la lunghezza, la marca, il tipo, il nome, l'anno di fabbricazione, il costo della barca e la città in cui essa è visibile.
    Ma, la linea di tabella non finisce qui. Essa contiene anche informazioni atte ad attivare il programma BOATSCH2, che visualizza la foto della barca, i suoi dati di catalogo ed una descrizione narrativa.
    1. Contiene un collegamento al programma BOATSCH2, insieme con una stringa che consente al programma di visualizzare quella sola barca. Il collegamento, prima della risoluzione delle variabili, contiene
         <a href="/cgidev2p/boatsch2.pgm?serno=/%bnbr%/">
      dove /%bnbr%/ sarà sostituito dal numero di matricola della barca.
    2. Contiene anche il checkbox
         <input type="checkbox" name="serno" value="/%bnbr%/">
      Quando l'utente preme il bottone Fammi vedere queste barche il programma BOATSCH2 (citatao nella action del form <form >) viene invocato e riceve una stringa contenente sia i campi Hidden (come la lingua nazionale e il colore di sfondo) sai i valori trasmessi dai checkbok selezionati.
      A titolo di esempio, la stringa di input potrebbe essere
         lng=&bckgnd=white&serno=0008745&serno=0009784&serno=0012509
      nel caso in cui l'utente avesse scelto tre barche.
  • Quando l'elenco delle barche è finito, scrive la sezione tablend che chiude la tabella
  • Se la tabella contiene almeno una riga, scrive la sezione foundsome che contiene il bottone Fammi vedere queste barche. Si noti che l'azione di questo bottone (la chiamata al programma BOATSCH2) è definita nel parametro action del <form >, più sopra nell'html.
  • Se sono state trovate più di 30 barche che soddisfano ai requisiti, scrive la sezione showmore, la quale consente di ricollegarsi al programma BOATSCH1 passandogli gli stessi criteri di ricerca, ma questa volta anche la matricola della barca elencata per ultima.
  • Alla fine, il programma
    • scrive la sezione html endhtml (dopo aver impostato le relative variabili, compresa quella che visualizza il tempo di risposta del servente)
    • spedisce il buffer di output (scrivendo la pseudo-sezione *fini)
    • ritorna lasciando in off l'indicatore LR, in modo tale che sia utilizzata questa stessa copia di programma alla prossima chiamata, ciò che si traduce in prestazioni ottimali.

3. BOATSCH2

Il programma BOATSCH2 is activated by HTML output from program BOATSCH1 when the web user takes one of the following actions

  1. 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
  2. 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
Flusso del programma
  • Riceve la stringa di input (procedura zhbGetInput)
  • Fa il parsing della stringa di input nelle variabili del programma (procedura zhbGetVar)
  • Carica il membro esterno di html BOATSCH2 in cgidev2/DEMOHTMLIT (procedura GetHtml)
  • Riceve la variabile di ambiente SERVER_PROTOCOL per esibirla più tardi (procedura getEnv)
  • Carica il membro di html esterno BOATSCH2 in CGIDEV2/DEMOHTMLIT (procedura GetHtml)
  • Se è la prima volta che riceve il controllo, fa la override ed apre il file database cgidev2/boatsale1 che contiene le barche ordinate per numero di matricola.
    Si noti che questo file non viene mai chiuso, così da poter avere prestazioni ottimali.
  • Imposta le variabili di output html e scrive la sezione top (parte iniziale dell'html) (procedura WrtSection)
  • Per ciascuna delle variabili serno (matricola barca) trovate nella stringa di input:
    1. recupera i dati della barca (gif, nome, costruttore, lunghezza, prezzo, ecc.) dal record corrispondente nel file BOATSALE1
    2. Scrive la sezione found che contiene l'immagine della barca ed i suoi dati di catalogo
    3. Fornisce un testo narrativo relativo alla barca in oggetto.
      Questo testo narrativo è così particolare che non può essere tenuto nel membro di html esterno. Esso viene invece mantenuto in un file sorgente a parte CGIDEV2/BOATTXTS, il quale contiene un membro per ogni matricola di barca a catalogo. Il programma si comporta così:
      • fa l'override di BOATTXTS al membro relativo alla matricola in causa
      • apre il file BOATTXTS
      • legge i record; per ogni record sostituisce la variabile /%text%/. e scrive la sezione text
      • a fine record, chiude il file BOATTXTS e toglie l'override
  • Una volta elaborate tutte le barche richieste:
    • scrive la sezione html endhtml (dopo aver impostato le relative variabili, compresa quella che visualizza il tempo di risposta del servente)
    • spedisce il buffer di output (scrivendo la pseudo-sezione *fini)
    • ritorna lasciando in off l'indicatore LR, in modo tale che sia utilizzata questa stessa copia di programma alla prossima chiamata, ciò che si traduce in prestazioni ottimali.