@&dizlst-s@&
@@liste parametriche - manuale utente@@
La videata visualizzata mostra il contenuto dell'archivio selezionato; si vede un record per ogni riga, sulle colonne i campi; il record attuale e` evidenziato.
Se al record attuale e` associata una @nota@, viene evidenziato un asterisco a destra del primo campo del record.
Per uscire dalla lista, occorre digitare [Invio] selezionando un record, oppure digitare [ESC], senza selezionare nulla.

  Se la lunghezza della riga e` maggiore della grandezza della finestra, si possono vedere i dati non visualizzati spostandosi tra i vari campi e tra i vari records.

  Per spostarsi, si possono usare vari tasti funzionali:

              SPOSTAMENTI TRA RECORDS (VERTICALI)
@<UL>
@<LI>- [Freccia in alto]             record precedente
@<LI>- [Freccia in basso]            record successivo
@<LI>- [Pagina indietro]             pagina precedente
@<LI>- [Pagina avanti]               pagina successiva
@<LI>- [HOME]                        inizio archivio
@<LI>- [Fine]                        fine archivio
@</UL>

              SPOSTAMENTI TRA CAMPI (ORIZZONTALI)
@<UL>
@<LI>- [Freccia sinistra]
@<LI>- [Tab-indietro]                campo precedente
@<LI>- [Freccia destra]
@<LI>- [Tab]                         campo successivo
@</UL>

  Premendo il tasto [Shift-F1], si accede al menu` di personalizzazione della lista: vengono presentate alcune tra le seguenti opzioni (ad alcune di esse e` associato un tasto funzionale).

@<UL>
@<LI>- @ricerca stringa@
@<LI>- @visualizzazione verticale@
@<LI>- @seleziona/deseleziona@
@<LI>- @seleziona tutti@
@<LI>- @deseleziona tutti@
@<LI>- @editazione/selezione dati@
@<LI>- @lancio del programma di gestione@ (Associata ad F1)
@<LI>- @set estremi@ (Associata ad F2)
@<LI>- @set inclusioni@ (Associata ad F3)
@<LI>- @set ordinamento@
@<LI>- @set join@
@<LI>- @richiedi parametri@
@<LI>- @stampa@ (Associata ad F10)
@<LI>- @export@
@<LI>- @set campi@
@<LI>- @campi calcolati@
@<LI>- @set posizioni@
@<LI>- @set schermo@
@<LI>- @memorizza lista@
@<LI>- @modifica@
@<LI>- @cancellazione@
@<LI>- @inserisco rigo@
@<LI>- @ripristino annullato@
@<LI>- @bufferizzo rigo@
@<LI>- @annullo rigo@
@<LI>- @import dati@
@<LI>- Uscita (Associata ad ESC)
@</UL>


@&dizlst@&
@@liste parametriche - note generali@@

  Lo scopo primo del programma 'Liste parametriche' e`'g di permettere la visualizzazione e la stampa (in modo 'predefinito' oppure 'libero') dei dati contenuti in un archivio; si possono inoltre modificare o annullare record esistenti, oppure inserirne di nuovi; si possono inoltre importare ed esportare dati.
  Il programma puo` essere richiamato dal menu` o da un altro programma che necessita di una lista.

  Se richiamato da menu` il programma, alla partenza, richiede il numero dell'archivio desiderato ed il suo tipo record (vedi 'Dizionario dati'), oppure il nome della lista voluta (su tutti e tre i campi e`'g possibile effettuare uno zoom). Se si inseriscono i primi due dati, si attiva il programma in modalita` 'libera'; se si inserisce il terzo, si attiva in modalita` 'predefinita'.

  Se sul numero del file si specifica 9999, il file preso in considerazione sara` un sequenziale; si deve specificare il suo nome, se il primo record contiene i nomi dei campi contenuti nei record successivi (se no, il programma assegna dei nomi standard ai vari campi), qual e`'g il separatore tra i vari campi. Il programma, in base alle informazioni contenute nel sequenziale specificato, costruisce un dizionario dati 'locale' alla lista stessa, su cui si puo` lavorare poi come se questo fosse in file normale: effettuare calcoli, join, selezioni, ordinamenti e quant'altro. Il nome del file sequenziale puo` essere ridefinito all'atto della chiamate, tramite parametro (vedi @come richiamare una lista@).

  Se richiamato da un altro programma (vedi @come richiamare una lista@), la lista sara` sempre in modalita` 'predefinita'.

  Dopo tale scelta, viene presentata una videata composta da una matrice contenente i dati dell'archivio selezionato, sulle righe i records, sulle colonne i campi; il record attuale e`'g evidenziato.

  Se la lunghezza della riga e`'g maggiore della grandezza della finestra, si possono vedere i dati non visualizzati spostandosi tra i vari campi.

  Per spostarsi, si possono usare vari tasti funzionali:

              SPOSTAMENTI TRA RECORDS (VERTICALI)
@<UL>
@<LI>- [Freccia in alto]             record precedente
@<LI>- [Freccia in basso]            record successivo
@<LI>- [Pagina indietro]             pagina precedente
@<LI>- [Pagina avanti]               pagina successiva
@<LI>- [HOME]                        inizio archivio
@<LI>- [Fine]                        fine archivio
@</UL>

              SPOSTAMENTI TRA CAMPI (ORIZZONTALI)
@<UL>
@<LI>- [Freccia sinistra]
@<LI>- [Tab-indietro]                campo precedente
@<LI>- [Freccia destra]
@<LI>- [Tab]                         campo successivo
@</UL>

  In modalita` 'libera', la lista e`'g di tutto l'archivio, ordinato per chiave primaria, con tutti i campi cosi` come specificati nel dizionario dati.
  A questo punto, e`'g possibile personalizzare la lista, cambiando l'ordinamento dei records, dei campi, eliminando dalla lista alcuni campi, cambiandone la 'picture', escludendo records secondo certi criteri, creando campi calcolati, etc.

  Premendo il tasto [Shift-F1], si accede al menu` di personalizzazione della lista: vengono presentate tutte o alcune tra le opzioni possibili, che sono:

@<UL>
@<LI>- @ricerca stringa@
@<LI>- @visualizzazione verticale@
@<LI>- @seleziona/deseleziona@
@<LI>- @seleziona tutti@
@<LI>- @deseleziona tutti@
@<LI>- @editazione/Selezione dati@
@<LI>- @lancio del programma di gestione@ (Associata ad F1)
@<LI>- @set estremi@ (Associata ad F2)
@<LI>- @set inclusioni@ (Associata ad F3)
@<LI>- @set ordinamento@
@<LI>- @set join@
@<LI>- @richiedi parametri@
@<LI>- @stampa@ (Associata ad F10)
@<LI>- @export@
@<LI>- @set campi@
@<LI>- @campi calcolati@
@<LI>- @set posizioni@
@<LI>- @set schermo@
@<LI>- @memorizza lista@
@<LI>- @modifica@
@<LI>- @cancellazione@
@<LI>- @inserisco rigo@
@<LI>- @ripristino annullato@
@<LI>- @bufferizzo rigo@
@<LI>- @annullo rigo@
@<LI>- @import dati@
@<LI>- uscita (Associata ad ESC)
@</UL>

@@seleziona/deseleziona@@
  Se la lista e`'g stata lanciata con parametro di selezione multipla (vedi @come richiamare una lista@), si utilizzera` il tasto [INVIO] per selezionare (se non gia` selezionato) o deselezionare ( se gia` selezionato) un record. I record selezionati vengono evidenziati con una "X" sulla sinistra.

@@seleziona tutti@@
  Se la lista e`'g stata lanciata con parametro di selezione multipla (vedi @come richiamare una lista@), tramite questa opzione si possono selezionare tutti i record che rispettano le specifiche indicate in @set inclusioni@ e @set estremi@.

@@deseleziona tutti@@
  Se la lista e`'g stata lanciata con parametro di selezione multipla (vedi @come richiamare una lista@), tramite questa opzione si possono deselezionare tutti i record che rispettano le specifiche indicate in @set inclusioni@ e @set estremi@.

@@ricerca stringa@@
  Permette di ricercare, sul campo che e`'g visualizzato come prima colonna sul video, una stringa; dopo la ricerca, si ottiene la visualizzazione dell'archivio a partire dal primo record su cui si e' trovata la stringa richiesta.
  Il programma richiede una stringa da ricercare: si puo` digitare una sequenza di caratteri qualunque, che saranno ricercati considerando uguali caratteri maiuscoli e minuscoli; inoltre si puo` usare la sintassi della funzione like di @set inclusioni@
@@editazione/selezione dati@@
  Normalmente, si puo` solamente vedere il contenuto dell'archivio selezionato; tramite questa opzione, e`'g possibile la variazione di campi, l'annullamento e l'inserimento di records nell'archivio. Se ci sono join selezionati, totalizzazioni o raggruppamenti attivi, tale opzione non e' attivata.
  Se si sceglie la modalita` editazione, il cursore si posiziona su un singolo campo, invece che su tutta la riga attuale, e se ne puo` modificare il valore; l'aggiornamento effettivo dell'archivio avviene pero` solamente all'uscita dalla modalita` editazione o dal programma, e si puo` anche scegliere di non aggiornare l'archivio con le modifiche effettuate.
  Inoltre, sono attive l'operazione di @inserisco rigo@, @cancello rigo@ e @bufferizzo rigo@.
  Per uscire dalla modalita` 'EDITAZIONE', bisognera` scegliere la modalita` 'SELEZIONE'; se nel frattempo si sono modificati dati o cancellati/inseriti record, viene richiesto se aggiornare l'archivio con le modifiche fatte.

@@lancio del programma di gestione@@
      (selezionabile anche con F1 direttamente della lista)
  Tramite questa funzione, si ottiene l'esecuzione del programma di generazione/modifica dell'archivio selezionato; all'uscita da tale programma, si rientrera` nella lista. L'opzione e`'g attiva solamente se nel dizionario e' specificato, a livello di tipo record, il nome del programma di gestione corrispondente.

@@set estremi@@
      (selezionabile anche con F2 direttamente della lista)
  All'ingresso della modalita` 'libera', si ha la visualizzazione di tutto l'archivio, ordinato per la chiave principale; questa funzione permette di scegliere un'altra chiave di ordinamento (se c'e'), ed un range di record su cui operare.
  Se c'e' piu` di una chiave, viene proposto l'elenco delle chiavi definite tra le quali se ne scegliera` una; dopo di che, viene visualizzato l'elenco dei campi componenti tale chiave, e viene richiesto un ESTREMO INFERIORE di chiave ed un ESTREMO SUPERIORE. Una volta completata l'operazione, si otterra` una lista ordinata per la chiave selezionata, e comprendente SOLAMENTE i record compresi tra gli estremi selezionati.
  Su ESTREMO INFERIORE e su ESTREMO SUPERIORE e`'g possibile specificare un valore fisso, oppure un PARAMETRO (vedi oltre), tramite il tasto F2.
  N.B.: se ci sono piu` campi che compongono la chiave, essi vengono proposti ed utilizzati IN ORDINE DECRESCENTE DI PRIORITA` SULLA CHIAVE:
il range specificato nei campi piu` in basso nella lista viene controllato solamente se i campi piu` in alto sono all'estremo del proprio range (= al minimo o al massimo);
ad es., dato un archivio di cedolini paga con una chiave composta da AZIENDA, NUMERO DIPENDENTE, MESE DI RETRIBUZIONE si potranno vedere tutti i cedolini dell'azienda X (specificando 'da AZIENDA X, DIPENDENTE 0, MESE 0, a AZIENDA x, DIPENDENTE 9999, MESE 99');
NON si vedranno i cedolini di tutti i dipendenti dell'azienda X del mese Y, se si specifica 'da AZIENDA X,DIPENDENTE 0, MESE Y, a AZIENDA x, DIPENDENTE 9999 MESE Y', ma si vedranno TUTTI i cedolini dei dipendenti il cui codice e`'g compreso tra 1 e 9998, di TUTTI i mesi. Per ottenere il risultato voluto, si deve utilizzare (se e' presente) una chiave composta da AZIENDA, MESE, DIPENDENTE nell'ordine indicato, oppure effettuare un SET INCLUSIONI (vedi oltre).

@@set inclusioni@@
      (selezionabile anche con F3 direttamente della lista)
  Permette di includere nella lista SOLAMENTE i record che rispettano la condizione specificata. Se non si specificano condizioni, si includono TUTTI i record.
  Viene presentata una maschera con le seguenti colonne:
@<DL>
@<DT>@<H4>* () AND OR NOT@<DD>@</H4>
  Su questa colonna va indicata la operazione logica da effettuare, nel caso di una condizione composta da piu` operazioni di confronto; Visto che nella grande maggioranza dei casi si operano degli AND tra piu` confronti, il programma lo propone su ogni riga vuota. Sull'ultima, e`'g necessario eliminare tale proposta MANUALMENTE.
  Si possono comunque indicare parentesi per raggruppare piu` operazioni in una unica sotto-condizione, AND,OR,NOT; ovviamente, la condizione risultante dovra` rispettare le regole dell'algebra logica (bilanciamento delle parentesi, etc); gli operatori, in assenza di parentesi, assumono la priorita` tradizionale: NOT,AND,OR
@<DT>@<H4>* CAMPO@<DD>@</H4>
  Su questa colonna va specificato il nome del campo su cui si effettua il confronto; il programma propone la lista di tutti i campi disponibili, e se ne dovra` selezionare uno (per muoversi all'interno della lista, usare le frecce e pagina-su pagina-giu; per selezionare, ENTER o TAB; si puo` scegliere di vedere i nomi dei campi piuttosto che le loro descrizioni tramite il tasto F2; si puo` ricercare un nome o una descrizione, tramite il tasto F3 e poi digitando una sottostringa del nome o della descrizione stessa ).
@<DT>@<H4>* COND@<DD>@</H4>
  Specificare l'operatore di confronto desiderato; gli operatori possibili sono: = (uguale), >=(maggiore o uguale), <=(minore o uguale), > (maggiore), <, (minore), != (diverso), <> (diverso), LK (like).
@<DT>@<H4>* VALORE DI CONFRONTO@<DD>@</H4>
  Specificare il valore con il quale va confrontato il CAMPO specificato: e`'g possibile indicare un valore fisso od un PARAMETRO (vedi), tramite il tasto F2.
  In caso di COND = LK, si puo` specificare una stringa che contiene caratteri 'normali', oppure il metacarattere '?', indicante 'qualunque carattere', o '*', indicante  ' qualunque carattere, zero o piu` volte'; i caratteri 'normali' vengono confrontati considerando uguali maiuscoli e minuscoli.
@</DL>

  N.B. Il SET INCLUSIONI opera SUCCESSIVAMENTE al SET ESTREMI, per cui i record non compresi nel range specificato in SET ESTREMI, comunque non vengono inclusi nella lista: non vengono neppure processati. Se possibile in virtu` delle chiavi presenti sull'archivio, e`'g da preferire di gran lunga una selezione tramite il SET ESTREMI, perche' molto piu` veloce.

@@set ordinamento@@
  Permette di specificare un ordinamento dei record diverso da quello della chiave selezionata, nonche' di specificare delle rotture di gruppo.
  Per i files sequenziali, permette di specificare qual e`'g l'ordine in cui i record fisicamente si trovano nel file (per poter operare dei selfjoin); in tal caso viene effettuata una richiesta di conferma apposita.
  Viene proposta una videata con l'ordinamento attualmente in uso; E` possibile selezionare i campi direttamente dalla lista dei campi definiti; si puo` inserire un campo tra due gia` specificati, tramite il tasto F1; se ne puo` eliminare uno, con F2.
  Le righe sono in ordine di priorita` decrescente; la maschera e`'g composta dalle seguenti colonne:

@<DL>
@<DT>@<H4>* NOME@<DD>@</H4>
  Contiene il nome del campo specificato

@<DT>@<H4>* DESCRIZIONE@<DD>@</H4>
  Contiene la descrizione utilizzata sulle testate e sulle righe di totali (se sono presenti rotture di gruppo), per indicare il valore caratteristico del singolo gruppo.

@<DT>@<H4>* ORDINE@<DD>@</H4>
  Indica se il campo deve essere ordinato in modo ascendente (A) o discendente (D) (attualmente tale opzione non e`'g operativa, i campi sono sempre ordinati in modo ascendente).

@<DT>@<H4>* A CAMBIO ...@<DD>@</H4>
  Indica se questo e`'g un campo di rottura di gruppo.
 - Se vale 'N', questo non e`'g un campo di rottura di gruppo
 - Se vale 'S', e`'g un campo di rottura di gruppo
 - Se vale 'P', e`'g di rottura di gruppo, ed inoltre si avra` un salto pagina.
 - Se vale 'G', viene attivata la modalita` 'GROUP BY': non vengono visualizzate le righe di dettaglio, e quelle che, in una lista uguale, ma in modalita` normale sarebbero state le righe del totale di livello piu` basso, vengono visualizzate come righe di dettaglio. 'G' puo` essere specificato SOLO sull'ultimo campo di ordinamento. Il risultato e`'g paragonabile a quello che con un SQL si puo` ottenere tramite l'opzione GROUP BY. Le colonne visualizzate sono valorizzate SOLAMENTE se sono campi di totale o sono campi di ordinamento. (qualche prova vale piu` di tutta questa lunga spiegazione...)


 Per rottura di gruppo si intende che, quando due record successivi hanno valori uguali sul campo indicato, non succede nulla; se invece hanno valori diversi, viene stampata una riga contenente i totali del gruppo di record che hanno tutti il primo valore sul campo (se specificata la totalizzazione), e stampata una testata indicante il valore del campo nel nuovo gruppo di records.

 Tutti i campi contenenti 'N' su 'A CAMBIO ...', fanno tutt'uno con il successivo campo contenente 'S' o 'P'( se c'e'): se cambia il loro valore tra due records, si comportano come il campo con 'S'; se invece non ci sono altri campi con 'S', (su righe successive), non e`'g gestita la rottura di gruppo sul campo.

@<DT>@<H4>* STAMPA@<DD>@</H4>
  Indica se il valore del campo va stampato sulla riga dei totali e sulla intestazione del gruppo (ad es, se si seleziona 'da AZIENDA 1 a AZIENDA 1', probabilmente non si vorra` indicata l'azienda sul cambio di altri campi di totali).
@</DL>

@@set join@@

  Permette di 'vedere' i dati di piu` archivi legati tra di loro.

  Se, nel dizionario dati, sono specificati dei legami tra l'archivio selezionato ed altri, essi possono essere utilizzati per vedere (come se fosse un unico record) il contenuto di piu` record associati tra di loro.

  Ad.Es, se sul dizionario dati c'e' un archivio CEDOLINI, contenente AZIENDA, NUMERO DIPENDENTE, MESE DI RETRIBUZIONE, NETTO A PAGARE, un archivio DIPENDENTI contenente DIPENDENTE NUMERO,  COGNOME, QUALIFICA, ed e`'g specificato un join tra l'archivio CEDOLINI e quello DIPENDENTI tramite il campo NUMERO DIPENDENTE -> DIPENDENTE NUMERO, selezionando SET JOIN, verra` proposto questo legame; se si specifica 'S' sul campo 'S/N', sulla videata dei records saranno visibili anche i campi del COGNOME e della QUALIFICA, per ogni cedolino.

  Per ogni join, e`'g necessario assegnare una SIGLA JOIN univoca composta da due caratteri, che serve per distinguere gli eventuali campi che dovessero avere lo stesso nome.

  Se esiste un legame non completo, esso puo` essere completato nella formula di calcolo richiesta successivamente.

  E` possibile anche creare join manuali, se i legami tra gli archivi non sono stati specificati all'atto della definizione delle strutture.

  Per effettuare un join manuale, e`'g necessario digitare F1, sul primo rigo della maschera dei joins. Si deve poi specificare il numero ed il tipo record del file che si desidera agganciare, la chiave tramite la quale si vuole effettuare la lettura sul file di join, e la sigla join, come per le join automatiche.

  Il legame cosi` creato e`'g per definizione incompleto, e sara` necessario valorizzare tutta la chiave nella successiva formula di calcolo; inoltre tali join vengono considerate comunque come associate all'archivio principale, anche se cio` non corrisponde alla struttura del database. Questo fatto non costituisce un problema, in quanto questa informazione e' utilizzata solamente dalle join automatiche.

  Le letture degli archivi agganciati avvengono nello stesso ordine indicato nella maschera del SET JOIN.

  E` necessario porre particolare attenzione all'ordine in cui si effettuano le join, sia manuali che automatiche: se si utilizzano campi che sono su un archivio agganciato (ad es. archivio A), per valorizzare parti di chiavi di altri archivi da collegare ( ad es archivio B), e`'g necessario porre la join del file di cui servono le informazioni PRIMA della join su cui tali informazioni vengono utilizzate: la join di A DEVE essere PRIMA della join di B.

  E` possibile indicare un archivio anche piu` volte nell'elenco delle join (per intenderci, in una struttura del tipo distinta base, posso collegare l'archivio articoli sia al componente che al prodotto finito; sara` la sigla join che permettera` la distinzioni ad es. delle descrizioni dei due articoli).

  Se si devono mettere a confronto dati dello stesso archivio (ad es. il fatturato per articolo/cliente di un anno con quello dell'anno precedente, ammesso di avere dei record di fatturato suddivisi per anno), e non si e`'g in grado di stabilire un join normale, perche' non si sa quale set di record prevale sull'altro (se possono esistere alcuni record che hanno solo dati di un anno, ed altri che anno solo dati dell'altro), si puo` definire un 'self-join'.

  Con questo meccanismo e`'g la lista stessa che provvede a stabilire un legame logico tra i vari records, ammesso che si stia utilizzando una chiave tramite la quale si possa stabilire un legame gerarchico, in cui i dati da mettere a confronto siano gli ultimi della chiave: nell'esempio di cui sopra si dovra` avere una chiave 'articolo-cliente-anno', non una del tipo 'anno-articolo-cliente'. Se cosi` fosse, e' necessario utilizzare due liste collegate da un sequenziale.

  Digitando F3 sulla maschera dei join, si stabilisce un legame di tipo 'self-join'; viene inoltre richiesto qual e`'g l'ultimo campo che distingue un raggruppamento di record da mettere a confronto dall'altro.

  L'archivio agganciato e`'g per definizione lo stesso dell'archivio principale, e sara` gestita la rottura di codice fino al campo sopra specificato.

  Per stabilire la parte restante della chiave da utilizzare, si dovra` richiamare successivamente 'SF1/set selfjoin' e si indicheranno i valori delle chiavi a confronto.

  Nell'esempio di cui sopra, si indichera` che la rottura e`'g sul campo 'cliente', e su SF1/selfjoin si indicheranno quali sono i due anni da confrontare; a questo punto si selezioneranno i campi che si vogliono vedere, e la lista evidenziera` sulla stessa riga, su colonne separate, record con stesso articolo-cliente, selezionando solamente quelli dei due anni indicati.

  Successivamente all'inserimento delle join da effettuare, si ha la maschera per il caricamento della formula di calcolo per valorizzare i campi non definiti nelle join incomplete e manuali; la sintassi e`'g la stessa della formula dei @campi calcolati@; la differenza tra le due formule e' che questa viene eseguita piu` volte, una per ogni join, e viene eseguita PRIMA che venga effettuato il controllo dei campi definito in @set inclusioni@, mentre l'altra viene eseguita una volta sola per ogni record: in questa vanno valorizzati i campi di join ed i campi di selezione, mentre nell'altra vanno effettuate le operazioni di totalizzazione, che effettuate qui porterebbero a risultati errati.

@@richiedi parametri@@
  Se la lista prevede dei @parametri@, tramite questa opzione si possono caricare nuovi valori sui parametri.

@@stampa@@
      (selezionabile anche con F10 direttamente della lista)
  Permette di produrre la lista su stampa.
  Qualora si desiderino funzionalita` di stampa diverse dallo standard (stampa su report, con stampa intestazioni, salti pagina ogni 66 righe, 10cpi ...), la modalita` di stampa deve essere stata selezionata precedentemente, tramite @set schermo@.

@@export@@
  Permette di produrre la lista su stampa, avendo preselezionate alcune opzioni tipiche dell'esportazione dei dati verso altri strumenti di elaborazione: campi alfanumerici racchiusi tra virgolette, TAB tra un campo e l'altro, nessun salto pagina, riga di stampa lunga 999 caratteri al massimo.
  All'atto della stampa si deve selezionare se si desidera avere il punto decimale invece che virgola decimale, e se si vuole una prima riga contenente i nomi dei campi, oppure le loro descrizioni, oppure nulla.

@@visualizzazione verticale@@
  Permette la selezione della modalita` di visualizzazione della lista:
  Orizzontale (default all'ingresso nelle liste stesse): si ha la visualizzazione di una riga per ogni record, con i campi che si svolgono orizzontalmente sullo schermo; ci si muove tra un campo e l'altro all'interno dello stesso record con TAB, BACK-TAB, le frecce a destra ed a sinistra; ci si muove tra i record con le frecce in alto ed in basso, PAGINA-SU e PAGINA-GIU.
  Verticale: si ha la visualizzazione di una pagina per ogni record, con i campi che si svolgono verticalmente sullo schermo; ci si muove tra un campo e l'altro all'interno dello stesso record con TAB, BACK-TAB, le frecce a in alto ed in basso, PAGINA-SU e PAGINA-GIU; ci si muove tra i record con F4 (record precedente) ed F5 (record successivo).

@@set campi@@
  Permette di selezionare, tra i campi dell'archivio, quali si vogliono vedere e quali no, e le modalita` di visualizzazione.

  Si puo` far scorrere la videata direttamente fino ad un campo desiderato, se se ne conosce parte del nome o della descrizione: digitando F3, si ottiene una maschera nella quale si scegliera` se si vuole ricercare sul nome o sulla descrizione, e poi si digitera` la parte di nome/descrizione ricercata; se la ricerca va a buon fine, la videata si posizionera` sul prossimo campo che soddisfa la ricerca.
  Si puo` inoltre (con F1) selezionare tutti i campi della lista, oppure (con (F2) escluderli tutti.

  Questa videata ha le seguenti colonne:
@<DL>
@<DT>@<H4>* Sel@</H4>@<DD>
  Indicando 'S', il campo viene visualizzato nella lista; indicando ' ' o 'N', viene escluso; indicando 'R', il campo viene incluso nella lista, ma non potra` essere modificato (Read-only).
@<DT>@<H4>* NOME@</H4>@<DD>
  E` il nome del campo, come da dizionario; per i campi appartenenti a record di JOIN, il nome e`'g preceduto da 'J' e dal numero progressivo del join; cio` per poterli distinguere se ci sono piu` join sullo stesso archivio; se il campo e' tabellare, il nome e' preceduto dall'indice nella tabella.
@<DT>@<H4>* DESCRIZIONE@</H4>@<DD>
 E` la descrizione che viene presentata sulla intestazione della lista, sia a video che su stampa. il valore qui indicato, viene troncato alla lunghezza del campo; se pero` il campo successivo non ha descrizione, la descrizione prosegue anche sullo spazio del campo successivo.
@<DT>@<H4>* TIPO@</H4>@<DD>
  Indica il modo di presentazione del campo; sono possibili i seguenti valori:
@<UL>
@<LI>
    - Per campi alfanumerici, X
@<LI>
    - Per campi numerici:
@<UL>
@<LI>
      9 il campo viene visualizzato cosi` come e`'g
@<LI>
      Z vengono soppressi gli zeri non significativi
@<LI>
      . come Z, e vengono messi i punti di migliaia (se lo spazio previsto e`'g sufficiente)
@<LI>
      B viene suddiviso il campo in 2 cifre, uno spazio, 2 cifre, uno spazio, 4 cifre
@<LI>
      M viene suddiviso in base alla codifica specificata per gli articoli di magazzino
@</UL>
@<LI>
    - per campi data, D
@</UL>
@<DT>@<H4>* LUNG@</H4>@<DD>
  Indica il numero di caratteri occupati dal campo.
@<DT>@<H4>* NDEC@</H4>@<DD>
  Indica il numero di decimali del campo
  N.B. LUNG = 10, NDEC = 2 NON corrisponde ad un PIC 9(10)V99, ma ad un PIC 9(7),99.
@<DT>@<H4>* TOT@</H4>@<DD>
  Per i campi numerici, indica se il campo viene totalizzato (S) o no (N), oppure se e`'g un campo a gestione manuale: su tali campi, non viene effettuato l'azzeramento ad ogni record, ma soltanto alla rottura del gruppo di livello indicato (0-9); sono da usarsi se si vogliono ottenere progressivi tra i righi, medie mobili o simili.
@</DL>

  Inoltre, si puo` vedere la lunghezza in bytes della riga che si e`'g cosi` costruita; sulle liste a video, se la riga e' troppo lunga, viene semplicemente troncata; sulle stampe, la riga invece puo` spezzarsi, con effetti indesiderati. (vedi @set stampa@)

@@campi calcolati@@
  Permette di creare campi non definiti nel dizionario dati, che potranno contenere risultati di calcoli (ad es. si potra` creare un campo 'SALDO' uguale a 'DARE' - 'AVERE'); non e`'g necessario che tali campi siano poi visualizzati; la definizione dei campi e' simile a quella di 'SET CAMPI'.
  Si puo` sfruttare il meccanismo di costruzione dinamica delle descrizioni dei campi, se previsto dall'interfaccia verso il file utilizzato, specificando 'P' sulla scelta se il campo e`'g visualizzato S/N/(P).

  Una volta creati i campi, viene proposta una videata nella quale bisogna inserire le modalita` di calcolo di tali campi (e' possibile anche ricalcolare campi diversi dai campi calcolati).

  Di seguito e`'g riportata la sintassi di tale formula di calcolo:
  istruzione:
@<PRE>
              istruzione [ [;] istruzione .... ] ,
              istruzione_di_assegnamento ,
              istruzione_condizionale
  istruzione_di_assegnamento:
              LET campo = espressione
  istruzione_condizionale:
              IF espressione THEN istruzione ENDIF ,
              IF espressione THEN istruzione ELSE istruzione ENDIF
  espressione:
              campo ,
              ( espressione ) ,
              espressione * espressione ,
              espressione / espressione ,
              espressione + espressione ,
              espressione - espressione ,
              espressione AND espressione,
              espressione OR espressione,
              NOT espressione,
              espressione = espressione,
              espressione > espressione,
              espressione < espressione,
              espressione >= espressione,
              espressione <= espressione,
              espressione != espressione,
              espressione <> espressione,
              min(espressione, espressione),
                riporta il minimo tra le due espressioni;
                   queste devono essere dello stesso tipo
                   (o tutte e due numeriche o tutte e due alfanumeriche)
              max(espressione, espressione),
                riporta il massimo tra le due espressioni;
              to_date(espressione),
                riporta la data numerica contenuta nella stringa
                ESPRESSIONE, in formato "MM/GGMAAAA"
              to_num(espressione_alfanumerica),
                riporta il numero contenuto nella stringa indicata
              to_char(espressione, interi),
                riporta la stringa contenente il valore numerico specificato,
                  la cui lunghezza e`'g indicata in INTERI
              to_lower(espressione),
                riporta la stringa ESPRESSIONE convertendo i caratteri
                  maiuscoli in minuscoli
              to_upper(espressione),
                riporta la stringa ESPRESSIONE convertendo i caratteri
                  minuscoli in maiuscoli
              add_date(espressione_numerica, espressione_numerica),
                 aggiunge alla prima espressione (considerata come data,
                    in formato aaaammgg), il numero di giorni indicato
                    nella seconda espressione, riportando
                    una data in formato aaaammgg
              sub_date(espressione_numerica, espressione_numerica),
                 sottrae dalla prima espressione (considerata come data,
                    in formato aaaammgg), il numero di giorni indicato
                    nella seconda espressione, riportando
                    una data in formato aaaammgg
              diff_date(espressione_numerica, espressione_numerica),
                 calcola la differenza in giorni tra la prima e la seconda
                    espressione, considerate entrambe come date in formato
                    aaaammgg, e riporta il numero di giorni intercorrenti
                    tra le due
              substr(espressione, pos_inizio, lunghezza),
                    estrae la porzione di stringa indicata
                    da POS_INIZIO per LUNGHEZZA caratteri
                     e ponendo n_spazi tra l'una e l'altra )
              strcat(espressione, espressione, n_spazi)
                    (aggancia 2 stringhe troncando spazi
                     e ponendo n_spazi tra l'una e l'altra )
  campo      :
              CAMPO_DA_ARCHIVIO ,
              CAMPO_CALCOLATO ,
              pseudo_variabile
  pseudo_variabile:
              PAGENO , (numero pagina x stampe)
              LINENO , (numero linea nella pagina)
              PROGNO , (numero record)
              PARAnn , (parametro NN alfanumerico)
              PARNnn , (parametro NN numerico)
              @GROUPLEVEL@ , (livello di rottura di gruppo attuale)
              @AFTERMODIFICA@ , (numero campo modificato (SF1/Z))
@</PRE>
  Le priorita` di calcolo sono le usuali;

@@GROUPLEVEL@@
  La formula di calcolo specificata su @campi calcolati@ e`'g eseguita ad ogni record che viene presentato a video, anche sui record di totali: si pone quindi il problema di distinguere se si sta eseguendo il calcolo perche' siamo su un record di dettaglio o di totali, se ad es. si calcola un campo e lo si vuole totalizzare, non bisogna ricalcolarlo sulla riga di totali. La variabile GROUPLEVEL permette appunto tali distinzioni, essendo valorizzata a zero per le righe di dettaglio, 1 per le righe di totali di livello piu` basso ( anche le righe di GROUP-BY sono di questo tipo) e cosi` via.

@@AFTERMODIFICA@@
  La formula di calcolo specificata in @set join@ viene eseguita anche dopo ogni modifica di campi tramite @editazione dati@. La variabile AFTERMODIFICA specifica qual e`'g l'indice del campo appena accettato, oppure ZERO se non siamo dopo accettazione di campi.

@@set posizioni@@
  Permette di scegliere l'ordine di visualizzazione dei campi all'interno della riga; vengono presentati tutti i campi selezionati, accanto ad un progressivo; se si vuole spostare un campo, digitare accanto la posizione in cui lo si desidera.
  N.B. le funzioni SET CAMPI, CAMPI CALCOLATI e SET JOIN riposizionano i campi secondo l'ordine naturale

@@set schermo@@
  Permette di stabilire le modalita` di presentazione della videata (@set video@) ed effettuare il settaggio delle stampe (@set stampa@).

@@set video@@
   Le impostazioni possibili della videata sono:
@<UL>
@<LI>
     - Presenza del box intorno alla videata Si/No
@<LI>
     - riga di inizio della videata
@<LI>
     - colonna di inizio della videata
       (se c'e' il box, questo va FUORI dalla riga/colonna inizio
        a dalle righe/colonne occupate)
@<LI>
     - numero di righe occupate
@<LI>
     - numero di colonne occupate
@<LI>
     - deve comparire l'intestazione con i nomi dei campi Si/No
@<LI>
     - In fase di stampa, deve essere stampata una pagina iniziale contenente
       l'elenco delle richieste effettuate al lancio S/N
@<LI>
     - In fase di stampa, ad ogni pagina deve essere stampato un titolo:
@<UL>
@<LI>
       N = No
@<LI>
       T = viene stampato solamente il titolo della lista
@<LI>
       S = viene stampato il titolo, la data di stampa ed il numero pagina
@<LI>
       D = come sopra, ma la data viene richiesta all'operatore, invece che
           essere quella di sistema.
@</UL>
@<LI>
     - In fase di stampa, devono essere evidenziati i dati dell'azienda di
       lavoro S/N (la stampa avviene all'interno della riga del titolo)
@<LI>
     - In fase di stampa, deve essere stampata la riga dei totali S/N
@<LI>
     - titolo della lista
@<LI>
     - Il nome del file @testo di stampa@, contenente il testo 'template',
       necessario per effettuare la stampa tramite testo;
       se si effettua una stampa tramite file di testo, ma il nome non
       e`'g stato specificato, il nome del file di testo verra` richiesto
       al momento della stampa effettiva.
@<LI>
     - Il tipo periferica associato alla lista (vedi @tipi periferiche@)
@<LI>
     - Il nome della stampante, se si desidera stampare sempre e comunque
       su di una stampante particolare
@<LI>
     - Il nome del file di stampa, se si desidera stampare sempre e comunque
       su di un file particolare (utilizzato anche per il nome del file di
       import, se deve essere fissato)
@<LI>
     - Se evidenziare con un asterisco le note associate ai record o no
@<LI>
     - Il carattere di separazione della parte intera dalla parte decimale
       sulle stampe (virgola o punto)
@</UL>

@@set stampa@@
   Le impostazioni possibili della stampa sono:
@<DL>
@<H4>@<DT>
     - Predisposizione per stampa tipo Report, Export, stampa tramite testo, stampa binaria:
@</H4>@<DD>
       Se report, la stampa viene formattata per ogni pagina, con intestazione di pagina, titolo, intestazione dei campi e viene gestita la rottura di pagina; vengono inoltre stampate le sequenze di settaggio della stampante, per configurare il numero di CPI e LPI specificati;
       Se export, vengono stampati solamente i dati, senza rotture di pagina. Questa opzione viene utilizzata se si devono scambiare dati con altri programmi, come fogli elettronici, data-base etc.
       E` possibile non generare intestazioni, oppure generare un record di intestazione contenente le descrizioni dei vari campi (tale informazione sara` da utilizzarsi in procedure esterne), oppure i nomi degli stessi, in un formato intelligibile per un successivo import su un'altra lista (formato interno).
       Se stampa tramite testo, la stampa viene formattata in base alle specifiche contenute nel file indicato sul campo '@testo di stampa@'.
       Se stampa binaria, il record non subisce alcuna formattazione
       (funzione associata alla gestione del @log di procedura@).

@<H4>@<DT>
     - Carattere separatore di campo, se si e`'g specificato il tipo export:
@</H4>@<DD>
       specificare il peso decimale del carattere di separazione:
       ad es. 9 = tab, 32 = spazio, etc.
       Tale opzione non ha significato, se si e`'g selezionato 'report'.
@<H4>@<DT>
     - Stampa intestazione export:
@</H4>@<DD>
       specificare:
@<UL>
@<LI>
                   N per non avere intestazioni;
@<LI>
                   D per intestare con le descrizioni;
@<LI>
                   E per intestare con i nomi dei campi, in formato valido
                     ad es. per excel o access.
@<LI>
                   S per intestare con i nomi del campi.
@</UL>
       Tale opzione non ha significato, se non si e`'g selezionato 'export'.
@<H4>@<DT>
     - Delimitatore campi alfanumerici export
@</H4>@<DD>
       indicare il carattere che deve racchiudere i campi alfanumerici:
       Indicare spazio, Virgolette oppure Apice.
       Tale opzione non ha significato, se non si e`'g selezionato 'export'.
@<H4>@<DT>
     - Numero di caratteri per riga
@</H4>@<DD>
       Tale opzione non ha significato, se si e`'g selezionato 'export'.
@<H4>@<DT>
     - Numero di righe contenute in ogni pagina
@</H4>@<DD>
         Se diverso da zero, invia alla stampante i relativi codici di
         controllo e termina ogni pagina con un FORM-FEED
         Se zero, effettua il cambio pagina con dei LINE-FEED
       Tale opzione non ha significato, se si e`'g selezionato 'export'.
@<H4>@<DT>
     - Numero di caratteri per pollice (CPI)
@</H4>@<DD>
         Invia alla stampante i relativi codici di controllo
       Tale opzione non ha significato, se si e`'g selezionato 'export'.
@<H4>@<DT>
     - Numero di linee per pollice (LPI)
@</H4>@<DD>
         Invia alla stampante i relativi codici di controllo
       Tale opzione non ha significato, se si e`'g selezionato 'export'.
@<H4>@<DT>
     - Numero di righe di corpo contenute in ogni pagina
@</H4>@<DD>
       Se non indicato, viene calcolato dal numeri di righe per pagina.
       Se sono tutti e due a zero, non viene effettuato cambio pagina.
       Tale opzione non ha significato, se si e`'g selezionato 'export'.
@</DL>

@@variabili testo@@
  Una parte di testo racchiusa tra due simboli '$' indica il nome di una variabile, che deve essere definita sulla lista che ha lanciato la stampa.
  Ad es $ALOCAL$ verra` sostituita in fase di stampa dal valore del campo ALOCAL (se definito), presente nel record in stampa al momento.
  Il valore cosi` ottenuto viene troncato degli spazi non significativi, e sostituito al testo $VARIABILE$.
  Pertanto, se il campo ALOCAL, che nella lista e`'g lungo 30 caratteri,
  vale "VIA ROMA, 106                  ", e si stampa
@<PRE>
  IO ABITO IN    $ALOCAL$, E CI STO BENE
@</PRE>
  si otterra`
@<PRE>
  IO ABITO IN    VIA ROMA 106, E CI STO BENE
@</PRE>

  Se si vuole stampare un campo con lunghezza fissa, si dovra` indicare la lunghezza desiderata nel formato $nn-NOMEVARIABILE$. Con i dati precedenti,
@<PRE>
  IO ABITO IN    $15-ALOCAL$, E CI STO BENE
@</PRE>
  diventa
@<PRE>
  IO ABITO IN    VIA ROMA 106   , E CI STO BENE
@</PRE>
  E` possibile richiamare un'altra lista da dentro un testo, indicando:
  $CALL$ nome_lista eventuali_parametri_da_passare_alla_nuova_lista
  (i parametri possono essere a loro volta variabili)
  ad es.
@<PRE>
  $CALL$ stasol1 $QCODCON$ $PARA03$
@</PRE>
  esegue la stampa indicata nella lista stasol1, passando come parametri i valori attuali dei campi QCODCON e PARA03.
  .

@@header paragrafo@@
  Se una riga di stampa testo comincia per ".IN", e`'g considerata una riga di formattazione pagina e dovra contenere:
@<PRE>
  .INmm-nn-oo
@</PRE>
  in cui:
@<UL>
@<LI>
         mm indica la lunghezza della pagina di stampa
@<LI>
         nn il margine iniziale di pagina
@<LI>
         oo il margine a pie` di pagina
@</UL>
  Se una riga comincia per ".SL", ".SC", ".SR", ".SN", ".SJ" e`'g considerata una riga di formattazione paragrafo e dovra contenere:
@<PRE>
  .xxmm-nn-oo
@</PRE>
  in cui
@<UL>
@<LI>
         xx indica:
@<UL>
@<LI>
                   SL per allineamento a sinistra (non attivo)
@<LI>
                 o SC per allineamento centrato (non attivo)
@<LI>
                 o SR per allineamento a destra (non attivo)
@<LI>
                 o SN per nessun allineamento
@<LI>
                 o SJ per giustificazione con l'inserimento di spazi
                      fino all'allineamento sia destra che a sinistra
@</UL>
@<LI>
         mm indica la posizione del margine sinistro
@<LI>
         nn indica la posizione del margine destro
@<LI>
         oo indica il numero di interlinee tra due righe di stampa
@</UL>

@@testo di stampa@@
 E` possibile effettuare stampe formattate in base ad un testo:
 Tramite un editor, si deve generare un testo, che la stampa utilizzera` per generare il report. Viene scandito il testo una volta per ogni record della lista, e vengono messi a disposizioni come @variabili testo@ tutti i campi del record selezionati. Le parti di testo che non specificano variabili vengono lasciate inalterate, salvo l'allineamento specificato nell'@header paragrafo@. Le parti specificanti variabili, verranno sostituiti con i valori attuali del record.
 Un esempio:

@<PRE>
.IN72-10-08
.SN040-090-1
                                          Spett.le
                                          $ARAGSO$
                                          $AINDIR$
                                          $ACAP$ $ALOCAL$

 OGGETTO: ESTRATTO CONTO V/S DARE AL $PARA04$
 ................
@</PRE>

           Per le prime due righe, rimandiamo all'@header paragrafo@;
           Se i campi del record in stampa valgono
@<UL COMPACT>
@<LI>
              ARAGSO = ROSSI MARIO
@<LI>
              AINDIR = VIA ROMA, 206
@<LI>
              ACAP   = 52100
@<LI>
              ALOCAL = AREZZO
@<LI>
              PARA04 = 31/12/1997
@</UL>

@<PRE>
           Verra` stampato:
                                          Spett.le
                                          ROSSI MARIO
                                          VIA ROMA, 206
                                          52100 AREZZO

 OGGETTO: ESTRATTO CONTO V/S DARE AL 31/12/1997
@</PRE>


@@memorizza lista@@
  Permette di memorizzare la personalizzazione della lista effettuata al momento, per poterla successivamente riutilizzare (modalita 'pre-definita').
  Viene richiesto il tipo di lista (Sistema/Utente), ed il nome da assegnare; le liste-sistema sono quelle standardizzate, fornite insieme all'applicativo; quelle utente sono quelle che ogni utente puo` fare da se', se vi e`'g abilitato).
  Viene richiesta anche se la lista dovra` essere ottimizzata (una lista ottimizzata e`'g precompilata, ed e' quindi molto piu` veloce in fase di caricamento della stessa, ma puo` non corrispondere ad eventuali variazioni della struttura del database avvenute successivamente alla sua compilazione)

  Per le operazioni:
@<UL>
  @<LI>- @set estremi@
  @<LI>- @set campi@
  @<LI>- @set posizioni@
  @<LI>- @set schermo@
  @<LI>- @set inclusioni@
  @<LI>- @memorizza lista@
  @<LI>- @modifica@
  @<LI>- @cancellazione@
  @<LI>- @stampa@
  @<LI>- @editazione@
  @<LI>- @set ordinamento@
  @<LI>- @set join@
@</UL>

  si puo` specificare se, nelle successive utilizzazioni della lista, tali operazioni potranno essere effettuate oppure no; sara` utile, ad es, inibire la funzione di set estremi, set ordine e set join, se si vuol costruire una lista 'rigida', oppure inibire la modifica, la cancellazione o la editazione dati, se si costruisce una lista di interrogazione di uso generalizzato, alla quale accede una gran quantita` di persone; sara` utile invece lasciare aperte tutte le possibilita`, se si costruisce una lista utilizzata soltanto da personale adeguatamente addestrato, che puo` aver bisogno di manipolarla in base a bisogni non conoscibili al momento della preparazione della lista.
  Inoltre si puo` specificare se si costruisce una lista di 'solo stampa', predisposta per generare report su carta (o export): in tal caso, al successivo richiamo della lista, verra` automaticamente generato un report, senza doverlo richiamare tramite la funzione F10.
  Il campo 'modifica batch', se assume il valore 'S', indica che la lista serve per effettuare variazioni automatiche al database: quando la lista sara` eseguita, se ci sono record che contengono campi modificati (tramite campi calcolati), le modifiche effettuate vengono memorizzate nell'archivio corrispondente (dopo richiesta di conferma all'utente).
  Si puo` indicare anche il nome di un programma (COBOL), predisposto per la richiesta dei parametri relativi alla lista; se indicato, tale programma verra` lanciato invece della richiesta standard dei parametri.
  Il campo 'Sigla join risposta' permette di riportare in uscita di una lista (su LNK-DATI-REC) un record agganciato invece del record primario relativo alla riga selezionata.
  Il campo 'Programma successivo' indica l'eventuale programma (con i relativi parametri) da lanciare dopo l'uscita dalla lista: abbinato al campo 'solo stampa' permette di lanciare una lista, che genera un sequenziale in stampa, che serve come input per un'altra lista, che legge lo stesso sequenziale .. e cosi` di seguito; cio` per evitare lista di complessita` troppo elevata (troppe join, o troppi campi calcolati, o group-by con totalizzazioni incompatibili tra di loro ..).

  Si possono infine indicare fino a 20 @parametri@, che saranno richiesti al lancio della lista, e possono essere utilizzati in @set estremi@, @set inclusioni@ e @campi calcolati@.
  Se si vogliono passare a liste chiamate in cascata parametri derivanti dalla lista attuale, li si dovra` specificare come '%nn' in cui nn indica il numero del parametro desiderato (indicare nn sempre di due cifre !).
  Per quanto riguarda i campi di tipo DATA, il valore dei parametri corrispondenti devono essere espressi in formato AAAAMMGG

@@parametri@@
 Quando si memorizza la lista, per ogni parametro viene richiesto il campo a cui e` associato. Tale associazione serve SOLAMENTE per stabilire il tipo del parametro, la sua lunghezza etc., NON viene effettuata alcuna movimentazione su di esso.
 E` inoltre possibile stabilire un valore di default, che e`'g quello che viene proposto all'atto dell'esecuzione della lista; si puo` specificare il valore della costante da proporre, oppure %D per la data odierna, %A per l'anno della data odierna, %PA per l'esercizio attuale, %PP per l'esercizio precedente.

@@modifica@@
  Permette di variare con un'unica operazione il contenuto di un campo, per tutti i record selezionati (cioe` che sono visibili spostandosi avanti ed indietro nella lista).
  Viene richiesto il campo da modificare, ed il nuovo valore che dovra` assumere; inoltre viene richiesto se il record cosi` ottenuto sara` un record nuovo (write) oppure dovra` sostituire un record preesistente (rewrite).
  Si DEVE scegliere write se si modifica la chiave; altrimenti si DEVE scegliere rewrite.
  Tale operazione richiede una certa prudenza nell'utilizzo: se la selezione che si e`'g effettuata non e' quella desiderata, si modifica il valore su records che non andavano toccati, e da tale operazione non si puo`, in generale, tornare indietro.

@@cancellazione@@
  Permette di eliminare con un'unica operazione tutti i record selezionati (cioe` che sono visibili spostandosi avanti ed indietro nella lista).
  Come per la modifica, tale operazione richiede una certa prudenza nell'utilizzo: se la selezione che si e`'g effettuata non e' quella desiderata, si cancellano records che non andavano toccati, e da tale operazione non si puo`, in generale, tornare indietro.

@@inserisco rigo@@
  Permette di inserire un nuovo record nell'archivio; il contenuto del nuovo record e`'g nullo, oppure e' uguale al contenuto del rigo bufferizzato (vedi); E` ovviamente necessario modificare almeno il valore della chiave, per evitare la segnalazione di 'record duplicato', quando il record verra` effettivamente inserito nell'archivio.
  Tale funzione e`'g attiva solamente in modalita` 'editazione dati'.

@@bufferizzo rigo@@
  Permette di memorizzare un rigo, cosicche', al successivo 'inserisco rigo', il nuovo record sara` valorizzato come quello memorizzato.
  Tale funzione e`'g attiva solamente in modalita` 'editazione dati'.

@@annullo rigo@@
  Permette di indicare un record come 'cancellato'. Il record cancellato viene evidenziato con una riga di '-'. Il record sara` cancellato realmente solamente all'uscita dalla modalita` editazione o dal programma.
  Tale funzione e`'g attiva solamente in modalita` 'editazione dati'.

@@ripristino annullato@@
  Permette di ripristinare un record precedentemente indicato come 'cancellato', e riportarlo nello stato di record esistente.
  Tale funzione e`'g attiva solamente in modalita` 'editazione dati'.

@@import dati@@
  Permette di caricare su un archivio dati contenuti su un file sequenziale, generato da altre procedure o da un'altra lista.
  Viene richiesto il nome del file da cui fare l'import, e l'eventuale delimitatore di campo utilizzato; nel file di import devono esserci tutti i campi componenti la chiave primaria, e che non sono valorizzati dal calcolo dei join, ma non e`'g obbligatorio che ci siano tutti gli altri: se il record specificato non esiste, viene inserito con i campi che ci sono, se invece esiste gia` i campi presenti nell'import sostituiscono quelli del record, mentre gli altri rimangono inalterati.
  E` possibile valorizzare campi tramite la formula di calcolo inserita dopo il @set join@.


@@come richiamare una lista@@
  Se si e`'g costruita una lista, questa puo` essere richiamata da un qualunque programma, semplicemente effettuando una chiamata al programma DIZLST passando l'area di LINKAGE standard LNK-DATI, ad avendo cura di valorizzare il campo LNK-DATI-STRINGA con il nome del descrittore di lista precedentemente memorizzato.
  Si potranno, sempre su LNK-DATI-STRINGA, indicare alcuni parametri standard:
@<UL>
@<LI>
  -S: permettera`, all'atto dell'esecuzione della lista, di scegliere un record da riportare al programma; Se l'utente sceglie un record, questo viene portato su LNK-DATI-REC, e il campo LNK-DATI-RISP viene posto ad "S".
  La selezione/deselezione dei records si effettua tramite INVIO; si puo` selezionare tutto/deselezionare tutto tramite SF1 ed opzione relativa.
@<LI>
  -SB: permettera`, all'atto dell'esecuzione della lista, di scegliere piu` record da riportare al programma; Se l'utente sceglie uno o piu` record, questi vengono messi su un file temporaneo di tipo BINARY SEQUENTIAL, lunghezza 1024, con lo stesso 'tracciato' del file in lista, ed il nome del file temporaneo viene messo su LNK-DATI-REC; il campo LNK-DATI-RISP viene posto ad "S". Sara` compito del programma chiamante trattare tale file temporaneo (anche cancellarlo).
@<LI>
  -SBX: opera esattamente come -SB, ma all'inizio i records sono tutti gia` selezionati.
@<LI>
  -RAW: la lista viene lanciata in modalita` RAW-MODE, cosicche' non vengono effettuati i controlli automatici che operano nella modalita` standard: non viene controllato il campo NUMERO AZIENDA, ne' il campo TIPO RECORD, se definiti nell'archivio. (Puo` essere utilizzato qualora si abbia il sospetto che ci siano record 'sporchi' dentro l'archivio).
@<LI>
  -P: la lista viene lanciata in modalita` SOLO-STAMPA: sovrascrive il campo 'solo stampa S/N' della opzione @memorizza lista@.
@<LI>
  -PATHxxxxxx: si puo` indicare il nome del file (con struttura uguale al file originale) contenente i dati, ad es. se si vuole operare su un archivio temporaneo; ovviamente il file deve gia` esistere. xxxxxx indica il nome del file da utilizzare.
@<LI>
  -SEQ: se la lista riguarda un file sequenziale, permette di definirne il nome e le tipologie del suo contenuto: il formato e`'g: -SEQnnnxNNNNNN.... in cui nnn indica il separatore tra i vari campi (ad es. 009 per TAB); x indica S se il primo record del sequenziale contiene i nomi dei campi, N altrimenti; NNNNNN.... indica il nome del sequenziale da trattare.
@<LI>
  -BSEQNNNNNN: permette di lanciare una lista che utilizza come file il sequenziale binario specificato in NNNNNNN, che dovra` avere lunghezza 1024 caratteri e dovra` contenere dati con lo stesso tracciato dell'archivio 'reale' specificato come LFN sulla lista.
@</UL>
  Sempre su LNK-DATI-STRINGA, si potranno specificare di seguito i parametri, come indicato nella lista, separati da uno spazio; per indicare un parametro che puo` contenere spazi, includerlo tra virgolette (" o ').
  Ad es., se si e`'g generata una lista di nome "DIPE", di tutti i dipendenti di una ditta, e si e' previsto come parametro il numero della ditta, si potra` richiamare la lista dei dipendenti della ditta 1 con il seguente frammento di codice:
@<PRE>
           MOVE "DIPE -S 0001" TO LNK-DATI-STRINGA
           CALL "DIZLST" USING LNK-DATI
           IF LNK-DATI-RISP = "S"
              MOVE LNK-DATI-REC TO RECORD-DIPENDENTI
           .......
@</PRE>
  Le ultime due righe verificano se l'utente ha selezionato un record, e se lo ha fatto, recuperano l'informazione per un successivo utilizzo.
