|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 7040 (0x1b80)
Types: TextFile
Names: »FORMS2.GN2«
└─⟦feb517505⟧ Bits:30005663 FORMS-2 v. 1.3 rev 5 for CIS-COBOL (RC702)
└─⟦this⟧ »FORMS2.GN2«
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»