.TITLE ISTMT .IDENT /V01/ ;+ ; ISTMT---INTEGER FUNCTION TO IDENTIFY AS ; FORTRAN STATEMENT BY NUMBER ; ; ; STATEMENT LIST APPEARS AT LOCATION ; "STMTS". ; ; THE STATEMENT MAY BE RECORDERED-BUT STATEMENTS ; WHICH ARE TOALLY CONTAINED WITHIN OTHER STATEMENTS ; MUST BE ORDER SO THE SUPER SET APPEARS FIRST. ; IE: ; "DOUBLE" MUST APPEAR PRIOR TO "DO" IN THE ; LIST ;- .MCALL RETURN .PSECT $PDAT CON,D,RW,LCL ALPHTB: .BYTE 'C .BYTE 'D .BYTE 'E .BYTE 'F .BYTE 'I .BYTE 'P .BYTE 'S .BYTE -1 .EVEN ADTBL:.WORD $A .WORD $C .WORD $D .WORD $E .WORD $F .WORD $I .WORD $P .WORD $S .NLIST MEB $A: STMTS:.ASCII 'ACCEPT' <-22.> .ASCII 'ASSIGN' <-2> .ASCII 'BACKSPACE' <-3> .ASCII 'BLOCKDATA' <-4> .ASCII 'BYTE' <-5> $C: .ASCII 'CALL' <-6> .ASCII 'CLOSE(' <-7> .ASCII 'COMMON' <-8.> .ASCII 'COMPLEX' <-5> .ASCII 'CONTINUE' <-24.> $D: .ASCII 'DATA' <-9.> .ASCII 'DECODE(' <-10.> .ASCII 'DEFINEFILE' <-11.> .ASCII 'DIMENSION' <-12.> .ASCII 'DOUBLEPRECISION' <-5> .ASCII 'DOUBLE' <-5> .ASCII 'DO' <-13.> $E: .ASCII 'ENCODE(' <-10.> .ASCII 'ENDFILE' <-3> .ASCII 'END' <0> <-23.> .ASCII 'ENTRY' <-14.> .ASCII 'EQUIVALENCE(' <-16.> .ASCII 'EXTERNAL' <-15.> $F: .ASCII 'FIND' <-3> .ASCII 'FORMAT(' <-24.> .ASCII 'FUNCTION' <-4> .ASCII 'GOTO' <-17.> $I: .ASCII 'IF(' <-18.> .ASCII 'IMPLICIT' <-24.> .ASCII 'INCLUDE' <-19.> .ASCII 'INTEGER' <-5> .ASCII 'LOGICAL' <-5> .ASCII 'OPEN(' <-7> $P: .ASCII 'PARAMETER' <-20.> .ASCII 'PAUSE' <-16> .ASCII 'PRINT' <-22.> .ASCII 'PROGRAM' <-4> .ASCII 'READ(' <-21.> .ASCII 'READ' <-22.> .ASCII 'REAL' <-5.> .ASCII 'RETURN' <-16.> .ASCII 'REWIND' <-3.> $S: .ASCII 'STOP' <-16.> .ASCII 'SUBROUTINE' <-4> .ASCII 'TYPE' <-22.> .ASCII 'WRITE(' <-21.> .BYTE 0 .EVEN .PSECT $CODE CON,I,RW,LCL ISTMT:: MOV #ALPHTB,R0 ;POINT TO ALPHA TABLE MOV #40,R4 ;GET AN ASCII BLANK MOV 2(R5),R3 ;BASE OF ARRAY ADD @4(R5),R3 ;ADD FORTRAN(BYTE) INDEX DEC R3 ;ADJ FOR ZERO OFFSET MOV #-1,R1 ;GREAT INDEX 10$: INC R1 ;COUNT INDEX CMPB (R3),(R0)+ ;CHECK FOR ENTRY BHIS 10$ ;BR IF NOT IT ASL R1 ;GOT-IT-MAKE WORD INDEX MOV ADTBL(R1),R1 ;GET PLACE TO START 20$: MOV R3,R2 ;COPY ADR OF TARGET CMPB (R2)+,(R1)+ ; BLO 60$ ;BR IF NO WAY BNE 50$ 30$: CMPB R4,(R2) ;SPACE? BNE 40$ ;IF NO-CONTINUE INC R2 ;IF YES-IGNOR IT BR 30$ ;CK IF MORE SPACES 40$: CMPB (R2),(R1)+ ;CK A CHAR BNE 50$ ;BR IF NO MATCH TSTB (R2) ;WAS IT A NULL (END ST.) BEQ 45$ ;IF EQ YES TSTB (R2)+ ;STEP TO NEXT BYTE 45$: MOVB (R1),R0 ;ASSUME DONE BPL 30$ ;BR IF NOT NEG R0 ;MAKE POSITIVE SUB R3,R2 ;FIND INDEX DEC R2 ;BACK UP TO LAST CHAR PROCESSED ADD R2,@4(R5) ;FIX UP INDEX TO POINT AT LAST CHAR USED BR 99$ 50$: TSTB (R1)+ ;SKIP TO END BPL 50$ ;KEEP SKIPING TSTB (R1) ;THE BIG END BGT 20$ ;BRIF NO 60$: MOV #1,R0 ;RETURN A 1 99$: RETURN .END