Benvenuto su Storia e Tecnologia

Benvenuto su Storia e Tecnologia. Qui racconto le storie, gli errori e le rivoluzioni che hanno portato al mondo digitale di oggi. Dai primi computer all’intelligenza artificiale, ogni articolo collega il passato al presente per capire dove stiamo andando.

martedì 19 maggio 2026

Programmare in COBOL: Che avventura!



Negli anni '80, la programmazione era una attività di nicchia, adatta a persone dal carattere flemmatico e meticoloso. 

I caratteri perspicaci difficilmente restavano inchiodati sulle proprie sedie per mettere a punto codici molto meno “intelligenti” di quelli che girano oggi nelle macchine super-veloci e dotati di risorse hardware allora inimmaginabili.

Ecco il mio primo programma sviluppato nel linguaggio COBOL, ormai estinto: 


       IDENTIFICATION DIVISION.

       PROGRAM-ID. LBMENU.

       ENVIRONMENT DIVISION.

       CONFIGURATION SECTION.

       SPECIAL-NAMES.

           CRT STATUS IS KEY-STATUS.

       INPUT-OUTPUT SECTION.

       FILE-CONTROL.

            SELECT DITTA ASSIGN TO DISK

            ORGANIZATION IS LINE SEQUENTIAL.

       COPY LBTABPSW.SEL.

       DATA DIVISION.

       FILE SECTION.

       COPY LBDITTA.FD.

       COPY LBTABPSW.FD.

       WORKING-STORAGE SECTION.

       77 RIGA                 PIC 9(2).

       77 COLONNA        PIC 9(2).

       77 CHIAVE             PIC X(10)  VALUE SPACES.

       77 I                         PIC 9(3)   VALUE 0.

       77 Q                       PIC 9(2)   VALUE 2.

       77 MAX                  PIC 99     OCCURS 8 VALUE ZEROES.

       77 TIPO-RIS           PIC X      VALUE "T".

       01 K                        PIC 9(2)  VALUE 7.

       01 W-STATUS       PIC XX.

       01 W-DATA.

          02 W-AA           PIC 99.

          02 W-MM           PIC 99.

          02 W-GG           PIC 99.

       01 W-PSWFILE.

          02 W-DRV-PSW    PIC X(8).

          02 W-NOME-PSW   PIC X(12)  VALUE "LBTABPSW.DAT".

       01 KEY-STATUS.

          03 KEY-TYPE PIC X.

          03 KEY-CODE-1 PIC 99 COMP-X.

          03 KEY-CODE-2 PIC 99 COMP-X.

       01 W-DITTA         PIC X(9)  VALUE "DITTA.TXT".

       01 W-REC-DITTA.

          02 W-INTESTA-DITTA  PIC X(80).

        01 USER-KEY-CONTROL.

           03 USER-KEY-SETTING PIC 99 COMP-X.

           03 FILLER PIC X VALUE "1".

           03 FIRST-USER-KEY PIC 99 COMP-X.

           03 NUMBER-OF-KEYS PIC 99 COMP-X.

         01  ADIS-KEY-CONTROL.

           03 ADIS-KEY-SETTING  PIC 99 COMP-X.

           03 FILLER PIC X VALUE "2".

           03 FIRST-ADIS-KEY PIC 99 COMP-X.

           03 NUMBER-OF-ADIS-KEYS PIC 99 COMP-X.

       01 GET-MOUSE-DETAILS    PIC 9(2) COMP-X value 67.

       01 MOUSE-DETAILS.

          03 MOUSE-X-POSITION  PIC 9(4) COMP-X.

          03 MOUSE-Y-POSITION  PIC 9(4) COMP-X.

          03 MOUSE-STATUS      PIC 9(4) COMP-X.

       01 BACK.

          02 BK    PIC 9(2) OCCURS 40.

       LINKAGE SECTION.

       01 LK-FLAG-ERR PIC 9.

       SCREEN SECTION.

       01  PULVIDEOF BACKGROUND-COLOR 0 FOREGROUND-COLOR 7 BLANK SCREEN.

       01 RIGO-PASS.

          02 LINE 10 COLUMN 30 VALUE "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"

                     BACKGROUND-COLOR 6 FOREGROUND-COLOR  14.

          02 LINE 11 COLUMN 30 VALUE "º    PASSWORD    º"

                     BACKGROUND-COLOR 6 FOREGROUND-COLOR  14.

          02 LINE 12 COLUMN 30 VALUE "º                º"

                     BACKGROUND-COLOR 6 FOREGROUND-COLOR  14.

          02 LINE 13 COLUMN 30 VALUE "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"

                     BACKGROUND-COLOR 6 FOREGROUND-COLOR  14.

             01 OPZ.

          02 LINE 23 COLUMN 69 PIC ZZ USING K AUTO

                    BACKGROUND-COLOR 1 FOREGROUND-COLOR 1.

       01 Q-TIPO.

         02 LINE 19 COLUMN 24 VALUE " T"

                   BACKGROUND-COLOR 5 FOREGROUND-COLOR  15.

         02 VALUE "utte le richieste           "

                   BACKGROUND-COLOR 5 FOREGROUND-COLOR  11.

         02 LINE 20 COLUMN 24 VALUE " SOLO le richieste da "

                   BACKGROUND-COLOR 5 FOREGROUND-COLOR  11.

         02 VALUE "V" BACKGROUND-COLOR 5 FOREGROUND-COLOR  15.

         02 VALUE "alidare"

                   BACKGROUND-COLOR 5 FOREGROUND-COLOR  11.

         02 LINE 21 COLUMN 24 VALUE " A"

                   BACKGROUND-COLOR 5 FOREGROUND-COLOR  15.

         02 VALUE "CCET. con esiti Fuori Range "

                   BACKGROUND-COLOR 5 FOREGROUND-COLOR  11.

         02 LINE 22 COLUMN 24 VALUE " E"

                   BACKGROUND-COLOR 5 FOREGROUND-COLOR  15.

         02 VALUE "SAMI  con esiti Fuori Range "

                   BACKGROUND-COLOR 5 FOREGROUND-COLOR  11.

         02 LINE 23 COLUMN 24 VALUE     "           Scelta :           "

                   BACKGROUND-COLOR 5 FOREGROUND-COLOR  14.

         02 COLUMN 44 AUTO PIC X USING TIPO-RIS

                   BACKGROUND-COLOR 5 FOREGROUND-COLOR  15.

       01 INTESTAZIONE.

          02 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7 BLANK SCREEN.

          02 LINE 1 COLUMN 1 BACKGROUND-COLOR 3 FOREGROUND-COLOR 1

             PIC X(80) USING INT-VIDEO.

          02 LINE 25 COLUMN 1 BACKGROUND-COLOR 3 FOREGROUND-COLOR 1

             PIC X(64) USING INTESTA-DITTA.

          02 PIC 9(2) USING GG-OD-LAB

                   BACKGROUND-COLOR 7 FOREGROUND-COLOR 4.

          02 PIC 9(2) USING MM-OD-LAB

                   BACKGROUND-COLOR 7 FOREGROUND-COLOR 1.

          02 PIC 9(4) USING AA-OD-LAB

                   BACKGROUND-COLOR 7 FOREGROUND-COLOR 0.

          02 PIC X(8) USING DRIVE-BIS-LAB

                   BACKGROUND-COLOR 6 FOREGROUND-COLOR 15.

       01 QUADRO.

         02 LINE 2 COLUMN 1 BACKGROUND-COLOR 7 FOREGROUND-COLOR 0

            "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ".

         02 BACKGROUND-COLOR 0 FOREGROUND-COLOR 15 VALUE "FINE".

         02 BACKGROUND-COLOR 7 FOREGROUND-COLOR 0 VALUE "ÍÍÍ»".

         02 LINE 3 COLUMN 1 BACKGROUND-COLOR 7 FOREGROUND-COLOR 0 VALUE

      -     "º Archivi  Accettazioni  Liste  On-line  Menu' Esiti  Refer

      -     "ti  Amministrazione º".

          02 LINE 4 COLUMN 1 BACKGROUND-COLOR 7 FOREGROUND-COLOR 0

            "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ".

       01 PULRIGHI.

            02 LINE 5  COLUMN 1 BLANK LINE.

            02 LINE 6  COLUMN 1 BLANK LINE.

            02 LINE 7  COLUMN 1 BLANK LINE.

            02 LINE 8  COLUMN 1 BLANK LINE.

            02 LINE 9  COLUMN 1 BLANK LINE.

            02 LINE 10 COLUMN 1 BLANK LINE.

            02 LINE 24 COLUMN 1 VALUE " F1 " FOREGROUND-COLOR 11.

            02 VALUE "Cambio gestione" FOREGROUND-COLOR  3.

            02 COLUMN 62 VALUE " F10 " FOREGROUND-COLOR 11.

            02 VALUE "Ricerca rapida" FOREGROUND-COLOR  3.

       01 Q1.

         02 LINE 3 COLUMN 2 VALUE " Archivi "

                        BACKGROUND-COLOR 4 FOREGROUND-COLOR  15.

         02 LINE 5 COLUMN 1 VALUE "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"

                        BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 LINE 6 COLUMN 1 VALUE "º  "

                           BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 COLUMN 26 VALUE "º" BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 VALUE "°" BACKGROUND-COLOR 0.

         02 COLUMN 4 VALUE "1 " BACKGROUND-COLOR 3 FOREGROUND-COLOR  14.

         02 COLUMN 6 VALUE  "Codici Esami        "

                          BACKGROUND-COLOR BK(1) FOREGROUND-COLOR  15.

         02 LINE 7 COLUMN 1 VALUE "º  "

                           BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 COLUMN 26 VALUE "º" BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 VALUE "° " BACKGROUND-COLOR 0.

         02 COLUMN 4 VALUE "2 " BACKGROUND-COLOR 3 FOREGROUND-COLOR  14.

         02 COLUMN 6 VALUE  "Risposte Standard   "

                          BACKGROUND-COLOR BK(2) FOREGROUND-COLOR  15.

         02 LINE 8 COLUMN 1 VALUE "º  " BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 COLUMN 26 VALUE "º" BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 VALUE "° " BACKGROUND-COLOR 0. 

         02 COLUMN 4 VALUE "3 " BACKGROUND-COLOR 3 FOREGROUND-COLOR  14.

         02 COLUMN 6 VALUE  "USL/DISTRETTI prov. "

                           BACKGROUND-COLOR BK(3) FOREGROUND-COLOR  15.

         02 LINE 9 COLUMN 1 VALUE "º  " BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 COLUMN 26 VALUE "º" BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 VALUE "° " BACKGROUND-COLOR 0.

         02 COLUMN 4 VALUE "4 " BACKGROUND-COLOR 3 FOREGROUND-COLOR  14.

         02 COLUMN 6 VALUE  "Ticket/Listini      "

                           BACKGROUND-COLOR BK(4) FOREGROUND-COLOR  15.

         02 LINE 10 COLUMN 1 VALUE "º  "  BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 COLUMN 26 VALUE "º" BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 VALUE "° " BACKGROUND-COLOR 0.

         02 COLUMN 4 VALUE "5 " BACKGROUND-COLOR 3 FOREGROUND-COLOR  14.

         02 COLUMN 6 VALUE  "Anagrafiche Pazienti"

                           BACKGROUND-COLOR BK(5) FOREGROUND-COLOR  15.

         02 LINE 11 COLUMN 1 VALUE "º  "  BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 COLUMN 26 VALUE "º" BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 VALUE "° " BACKGROUND-COLOR 0.

         02 COLUMN 4 VALUE "6 " BACKGROUND-COLOR 3 FOREGROUND-COLOR  14.

         02 COLUMN 6 VALUE  "Medici mandatari    "

                           BACKGROUND-COLOR BK(6) FOREGROUND-COLOR  15.

         02 LINE 12 COLUMN 1 VALUE "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"

                         BACKGROUND-COLOR 3 FOREGROUND-COLOR  0.

         02 VALUE "° " BACKGROUND-COLOR 0.

         02 LINE 13 COLUMN 2 VALUE "                           " BACKGROUND-COLOR 0.

       PROCEDURE DIVISION.

       INIZIO.

           CALL "LBPRSENT". CANCEL "LBPRSENT".

           OPEN INPUT DITTA. READ DITTA INTO W-REC-DITTA. CLOSE DITTA.

           ACCEPT W-DATA FROM DATE.

           OPEN OUTPUT DITTA.

           MOVE W-AA TO W-AA-OD.

           MOVE W-MM TO W-MM-OD.

           MOVE W-GG TO W-GG-OD.

           ADD 2000 TO W-AA-OD.         

           WRITE REC-DITTA FROM W-REC-DITTA.

           CLOSE DITTA.

       ABILITA-TASTO-FINE.

           MOVE 6  TO MAX(1)  MOVE 17 TO MAX(2)  MOVE 22 TO MAX(3).

           MOVE 23 TO MAX(4)  MOVE 29 TO MAX(5)  MOVE 34 TO MAX(6).

           MOVE 35 TO MAX(7)  MOVE 40 TO MAX(8).

           MOVE 1 TO ADIS-KEY-SETTING

           MOVE 2 TO NUMBER-OF-ADIS-KEYS

           MOVE 10 TO FIRST-ADIS-KEY

           CALL X"AF" USING SET-BIT-PAIRS ADIS-KEY-CONTROL.

      * ABILITAZIONE-TASTO-ESC.

           MOVE 0 TO FIRST-USER-KEY

           CALL X"AF" USING SET-BIT-PAIRS USER-KEY-CONTROL.

      *ABILITA-MOUSE.

           MOVE 1  TO FIRST-USER-KEY.

           MOVE 64 TO USER-KEY-SETTING.

           CALL X"AF" USING USER-KEY-SETTING FIRST-USER-KEY.

           MOVE 3   TO ADIS-KEY-SETTING.

           MOVE 27  TO FIRST-ADIS-KEY.

           MOVE 2   TO NUMBER-OF-ADIS-KEYS.

           CALL X"AF" USING SET-BIT-PAIRS ADIS-KEY-CONTROL.

       APRI-DITTA.

           OPEN INPUT DITTA READ DITTA CLOSE DITTA.

           IF FLOPPY = "S" CALL "LBACCDSK" CANCEL "LBACCDSK".

           IF ATT-CHIUS = "S"

              IF FLOPPY = "S" CALL "LBCHIUS2" RETURNING LK-FLAG-ERR

                              CANCEL "LBCHIUS2"

                              IF LK-FLAG-ERR = 1 GO TO FINE

                                ELSE

               ELSE CALL "LBCHIUSU" RETURNING LK-FLAG-ERR

                    CANCEL "LBCHIUSU"

                    IF LK-FLAG-ERR = 1 GO TO FINE.

           MOVE DRIVE-LAB TO W-DRV-PSW.

           CALL "_MSEXIST" USING W-PSWFILE,

                            LENGTH OF W-PSWFILE, W-STATUS.

           IF W-STATUS="30" MOVE ZEROES TO PSW

            ELSE OPEN INPUT TABPSW MOVE 0 TO COD-PSW

                READ TABPSW CLOSE TABPSW.

       VAI.

           DISPLAY INTESTAZIONE.      

      * ABILITA-FRECCETTE.

           MOVE 1 TO ADIS-KEY-SETTING

           MOVE 2 TO NUMBER-OF-ADIS-KEYS

      *ABILITA-FRECCIA-DX-SX

           MOVE 3 TO FIRST-ADIS-KEY.

           CALL X"AF" USING SET-BIT-PAIRS ADIS-KEY-CONTROL.

           MOVE 4 TO FIRST-ADIS-KEY.

           CALL X"AF" USING SET-BIT-PAIRS ADIS-KEY-CONTROL.

           MOVE 5 TO FIRST-ADIS-KEY

           CALL X"AF" USING SET-BIT-PAIRS ADIS-KEY-CONTROL.

           MOVE 6 TO FIRST-ADIS-KEY

           CALL X"AF" USING SET-BIT-PAIRS ADIS-KEY-CONTROL.

           MOVE 7 TO FIRST-ADIS-KEY

           CALL X"AF" USING SET-BIT-PAIRS ADIS-KEY-CONTROL.

       RIPOSIZ.

           DISPLAY PULRIGHI.

       SET-COLOR.

           MOVE ALL "03" TO BACK.

           MOVE 4 TO BK(K).

       SELEZ.

           DISPLAY QUADRO.

           IF Q=1 DISPLAY Q1

            ELSE IF Q=2 DISPLAY Q2

                 ELSE IF Q=3 DISPLAY Q3

                      ELSE IF Q=4 DISPLAY Q4

                           ELSE IF Q=5 DISPLAY Q5

                                ELSE IF Q=6 DISPLAY Q6

                                      ELSE IF Q=7 DISPLAY Q7

                                            ELSE  DISPLAY Q8.

       ACC-OPZ.

      *     MOVE SPACES TO KK.

           ACCEPT OPZ.

           IF KEY-TYPE="1" AND KEY-CODE-1=9 PERFORM RIPRENDI

                        CALL "LBIMPACC" CANCEL "LBIMPACC" GO TO VAI.

           IF KEY-TYPE="1" AND KEY-CODE-1=10 PERFORM RIPRENDI

                        CALL "LBRICANA" CANCEL "LBRICANA" GO TO VAI.

           IF KEY-TYPE="1" AND KEY-CODE-1=4 PERFORM RIPRENDI

                        CALL "LBFLOPPY" CANCEL "LBFLOPPY" GO TO VAI.

           IF KEY-TYPE="1" AND KEY-CODE-1=0  GO TO ACC-OPZ.

           IF KEY-TYPE="2" AND KEY-CODE-1=10 GO TO FINE.

           IF KEY-TYPE="1" AND KEY-CODE-1=1 GO TO CAMBIO-DITTA.

           IF KEY-TYPE=2 AND KEY-CODE-1=12

              IF Q > 1

                IF K > MAX(Q - 1) + 1 SUBTRACT 1 FROM K GO TO SET-COLOR

                     ELSE GO TO ACC-OPZ

               ELSE IF K > 1 SUBTRACT 1 FROM K GO TO SET-COLOR

                     ELSE GO TO ACC-OPZ.

           IF KEY-TYPE=2 AND KEY-CODE-1=11 AND KEY-CODE-2=0

              IF K < MAX(Q) ADD 1 TO K GO TO SET-COLOR

               ELSE IF Q > 1 COMPUTE K=MAX(Q - 1) + 1 GO TO SET-COLOR

                     ELSE MOVE 1 TO K GO TO SET-COLOR.

           IF KEY-TYPE=2 AND KEY-CODE-1=4

              IF Q < 8 COMPUTE K=MAX(Q) + 1 ADD 1 TO Q GO TO RIPOSIZ

               ELSE MOVE 1 TO Q K GO TO RIPOSIZ.

 

           IF KEY-TYPE=2 AND KEY-CODE-1=3

              IF Q > 2 SUBTRACT 1 FROM Q COMPUTE K=MAX(Q - 1) + 1

                       GO TO RIPOSIZ

               ELSE IF Q=2 MOVE 1 TO K Q GO TO RIPOSIZ

                     ELSE MOVE 8 TO Q MOVE 36 TO K GO TO RIPOSIZ.

           IF NOT( KEY-TYPE = "2" AND KEY-CODE-1 = 27 ) GO TO DOPO.

           CALL X"AF" USING GET-MOUSE-DETAILS MOUSE-DETAILS.

           MOVE MOUSE-X-POSITION TO COLONNA.

           MOVE MOUSE-Y-POSITION TO RIGA. ADD 1 TO RIGA COLONNA.

           IF RIGA = 24 AND COLONNA > 61 GO TO CAMBIO-DITTA.

           IF RIGA > 5

            IF Q=1

              IF RIGA<12 AND COLONNA>1 AND COLONNA<26

                               COMPUTE K = RIGA - 5 ELSE GO TO ACC-OPZ

            ELSE IF Q=2

                  IF RIGA < 17 AND COLONNA>12 AND COLONNA<37

                               COMPUTE K = RIGA + 1 ELSE GO TO ACC-OPZ

                 ELSE IF Q=3

                       IF RIGA<11 AND COLONNA>25 AND COLONNA<51

                               COMPUTE K = RIGA + 12 ELSE GO TO ACC-OPZ

                      ELSE

            IF Q=4

             IF RIGA=6 AND COLONNA>33 AND COLONNA<56 MOVE 23 TO K

                                                ELSE GO TO ACC-OPZ

             ELSE IF Q=5

                   IF RIGA<12 AND COLONNA>42 AND COLONNA<68

                               COMPUTE K = RIGA + 18 ELSE GO TO ACC-OPZ

                   ELSE IF Q=6

                         IF RIGA<11 AND COLONNA>47 AND COLONNA<72

                               COMPUTE K = RIGA + 24 ELSE GO TO ACC-OPZ

                        ELSE IF Q=7

                              IF RIGA=6 AND COLONNA>55 AND COLONNA<71

                               MOVE 35 TO K ELSE GO TO ACC-OPZ

                             ELSE

                              IF RIGA > 5 AND RIGA < 11 AND

                                 COLONNA>54 AND COLONNA<79

                               COMPUTE K = RIGA + 30 ELSE GO TO ACC-OPZ

         ELSE IF RIGA = 3

          IF COLONNA<11 MOVE 1 TO Q K GO TO RIPOSIZ

          ELSE

           IF COLONNA< 22 MOVE 2 TO Q MOVE 7 TO K GO TO RIPOSIZ

           ELSE IF COLONNA< 32 MOVE 3 TO Q MOVE 18 TO K GO TO RIPOSIZ

           ELSE IF COLONNA< 41 MOVE 23 TO K GO TO DOPO

                      ELSE IF COLONNA< 47 MOVE 5 TO Q

                                          MOVE 24 TO K GO TO RIPOSIZ

               ELSE IF COLONNA<54 MOVE 6 TO Q MOVE 30 TO K GO TO RIPOSIZ

               ELSE IF COLONNA<63 MOVE 35 TO K GO TO DOPO

               ELSE MOVE 8 TO Q MOVE 36 TO K GO TO RIPOSIZ

           ELSE IF RIGA=2 AND COLONNA > 72 AND COLONNA < 77 GO TO FINE

                 ELSE GO TO ACC-OPZ.

       DOPO.

           IF K = 0 OR K > 40 MOVE 1 TO Q K GO TO RIPOSIZ.

*********************************************************************

           MOVE 0  TO I.

       CICLO-VEDI.

           ADD 1 TO I.

           IF I > 152 OR PASSWORD = SPACES GO TO RIPRENDI.

           IF DATO1-PSW(I) NOT = K GO TO CICLO-VEDI.

           IF DATO2-PSW(I) NOT = 0 GO TO CICLO-VEDI.

           DISPLAY RIGO-PASS.

           ACCEPT (12, 34) CHIAVE WITH NO-ECHO.

           IF (KEY-TYPE="1" AND KEY-CODE-1=0) OR CHIAVE NOT = PASSWORD

                                                 GO TO VAI.

************************************************************************

       RIPRENDI.

           MOVE 2 TO ADIS-KEY-SETTING NUMBER-OF-ADIS-KEYS.

           MOVE 3 TO FIRST-ADIS-KEY.

           CALL X"AF" USING SET-BIT-PAIRS ADIS-KEY-CONTROL.

           MOVE 4 TO FIRST-ADIS-KEY.

           CALL X"AF" USING SET-BIT-PAIRS ADIS-KEY-CONTROL.

       SALTI-ETX.

           GO TO ET1  ET2  ET3  ET4  ET5  ET6  ET7  ET8  ET9  ET10 ET11

                 ET12 ET13 ET14 ET15 ET16 ET17 ET18 ET19 ET20 ET21 ET22

                 ET23 ET24 ET25 ET26 ET27 ET28 ET29 ET30 ET31 ET32 ET33

                 ET34 ET35 ET36 ET37 ET38 ET39 ET40 DEPENDING ON K.

       ET1.

           CALL "LBMENESA" CANCEL "LBMENESA" GO TO FQ1.

       ET2.

           CALL "LBMENRSP" CANCEL "LBMENRSP" GO TO FQ1.

       ET3.

           CALL "LBMENUSL" CANCEL "LBMENUSL" GO TO FQ1.

       ET4.

           CALL "LBMENTIK" CANCEL "LBMENTIK" GO TO FQ1.

       ET5.

           CALL "LBMENPAZ" CANCEL "LBMENPAZ" GO TO FQ1.

       ET6.

           CALL "LBMENMED" CANCEL "LBMENMED".

       FQ1.

           MOVE 1 TO Q GO TO VAI.

       ET7.

           CALL "LBINSACC" CANCEL "LBINSACC" GO TO FQ2.

       ET8.

           CALL "LBRICACC" CANCEL "LBRICACC" GO TO FQ2.

       ET9.

           CALL "LBSELACC" CANCEL "LBSELACC" GO TO FQ2.

       ET10.

           CALL "LBVARACC" CANCEL "LBVARACC" GO TO FQ2.

       ET11.

           CALL "LBCANACC" CANCEL "LBCANACC" GO TO FQ2.

       ET12.

           CALL "LBMENACC" CANCEL "LBMENACC" GO TO FQ2.

       ET13.

           CALL "LBMENPRN" CANCEL "LBMENPRN" GO TO FQ2.

       ET14.

           CALL "LBELEACC" CANCEL "LBELEACC" GO TO FQ2.

       ET15.

           CALL "LBTRAACC" CANCEL "LBTRAACC" GO TO FQ2.

       ET16.

           CALL "LBMENQLT" CANCEL "LBMENQLT".   GO TO FQ2.

       ET17.

           CALL "LBMENIMP" CANCEL "LBMENIMP".

       FQ2.

           MOVE 2 TO Q GO TO VAI.

       ET18.

           CALL "LBESALIS" CANCEL "LBESALIS" GO TO FQ3.

       ET19.

           CALL "LBPAZLIS" CANCEL "LBPAZLIS" GO TO FQ3.

       ET20.

           CALL "LBMENLLI" CANCEL "LBMENLLI" GO TO FQ3.

       ET21.

           CALL "LBMENLIS" CANCEL "LBMENLIS" GO TO FQ3.

       ET22.

           CALL "LBGENLIS" CANCEL "LBGENLIS".

       FQ3.

           MOVE 3 TO Q GO TO VAI.

       ET23.

           CALL "LBMENSTR" CANCEL "LBMENSTR" MOVE 4 TO Q GO TO VAI.

       ET24.

           CALL "LBMENINV" CANCEL "LBMENINV" GO TO FQ5.

       ET25.

           CALL "LBMENCIT" CANCEL "LBMENCIT" GO TO FQ5.

       ET26.

           CALL "LBMENREA" CANCEL "LBMENREA" GO TO FQ5.

       ET27.

           CALL "LBPRVESA" CANCEL "LBPRVESA" GO TO FQ5.

       ET28.

           CALL "LBMENAGE" CANCEL "LBMENAGE" GO TO FQ5.

       ET29.

           CALL "LBMENSER" CANCEL "LBMENSER".

       FQ5.

           MOVE 5 TO Q GO TO VAI.

       ET30.

           CALL "LBESARIS" CANCEL "LBESARIS" GO TO FQ6.

       ET31.

           MOVE "T" TO TIPO-RIS.

           DISPLAY Q-TIPO.

           ACCEPT  Q-TIPO.

           IF KEY-TYPE = "1" AND KEY-CODE-1 = 0 GO TO FQ6.

           IF TIPO-RIS = "E"         CALL "LBPAZPT2" CANCEL "LBPAZPT2"

            ELSE IF TIPO-RIS = "A"   CALL "LBPAZPT1" CANCEL "LBPAZPT1"

              ELSE IF TIPO-RIS = "V" CALL "LBPAZPTV" CANCEL "LBPAZPTV"

                      ELSE           CALL "LBPAZRIS" CANCEL "LBPAZRIS".

           GO TO FQ6.

       ET32.

           CALL "LBSOSESA" CANCEL "LBSOSESA" GO TO FQ6.

       ET33.

           CALL "LBSOSPAZ" CANCEL "LBSOSPAZ" GO TO FQ6.

       ET34.

           CALL "LBSOSELE" CANCEL "LBSOSELE".

       FQ6.

           MOVE 6 TO Q GO TO VAI.

       ET35.

           CALL "LBMENREF" CANCEL "LBMENREF" MOVE 7 TO Q GO TO VAI.

       ET36.

           CALL "LBMENAMM" CANCEL "LBMENAMM" GO TO FQ8.

       ET37.

           CALL "LBMENCON" CANCEL "LBMENCON" GO TO FQ8.

       ET38.

           CALL "CNMENCON" CANCEL "CNMENCON" GO TO FQ8.

       ET39.

            GO TO FQ8.

       ET40.

           CALL "LBRICOST" CANCEL "LBRICOST".

       FQ8.

           MOVE 8 TO Q GO TO VAI.

       CAMBIO-DITTA.

           DISPLAY PULRIGHI PERFORM RIPRENDI.

           CALL "LBDITTA" CANCEL "LBDITTA" PERFORM INIZIO. GO TO VAI.

       FINE.

           DISPLAY PULVIDEOF.  STOP RUN. 

Come potete facilmente notare, scrivere oggi questo codice, è da maniaci. Il numero delle istruzioni è notevole rispetto alla semplicità della funzione implementata. 

Infatti si tratta di un semplice programma di menù dove l’utente deve scegliere tra diverse opzioni numerate. 

La scelta avviene tramite la digitazione di un nr d’ordine oppure con il click del mouse. Quest’ultima possibilità operativa era già un “novità” in quanto l’uso del mouse arrivava da poco nei sistemi Windows e sconosciuto nei sistemi MS-DOS,

Il programmatore doveva conoscere alla perfezione sintassi e semantica di ogni istruzione, pena fiume di tempo che si perdeva. Inoltre, le diverse sezioni del codice programma sono perfettamente collegate e congruenti. 

Diversamente sarebbe impossibile tradurlo in codice eseguibile direttamente dalla macchina.

Non oso ricordami quante volte ho dovuto correggere e ricompilare (tradurre nel linguaggio della macchina) prima di tentare la prima esecuzione. 

L’euforia della prima esecuzione si spegneva ben presto quando si riscontrava che il programma non rispondeva correttamente alle idee del programmatore.


Nessun commento:

Posta un commento