.TITLE SRDREP REPLACE CHARACTERS THAT CSI DOESN'T LIKE .IDENT -6.5- ; Jan-85 .ENABL LC ; ; MODIFICATIONS: ; ; CEF001 -- 1-June-83 ; ADD .PSECTS ; ; ; VERSION 6.4 - 07-Nov-83 (;BT003) ; ; Bob Turkelson ; SRD Working Group ; ; Added the /FO:[g,m] switch to select files by file owner, with ; /FO defaulting to files owned by the directory being listed; ; may be negated to select files with different file owners. ; ;= ; ; ON ENTRY: ; R1 POINTS TO THE COMMAND STRING ; R2 CONTAINS ITS LENGTH ; ; THIS MODULE ALLOWS THE USER TO USE SYNTAX SUCH AS /DA:1-DEC-79 10:30 ; WHEREAS NORMALLY THE CSI PARSING WOULD KICK OUT THE SECOND COLON AND ; OMIT THE BLANK. TO BE PRECISE WE CHECK FOR THE FOLLOWING:- ; ; /AF:1-DEC-79 10:30 - REPLACE BLANK WITH ' AND : WITH # ; /AE, /BF, /BE & /DA - AS FOR /AF ; /SE:FRED.MAC;3 - REPLACE ; WITH # ; /SD - AS FOR /SE ; /FO:[g,m] - Replace [ and ] with blanks ; comma with : ; * with 0 ; /-FO:[g,m] - As for /FO ; ; This module also checks for the occurence of /-FO or /NOFO and if found ; sets the NOFOSW bit in FLAGS$. ; .PSECT SRDATA,D,RW,CON,REL,LCL ;CEF001 SWITCH: .BLKB 2 ;CEF001 .PSECT SRDCOD,I,RO,CON,REL,LCL ;CEF001 SRDREP:: MOV R1,-(SP) ; SAVE THE REGISTERS MOV R2,-(SP) ; MOV R3,-(SP) ;BT003 ; LOOP1: CMPB (R1)+,#'/ ; A SWITCH? BNE LOOP ; IF NE NO - GET NEXT CHAR CLR R3 ; Clear negation flag ;BT003 CMPB (R1),#'- ; YES - A MINUS? BNE 20$ ; IF NE NO - GET THE SWITCH INC R1 ; YES - SKIP IT INC R3 ; Set negation flag ;BT003 DEC R2 ; COUNT IT BEQ END ; EXIT IF NO MORE ; 20$: MOVB (R1)+,SWITCH ; GET THE SWITCH MOVB (R1)+,SWITCH+1 ; SUB #2,R2 ; Count the characters ;BT003 BLE END ; LE - at end of command string ;BT003 CMP SWITCH,#"NO ; A "NO" prefix? ;BT003 BNE 30$ ; NE - not a "NO" ;BT003 INC R3 ; Set negation flag ;BT003 BR 20$ ; Get real switch part ;BT003 30$: ;BT003 CMP SWITCH,#"DA ; DATE? BEQ DATE ; YES - CHECK IT CMP SWITCH,#"AF ; AFTER DATE? BEQ DATE ; YES - CHECK IT CMP SWITCH,#"AE ; AFTER DATE? BEQ DATE ; YES - CHECK IT CMP SWITCH,#"BE ; BEFORE DATE? BEQ DATE ; YES - CHECK IT CMP SWITCH,#"BF ; BEFORE DATE? BEQ DATE ; YES - CHECK IT CMP SWITCH,#"SE ; SELECTIVE? BEQ SELECT ; YES - CHECK IT CMP SWITCH,#"SD ; OTHER SELECTIVE BEQ SELECT ; YES - CHECK IT CMP SWITCH,#"FO ; File owner switch? ;BT003 BEQ FILOWN ; EQ - yes, check it ;BT003 ; LOOP: SOB R2,LOOP1 ; ELSE CHECK NEXT CHAR IF ANY ; END: MOV (SP)+,R3 ; Restore registers ;BT003 MOV (SP)+,R2 ; RESTORE REGISTERS MOV (SP)+,R1 ; RETURN ; AND EXIT ; DATE: CMPB (R1),#': ; A DATE SPECIFIED? BNE LOOP ; NO - FORGET IT INC R1 ; YES - SKIP COLON DEC R2 ; COUNT IT BEQ END ; IF EQ NO MORE - EXIT ; 10$: CMPB (R1),#'/ ; END OF DATE? BEQ LOOP ; YES - CARRY ON CMPB (R1),#' ; A SPACE? BNE 20$ ; NO - KEEP CHECKING MOVB #'',(R1) ; YES - REPLACE WITH QUOTE ; 20$: CMPB (R1),#': ; A COLON? BNE 30$ ; NO - KEEP CHECKING MOVB #'#,(R1) ; YES - REPLACE WITH HASH ; 30$: INC R1 ; SET TO NEXT CHAR SOB R2,10$ ; AND KEEP LOOKING BR END ; EXIT IF NO MORE ; SELECT: CMPB (R1),#'/ ; END OF SWITCH? BEQ LOOP ; YES - BACK TO MAIN LOOP CMPB (R1),#'; ; NO - A SEMI-COLON? BNE 10$ ; IF NE NO - KEEP CHECKING MOVB #'#,(R1) ; YES - REPLACE BY A HASH ; 10$: INC R1 ; COUNT THE CHARACTER SOB R2,SELECT ; KEEP CHECKING ANY LEFT BR END ; OR EXIT ; ;BT003 FILOWN: ;BT003 TST R3 ; Was switch negated (/-FO or /NOFO)? ;BT003 BEQ 10$ ; EQ - no ;BT003 BIS #NOFOSW,FLAGS$ ; Set bit in flag word ;BT003 10$: CMPB (R1),#': ; Switch values specified? ;BT003 BNE LOOP ; NE - no, back to main loop ;BT003 CMPB 1(R1),#'[ ; [g,m] format used? ;BT003 BNE LOOP ; NE - no, back to main loop ;BT003 INC R1 ; Skip over colon ;BT003 MOVB #' ,(R1)+ ; Replace bracket with blank ;BT003 SUB #2,R2 ; Count these ;BT003 BLE END ; LE - at end of string, exit ;BT003 CMPB (R1),#'* ; Wildcard specified? ;BT003 BNE 20$ ; NE - no ;BT003 MOVB #0,(R1)+ ; Replace * with 0 ;BT003 20$: CMPB (R1),#'/ ; End of switch? ;BT003 BEQ LOOP ; EQ - yes, back to main loop ;BT003 CMPB (R1)+,#', ; A comma? ;BT003 BEQ 30$ ; EQ - yes ;BT003 SOB R2,20$ ; Otherwise, keep looking for it ;BT003 BR END ; Exit if at end ;BT003 30$: MOVB #':,-(R1) ; Replace comma with colon ;BT003 INC R1 ; Then skip over it ;BT003 CMPB (R1),#'* ; Wildcard specified? ;BT003 BNE 40$ ; NE - no ;BT003 MOVB #0,(R1)+ ; Replace * with 0 ;BT003 40$: CMPB (R1),#'/ ; End of switch? ;BT003 BEQ LOOP ; EQ - yes, back to main loop ;BT003 CMPB (R1)+,#'] ; Right bracket? ;BT003 BEQ 50$ ; EQ - yes ;BT003 SOB R2,40$ ; Otherwise, keep looking for it ;BT003 BR END ; Exit if at end ;BT003 50$: MOVB #' ,-(R1) ; Replace bracket with blank ;BT003 INC R1 ; Skip over it ;BT003 BR LOOP ; Done with this switch ;BT003 .END