* Singly-linked list/Element definition 07/02/2017 LISTSINA CSECT USING LISTSINA,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability * Allocate A GETMAIN RU,LV=12 get storage USING NODE,R11 make storage addressable LR R11,R1 " MVC VAL,=CL8'A' val='A' MVC NEXT,=A(0) DROP R11 base no longer needed ST R11,A A=@A * Init LIST ST R11,LIST init LIST with A * Allocate C GETMAIN RU,LV=12 get storage USING NODE,R11 make storage addressable LR R11,R1 " MVC VAL,=CL8'C' val='C' MVC NEXT,=A(0) DROP R11 base no longer needed ST R11,C C=@C * Insert C After A MVC P1,A MVC P2,C LA R1,PARML BAL R14,INSERTAF * Allocate B GETMAIN RU,LV=12 get storage USING NODE,R11 make storage addressable LR R11,R1 " MVC VAL,=CL8'B' val='B' MVC NEXT,=A(0) DROP R11 base no longer needed ST R11,B B=@B * Insert B After A MVC P1,A MVC P2,B LA R1,PARML BAL R14,INSERTAF * List all L R11,LIST USING NODE,R11 address node LOOP C R11,=A(0) BE ENDLIST XPRNT VAL,8 L R11,NEXT B LOOP ENDLIST DROP R11 FREEMAIN A=A,LV=12 free A FREEMAIN A=B,LV=12 free B FREEMAIN A=C,LV=12 free C RETURN L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit LIST DS A list head A DS A B DS A C DS A PARML DS 0A P1 DS A P2 DS A INSERTAF CNOP 0,4 L R2,0(R1) @A L R3,4(R1) @B USING NODE,R2 ->A L R4,NEXT @C DROP R2 USING NODE,R3 ->B ST R4,NEXT B.NEXT=@C DROP R3 USING NODE,R2 ->A ST R3,NEXT A.NEXT=@B DROP R2 BR R14 return LTORG all literals NODE DSECT node (size=12) VAL DS CL8 NEXT DS A YREGS END LISTSINA