Add preliminary program interpreter.
This commit is contained in:
parent
9faf870e6d
commit
22c3b4735a
3 changed files with 319 additions and 6 deletions
43
PRINTCNF.COB
43
PRINTCNF.COB
|
@ -17,6 +17,16 @@
|
||||||
SELECT CHANNELS
|
SELECT CHANNELS
|
||||||
ASSIGN TO DISK
|
ASSIGN TO DISK
|
||||||
ORGANIZATION IS SEQUENTIAL.
|
ORGANIZATION IS SEQUENTIAL.
|
||||||
|
SELECT PROGRAM-INDEX
|
||||||
|
ASSIGN TO DISK
|
||||||
|
ORGANIZATION IS INDEXED
|
||||||
|
ACCESS MODE IS SEQUENTIAL
|
||||||
|
RECORD KEY IS NAME OF INDEX-ENTRY.
|
||||||
|
SELECT PROGRAM-CODE
|
||||||
|
ASSIGN TO DISK
|
||||||
|
ORGANIZATION IS RELATIVE
|
||||||
|
ACCESS MODE IS DYNAMIC
|
||||||
|
RELATIVE KEY IS PROGRAM-IP.
|
||||||
|
|
||||||
DATA DIVISION.
|
DATA DIVISION.
|
||||||
FILE SECTION.
|
FILE SECTION.
|
||||||
|
@ -31,10 +41,20 @@
|
||||||
FD CHANNELS.
|
FD CHANNELS.
|
||||||
01 CHANNEL-RECORD.
|
01 CHANNEL-RECORD.
|
||||||
03 CHANNEL-NAME PIC X(50).
|
03 CHANNEL-NAME PIC X(50).
|
||||||
|
FD PROGRAM-INDEX.
|
||||||
|
01 INDEX-ENTRY.
|
||||||
|
03 NAME PIC X(16).
|
||||||
|
03 ADDR PIC 999.
|
||||||
|
FD PROGRAM-CODE.
|
||||||
|
01 PROGRAM-RECORD.
|
||||||
|
03 INSTRUCTION-RECORD PIC X(999).
|
||||||
|
03 PREV-IP PIC 999.
|
||||||
|
03 NEXT-IP PIC 999.
|
||||||
|
|
||||||
WORKING-STORAGE SECTION.
|
WORKING-STORAGE SECTION.
|
||||||
01 STATE PIC 9(2) VALUE 0.
|
01 STATE PIC 9(2) VALUE 0.
|
||||||
88 DONE VALUE 10.
|
88 DONE VALUE 10.
|
||||||
|
01 PROGRAM-IP PIC 999.
|
||||||
|
|
||||||
PROCEDURE DIVISION.
|
PROCEDURE DIVISION.
|
||||||
DISPLAY "CONFIGURATION ENTRIES:"
|
DISPLAY "CONFIGURATION ENTRIES:"
|
||||||
|
@ -52,6 +72,10 @@
|
||||||
PERFORM PRINT-CHANNEL-ENTRY UNTIL DONE.
|
PERFORM PRINT-CHANNEL-ENTRY UNTIL DONE.
|
||||||
MOVE 0 TO STATE.
|
MOVE 0 TO STATE.
|
||||||
CLOSE CHANNELS.
|
CLOSE CHANNELS.
|
||||||
|
DISPLAY "PROGRAMS.".
|
||||||
|
OPEN INPUT PROGRAM-INDEX, PROGRAM-CODE.
|
||||||
|
PERFORM PRINT-PROGRAM UNTIL DONE.
|
||||||
|
CLOSE PROGRAM-INDEX, PROGRAM-CODE.
|
||||||
EXIT PROGRAM.
|
EXIT PROGRAM.
|
||||||
|
|
||||||
PRINT-CONFIG-ENTRY.
|
PRINT-CONFIG-ENTRY.
|
||||||
|
@ -71,3 +95,22 @@
|
||||||
AT END MOVE 10 TO STATE.
|
AT END MOVE 10 TO STATE.
|
||||||
IF NOT DONE THEN
|
IF NOT DONE THEN
|
||||||
DISPLAY CHANNEL-RECORD.
|
DISPLAY CHANNEL-RECORD.
|
||||||
|
|
||||||
|
PRINT-PROGRAM.
|
||||||
|
READ PROGRAM-INDEX NEXT RECORD
|
||||||
|
AT END MOVE 10 TO STATE.
|
||||||
|
IF NOT DONE THEN
|
||||||
|
DISPLAY NAME OF INDEX-ENTRY
|
||||||
|
MOVE ADDR OF INDEX-ENTRY TO PROGRAM-IP
|
||||||
|
PERFORM PRINT-INSTRUCTION UNTIL DONE
|
||||||
|
MOVE 0 TO STATE.
|
||||||
|
|
||||||
|
PRINT-INSTRUCTION.
|
||||||
|
READ PROGRAM-CODE RECORD
|
||||||
|
AT END MOVE 10 TO STATE.
|
||||||
|
IF NOT DONE THEN
|
||||||
|
DISPLAY PROGRAM-IP, ".", INSTRUCTION-RECORD
|
||||||
|
IF NEXT-IP OF PROGRAM-RECORD IS EQUAL TO 0 THEN
|
||||||
|
MOVE 10 TO STATE
|
||||||
|
ELSE
|
||||||
|
MOVE NEXT-IP OF PROGRAM-RECORD TO PROGRAM-IP.
|
||||||
|
|
74
WOPO-CNF.COB
74
WOPO-CNF.COB
|
@ -17,6 +17,16 @@
|
||||||
SELECT CHANNELS
|
SELECT CHANNELS
|
||||||
ASSIGN TO DISK
|
ASSIGN TO DISK
|
||||||
ORGANIZATION IS SEQUENTIAL.
|
ORGANIZATION IS SEQUENTIAL.
|
||||||
|
SELECT PROGRAM-INDEX
|
||||||
|
ASSIGN TO DISK
|
||||||
|
ORGANIZATION IS INDEXED
|
||||||
|
ACCESS MODE IS RANDOM
|
||||||
|
RECORD KEY IS NAME OF INDEX-ENTRY.
|
||||||
|
SELECT PROGRAM-CODE
|
||||||
|
ASSIGN TO DISK
|
||||||
|
ORGANIZATION IS RELATIVE
|
||||||
|
ACCESS MODE IS SEQUENTIAL
|
||||||
|
RELATIVE KEY IS PROGRAM-IP.
|
||||||
|
|
||||||
DATA DIVISION.
|
DATA DIVISION.
|
||||||
FILE SECTION.
|
FILE SECTION.
|
||||||
|
@ -31,10 +41,25 @@
|
||||||
FD CHANNELS.
|
FD CHANNELS.
|
||||||
01 CHANNEL-RECORD.
|
01 CHANNEL-RECORD.
|
||||||
03 CHANNEL-NAME PIC X(50).
|
03 CHANNEL-NAME PIC X(50).
|
||||||
|
FD PROGRAM-INDEX.
|
||||||
|
01 INDEX-ENTRY.
|
||||||
|
03 NAME PIC X(16).
|
||||||
|
03 ADDR PIC 999.
|
||||||
|
FD PROGRAM-CODE.
|
||||||
|
01 PROGRAM-RECORD.
|
||||||
|
03 INSTRUCTION PIC X(999).
|
||||||
|
03 PREV-IP PIC 999.
|
||||||
|
03 NEXT-IP PIC 999.
|
||||||
|
|
||||||
WORKING-STORAGE SECTION.
|
WORKING-STORAGE SECTION.
|
||||||
01 STATE PIC 9(2) VALUE 0.
|
01 STATE PIC 9(2) VALUE 0.
|
||||||
88 DONE VALUE 10.
|
88 WRITING-PROGRAM VALUE 10.
|
||||||
|
88 DONE VALUE 99.
|
||||||
|
01 CURRENT-INSTRUCTION.
|
||||||
|
03 INSTRUCTION PIC X(999).
|
||||||
|
03 PREV-IP PIC 999.
|
||||||
|
03 NEXT-IP PIC 999.
|
||||||
|
01 PROGRAM-IP PIC 999.
|
||||||
|
|
||||||
PROCEDURE DIVISION.
|
PROCEDURE DIVISION.
|
||||||
DISPLAY "WOPO CONFIGURATION PROGRAM".
|
DISPLAY "WOPO CONFIGURATION PROGRAM".
|
||||||
|
@ -54,24 +79,65 @@
|
||||||
MOVE 0 TO STATE.
|
MOVE 0 TO STATE.
|
||||||
PERFORM WRITE-CHANNEL-ENTRY UNTIL DONE.
|
PERFORM WRITE-CHANNEL-ENTRY UNTIL DONE.
|
||||||
CLOSE CHANNELS.
|
CLOSE CHANNELS.
|
||||||
|
OPEN OUTPUT PROGRAM-INDEX, PROGRAM-CODE.
|
||||||
|
DISPLAY "WRITING PROGRAMS."
|
||||||
|
MOVE 0 TO STATE.
|
||||||
|
PERFORM WRITE-PROGRAM UNTIL DONE.
|
||||||
|
CLOSE PROGRAM-INDEX, PROGRAM-CODE.
|
||||||
CALL "PRINT-CONFIG".
|
CALL "PRINT-CONFIG".
|
||||||
STOP RUN.
|
STOP RUN.
|
||||||
|
|
||||||
WRITE-CONFIG-ENTRY.
|
WRITE-CONFIG-ENTRY.
|
||||||
ACCEPT CONFIG-RECORD.
|
ACCEPT CONFIG-RECORD.
|
||||||
IF CONFIG-RECORD IS EQUAL TO SPACES
|
IF CONFIG-RECORD IS EQUAL TO SPACES
|
||||||
THEN MOVE 10 TO STATE
|
THEN MOVE 99 TO STATE
|
||||||
ELSE WRITE CONFIG-RECORD.
|
ELSE WRITE CONFIG-RECORD.
|
||||||
|
|
||||||
WRITE-USER-ENTRY.
|
WRITE-USER-ENTRY.
|
||||||
ACCEPT USER-RECORD.
|
ACCEPT USER-RECORD.
|
||||||
IF USER-NAME EQUALS SPACES OR USER-LEVEL EQUALS 0
|
IF USER-NAME EQUALS SPACES OR USER-LEVEL EQUALS 0
|
||||||
THEN MOVE 10 TO STATE
|
THEN MOVE 99 TO STATE
|
||||||
ELSE WRITE USER-RECORD.
|
ELSE WRITE USER-RECORD.
|
||||||
|
|
||||||
WRITE-CHANNEL-ENTRY.
|
WRITE-CHANNEL-ENTRY.
|
||||||
ACCEPT CHANNEL-NAME.
|
ACCEPT CHANNEL-NAME.
|
||||||
IF CHANNEL-NAME EQUALS SPACES
|
IF CHANNEL-NAME EQUALS SPACES
|
||||||
THEN MOVE 10 TO STATE
|
THEN MOVE 99 TO STATE
|
||||||
ELSE WRITE CHANNEL-RECORD.
|
ELSE WRITE CHANNEL-RECORD.
|
||||||
|
|
||||||
|
WRITE-PROGRAM.
|
||||||
|
ACCEPT NAME OF INDEX-ENTRY.
|
||||||
|
IF NAME OF INDEX-ENTRY EQUALS SPACES THEN
|
||||||
|
D DISPLAY "DONE WRITING PROGRAMS."
|
||||||
|
MOVE 99 TO STATE
|
||||||
|
ELSE
|
||||||
|
D DISPLAY "WRITING PROGRAM ", NAME OF INDEX-ENTRY, "."
|
||||||
|
COMPUTE ADDR OF INDEX-ENTRY = PROGRAM-IP + 1
|
||||||
|
WRITE INDEX-ENTRY
|
||||||
|
MOVE SPACES TO INSTRUCTION OF PROGRAM-RECORD,
|
||||||
|
INSTRUCTION OF CURRENT-INSTRUCTION
|
||||||
|
PERFORM WRITE-PROGRAM-RECORD UNTIL DONE
|
||||||
|
MOVE 0 TO STATE.
|
||||||
|
|
||||||
|
WRITE-PROGRAM-RECORD.
|
||||||
|
ACCEPT INSTRUCTION OF CURRENT-INSTRUCTION.
|
||||||
|
IF INSTRUCTION OF CURRENT-INSTRUCTION EQUALS SPACES THEN
|
||||||
|
D DISPLAY "DONE WRITING PROGRAM ",
|
||||||
|
D NAME OF INDEX-ENTRY, "."
|
||||||
|
MOVE 0 TO NEXT-IP OF PROGRAM-RECORD
|
||||||
|
MOVE 99 TO STATE
|
||||||
|
ELSE
|
||||||
|
D DISPLAY "ACCEPTED INSTRUCTION. ",
|
||||||
|
D INSTRUCTION OF CURRENT-INSTRUCTION
|
||||||
|
COMPUTE NEXT-IP IN PROGRAM-RECORD = PROGRAM-IP + 2
|
||||||
|
IF WRITING-PROGRAM THEN
|
||||||
|
COMPUTE PREV-IP OF CURRENT-INSTRUCTION =
|
||||||
|
PROGRAM-IP + 1
|
||||||
|
ELSE
|
||||||
|
MOVE 0 TO PREV-IP OF CURRENT-INSTRUCTION.
|
||||||
|
IF INSTRUCTION OF PROGRAM-RECORD IS NOT EQUAL TO SPACES THEN
|
||||||
|
D DISPLAY "WRITING INSTRUCTION. ", PROGRAM-RECORD
|
||||||
|
WRITE PROGRAM-RECORD
|
||||||
|
IF NOT DONE THEN
|
||||||
|
MOVE 10 TO STATE.
|
||||||
|
MOVE CURRENT-INSTRUCTION TO PROGRAM-RECORD.
|
||||||
|
|
208
WOPO.COB
208
WOPO.COB
|
@ -22,6 +22,16 @@
|
||||||
SELECT CHANNELS
|
SELECT CHANNELS
|
||||||
ASSIGN TO DISK
|
ASSIGN TO DISK
|
||||||
ORGANIZATION IS SEQUENTIAL.
|
ORGANIZATION IS SEQUENTIAL.
|
||||||
|
SELECT PROGRAM-INDEX
|
||||||
|
ASSIGN TO DISK
|
||||||
|
ORGANIZATION IS INDEXED
|
||||||
|
ACCESS MODE IS DYNAMIC
|
||||||
|
RECORD KEY IS NAME OF INDEX-ENTRY.
|
||||||
|
SELECT PROGRAM-CODE
|
||||||
|
ASSIGN TO DISK
|
||||||
|
ORGANIZATION IS RELATIVE
|
||||||
|
ACCESS MODE IS RANDOM
|
||||||
|
RELATIVE KEY IS PROGRAM-IP.
|
||||||
|
|
||||||
DATA DIVISION.
|
DATA DIVISION.
|
||||||
FILE SECTION.
|
FILE SECTION.
|
||||||
|
@ -35,6 +45,21 @@
|
||||||
03 USER-LEVEL PIC 9(2).
|
03 USER-LEVEL PIC 9(2).
|
||||||
FD CHANNELS.
|
FD CHANNELS.
|
||||||
01 CHANNEL-NAME PIC X(50).
|
01 CHANNEL-NAME PIC X(50).
|
||||||
|
FD PROGRAM-INDEX.
|
||||||
|
01 INDEX-ENTRY.
|
||||||
|
03 NAME PIC X(16).
|
||||||
|
03 ADDR PIC 999.
|
||||||
|
FD PROGRAM-CODE.
|
||||||
|
01 PROGRAM-RECORD.
|
||||||
|
03 INSTRUCTION.
|
||||||
|
05 IN-REG PIC 9.
|
||||||
|
88 INPUT-FROM-RECORD VALUE 9.
|
||||||
|
05 OUT-REG PIC 9.
|
||||||
|
05 INTERPRETER PIC X(5).
|
||||||
|
05 INSTRUCTION-CODE PIC X(992).
|
||||||
|
03 RAW-INSTRUCTION REDEFINES INSTRUCTION PIC X(999).
|
||||||
|
03 PREV-IP PIC 999.
|
||||||
|
03 NEXT-IP PIC 999.
|
||||||
|
|
||||||
WORKING-STORAGE SECTION.
|
WORKING-STORAGE SECTION.
|
||||||
*CONFIGURATION "CONSTANTS"
|
*CONFIGURATION "CONSTANTS"
|
||||||
|
@ -126,6 +151,16 @@
|
||||||
03 MAYBE-CYCLE-LIMIT PIC 9(5)
|
03 MAYBE-CYCLE-LIMIT PIC 9(5)
|
||||||
VALUE 0.
|
VALUE 0.
|
||||||
|
|
||||||
|
01 INTERPRETER-STATE.
|
||||||
|
03 PROGRAM-IP PIC 999.
|
||||||
|
03 IP-TEMP PIC 999.
|
||||||
|
|
||||||
|
01 PROGRAM-LISTING-HEADER.
|
||||||
|
03 FILLER PIC X(4) VALUE " IP.".
|
||||||
|
03 FILLER PIC X(2) VALUE "IO".
|
||||||
|
03 FILLER PIC X(5) VALUE " LANG".
|
||||||
|
03 FILLER PIC X(5) VALUE " CODE".
|
||||||
|
|
||||||
01 FORMATTED-TIME.
|
01 FORMATTED-TIME.
|
||||||
03 FILLER PIC X VALUE "H".
|
03 FILLER PIC X VALUE "H".
|
||||||
03 HOURS-DIGITS PIC 99.
|
03 HOURS-DIGITS PIC 99.
|
||||||
|
@ -523,7 +558,7 @@
|
||||||
IF R(3) IS NOT EQUAL TO R(2) THEN
|
IF R(3) IS NOT EQUAL TO R(2) THEN
|
||||||
MOVE 0 TO STATE
|
MOVE 0 TO STATE
|
||||||
PERFORM HANDLE-SWITCHES UNTIL DONE.
|
PERFORM HANDLE-SWITCHES UNTIL DONE.
|
||||||
IF STANDARD-INPUT THEN
|
IF NUM-PARAMS OF WOPO IS GREATER THAN 1 THEN
|
||||||
MOVE 2 TO PTR(1)
|
MOVE 2 TO PTR(1)
|
||||||
MOVE 8 TO DEST
|
MOVE 8 TO DEST
|
||||||
PERFORM GET-REST
|
PERFORM GET-REST
|
||||||
|
@ -578,7 +613,15 @@
|
||||||
ELSE IF R(1) IS EQUAL TO "CAT" THEN
|
ELSE IF R(1) IS EQUAL TO "CAT" THEN
|
||||||
PERFORM HANDLE-CAT
|
PERFORM HANDLE-CAT
|
||||||
ELSE IF R(1) IS EQUAL TO "DUMP-REGS" THEN
|
ELSE IF R(1) IS EQUAL TO "DUMP-REGS" THEN
|
||||||
PERFORM HANDLE-DUMP-REGS.
|
PERFORM HANDLE-DUMP-REGS
|
||||||
|
ELSE IF R(1) IS EQUAL TO "PROGRAMS" THEN
|
||||||
|
PERFORM HANDLE-PROGRAMS
|
||||||
|
ELSE IF R(1) IS EQUAL TO "LIST-PROGRAM" THEN
|
||||||
|
PERFORM HANDLE-LIST-PROGRAM
|
||||||
|
ELSE IF R(1) IS EQUAL TO "RUN" THEN
|
||||||
|
PERFORM HANDLE-RUN
|
||||||
|
ELSE
|
||||||
|
PERFORM INTERPRET-PROGRAM.
|
||||||
D PERFORM DEBUG-REGISTERS
|
D PERFORM DEBUG-REGISTERS
|
||||||
D VARYING WOPO-COUNTER
|
D VARYING WOPO-COUNTER
|
||||||
D FROM 1, BY 1
|
D FROM 1, BY 1
|
||||||
|
@ -1112,6 +1155,167 @@
|
||||||
FROM 1, BY 1,
|
FROM 1, BY 1,
|
||||||
UNTIL WOPO-COUNTER IS GREATER THAN 8.
|
UNTIL WOPO-COUNTER IS GREATER THAN 8.
|
||||||
|
|
||||||
|
STRING-PROGRAM-NAME.
|
||||||
|
READ PROGRAM-INDEX NEXT RECORD
|
||||||
|
AT END MOVE 99 TO STATE.
|
||||||
|
IF NOT DONE THEN
|
||||||
|
STRING NAME OF INDEX-ENTRY DELIMITED BY SPACE,
|
||||||
|
" " DELIMITED BY SIZE
|
||||||
|
INTO R(1)
|
||||||
|
WITH POINTER PTR(1).
|
||||||
|
|
||||||
|
HANDLE-PROGRAMS.
|
||||||
|
OPEN INPUT PROGRAM-INDEX.
|
||||||
|
MOVE 1 TO SRC, PTR(1).
|
||||||
|
MOVE 0 TO STATE.
|
||||||
|
PERFORM STRING-PROGRAM-NAME UNTIL DONE.
|
||||||
|
CLOSE PROGRAM-INDEX.
|
||||||
|
STRING "$NUL$"
|
||||||
|
INTO R(1)
|
||||||
|
WITH POINTER PTR(1).
|
||||||
|
PERFORM BEGIN-STANDARD-REPLY.
|
||||||
|
PERFORM DO-OUTPUT.
|
||||||
|
|
||||||
|
LIST-INSTRUCTION.
|
||||||
|
READ PROGRAM-CODE RECORD.
|
||||||
|
MOVE 1 TO SRC, PTR(1).
|
||||||
|
STRING PROGRAM-IP, ".",
|
||||||
|
RAW-INSTRUCTION OF PROGRAM-RECORD
|
||||||
|
INTO R(1),
|
||||||
|
WITH POINTER PTR(1).
|
||||||
|
PERFORM BEGIN-STANDARD-REPLY.
|
||||||
|
PERFORM DO-OUTPUT.
|
||||||
|
IF NEXT-IP OF PROGRAM-RECORD IS NOT EQUAL TO 0 THEN
|
||||||
|
MOVE NEXT-IP OF PROGRAM-RECORD TO PROGRAM-IP
|
||||||
|
ELSE
|
||||||
|
MOVE 99 TO STATE.
|
||||||
|
|
||||||
|
LIST-PROGRAM.
|
||||||
|
MOVE INPUT-SOURCE TO SRC.
|
||||||
|
PERFORM GET-PARAM.
|
||||||
|
MOVE 1 TO SRC.
|
||||||
|
MOVE R(1) TO NAME OF INDEX-ENTRY.
|
||||||
|
MOVE 0 TO STATE.
|
||||||
|
READ PROGRAM-INDEX RECORD
|
||||||
|
INVALID KEY
|
||||||
|
MOVE 1 TO PTR(1)
|
||||||
|
STRING "NO SUCH PROGRAM " DELIMITED BY SIZE,
|
||||||
|
NAME OF INDEX-ENTRY DELIMITED BY SPACE,
|
||||||
|
".$NUL$" DELIMITED BY SIZE
|
||||||
|
INTO R(1)
|
||||||
|
WITH POINTER PTR(1)
|
||||||
|
PERFORM BEGIN-STANDARD-REPLY
|
||||||
|
PERFORM DO-OUTPUT
|
||||||
|
MOVE 99 TO STATE.
|
||||||
|
IF NOT DONE THEN
|
||||||
|
PERFORM BEGIN-STANDARD-REPLY
|
||||||
|
PERFORM DO-OUTPUT
|
||||||
|
MOVE PROGRAM-LISTING-HEADER TO R(1)
|
||||||
|
PERFORM BEGIN-STANDARD-REPLY
|
||||||
|
PERFORM DO-OUTPUT
|
||||||
|
MOVE ADDR OF INDEX-ENTRY TO PROGRAM-IP
|
||||||
|
PERFORM LIST-INSTRUCTION UNTIL DONE.
|
||||||
|
|
||||||
|
HANDLE-LIST-PROGRAM.
|
||||||
|
MOVE 1 TO DEST.
|
||||||
|
PERFORM INDEX-PARAMS.
|
||||||
|
IF NUM-PARAMS OF WOPO IS LESS THAN 1 THEN
|
||||||
|
MOVE "<PROGRAM NAME> ..." TO R(1)
|
||||||
|
MOVE 1 TO SRC
|
||||||
|
PERFORM USAGE-REPLY
|
||||||
|
ELSE
|
||||||
|
OPEN INPUT PROGRAM-INDEX, PROGRAM-CODE
|
||||||
|
PERFORM LIST-PROGRAM
|
||||||
|
VARYING PTR(SRC)
|
||||||
|
FROM 1, BY 1,
|
||||||
|
UNTIL PTR(SRC) IS GREATER THAN NUM-PARAMS OF WOPO
|
||||||
|
CLOSE PROGRAM-INDEX, PROGRAM-CODE.
|
||||||
|
|
||||||
|
DO-NEXT-INSTRUCTION.
|
||||||
|
READ PROGRAM-CODE RECORD.
|
||||||
|
IF IN-REG IS NOT EQUAL TO 9 THEN
|
||||||
|
MOVE IN-REG TO INPUT-SOURCE
|
||||||
|
ELSE
|
||||||
|
IF NEXT-IP OF PROGRAM-RECORD IS EQUAL TO 0 THEN
|
||||||
|
STRING "MISSING INPUT RECORD FOR INSTRUCTION ",
|
||||||
|
PROGRAM-IP,
|
||||||
|
" IN PROGRAM " DELIMITED BY SIZE,
|
||||||
|
NAME OF INDEX-ENTRY DELIMITED BY SPACE,
|
||||||
|
".$NUL$"
|
||||||
|
INTO R(1)
|
||||||
|
MOVE 1 TO SRC
|
||||||
|
PERFORM BEGIN-STANDARD-REPLY
|
||||||
|
PERFORM DO-OUTPUT
|
||||||
|
MOVE 99 TO STATE
|
||||||
|
ELSE
|
||||||
|
MOVE PROGRAM-IP TO IP-TEMP
|
||||||
|
MOVE NEXT-IP OF PROGRAM-RECORD TO PROGRAM-IP
|
||||||
|
READ PROGRAM-CODE RECORD
|
||||||
|
MOVE RAW-INSTRUCTION TO R(8)
|
||||||
|
MOVE 8 TO INPUT-SOURCE
|
||||||
|
MOVE IP-TEMP TO PROGRAM-IP
|
||||||
|
READ PROGRAM-CODE RECORD.
|
||||||
|
IF NOT DONE THEN
|
||||||
|
MOVE OUT-REG TO OUTPUT-DEST
|
||||||
|
MOVE INSTRUCTION-CODE TO R(1)
|
||||||
|
IF INTERPRETER OF PROGRAM-RECORD IS EQUAL TO "WOPO" THEN
|
||||||
|
PERFORM HANDLE-COMMAND
|
||||||
|
MOVE 0 TO STATE
|
||||||
|
ELSE
|
||||||
|
STRING "INVALID INTERPRETER " DELIMITED BY SIZE,
|
||||||
|
INTERPRETER DELIMITED BY SPACE,
|
||||||
|
" IN INSTRUCTION ",
|
||||||
|
PROGRAM-IP,
|
||||||
|
" IN PROGRAM " DELIMITED BY SIZE,
|
||||||
|
NAME OF INDEX-ENTRY DELIMITED BY SPACE,
|
||||||
|
".$NUL$"
|
||||||
|
INTO R(1)
|
||||||
|
MOVE 1 TO SRC
|
||||||
|
PERFORM BEGIN-STANDARD-REPLY
|
||||||
|
PERFORM DO-OUTPUT
|
||||||
|
MOVE 99 TO STATE.
|
||||||
|
IF NEXT-IP OF PROGRAM-RECORD IS EQUAL TO 0 THEN
|
||||||
|
MOVE 99 TO STATE
|
||||||
|
ELSE
|
||||||
|
MOVE NEXT-IP OF PROGRAM-RECORD TO PROGRAM-IP.
|
||||||
|
|
||||||
|
INTERPRET-PROGRAM.
|
||||||
|
OPEN INPUT PROGRAM-INDEX.
|
||||||
|
MOVE R(1) TO NAME OF INDEX-ENTRY.
|
||||||
|
MOVE 0 TO STATE.
|
||||||
|
READ PROGRAM-INDEX RECORD
|
||||||
|
INVALID KEY MOVE 99 TO STATE.
|
||||||
|
IF DONE THEN
|
||||||
|
STRING "NO SUCH PROGRAM " DELIMITED BY SIZE
|
||||||
|
NAME OF INDEX-ENTRY DELIMITED BY SPACE,
|
||||||
|
".$NUL$"
|
||||||
|
INTO R(1)
|
||||||
|
MOVE 1 TO SRC
|
||||||
|
PERFORM BEGIN-STANDARD-REPLY
|
||||||
|
PERFORM DO-OUTPUT
|
||||||
|
ELSE
|
||||||
|
OPEN INPUT PROGRAM-CODE
|
||||||
|
MOVE ADDR OF INDEX-ENTRY TO PROGRAM-IP
|
||||||
|
PERFORM DO-NEXT-INSTRUCTION UNTIL DONE
|
||||||
|
CLOSE PROGRAM-CODE.
|
||||||
|
CLOSE PROGRAM-INDEX.
|
||||||
|
|
||||||
|
HANDLE-RUN.
|
||||||
|
MOVE 1 TO DEST.
|
||||||
|
PERFORM INDEX-PARAMS.
|
||||||
|
IF NUM-PARAMS OF WOPO IS LESS THAN 1 THEN
|
||||||
|
MOVE "<PROGRAM NAME>" TO R(1)
|
||||||
|
MOVE 1 TO SRC
|
||||||
|
PERFORM USAGE-REPLY
|
||||||
|
ELSE
|
||||||
|
MOVE 1 TO PTR(SRC)
|
||||||
|
PERFORM GET-PARAM
|
||||||
|
IF NUM-PARAMS OF WOPO IS GREATER THAN 1 THEN
|
||||||
|
MOVE 2 TO PTR(SRC), DEST
|
||||||
|
PERFORM GET-REST
|
||||||
|
MOVE R(2) TO R(8).
|
||||||
|
PERFORM INTERPRET-PROGRAM.
|
||||||
|
|
||||||
HANDLE-CTCP.
|
HANDLE-CTCP.
|
||||||
D DISPLAY "HANDLING CTCP.".
|
D DISPLAY "HANDLING CTCP.".
|
||||||
IF NOTICE AND
|
IF NOTICE AND
|
||||||
|
|
Loading…
Reference in a new issue