d .TITLE TMPALLDEA .IDENT /V01.02 (03-84)/ , .PSECT TMP_RWDATA,NOEXE,RD,WRT,LONG ; VARIABLES NECESSAIRES A L'OBTENTION DU DIRECTORY DE L'UTILISATEUR USERDESC: .LONG 12 ;DESCRIPTEUR DU NOM DE L'UTILISATEUR X .BLKL 1 LOGDIRDESC: .BLKL 1 ;DESCRIPTEUR DU DIRECTORY DE L'UTILISATEUR  .LONG LOGDIR+1 LOGDIR: .BLKB 14 LOGDIRLEN: .BLKW 1 ;LONGUEUR DU NOM DU DIRECTORY LDIREXT: .ASCII /.DIR/ ;EXTENSION DU DIRECTORY ; VARIABLES NECESSAIRES A LA GESTION DES QUOTAS UIC: .BLKL 1 xPERMQUOTA: .BLKL 1 OVERDRAFT: .BLKL 1 @USAGE: .BLKL 1 STATQUOTA: .BLKL 1 ;PRESENCE OU ABSENCE DE L'UIC DANS QUOTA.TMP SAVEQUOTA: .BLKL 1 ;SAUVEGARDE DES QUOTAS PERMANENTS l; VARIABLES NECESSAIRES A L'EFFACEMENT DES FICHIERS DELDIRDESC: .BLKL 1 4 .LONG DELDIR DELDIR: .BLKB 10 ; SAUVEGARDE DE L'ADRESSE DE L'ENTREE DANS LA TABLE ` TABADR: .BLKL 1 .PSECT TMP_CODE,EXE,RD,NOWRT,LONG ( TMP$ALLOCATE:: PUSHR #^M ; OBTENTION DU DIRECTORY DE L'UTILISATEUR MOVAL TMP$L_ALLBUF+12(R11),USERDESC+4 ;ADRESSE DU NOM T MOVL #9,LOGDIRDESC ;LONGUEUR MAXIMUM DU DIRECTORY PUSHAL LOGDIRLEN ;LONGUEUR DU DIRECTORY  PUSHAL LOGDIRDESC ;DESCRIPTEUR DU DIRECTORY PUSHAL USERDESC ;DESCRIPTEUR DU NOM CALLS #3,G^LOGDIRNAM H BLBS R0,5$ PUSHL R0  MOVL R0,R1 t BSBW TMP$SIGNAL1  MOVL (SP)+,R0 < CLRL R1  POPR ^M  RSB h5$: MOVB LOGDIRLEN,LOGDIR ;STOCKAGE DE LA LONGUEUR ; EXAMEN DE LA TABLE 0 MOVL #TMP$K_MAXPROC,R1 ;LONGUEUR BITMAP  MOVAL TMP$T_PROCMAP(R11),R2 ;ADRESSE BITMAP  MOVL #64,R3 ;LONGUEUR D'UNE ENTREE \ MOVL TMP$Q_PROCTABLE(R11),R4 ;ADRESSE DE LA PREMIERE ENTREE  CLRL R5 ;INITIALISATION $10$: BSBW TMP$GETBUFADR ;RECHERCHE D'UN ENTREE  TSTL R0  BEQL 20$ ;FIN DE LA TABLE P CMPL (R0),TMP$L_ALLBUF(R11) ;TEST DU PID  BNEQ 12$  CLRL TABADR ;PAS D'ENTREE SUPPLEMENTAIRE | BRW 100$ ;PROCESS EXISTANT ; TEST DU DIRECTORY D12$: CMPB 24(R0),LOGDIR  BNEQ 15$  PUSHR #^M p MOVZBL 24(R0),R1 ;LONGUEUR DU NOM DU DIRECTORY  CMPC3 R1,25(R0),LOGDIR+1 ;COMPARAISON DU NOM 8 POPR #^M  BNEQ 15$  MOVL #TMP$_ANOTHPROC,R0 d CLRL R1  POPR #^M , RSB 15$: INCL R5  BRW 10$ ;PASSAGE A L'ENTREE SUIVANTE X; RECHERCHE D'UNE ENTREE DISPONIBLE DANS LA TABLE 20$: BSBW TMP$ALLBUF  TSTL R0  BNEQ 25$ ;ENTREE DISPONIBLE  MOVL #TMP$_NOENTRY,R0 ;CODE D'ERREUR L CLRL R1  POPR #^M  RSB x; MISE A JOUR DE LA TABLE 25$: MOVL R0,R6 ;SAUVEGARDE DE L'ADRESSE DE L'ENTREE @ MOVL R0,TABADR ;STOCKAGE DE L'ADRESSE DE L'ENTREE  MOVC3 #24,TMP$L_ALLBUF(R11),(R6) ;PID,UIC,NOMB. DE BLOCS, USERNAME  MOVC3 #10,LOGDIR,24(R6) ;DIRECTORY l ; RECHERCHE DES QUOTAS DANS QUOTA.TMP MOVL 4(R6),UIC ;UIC DE L'UTILISATEUR 4! MOVAL UIC,R0 ;ADRESSE DES DONNEES ! BSBW TMP$FINDQUOTA ! MOVL R0,STATQUOTA ;SAUVEGARDE DU STATUS `"; RECHERCHE DES QUOTAS DANS QUOTA.SYS " PUSHAL USAGE (# PUSHAL OVERDRAFT # PUSHAL PERMQUOTA # PUSHAL 4(R6) ;UIC T$ MOVZWL TMP$W_CHAN1(R11),-(SP) ;CANAL D'ACCES AU DISQUE $ CALLS #5,G^EXA_QUOTA % CMPL R0,#SS$_NODISKQUOTA % BEQL 30$ ;PAS DE QUOTA SUR LE DISQUE % BLBS R0,50$ ;QUOTA EXISTANT H& PUSHL R0 & MOVL R0,R1 ' BSBW TMP$SIGNAL1 t' MOVL (SP)+,R0 ' BRW ERROR <(; SAUVEGARDE DES QUOTAS (30$: MOVL 4(R6),UIC ) CLRL PERMQUOTA h) CLRL OVERDRAFT ) MOVAL UIC,R0 ;ADRESSE DES DONNEES 0* BSBW TMP$STOREQUOTA ;STOCKAGE DES QUOTAS DANS LA SECTION GLOBALE * BLBS R0,35$ * PUSHL R0 \+ MOVL R0,R1 + BSBW TMP$SIGNAL1 $, MOVL (SP)+,R0 , BRW ERROR ,; ADDITION DES QUOTAS P-35$: PUSHAL USAGE - CLRL OVERDRAFT ;OVERDRAFT NUL . PUSHAL OVERDRAFT |. PUSHAL 8(R6) ;NOMBRE DE BLOCS DEMANDES . PUSHAL 4(R6) ;UIC D/ MOVZWL TMP$W_CHAN1(R11),-(SP) ;CANAL D'ACCES AU DISQUE / CALLS #5,G^ADD_QUOTA 0 BLBC R0,40$ p0 BRW 60$ 040$: PUSHL R0 81 MOVL R0,R1 1 BSBW TMP$SIGNAL1 2 MOVL (SP)+,R0 d2 BRW ERROR 2; CAS OU LES QUOTAS EXISTENT DEJA ,3; SAUVEGARDE EVENTUELLE DES QUOTAS 3; TEST D'OVERDRAWN 350$: CMPL USAGE,PERMQUOTA X4 BLEQ 52$ 4 MOVL #TMP$_OVERDRAFT,R0 5 BRW ERROR 552$: BLBS STATQUOTA,55$ 5 MOVL 4(R6),UIC L6 MOVAL UIC,R0 ;ADRESSE DES DONNEES 6 BSBW TMP$STOREQUOTA 7 BLBS R0,55$ x7 PUSHL R0 7 MOVL R0,R1 @8 BSBW TMP$SIGNAL1 8 MOVL (SP)+,R0 9 BRW ERROR l9; MODIFICATION DES QUOTAS 955$: PUSHAL USAGE 4: PUSHAL OVERDRAFT : ADDL2 8(R6),PERMQUOTA ;AUGMENTATION DES QUOTAS : PUSHAL PERMQUOTA ;NOMBRE DE BLOCS `; PUSHAL 4(R6) ;UIC ; MOVZWL TMP$W_CHAN1(R11),-(SP) ;CANAL D'ACCES AU DISQUE (< CALLS #5,G^MOD_QUOTA < BLBS R0,60$ < PUSHL R0 T= MOVL R0,R1 = BSBW TMP$SIGNAL1 > MOVL (SP)+,R0 > BRW ERROR >; CREATION DU DIRECTORY H?60$: MOVZWL TMP$W_CHAN1(R11),-(SP) ;CANAL D'ACCES AU DISQUE ? PUSHAL 4(R6) ;ADRESSE DE L'UIC @; ADDITION DE L'EXTENSION .DIR t@ MOVZBL LOGDIR,R0 ;LONGUEUR DU NOM DU DIRECTORY @ MOVAL LOGDIR+1,R1 ;ADRESSE DU PREMIER CARACTERE G MOVL TMP$L_ALLBUF+8(R11),R1 ;NOMBRE DE BLOCS |G RSB G; ENTREE DEJA EXISTANTE DH; MISE A JOUR DE LA TABLE H100$: MOVL R0,R6 ;SAUVEGARDE DE L'ADRESSE DE L'ENTREE I ADDL2 TMP$L_ALLBUF+8(R11),8(R6) pI; MODIFICATION DES QUOTAS I PUSHAL USAGE 8J PUSHAL OVERDRAFT J PUSHAL PERMQUOTA K PUSHAL TMP$L_ALLBUF+4(R11) ;UIC dK MOVZWL TMP$W_CHAN1(R11),-(SP) ;CANAL D'ACCES AU DISQUE K CALLS #5,G^EXA_QUOTA ,L BLBS R0,110$ L BRW 115$ L110$: ADDL2 TMP$L_ALLBUF+8(R11),PERMQUOTA XM PUSHAL USAGE M PUSHAL OVERDRAFT N PUSHAL PERMQUOTA N PUSHAL TMP$L_ALLBUF+4(R11) ;UIC N MOVZWL TMP$W_CHAN1(R11),-(SP) ;CANAL D'ACCES AU DISQUE LO CALLS #5,G^MOD_QUOTA O BLBS R0,120$ P115$: SUBL2 TMP$L_ALLBUF+8(R11),8(R6) ;RESTAURATION DE LA TABLE xP PUSHL R0 P MOVL R0,R1 @Q BSBW TMP$SIGNAL1 Q MOVL (SP)+,R0 R CLRL R1 lR POPR #^M R RSB 4S120$: MOVL #TMP$_SUCCESS,R0 ;CODE DE RETOUR S POPR #^M S RSB `TTMP$DEALLOCATE:: PUSHR #^M T; EFFACEMENT DES FICHIERS (U; CREATION DU DESCRIPTEUR DU DIRECTORY D'EFFACEMENT U MOVZBL TMP$L_DEALBUF+12(R11),DELDIRDESC ;LONGUEUR U MOVC3 DELDIRDESC,TMP$L_DEALBUF+13(R11),DELDIR ;NOM TV MOVAL DELDIRDESC,R0 ;ADRESSE DU DESCRIPTEUR V BSBW TMP$DELFILES ;EFFACEMENT DES FICHIERS W; RESTAURATION DES QUOTAS W; RECHERCHE DE L'UIC DANS LA SECTION GLOBALE W $SETAST_S #0 ;BLOCAGE DES ASTS HX MOVL TMP$L_DEALBUF+4(R11),UIC X MOVAL UIC,R0 ;ADRESSE DES DONNEES Y BSBW TMP$FINDQUOTA tY BLBS R0,100$ Y BRW 160$ ;QUOTA NON TROUVE (n RSB n; SEQUENCE D'ERREUR EN CAS DE PROBLEME DANS L'ALLOCATION nERROR: PUSHL R0 ;SAUVEGARDE DU CODE D'ERREUR To; TEST DE L'ENTREE DANS LA TABLE o TSTL TABADR p BEQL 220$ ;PAS DE NOUVELLE ENTREE p; LIBERATION DU ENTREE DE LA TABLE p MOVAL TMP$T_PROCMAP(R11),R2 ;ADRESSE BITMAP Hq MOVL TMP$Q_PROCTABLE(R11),R4 ;ADRESSE DE LA TABLE q SUBL3 R4,R6,R5 r ASHL #-6,R5,R5 ;BIT A ANNULER tr BSBW TMP$RELBUF ;LIBERATION DE L'ENTREE r220$: MOVL (SP)+,R0 ;RESTAURATION DU CODE D'ERREUR t RSB ht .END