[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 572.   Divisione «DATA DIVISION»

La divisione DATA DIVISION costituisce la terza parte, la più complessa, di un programma COBOL e ha lo scopo di descrivere tutti i dati (variabili e costanti) utilizzati nel programma. Si distinguono in particolare: i record dei file a cui si vuole accedere, altre variabili e valori costanti creati o utilizzati dal programma.

La divisione si articola normalmente in tre sezioni: FILE SECTION, per tutte le informazioni riguardanti i file dichiarati nella divisione ENVIRONMENT DIVISION, soprattutto per quanto riguarda la struttura del record; WORKING-STORAGE SECTION per tutte le variabili (che possono essere sia scalari, sia strutturate, ma in questo secondo caso vengono chiamate ugualmente record, anche se non sono associate direttamente ad alcun file) e le costanti necessarie per l'elaborazione; LINKAGE SECTION, per la dichiarazione dei dati condivisi con altri programmi.

In questo manuale la descrizione della sezione LINKAGE SECTION viene omessa del tutto; pertanto, lo schema sintattico seguente non la riporta:

   DATA-DIVISION.
   ¯¯¯¯¯¯¯¯¯¯¯¯¯
.--
|
|  FILE SECTION.
|  ¯¯¯¯¯¯¯¯¯¯¯¯
`--
       .--                                                         --.  --.
       |  file-description-entry        record-description-entry...  |    |
       |                                                             |... |
       |  sort-merge-description-entry  record-description-entry...  |    |
       `--                                                         --'  --'
.--
|
|  WORKING-STORAGE SECTION.
|  ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
`--
       .--                          --.   --.
       |  77-level-description-entry  |     |
       |                              |...  |
       |  record-description-entry    |     |
       `--                          --'   --'

Sulla base della terminologia usata nello schema sintattico, si può intuire il fatto che per il linguaggio COBOL, il termine record ha un significato particolare: si tratta di una variabile strutturata, che pertanto può essere scomposta in campi, in modo più o meno articolato. In questo senso, il contenuto della sezione WORKING-STORAGE SECTION viene suddiviso in due tipi di dichiarazioni: variabili scalari non suddivisibili (la metavariabile 77-level-description-entry) e variabili strutturate, ovvero record. Naturalmente, una variabile strutturata (dichiarata come record) può essere gestita e usata tranquillamente come se fosse uno scalare puro e semplice, ma questo fatto ha eventualmente delle ripercussioni nell'efficienza del programma che si ottiene dalla compilazione.

572.1   Sezione «FILE SECTION»

La sezione FILE SECTION ha lo scopo di definire le caratteristiche fisiche dei file e la struttura dei record. Tradizionalmente sarebbe in questa sezione che si specifica il nome o il percorso dei file in base al sistema operativo in cui si deve utilizzare il programma, salvo il caso in cui il compilatore voglia questa indicazione direttamente nella divisione ENVIRONMENT DIVISION, precisamente nell'istruzione SELECT della sezione FILE CONTROL.

La descrizione di un file nella sezione FILE SECTION inizia con l'indicatore di livello FD o SD, a seconda che si tratti di un file «normale» o di un file da usare per le operazioni di riordino e fusione. Si osservi che queste due istruzioni iniziano nell'area A del modulo di programmazione, continuando poi nell'area B, ma è importante sottolineare che già il nome del file, evidenziato nello schema sintattico con il nome file-name, deve iniziare nell'area B:

/                \
| FD   file-name |
< ¯¯             >
| SD   file-name |
\ ¯¯             /

      .--          --.
      |  entry-item  |... .
      `--          --'

Dopo ogni indicatore di livello FD o SD deve apparire la dichiarazione della variabile strutturata che rappresenta il record del file; tale dichiarazione inizia con il livello 01.

572.1.1   Indicatore di livello «FD»

I file comuni, ovvero quelli che non sono stati dichiarati esplicitamente per eseguire delle operazioni di riordino o di fusione, si descrivono nella sezione FILE SECTION con l'indicatore di livello FD (File description), che in pratica è un'istruzione singola. Si ricordi che il nome del file che segue la parola chiave FD deve iniziare nell'area B del modulo di programmazione:

FD  file-name
¯¯
    .--                                         /              \ --.
    |                                           |  RECORDS     |   |
    |  BLOCK CONTAINS [integer-1 TO] integer-2  <  ¯¯¯¯¯¯¯     >   |
    |  ¯¯¯¯¯                     ¯¯             |  CHARACTERS  |   |
    `--                                         \              / --'

     [ RECORD CONTAINS [integer-3 TO] integer-4 CHARACTERS ]
       ¯¯¯¯¯¯                     ¯¯
    .--       /               \   /            \ --.
    |         |  RECORD IS    |   |  OMITTED   |   |
    |  LABEL  <  ¯¯¯¯¯¯       >   <  ¯¯¯¯¯¯¯   >   |
    |  ¯¯¯¯¯  |  RECORDS ARE  |   |  STANDARD  |   |
    `--       \  ¯¯¯¯¯¯¯      /   \  ¯¯¯¯¯¯¯¯  / --'

    .--          /                    /               \  \   --.
    |            |                    |  data-name-1  |  |     |
    |  VALUE OF  <  label-info-1  IS  <               >  >...  |
    |  ¯¯¯¯¯     |                    |   literal-1   |  |     |
    `--          \                    \               /  /   --'

    .--      /               \                              --.
    |        |  RECORD IS    |                                |
    |  DATA  <  ¯¯¯¯¯¯       >  data-name-2 [data-name-3]...  |
    |  ¯¯¯¯  |  RECORDS ARE  |                                |
    `--      \  ¯¯¯¯¯¯¯      /                              --'

     [ CODE-SET IS alphabet-name ].
       ¯¯¯¯¯¯¯¯

Si osservi che, a seconda del compilatore e del sistema operativo per il quale il programma viene compilato, diverse dichiarazioni inserite nell'indicatore di livello FD potrebbero essere ignorate in pratica.

572.1.2   Indicatore di livello «SD»

I file da usare specificatamente per il riordino o la fusione, si descrivono nella sezione FILE SECTION con l'indicatore di livello SD (Sort description), che in pratica è un'istruzione singola. Si ricordi che il nome del file che segue la parola chiave SD deve iniziare nell'area B:

SD  file-name
¯¯
     [ RECORD CONTAINS [integer-3 TO] integer-4 CHARACTERS ]
       ¯¯¯¯¯¯                     ¯¯
    .--          /                    /               \  \   --.
    |            |                    |  data-name-1  |  |     |
    |  VALUE OF  <  label-info-1  IS  <               >  >...  |
    |  ¯¯¯¯¯     |                    |   literal-1   |  |     |
    `--          \                    \               /  /   --'

    .--      /               \                              --.
    |        |  RECORD IS    |                                |
    |  DATA  <  ¯¯¯¯¯¯       >  data-name-2 [data-name-3]...  | .
    |  ¯¯¯¯  |  RECORDS ARE  |                                |
    `--      \  ¯¯¯¯¯¯¯      /                              --'

572.1.3   Dichiarazione «BLOCK CONTAINS»

All'interno dell'indicatore di livello FD è possibile dichiarare la dimensione di un blocco fisico per l'accesso ai record del file a cui si sta facendo riferimento.

In generale, si può contare sul fatto che il sistema operativo sia in grado di gestire in modo trasparente il problema dei blocchi fisici dei dati, rispetto ai record «logici» utilizzati dai programmi; tuttavia, ci possono essere contesti in cui il programma che si genera deve provvedere da solo ad accedere all'unità di memorizzazione, pertanto in questi casi conviene dichiarare nel programma la dimensione del blocco di dati da usare per la comunicazione con l'unità stessa. Storicamente la definizione del blocco consente di gestire meglio l'utilizzo di un'unità a nastro; in altre situazioni, come per esempio con un lettore o perforatore di schede, il blocco può contenere un solo record.

                                         /              \
                                         |  RECORDS     |
BLOCK CONTAINS [integer-1 TO] integer-2  <  ¯¯¯¯¯¯¯     >
¯¯¯¯¯                     ¯¯             |  CHARACTERS  |
                                         \              /

Omettendo questa dichiarazione, si intende lasciare al compilatore o al sistema operativo il compito di determinare un valore predefinito valido.

L'unità di misura del blocco dipende dalla parola usata, o non usata, alla fine della dichiarazione: la parola chiave RECORDS indica che i valori numerici si riferiscono a quantità di record, mentre diversamente si intendono dei «caratteri». Generalmente è da considerare che per caratteri si intendano byte.

Se viene indicato un valore solo (integer-2), si intende che il blocco possa avere soltanto quella dimensione, altrimenti, si intende dire al compilatore che c'è la possibilità di usare blocchi che hanno una dimensione minima (integer-1) e una massima (integer-2).

572.1.4   Dichiarazione «DATA RECORD»

La dichiarazione DATA RECORD, che riguarda sia l'indicatore di livello FD, sia SD, è obsoleta e generalmente viene ignorata dai compilatori. Il suo scopo è quello di dichiarare il nome di una o più variabili strutturate che descrivono il record del file. Questa dichiarazione è obsoleta soprattutto perché il record viene comunque indicato successivamente attraverso la dichiarazione di una variabile strutturata apposita.

      /               \                              
      |  RECORD IS    |                              
DATA  <  ¯¯¯¯¯¯       >  data-name-2 [data-name-3]...
¯¯¯¯  |  RECORDS ARE  |                              
      \  ¯¯¯¯¯¯¯      /                              

I nomi da inserire al posto delle metavariabili data-name dello schema sintattico devono corrispondere a nomi di record (variabili strutturate) descritti con il numero di livello 01. La presenza di più di uno di questi nomi nella dichiarazione DATA implica che i record del file possono avere una struttura e una dimensione differente.

572.1.5   Dichiarazione «LABEL RECORD»

A seconda del tipo di unità di memorizzazione dei dati, ci può essere la necessità di aggiungere ai record delle informazioni per poterne poi gestire l'accesso. Il linguaggio COBOL prevede la possibilità di dover gestire direttamente questo meccanismo di etichettatura dei record, ma generalmente i sistemi operativi attuali dovrebbero rendere questo meccanismo trasparente, togliendo al programma COBOL l'onere di doversene occupare.

La dichiarazione LABEL RECORD servirebbe per stabilire se siano da gestire le «etichette» dei record, oppure se questa funzione non debba essere considerata dal programma. Attualmente, tale dichiarazione è obsoleta e generalmente i compilatori si limitano a ignorarla:

       /               \   /            \
       |  RECORD IS    |   |  OMITTED   |
LABEL  <  ¯¯¯¯¯¯       >   <  ¯¯¯¯¯¯¯   >
¯¯¯¯¯  |  RECORDS ARE  |   |  STANDARD  |
       \  ¯¯¯¯¯¯¯      /   \  ¯¯¯¯¯¯¯¯  /

Dovendo o volendo inserire questa dichiarazione, in caso di dubbio la forma LABEL RECORD IS STANDARD dovrebbe essere quella più adatta, anche se non è più compito del programma occuparsi delle etichette. Di per sé, l'omissione di questa dichiarazione comporta, per il compilatore che dovesse volerla, proprio l'utilizzo della forma standard.

572.1.6   Dichiarazione «RECORD CONTAINS»

La dichiarazione RECORD CONTAINS, che riguarda sia l'indicatore di livello FD, sia SD, permette di specificare la dimensione del record:

RECORD CONTAINS [integer-3 TO] integer-4 CHARACTERS
¯¯¯¯¯¯                     ¯¯

Come si può intuire, se si indica un valore solo, si intende che il record abbia una dimensione fissa, altrimenti si prevede un intervallo di valori: da un minimo a un massimo.

Generalmente, i compilatori si limitano a ignorare questa dichiarazione, perché le informazioni che porta sono già incluse nella variabile strutturata che descrive il record stesso, pertanto è sufficiente associare più variabili strutturate nella dichiarazione DATA RECORD.

572.1.7   Dichiarazione «CODE-SET»

La dichiarazione CODE-SET riguarda i file a organizzazione sequenziale e serve a specificare l'insieme di caratteri con cui tale file è codificato. Tradizionalmente, questa istruzione è servita per gestire dati in formato EBCDIC, in contrapposizione al codice ASCII, o viceversa.

CODE-SET IS alphabet-name
¯¯¯¯¯¯¯¯

Al posto della metavariabile alphabet-name va inserita una parola che definisce l'insieme di caratteri del file, secondo le aspettative del compilatore utilizzato.

572.1.8   Dichiarazione «VALUE OF»

La dichiarazione VALUE OF consente, in un certo senso, di assegnare dei valori a delle voci legate alle caratteristiche del file. La cosa più importante che si potrebbe fare è di specificare il file da utilizzare secondo ciò che richiede il sistema operativo. Per esempio, se si tratta di un file su disco e il sistema operativo richiede di indicare anche i dischi per nome, il compilatore dovrebbe prevedere qui una voce appropriata.

          /                    /               \  \
          |                    |  data-name-1  |  |
VALUE OF  <  label-info-1  IS  <               >  >...
¯¯¯¯¯     |                    |   literal-1   |  |
          \                    \               /  /

Le voci che si possono dichiarare qui possono essere di ogni tipo, con la possibilità di abbinare un valore costante (una stringa alfanumerica), oppure una variabile il cui contenuto viene poi modificato in fase elaborativa.

L'estratto seguente di un programma COBOL, scritto per il compilatore TinyCOBOL, mostra l'uso della voce FILE-ID per dichiarare il nome del file da utilizzare:

001000 FILE-CONTROL.
001100     SELECT FILE-NAME ASSIGN TO DISK
001200                      ORGANIZATION IS SEQUENTIAL
001300                      ACCESS MODE IS SEQUENTIAL
001400                      FILE STATUS IS DATA-NAME.
001600 DATA DIVISION.
001700 FILE SECTION.
001800 FD  FILE-NAME
001900     LABEL RECORD IS STANDARD
002000     VALUE OF FILE-ID IS "input.seq".
002100 01  RECORD-NAME  PIC X(20).
002200 WORKING-STORAGE SECTION.
002300 01  DATA-NAME    PIC XX.

572.1.9   Descrizione del record

Dopo ogni indicatore di livello (FD o SD) si deve descrivere il record attraverso una variabile strutturata, che si dichiara con quelli che sono noti come livelli. I livelli sono in pratica delle dichiarazioni che costituiscono ognuna delle istruzioni singole, ma in tal caso, a differenza delle istruzioni comuni, iniziano con un numero: il numero di livello.

Il livello 01 è obbligatorio e dichiara il nome della variabile strutturata che descrive il record nella sua interezza; qualunque numero superiore serve a descrivere una porzione inferiore del record, con la possibilità di scomposizioni successive. I numeri di livello che possono essere usati per questo scopo sono limitati all'intervallo da 01 a 49, tenendo conto che, a parte l'obbligo di iniziare da 01, i livelli inferiori possono utilizzare incrementi superiori all'unità. Si osservi l'esempio seguente che contiene un estratto dalla sezione FILE SECTION:

001600 DATA DIVISION.
001700 FILE SECTION.
001800 FD  SALES-FILE
001830     LABEL RECORD IS STANDARD
001860     VALUE OF FILE-ID IS "sales".
001900 01  SALES-RECORD.
002000     05  SALES-VENDOR-NAME      PIC X(20).
002100     05  SALES-VALUE            PIC S9(6).
002200     05  SALES-NUMBER           PIC X(13).
002300     05  SALES-TYPE             PIC X.
002400     05  SALES-VENDOR-REGION    PIC X(17).
002500     05  SALES-VENDOR-CITY      PIC X(20).
002600     05  SALES-COMMENTS         PIC X(60).

Il file individuato dal nome SALES-FILE si compone di record a cui si può fare riferimento con la variabile strutturata SALES-RECORD. Il record si suddivide in sette campi con caratteristiche diverse. Il record nella sua interezza corrisponde al livello 01, evidenziato dalla sigla 01 che si trova nell'area A del modulo di programmazione. Come si vede nel livello 01 dell'esempio, la variabile strutturata che rappresenta tutto il record viene solo nominata, senza altre indicazioni, perché la sua dimensione si determina dalla somma dei campi che contiene.

I numeri di livello, mano a mano che si annidano in sottolivelli successivi, devono crescere: non è importante se il numero cresce di una o di più unità. Tradizionalmente, i livelli vengono incrementati con un passo maggiore di uno, per facilitare la modifica del sorgente quando dovesse presentarsi l'esigenza di ristrutturare i livelli.

Per comprendere meglio il senso della descrizione del record attraverso il sistema dei livelli, conviene dare un'occhiata allo schema successivo:

movimenti di magazzino

Quello che appare nello schema vuole rappresentare il record di un file da usare per memorizzare carichi e scarichi di un magazzino. Si può osservare inizialmente un campo per numerare le registrazioni (ogni registrazione occupa un record), successivamente, appare la data dell'operazione suddivisa in tre parti (anno, mese e giorno), quindi viene indicato il carico, suddividendo la quantità caricata e il costo unitario di carico, quindi lo scarico, anche questo diviso in quantità scaricata e valore unitario di scarico, infine appare un campo descrittivo dell'operazione. Un record di questo tipo potrebbe essere descritto utilizzando i livelli nel modo seguente:

000000 01  RECORD-MOVIMENTI-DI-MAGAZZINO.
000000     10  MM-NUMERO-REGISTRAZIONE          PIC 99999.
000000     10  MM-DATA-REGISTRAZIONE.
000000         20  MM-DATA-REGISTRAZIONE-ANNO   PIC 9999.
000000         20  MM-DATA-REGISTRAZIONE-MESE   PIC 99.
000000         20  MM-DATA-REGISTRAZIONE-GIORNO PIC 99.
000000     10  MM-CARICO.
000000         20  MM-CARICO-QUANTITA           PIC 9(8)V999.
000000         20  MM-CARICO-COSTO-UNITARIO     PIC 999999V99.
000000     10  MM-SCARICO.
000000         20  MM-SCARICO-QUANTITA          PIC 9(8)V999.
000000         20  MM-SCARICO-VALORE-UNITARIO   PIC 999999V99.
000000     10  MM-DESCRIZIONE                   PIC X(200).

Come si può comprendere dall'esempio e come già accennato in precedenza, per le porzioni di record che non si scompongono ulteriormente, si devono specificare le dimensioni, sommando le quali si ottiene la dimensione dei vari raggruppamenti e infine del record complessivo. La sintassi per rappresentare i livelli si potrebbe semplificare in questa fase nel modo seguente, dove però non si usa la notazione standard del linguaggio COBOL:

nn  nome-campo [PIC[TURE] [IS] modello_della_variabile [opzioni]].

Ciò che non è stato descritto fino a questo punto è la parte di dichiarazione successiva al nome del campo, che inizia con la parola chiave PICTURE, spesso abbreviata soltanto con PIC. Ciò che appare qui serve a definire il modello della variabile, ovvero la sua dimensione e le sue caratteristiche.

Il modello di definizione della variabile è una stringa che va composta seguendo regole precise. Con questo modello si specifica se la variabile è di tipo numerico o alfanumerico, la sua dimensione, la presenza eventuale di una virgola (ovviamente per i valori numerici), il segno ed eventualmente una maschera di trasformazione. Dopo il modello di definizione della variabile possono apparire delle opzioni, in forma di dichiarazioni ulteriori, che servono a precisare la modalità con cui la variabile deve essere rappresentata internamente alla memoria centrale.

Quando si dichiara una variabile numerica, è importante chiarire quale rappresentazione deve avere. A seconda del compilatore, la variabile numerica potrebbe essere gestita in forma binaria oppure in forma BCD (Binary coded decimal), che a sua volta può essere «normale», dove ogni cifra occupa un byte, oppure packed, dove ogni cifra occupa mezzo byte (4 bit, noto anche come nibble). Questa caratteristica della variabile si definisce con le dichiarazioni opzionali che seguono il modello di definizione della variabile.

Il modo in cui si dichiara il modello di definizione della variabile è descritto nel capitolo 576, mentre per una visione complessiva del modo in cui si dichiara una variable, si deve consultare il capitolo 573; tuttavia, in questa fase si può cominciare ugualmente a interpretare l'esempio mostrato in precedenza, osservando in particolare i campi seguenti:

Nell'esempio del magazzino si può notare che tutti i nomi usati per individuare le varie componenti del record sono unici, ma oltre a questo è stata usata l'accortezza di mettere un prefisso (MM-) per distinguerli rispetto a campi di altri file che potrebbero avere una struttura del record simile. Tuttavia, non è strettamente necessario che tali nomi siano univoci per tutto il programma, perché è prevista la possibilità di qualificarli in modo gerarchico. La qualificazione è descritta nella sezione 575.3.

Esiste anche la possibilità di ridefinire la struttura di un record, assegnando un nome alternativo a un certo livello che si vuole descrivere diversamente. Si osservi l'esempio seguente:

000000 01  MIO-RECORD.
000000     02  CAMPO-A                          PIC X(20).
000000     02  RIDEFINITO-A REDEFINES CAMPO-A.
000000         03  DATA.
000000             04  ANNO                     PIC 9999.
000000             04  MESE                     PIC 99.
000000             04  GIORNO                   PIC 99.
000000         03  DESCRIZIONE                  PIC X(12).
000000     02  CAMPO-B ...
...

Nell'esempio si vede un record denominato MIO-RECORD, che inizialmente è composto dal campo CAMPO-A fatto per contenere 20 caratteri. Questo campo viene ridefinito nella riga successiva con il nome RIDEFINITO-A, che si articola in sottocampi, con i quali si vuole descrivere in modo alternativo la variabile CAMPO-A. In base al contesto si intende che i primi otto caratteri possano essere interpretati come le cifre numeriche di una data (anno, mese e giorno), individuando il resto come una descrizione non meglio qualificabile.

Generalmente, la ridefinizione di un campo che non è suddiviso è di scarsa utilità, mentre è più interessante quando si applica a campi che hanno già una suddivisione, che però si vuole gestire anche in modo differente:

000000 01  MIO-RECORD.
000000     02  A
000000         03  B                            PIC X(10).
000000         03  C                            PIC X(10).
000000     02  D REDEFINES A.
000000         03  E                            PIC X(5).
000000         03  F                            PIC X(10).
000000         03  G                            PIC X(5).
000000     02  H ...
...

In questo caso, il campo A è composto complessivamente da 20 caratteri, a cui si accede con i campi B e C per i primi 10 e gli ultimi 10 rispettivamente. La ridefinizione successiva, consente di accedere a una porzione centrale, a cavallo dei campi B e C, con il campo F.

572.2   Sezione «WORKING-STORAGE SECTION»

La sezione WORKING-STORAGE SECTION serve a dichiarare le variabili, strutturate o scalari, utilizzate dal programma, che non si riferiscono direttamente alla descrizione dei record dei file:

 WORKING-STORAGE SECTION.
 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
       .--                          --.
       |  77-level-description-entry  |
       |                              |...
       |  record-description-entry    |
       `--                          --'

A differenza della sezione FILE SECTION, oltre alla dichiarazione di variabili strutturate, è possibile dichiarare delle variabili scalari (non suddivisibili), utilizzando il livello speciale numero 77.

000000 WORKING-STORAGE SECTION.
000000 01  DATA-DA-SCOMPORRE.
000000     02  ANNO             PIC 9999.
000000     02  MESE             PIC 99.
000000     02  GIORNO           PIC 99.
000000 77  FINE-DEL-FILE        PIC 9.
000000 77  A                    PIC X(10).
000000 77  B                    PIC 9999V99.

Il livello 77 viene dichiarato mettendo il numero relativo nella colonna dell'area A del modulo di programmazione, così come si fa per il livello 01; nello stesso modo, il nome della variabile scalare si scrive nell'area B. L'esempio che appare sopra dovrebbe essere sufficiente a comprendere l'uso della sezione WORKING-STORAGE SECTION, tenendo conto che vale quanto descritto a proposito delle variabili strutturate che descrivono i record nella sezione FILE SECTION, compresa la ridefinizione.

La dichiarazione di una variabile scalare con il livello 77 consente di specificare dei tipi numerici binari (come USAGE IS INDEX), per i quali non si può prevedere la dimensione in modo standard. L'uso di questi tipi numerici speciali non è ammesso nei campi di una variabile scalare descrittiva di un record.

572.3   Altri livelli speciali

Oltre ai livelli che servono a descrivere le variabili strutturate (da 01 a 49) e le variabili scalari (77), sono previsti due livelli speciali: 66 e 88. Questi livelli speciali servono a definire dei raggruppamenti di variabili appartenenti alla stessa struttura o a definire dei «nomi di condizione».

La descrizione di questi ulteriori livelli speciali viene fatta nel capitolo 575.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome divisione_171_data_division_187.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!