d .TITLE TMPSUBR .IDENT /V01.02 (03-84)/ , $JBCMSGDEF  $RMSDEF  $OPCDEF X .PSECT TMP_RWDATA,NOEXE,RD,WRT,LONG ; ATTENTE DE DEUX MINUTES DELAY: .LONG -1200000000,-1 SIGNAL1_FAO: .ASCID *FICHIERS TEMPORAIRES !AS* SIGNAL2_FAO: .ASCID *FICHIERS TEMPORAIRES !AS !/ !AS* LSIGNAL3_FAO: .ASCID *FICHIERS TEMPORAIRES !AS !/ !AS !/ !AS* FAO_RTN_L: .BLKW 1 FAO_DESC1_ADR: .BLKL 1 xFAO_DESC2_ADR: .BLKL 1 SIGNAL$W_LMSG1: .BLKW 1 @SIGNAL$Q_MSGBUF1DES: SIGNAL$W_MSGBUF1CNT: .WORD 256 SIGNAL$W_MSGBUF1SIZ: .WORD 256 lSIGNAL$A_MSGBUF1ADR: .LONG SIGNAL$T_BUF1 SIGNAL$W_LMSG2: .BLKW 1 4SIGNAL$Q_MSGBUF2DES: SIGNAL$W_MSGBUF2CNT: .WORD 256 SIGNAL$W_MSGBUF2SIZ: .WORD 256 ` SIGNAL$A_MSGBUF2ADR: .LONG SIGNAL$T_BUF2 SIGNAL$Q_TBUFDES: ( SIGNAL$W_TBUFCNT: .WORD 256 SIGNAL$W_TBUFSIZ: .WORD 256 SIGNAL$A_TBUFADR: .LONG SIGNAL$T_TBUF T SIGNAL$T_BUF1: .BLKB 256 SIGNAL$T_BUF2: .BLKB 256  SIGNAL$T_TBUF: .BLKB 256 ; VARIABLES NECESSAIRES A LA CONSTITUTION DU NOM DE LA MAILBOX MBNAM_FAO: .ASCID *!AS!UW!AS* ;DESCRIPTEUR POUR FAO H MB_DEVNAM: .ASCID /MBA/ ;NOM GENERIQUE MB_DP: .ASCID /:/ ;CARACTERE ":" LONG: .BLKW 1 ;LONGUEUR DU NOM RESULTANT tMBNAM_BUF_DESC: .LONG 25 ;DESCRIPTEUR DU NOM DE LA MAILBOX  .LONG MBNAM_BUF <MBNAM_BUF: .BLKB 25 ;NOM DE LA MAILBOX ; CANAL ASSOCIE A LA MAILBOX DU DEMANDEUR REQMB_CHAN: .BLKW 1 h .PSECT TMP_CODE,EXE,RD,NOWRT,LONG TMP$SIGNAL1:: $GETMSG_S MSGID=R1,MSGLEN=SIGNAL$W_LMSG1,- 0 BUFADR=SIGNAL$Q_MSGBUF1DES,FLAGS=#15  BLBS R0,5$  RSB \5$: MOVAL SIGNAL$Q_MSGBUF1DES,FAO_DESC1_ADR  MOVW SIGNAL$W_LMSG1,SIGNAL$W_MSGBUF1CNT $ $FAO_S CTRSTR=SIGNAL1_FAO,OUTLEN=FAO_RTN_L,-  OUTBUF=SIGNAL$Q_TBUFDES,P1=FAO_DESC1_ADR  BLBC R0,10$ P JMP SEND 10$: RSB TMP$SIGNAL2:: PUSHR #^M | CLRL R3  BRB SIGNAL23 DTMP$SIGNAL3:: PUSHR #^M  MOVL #1,R3 SIGNAL23: PUSHR #^M p $GETMSG_S MSGID=R1,MSGLEN=SIGNAL$W_LMSG1,-  BUFADR=SIGNAL$Q_MSGBUF1DES,FLAGS=#15 8 BLBS R0,6$  POPR #^M  POPR #^M d RSB 6$: POPR #^M , $GETMSG_S MSGID=R0,MSGLEN=SIGNAL$W_LMSG2,-  BUFADR=SIGNAL$Q_MSGBUF2DES,FLAGS=#15  BLBS R0,7$ X POPR #^M  RSB 7$: MOVAL SIGNAL$Q_MSGBUF1DES,FAO_DESC1_ADR  MOVW SIGNAL$W_LMSG1,SIGNAL$W_MSGBUF1CNT  MOVAL SIGNAL$Q_MSGBUF2DES,FAO_DESC2_ADR L MOVW SIGNAL$W_LMSG2,SIGNAL$W_MSGBUF2CNT  TSTL R3  POPR #^M x BNEQ 8$  $FAO_S CTRSTR=SIGNAL2_FAO,OUTLEN=FAO_RTN_L,- @ OUTBUF=SIGNAL$Q_TBUFDES,P1=FAO_DESC1_ADR,-  P2=FAO_DESC2_ADR  BLBS R0,SEND l RSB 8$: $FAO_S CTRSTR=SIGNAL3_FAO,OUTLEN=FAO_RTN_L,- 4! OUTBUF=SIGNAL$Q_TBUFDES,P1=FAO_DESC1_ADR,- ! P2=FAO_DESC2_ADR,P3=R2 ! BLBS R0,SEND `" RSB "SEND: PUSHR #^M (# PUSHL R6 # MOVZWL FAO_RTN_L,R6 # SUBL R6,SP T$ MOVC3 R6,SIGNAL$T_TBUF,(SP) $ PUSHL #0 % MOVL #OPC$_RQ_RQST!<- % @8>,-(SP) H& PUSHL SP & ADDL3 R6,#4+4,-(SP) ' MOVL SP,R0 t' $SNDOPR_S (R0) ' ADDL2 #16,R6 <( ADDL2 R6,SP ( MOVL (SP)+,R6 ) POPR #^M h) RSB ); EFFACEMENT DES FICHIERS D'UN DIRECTORY ET SOUS-DIRECTORIES 0* .PSECT TMP_RWDATA,NOEXE,RD,WRT,LONG *TMP$G_DELFAB: .BLKB FAB$C_BLN ;FAB DU FICHIER *TMP$G_DELNAM: .BLKB NAM$C_BLN ;NAM DU FICHIER \+TMP$G_ESADEL: .BLKB 255 ;NOM ETENDU +TMP$G_RSADEL: .BLKB 255 ;NOM DU FICHIER TROUVE $,TMP$T_NAMDEL: .BLKB 255 ;NOM DU FICHIER AVEC WILD CARDS ,SOUSDIR: .ASCII /.../ ;SOUS-DIRECTORIES ,FILENAME: .ASCII /*.*;*/ ;NOM DE FICHIER P-DIREX: .ASCII /.DIR/ -TMP$Q_DELERR: .BLKQ 1 ;DESCRIPTEUR DU NOM EN CAS D'ERREUR .TMP$L_DIRNOTEMPTY: .BLKL 1 ;NOMBRE DE DIRECTORIES NON VIDES |. .PSECT TMP_CODE,EXE,RD,NOWRT,LONG .; EN ENTREE, R0 CONTIENT L'ADRESSE DU DESCRIPTEUR DU NOM D/; DU DIRECTORY /TMP$DELFILES:: PUSHR #^M 0 PUSHR #^M p0; INITIALISATION DU FAB ET DU NAM 0 ASSUME FAB$B_BID+1 EQ FAB$B_BLN 81 MOVW #FAB$C_BID+,- 1 TMP$G_DELFAB+FAB$B_BID 2 ASSUME NAM$B_BID+1 EQ NAM$B_BLN d2 MOVW #NAM$C_BID+,- 2 TMP$G_DELNAM+NAM$B_BID ,3 MOVAL TMP$G_DELNAM,TMP$G_DELFAB+FAB$L_NAM 3 MOVB #255,TMP$G_DELNAM+NAM$B_ESS 3 MOVAL TMP$G_ESADEL,TMP$G_DELNAM+NAM$L_ESA X4 MOVB #255,TMP$G_DELNAM+NAM$B_RSS 4 MOVAL TMP$G_RSADEL,TMP$G_DELNAM+NAM$L_RSA 5; CONSTITUTION DU NOM 5 MOVAL TMP$T_NAMDEL,R10 ;ADRESSE DE DEBUT 5 MOVC3 TMP$T_NOMLOG,@TMP$T_NOMLOG+4,(R10) ;NOM LOGIQUE L6 ADDL2 TMP$T_NOMLOG,R10 6 MOVB #^A/:/,(R10)+ ;ADDITION DU : 7 MOVB #^A/[/,(R10)+ ;DEBUT DU DIRECTORY x7 POPR #^M ;ADRESSE DU DESCRIPTEUR DU DIRECTORY 7 MOVC3 (R9),@4(R9),(R10) ;NOM DU DIRECTORY @8 ADDL2 (R9),R10 ;MISE A JOUR DE L'ADRESSE 8 MOVC3 #3,SOUSDIR,(R10) ;SOUS-DIRECTORY 9 ADDL2 #3,R10 l9 MOVB #^A/]/,(R10)+ ;FIN DU DIRECTORY 9 MOVC3 #5,FILENAME,(R10) ;NOM DE FICHIER 4: ADDL2 #5,R10 : SUBL2 #TMP$T_NAMDEL,R10 ;LONGUEUR DU NOM : MOVB R10,TMP$G_DELFAB+FAB$B_FNS ;LONGUEUR DU NOM `; MOVAL TMP$T_NAMDEL,TMP$G_DELFAB+FAB$L_FNA ;ADRESSE DU NOM ;; INITIALISATION DE LA BOUCLE (< MOVL #8,R8 ;NOMBRE MAXIMUM D'ITERATIONS <1$: CLRL TMP$L_DIRNOTEMPTY ;NOMBRE DE DIRECTORIES NON VIDES < $PARSE FAB=TMP$G_DELFAB ;VERIFICATION DU NOM T= CMPL #RMS$_DNF,R0 ;AUCUN DIRECTORY = BNEQ 20$ > BRW 90$ >20$: BLBS R0,30$ >25$: MOVL R0,R1 H? POPR #^M ? BSBW TMP$SIGNAL1 @ RSB t@; BOUCLE D'EFFACEMENT DES FICHIERS @30$: $SEARCH FAB=TMP$G_DELFAB ;RECHERCHE D'UN FICHIER O BSBW TMP$SIGNAL1 P RSB xP; EFFACEMENT DES FICHIERS DIRECTORIES P; CONSTITUTION DU NOM DU FICHIER DIRECTORY @Q80$: MOVAL TMP$T_NAMDEL,R10 ;ADRESSE DU DEBUT Q MOVC3 TMP$W_DIRLENGTH(R11),TMP$T_DIRNAME(R11),(R10) R MOVZWL TMP$W_DIRLENGTH(R11),R8 lR ADDL2 R8,R10 ;MISE A JOUR DE L'ADRESSE R MOVC3 (R9),@4(R9),(R10) ;NOM DU DIRECTORY 4S ADDL2 (R9),R10 ;MISE A JOUR DE L'ADRESSE S MOVC3 #4,DIREX,(R10) ;EXTENSION S ADDL2 #4,R10 `T SUBL2 #TMP$T_NAMDEL,R10 ;LONGUEUR DU NOM T MOVB R10,TMP$G_DELFAB+FAB$B_FNS ;LONGUEUR DU NOM (U MOVAL TMP$T_NAMDEL,TMP$G_DELFAB+FAB$L_FNA ;ADRESSE DU NOM U $PARSE FAB=TMP$G_DELFAB U BLBS R0,85$ TV83$: MOVL R0,R1 V POPR #^M W BSBW TMP$SIGNAL1 W RSB W85$: $SEARCH FAB=TMP$G_DELFAB HX CMPL #RMS$_NORMAL,R0 X BEQL 87$ Y CMPL #RMS$_FNF,R0 ;AUCUN FICHIER tY BEQL 90$ Y CMPL #RMS$_NMF,R0 ;LISTE DES FICHIERS EPUISES _ RSB `; CHANGEMENT DE NOM D'UN FICHIER |` .PSECT TMP_RWDATA,NOEXE,RD,WRT,LONG `RENAM$G_OLDFAB: .BLKB FAB$C_BLN ;FAB DE L'ANCIEN FICHIER DaRENAM$G_NEWFAB: .BLKB FAB$C_BLN ;FAB DU NOUVEAU FICHIER aRENAM$T_OLDFILE: .BLKB 255 bRENAM$T_NEWFILE: .BLKB 255 pb .PSECT TMP_CODE,EXE,RD,NOWRT,LONG b; EN ENTREE, R0 CONTIENT L'ADRESSE DU DESCRIPTEUR DE L'ANCIEN NOM 8c; R1 CONTIENT L'ADRESSE DU DESCRIPTEUR DU NOUVEAU NOM cTMP$RENAME:: PUSHR #^M d PUSHR #^M ;SAUVEGARDE DU DESCRIPTEUR DU NOUVEAU NOM dd MOVL R0,R9 ;SAUVEGARDE DU DESCRIPTEUR DE L'ANCIEN NOM d; INITIALISATION DES FABS ,e ASSUME FAB$B_BID+1 EQ FAB$B_BLN e MOVW #FAB$C_BID+,- e RENAM$G_OLDFAB+FAB$B_BID Xf ASSUME FAB$B_BID+1 EQ FAB$B_BLN f MOVW #FAB$C_BID+,- g RENAM$G_NEWFAB+FAB$B_BID g; INITIALISATION DES PERIPHERIQUES ET DIRECTORIES g MOVAL RENAM$T_OLDFILE,R10 Lh MOVC3 TMP$W_DIRLENGTH(R11),TMP$T_DIRNAME(R11),(R10) h MOVZWL TMP$W_DIRLENGTH(R11),R8 ;LONGUEUR PERIPH. + DIR. i ADDL2 R8,R10 ;MISE A JOUR DE L'ADRESSE xi MOVC3 (R9),@4(R9),(R10) ;NOM DU DIRECTORY i ADDL2 (R9),R10 ;MISE A JOUR DE L'ADRESSE @j MOVC3 #4,DIREX,(R10) ;EXTENSION j ADDL2 #4,R10 ;MISE A JOUR DE L'ADRESSE k SUBL2 #RENAM$T_OLDFILE,R10 ;LONGUEUR DU NOM lk MOVB R10,RENAM$G_OLDFAB+FAB$B_FNS ;STOCKAGE DE LA LONGUEUR k MOVAL RENAM$T_OLDFILE,RENAM$G_OLDFAB+FAB$L_FNA 4l MOVAL RENAM$T_NEWFILE,R10 ;ADRESSE DU NOUVEAU NOM l MOVC3 TMP$W_DIRLENGTH(R11),TMP$T_DIRNAME(R11),(R10) l ADDL2 R8,R10 ;MISE A JOUR DE L'ADRESSE `m POPR #^M ;RESTAURATION DU DESCRIPTEUR DU NOUVEAU NOM m MOVC3 (R9),@4(R9),(R10) ;NOM DU DIRECTORY (n ADDL2 (R9),R10 ;MISE A JOUR DE L'ADRESSE n MOVC3 #4,DIREX,(R10) ;EXTENSION n ADDL2 #4,R10 ;MISE A JOUR DE L'ADRESSE To SUBL2 #RENAM$T_NEWFILE,R10 ;LONGUEUR DU NOM o MOVB R10,RENAM$G_NEWFAB+FAB$B_FNS ;STOCKAGE DE LA LONGUEUR p MOVAL RENAM$T_NEWFILE,RENAM$G_NEWFAB+FAB$L_FNA p $RENAME OLDFAB=RENAM$G_OLDFAB,- p NEWFAB=RENAM$G_NEWFAB Hq BLBS R0,10$ q MOVL R0,R1 ;CODE D'ERREUR r POPR #^M tr BSBW TMP$SIGNAL1 r RSB s RSB t; INITIALISATION A 0 DE LA SECTION GLOBALE htTMP$INITSEC:: MOVC5 #1,#0,#0,#,- t @TMP$Q_QUOTARETADR(R11) 0u RSB u; RESTAURATION DES QUOTAS PRECEDENTS uTMP$RESTQUOTA:: MOVL TMP$Q_QUOTARETADR(R11),R2 \v10$: TSTL (R2) v BEQL 40$ ;ENREGISTREMENT INUTILISE $w PUSHAL 16(R2) ;QUOTA UTILISE w PUSHAL 12(R2) ;OVERDRAFT w PUSHAL 8(R2) ;QUOTA PERMANENT Px PUSHAL 4(R2) ;UIC x MOVZWL TMP$W_CHAN1(R11),-(SP) ;CANAL D'ACCES AU DISQUE y CALLS #5,G^MOD_QUOTA |y BLBS R0,20$ y CMPL #SS$_NODISKQUOTA,R0 ;PAS DE QUOTA CORRESPONDANT Dz BEQL 20$ ;ON CONTINUE z MOVL R0,R1 { BSBW TMP$SIGNAL1 p{ RSB {20$: CLRL (R2) ;ENREGISTREMENT LIBRE 8|40$: ADDL2 #32,R2 ;PASSAGE A L'ENREGISTREMENT SUIVANT | CMPL R2,TMP$Q_QUOTARETADR+4(R11) ;TEST DE FIN } BLEQU 10$ d}50$: RSB }; OBTENTION DES INFORMATIONS RELATIVES A LA MAILBOX ,~TMP$GETCHAN:: MOVL #DIB$K_LENGTH,TMP$Q_MBBUFDESC(R11) ~ MOVAL TMP$T_MBBUF(R11),TMP$Q_MBBUFDESC+4(R11) ~ $GETCHN_S CHAN=(R0),- X SCDBUF=TMP$Q_MBBUFDESC(R11)  RSB ; DECLARATION DE L'AST AU BOUT D'UN DELAI DE DEUX MINUTES TMP$SETTIMAST:: $SETIMR_S EFN=#3,DAYTIM=DELAY,- ASTADR=FILETMP_AST,REQIDT=#0 L RSB ; DECLARATION DE L'AST ASSOCIEE A LA MAILBOX TMP$SETMBAST:: $QIOW_S CHAN=TMP$W_MBCHAN(R11),- x FUNC=#IO$_SETMODE!IO$M_WRTATTN,- ܂ IOSB=TMP$Q_MIOSB(R11),- @ P1=FILETMP_AST,P2=#1 BLBC R0,10$  MOVZWL TMP$Q_MIOSB(R11),R0 ;STATUS l BLBS R0,20$ Є10$: MOVL R0,R1 ;ERREUR 4 BSBW TMP$SIGNAL1 BRW ERROR 20$: RSB ;SORTIE NORMALE `; ALLOCATION D'UN BUFFER ĆTMP$ALLBUF:: FFCL #0,R1,(R2),R0 ( BNEQ 10$ CLRL R0 ;PAS DE BUFFER DISPONIBLE RSB T10$: INSV #1,R0,#1,(R2) ;MISE A JOUR DE LA BITMAP MULL2 R3,R0  ADDL2 R4,R0 ;ADRESSE DU BUFFER RSB ; REMISE A ZERO DE LA BITMAP HTMP$ZERO:: CLRW (R2)+ ;MISE A ZERO D'UN MOT DECL R1 ;DECREMENTATION DE LA LONGUEUR  BNEQ TMP$ZERO t RSB ؋; OBTENTION DE L'ADDRESSE DU PREMIER BUFFER OCCUPE ;RECHERCHE D'UN ENREGISTREMENT LIBRE ` MOVL TMP$Q_QUOTARETADR(R11),R2 ;INITIALISATION ğ10$: TSTL (R2) ( BEQL 40$ ;ENREGISTREMENT LIBRE ADDL2 #32,R2 ;PASSAGE A L'ENREGISTREMENT SUIVANT CMPL R2,TMP$Q_QUOTARETADR+4(R11) ;TEST DE FIN T BLEQU 10$ MOVL #TMP$_NOFREEQUOTA,R0 ;CODE D'ERREUR  POPR #^M RSB ; STOCKAGE DES QUOTAS H40$: MOVL #1,(R2)+ ;ENREGISTREMENT OCCUPE MOVQ (R0),(R2)+ ;UIC, PERMQUOTA  MOVQ 8(R0),(R2)+ ;OVERDRAFT, USAGE t MOVL #1,R0 ;CODE DE RETOUR ؤ POPR #^M < $UPDSEC_S INADR=TMP$Q_QUOTAINADR(R11),EFN=#0 BLBC R0,50$  $WAITFR_S EFN=#0 h50$: RSB ̦; RECHERCHE DES INFORMATIONS RELATIVES A UN UIC 0TMP$FINDQUOTA:: PUSHR #^M ;RECHERCHE DE L'ENREGISTREMENT MOVL TMP$Q_QUOTARETADR(R11),R2 \10$: TSTL (R2) BEQL 20$ ;ENREGISTREMENT LIBRE $ CMPL 4(R2),(R0) ;COMPARAISON DE L'UIC BEQL 40$ ;UIC TROUVE 20$: ADDL2 #32,R2 ;ENREGISTREMENT SUIVANT P CMPL R2,TMP$Q_QUOTARETADR+4(R11) ;TEST DE FIN BLEQU 10$  MOVL #TMP$_NODISKQUOTA,R0 ;CODE D'ERREUR | POPR #^M RSB D; STOCKAGE DES INFORMATIONS 40$: MOVL 8(R2),4(R0) ;PERMQUOTA MOVQ 12(R2),8(R0) ;OVERDRAFT, USAGE p MOVL R2,R1 ;ADRESSE DE L'ENREGISTREMENT ԭ POPR #^M 8 RSB ERROR:: $EXIT_S .END