d .TITLE TMPAST .IDENT /V01.02 (03-84)/ ,; GESTION DES ASTS  $JPIDEF  .PSECT TMP_RWDATA,NOEXE,RD,WRT,LONG X; VARIABLES NECESSAIRES POUR UTILISER GETJPI TMPLST1: .LONG 0 ;LISTE PERMETTANT DE RECHERCHER UN PROCESS TMPLST2: .WORD 12 ;LISTE PERMETTANT DE RECHERCHER NOM ET UIC  .WORD JPI$_USERNAME USERNAME: .BLKL 1 L .LONG 0  .WORD 4  .WORD JPI$_UIC xUIC: .BLKL 1  .LONG 0 @ .LONG 0 ; NUMERO SEQUENTIEL DU DIRECTORY A EFFACER NUMDIR: .LONG 0 l; VARIABLES NECESSAIRES POUR CONVERTIR NUMDIR EN CHAINE DE CARACTERES PIDDIRDESC: .LONG 8 ;DESCRIPTEUR DE NUMDIR EN CARACTERES 4 .LONG PIDDIR PIDDIR: .BLKB 8 LOGDIRDESC: .BLKL 1 ;DESCRIPTEUR DU DIRECTORY D'ENTREE ` .BLKL 1 .PSECT TMP_CODE,EXE,RD,NOWRT,LONG ( .ENTRY FILETMP_AST,^M MOVAL W^TMP$G_DATA,R11 ;ADRESSE DE LA ZONE DE DONNEES TSTL 4(AP) T BEQL 50$ ;CONTROLE PERIODIQUE DES PROCESSES CMPL #1,4(AP)  BNEQ 40$ BRW 100$ ;MESSAGE A LIRE 40$: MOVL #SS$_UNSOLICIT,R1 ;INTERRUPTION INCONNUE H BSBW TMP$SIGNAL1 RET ; CONTROLE PERIODIQUE DES PROCESSES t; INITIALISATION 50$: MOVL #TMP$K_MAXPROC,R1 ;LONGUEUR BITMAP < MOVAL TMP$T_PROCMAP(R11),R2 ;ADRESSE BITMAP  MOVL #64,R3 ;LONGUEUR D'UN BUFFER  MOVL TMP$Q_PROCTABLE(R11),R4 ;ADRESSE DU PREMIER BUFFER h CLRL R5 ;POSITION DE DEPART 55$: BSBW TMP$GETBUFADR ;OBTENTION D'UN BUFFER 0 TSTL R0  BNEQ 56$  BRW 90$ ;PLUS DE BUFFER \56$: MOVL R0,R6 ;SAUVEGARDE DE L'ADRESSE DU BUFFER  PUSHR #^M ;SAUVEGARDE DES REGISTRES $ $GETJPI_S PIDADR=(R0),ITMLST=TMPLST1  BLBC R0,57$  BRW 80$ ;LE PROCESS EXISTE P57$: CMPL R0,#SS$_NONEXPR  BEQL 60$ ;PROCESS INEXISTANT  MOVL R0,R1 ;AUTRE ERREUR | BSBW TMP$SIGNAL1  BRW 80$ D; CONVERSION DE NUMDIR EN CHAINE DE CARACTERES 60$: CLRB 63(R6) ;REMISE A 0 DE L'OCTET DE VALIDITE  MOVAL PIDDIRDESC,R0 ;DESCRIPTEUR DE LA CHAINE DE CARACTERES p INCL NUMDIR ;INCREMENTATION DU COMPTEUR  MOVL NUMDIR,R1 ;VALEUR DU COMPTEUR 8 BSBW TMP$CVTPID ;CONVERSION  MOVZBL 24(R6),LOGDIRDESC ;LONGUEUR DE L'ANCIEN NOM  MOVAL 25(R6),LOGDIRDESC+4 ;ADRESSE DE L'ANCIEN NOM d MOVAL LOGDIRDESC,R0 ;ANCIEN NOM  MOVAL PIDDIRDESC,R1 ;NOUVEAU NOM , BSBW TMP$RENAME ;CHANGEMENT DE NOM  MOVB #8,24(R6) ;NOUVELLE LONGUEUR  MOVQ PIDDIR,25(R6) ;NOUVEAU NOM X MOVL #TMP$K_MAXBUF,R1 ;LONGUEUR BITMAP  MOVAL TMP$T_BITMAP(R11),R2 ;ADRESSE BITMAP  MOVL #64,R3 ;LONGUEUR BUFFER  MOVL TMP$Q_BUFADR(R11),R4 ;ADRESSE DU PREMIER BUFFER  BSBW TMP$ALLBUF ;DEMANDE D'UN BUFFER L TSTL R0  BEQL 85$ ;PAS DE BUFFER DISPONIBLE  MOVL R0,R7 ;SAUVEGARDE DE L'ADRESSE DU BUFFER x MOVC3 #12,(R6),8(R7) ;REMPLISSAGE DU BUFFER  MOVC3 #10,24(R6),20(R7) @ INSQUE (R7),@TMP$Q_DEALQUEUE+4(R11) ;INSERTION DANS LA QUEUE ; LIBERATION DE L'ENTREE DANS LA TABLE  MOVAL TMP$T_PROCMAP(R11),R2 ;ADRESSE BITMAP l MOVL TMP$Q_PROCTABLE(R11),R4 ;ADRESSE DE LA TABLE SUBL3 R4,R6,R5 4! ASHL #-6,R5,R5 ;BIT A ANNULER ! BSBW TMP$RELBUF ;LIBERATION DE L'ENTREE !80$: POPR #^M ;RESTAURATION DES REGISTRES `" INCL R5 " BRW 55$ ;BUFFER SUIVANT (#85$: POPR #^M ;REMISE A NIVEAU DE LA PILE #; REDEFINITION DES AST #90$: BSBW TMP$SETTIMAST T$ $WAKE_S $ RET %; MESSAGE A LIRE %; LECTURE DU MESSAGE %100$: $QIOW_S CHAN=TMP$W_MBCHAN(R11),- H& FUNC=#IO$_READVBLK!IO$M_NOW,- & IOSB=TMP$Q_MIOSB(R11),- ' P1=TMP$T_MBBUF(R11),- t' P2=#TMP$K_MBUFSIZ ' BLBS R0,110$ <( MOVL R0,R1 ( BSBW TMP$SIGNAL1 ) BRW 111$ h)110$: BLBS TMP$Q_MIOSB(R11),112$ ;MESSAGE PRESENT )111$: BSBW TMP$SETMBAST ;REDEFINITION DE L'AST 0* $WAKE_S * RET *; TRAITEMENT DU MESSAGE \+; SAUVEGARDE DU NUMERO DE LA MAILBOX +112$: MOVW TMP$T_MBBUF+9(R11),TMP$W_MBUNIT_USER(R11) $, CMPB #1,TMP$T_MBBUF(R11) , BEQL 120$ ;DEMANDE D'ALLOCATION , CMPB #2,TMP$T_MBBUF(R11) P- BNEQ 115$ - BRW 160$ ;DEMANDE DE DESALLOCATION .115$: CMPB #3,TMP$T_MBBUF(R11) |. BNEQ 116$ . BRW 200$ ;DEMANDE DU NOMBRE DE BLOCS DISPONIBLES D/116$: MOVL #TMP$_INVMSG,R0 ;MESSAGE NON VALIDE / CLRL R1 0 BRW 300$ ;MESSAGE D'ERREUR p0; DEMANDE D'ALLOCATION 0; VERIFICATION DE LA PLACE DISPONIBLE 81120$: TSTL TMP$T_MBBUF+5(R11) ;TEST DU NOMBRE DE BLOCS 1 BGEQ 121$ ;NOMBRE POSITIF 2 MOVL #TMP$_BADVALUE,R0 ;NOMBRE NEGATIF d2 CLRL R1 2 BRW 300$ ;MESSAGE D'ERREUR ,3121$: CMPL TMP$L_FREEBLOCKS(R11),TMP$T_MBBUF+5(R11) 3 BLSS 127$ ;PLACE NON DISPONIBLE 3; REMPLISSAGE DU BUFFER X4 MOVL TMP$T_MBBUF+1(R11),TMP$L_ALLBUF(R11) ;PID 4 MOVL TMP$T_MBBUF+5(R11),TMP$L_ALLBUF+8(R11) ;NOMBRE DE BLOCS 5 MOVAL TMP$L_ALLBUF+4(R11),UIC 5 MOVAL TMP$L_ALLBUF+12(R11),USERNAME 5 $GETJPI_S EFN=#2,PIDADR=TMP$L_ALLBUF(R11),ITMLST=TMPLST2 L6 BLBS R0,125$ ;RESULTAT CORRECT 6 BRW 400$ ;MESSAGE SUIVANT 7125$: $WAITFR_S EFN=#2 x7 BSBW TMP$ALLOCATE 7 BLBS R0,126$ ;ALLOCATION CORRECTE @8 BRW 300$ ;ERREUR DANS L'ALLOCATION 8126$: SUBL2 TMP$T_MBBUF+5(R11),TMP$L_FREEBLOCKS(R11) 9 BRW 300$ ;ENVOI DU MESSAGE l9; LA PLACE DEMANDEE N'EST PAS DISPONIBLE 9; LIBERATION DE L'ENTREE DANS LA TABLE 4:; ALLOCATION D'UN BUFFER :127$: MOVL #TMP$K_MAXBUF,R1 ;LONGUEUR BITMAP : MOVAL TMP$T_BITMAP(R11),R2 ;ADRESSE BITMAP `; MOVL #64,R3 ;LONGUEUR D'UN BUFFER ; MOVL TMP$Q_BUFADR(R11),R4 ;ADRESSE PREMIER BUFFER (< BSBW TMP$ALLBUF ;ALLOCATION D'UN BUFFER < TSTL R0 < BNEQ 130$ ;BUFFER DISPONIBLE T= MOVL #TMP$_NOFREEBUF,R0 ;PAS DE BUFFER DISPONIBLE = CLRL R1 > BRW 300$ ;MESSAGE D'ERREUR >130$: MOVL R0,R7 ;SAUVEGARDE DE L'ADRESSE DU BUFFER > MOVL TMP$T_MBBUF+1(R11),8(R7) ;PID H? MOVL TMP$T_MBBUF+5(R11),16(R7) ;NOMBRE DE BLOCS ? MOVW TMP$T_MBBUF+9(R11),32(R7) ;NUMERO MAILBOX @ MOVAL 12(R7),UIC t@ MOVAL 20(R7),USERNAME @ $GETJPI_S EFN=#2,PIDADR=8(R7),ITMLST=TMPLST2