Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Beispiel

Das folgende COBOL-Programm beinhaltet folgende Funktionen:

  • Eröffnen eines Unterprogrammzugriffs (INIT)
  • Aufnehmen einer Datei als Element (ADD)
  • Suchen eines Elementes in einem Inhaltsverzeichnis (TOCPRIM)
  • Eröffnen eines Elementes (OPENGET)
  • Satzweise Lesen eines Elementes (GET)
  • Schließen des Elementes (CLOSE)
  • Beenden des Unterprogrammzugriffs (END)

Zum besseren Verständnis wurden Kommentare in das Beispiel aufgenommen.

       IDENTIFICATION DIVISION.
      ******************************************************************
       PROGRAM-ID.       LMSUPCOB.
      ******************************************************************
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
          TERMINAL IS MONITOR
          SYMBOLIC CHARACTERS
                  COPY LMSCOBEQ.
          .
      *    DER OBIGE PUNKT MUSS GESCHRIEBEN WERDEN, UM DEN            *
      *    SPECIAL-NAMES PARAGRAPHEN ABZUSCHLIESSEN                   *
      /
       DATA DIVISION.
       WORKING-STORAGE SECTION.
      *****************************************************************
      *****************************************************************
      **                                                             **
      ** DIE KONTROLLBLOECKE FUER DAS ARBEITEN MIT LMS ALS           **
      ** UNTERPROGRAMM LIEGEN IN DER BIBLIOTHEK SYSLIB.LMS.<VERS>   **
      ** ALS COPY-ELEMENTE VOR                                       **
      *****************************************************************
      *****************************************************************
       COPY LMSCOBCB.
       COPY LMSCOBED.
       COPY LMSCOBEI.
       COPY LMSCOBEM.
       COPY LMSCOBFD.
       COPY LMSCOBLD.
       COPY LMSCOBRD.
      *****************************************************************
      *   TOC-IDENTIFICATION                                          *
      *****************************************************************
       01 LMSUP-TID                       PIC  9(08) BINARY VALUE 1.
      *****************************************************************
      *   ELEMENT RECORD (ZUM UEBERGEBEN VON ELEMENTEN MIT PUT/GET)   *
      *****************************************************************
       01 LMSUP-ER.
         05 SATZKOPF.
            10 SATZLAENGE                PIC S9(04) BINARY.
            10 FILLER                    PIC  X(02).
         05 SATZPUFFER                   PIC  X(256).
      *****************************************************************
      *   HILFSFELDER, KONSTANTENDEFINITIONEN FUER DAS PROGRAMM       *
      *****************************************************************
       01 H01-HILFSFELDER.
         05 H01-DATEI-LINKNAME           PIC  X(08) VALUE "FILELINK".
         05 H01-BIBLIOTHEK-LINKNAME      PIC  X(08) VALUE "LIBLINK".
         05 H01-ELEMENT-NAME             PIC  X(54) VALUE "PROBEELEM".
         05 H01-ELEMENT-TYP              PIC  X     VALUE "S".
         05 H01-ELEMENT-VERSION          PIC  X(24) VALUE "1".
         05 H01-PUFFER-LAENGE            PIC  9(09) BINARY VALUE 260.
      *****************************************************************
      *   AUSGABEBEREICHE FUER ELEMENTSATZ                            *
      *****************************************************************
       01 A01-AUSGABE-FELDER.
         05 A01-SATZLAENGE               PIC 9(04) BINARY.
         05 A01-AUSGABE-SATZ.
            10 FILLER                    PIC X     OCCURS 1 TO 256
                                              DEPENDING ON
                                              A01-SATZLAENGE.
      /
      ***************************************************************
       PROCEDURE DIVISION.
      ***************************************************************
       STEUER SECTION.
       ST-ANFANG.
          PERFORM LMS-INITIALISIEREN.
          IF LMSRET-OK
      
      
          THEN
                PERFORM LMS-AUFNEHMEN
                PERFORM LMS-INHALT
                PERFORM LMS-ELEM-BEARBEITEN
                PERFORM LMS-BEENDEN
          END-IF.
       ST-ENDE.
          STOP RUN.
      /
       LMS-INITIALISIEREN SECTION.
       LMS-INIT-ANFANG.
      *****************************************************************
      * CONTROL BLOCK VORBEREITEN FUER DIE INITIALISIERUNG            *
      *****************************************************************
          MOVE LMSUP-UPINIT TO  FUNC    IN LMSUP-SCB.
          MOVE LMSUP-UNUSED TO  SUBCODE IN LMSUP-SCB.
          CALL "LMSUP1"     USING  LMSUP-SCB.
      *****************************************************************
      * RETURN-CODE AUSWERTEN                                         *
      *****************************************************************
          IF LMSRET-OK
          THEN
               DISPLAY  "INITIALISIEREN DURCHGEFUEHRT"
                       UPON MONITOR
          ELSE
               DISPLAY  "FEHLER BEIM INITIALISIEREN AUFGETRETEN"
                       UPON MONITOR
          END-IF.
       LMS-INIT-ENDE.
          EXIT.
      /
       LMS-AUFNEHMEN SECTION.
       LMS-AUF-ANFANG.
      *****************************************************************
      * DIE DATEI MIT "DATEI-LINKNAME" WIRD UNTER "ELEMENT-NAME"      *
      * IN DIE BIBLIOTHEK MIT "BIBLIOTHEK-LINKNAME" EINGETRAGEN       *
      *                                                               *
      * CONTROL BLOCK, FILE DESCRIPTION, LIBRARY DESCRIPTION UND      *
      * ELEMENT DESCRIPTION VORBEREITEN FUER DAS AUFNEHMEN            *
      * EINES ELEMENTES                                               *
      *                                                               *
      * (DIE ANDEREN FELDER BLEIBEN WIE BEIM INIT)                    *
      *****************************************************************
           MOVE LMSUP-ADD               TO FUNC       IN LMSUP-SCB.
           MOVE LMSUP-UNUSED            TO SUBCODE    IN LMSUP-SCB.
           MOVE LMSUP-YES               TO OVERWRITE  IN LMSUP-SCB.
           MOVE H01-DATEI-LINKNAME      TO LINK       IN LMSUP-FD.
           MOVE H01-BIBLIOTHEK-LINKNAME TO LINK       IN LMSUP-LD.
           MOVE H01-ELEMENT-TYP         TO TYP        IN LMSUP-ED.
           MOVE H01-ELEMENT-NAME        TO NAME       IN LMSUP-ED.
           MOVE H01-ELEMENT-VERSION     TO VERSION    IN LMSUP-ED.
           CALL "LMSUP1"  USING         LMSUP-SCB,
                                        LMSUP-FD,
                                        LMSUP-LD,
                                        LMSUP-ED.
      *****************************************************************
      * RETURN-CODE AUSWERTEN                                         *
      *****************************************************************
           IF LMSRET-OK
           THEN
               DISPLAY "AUFNEHMEN DES ELEMENTS " H01-ELEMENT-NAME
                       " DURCHGEFUEHRT"
                       UPON MONITOR
           ELSE
               DISPLAY "FEHLER BEIM AUFNEHMEN EINES ELEMENTES"
                       UPON MONITOR
           END-IF.
       LMS-AUF-ENDE.
           EXIT.
      /
       LMS-INHALT SECTION.
       LMS-INHALT-ANFANG.
      *****************************************************************
      * ES WIRD NACH EINEM BESTIMMTEN ELEMENT MIT "ELEMENT-NAME"      *
      * UND "ELEMENT-TYP" GESUCHT.                                    *
      *                                                               *
      * CONTROL BLOCK UND ELEMENT MASK VORBEREITEN ZUM SUCHEN         *
      * EINES ELEMENTES (TOCPRIM)                                     *
      * (LIBRARY DEFINITION BLEIBT WIE VORBELEGT)                     *
      *****************************************************************
           MOVE LMSUP-TOCPRIM        TO FUNC       IN LMSUP-SCB.
           MOVE LMSUP-LONG           TO SUBCODE    IN LMSUP-SCB.
           MOVE H01-ELEMENT-TYP      TO TYP        IN LMSUP-EM.
           MOVE H01-ELEMENT-NAME     TO NAME       IN LMSUP-EM.
           CALL "LMSUP1"  USING      LMSUP-SCB,
                                     LMSUP-TID,
                                     LMSUP-EI,
                                     LMSUP-LD,
                                     LMSUP-EM.
      *****************************************************************
      * RETURN-CODE AUSWERTEN,                                        *
      * DRUCKAUFBEREITETE AUSGABE DER ELEMENTINFORMATION              *
      *****************************************************************
           IF LMSRET-OK
           THEN
                DISPLAY "SUCHEN EINES ELEMENTES DURCHGEFUEHRT: "
                        UPON MONITOR
                DISPLAY "TYP       ",  TYP           IN LMSUP-EI
                        UPON MONITOR
                DISPLAY "NAME      ",  NAME          IN LMSUP-EI
                        UPON MONITOR
                DISPLAY "VERSION   ",  VERSION       IN LMSUP-EI
                        UPON MONITOR
                DISPLAY "FORMAT    ",  STORE-FORM    IN LMSUP-EI
                        UPON MONITOR
                DISPLAY "USER-DATE ",  USER-DATE     IN LMSUP-EI
                        UPON MONITOR
                DISPLAY "USER-TIME ",  USER-TIME     IN LMSUP-EI
                        UPON MONITOR
                DISPLAY "CR-DATE   ",  CREATION-DATE IN LMSUP-EI
                        UPON MONITOR
                DISPLAY "CR-TIME   ",  CREATION-TIME IN LMSUP-EI
                        UPON MONITOR
                DISPLAY "MOD-DATE  ",  MODIFI-DATE   IN LMSUP-EI
                        UPON MONITOR
                DISPLAY "MOD-TIME  ",  MODIFI-TIME   IN LMSUP-EI
                        UPON MONITOR
                DISPLAY "SEC-NAME  ",  SEC-NAME      IN LMSUP-EI
                       UPON MONITOR
                 DISPLAY "SEC-ATTR  ",  SEC-ATTRIBUTE IN LMSUP-EI
                         UPON MONITOR
            ELSE
                 DISPLAY "FEHLER BEIM SUCHEN EINES ELEMENTES"
                         UPON MONITOR
            END-IF.
        LMS-INHALT-ENDE.
            EXIT.
       /
       LMS-ELEM-BEARBEITEN SECTION.
       LMS-ELEM-BEA-ANFANG.
      *****************************************************************
      * EIN ELEMENT WIRD ZUR BEARBEITUNG GEOEFFNET, SATZWEISE         *
      * GELESEN UND WIEDER GESCHLOSSEN                                *
      *****************************************************************
      *****************************************************************
      * CONTROL BLOCK UND ELEMENT DESCRIPTION VORBEREITEN FUER DAS    *
      * OEFFNEN EINES ELEMENTES.                                      *
      * (LIBRARY DESCRIPTION BLEIBT WIE BISHER, MUSS ABER VERSORGT    *
      *  SEIN. DAS ELEMENT MUSS DURCH DIE DREI EIGENSCHAFTEN TYP,     *
      *  NAME UND VERSION EINDEUTIG BESCHRIEBEN SEIN)                 *
      *****************************************************************
          MOVE LMSUP-OPEN-GET       TO FUNC      IN LMSUP-SCB.
          MOVE LMSUP-UNUSED         TO SUBCODE   IN LMSUP-SCB.
          MOVE H01-ELEMENT-NAME     TO NAME      IN LMSUP-ED.
          MOVE H01-ELEMENT-TYP      TO TYP       IN LMSUP-ED.
          MOVE H01-ELEMENT-VERSION  TO VERSION   IN LMSUP-ED.
          CALL "LMSUP1" USING       LMSUP-SCB,
                                 LMSUP-RD,
                                 LMSUP-LD,
      *****************************************************************
      * RETURN-CODE AUSWERTEN,                                        *
      * WENN KEIN FEHLER AUFGETRETEN IST, WIRD GELESEN                *
      *****************************************************************
           IF LMSRET-OK
           THEN
      *****************************************************************
      * CONTROL BLOCK UND RECORD DESCRIPTION VORBEREITEN FUER         *
      * DAS SATZWEISE LESEN EINES ELEMENTES.                          *
      * (MIT PUFFER-LAENGE WIRD DIE MAX. ERWARTETE SATZLAENGE         *
      *  ANGEGEBEN)                                                   *
      *****************************************************************
              MOVE LMSUP-GET         TO FUNC        IN LMSUP-SCB
              MOVE LMSUP-SEQ         TO SUBCODE     IN LMSUP-SCB
              MOVE H01-PUFFER-LAENGE TO BUFFER-LEN  IN LMSUP-RD
      *****************************************************************
      * LESESCHLEIFE BIS ELEMENTENDE                                  *
      *****************************************************************
              PERFORM UNTIL NOT LMSRET-OK
                 CALL "LMSUP1"  USING  LMSUP-SCB,
                                       LMSUP-RD,
                                       LMSUP-ER
      *****************************************************************
      * RETURN-CODE AUSWERTEN                                         *
      *****************************************************************
                 EVALUATE TRUE
                 WHEN LMSRET-OK
                      SUBTRACT  4  FROM  SATZLAENGE  IN  LMSUP-ER
                                GIVING A01-SATZLAENGE
                      MOVE      SATZPUFFER    TO    A01-AUSGABE-SATZ
                      DISPLAY   A01-AUSGABE-SATZ    UPON MONITOR
                 WHEN LMSRET-EOF
                      DISPLAY  "ELEMENTENDE ERREICHT"
                               UPON MONITOR
                 WHEN LMSRET-TRUNC
                      DISPLAY  "SATZPUFFER ZU KURZ ANGEGEBEN"
                               UPON MONITOR
                 WHEN OTHER
                      DISPLAY  "FEHLER BEIM LESEN EINES SATZES"
                               UPON MONITOR
                 END-EVALUATE
              END-PERFORM
      *****************************************************************
      * CONTROL BLOCK UND RECORD DESCRIPTION VORBEREITEN FUER         *
      * DAS SCHLIESSEN EINES ELEMENTES.                               *
      *****************************************************************
              MOVE LMSUP-CLOSE   TO FUNC    IN LMSUP-SCB
              MOVE LMSUP-UNUSED  TO SUBCODE IN LMSUP-SCB
              CALL "LMSUP1"      USING  LMSUP-SCB,
                                        LMSUP-RD
      *****************************************************************
      * RETURN-CODE AUSWERTEN                                         *
      *****************************************************************
              IF LMSRET-OK
              THEN
                      DISPLAY "ELEMENT '" H01-ELEMENT-NAME "' WURDE "
                              "GESCHLOSSEN"
                              UPON MONITOR
              ELSE
                      DISPLAY "FEHLER BEIM SCHLIESSEN EINES ELEMENTES"
                              UPON MONITOR
              END-IF
           ELSE
                  DISPLAY "FEHLER BEIM OEFFNEN EINES ELEMENTES"
                          UPON MONITOR
           END-IF.
       LMS-ELEM-BEA-ENDE.
           EXIT.
      /
       LMS-BEENDEN SECTION.
       LMS-BEENDEN-ANFANG.
      *****************************************************************
      * CONTROL BLOCK VORBEREITEN FUER DAS BEENDEN DES LMS            *
      *****************************************************************
           MOVE LMSUP-UPEND  TO FUNC    IN LMSUP-SCB.
           MOVE LMSUP-UNUSED TO SUBCODE IN LMSUP-SCB.
      *****************************************************************
      * RETURN-CODE AUSWERTEN                                         *
      *****************************************************************
           IF LMSRET-OK
           THEN
                DISPLAY "LMS BEENDET"
                        UPON MONITOR
           ELSE
                DISPLAY "FEHLER BEIM BEENDEN DES LMS"
                        UPON MONITOR
           END-IF.
       LMS-BEENDEN-ENDE.
           EXIT.