* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *                                                             *
      * Creazione di un archivio RELATIVE                           *
      * con preallocazione dei records                              *
      *                                                             *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROG-4a.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
           CONSOLE IS CRT
           DECIMAL-POINT IS COMMA.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
      *
      * al nome interno ANAGRAFICA-CLI associo l'identificatore FILE-1
      * a cui sarà assegnato il nome del file su disco
      *
           SELECT ANAGRAFICA-CLI ASSIGN TO FILE-1
                  ORGANIZATION IS RELATIVE
                  ACCESS IS DYNAMIC
                  RELATIVE KEY CLI-KEY
                  LOCK MODE IS AUTOMATIC
                  STATUS CLI-STAT.

       DATA DIVISION.
       FILE SECTION.

      * descrizione della struttura dei records di ANAGRAFICA-CLI
      *
       FD  ANAGRAFICA-CLI.
       01  REC-CLI.
           02  CODICE-CLI    PIC 9999.
           02  RAG-SOC       PIC X(40).
           02  INDIRIZZO     PIC X(30).
           02  LOCALITA      PIC X(23).
           02  CAP           PIC 99999.
           02  PROV          PIC XX.
           02  COD-FIS       PIC X(16).
           02  COD-IVA       PIC X(11).
           02  AGENTE        PIC 99.
           02  COD-TRASP     PIC 9999.
           02  PORTO         PIC 9.
           02  IMBALLO       PIC 9.
           02  DESTINATARIO  PIC 9999.
           02  PAGAMENTO     PIC 99.
           02  BANCA         PIC 9999.
           02  ESENZIONE     PIC 99.
           02  SCONTO        PIC 99.
           02  IVA           PIC 99.
           02  DATUL         PIC X(6).
           02  DATUL2 REDEFINES DATUL.
               03 MML        PIC XX.
               03 AAL        PIC XXXX.
           02  SPESE         PIC XX.
           02  TIP           PIC X.
           02  ZONA          PIC X.
           02  FATTURATO     PIC 9(8)V99.
           02  LISTPREZ      PIC 9.
           02  TELEFONO OCCURS 4.
               03 TELE       PIC X(14).
           02  FATTURAZIONE  PIC X.
           02  DATA-DECORR   PIC X(8).
           02  DATA-DECORR2 REDEFINES DATA-DECORR PIC 9(8).
           02  FILLER        PIC X(24).
      *

       WORKING-STORAGE SECTION.
      *
      * campi per la gestione FILE-STATUS
      *
       01  CLI-STAT        PIC XX.
       01  VIDEO-1.
           02  VIDEO-2    PIC X(12).
       01  INDICE         PIC 99.
       01  FILE-STAT.
           02  S1         PIC X.
           02  S2         PIC X.
       01  STAT-BIN       REDEFINES FILE-STAT PIC 9(4) COMP.
       01  DISPLAY-STAT.
           02  S1-VID     PIC X.
           02  FILLER     PIC X(3).
           02  S2-VID     PIC 9(4).
      *
      * campi contenenti i nomi dei file correnti
      * la tabella viene ridefinita per indicizzare
      * la posizione del nome-file
      *
       01  TAB-FILE.
           02 FILE-01 PIC X(12) VALUE "CLIENTI.REL ".
           02 FILE-02 PIC X(12) VALUE "            ".
           02 FILE-03 PIC X(12) VALUE "            ".
           02 FILE-04 PIC X(12) VALUE "            ".
           02 FILE-05 PIC X(12) VALUE "            ".
       01  TAB-FIL REDEFINES TAB-FILE.
           02 FIL     PIC X(12)  OCCURS 5.
      *
       01  IN-KEY     PIC X.
       01  CONTA      PIC 999.
       01  SPAZIO     PIC X(80)  VALUE SPACE.

      *
      * chiave del file ANAGRAFICA-CLI
      *
       01  CLI-KEY    PIC 9(04).


       PROCEDURE DIVISION.

       INIZIO.
           MOVE FILE-01 TO FILE-1.
           PERFORM SET-COLOR THRU TITOLO.

       APERTURA-FILE.
           OPEN I-O ANAGRAFICA-CLI.
           MOVE CLI-STAT TO FILE-STAT.
           IF S1 NOT = ZERO
              MOVE 1 TO INDICE
              PERFORM STATUS-TEST THRU EX-STATUS-TEST.

      *
      * la START seguente ci consente di verificare se il file è stato
      * in precedenza inizializzato, in caso contrario si avvia
      * la preallocazione dei records
      *

           START ANAGRAFICA-CLI KEY NOT < CLI-KEY INVALID
                                         PERFORM ALLOCA THRU ALLOCATI.


      *
      * visualizzazione della descrizione dei campi di input
      *
       MASCHERA.
           DISPLAY "cliente" AT 0202.
           DISPLAY "...." AT 0220 WITH FOREGROUND-COLOR 1.
           DISPLAY "codice fiscale" AT 0302.
           DISPLAY "................" AT 0320 WITH FOREGROUND-COLOR 1.
           DISPLAY "partita iva" AT 0402.
           DISPLAY "..........." AT 0420 WITH FOREGROUND-COLOR 1.
           DISPLAY "rag.sociale" AT 0502.
           DISPLAY "........................................" AT 0520
                    WITH FOREGROUND-COLOR 1.
           DISPLAY "indirizzo" AT 0602.
           DISPLAY ".............................." AT 0620
                    WITH FOREGROUND-COLOR 1.
           DISPLAY "cap loc. prov." AT 0702.
           DISPLAY "....." AT 0720 WITH FOREGROUND-COLOR 1.
           DISPLAY "......................." AT 0726
                   WITH FOREGROUND-COLOR 1.
           DISPLAY ".." AT 0750 WITH FOREGROUND-COLOR 1.
           DISPLAY "Telef.1" AT 0758.
           DISPLAY ".............." AT 0766 WITH FOREGROUND-COLOR 1.
           DISPLAY "Telef.2" AT 0858.
           DISPLAY ".............." AT 0866 WITH FOREGROUND-COLOR 1.
           DISPLAY "Cellul." AT 0958.
           DISPLAY ".............." AT 0966 WITH FOREGROUND-COLOR 1.
           DISPLAY "Fax    " AT 1058.
           DISPLAY ".............." AT 1066 WITH FOREGROUND-COLOR 1.
           DISPLAY "agente" AT 0802.
           DISPLAY ".." AT 0820 WITH FOREGROUND-COLOR 1.
           DISPLAY "...............   " AT 0826 WITH FOREGROUND-COLOR 1.
           DISPLAY "vettore" AT 0902.
           DISPLAY "...." AT 0920 WITH FOREGROUND-COLOR 1.
           DISPLAY ".........................." AT 0926
                   WITH FOREGROUND-COLOR 1.
           DISPLAY "porto" AT 1002.
           DISPLAY "." AT 1020 WITH FOREGROUND-COLOR 1.
           DISPLAY "..............." AT 1026 WITH FOREGROUND-COLOR 1.
           DISPLAY "imballo" AT 1102.
           DISPLAY "." AT 1120 WITH FOREGROUND-COLOR 1.
           DISPLAY "...............  " AT 1126 WITH FOREGROUND-COLOR 1.
           DISPLAY "destinatario" AT 1202.
           DISPLAY "...." AT 1220 WITH FOREGROUND-COLOR 1.
           DISPLAY ".............................." AT 1226
                   WITH FOREGROUND-COLOR 1.
           DISPLAY "pagamento" AT 1302.
           DISPLAY ".." AT 1320 WITH FOREGROUND-COLOR 1.
           DISPLAY "..................................." AT 1326
                   WITH FOREGROUND-COLOR 1.
           DISPLAY "banca" AT 1402.
           DISPLAY "...." AT 1420 WITH FOREGROUND-COLOR 1.
           DISPLAY "..................................." AT 1426
                   WITH FOREGROUND-COLOR 1.
           DISPLAY "esenzione" AT 1502.
           DISPLAY ".." AT 1520 WITH FOREGROUND-COLOR 1.
           DISPLAY "...................." AT 1526
                   WITH FOREGROUND-COLOR 1.
           DISPLAY "i.v.a. fissa" AT 1602.
           DISPLAY ".." AT 1620 WITH FOREGROUND-COLOR 1.
           DISPLAY "cod. sconto " AT 1702.
           DISPLAY "sconto cassa" AT 1728.
           DISPLAY "listino (1-4)" AT 1746.
           DISPLAY ".." AT 1720 WITH FOREGROUND-COLOR 1.
           DISPLAY ".." AT 1742 WITH FOREGROUND-COLOR 1.
           DISPLAY "." AT 1760 WITH FOREGROUND-COLOR 1.
           DISPLAY "tipo cliente              zona" AT 1802.
           DISPLAY "." AT 1820 WITH FOREGROUND-COLOR 1.
           DISPLAY "." AT 1843 WITH FOREGROUND-COLOR 1.
           DISPLAY "decorrenza pagamento" AT 1846.
           DISPLAY "../../...." AT 1867 WITH FOREGROUND-COLOR 1.
           DISPLAY "ultimo  acquisto          fatt." AT 1902.
           DISPLAY "..-...." AT 1920 WITH FOREGROUND-COLOR 1.
           DISPLAY "........,.." AT 1933 WITH FOREGROUND-COLOR 1.
           DISPLAY "freq.fatturaz. (S/M)" AT 1946.
           DISPLAY "." AT 1971 WITH FOREGROUND-COLOR 1.

      *
      * qui vanno messe le istruzioni per le operazioni
      * da eseguire (inserimento/modifica/ricerca/stampa/ecc.)
      *

      *
      * la seguente riga serve ad attendere la pressione di un tasto
      * per avviare la chiusura del programma
      *
           ACCEPT IN-KEY WITH AUTO-SKIP.

       CHIUSURA-FILE.
           CLOSE ANAGRAFICA-CLI.

       FINE-PROG.
           DISPLAY SPACE.
           STOP RUN.

      *                   * * * Routines * * *

      * routine di allocazione recors ANAGRAFICA-CLI
      *

      * ricerca punto da cui iniziare l'allocazione
      *
       ALLOCA.
           MOVE 1 TO CLI-KEY.
           START ANAGRAFICA-CLI KEY = CLI-KEY INVALID MOVE 0 TO CLI-KEY
                                      GO TO INIZIA-DA-QUI.
           DISPLAY "Posizionamento Puntatore records Clienti" AT 2121
                   WITH BLINK.
       RILEGGI.
           READ ANAGRAFICA-CLI NEXT AT END
                MOVE CODICE-CLI TO CLI-KEY GO TO INIZIA-DA-QUI.
           DISPLAY CLI-KEY AT 2348 WITH HIGHLIGHT.
           GO TO RILEGGI.

      *
      * punto da cui inizia l'allocazione
      *
       INIZIA-DA-QUI.
           DISPLAY "Allocazione di 100 nuovi records Clienti" AT 2121
                   WITH BLINK.
           MOVE ZERO TO CONTA.
       SCRIVI.
           ADD 1 TO CLI-KEY.
           ADD 1 TO CONTA.
           MOVE SPACE TO REC-CLI.
           MOVE CLI-KEY TO CODICE-CLI.
           WRITE REC-CLI INVALID NEXT SENTENCE.
           DISPLAY CONTA  AT 2330 WITH FOREGROUND-COLOR 14.
           DISPLAY CLI-KEY AT 2348 WITH FOREGROUND-COLOR 4.
           IF CONTA < 100
              GO TO SCRIVI.
           DISPLAY "  Allocazione completata - premi un tasto " AT 2120
                   WITH HIGHLIGHT.
           ACCEPT IN-KEY WITH AUTO-SKIP.
           DISPLAY SPAZIO AT 2101.
           DISPLAY SPAZIO AT 2301.
       ALLOCATI.
           EXIT.
      *



      * pulisce il video e setta il colore del testo e del fondo
      *
       SET-COLOR.
           DISPLAY SPACE WITH BACKGROUND-COLOR 7
                              FOREGROUND-COLOR 8.

       TITOLO.
           DISPLAY " C R E A Z I O N E   D I   U N   F I L E   R E L A T
      -    " I V E " AT 0110 WITH FOREGROUND-COLOR 9
                                            BACKGROUND-COLOR 7
                                            REVERSE-VIDEO.

      *
      *            * * *  inizio  STATUS-TEST  * * *
      *
       STATUS-TEST.
           MOVE FIL(INDICE) TO VIDEO-1.
           DISPLAY "Errore sul File" AT 2303 WITH FOREGROUND-COLOR 4.
           DISPLAY VIDEO-2 AT 2319 WITH FOREGROUND-COLOR 2.
           IF S1 = 1
              DISPLAY "Fine File"
              AT 2334 WITH FOREGROUND-COLOR 4
              GO TO EX-STAT.
           IF S1 = 2
              DISPLAY "Chiave del record non valida"
              AT 2334 WITH FOREGROUND-COLOR 4
              GO TO EX-STAT.
           IF S1 = 9
              PERFORM TROVA-ERRORE THRU FINE-ERRORE.
           MOVE S1 TO S1-VID.
           MOVE LOW-VALUES TO S1.
           MOVE STAT-BIN TO S2-VID.
           DISPLAY "Tipo" AT 2403 WITH FOREGROUND-COLOR 4.
           DISPLAY S2-VID AT 2408 WITH FOREGROUND-COLOR 4.
       EX-STAT.
           DISPLAY "Premi un tasto per continuare " AT 2436.
           ACCEPT IN-KEY WITH AUTO-SKIP.
           STOP RUN.
       EX-STATUS-TEST.
           EXIT.
      *
      *            * * *  fine STATUS-TEST  * * *
      *
       TROVA-ERRORE.
           MOVE LOW-VALUES TO S1.
           MOVE STAT-BIN TO S2-VID.
           IF S2-VID = 13
              DISPLAY "File inesistente"
              AT 2413 WITH FOREGROUND-COLOR 4.
           IF S2-VID = 65
              DISPLAY "File non disponibile"
              AT 2413 WITH FOREGROUND-COLOR 4.
           IF S2-VID = 68
              DISPLAY "Record non disponibile"
              AT 2413 WITH FOREGROUND-COLOR 4.
       FINE-ERRORE.
           EXIT.
      *************************************************************
          

Top