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. |
||
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. |
||
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. |
||
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. |
||
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. |
||
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. |
||
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. |
||
COPY node-info. |
|||
COPY stack REPLACING stack BY new-stack. |
COPY stack REPLACING stack BY new-stack. |
||
LINKAGE SECTION. |
LINKAGE SECTION. |