.PSECT CSPARS .TITLE CSPARS - FILL IN DSDS FROM FILE NAME .IDENT /781109/ ; ; THIS CODE HAS BEEN DEVELOPED BY THE COMPUTING ; GROUP OF THE ATMOSPHERIC SCIENCES DIVISION, ; ALBERTA RESEARCH. THIS WORK FUNDED BY THE ; ALBERTA WEATHER MODIFICATION BOARD. ; ; THERE IS EXPLICITLY NO COPYRIGHT ON THIS SOFTWARE, ; AND ITS DISTRIBUTION IS ENCOURAGED. NO RESPONSIBILITY ; NOR GUARANTEE IS MADE OR ASSUMED BY THE AUTHOR, OR ; BY ALBERTA RESEARCH. ; ; SUGGESTIONS OR CHANGES ARE INVITED, AND WILL BE ; DISTRIBUTED TO OTHER USERS OF THIS SOFTWARE THROUGH ; THE DECUS IAS/RSX SPECIAL INTEREST GROUP. ; ; ; VERSION: 781020 ; WRITTEN BY: W. KORENDYK ; DATE WRITTEN: 1-NOV-78 ; ; ROUTINES USED: ; MESOUT ; ; MODIFICATIONS: ; ; CODE NAME DATE ; ;+ ; ; *** - CSPARS -- ROUTINE TO PARSE THE FILENAME SPECIFED ; IN THE COMMAND LINE. ; ; INPUT: R0 = ADDRESS OF THE START OF THE "FILENAME" ; R2 = FDB ADDRESS OF FILE ; ; OUTPUT: R0 = ADDRESS OF CHARACTER FOLLOWING THE FILE NAME ; CARRY SET IFF AN ERROR OCCURRED IN PARSING ; ; SIDE EFFECTS: THE DSDS POINTER OF THE FDB IS INITIALIZED ACCORDINGLY. ; IF AN ERROR OCCURS, A MESSAGE IS OUTPUT TO THE TERMINAL. ;- ; LF=12 CR=15 ESC=33 .NLIST BEX ERR2: .ASCIZ /MAIL - FILE NAME SYNTAX ERROR IN: "%VA"/ LERR2 =.-ERR2 .EVEN .LIST BEX ; .DSABL GBL .MCALL ENTER,LEAVE .MCALL MAIGBL .MCALL FCSMC$,FDOF$L MAIGBL FCSMC$ FDOF$L .MCALL CSI$,CSI$1,CSI$2 CSPARS: ENTER R1,R2 ;SAVE SOME REGISTERS MOV R0,-(SP) ; REMEMBER THE POINTER FOR A SEC MOV R0,CSIBLK+C.CMLD+2 1$: CMPB #40,(R0)+ ; A SPACE (DELIMITER)? BEQ 2$ ; YES CMPB #CR,-(R0) ; A CR (TERMINATOR)? BEQ 3$ ; YES CMPB #ESC,(R0)+ ; AN ESC (TERMINATOR)? BEQ 2$ ; YES CMPB #'/,-(R0) ; A "/"? BEQ 3$ ; YES INC R0 ; POINT TO THE NEXT BR 1$ ; 2$: DEC R0 ; POINT TO THE DELIMITER 3$: MOV (SP)+,R1 ; GET BACK OLD POINTER MOV R0,-(SP) ; SAVE NEW POINTER SUB R1,R0 ; GET LENGTH MOV R0,CSIBLK+C.CMLD; AND COMPLETE LINE DESCRIPTION CSI$1 #CSIBLK ; SYNTACTIC CHECK BCS 10$ ; NO GOOD CSI$2 ,OUTPUT ; FILL IN A DSDS BCS 10$ ; THIS SHOULDN'T HAPPEN FDOP$R R2,,#CSIBLK+C.DSDS BR 20$ ; 10$: MOV #CSIBLK+C.FILD,R2;USE THIS AS ARGBLOCK MOV #ERR2,R1 ; FOR OUTPUT OF THE FILE CALL MESOUT ; SYNTAX ERROR MESSAGE SEC ; INDICATE ERROR BR 21$ ; 20$: CLC ; 21$: MOV (SP)+,R0 ; GET BACK THE NEW POINTER LEAVE ; RETURN ; ; ; CSI$ .EVEN CSIBLK: .BLKB C.SIZE ; THE CSI BLOCK .END