*DECK XSAPPDL USETEXT NIPDEF USETEXT PARAMS USETEXT SWAPIN PRGM XSAPPDL; # DELINK (NO ACB) SWAPIN ENTRY # STARTIMS; # *1DC XSAPPDL * * 1. PROC NAME AUTHOR DATE * XSAPPDL E. GEE 77/08/10 * * 2. FUNCTIONAL DESCRIPTION. * DELINK ENTRY FROM (NO ACB) SWAPIN CHAIN * * 3. METHOD USED. * IF ONLY ONE ENTRY IN SWAPIN CHAIN, CLEAR PTRS IN SWAPIN * ELSE UPDATE BACKWARD POINTER IN NEXT ENTRY AND * UPDATE FORWARD POINTER IN PREVIOUS ENTRY * * 4. ENTRY PARAMETERS. * PARAMS1 ADDRESS OF ENTRY TO DELINK * * 5. EXIT PARAMETERS. * NONE * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * NIPDEF OSSIZE PARAMS SWAPIN * * 7. ROUTINES AND OVERLAYS CALLED. * XTRACE RECORD PROCEDURE CALLS * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION. * * THIS PROGRAM IS A SECONDARY OVERLAY LOADED BY SUBROUTINE * OVLCALL. WHEN EXECUTION HAS COMPLETED, A JUMP IS MADE TO * LOCATION RJMAIN TO RETURN TO THE CALLING PROGRAM. * * W A R N I N G - THIS PROGRAM CANNOT EXCEED THE SECONDARY *CALL OSSIZE * * THIS OVERLAY IS CALLED BY XSAPPRC AND HAPFAIL. * # STOPIMS; # EXTERNAL VARIABLES # XREF BEGIN PROC XTRACE; # RECORD PROCEDURE CALLS # LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL # END # INTERNAL VARIABLES # ITEM NEXT; # ADDR OF NEXT ENTRY IN SWAPIN CHAIN # ITEM PREV; # ADDR OF PREVIOUS ENTRY IN SWAPIN CHAIN # ITEM SENTRY; # ADDR OF SWAPIN ENTRY TO DELETE # #**********************************************************************# BEGIN CONTROL IFEQ DEBUG,1; XTRACE("APPDL") ; CONTROL FI; SENTRY = PARAMS1; # ADDR OF SWAPIN ENTRY TO DELETE # P = SENTRY; NEXT = SWPINFP[0]; # ADDR OF NEXT ENTRY IN SWAPIN CHAIN # PREV = SWPINBP[0]; # ADDR OF PREVIOUS ENTRY IN SWAPIN CHAIN # # CHECK IF ONLY ONE ENTRY IN SWAPIN CHAIN # IF SWAPINFP EQ SWAPINBP THEN # ONLY ONE ENTRY IN CHAIN # BEGIN SWAPINFP = 0; # ZERO SWAPIN CHAIN FORWARD PTR # SWAPINBP = 0; # ZERO SWAPIN CHAIN BACKWARD PTR # END ELSE # MORE THAN ONE ENTRY IN CHAIN SO DELINK # # UPDATE BACKWARD PTR IN NEXT ENTRY # BEGIN IF NEXT EQ LOC(SWAPINFP) THEN # ENTRY TO DELETE IS LAST ONE IN CHAIN # SWAPINBP = PREV; # UPDATE SWAPIN BACKWARD PTR # ELSE BEGIN P = NEXT; SWPINBP[0] = PREV; # UPDATE BACKWARD PTR OF NEXT ENTRY # END # UPDATE FORWARD POINTER IN PREVIOUS ENTRY # IF PREV EQ LOC(SWAPINBP) THEN # ENTRY TO DELETE IS FIRST ONE IN CHAIN # SWAPINFP = NEXT; # UPDATE SWAPIN FORWARD PTR # ELSE BEGIN P = PREV; SWPINFP[0] = NEXT; # UPDATE FORWARD PTR OF PREVIOUS ENTRY # END END GOTO RJMAIN; # RETURN TO CALLING PROGRAM # END TERM