DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦01c1a4155⟧ TextFile

    Length: 7040 (0x1b80)
    Types: TextFile
    Names: »FORMS2.GN2«

Derivation

└─⟦feb517505⟧ Bits:30005663 FORMS-2 v. 1.3 rev 5 for CIS-COBOL (RC702)
    └─ ⟦this⟧ »FORMS2.GN2« 

TextFile

       01  CURSOR-POSITION      PIC 9(4) VALUE ZERO.
       01  INDICATORS.
           02 CURRENT-RECORD    PIC X(3) VALUE "NO".
           02 END-OF-FILE       PIC X(3) VALUE "NO".
           02 KEY-CHANGED       PIC X(3).
           02 DATA-CHANGED      PIC X(3).
       01  COMMENT              PIC X(40) VALUE SPACE.
       01  FILE-STATUS.
           02 STATUS-1          PIC 9.
           02 STATUS-2          PIC X.
       01  BINARY-FIELD.
           02 BINARY-ZERO       PIC X VALUE LOW-VALUE.
           02 BINARY-CHAR       PIC X.
       01  BINARY-NO REDEFINES BINARY-FIELD PIC 9(4) COMP.
       01  DECIMAL-NO           PIC 9(3).
       01  LOCKED PIC X VALUE "D".
      /
       PROCEDURE DIVISION.
       START-UP.
           DISPLAY SPACE UPON CRT.
           PERFORM SET-UP-FILE-NAME.
           OPEN I-O INDEXED-FILE.
           PERFORM CHECK-STATUS.
           MOVE SPACE TO INDEXED-RECORD.
           MOVE SPACE TO SAVED-RECORD.
           PERFORM DISPLAY-FORM.
           GO TO NO-CURRENT-RECORD.
       ACCEPT-FROM-SCREEN.
           MOVE START-OF-DATA TO CURSOR-POSITION.
           PERFORM ACCEPT-RECORD THRU SET-UP-RECORD.
           IF RECORD-KEY NOT = SAVED-KEY
                MOVE "YES" TO KEY-CHANGED
           ELSE MOVE "NO" TO KEY-CHANGED.
           IF RECORD-DATA NOT = SAVED-DATA
                MOVE "YES" TO DATA-CHANGED
           ELSE MOVE "NO" TO DATA-CHANGED.
           MOVE INDEXED-RECORD TO SAVED-RECORD.
           IF KEY-CHANGED = "YES" GO TO SEE-IF-RECORD-EXISTS.
           IF DATA-CHANGED = "YES" GO TO UPDATE-RECORD.
           IF END-OF-FILE = "YES" GO TO CLOSE-DOWN.
           IF CURRENT-RECORD = "NO" GO TO SEE-IF-ANY-MORE-RECORDS.
           IF CURRENT-RECORD = "DUP" GO TO REPLACE-RECORD.
           IF CURRENT-RECORD = "LOK"
              THEN IF CURSOR-POSITION = START-OF-DATA
                        GO TO SEE-IF-RECORD-EXISTS
                   ELSE GO TO SEE-IF-ANY-MORE-RECORDS.
           IF CURSOR-POSITION NOT = START-OF-KEY
                                    GO TO SEE-IF-ANY-MORE-RECORDS.
      *DELETE-RECORD.
           DELETE INDEXED-FILE.
           PERFORM CHECK-STATUS.
           MOVE "RECORD DELETED" TO COMMENT.
           MOVE SAVED-KEY TO RECORD-KEY.
           GO TO NO-CURRENT-RECORD.
       SEE-IF-ANY-MORE-RECORDS.
           START INDEXED-FILE KEY > RECORD-KEY
                 INVALID GO TO END-OF-FILE-REACHED.
           IF STATUS-2 NOT = LOCKED PERFORM CHECK-STATUS.
           READ INDEXED-FILE NEXT.
           IF STATUS-2 = LOCKED GO TO RECORD-LOCKED.
           PERFORM CHECK-STATUS.
           GO TO CLEAR-COMMENT.
       END-OF-FILE-REACHED.
           MOVE "END OF FILE - RETURN WILL TERMINATE"
                TO COMMENT.
           MOVE "YES" TO END-OF-FILE.
           MOVE SPACE TO RECORD-KEY.
           GO TO NO-CURRENT-RECORD.
       REPLACE-RECORD.
           IF CURSOR-POSITION = END-OF-DATA GO TO AMEND-RECORD.
           IF CURSOR-POSITION = START-OF-KEY GO TO AMEND-RECORD.
           MOVE "YES" TO CURRENT-RECORD.
           GO TO SEE-IF-RECORD-EXISTS.
       UPDATE-RECORD.
           IF CURRENT-RECORD = "LOK" GO TO WRITE-NEW-RECORD.
           IF CURRENT-RECORD NOT = "YES" GO TO SEE-IF-RECORD-EXISTS.
       AMEND-RECORD.
           REWRITE INDEXED-RECORD INVALID GO TO WRITE-NEW-RECORD.
           IF STATUS-2 = LOCKED
                MOVE "EXISTING RECORD LOCKED" TO COMMENT
                GO TO DUPLICATE-RECORD.
           PERFORM CHECK-STATUS.
           IF CURRENT-RECORD = "DUP"
                MOVE "RECORD REPLACED" TO COMMENT
           ELSE MOVE "RECORD AMENDED" TO COMMENT.
           GO TO RE-ESTABLISH-LOCK.
       SEE-IF-RECORD-EXISTS.
           READ INDEXED-FILE INVALID GO TO SEE-IF-NEW-RECORD.
           IF STATUS-2 NOT = LOCKED PERFORM CHECK-STATUS.
           IF DATA-CHANGED = "NO" GO TO SEE-IF-UPDATE-ATTEMPTED.
       RECORD-ALREADY-EXISTS.
           MOVE "RECORD ALREADY EXISTS WITH THIS KEY" TO COMMENT.
       DUPLICATE-RECORD.
           MOVE SAVED-RECORD TO INDEXED-RECORD.
           MOVE "DUP" TO CURRENT-RECORD.
           GO TO NOT-END-OF-FILE.
       SEE-IF-UPDATE-ATTEMPTED.
           IF CURRENT-RECORD = "DUP" GO TO RECORD-ALREADY-EXISTS.
           IF CURSOR-POSITION = END-OF-DATA
                                     GO TO RECORD-ALREADY-EXISTS.
           IF CURSOR-POSITION = START-OF-KEY
                                     GO TO RECORD-ALREADY-EXISTS.
           IF STATUS-2 = LOCKED GO TO RECORD-LOCKED.
       CLEAR-COMMENT.
           MOVE SPACE TO COMMENT.
           GO TO SET-CURRENT-RECORD.
       RECORD-LOCKED.
           MOVE "RECORD LOCKED" TO COMMENT.
           MOVE "LOK" TO CURRENT-RECORD.
           GO TO CLEAR-DATA.
       SEE-IF-NEW-RECORD.
           MOVE SAVED-RECORD TO INDEXED-RECORD.
           IF DATA-CHANGED = "YES" GO TO WRITE-NEW-RECORD.
           IF CURRENT-RECORD = "DUP" GO TO WRITE-NEW-RECORD.
           IF CURSOR-POSITION = END-OF-DATA GO TO WRITE-NEW-RECORD.
           IF CURSOR-POSITION = START-OF-KEY GO TO WRITE-NEW-RECORD.
       RECORD-NOT-FOUND.
           MOVE "RECORD NOT FOUND" TO COMMENT.
           MOVE "NO" TO END-OF-FILE.
       NO-CURRENT-RECORD.
           MOVE "NO" TO CURRENT-RECORD.
       CLEAR-DATA.
           MOVE SPACE TO RECORD-DATA.
           PERFORM SET-UP-SCREEN.
           PERFORM SET-UP-RECORD.
           GO TO SAVE-RECORD-AREA.
       WRITE-NEW-RECORD.
           WRITE INDEXED-RECORD INVALID GO TO RECORD-ALREADY-EXISTS.
           IF STATUS-2 = LOCKED GO TO RECORD-ALREADY-EXISTS.
           PERFORM CHECK-STATUS.
           MOVE "NEW RECORD WRITTEN" TO COMMENT.
       RE-ESTABLISH-LOCK.
           READ INDEXED-FILE INVALID GO TO RECORD-NOT-FOUND.
           IF STATUS-2 = LOCKED PERFORM DISPLAY-COMMENT
                                GO TO RECORD-LOCKED.
           PERFORM CHECK-STATUS.
       SET-CURRENT-RECORD.
           MOVE "YES" TO CURRENT-RECORD.
       NOT-END-OF-FILE.
           MOVE "NO" TO END-OF-FILE.
       SAVE-RECORD-AREA.
           MOVE INDEXED-RECORD TO SAVED-RECORD.
           PERFORM SET-UP-SCREEN THRU DISPLAY-RECORD.
       DISPLAY-COMMENT.
           DISPLAY COMMENT AT COMMENT-POSITION.
       GO-TO-ACCEPT.
           GO TO ACCEPT-FROM-SCREEN.
       CHECK-STATUS.
           IF FILE-STATUS NOT = ZERO
               MOVE STATUS-2 TO BINARY-CHAR
               MOVE BINARY-NO TO DECIMAL-NO
               DISPLAY SPACE UPON CRT
               DISPLAY "FILE ERROR " STATUS-1 "/" DECIMAL-NO
                       UPON CONSOLE
               GO TO CLOSE-FILE.
       CLOSE-DOWN.
           DISPLAY SPACE UPON CRT.
       CLOSE-FILE.
           CLOSE INDEXED-FILE.
       EXIT-PROGRAM.
           EXIT PROGRAM.
       STOP-RUN.
           DISPLAY "RUN TERMINATED" UPON CONSOLE.
           STOP RUN.
      *
       SET-UP-FILE-NAME.
«eof»