287 lines
9.3 KiB
COBOL
287 lines
9.3 KiB
COBOL
PROCESS NOSEQ,DS(S),AR(E),TEST(SO),CP(1047)
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. PTYQTEST
|
|
ENVIRONMENT DIVISION.
|
|
CONFIGURATION SECTION.
|
|
* UNCOMMENT WITH DEBUGGING CLAUSE FOR DEBUG LINES TO EXECUTE.
|
|
SOURCE-COMPUTER.
|
|
Z-SYSTEM
|
|
* WITH DEBUGGING MODE
|
|
.
|
|
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
01 PTYQ-PGMNAMES.
|
|
05 PTYQPUSH PIC X(8) VALUE "PTYQPUSH".
|
|
05 PTYQPOP PIC X(8) VALUE "PTYQPOP".
|
|
|
|
01 TASK-PTR POINTER.
|
|
|
|
01 TOP-PTR POINTER.
|
|
|
|
01 LINK-KEY PIC S9(8) COMP-5.
|
|
|
|
01 HEAP-PTR POINTER VALUE NULL.
|
|
|
|
01 PUSHD-PTR POINTER VALUE NULL.
|
|
|
|
01 POPPD-PTR POINTER VALUE NULL.
|
|
|
|
LINKAGE SECTION.
|
|
01 TASK.
|
|
05 TASK-NODE.
|
|
10 TASK-KEY PIC S9(8) COMP-5.
|
|
10 TASK-NEXT POINTER.
|
|
10 TASK-DOWN POINTER.
|
|
05 TASK-NAME PIC X(40).
|
|
|
|
PROCEDURE DIVISION.
|
|
ALLOCATE TASK RETURNING TASK-PTR
|
|
MOVE "EAT SCONES." TO TASK-NAME
|
|
MOVE +6 TO LINK-KEY
|
|
CALL PTYQPUSH USING TASK-PTR, LINK-KEY, HEAP-PTR, PUSHD-PTR
|
|
SET HEAP-PTR TO PUSHD-PTR
|
|
|
|
ALLOCATE TASK RETURNING TASK-PTR
|
|
MOVE "CLEAR DRAINS." TO TASK-NAME
|
|
MOVE +3 TO LINK-KEY
|
|
CALL PTYQPUSH USING TASK-PTR, LINK-KEY, HEAP-PTR, PUSHD-PTR
|
|
SET HEAP-PTR TO PUSHD-PTR
|
|
|
|
ALLOCATE TASK RETURNING TASK-PTR
|
|
MOVE "FEED CAT." TO TASK-NAME
|
|
MOVE +4 TO LINK-KEY
|
|
CALL PTYQPUSH USING TASK-PTR, LINK-KEY, HEAP-PTR, PUSHD-PTR
|
|
SET HEAP-PTR TO PUSHD-PTR
|
|
|
|
ALLOCATE TASK RETURNING TASK-PTR
|
|
MOVE "MAKE TEA." TO TASK-NAME
|
|
MOVE +5 TO LINK-KEY
|
|
CALL PTYQPUSH USING TASK-PTR, LINK-KEY, HEAP-PTR, PUSHD-PTR
|
|
SET HEAP-PTR TO PUSHD-PTR
|
|
|
|
ALLOCATE TASK RETURNING TASK-PTR
|
|
MOVE "SOLVE RC TASKS." TO TASK-NAME
|
|
MOVE +1 TO LINK-KEY
|
|
CALL PTYQPUSH USING TASK-PTR, LINK-KEY, HEAP-PTR, PUSHD-PTR
|
|
SET HEAP-PTR TO PUSHD-PTR
|
|
|
|
ALLOCATE TASK RETURNING TASK-PTR
|
|
MOVE "TAX RETURN." TO TASK-NAME
|
|
MOVE +2 TO LINK-KEY
|
|
CALL PTYQPUSH USING TASK-PTR, LINK-KEY, HEAP-PTR, PUSHD-PTR
|
|
SET HEAP-PTR TO PUSHD-PTR
|
|
|
|
PERFORM WITH TEST BEFORE UNTIL HEAP-PTR = NULL
|
|
SET TOP-PTR TO HEAP-PTR
|
|
SET ADDRESS OF TASK TO TOP-PTR
|
|
DISPLAY TASK-KEY " " TASK-NAME
|
|
CALL PTYQPOP USING HEAP-PTR, POPPD-PTR
|
|
SET HEAP-PTR TO POPPD-PTR
|
|
FREE TOP-PTR
|
|
END-PERFORM
|
|
GOBACK.
|
|
END PROGRAM PTYQTEST.
|
|
PROCESS NOSEQ,DS(S),AR(E),TEST(SO),CP(1047)
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. PTYQMERG RECURSIVE.
|
|
ENVIRONMENT DIVISION.
|
|
CONFIGURATION SECTION.
|
|
* UNCOMMENT WITH DEBUGGING CLAUSE FOR DEBUG LINES TO EXECUTE.
|
|
SOURCE-COMPUTER.
|
|
Z-SYSTEM
|
|
* WITH DEBUGGING MODE
|
|
.
|
|
|
|
DATA DIVISION.
|
|
|
|
LINKAGE SECTION.
|
|
01 HEAP-PTRA POINTER.
|
|
|
|
01 HEAP-PTRB POINTER.
|
|
|
|
01 MERGD-PTR POINTER.
|
|
|
|
01 HEAPA.
|
|
05 HEAPA-KEY PIC S9(8) COMP-5 VALUE +0.
|
|
05 HEAPA-NEXT POINTER.
|
|
05 HEAPA-DOWN POINTER.
|
|
|
|
01 HEAPB.
|
|
05 HEAPB-KEY PIC S9(8) COMP-5 VALUE +0.
|
|
05 HEAPB-NEXT POINTER.
|
|
05 HEAPB-DOWN POINTER.
|
|
|
|
PROCEDURE DIVISION USING HEAP-PTRA, HEAP-PTRB, MERGD-PTR.
|
|
EVALUATE TRUE
|
|
WHEN HEAP-PTRA = NULL
|
|
SET MERGD-PTR TO HEAP-PTRB
|
|
WHEN HEAP-PTRB = NULL
|
|
SET MERGD-PTR TO HEAP-PTRA
|
|
WHEN OTHER
|
|
SET ADDRESS OF HEAPA TO HEAP-PTRA
|
|
SET ADDRESS OF HEAPB TO HEAP-PTRB
|
|
IF HEAPA-KEY < HEAPB-KEY
|
|
IF HEAPA-DOWN NOT = NULL
|
|
SET HEAPB-NEXT TO HEAPA-DOWN
|
|
END-IF
|
|
SET HEAPA-DOWN TO HEAP-PTRB
|
|
SET MERGD-PTR TO HEAP-PTRA
|
|
ELSE
|
|
IF HEAPB-DOWN NOT = NULL
|
|
SET HEAPA-NEXT TO HEAPB-DOWN
|
|
END-IF
|
|
SET HEAPB-DOWN TO HEAP-PTRA
|
|
SET MERGD-PTR TO HEAP-PTRB
|
|
END-IF
|
|
END-EVALUATE
|
|
GOBACK.
|
|
END PROGRAM PTYQMERG.
|
|
PROCESS NOSEQ,DS(S),AR(E),TEST(SO),CP(1047)
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. PTYQ2PMG RECURSIVE.
|
|
ENVIRONMENT DIVISION.
|
|
CONFIGURATION SECTION.
|
|
* UNCOMMENT WITH DEBUGGING CLAUSE FOR DEBUG LINES TO EXECUTE.
|
|
SOURCE-COMPUTER.
|
|
Z-SYSTEM
|
|
* WITH DEBUGGING MODE
|
|
.
|
|
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
01 PGMQMERG PIC X(8) VALUE "PTYQMERG".
|
|
01 PGMQ2PMG PIC X(8) VALUE "PTYQ2PMG".
|
|
|
|
LOCAL-STORAGE SECTION.
|
|
01 HEAP-PTRA POINTER.
|
|
|
|
01 HEAP-PTRB POINTER.
|
|
|
|
01 HEAP-REST POINTER.
|
|
|
|
01 MERG1-PTR POINTER.
|
|
|
|
01 MERG2-PTR POINTER.
|
|
|
|
LINKAGE SECTION.
|
|
01 HEAP-PTR POINTER.
|
|
|
|
01 MERGD-PTR POINTER.
|
|
|
|
01 HEAP.
|
|
05 HEAP-KEY PIC S9(8) COMP-5 VALUE +0.
|
|
05 HEAP-NEXT POINTER.
|
|
05 HEAP-DOWN POINTER.
|
|
|
|
01 HEAPA.
|
|
05 HEAPA-KEY PIC S9(8) COMP-5 VALUE +0.
|
|
05 HEAPA-NEXT POINTER.
|
|
05 HEAPA-DOWN POINTER.
|
|
|
|
01 HEAPB.
|
|
05 HEAPB-KEY PIC S9(8) COMP-5 VALUE +0.
|
|
05 HEAPB-NEXT POINTER.
|
|
05 HEAPB-DOWN POINTER.
|
|
|
|
01 REST.
|
|
05 REST-KEY PIC S9(8) COMP-5 VALUE +0.
|
|
05 REST-NEXT POINTER.
|
|
05 REST-DOWN POINTER.
|
|
|
|
PROCEDURE DIVISION USING HEAP-PTR, MERGD-PTR.
|
|
SET ADDRESS OF HEAP TO HEAP-PTR
|
|
EVALUATE TRUE
|
|
WHEN HEAP-PTR = NULL
|
|
SET MERGD-PTR TO HEAP-PTR
|
|
WHEN HEAP-NEXT = NULL
|
|
SET MERGD-PTR TO HEAP-PTR
|
|
WHEN OTHER
|
|
SET HEAP-PTRA TO HEAP-PTR
|
|
SET ADDRESS OF HEAPA TO HEAP-PTRA
|
|
SET HEAP-PTRB TO HEAP-NEXT
|
|
SET ADDRESS OF HEAPB TO HEAP-PTRB
|
|
SET HEAP-REST TO HEAPB-NEXT
|
|
SET ADDRESS OF REST TO HEAP-REST
|
|
SET HEAPA-NEXT TO NULL
|
|
SET HEAPB-NEXT TO NULL
|
|
CALL PGMQMERG USING HEAP-PTRA, HEAP-PTRB, MERG1-PTR
|
|
CALL PGMQ2PMG USING HEAP-REST, MERG2-PTR
|
|
CALL PGMQMERG USING MERG1-PTR, MERG2-PTR, MERGD-PTR
|
|
END-EVALUATE
|
|
GOBACK.
|
|
END PROGRAM PTYQ2PMG.
|
|
PROCESS NOSEQ,DS(S),AR(E),TEST(SO),CP(1047)
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. PTYQPUSH RECURSIVE.
|
|
ENVIRONMENT DIVISION.
|
|
CONFIGURATION SECTION.
|
|
* UNCOMMENT WITH DEBUGGING CLAUSE FOR DEBUG LINES TO EXECUTE.
|
|
SOURCE-COMPUTER.
|
|
Z-SYSTEM
|
|
* WITH DEBUGGING MODE
|
|
.
|
|
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
01 PTYQMERG PIC X(8) VALUE "PTYQMERG".
|
|
|
|
LINKAGE SECTION.
|
|
01 NODE-PTR POINTER.
|
|
|
|
01 LINK-KEY PIC S9(8) COMP-5.
|
|
|
|
01 HEAP-PTR POINTER.
|
|
|
|
01 PUSHD-PTR POINTER.
|
|
|
|
01 HEAP.
|
|
05 HEAP-KEY PIC S9(8) COMP-5.
|
|
05 HEAP-NEXT POINTER.
|
|
05 HEAP-DOWN POINTER.
|
|
|
|
01 NODE.
|
|
05 NODE-KEY PIC S9(8) COMP-5.
|
|
05 NODE-NEXT POINTER.
|
|
05 NODE-DOWN POINTER.
|
|
|
|
PROCEDURE DIVISION USING NODE-PTR, LINK-KEY, HEAP-PTR, PUSHD-PTR.
|
|
SET ADDRESS OF NODE TO NODE-PTR
|
|
SET ADDRESS OF HEAP TO HEAP-PTR
|
|
SET NODE-NEXT TO NULL
|
|
SET NODE-DOWN TO NULL
|
|
MOVE LINK-KEY TO NODE-KEY
|
|
CALL PTYQMERG USING NODE-PTR, HEAP-PTR, PUSHD-PTR
|
|
GOBACK.
|
|
END PROGRAM PTY2PUSH.
|
|
PROCESS NOSEQ,DS(S),AR(E),TEST(SO),CP(1047)
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. PTYQPOP RECURSIVE.
|
|
ENVIRONMENT DIVISION.
|
|
CONFIGURATION SECTION.
|
|
* UNCOMMENT WITH DEBUGGING CLAUSE FOR DEBUG LINES TO EXECUTE.
|
|
SOURCE-COMPUTER.
|
|
Z-SYSTEM
|
|
* WITH DEBUGGING MODE
|
|
.
|
|
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
01 PTYQ2PMG PIC X(8) VALUE "PTYQ2PMG".
|
|
|
|
LINKAGE SECTION.
|
|
01 HEAP-PTR POINTER.
|
|
|
|
01 POPPD-PTR POINTER.
|
|
|
|
01 HEAP.
|
|
05 HEAP-KEY PIC S9(8) COMP-5 VALUE +0.
|
|
05 HEAP-NEXT POINTER.
|
|
05 HEAP-DOWN POINTER.
|
|
|
|
PROCEDURE DIVISION USING HEAP-PTR, POPPD-PTR.
|
|
SET ADDRESS OF HEAP TO HEAP-PTR
|
|
CALL PTYQ2PMG USING HEAP-DOWN, POPPD-PTR
|
|
GOBACK.
|
|
END PROGRAM PTYQPOP.
|