d .TITLE TMPMAIN .IDENT /V01.01 (01-84)/ , .PSECT TMP_RWDATA,NOEXE,RD,WRT,LONG TMP$G_DATA:: .BLKB TMP_K_SIZE  .PSECT TMP_CODE,EXE,RD,NOWRT,LONG XTMP$MAIN:: $HIBER_S ; EXAMEN DE LA QUEUE D'ALLOCATION 2$: CMPL TMP$Q_ALLQUEUE(R11),@TMP$Q_ALLQUEUE(R11)  BNEQ 5$ ;QUEUE NON VIDE  BRW 100$ ;QUEUE VIDE L; QUEUE NON VIDE 5$: $SETAST_S #0 ;BLOCAGE DES ASTS  MOVL TMP$Q_ALLQUEUE(R11),R10 ;ADRESSE DU BUFFER x CMPL TMP$L_FREEBLOCKS(R11),16(R10)  BLSS 50$ ;PLACE INSUFFISANTE @ SUBL2 16(R10),TMP$L_FREEBLOCKS(R11) ;RESERVATION DE LA PLACE ; REMPLISSAGE DU BUFFER  MOVC3 #24,8(R10),TMP$L_ALLBUF(R11) l MOVW 32(R10),TMP$W_MBUNIT_USER(R11) ; SUPPRESSION DE L'ENTREE 4 REMQUE @TMP$Q_ALLQUEUE(R11),R10 ; DEALLOCATION DU BUFFER  PUSHR #^M ` MOVAL TMP$T_BITMAP(R11),R2 MOVL TMP$Q_BUFADR(R11),R4 ( SUBL3 R4,R10,R5 ASHL #-6,R5,R5 ;BIT A ANNULER BSBW TMP$RELBUF T POPR #^M BSBW TMP$ALLOCATE ;ALLOCATION  BLBS R0,20$ ;ALLOCATION CORRECTE ; ALLOCATION IMPOSSIBLE ; LIBERATION DE LA PLACE RESERVEE H ADDL2 TMP$L_ALLBUF+8(R11),TMP$L_FREEBLOCKS(R11) 20$: BSBW TMP$SEND ;ENVOI DU MESSAGE  $SETAST_S #1 ;LIBERATION DES ASTS t BRW 2$ ;ENTREE SUIVANTE ; PLACE NON DISPONIBLE <; TEST DE LA QUEUE DE DESALLOCATION 50$: CMPL TMP$Q_DEALQUEUE(R11),@TMP$Q_DEALQUEUE(R11)  BNEQ 60$ ;QUEUE NON VIDE h; REJET DE LA DEMANDE  REMQUE @TMP$Q_ALLQUEUE(R11),R10 ;SUPPRESSION DE L'ENTREE 0 MOVW 32(R10),TMP$W_MBUNIT_USER(R11)  PUSHR #^M  MOVAL TMP$T_BITMAP(R11),R2 \ MOVL TMP$Q_BUFADR(R11),R4  SUBL3 R4,R10,R5 $ ASHL #-6,R5,R5 ;BIT A ANNULER  BSBW TMP$RELBUF  POPR #^M P MOVL #TMP$_INSFSPACE,R0  CLRL R1  BRW 20$ |; ESSAI DE DESALLOCATION ; REMPLISSAGE DU BUFFER D60$: MOVL TMP$Q_DEALQUEUE(R11),R10 ;ADRESSE DU BUFFER  MOVC3 #22,8(R10),TMP$L_DEALBUF  REMQUE @TMP$Q_DEALQUEUE(R11),R10 p PUSHR #^M  MOVAL TMP$T_BITMAP(R11),R2 8 MOVL TMP$Q_BUFADR(R11),R4  SUBL3 R4,R10,R5  ASHL #-6,R5,R5 ;BIT A ANNULER d BSBW TMP$RELBUF  POPR #^M , $SETAST_S #1 ;LIBERATION DES ASTS  BSBW TMP$DEALLOCATE ; NOUVELLE TENTATIVE X BRW 5$ ; QUEUE DE DESALLOCATION 100$: CMPL TMP$Q_DEALQUEUE(R11),@TMP$Q_DEALQUEUE(R11)  BNEQ 110$ ;QUEUE NON VIDE  BRW TMP$MAIN ;QUEUE VIDE L; REMPLISSAGE DU BUFFER 110$: $SETAST_S #0 ;BLOCAGE DES ASTS  MOVL TMP$Q_DEALQUEUE(R11),R10 ;ADRESSE DU BUFFER x MOVC3 #22,8(R10),TMP$L_DEALBUF(R11)  REMQUE @TMP$Q_DEALQUEUE(R11),R10 @ PUSHR #^M  MOVAL TMP$T_BITMAP(R11),R2  MOVL TMP$Q_BUFADR(R11),R4 l SUBL3 R4,R10,R5 ASHL #-6,R5,R5 ;BIT A ANNULER 4! BSBW TMP$RELBUF ! POPR #^M ! $SETAST_S #1 ;LIBERATION DES ASTS `" BSBW TMP$DEALLOCATE " BRW 2$ (# .END