.IF NDF OLA .TITLE ISCDAPRS.MAC .IFF .TITLE OLAPRS.MAC .ENDC .SBTTL TITLE PAGE .IDENT -04- .NLIST BEX ; ; ; ; ; ; ; COPYRIGHT (C) 1975 DIGITAL EQUIPMENT CORP., MAYNARD, MA 01754 ; ; ; THE SOFTWARE DESCRIBED IN THIS DOCUMENT, INCLUDING BUT NOT ; LIMITED TO INSTRUCTION EXECUTION TIMES AND OPERATING SPEEDS, ; IS FOR INFORMATION PURPOSES ONLY. ALL SUCH MATERIAL IS ; SUBJECT TO CHANGE WITHOUT NOTICE. CONSEQUENTLY DIGITAL MAKES ; NO CLAIM AND SHALL NOT BE LIABLE FOR ITS ACCURACY. ; ; THE SOFTWARE DESCRIBED IS FURNISHED TO THE PURCHASER UNDER ; A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE ; COPIED (WITH THE INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ; ONLY FOR USE IN SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE ; PROVIDED IN WRITING BY DIGITAL. ; ; ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY ; OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL. ; ; ; UNLESS OTHERWISE SPECIFIED, THE TERMS "RSX" AND "RSX-11" ; IN THIS DOCUMENT IMPLY "RSX-11D". ; ; ; ; ; MODULE: CORE DUMP ANALYZER -- GML LINE PARSE ; VERSION: 01 ; AUTHOR: J. MASSE ; DATE: 16 SEP 74 ; ; ; ; ; ; THIS MODULE CONTAINS: ; ; 1 -- CODE FOR THE GML LINE PARSE PHASE OF CDA .SBTTL DATA SECTION ; ; ; ; ; M A C R O L I B R A R Y C A L L S ; .MCALL DIR$, GCMLD$, GCML$ .MCALL EXIT$S, CSI$, CSI$1, CSI$2 .MCALL GTIM$S, OPEN$W .MCALL OPEN$R ; ; ; ; ; ; L O C A L D A T A ; ; GCMLD$ CSI$ ; ; CSIBLK: .BLKB C.SIZE ; TAS: .RAD50 /TAS/ ; DMP: .RAD50 /DMP/ ; GMLER: ERRMSG ; SYNER: ERRMSG ; ILLSW: ERRMSG ; FILER: ERRMSG ; FSPER: ERRMSG ; .EVEN ; GTIMBF: .BLKW 8. .SBTTL MAINLINE CODE ; ; ; .CLPRS:: GCML$ #GMLBLK ;GET COMMAND LINE BCC 10$ ;ERROR? CMPB G.ERR(R0),#GE.EOF ;IS IT EOF (^Z)? BEQ 5$ ;YES MOV #GMLER,R2 JMP .MSG 5$: EXIT$S 10$: .IF DF OLA TST GMLBLK+G.CMLD ;NULL INPUT? BEQ .CLPRS ;YES: REPROMPT .ENDC ;PUT 'CR' AT END-OF-LINE MOV GMLBLK+G.CMLD+2,R0 ;SET BYTE POINTER MOV R0,R1 ADD GMLBLK+G.CMLD,R1 MOVB #CR,(R1) ;SPLIT LINE INTO FILESPEC ;AND SWITCHES CLR R2 ;CLEAR FILESPEC BYTE COUNT MOV GMLBLK+G.CMLD,R1 ;GET LINE BYTE COUNT BEQ 14$ ;=0: NO FILESPEC 12$: CMPB (R0),#'/ ;IS CHAR A '/'? BEQ 14$ ;YES: FOUND START OF SWITCHES INC R0 ;INC BYTE POINTER INC R2 ;AND FILESPEC BYTE COUNT DEC R1 ;END OF LINE? BNE 12$ ;NO 14$: ;YES: FILESPEC BUT NO SWITCHES MOV R2,GMLBLK+G.CMLD ;RESET FILESPEC BYTE COUNT DEC R0 MOV #.OPT,R5 ;OPTION VECTORS START HERE 20$: INC R0 ;BUMP LINE INDEX 30$: CMPB #11,@R0 ;TAB? BEQ 20$ ;YES -- GET NEXT CHAR CMPB #40,@R0 ;SPACE? BEQ 20$ ;YES -- GET NEXT CHAR CMPB #15,@R0 ;CARRIAGE RETURN? BEQ 120$ ;YES -- END OF LINE CMPB #33,@R0 ;ALT MODE? BEQ 120$ ;YES -- END OF LINE CMPB #'/,(R0)+ ;START OF SWITCH? BNE 110$ ;NO -- SYNTAX ERROR CALL $CAT5 ;YES -- CONVERT TO RAD50 MOV #.SWTAB,R2 ;CHECK IF VALID SWITCH MOV #NSW,R3 40$: CMP @R2,R1 ;IS IT THIS SWITCH? BEQ 50$ ;YES CMP (R2)+,(R2)+ ;NO -- ADVANCE TO NEXT SWITCH SOB R3,40$ MOV #ILLSW,R2 ;ILLEGAL SWITCH JMP .MSG 50$: MOV #.OPT,R4 ;SWITCH FOUND -- NOW CHECK IF ALREADY IN TABLE MOV #NSW,R3 60$: CMP R1,(R4)+ BEQ 110$ ;SYNTAX ERROR IF SO SOB R3,60$ MOV R1,(R5)+ ;OK -- ENTER RAD50 SWITCH IN TABLE CMP R1,TAS ;IS THIS "/TAS"? BNE 100$ ;NO -- CHECK IF "/DMP" SWITCH CMPB #'K,@R0 ;YES -- IS NEXT CHAR A "K"? BNE 70$ ;NO TSTB (R0)+ ;YES -- BUMP LINE INDEX 70$: CMPB #'=,(R0) ;IS NEXT CHAR AN "="? /IAS/ BEQ 75$ ;YES /IAS/ CMPB #':,(R0) ;IS CHAR A ":"? /IAS/ BNE 110$ ;NO -- SYNTAX ERROR /IAS/ 75$: ; /IAS/ INC R0 ;ADVANCE BYTE POINTER /IAS/ CLR .TSKNM+2 ;CLEAR SECOND HALF OF TASK NAME ; ; R1 IS NON-ZERO -- PERIOD WILL BE ACCEPTED AS RAD50 ; CALL $CAT5 ;CONVERT ASCII NAME TO RAD50 MOV R1,.TSKNM ;SAVE FIRST HALF OF TASK NAME MOV R0,R1 ;SET UP R1 TO ACCEPT PERIOD AS RAD50 BCS 80$ ;NO MORE IF CARRY SET CALL $CAT5 ;CONVERT SECOND HALF MOV R1,.TSKNM+2 ;STORE SECOND HALF OF TASK NAME 80$: BCC 90$ ;CHECK IF LINE INDEX MUST BE RESET DEC R0 ;YES -- RESET IT 90$: CLR .RANGE ;INITIALIZE RANGE OF DUMP MOV #-1,.RANGE+2 ;SET FOR TOTAL DUMP (DEFAULT) CMPB #':,@R0 ;IS A RANGE SPECIFIED? BNE 30$ ;NO -- USE DEFAULT TSTB (R0)+ ;GET PAST COLON CALL $COTB ;CONVERT RANGE TO BINARY DEC R0 ;RESET LINE INDEX MOV R1,.RANGE ;STORE START OF DUMP CMPB #':,(R0)+ ;IS IT FOLLOWED BY A COLON? BNE 110$ ;NO -- SYNTAX ERROR CALL $COTB ;YES -- CONVERT HIGH RANGE VALUE TO BINARY DEC R0 ;RESET LINE INDEX MOV R1,.RANGE+2 ;STORE END OF DUMP BR 30$ 100$: CMP R1,DMP ;IS THIS "/DMP" SWITCH? BNE 30$ ;NO -- GET NEXT SWITCH CMPB #':,(R0)+ ;YES -- NEXT CHAR A ":"? BNE 110$ ;NO -- SYNTAX ERROR CALL $COTBD ;YES -- GET REAL ADDRESS (18 BITS) BCS 110$ ;SYNTAX ERROR IF NUMERIC NOT FOUND MOV R2,.DMPLO ;STORE LOW RANGE VALUE MOV R3,.DMPLO+2 CMPB #':,(R0)+ ;IS NEXT CHAR A ":"? BNE 110$ ;NO -- SYNTAX ERROR CALL $COTBD ;YES -- GET REAL ADDRESS (18 BITS) BCS 110$ ;SYNTAX ERROR IF NUMERIC NOT FOUND MOV R2,.DMPHI ;STORE HIGH RANGE VALUE MOV R3,.DMPHI+2 BR 30$ ;GET NEXT SWITCH 110$: MOV #SYNER,R2 ;SYNTAX ERROR JMP .MSG 120$: MOV #.OPT,R0 ;REPLACE SWITCHES WITH ADDRESSES OF SWITCH ROUTINES 130$: CMP R0,R5 ;FINISHED? BEQ 160$ ;YES MOV #.SWTAB,R1 ;NO -- GET ADDRESS FOR NEXT SWITCH 140$: CMP @R0,(R1)+ ;IS THIS THE SWITCH? BEQ 150$ ;YES TST (R1)+ ;NO -- TRY NEXT BR 140$ 150$: MOV @R1,(R0)+ ;REPLACE RAD50 WITH ADDRESS BR 130$ ;DO NEXT SWITCH 160$: CSI$1 #CSIBLK,GMLBLK+G.CMLD+2,GMLBLK+G.CMLD BCS 162$ ;SYNTAX ERROR? CSI$2 #CSIBLK,INPUT ; RSM000 BCS 162$ ; RSM000 BITB #CS.WLD!CS.MOR,C.STAT(R0) ;RSM000 BNE 162$ ; RSM000 BITB #CS.NMF!CS.DIF!CS.DVF,C.STAT(R0) ; RSM000 BEQ 161$ ;RSM000 OPEN$R #.FDIN,,#CSIBLK+C.DSDS ; RSM000 161$: CSI$2 #CSIBLK,OUTPUT BCS 162$ ;ERROR? BITB #CS.WLD!CS.MOR,C.STAT(R0) BEQ 164$ 162$: MOV #FSPER,R2 JMP .MSG 164$: OPEN$W #.FDOUT,,#CSIBLK+C.DSDS ;OPEN OUTPUT FILE BCC 170$ MOV #FILER,R2 JMP .MSG 170$: GTIM$S #GTIMBF ;GET SYSTEM TIME PARAMETERS MOV #GTIMBF,R0 MOV #.HDRBK,R1 ;MOVE TIME & DATE TO HEADER PARAMETER BLOCK MOV G.TIYR(R0),(R1)+ MOV G.TIMO(R0),(R1) BIC #177760,(R1)+ ;MAKE SURE MONTH VALUE IS WITHIN RANGE ;-- IF IT ISN'T 'EDDAT' WILL TERMINATE ;WITH A SEGMENTATION FAULT MOV G.TIDA(R0),(R1)+ MOV G.TIHR(R0),(R1)+ MOV G.TIMI(R0),(R1)+ CLR @R1 ;INITIALIZE PAGE NUMBER RETURN .SBTTL SUBROUTINE '$COTBD' ; ; ;+ ; $ C O T B D ; ; ; SUBROUTINE TO CONVERT AN ASCII STRING TO A DOUBLE-PRECISION ; (22 BITS) BINARY NUMBER. ; ; ; ENTRY CONDITIONS: ; ; R0 -- ASCII STRING POINTER ; ; ; EXIT CONDITIONS: ; ; R0 -- ADVANCED TO TERMINATOR ; R2 -- HIGH 6 BITS OF 18-BIT NUMBER ; R3 -- LOW 16 BITS OF 18-BIT NUMBER ; CARRY -- SET IF NUMERIC NOT FOUND ; ; ; REGISTERS ALTERED: ; ; R0,R2,R3 ; ; ; CALLING SEQUENCE: ; ; CALL $COTBD ; ;- ; ; $COTBD: PUSH R4,R5 ;SAVE REGISTERS CLR R2 ;INITIALIZE NUMBER CLR R3 CMPB #'0,@R0 ;IS THERE A NUMBER? BHI 30$ ;NO CMPB #'7,@R0 ;MAYBE BLO 30$ ;NO MOV #9.,R5 ;YES -- SET FOR 9 DIGITS + TERMINATOR 10$: MOVB (R0)+,R4 ;GET A CHARACTER CMPB #'0,R4 ;NUMERIC? BHI 20$ ;NO -- TERMINATOR CMPB #'7,R4 ;MAYBE BLO 20$ ;NO -- TERMINATOR BIC #177770,R4 ;STRIP ASCII ASHC #3,R2 ;MULTIPLY BY 8 ADD R4,R3 ;ADD DIGIT TO NUMBER SOB R5,10$ ;GET NEXT CHARACTER 20$: CLC ;CLEAR CARRY FOR NORMAL RETURN BR 40$ 30$: SEC ;SET CARRY -- NUMBER NOT FOUND 40$: POP R4,R5 ;RESTORE REGISTERS DEC R0 ;BACK UP LINE POINTER TO TERMINATOR RETURN ; ; ; ; .END