Stack: Difference between revisions

Content deleted Content added
Removed unnecessary make-stack
Yet another major refactoring
Line 566: Line 566:


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


Line 590: Line 590:
01 node-info PICTURE X(10) VALUE SPACES.
01 node-info PICTURE X(10) VALUE SPACES.
PROCEDURE DIVISION.
PROCEDURE DIVISION.
ALLOCATE stack
CALL "push" USING
CALL "push" USING
BY REFERENCE ADDRESS OF stack
BY REFERENCE stack
BY CONTENT "daleth "
BY CONTENT "daleth "
END-CALL
END-CALL
CALL "push" USING
CALL "push" USING
BY REFERENCE ADDRESS OF stack
BY REFERENCE stack
BY CONTENT "gimel "
BY CONTENT "gimel "
END-CALL
END-CALL
CALL "push" USING
CALL "push" USING
BY REFERENCE ADDRESS OF stack
BY REFERENCE stack
BY CONTENT "beth "
BY CONTENT "beth "
END-CALL
END-CALL
CALL "push" USING
CALL "push" USING
BY REFERENCE ADDRESS OF stack
BY REFERENCE stack
BY CONTENT "aleph "
BY CONTENT "aleph "
END-CALL
END-CALL
CALL "traverse-stack" USING
CALL "traverse-stack" USING
BY REFERENCE ADDRESS OF stack
BY REFERENCE stack
END-CALL
END-CALL
STOP RUN.
STOP RUN.
Line 618: Line 617:
LOCAL-STORAGE SECTION.
LOCAL-STORAGE SECTION.
COPY p.
COPY p.
COPY stack.
COPY node.
COPY node.
LINKAGE SECTION.
LINKAGE SECTION.
01 stack-pointer USAGE IS POINTER.
COPY stack.
01 node-info PICTURE X(10).
01 node-info PICTURE X(10).
PROCEDURE DIVISION USING stack-pointer node-info.
PROCEDURE DIVISION USING stack node-info.
SET ADDRESS OF stack TO stack-pointer
CALL "make-node" USING
CALL "make-node" USING
BY CONTENT node-info
BY CONTENT node-info
Line 647: Line 644:
LOCAL-STORAGE SECTION.
LOCAL-STORAGE SECTION.
COPY p.
COPY p.
COPY stack.
COPY node.
COPY node.
LINKAGE SECTION.
LINKAGE SECTION.
01 stack-pointer USAGE IS POINTER.
COPY stack.
01 node-info PICTURE X(10).
01 node-info PICTURE X(10).
PROCEDURE DIVISION USING stack-pointer node-info.
PROCEDURE DIVISION USING stack node-info.
SET ADDRESS OF stack TO stack-pointer
CALL "empty" USING
CALL "empty" USING
BY REFERENCE ADDRESS OF stack
BY REFERENCE stack
BY REFERENCE p
BY REFERENCE p
END-CALL
END-CALL
Line 673: Line 668:
DATA DIVISION.
DATA DIVISION.
LOCAL-STORAGE SECTION.
LOCAL-STORAGE SECTION.
LINKAGE SECTION.
COPY stack.
COPY stack.
LINKAGE SECTION.
01 stack-pointer USAGE IS POINTER.
COPY p.
COPY p.
PROCEDURE DIVISION USING stack-pointer p.
PROCEDURE DIVISION USING stack p.
SET ADDRESS OF stack TO stack-pointer
CALL "pointerp" USING
CALL "pointerp" USING
BY CONTENT head OF stack
BY CONTENT head OF stack
Line 692: Line 685:
LOCAL-STORAGE SECTION.
LOCAL-STORAGE SECTION.
COPY p.
COPY p.
COPY stack.
COPY node.
COPY node.
LINKAGE SECTION.
LINKAGE SECTION.
01 stack-pointer USAGE IS POINTER.
COPY stack.
01 node-info PICTURE X(10).
01 node-info PICTURE X(10).
PROCEDURE DIVISION USING stack-pointer node-info.
PROCEDURE DIVISION USING stack node-info.
SET ADDRESS OF stack TO stack-pointer
CALL "empty" USING
CALL "empty" USING
BY CONTENT head OF stack
BY REFERENCE stack
BY REFERENCE p
BY REFERENCE p
END-CALL
END-CALL
Line 717: Line 708:
LOCAL-STORAGE SECTION.
LOCAL-STORAGE SECTION.
LINKAGE SECTION.
LINKAGE SECTION.
01 stack-pointer USAGE IS POINTER.
COPY stack.
01 node-info PICTURE X(10).
01 node-info PICTURE X(10).
PROCEDURE DIVISION USING stack-pointer node-info.
PROCEDURE DIVISION USING stack node-info.
CALL "head" USING
CALL "head" USING
BY CONTENT stack-pointer
BY CONTENT stack
BY REFERENCE node-info
BY REFERENCE node-info
END-CALL
END-CALL
Line 805: Line 796:
LOCAL-STORAGE SECTION.
LOCAL-STORAGE SECTION.
COPY p.
COPY p.
COPY stack.
01 node-info PICTURE X(10) VALUE SPACES.
01 node-info PICTURE X(10) VALUE SPACES.
LINKAGE SECTION.
LINKAGE SECTION.
01 stack-pointer USAGE IS POINTER.
COPY stack.
PROCEDURE DIVISION USING stack-pointer.
PROCEDURE DIVISION USING stack.
SET ADDRESS OF stack TO stack-pointer
CALL "empty" USING
CALL "empty" USING
BY REFERENCE ADDRESS OF stack
BY REFERENCE stack
BY REFERENCE p
BY REFERENCE p
END-CALL
END-CALL
IF nil
IF nil
CALL "head" USING
CALL "head" USING
BY REFERENCE ADDRESS OF stack
BY CONTENT stack
BY REFERENCE node-info
BY REFERENCE node-info
END-CALL
END-CALL
DISPLAY node-info END-DISPLAY
DISPLAY node-info END-DISPLAY
CALL "peek" USING
CALL "peek" USING
BY REFERENCE ADDRESS OF stack
BY CONTENT stack
BY REFERENCE node-info
BY REFERENCE node-info
END-CALL
END-CALL
DISPLAY node-info END-DISPLAY
DISPLAY node-info END-DISPLAY
CALL "pop" USING
CALL "pop" USING
BY REFERENCE ADDRESS OF stack
BY REFERENCE stack
BY REFERENCE node-info
BY REFERENCE node-info
END-CALL
END-CALL
DISPLAY node-info END-DISPLAY
DISPLAY node-info END-DISPLAY
CALL "traverse-stack" USING
CALL "traverse-stack" USING
BY REFERENCE ADDRESS OF stack
BY REFERENCE stack
END-CALL
END-CALL
END-IF
END-IF