ASMB,R,L,C,Q   ** SCB RELEASE MODULE ** 
      HED SCB RELEASE MODULE
*     NAME:   RLSCB 
*     SOURCE: 92067-18445 
*     RELOC:  PART OF 92067-16261 
*     PGMR:   G.L.M.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
      NAM RLSCB,7 92067-16261 REV.1903 780518 
      EXT $LIBR,$LIBX,$SHED,.ENTR,$SRTN,$SMVE 
* 
      ENT RLSCB 
* 
      SKP 
* 
SESID NOP 
IERR  NOP 
* 
RLSCB NOP 
      JSB .ENTR 
      DEF SESID     FETCH PARMS 
* 
      LDA DSHED     FETCH ADDRESS OF SCB LIST 
      STA OLDLK      AND SET IT AS OLD LINK ADDR
* 
      JSB $LIBR     GO PRIV TO AVOID CONTENTION 
      NOP 
* 
      XLA $SHED     FETCH FIRST SCB ADDR
      SZA,RSS       IF ZERO (LIST EMPTY), 
      JMP ERR1            GIVE SCB NOT FOUND ERROR
* 
      STA CPNTR     SET CURRENT SCB ADDR
* 
NXLNK JSB $SMVE 
      DEF SMRTN 
      DEF .1        READ
      DEF CPNTR      AT THIS LOCATION 
      DEF NOP         WITH THIS OFFSET
      DEF NXTLK        PUT IT HERE
      DEF .4            MOVE FOUR WORDS 
SMRTN EQU * 
* 
      LDA NXTID     FETCH NXT ID
      CPA SESID,I             AND TEST AGAINST NEG REQUEST IDENT
      JMP FOUND 
* 
      LDA CPNTR     FETCH ADDR OF CURRENT SCB 
      STA OLDLK     SAVE AS PREVIOUS SCB FOR NEXT PASS
      LDA NXTLK     SET THE LINK ADDR AS ADDR OF
      STA CPNTR          NEW "CURRENT" SCB
      SZA           UNLESS END OF LIST
      JMP NXLNK           GO FETCH 1ST 4 WORDS OF NEXT SCB
* 
ERR1  CCA 
      JMP EXIT      SET ERROR CODE AND EXIT 
      SKP 
* 
*    FOUND SCB -- SET CONTENTS OF CPNTR (LINK WORD OF SCB TO BE RELEASED) 
*    INTO PREVIOUS LINK OR $SHED (DEFINED BY OLDLK). CALL SESSION MEMORY
*    MEMORY MANAGER TO RETURN MEMORY ALLOCATED TO SCB. IF EXTENSION 
*    POINTER NOT ZERO, FETCH CONTENTS OF 1ST 2 WORDS OF EXTENSION (LINK 
*    AND LENGTH). CALL SESSION MEMORY MANAGER TO RELEASE MEMORY ALLOCATED 
*    TO EXTENSION. REPETE FOR ALL EXTENSIONS. 
* 
* 
*  UPDATE PREVIOUS LINK 
* 
FOUND JSB $SMVE 
      DEF SMRT2 
      DEF .2        WRITE 
      DEF OLDLK     TO OLD LINK 
      DEF NOP       WITH A ZERO OFFSET
      DEF NXTLK     THE LINK WORD OF SCB BEING RELEASED 
      DEF .1        ONE WORD
SMRT2 EQU * 
* 
*  RETURN MEMORY ALLOCATED TO SCB 
* 
      LDA CPNTR     FETCH ADDR & LENGTH 
      LDB CURLN 
RTN   DST SCBRT     SAVE FOR RELEASE CALL 
* 
      SJS $SRTN 
SCBRT BSS 2 
* 
* 
*   CHECK FOR EXTENSION 
* 
      LDA SCBEX     FETCH EXTENSION POINTER 
      SZA,RSS       IF ZERO,
      JMP EXIT        ALL DONE. 
* 
      JSB $SMVE 
      DEF SMRT3 
      DEF .1         READ 
      DEF SCBEX     FROM LOCATION ADDRESSED BY SCB EXTENSION WORD 
      DEF NOP       (ZERO OFFSET) 
      DEF EXPNT     TO THE EXTENSION POINTER BUFFER 
      DEF .2        READ 2 WORDS
SMRT3 EQU * 
* 
      LDA SCBEX     FETCH SCB EXT ADDR
      LDB EXPNT     FETCH NEXT LINK 
      STB SCBEX     AND SAVE FOR NEXT PASS
      LDB EXLEN     FETCH SCB EXT LENGTH
      JMP RTN       GO RELEASE EXT AND CHECK FOR MORE 
* 
EXIT  STA IERR,I    SET THE ERROR CODE
      CLB            RESET ERROR PARM 
      STB IERR       FOR NEXT ENTRY 
      JSB $LIBX      EXIT 
      DEF RLSCB 
      SKP 
DSHED DEF $SHED+0 
OLDLK NOP 
* 
*   CAUTION! THE FOLLOWING BUFFER MUST BE STRUCTURED AS FOLLOWS:
* 
*  WORD 1  CPNTR&EXPNT
*  WORD 2  NXTLK&EXLEN
*  WORD 3  CURLN
*  WORD 4  SCBEX
*  WORD 5  NXTID
* 
CPNTR BSS 5 
EXPNT EQU CPNTR 
NXTLK EQU CPNTR+1 
EXLEN EQU CPNTR+1 
CURLN EQU CPNTR+2 
SCBEX EQU CPNTR+3 
NXTID EQU NXTLK+3 
* 
****************************************************
.1    OCT 1 
.2    OCT 2 
.4    OCT 4 
NOP   NOP 
      END 
