.TITLE PASCAL DRIVER FOR NBS PASCAL .IDENT /810504/ .MCALL .CHAIN,.GTLIN,.PRINT,.EXIT .NLIST BEX .CSECT PASCAL ; THIS ROUTINE PROMPTS THE TERMINAL FOR FILE NAME AND OPTIONS, ; THEN CHAINS TO PASS 1 OF NBS PASCAL FOR RT11, WHICH IN TURN ; CHAINS TO PASS 2 TO COMPLETE A COMPILATION. ; THIS ROUTINE BUILDS A NBS PASCAL COMMAND LINE AND STORES IT IN ; LOCATIONS 510 TO 633. LOCATIONS 634 AND 636 ARE FILLED WITH ; 0 AND -1, RESPECTIVELY, AS INSURANCE AGAINST A STACK OVERFLOW. ; AUTHOR: PAUL LUSTGRAAF IOWA STATE UNIVERSITY ; PASCAL:: .GTLIN #INPUT,#FILPRM ;ASK FOR FILE NAME .GTLIN #OPTS,#OPTPRM ;ASK FOR OPTIONS MOV #510,R5 ;BUILD COMMAND LINE AT 510 MOVB #'-,(R5)+ ;MUST START WITH - MOV #OPTS,R1 ;LOAD INPUT BUFFER ADDRESS 1$: MOVB (R1)+,(R5)+ ;COPY TO CHAIN AREA BNE 1$ ;IF NOT NULL, LOOP MOVB #' ,-1(R5) ;SEPARATE WITH BLANKS MOV #INPUT,R1 ;LOAD FILE NAME BUFFER ADDRESS MOV R1,R2 ;R2 POINTS AT START OF NAME CLR R3 ;R3 WILL POINT AT END OF NAME 2$: MOVB (R1)+,R4 ;PICK UP A CHARACTER BNE 3$ ;IF NOT NULL, BRANCH TST R3 ;DID WE FIND A PERIOD? BNE 7$ ;IF SO, BRANCH MOV R1,R3 ;SAVE ADDRESS SUB #2,R3 ;R3 POINTS AT LAST CHARACTER BEFORE . MOVB #'.,(R5)+ ;MOVE EXTENSION OF .PAS TO CHAIN AREA MOVB #'P,(R5)+ MOVB #'A,(R5)+ MOVB #'S,(R5)+ 7$: MOVB #' ,(R5)+ ;EACH FILE SPEC ENDS WITH BLANK BR 9$ ;BRANCH OUT OF LOOP 3$: CMPB R4,#': ;COLON? BNE 4$ ;IF NOT, BRANCH MOV R1,R2 ;R2 POINTS ONE PAST THE COLON BR 8$ ;BRANCH 4$: CMPB R4,#'. ;PERIOD? BNE 8$ ;IF NOT, BRANCH MOV R1,R3 ;POINT R3 AT LAST CHARACTER BEFORE . SUB #2,R3 8$: MOVB R4,(R5)+ ;MOVE CHARACTER TO CHAIN AREA BR 2$ ;LOOP 9$: CMP R3,R2 ;IS THERE AT LEAST ONE CHARACTER IN FILE NAME? BLO PASCAL ;IF NOT, LOOP ; ; NOW BUILD REST OF COMMAND LINE WITH DEFAULT NAME SAME AS SOURCE FILE ; AND DEFAULT EXTENSIONS OF .LST FOR LISTING FILE, .OBJ FOR OBJECT FILE, ; AND .OLS FOR OBJECT LISTING FILE. ; MOV #3,R0 ;THREE FILES NAMES TO BUILD MOV #EXT,R1 ;LOAD ADDRESS OF EXTENSION TABLE 10$: MOV R2,R4 ;LOAD ADDRESS OF FILE NAME 11$: MOVB (R4)+,(R5)+ ;MOVE FILE NAME TO CHAIN AREA CMP R4,R3 ;DONE? BLOS 11$ ;IF NOT, LOOP 12$: MOVB (R1)+,R4 ;PICK UP A CHARACTER MOVB R4,(R5)+ ;MOVE EXTENSION TO CHAIN AREA CMPB R4,#' ;WAS IT A BLANK? BNE 12$ ;IF NOT, LOOP SOB R0,10$ ;COUNT LOOP CLRB -(R5) ;COMMAND LINE MUST END WITH A NULL BYTE ; ; NOW MOVE RADIX 50 FILE NAME FOR PASS 1 TO CHAIN AREA ; MOV PASS1,@#500 ;MOVE CHAIN BLOCK TO CHAIN AREA MOV PASS1+2,@#502 MOV PASS1+4,@#504 MOV PASS1+6,@#506 CLR @#634 ;CLEAR 634 FOR OVERFLOW INDICATOR MOV #-1,@#636 ;(636)=-1 .CHAIN ;CHAIN TO PASS 1 .PAGE .ENABL LC FILPRM: .ASCII /NBS Pascal v1.6g/<15><12>/Enter source file name: /<200> OPTPRM: .ASCII /Enter options (LWOPSTEX): /<200> EXT: .ASCII /.LST[-1] .OBJ .OLS / .EVEN PASS1: .RAD50 /SY NBSPS1SAV/ INPUT: .BLKW 41. OPTS: .BLKW 41. .END PASCAL