d .TITLE TMPINIT .IDENT /V01.01 (01-84)/ , $RMSDEF  $SECDEF  .PSECT TMP_RWDATA,NOEXE,RD,WRT,LONG XTMP$T_QUOTANAME: .BLKB 255  .PSECT TMP_CODE,EXE,RD,NOWRT,LONG ; DESCRIPTEUR DU NOM LOGIQUE ; DESCRIPTEUR DU NOM DE FICHIER QUOTA.TMP TMP$T_QUOTA: .LONG 40$-30$ L .LONG 30$ 30$: .ASCII /QUOTA.TMP/ 40$: x; DESCRIPTEUR DES NOMS DE DIRECTORY TMP$T_ALLDIR: .LONG 60$-50$ @ .LONG 50$ 50$: .ASCII /*/ 60$: l; DESCRIPTEUR DE LA SECTION GLOBALE ASSOCIEE AUX QUOTAS TMP$T_GBL: .LONG 80$-70$ 4 .LONG 70$ 70$: .ASCII /TMP$GLOBAL/ 80$: ` ; SECTION GLOBALE ASSOCIEE A LA TABLE DES PROCESSES TMP$T_GBLPROC: .LONG 100$-90$ ( .LONG 90$ 90$: .ASCII /TMP$PROCESS/ 100$: T TMP$Q_GBLINADR: .LONG ^X200 .LONG ^X200  ; CHAINES UTILISEES DANS LA CONSTITUTION DU NOM DU DIRECTORY DIR00: .ASCII /[0,0]/ DIREX: .ASCII /.DIR/ H ; NOM LOGIQUE DE LA MAILBOX MBLOGNAM: .ASCID /FILETMPMB/ TMPSTART: .WORD 0 ;POINT D'ENTREE DU PROGRAMME t MOVAL W^TMP$HANDLER,(FP) ;HANDLER  $SETAST_S #0 ;BLOCAGE DES AST < MOVAL W^TMP$G_DATA,R11 ;POINTEUR DE LA TABLE DES DONNEES ; RECHERCHE DU NOM PHYSIQUE  MOVL #255,TMP$Q_DIRDESC(R11) h MOVAL TMP$T_DIRNAME(R11),TMP$Q_DIRDESC+4(R11)  $TRNLOG_S LOGNAM=TMP$T_NOMLOG,- 0 RSLLEN=TMP$W_DIRLENGTH(R11),-  RSLBUF=TMP$Q_DIRDESC(R11)  CMPL R0,#SS$_NORMAL \ BEQL 10$  MOVL R0,R1 $ BSBW TMP$SIGNAL1 ;MESSAGE D'ERREUR  BRW ERROR ;SEQUENCE D'ERREUR ; RECHERCHE DU NOM DU DISQUE P10$: TSTW TMP$W_DIRLENGTH(R11) ;TEST DE LA LONGUEUR  BNEQ 20$  MOVL #SS$_IVDEVNAM,R1 ;LONGUEUR NULLE | BSBW TMP$SIGNAL1  BRW ERROR D20$: LOCC #^A/:/,TMP$W_DIRLENGTH(R11),TMP$T_DIRNAME(R11)  BNEQ 30$  MOVL #SS$_IVDEVNAM,R1 ;NOM INCORRECT p BSBW TMP$SIGNAL1  BRW ERROR 8; DESCRIPTEUR DU NOM DU DISQUE 30$: MOVAL TMP$T_DIRNAME(R11),R2  SUBL3 R2,R1,TMP$Q_DISKNAME(R11) d INCL TMP$Q_DISKNAME(R11) ;LONGUEUR DU NOM  MOVL TMP$Q_DIRDESC+4(R11),TMP$Q_DISKNAME+4(R11) ,; CANAUX D'ACCES AU FICHIER [0,0]QUOTA.SYS  $ASSIGN_S DEVNAM=TMP$Q_DISKNAME(R11),-  CHAN=TMP$W_CHAN1(R11) X BLBS R0,35$  MOVL R0,R1  BSBW TMP$SIGNAL1  BRW ERROR ;SEQUENCE D'ERREUR 35$: $ASSIGN_S DEVNAM=TMP$Q_DISKNAME(R11),- L CHAN=TMP$W_CHAN2(R11)  BLBS R0,40$  MOVL R0,R1 x BSBW TMP$SIGNAL1  BRW ERROR ;SEQUENCE D'ERREUR @; CONSTITUTION DU NOM DU FICHIER DIRECTORY 40$: MOVAL TMP$T_DIRECTORY(R11),R10 ;ADRESSE DU NOM  MOVC3 TMP$Q_DISKNAME(R11),@TMP$Q_DISKNAME+4(R11),(R10) l ADDL2 TMP$Q_DISKNAME(R11),R10 ;ADRESSE DE LA CHAINE MOVZWL TMP$W_DIRLENGTH(R11),R6 ;LONGUEUR DE LA CHAINE 4! MOVAL TMP$T_DIRNAME(R11),R7 ;ADRESSE DE LA CHAINE ! LOCC #^A/[/,R6,(R7) ;RECHERCHE DU [ ! BEQL 80$ ;ERREUR (PAS DE [) `" SUBL3 #1,R0,R6 ;LONGUEUR DE LA CHAINE RESTANTE " ADDL3 #1,R1,R7 ;ADRESSE DU CARACTERE SUIVANT LE [ (# LOCC #^A/]/,R6,(R7) ;RECHERCHE DU ] # BEQL 80$ ;ERREUR (PAS DE ]) # SUBL3 R7,R1,R6 ;LONGUEUR DE LA CHAINE ENTRE [] T$ CMPB #^A/./,-1(R7)[R6] ;TEST D'UN DIRECTORY RACINE $ BNEQ 45$ % DECL R6 ;SUPPRESSION DU POINT % MOVB #^A/]/,(R7)[R6] ;DEPLACEMENT DU ] % DECW TMP$W_DIRLENGTH(R11) ;MISE A JOUR DE LA LONGUEUR H&45$: LOCC #^A/./,R6,(R7) ;RECHERCHE D'UN POINT & BNEQ 60$ ;IL S'AGIT D'UN SOUS DIRECTORY '; CAS DU DIRECTORY PRINCIPAL t' MOVC3 #5,DIR00,(R10) ;DIRECTORY DU DIRECTORY ' ADDL2 #5,R10 ;POINTEUR DU CARACTERE SUIVANT <( MOVC3 R6,(R7),(R10) ;COPIE DU NOM DU DIRECTORY ( ADDL2 R6,R10 ;POINTEUR DU CARACTERE SUIVANT ) MOVC3 #4,DIREX,(R10) ;EXTENSION h) ADDL2 #4,R10 ;POINTEUR DU CARACTERE SUIVANT ) BRB 90$ 0*; CAS D'UN SOUS DIRECTORY *60$: MOVL R1,R8 ;ADRESSE DU DERNIER POINT RENCONTRE * SUBL3 #1,R0,R6 ;LONGUEUR RESTANTE \+ ADDL3 #1,R1,R9 ;CARACTERE SUIVANT LE POINT + LOCC #^A/./,R6,(R9) ;RECHERCHE DU POINT SUIVANT $, BNEQ 60$ ;IL EXISTE UN AUTRE POINT , MOVB #^A/[/,(R10)+ ;STOCKAGE DU [ , SUBL3 R7,R8,R9 ;LONGUEUR DU DIRECTORY DU DIRECTORY P- MOVC3 R9,(R7),(R10) ;NOM DU DIRECTORY DU DIRECTORY - ADDL2 R9,R10 ;POINTEUR DU CARACTERE SUIVANT . MOVB #^A/]/,(R10)+ ;STOCKAGE DU ] |. INCL R8 ;DEBUT DU NOM DU FICHIER DIRECTORY . MOVC3 R6,(R8),(R10) ;STOCKAGE DU NOM DU FICHIER DIRECTORY D/ ADDL2 R6,R10 ;POINTEUR DU CARACTERE SUIVANT / MOVC3 #4,DIREX,(R10) ;STOCKAGE DE L'EXTENSION 0 ADDL2 #4,R10 ;POINTEUR DU CARACTERE SUIVANT p0 BRB 90$ 0; CAS OU LE DIRECTORY N'EST PAS TROUVE 8180$: MOVL #SS$_BADIRECTORY,R1 1 BSBW TMP$SIGNAL1 2 BRW ERROR d290$: MOVAL TMP$T_DIRECTORY(R11),R9 2 SUBL2 R9,R10 ;LONGUEUR TOTALE DU NOM ,3; INITIALISATION DU FAB ET DU NAM 3 ASSUME FAB$B_BID+1 EQ FAB$B_BLN 3 MOVW #FAB$C_BID+,- X4 TMP$G_FABDIR+FAB$B_BID(R11) 4 ASSUME NAM$B_BID+1 EQ NAM$B_BLN 5 MOVW #NAM$C_BID+,- 5 TMP$G_NAMDIR+NAM$B_BID(R11) 5 MOVAL TMP$G_NAMDIR(R11),TMP$G_FABDIR+FAB$L_NAM(R11) L6 MOVB R10,TMP$G_FABDIR+FAB$B_FNS(R11) ;LONGUEUR DU NOM 6 MOVL R9,TMP$G_FABDIR+FAB$L_FNA(R11) ;ADRESSE DU NOM 7 MOVB #255,TMP$G_NAMDIR+NAM$B_ESS(R11) x7 MOVAL TMP$G_ESADIR(R11),TMP$G_NAMDIR+NAM$L_ESA(R11) 7 MOVB #255,TMP$G_NAMDIR+NAM$B_RSS(R11) @8 MOVAL TMP$G_RSADIR(R11),TMP$G_NAMDIR+NAM$L_RSA(R11) 8 $PARSE FAB=TMP$G_FABDIR(R11) ;CONSTITUTION DU NOM COMPLET 9 BLBS R0,100$ l995$: MOVL R0,R1 9 BSBW TMP$SIGNAL1 4: BRW ERROR ;SEQUENCE D'ERREUR :100$: $SEARCH FAB=TMP$G_FABDIR(R11) ;RECHERCHE DU FICHIER : BLBC R0,95$ `; MOVC3 #6,TMP$G_NAMDIR+NAM$W_FID(R11),TMP$W_DIRID(R11) ;; OUVERTURE DU FICHIER QUOTA.TMP (<; CONSTITUTION DU NOM < MOVAL TMP$T_QUOTANAME,R10 ;ADRESSE DU DEBUT < MOVC3 TMP$W_DIRLENGTH(R11),TMP$T_DIRNAME(R11),(R10) T= MOVZWL TMP$W_DIRLENGTH(R11),R9 = ADDL2 R9,R10 ;MISE A JOUR DE L'ADRESSE > MOVC3 TMP$T_QUOTA,@TMP$T_QUOTA+4,(R10) ;STOCKAGE DU NOM > ADDL2 TMP$T_QUOTA,R10 ;ADRESSE DU CARACTERE SUIVANT > SUBL2 #TMP$T_QUOTANAME,R10 ;LONGUEUR DU NOM H? ASSUME FAB$B_BID+1 EQ FAB$B_BLN ? MOVW #FAB$C_BID+,- @ TMP$G_FABQUOTA+FAB$B_BID(R11) ;"FAB" t@ ASSUME RAB$B_BID+1 EQ RAB$B_BLN @ MOVW #RAB$C_BID+,- ,TMP$G_FABQUOTA+FAB$L_ALQ(R11) $E $CREATE FAB=TMP$G_FABQUOTA(R11) E BLBS R0,105$ E MOVL TMP$G_FABQUOTA+FAB$L_STV(R11),R1 ;STATUS PF MOVAL TMP$T_QUOTA,R2 ;NOM DU FICHIER F BSBW TMP$SIGNAL3 G BRW ERROR |G; SAUVEGARDE DU STATUS G105$: MOVL R0,TMP$L_STCREATE(R11) DH; CREATION DE LA SECTION GLOBALE H; DEMANDE DE PAGES MEMOIRES I $EXPREG_S PAGCNT=#,- pI RETADR=TMP$Q_QUOTAINADR(R11) I BLBS R0,110$ 8J MOVL R0,R1 J BSBW TMP$SIGNAL1 K BRW ERROR ;SEQUENCE D'ERREUR dK110$: $CRMPSC_S INADR=TMP$Q_QUOTAINADR(R11),- K RETADR=TMP$Q_QUOTARETADR(R11),- ,L FLAGS=#SEC$M_WRT,GSDNAM=TMP$T_GBL,- L CHAN=TMP$G_FABQUOTA+FAB$L_STV(R11) L BLBS R0,115$ XM MOVL R0,R1 M BSBW TMP$SIGNAL1 N BRW ERROR ;SEQUENCE D'ERREUR N115$: CMPL #RMS$_NORMAL,TMP$L_STCREATE(R11) N BNEQ 117$ LO; CAS D'UNE SECTION EXISTANTE O; RESTAURATION DES QUOTAS P BSBW TMP$RESTQUOTA xP BRB 150$ P; CAS D'UNE NOUVELLE SECTION (REMISE A 0) @Q117$: BSBW TMP$INITSEC Q; MISE A JOUR DE LA SECTION GLOBALE R150$: $UPDSEC_S INADR=TMP$Q_QUOTAINADR(R11),EFN=#0 lR BLBS R0,160$ R MOVL R0,R1 4S BSBW TMP$SIGNAL1 S BRW ERROR S160$: $WAITFR_S EFN=#0 `T; EFFACEMENT DES FICHIERS TEMPORAIRES EXISTANTS T MOVAL TMP$T_ALLDIR,R0 ;DESCRIPTEUR DU DIRECTORY (U BSBW TMP$DELFILES U; CREATION DE LA MAILBOX U $CREMBX_S PROMSK=#0,MAXMSG=#TMP$K_MBUFSIZ,- TV BUFQUO=#2*TMP$K_MBUFSIZ,PRMFLG=#1,- V CHAN=TMP$W_MBCHAN(R11),LOGNAM=MBLOGNAM W BLBS R0,170$ W MOVL R0,R1 W BSBW TMP$SIGNAL1 HX BRW ERROR X170$: MOVAL TMP$W_MBCHAN(R11),R0 Y BSBW TMP$GETCHAN ;INFORMATION SUR LA MAILBOX tY BSBW TMP$SETMBAST ;DECLARATION DE L'AST Y MOVW TMP$T_MBBUF+DIB$W_UNIT(R11),- ,- ^ RETADR=TMP$Q_BUFADR(R11) P_; REMISE A ZERO DE LA BITMAP ASSOCIEE _ MOVL #,R1 ` MOVAL TMP$T_BITMAP(R11),R2 |` BSBW TMP$ZERO `; RESERVATION DE LA TABLE DES PROCESSES Da; CREATION DE LA SECTION GLOBALE ASSOCIEE a $CRMPSC_S INADR=TMP$Q_GBLINADR,- b RETADR=TMP$Q_PROCTABLE(R11),- pb FLAGS=#SEC$M_GBL!SEC$M_EXPREG!SEC$M_WRT!SEC$M_PAGFIL!SEC$M_SYSGBL,- b GSDNAM=TMP$T_GBLPROC,- 8c PAGCNT=#,- c PROT=#^X2200 d BLBS R0,180$ dd MOVL R0,R1 d BSBW TMP$SIGNAL1 ,e BRW ERROR ;SEQUENCE D'ERREUR e; REMISE A ZERO DE LA BITMAP ASSOCIEE e180$: MOVL #,R1 Xf MOVAL TMP$T_PROCMAP(R11),R2 f BSBW TMP$ZERO g; OBTENTION DU NOMBRE DE BLOCS LIBRES (PARAMETRE USERD1) g MOVL @#SGN$GL_USERD1,TMP$L_FREEBLOCKS(R11) g; LIBERATION DES AST Lh $SETAST_S #1 h BRW TMP$MAIN i .END TMPSTART