ASMB,R,L,C,Q ** SCB BUILD MODULE ** HED SCB BUILD MODULE * NAME: MKSCB * SOURCE: 92067-18444 * 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 MKSCB,7 92067-16261 REV.1903 780518 EXT $LIBR,$LIBX,$SHED,$SMST,.ENTR,$SALC,$SMVE,$SMLK * ENT MKSCB * SKP * IBUFA NOP IBUFL NOP IADDR NOP IERR OCT -1 * MKSCB NOP JSB .ENTR DEF IBUFA FETCH PARMS * LDA IERR IF NOT ENOUGH SSA PARMS JMP MKSCB,I DO A NOP * LDA IBUFL,I FETCH SCB LENGTH ADA .3 AND ADD LINKAGE OVERHEAD STA RQLEN SAVE FOR $SALC CALL * LDA IBUFA,I FETCH REQUEST IDENT CMA,INA SET IT NEGATIVE STA NEGID AND SAVE FOR SCAN * 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 ENDLS GO ADD NEW SCB * 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 ADA NEGID AND TEST AGAINST NEG REQUEST IDENT * SZA,RSS IF EQUAL JMP ERR3 EXIT ERROR=-3 * SSA,RSS IF NEW > REQUEST ID JMP GLINK THIS MUST BE THE PLACE * 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 SKP * * * GET MEMORY-- THEN SET ADDRESS OF BLOCK RETURNED INTO LOCATION * DEFINED BY OLDLK. MOVE CONTENTS OF CPNTR (POINTER TO NEXT SCB * OR ZERO) ALONG WITH BUFFER SIZE AND EXTENSION ADDRESS OF ZERO * TO THE FIRST 3 WORDS OF NEW SCB. THEN MOVE USER DEFINED SCB INTO * NEW SCB, STARTING WITH THE SESSION IDENTIFIER (WORD 4). * ENDLS STA CPNTR END OF LIST. FORCE LINK TO ZERO GLINK SJS $SALC RQLEN NOP REQUEST LENGTH+3 LDA N1 NO MEM EVER RETURN JMP NOMEM NO MEM NOW RTN ($SALC RTNS A=0) STA RQBLK GOT IT. A=ADDR, B=SIZE STB REQLN SET LENGTH INTO SCB HEADER * LDB $SMLK FETCH NEGATIVE COUNT TO SST LEN WD CMB,INB SET IT POSITIVE ADA B BUMP SCB ADDR TO SST LEN WD STA IADDR,I RETURN IT TO CALLER * CLA THEN STA REQEX SET EXTENSION ADDR=0 STA IERR,I AND ERROR CODE=0 * JSB $SMVE DEF SMRT2 DEF .2 WRITE DEF RQBLK TO THE NEW BLOCK DEF NOP WITH A ZERO OFFSET DEF CPNTR FROM TEMP BUFFER(LINK,SIZE AND EXT SIZE SET) DEF .3 THREE WORDS SMRT2 EQU * * * MOVE CALLER'S DATA OUT * JSB $SMVE DEF SMRT3 DEF .2 WRITE DEF RQBLK TO THE NEW BLOCK DEF $SMST OFFSET TO IDENT WORD DEF IBUFA,I FROM USER'S BUFFER DEF IBUFL,I USER'S LENGTH SMRT3 EQU * * * UPDATE OLD LINK * JSB $SMVE DEF SMRT4 DEF .2 WRITE DEF OLDLK TO OLD BLOCK OR $SHED DEF NOP ZERO OFFSET DEF RQBLK ADDR OF NEW BLOCK DEF .1 WRITE ONE WORD SMRT4 EQU * * CCA PRESET ERROR PARM STA IERR FOR NEXT ENTRY * JSB $LIBX DEF MKSCB * * ERR3 LDA N3 DUPLICATE IDENTIFIER ERROR RSS NOMEM ADA N1 NO MEM EVER=-2, NO MEM NOW=-1 STA IERR,I JMP SMRT4 GET OUT SKP DSHED DEF $SHED+0 RQBLK NOP OLDLK NOP NEGID NOP * * CAUTION! THE FOLLOWING BUFFER MUST BE STRUCTURED AS FOLLOWS: * * WORD 1 CPNTR * WORD 2 NXTLK&REQLN * WORD 3 REQEX * WORD 4 * WORD 5 NXTID * CPNTR BSS 5 NXTLK EQU CPNTR+1 REQLN EQU CPNTR+1 REQEX EQU CPNTR+2 NXTID EQU NXTLK+3 * **************************************************** A EQU 0 B EQU 1 .1 OCT 1 .2 OCT 2 .3 OCT 3 .4 OCT 4 N1 OCT -1 N3 OCT -3 NOP NOP END