.TITLE PRECSI - PRE-SCAN LINE FOR WILD-CARDS .IDENT /X01.01/ ;**- ; Module name: PRECSI - PRE-SCAN LINE FOR WILD-CARDS ; ; Version X01.01 Last edit: 30-JUL-80 14:40 ; Status: Development/Debugging ; ; Revision history: ; ; Version X01.00 24-JUL-80 12:34 - 30-JUL-80 14:40 ; Created by: K.J. CROSS ; ; Version X01.01 30-JUL-80 14:40 - 30-JUL-80 14:40 ; Modified by: K.J. CROSS ; DETECT START OF SWITCH ; ;**- ; ; THIS ROUTINE SCANS THE INPUT LINE FOR WILD-CARD CHARACTERS. ; THE INPUT STRING IS SCANNED AND COPIED TO AN OUTPUT STRING. ; IF THERE ARE ANY SPECIAL WILD-CARD CHARACTERS, THE FIELD IS ; REPLACED IN THE OUTPUT STRING WITH "*". ; ; INPUTS: ; R0 = ADDRESS OF INPUT STRING ; R1 = LENGTH OF INPUT STRING ; R2 = ADDRESS OF OUTPUT STRING ; R5 = ADDRESS TO STORE FILENAME TEMPLATE ; ; OUTPUTS: ; R2 = LENGTH OF OUTPUT STRING ; R5 = 0 IF NO WILD-CARDS FOUND, OR END OF TEMPLATE IF FOUND ; CARRY CLEAR = NO PROBLEMS ; CARRY SET = SYNTAX ERROR ; ; ALL REGISTERS ARE USED. ; ; ; LOCAL DATA ; OUTADR: .BLKW 1 ;STARTING ADDRESS OF OUTPUT STRING (INPUT R2) FLDPTR: .BLKW 1 ;POINTER TO START OF CURRENT FIELD WLDFLG: .BLKW 1 ;IF NON-ZERO, THERE WERE SOME WILD-CARDS TMPADR: .BLKW 1 ;STARTING ADDRESS OF TEMPLATE STRING (INPUT R5) SPSUBR: .WORD INUIC ;START OF UIC FOUND .WORD INDEV ;END OF DEVICE SPEC FOUND .WORD INDOT ;DOT - END OF FILENAME, START OF FILETYPE .WORD INSWIT ;SLASH - START OF SWITCH (END OF FILESPEC) .WORD INSEMI ;SEMICOLON - START OF VERSION NUMBER .WORD INWILD ;WILDCARD CHARACTER .WORD INWILD ;WILDCARD CHARACTER SPCHAR: .WORD '[ .WORD ': .WORD '. .WORD '/ .WORD '; .WORD '* .WORD '? .WORD 0 ;END OF SPECIAL CHARACTERS ; ; PRECSI - CHECK FOR WILD-CARD CHARACTERS ; .ENABL LSB PRECSI:: MOV R2,FLDPTR ;SAVE START OF FIELD ADDRESS MOV R2,OUTADR ;SAVE START OF OUTPUT FIELD MOV R5,TMPADR ;SAVE START OF TEMPLATE STRING CLR WLDFLG ;INIT WILD-CARD FLAG TST R1 ;ANYTHING THERE? BLE 90$ ;IF LE, NO PRECSX: MOVB (R0)+,R4 ;GET INPUT CHARACTER MOV #SPCHAR,R3 ;GET POINTER TO SPECIAL CHARACTERS 10$: CMP R4,(R3)+ ;IS IT A SPECIAL? BNE 20$ ;IF NE, NO JMP @SPSUBR-SPCHAR-2(R3) ;PROCESS SPECIAL CHARACTER 20$: TST (R3) ;END OF TABLE? BNE 10$ ;IF NE, NO DEC R1 ;DEC COUNTER BLE 88$ ;IF LE, DONE ; ; NOT SPECIAL CHARACTER - TRANSFER IT TO THE OUTPUT STRING. ; MOVB R4,(R2)+ ;STORE IN OUTPUT STRING MOVB R4,(R5)+ ;STORE CHARACTER IN TEMPLATE STRING BR PRECSX ;CONTINUE ; ; "[" - START OF UIC. FIND THE END OF THE UIC STRING SO THAT ; WILD-CARDS IN IT AREN'T PROCESSED. ; INUIC: MOVB R4,(R2)+ ;STORE IN OUTPUT STRING DEC R1 ;DEC COUNTER BEQ 98$ ;IF EQ, OH-OH MOVB (R0)+,R4 ;GET THE NEXT CHARACTER CMP #'],R4 ;END OF UIC STRING? BNE INUIC ;IF NE, NO BR INDEV ;RESET POINTERS ; ; "." - END OF FILENAME - START OF FILE TYPE. ; INDOT: MOVB R4,(R2)+ ;SAVE THE CHARACTER MOVB R4,(R5)+ ;SAVE IN TEMPLATE BR 30$ ;SAVE POINTERS ; ; ":" - END OF DEVICE NAME - ASSUME START OF FILENAME. ; INDEV: MOVB R4,(R2)+ ;SAVE THE CHARACTER MOV TMPADR,R5 ;RE-INIT TEMPLATE ADDRESS 30$: MOV R2,FLDPTR ;SAVE START OF FIELD ADDRESS DEC R1 ;DEC COUNTER BEQ 90$ ;IF EQ, DONE BR PRECSX ;CONTINUE ; ; ";" - END OF FILENAME AND TYPE - START OF VERSION. ; THE FILENAME AND FILETYPE ARE ALL CHECKED. JUST COPY THE ; REST OF THE INPUT STRING AND EXIT. ; INSEMI: MOVB R4,(R5)+ ;STORE CHARACTER IN TEMPLATE STRING INSWIT: MOVB R4,(R2)+ ;STORE THE CHARACTER DEC R1 ;DEC COUNTER BEQ 90$ ;IF EQ, DONE 40$: MOVB (R0)+,(R2)+ ;COPY THE REST OF THE STRING SOB R1,40$ ;'TIL THERE AIN'T NO MORE BR 90$ ;FINISH UP ; ; "?" - WILD-CARD CHARACTER. ; "*" - WILD-CARD STRING. ; ; A WILD-CARD CHARACTER HAS BEEN FOUND. SUBSTITUTE "*" FOR THIS ; PART OF THE FILE SPECIFICATION. ; INWILD: MOV FLDPTR,R2 ;GET ADDRESS OF START OF OUTPUT STRING MOVB R4,(R5)+ ;STORE CHARACTER IN TEMPLATE STRING MOVB #'*,(R2)+ ;STORE "*" THERE INC WLDFLG ;SET WILDCARD FLAG 50$: DEC R1 ;DEC COUNTER BEQ 90$ ;IF EQ, DONE MOVB (R0)+,R4 ;GET THE NEXT CHARACTER CMP #'.,R4 ;END OF FILENAME? BEQ INDOT ;IF EQ, YES CMP #';,R4 ;END OF FILE TYPE? BEQ INSEMI ;IF EQ, YES MOVB R4,(R5)+ ;ALL OTHERS GO INTO TEMPLATE BR 50$ ;CONTINUE ; ; DONE PROCESSING. ; 88$: MOVB R4,(R2)+ ;SAVE LAST CHARACTER MOVB R4,(R5)+ ;SAVE IN TEMPLATE, TOO 90$: MOVB #';,(R5)+ ;STORE TEMPLATE TERMINATOR TST WLDFLG ;ANY WILDCARDS FOUND? BNE 95$ ;IF NE, YES CLR R5 ;INDICATE NO WILDCARDS 95$: CLRB (R2) ;TERMINATE OUTPUT STRING WITH NULL SUB OUTADR,R2 ;COMPUTE LENGTH OF OUTPUT STRING CLC ;INDICATE SUCCESS BR 99$ ;EXIT 98$: SEC ;INDICATE ERROR 99$: RETURN ;ALL DONE .DSABL LSB .END