* CICSEDL1 DOC * ------------------------------------------------ 20/01/93

Documentazione della transazione EDL1 per l'edit di data base DL/1 in CICS

----------------------------------------------------------------- Rel. 1.0




1)                      G E N E R A L I T A'


    La transazione 'EDL1' permette di visualizzare o aggiornare dei data
base DL/1 in ambiente CICS, con un uso operativo simile a quello di un
semplice editor full screen, in cui ogni riga visualizzata corrisponde a
un segmento. Il programma e' una normale transazione CICS/DL1 che accede
al database attraverso un PSB predefinito, conservando tutte le possibilita'
(e restrizioni) tipiche dell'accesso DL/1.
Le operazioni che si possono compiere sono:
- visualizzazione normale o esadecimale
- visualizzazione sequenziale di tutti i segmenti associati ad un certo
  PCB o restrizione della visualizzazione su uno o piu' segmenti selezionati
- ricerca di una stringa in avanti su tutto il data base o solamente
  su uno od alcuni segmenti selezionati o solo in un campo di un segmento
- cancellazione di uno o piu' segmenti
- aggiornamento di un segmento in modo normale o esadecimale
- copia di uno o piu' segmenti in un buffer
- inserimento di uno o piu' record preventivamente salvati ed editati nel
  buffer come segmenti di un qualsiasi livello del database
- visualizzare alcune caratteristiche del database come il numero di PCB
  del PSB usato, il nome dei segmenti, la procopt di ciascun segmento, la
  chiave concatenata relativa a ciascuna occorrenza di ogni segmento
- posizionarsi direttamente su una occorrenza di un segmento conoscendo
  il nome DL/1 del campo e il suo contenuto
- cambiare numero di PCB o lo stesso PSB di accesso al database

    Si puo' forzare l'accesso in read-only al database; si puo' infine
tenere un log di tutti gli aggiornamenti che vengono fatti sui database.




2)                         D E S C R I Z I O N E


    Si accede alla transazione come se fosse un comando, con la seguente
sintassi:

    EDL1  nome-PSB  numero-PCB

dove per nome-PSB si intende il nome di un PSB DL/1 con il quale in CICS si
accede al database. Il nome PSB e' quindi al massimo di 8 caratteri e deve
essere definito nella tabella PDIR del CICS/MVS o nella tabella ACT del
CICS/VSE, associandolo al programma CICSEDL1.
Il numero di PCB indica il PCB del PSB selezionato che verra' effettivamente
usato per accedere al database; se questo numero viene omesso si assume
per default che sia uguale a 1.
Si puo' aggiungere il parametro opzionale 'RO' per forzare l'accesso in
Read-Only del database; si tenga comunque presente che RO impedisce di
dare i comandi di update nel programma, mentre e' la Procopt quella che
determina come e' realmente acceduto il database dalle routines DL/1.
Il programma inizia ad accedere al database in maniera sequenziale con
delle GET NEXT non qualificate e visualizza i primi segmenti incontrati.
Schematizziamo tale schermata nel seguente modo:


    /------------------------------------------------------------------+
    ! Editor EDL1 - nomePSB  PCB=2/18  DBD=nomedbd  NSS= 2  EDL1L0C1   !
    !     0<...+....!....+....!....+....!....+....!....+....!....+     !
    !      01 segradice  LENKEY= 8   PROCOPT= GOP                      !
    ! ---- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa                    !
    !      02 segmento1  LENKEY=12   PROCOPT= AP                       !
    ! ---- dddddddddddddddddddddddddddddddddddddddddddddd              !
    ! ---- eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee              !
    !      02 segmento2  LENKEY=15   PROCOPT= GOP  STATUS=GK           !
    ! ---- fffffffffffffffffffffffffff                                 !
    !      01 segradice  LENKEY= 8   PROCOPT= GOP  STATUS=GA           !
    ! ---- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb                    !
    ! ---- cccccccccccccccccccccccccccccccccccccccc                    !
    ! ----                                                             !
    ! ==> _                                                            !
    ! 1=Help 2=Hex 3=Quit 4=Left 5=Right 6=KeyV 7=Ba 8=Fo 9=Top 10=RSSA!
    +------------------------------------------------------------------/


    La schermata e' composta da:
- prima riga, con alcune caratteristiche del database
- seconda riga, con il righello, in cui il numero a sinistra indica la
  posizione di partenza rispetto all'inizio record
- righe da 3 a 22 composte da 'prefix area' (la colonna di '----' sulla
  sinistra, non presente pero' su tutte le righe) su cui si possono dare
  comandi relativi al singolo segmento, e il segmento stesso, visualizzato
  a seconda dei casi in chiaro o in esadecimale.
  Nello scorrimento sequenziale del database ad ogni cambio del tipo di
  segmento viene riportata una intestazione che riporta:
  . il livello gerarchico del segmento rispetto alla radice: 01 = radice;
    02 = primo livello, figlio della radice; 03 = secondo livello, figlio
    del livello 02, ecc.
  . il nome del segmento
  . la lunghezza della chiave concatenata
  . il PROCOPT di accesso al segmento, cosi' come e' definito nel PCB
  . l'eventuale status code DL/1 risultato dalla lettura del primo
    segmento di quel tipo; GA e' puramente informativo e indica il passaggio
    ad un segmento di livello inferiore; anche GK e' informativo ed indica
    il passaggio ad un segmento di tipo diverso ma di pari livello del
    precedente
- riga 23, la 'command line' su cui si possono dare altri comandi
- riga 24, con un pro memoria dell'uso dei tasti funzione

    Spieghiamo in dettaglio il contenuto della prima linea:
- nome del PSB, che e' stato digitato all'innesco della transazione
- numero di PCB digitato all'innesco, rispetto al numero totale di PCB
  disponibili nel PSB
- nome del DBD a cui appartengono i segmenti visualizzati
- numero dei Sensitive Segments che e' stato definito nel PCB in uso;
  normalmente corrisponde al numero dei segmenti diversi del database
- nome del buffer gestito dal programma; questo buffer e' materialmente una
  coda di Temporary Storage il cui nome (se non viene cambiato con l'apposito
  comando) e' composto per i primi quattro caratteri da 'EDL1' e per i secondi
  quattro dal nome del terminale su cui si sta lavorando.

    Si intende che in ogni videata le righe immediatamente seguenti
ad una intestazione di inizio di un segmento sono tutte occorrenze dello
stesso segmento che hanno lo stesso padre ('Twin Segments') ma che
non hanno figli, tranne eventualmente l'ultimo segmento: se a questo
segue un tipo segmento di livello maggiore si intende che questi segmenti
successivi sono tutti figli di quest'ultimo segmento.
    Per sintetizzare, basta comunque dire che l'ordine di visualizzazione
dei segmenti e' l'ordine di accesso sequenziale normale nel DL/1:
vedendo il database DL/1 come un albero capovolto con il segmento radice
in alto, l'ordine di accesso e' dall'alto verso il basso e da sinistra verso
destra.

    Al suo innesco, la transazione accede ai segmenti in Read-Only, e
quindi, a differenza di un normale editor, i campi video che rappresentano
i segmenti visualizzati non sono digitabili; vedremo poi in che modo
aggiornarli.


    I comandi che si possono scrivere in 'prefix area', accanto al segmento
su cui si vuole che agiscano, sono i seguenti:

'/'  : fa diventare quel segmento il primo segmento della schermata
'C'  : copia il segmento nel buffer di temporary storage attualmente
       definito. I comandi di copia successivi accodano i segmenti a
       quelli precedente copiati, fino a che il buffer non viene
       esplicitamente svuotato con l'apposito comando.
       Il buffer puo' a sua volta venire editato col comando 'EDTS'.
'D'  : cancella il segmento dal database, assieme agli eventuali segmenti
       figli. Di ogni segmento cancellato, viene tenuta traccia nel file di
       log della transazione, di nome EDL1LOG.
.n   : definisce una label associandola al segmento specificato; 'n' e'
       un numero che va da 0 a 9, per cui si possono definire fino a 10
       label diverse. In momenti successivi, digitando in command line
       la stessa label '.n' ci si posiziona immediatamente a partire dal
       segmento a cui la label e' associata. In altre parole, '.n' in prefix
       area memorizza la chiave concatenata associata al segmento, mentre
       '.n' in command line usa la chiave precedentemente memorizzata
       per l'accesso diretto al segmento.
MASK : non visualizza il tipo di segmento specificato; la parola 'MASK'
       deve essere digitata per intero di fianco ad una qualsiasi delle
       occorrenze del segmento da mascherare. Il programma con MASK, pur
       leggendo le occorrenze del segmento da mascherare, non le visualizza
       sullo schermo e non le prende in considerazione nella ricerca di
       stringhe. Uno dopo l'altro, si possono specificare piu' MASK su
       segmenti diversi, fino a visualizzare solo la parte del database
       desiderata. Il comando di command line 'RESET' toglie tutti i comandi
       MASK che si sono dati fino a quel momento.
ONLY : visualizza soltanto il tipo di segmento specificato; la parola 'ONLY'
       deve essere digitata per intero di fianco ad una qualsiasi delle
       occorrenze del segmento. Il programma in questo caso accede al database
       con una GET NEXT non qualificata in cui e' specificato solo il segmento
       voluto. Il comando 'RESET' permettere di togliere 'ONLY' e ritornare
       alla visione completa.
GET  : inserisce i record del buffer come occorrenze del segmento accanto
       a cui il comando e' dato. Se nel segmento e' definito un campo che
       deve essere in sequenza (FIELD ....,NAME=(nomecampo,SEQ,U) nella DBD)
       i record saranno inseriti secondo l'ordine precisato da questo campo
       ed eventali campi doppi corrispondenti a record gia' presenti
       daranno errore e non verranno inseriti.
GETP : inserisce i record del buffer in un segmento figlio del segmento
       accanto a cui il comando e' dato. Viene chiesto il nome del segmento
       figlio in cui inserire i segmenti. Questo comando ha come unico
       scopo permettere l'inserimento in segmenti figli in cui attualmente
       non sia presente nessuna occorrenza: infatti in questo caso e'
       evidentemente impossibile dare il comando GET. Per il resto, le
       modalita' di inserimento sono uguali al comando GET.

Note:
A conclusione del comando GET o GETP compare un messaggio che indica il
numero di record inseriti e il numero di record scartati
Il comando GET o GETP lascia inalterato il buffer; quindi, se necessario,
il buffer va cancellato in seguito col comando Purge.
Ogni record aggiunto con successo viene registrato in EDL1LOG.
Non sono disponibili i comandi di blocco per copia ('CC') e cancellazione
('DD') di segmenti.


    I comandi che si possono scrivere in 'command line' sono in parte una
duplicazione dei tasti funzione:

    Help     (PF1) : richiama la schermata di Help, con un sunto di tutti
                     i comandi
    Hex On/Off(PF2): cambia il modo di visualizzazione in esadecimale (On)
                     e toglie l'esadecimale se presente (Off)
    Quit     (PF3) : termina il programma; questo comando (e il corrispon-
                     dente tasto funzione) si puo' usare in fase di Update
                     del file per abbandonare l'aggiornamento senza che
                     alcuna modifica venga scritta
    Follow   (PF8) : avanza di una pagina video nella visualizzazione
    Backward (PF7) : va indietro di una pagina video nella visualizzazione
                     Si tenga presente che, a differenza dei files Vsam,
                     non e' possibile in DL/1 fare un browse all'indietro
                     del database: e' consentito solo il browse in avanti
                     (con le GET NEXT) o l'accesso diretto (con le GET
                     UNIQUE). In questo programma percio' il browse all'
                     indietro e' simulato memorizzando le chiavi concatenate
                     di ciascun segmento che e' all'inizio di schermata:
                     in questo modo per passare alla pagina precedente il
                     programma prima fa un accesso diretto al segmento
                     di inizio della pagina precedente, poi fa un browse in
                     avanti fino a riempire il video. Il programma e' in
                     grado di memorizzare fino a 20 puntatori alle pagine
                     precedenti. Le conseguenze di queste limitazioni sono:
                     . Si puo' ritornare a visualizzare una pagina se questa
                       era gia' stata visualizzata in precedenza
                     . Un posizionamento diretto col comando SSA non permette
                       di ritornare indietro di alcuna pagina
                     . Il numero massimo di pagine indietro e' 20
                     . Se nel browse in avanti si e' visualizzato con 'MASK'
                       o 'ONLY' impostati, che agiscono da filtro impedendo
                       la visualizzazione di determinati segmenti, e nel
                       browse all'indietro questi comandi sono stati tolti
                       con 'RESET' le schermate che si vedono non corrispon-
                       dono ad un browse all'indietro corretto;
                     . Il comando Bottom per posizionarsi a fine database non
                       e' disponibile
    Right    (PF5) : sposta a destra la visualizzazione dei segmenti;
                     lo spostamento e' di 40 caratteri normalmente, di 20
                     caratteri se si e' in visualizzazione esadecimale;
                     in linea comandi si puo' specificare di fianco a 'Right'
                     il numero di colonne di cui ci si vuol spostare: questo
                     numero viene in ogni caso troncato dal programma ad un
                     multiplo di 10
    Left     (PF4) : sposta la visualizzazione a sinistra, con le stesse
                     modalita' del comando 'Right'
             (PF6) : visualizza al posto dei segmenti, le loro chiavi
                     concatenate
    Top      (PF9) : si posiziona a inizio database
             (PF10): rende disponibile l'ultimo comando SSA che e' stato
                     digitato, permettendone la modifica per un altro
                     posizionamento diretto

    I comandi rimanenti sono anche i piu' importanti:

    Update : passa da modo Read-only a modo Update. I campi di visualizza-
             zione dei segmenti diventano digitabili e ciascun segmento
             presente nella schermata e' modificabile liberamente.
             Finche' si rimane in modo Update sono disabilitati tutti i comandi
             che cambiano il posizionamento nel file, ossia non funzionano
             PF7, PF8, PF9, il comando di ricerca di stringa e il comando SSA.
             Funzionano invece il posizionamento a destra e a sinistra (PF4
             e PF5) e in particolare il cambio di visualizzazione in esa-
             decimale: in questo caso la modifica dei segmenti dovra' essere
             scritta in cifre esadecimali. Si noti che in visualizzazione
             normale e' rappresentato come punto (.) qualunque carattere
             che abbia un valore non visualizzabile; tipicamente saranno
             modificati in esadecimale i campi numerici in rappresentazione
             packed o binaria.
             Qualunque modifica venga fatta ai segmenti visualizzati viene
             fatta solo in memoria senza alcun aggiornamento del file;
             per abbandonare le modifiche fatte si fara' Quit (o PF3) mentre
             per scriverle permanentemente si dara' il comando 'File' (o
             ancora 'Update', che qui e' un sinonimo di 'File'); un
             messaggio indica quanti segmenti sono stati riscritti con
             successo. All'uscita del modo Update si ritorna in modo Read
             Only e i comandi di posizionamento vengono riattivati.
       Note: - la cancellazione di segmenti e' disabilitata in modo Update
             - di ogni segmento aggiornato con successo viene tenuta traccia
               in EDL1LOG.


    SSA    : Posizionamento diretto su un determinato segmento.
             In pratica bisogna scrivere una SSA, anche se la sintassi
             non e' strettamente posizionale come nelle SSA disponibili
             al programmatore.
             Nella sua forma piu' comune il comando puo' essere scritto
             cosi':

                   SSA  segmento (campo OP. valore)

             dove: segmento    e' il nome del segmento
                   campo       e' il nome del campo del segmento
                   OP.         e' l'operatore di confronto: '=', '<', '>=' ecc.
                   valore      e' il valore da confrontare col contenuto
                               del campo; se si e' in visualizzazione
                               esadecimale il valore deve essere scritto in
                               esadecimale
             Tipicamente in un database HIDAM si usa il segmento radice e il
             campo e' la chiave primaria. Tra ogni componente del comando
             si possono mettere uno o piu' spazi (o anche nessuno).
             Di default viene fatta una GET UNIQUE della SSA digitata: si
             puo' cambiare l'accesso scrivendo tra la parola SSA e il
             nome del segmento 'GN' per fare una GET NEXT qualificata su
             un segmento; cio' puo' servire per accedere ad un segmento
             non radice, con un campo opportunamente valorizzato.

    EDTS   : richiama l'editor di code di Temporary Storage per visualizzare
             ed eventualmente cambiare i record accumulati nel buffer.
             Per il dettaglio rimandiamo alla documentazione di EDTS.
             Durante la cancellazione di linee nel buffer, puo' capitare che
             in fondo al buffer rimangano delle linee spurie non cancellabili
             composte da un byte di valore esadecimale '00': cio' e' dovuto
             alla natura stessa della Temporary Storage che non permette la
             cancellazione di singoli record; queste linee spurie saranno
             comunque ignorate dal comando Get.
             Se si da il comando EDTS e il buffer e' vuoto, viene inserito
             nel buffer un record lungo 80 pieno di spazi.
             Accanto al comando EDTS si puo' specificare il nome di una coda
             di Temporary Storage voluta se non si vuole editare la coda che
             rappresenta il buffer della transazione; comunque, finche' non
             verra' cambiato il nome del buffer stesso associandolo ad una
             altra coda di TS, i comandi come Get useranno solo la coda di
             default.

    Purge  : cancella il contenuto della coda di Temporary Storage usata
             come buffer.

    Buffer nome-coda-TS : cambia nome alla coda di TS che rappresenta il
             buffer della transazione; comandi come 'Get' o il comando di
             copia in prefix area leggeranno e scriveranno in questa nuova
             coda di Temporary Storage.

    Zone col1 col2 : definisce un campo che inizia nella prima colonna
             specificata e che finisce alla seconda colonna specificata
             (vedi i caratteri '<' e '>' sul righello). Questa definizione
             restringe la ricerca quando si usa il comando '/.../'.
             Per default, la ricerca e' sempre su tutto il segmento.

    /stringa/ : ricerca la stringa specificata in avanti nel database
             Se e' stato precedentemente specificato 'Zone' la ricerca
             avviene sul campo indicato, altrimenti avviene su tutto
             il segmento. I segmenti in cui la stringa e' stata trovata sono
             evidenziati con '===>' in prefix area; se la stringa non viene
             trovata la ricerca finisce a fine database.
             Se il comando viene digitato quando si e' in visione esadecimale,
             si intende che la stringa tra le due barre deve essere scritta
             in esadecimale. Se il comando viene digitato quando e' in
             effetto il comando MASK o ONLY, la ricerca avviene solo sui
             segmenti visualizzabili.
             La seconda barra di chiusura della stringa non puo' essere
             omessa. Se tra i caratteri della stringa da ricercare vi e'
             proprio la barra (/), allora la stringa deve essere scritta
             in esadecimale per evitare ambiguita'. Usare questo comando
             con cautela per i database molto grossi, perche' puo' essere di
             lunga durata e nel contempo puo' penalizzare pesantemente le
             altre transazioni concorrenti.
             Per limitare la pesantezza del comando, esiste un limite al
             numero di segmenti che puo' essere letto in una volta: se
             la stringa cercata non e' stata trovata entro questo numero,
             la ricerca viene interrotta mostrando un messaggio. A questo
             punto pero' la ricerca puo' essere comunque essere proseguita
             con 'FIND'. Il limite di default e' 5000 segmenti: puo' essere
             variato col comando 'SCANLIM'.
             La ricerca della stringa all'interno del segmento viene
             comunque limitata al valore specificato con MAXLEN (di default,
             e' 250 caratteri).

    Find   : prosegue la ricerca precedentemente impostata con /..../ nella
             zona presente attualmente.

    Scanlim  n  : definisce il numero massimo di segmenti che puo' essere
             letto in una ricerca con /.../ o con 'FIND' prima della
             interruzione; 'n' puo' essere un numero tra 100 e 1000000.

    Maxlen   n  : definisce la lunghezza massima del segmento su cui
             agiscono i comandi di ricerca di stringa; il default e' 250
             ma puo' essere aumentato fino a 2000 caratteri.

    ABEND  : forza un abend della transazione; lo scopo puo' essere quello
             di controaggiornare un database che ci si e' accorti di avere
             modificato in maniera errata.
             Ovviamente, una volta terminata la transazione il database
             non e' piu' controaggiornabile.
             Nel log della transazione (il file EDL1LOG, che non e'
             a sua volta controaggiornabile, dal momento che e' un ESDS)
             vengono registrate sia le modifiche che sono state contro-
             aggiornate, sia il fatto che e' stato richiesto un abend
             dall'utente. In EDL1LOG non si ha traccia di altri eventuali
             abend che dovessero capitare alla transazione.


    Note: ognuno dei comandi di command line puo' essere abbreviato fino
ad un'unica lettera purche' non sorgano ambiguita' con altri comandi;
esempi di abbreviazioni minime:
F  = Follow   ;   FI = Find   ;   FIL = File
Il comando 'ABEND' va invece scritto per intero.




5)                     I N S T A L L A Z I O N E


    La transazione si compone di un unico eseguibile di nome CICSEDL1.
Benche' non necessario, e' consigliabile avere anche il programma
CICSEDTS per l'implementazione del comando EDTS.
Dovra' percio' essere creata una entrata in PCT per il Transid 'EDL1' e
una entrata in PPT per il programma CICSEDL1; opzionalmente una entrata
in FCT per il file di log 'EDL1LOG'.
    Il programma in PPT deve essere definito come programma assembler.
Il transid puo' essere scelto a piacere come anche il nome del programma,
purche' ovviamente in PCT il legame tra codice transazione e programma
corrispondente sia corretto.
Non si puo invece cambiare il nome logico del file di log 'EDL1LOG' a
meno che non si faccia una zap direttamente sull'eseguibile; il file
ha comunque le stesse caratteristiche del file di log della transazione
VSAM, per cui, cambiando il nome si potrebbe usare lo stesso file per
tutte e due.
    Il file di log e' un ESDS con record lunghi 80; tutto il resto e'
a piacere. Il file non necessita di inizializzazione; verra' usato da
EDL1 solo se esiste ed e' aperto; si consiglia di usarlo in ambiente di
produzione per tenere sotto controllo accessi indiscriminati.
In un record del log vengono registrati: giorno, ora, terminale, nome
utente (oppure nome del CICS, se l'utente non ha fatto SIgn-On), nome
PSB, numero PCB, nome DBD, nome segmento, tipo di aggiornamento e
chiave concatenata del segmento aggiornato.
Il log si puo' visualizzare con la transazione VSAM; il suo contenuto
pero' non puo' essere variato.
    Il programma e' scritto in assembler Command Level in maniera
conversazionale; gira da partire dal CICS 1.7 fino al CICS Versione 3.
E' disponibile in ambiente VSE/SP e in MVS.


Esempi di codifica delle tabelle (si usino parametri analoghi in CEDA):

PCT :
         DFHPCT   TYPE=ENTRY,
               TRANSID=EDL1,
               RSL=PUBLIC,
               PROGRAM=CICSEDL1


PPT :
         DFHPPT   TYPE=ENTRY,PROGRAM=CICSEDL1,RSL=PUBLIC


    La sola cosa importante e' definire come linguaggio l'Assembler (che
e' il default nelle tabelle tradizionali ma non in CEDA).


FCT :
         DFHFCT TYPE=DATASET,RSL=PUBLIC,
               DATASET=EDL1LOG,
               ACCMETH=VSAM,
               SERVREQ=(UPDATE,BROWSE,ADD,READ,DELETE),
               FILSTAT=CLOSED,
               LSRPOOL=NONE,
               LOG=NO,
               RECFORM=(FIXED,BLOCKED),
               STRNO=1


Delete / Define del file EDL1LOG:

         DELETE (edl1.log) CLUSTER PURGE CATALOG(nome.catalogo)
         DEFINE CLUSTER (                                  -
                NAME(edl1.log)                             -
                NONINDEXED                                 -
                REUSE                                      -
                TRACKS(5 5)                                -
                RECORDSIZE(80 80)                          -
                SHAREOPTIONS(2)                            -
                VOLUMES(nomevol)                           -
                )                                          -
              DATA (                                       -
                NAME(edl1.log.data)                        -
                CISZ(1024)                                 -
                )                                          -
              CATALOG(nome.catalogo)



    Il programma potrebbe essere richiamato direttamente da un altro
programma con un EXEC CICS LINK, passandogli i parametri in COMMAREA,
invece che essere richiamato a video dall'operatore.
La COMMAREA puo' essere di lunghezza qualsiasi fino a un massimo di 100 bytes.
In pratica, se trascuriamo i paramerti opzionali, in COMMAREA verra'
passato solo il nome del PSB e il numero del PCB per cui una lunghezza di
12 e' piu' che sufficente.

    Il programma ha i seguenti limiti:
- ciascun segmento non puo' essere piu' lungo di 2000 bytes;
  il DL/1 non restituisce mai la lunghezza di ciascun segmento letto, per
  cui non e' in grado di rilevare segmenti piu' lunghi di 2000 che mandano
  abend il programma
- ciascuna chiave concatenata non puo' essere piu' lunga di 256
- il terminale cics deve essere un 3270 standard 80x24



