Stack: Difference between revisions

Content deleted Content added
Fixed push to accommodate variable-size strings
Separated node-info from node
Line 604: Line 604:
Based loosely on the C stack implementation in Evangel Quiwa's Data Structures.
Based loosely on the C stack implementation in Evangel Quiwa's Data Structures.


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.
This example (ab)uses the COPY procedure to ensure that there is a consistently-defined stack type, node type, node information type, p(redicate) type, and set of stack-utilities.


stack.cbl
stack.cbl
Line 613: Line 613:
node.cbl
node.cbl
<lang COBOL> 01 node BASED.
<lang COBOL> 01 node BASED.
05 info PICTURE X(10) VALUE SPACES.
COPY node-info REPLACING
01 BY 05
node-info BY info.
05 link USAGE IS POINTER VALUE NULL.
05 link USAGE IS POINTER VALUE NULL.
</lang>

node-info.cbl
<lang COBOL> 01 node-info PICTURE X(10) VALUE SPACES.
</lang>
</lang>


Line 632: Line 638:
LINKAGE SECTION.
LINKAGE SECTION.
COPY stack.
COPY stack.
01 node-info PICTURE X ANY LENGTH.
01 node-info-any PICTURE X ANY LENGTH.
PROCEDURE DIVISION USING stack node-info.
PROCEDURE DIVISION USING stack node-info-any.
ALLOCATE node
ALLOCATE node
CALL "pointerp" USING
CALL "pointerp" USING
Line 642: Line 648:
CALL "stack-overflow-error" END-CALL
CALL "stack-overflow-error" END-CALL
ELSE
ELSE
MOVE node-info TO info OF node
MOVE node-info-any TO info OF node
SET link OF node TO head OF stack
SET link OF node TO head OF stack
SET head OF stack TO ADDRESS OF node
SET head OF stack TO ADDRESS OF node
Line 657: Line 663:
LINKAGE SECTION.
LINKAGE SECTION.
COPY stack.
COPY stack.
01 node-info PICTURE X(10).
COPY node-info.
PROCEDURE DIVISION USING stack node-info.
PROCEDURE DIVISION USING stack node-info.
CALL "empty" USING
CALL "empty" USING
Line 702: Line 708:
LINKAGE SECTION.
LINKAGE SECTION.
COPY stack.
COPY stack.
01 node-info PICTURE X(10).
COPY node-info.
PROCEDURE DIVISION USING stack node-info.
PROCEDURE DIVISION USING stack node-info.
CALL "empty" USING
CALL "empty" USING
Line 723: Line 729:
LINKAGE SECTION.
LINKAGE SECTION.
COPY stack.
COPY stack.
01 node-info PICTURE X(10).
COPY node-info.
PROCEDURE DIVISION USING stack node-info.
PROCEDURE DIVISION USING stack node-info.
CALL "head" USING
CALL "head" USING
Line 766: Line 772:
LOCAL-STORAGE SECTION.
LOCAL-STORAGE SECTION.
COPY p.
COPY p.
01 node-info PICTURE X(10) VALUE SPACES.
COPY node-info.
LINKAGE SECTION.
LINKAGE SECTION.
COPY stack.
COPY stack.
Line 801: Line 807:
LOCAL-STORAGE SECTION.
LOCAL-STORAGE SECTION.
COPY p.
COPY p.
01 node-info PICTURE X(10) VALUE SPACES.
COPY node-info.
LINKAGE SECTION.
LINKAGE SECTION.
COPY stack.
COPY stack.
Line 836: Line 842:
LOCAL-STORAGE SECTION.
LOCAL-STORAGE SECTION.
COPY p.
COPY p.
01 node-info PICTURE X(10) VALUE SPACES.
COPY node-info.
COPY stack REPLACING stack BY new-stack.
COPY stack REPLACING stack BY new-stack.
LINKAGE SECTION.
LINKAGE SECTION.