Stack: Difference between revisions

Content added Content deleted
(Removed unused fields)
(Separated stack utilities to stack-utilities)
Line 581: Line 581:
Based loosely on the C stack implementation in Quiwa's Data Structures.
Based loosely on the C stack implementation in Quiwa's Data Structures.


This example (ab)uses the COPY procedure to ensure that there is a consistently-defined stack type, node type, and p(redicate) type.
This example (ab)uses the COPY procedure to ensure that there is a consistently-defined stack type, node type, p(redicate) type, and set of stack-utilities.


stack.cbl
stack.cbl
<lang COBOL> 01 stack.
<lang COBOL> 01 stack.
05 head USAGE IS POINTER VALUE NULL.</lang>
05 head USAGE IS POINTER VALUE NULL.
</lang>


node.cbl
node.cbl
<lang COBOL> 01 node BASED.
<lang COBOL> 01 node BASED.
05 info PICTURE X(10) VALUE SPACES.
05 info PICTURE X(10) VALUE SPACES.
05 link USAGE IS POINTER VALUE NULL.</lang>
05 link USAGE IS POINTER VALUE NULL.
</lang>


p.cbl
p.cbl
<lang COBOL> 01 p PICTURE 9.
<lang COBOL> 01 p PICTURE 9.
88 nil VALUE ZERO.
88 nil VALUE ZERO.
88 t VALUE 1.</lang>
88 t VALUE 1.
</lang>


stack-test.cbl
stack-utilities.cbl
<lang COBOL> *>* Stack
<lang COBOL> IDENTIFICATION DIVISION.

IDENTIFICATION DIVISION.
PROGRAM-ID. stack-test.
DATA DIVISION.
LOCAL-STORAGE SECTION.
COPY stack.
PROCEDURE DIVISION.
CALL "push" USING
BY REFERENCE stack
BY CONTENT "daleth "
END-CALL
CALL "push" USING
BY REFERENCE stack
BY CONTENT "gimel "
END-CALL
CALL "push" USING
BY REFERENCE stack
BY CONTENT "beth "
END-CALL
CALL "push" USING
BY REFERENCE stack
BY CONTENT "aleph "
END-CALL
CALL "traverse-stack" USING
BY REFERENCE stack
END-CALL
STOP RUN.
END PROGRAM stack-test.

IDENTIFICATION DIVISION.
PROGRAM-ID. push.
PROGRAM-ID. push.
DATA DIVISION.
DATA DIVISION.
Line 652: Line 625:
GOBACK.
GOBACK.
END PROGRAM push.
END PROGRAM push.

IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. pop.
PROGRAM-ID. pop.
Line 677: Line 650:
GOBACK.
GOBACK.
END PROGRAM pop.
END PROGRAM pop.

IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. empty.
PROGRAM-ID. empty.
Line 693: Line 666:
GOBACK.
GOBACK.
END PROGRAM empty.
END PROGRAM empty.

IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. head.
PROGRAM-ID. head.
Line 716: Line 689:
GOBACK.
GOBACK.
END PROGRAM head.
END PROGRAM head.

IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. peek.
PROGRAM-ID. peek.
Line 731: Line 704:
GOBACK.
GOBACK.
END PROGRAM peek.
END PROGRAM peek.

IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. pointerp.
PROGRAM-ID. pointerp.
Line 746: Line 719:
GOBACK.
GOBACK.
END PROGRAM pointerp.
END PROGRAM pointerp.

IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. stack-overflow-error.
PROGRAM-ID. stack-overflow-error.
Line 753: Line 726:
STOP RUN.
STOP RUN.
END PROGRAM stack-overflow-error.
END PROGRAM stack-overflow-error.

IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. stack-underflow-error.
PROGRAM-ID. stack-underflow-error.
Line 760: Line 733:
STOP RUN.
STOP RUN.
END PROGRAM stack-underflow-error.
END PROGRAM stack-underflow-error.
</lang>


stack-test.cbl
<lang COBOL> *>* Stack
IDENTIFICATION DIVISION.
PROGRAM-ID. stack-test.
DATA DIVISION.
LOCAL-STORAGE SECTION.
COPY stack.
PROCEDURE DIVISION.
CALL "push" USING
BY REFERENCE stack
BY CONTENT "daleth "
END-CALL
CALL "push" USING
BY REFERENCE stack
BY CONTENT "gimel "
END-CALL
CALL "push" USING
BY REFERENCE stack
BY CONTENT "beth "
END-CALL
CALL "push" USING
BY REFERENCE stack
BY CONTENT "aleph "
END-CALL
CALL "traverse-stack" USING
BY REFERENCE stack
END-CALL
STOP RUN.
END PROGRAM stack-test.
COPY stack-utilities.
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. display-pointer.
PROGRAM-ID. display-pointer.
Line 780: Line 787:
GOBACK.
GOBACK.
END PROGRAM display-pointer.
END PROGRAM display-pointer.

IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. traverse-stack.
PROGRAM-ID. traverse-stack.
Line 815: Line 822:
END-IF
END-IF
GOBACK.
GOBACK.
END PROGRAM traverse-stack.</lang>
END PROGRAM traverse-stack.
</lang>


Output:
Output: