IDENTIFICATION DIVISION. PROGRAM-ID. LOGIN. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT LOG-FILE ASSIGN TO DSK RECORDING MODE IS ASCII. DATA DIVISION. FILE SECTION. FD LOG-FILE VALUE OF ID 'LOG FIL'. 01 LOG-REC. 02 USERS-LOGIN-NO PIC X(6). 02 PASSWORD PIC X(6). WORKING-STORAGE SECTION. 77 GAR-BAGE PIC X(72). 77 TOO-LONG PIC X(21) VALUE "MESSAGE TEXT TOO LONG". 77 END-IND PIC 9. 77 ENABLER PIC X(22) VALUE "*** READY TO ORDER ***". 77 ULN-MSG PIC X(6) VALUE "USER #". 77 B-AGAIN PIC X(12) VALUE "PLEASE LOGIN". 77 RESTART-SW PIC 9 VALUE ZERO COMP. 01 DUMMY-COMP PIC S9(10) VALUE 26 COMP. 01 DUMMY-ASCII REDEFINES DUMMY-COMP USAGE DISPLAY-7. 02 FILLER PIC X(4). 02 CR-WITHOUT-LF PIC X. 01 USER-INFO. 02 ULN PIC X(6) VALUE SPACES. 02 PASSWORD PIC X(6) VALUE SPACES. 01 PASSWORD-CR DISPLAY-7. 02 FILLER PIC X(8) VALUE "PASSWORD". 02 CR PIC X. COMMUNICATION SECTION. CD LOGIN-INPUT FOR INPUT QUEUE IN-Q MESSAGE DATE IS M-DATE MESSAGE TIME IS M-TIME SYMBOLIC SOURCE IS M-SOURCE TEXT LENGTH IS M-IN-LENGTH END KEY IS IN-END-KEY STATUS KEY IS IN-STATUS-KEY. CD LOGIN-OUTPUT FOR OUTPUT TEXT LENGTH IS M-OUT-LENGTH STATUS KEY IS OUT-STATUS-KEY ERROR KEY IS OUT-ERROR-KEY SYMBOLIC DESTINATION IS OUT-DESTINATION DESTINATION COUNT IS DESTINATION-COUNT. PROCEDURE DIVISION. START. OPEN INPUT LOG-FILE. MOVE CR-WITHOUT-LF TO CR. RECEIVE-ULN. MOVE SPACES TO ULN. MOVE "LOGIN" TO IN-Q. RECEIVE LOGIN-INPUT MESSAGE INTO ULN. MOVE 1 TO DESTINATION-COUNT. MOVE M-SOURCE TO OUT-DESTINATION. ENABLE OUTPUT LOGIN-OUTPUT WITH KEY "ORDER". IF IN-END-KEY EQUALS ZERO GO TO PURGE-IT. IF IN-END-KEY NOT EQUAL TO "2" GO TO ULN-ERROR. ASK-FOR-PASSWORD. MOVE 9 TO M-OUT-LENGTH. MOVE M-SOURCE TO OUT-DESTINATION. MOVE 1 TO DESTINATION-COUNT. SEND LOGIN-OUTPUT FROM PASSWORD-CR WITH EMI AFTER ADVANCING 1 LINE. RECEIVE-PASSWORD. MOVE SPACES TO PASSWORD OF USER-INFO. RECEIVE LOGIN-INPUT MESSAGE INTO PASSWORD OF USER-INFO. IF IN-END-KEY EQUALS ZERO GO TO PURGE-IT. IF IN-END-KEY NOT EQUAL "3" GO TO ULN-ERROR. READ-LOOP. READ LOG-FILE AT END GO TO INVALID-USER. IF ULN NOT EQUAL TO USERS-LOGIN-NO GO TO READ-LOOP. IF PASSWORD OF LOG-REC IS EQUAL TO PASSWORD OF USER-INFO GO TO EN-ABLE ELSE MOVE 1 TO RESTART-SW GO TO ULN-ERROR. EN-ABLE. MOVE SPACES TO IN-Q. ENABLE INPUT TERMINAL LOGIN-INPUT WITH KEY "ORDER". MOVE 22 TO M-OUT-LENGTH. SEND LOGIN-OUTPUT FROM ENABLER WITH EMI AFTER ADVANCING 3 LINES. SEND LOGIN-OUTPUT WITH EPI. DONE. CLOSE LOG-FILE. GO TO START. PURGE-IT. RECEIVE LOGIN-INPUT MESSAGE INTO GAR-BAGE. IF IN-END-KEY EQUALS ZERO GO TO PURGE-IT. MOVE 1 TO M-OUT-LENGTH. MOVE M-SOURCE TO OUT-DESTINATION. MOVE 1 TO DESTINATION-COUNT. SEND LOGIN-OUTPUT FROM CR WITH ESI. MOVE 21 TO M-OUT-LENGTH. SEND LOGIN-OUTPUT FROM TOO-LONG WITH EMI. MOVE 1 TO RESTART-SW. ULN-ERROR. IF IN-END-KEY GREATER THAN 2 MOVE 4 TO END-IND ELSE MOVE 2 TO END-IND. MOVE M-SOURCE TO OUT-DESTINATION. MOVE 1 TO DESTINATION-COUNT. SEND LOGIN-OUTPUT WITH EMI. IF END-IND =2 MOVE 6 TO M-OUT-LENGTH SEND LOGIN-OUTPUT FROM ULN-MSG WITH END-IND ELSE MOVE 12 TO M-OUT-LENGTH SEND LOGIN-OUTPUT FROM B-AGAIN WITH END-IND. SEND LOGIN-OUTPUT WITH EMI. DISABLE OUTPUT LOGIN-OUTPUT WITH KEY "NOORDER". IF RESTART-SW = ZERO GO TO RECEIVE-ULN ELSE MOVE ZERO TO RESTART-SW. VERY-BAD. CLOSE LOG-FILE. GO TO START. INVALID-USER. CLOSE LOG-FILE. MOVE 1 TO DESTINATION-COUNT. MOVE M-SOURCE TO OUT-DESTINATION. DISABLE OUTPUT LOGIN-OUTPUT WITH KEY "NOORDER". GO TO START.