.TITLE OPEN AND CLOSE ROUTINES .MCALL .CSIGEN,.CLOSE,.PRINT,.READ,.READW .MCALL .WAIT,.WRITW,.LOOKUP,.RCTRLO,.EXIT .GLOBL OPEN,CLOSE,TMP,HNDLR,EXT,CHRWD,PRSTAT,OPTN,DEBUG .GLOBL LIN,FINLIN,IOARA,INBLK,OUTBLK,INBFPT,OTBFPT,INBUF .GLOBL LOWAV,HIGHAV,LINCTR,NOSRC,TIME,EXT .GLOBL OUTBUF,GETLIN,PRTLIN,NAMCTR,ENTCTR,HNDLR,SRCSYM .GLOBL PUTCHR,SNGCOM,SUPER,OUTSUP,ICHNO,ERRCNT .PAGE .MACRO CKSW LT,LOC CMPB #''LT,R1 BEQ LOC .ENDM .PSECT OPNCLO,I,RO,GBL OPEN: .RCTRLO MOV SP,TMP 1$: .CSIGEN LOWAV,#EXT,#0,#INSTR ; GET COMMAND STRING FROM CONSOLE DEVICE BCS 1$ ; RETRY ON ERROR MOV R0,LOWAV ; LOC AFTER HNDLER AVAIL FOR BUFFER ADD #20.,R0 CMP R0,HIGHAV ; ENOUGH ROMM FOR SYMBOL TABLE BLO 2$ .PRINT #FULL BISB #10,@#54 INC ERRCNT CLR R0 .EXIT 2$: MOV #10,CHRWD ; DEFALT IS TTY MODE FOR OUTPUT(72 COL) ; OR 8 HOW USED PER LINE CLR PRSTAT ; SET ALL FLAGS TO DEFALT CONDITIONS CLR OPTN CLR DEBUG CLR NOSRC CLR SUPER ; NO SUPER INDEX DEFAULT CLR SNGCOM ; NO SINGLRE COMMON/TYPE DEFAULT MOV #LIN+72.,FINLIN TST (SP) ; ANY SWITCHES BEQ NOSWTC ; NO-SKIP NEXT MOV (SP)+,R0 ; STO NO OF SWITCHES IN R0 SWCK: MOVB (SP),R1 ; GET SWITCH CKSW A,STAT CKSW C,SHORT CKSW D,DBUG CKSW E,COL80 CKSW H,HELP CKSW I,PRGSPR CKSW L,LPMODE CKSW N,NOSR CKSW O,OPT CKSW S,ISUPER CKSW U,UNUSED BR VALCK ; UNKNOWN SWITCH-SKIP VALUE IF ANY SWCFT: MOV TMP,SP .PRINT #CONFLT BR OPEN UNUSED: TST SNGCOM ; IS THEIR A CONFLICT IN /U AND /C SWITCHES BGT SWCFT ; IF YES EROR OUT OF COMMAND DEC SNGCOM BR VALCK SHORT: TST SNGCOM BLT SWCFT INC SNGCOM ; DELETE UNUSED VARS BR VALCK PRGSPR: DEC SUPER ; SIGNAL TO DUMP SUPER INDEX TABEL WHEN SW DOME BR VALCK ISUPER: INC SUPER ; PUT INPUT INTO SUPER INDEX BR VALCK DBUG: INC DEBUG VALCK: TST (SP)+ ; SKIP ANY SWITCH VALUE BGE NOVAL TST (SP)+ NOVAL: DEC R0 ; ANY MORE SWITCHES BNE SWCK ; IF YESS GO BACK AND REPEAT BR NOSWTC COL80: MOV #LIN+80.,FINLIN BR VALCK LPMODE: MOV #15.,CHRWD BR VALCK ; SET LP MODE 132 COL-15 HOWUSED PER LINE STAT: INC PRSTAT ; PRINT STATISTICS WHEN DONE BR VALCK NOSR: INC NOSRC BR VALCK OPT: INC OPTN ; PRINT OPTINS IN EFFECT BR VALCK HELP: .LOOKUP #IOARA,#5,#HLPFIL CLR INBLK LBH: .READW #IOARA,#5,#INBUF,#256.,INBLK BCS NDH .PRINT #INBUF INC INBLK BR LBH NDH: .CLOSE #5 MOV TMP,SP GOBAK: JMP OPEN NOSWTC: MOV TMP,SP ; RESET STACK .WAIT #0 ; CHAN 0 OPEN 6$: BCS GOBAK ; NO ERROR CLR OUTBLK MOV #256.,R1 MOV #OUTBUF,R2 ; ZERO OUTPUT BUFFER CLR: CLR (R2)+ DEC R1 BNE CLR MOV #OUTBUF,OTBFPT TST SUPER BGE 1$ ; IF NO DUMP OF SUPER TABLE-SKIP NEXT JSR PC,OUTSUP JMP OPEN ; AND GET NEW COMMAND STRING 1$: .WAIT #3 ; INPUT CHAN OPEN BCS GOBAK ; NO ERROR CLR INBLK MOV #3,ICHNO ; SET DEFAULT INPUT CHAN NUMBER .READ #IOARA,ICHNO,#INBUF,#256.,INBLK ; GET FIRST BUFER FULL OF INPUT MOV #INBUF,INBFPT ; INIT BUFFER POINTERS .WAIT ICHNO CMPB #15,INBUF ; IS FIRST CHR BNE NOCR ; NO SKIP BNEXT INC INBFPT ; SKIP CR NOCR: INC INBLK JSR PC,GETLIN ; INIT LINE TST OPTN ; PRINT OTIONS IN EFFECT??? BEQ NOOPT ; NO SKIP NEXT MOV #-63,LINCTR MOV #-1,SRCSYM MOV #M0,R0 JSR PC,PRTLIN MOV #M1,R0 JSR PC,PRTLIN MOV #M2,R0 TST DEBUG BEQ 1$ MOV #M2A,R0 1$: JSR PC,PRTLIN MOV #M3,R0 CMP #LIN+72.,FINLIN BEQ 2$ MOV #M3A,R0 2$: JSR PC,PRTLIN MOV #M4,R0 CMP #10,CHRWD BEQ 3$ MOV #M4A,R0 3$: JSR PC,PRTLIN MOV #M5,R0 TST PRSTAT BEQ 4$ MOV #M5A,R0 4$: JSR PC,PRTLIN MOV #M6,R0 TST NOSRC BEQ 5$ MOV #M6A,R0 5$: JSR PC,PRTLIN MOV #M7,R0 TST SNGCOM BEQ 6$ BLT 8$ MOV #M7A,R0 BR 6$ 8$: MOV #M7B,R0 6$: JSR PC,PRTLIN MOV #M8,R0 TST SUPER BEQ 7$ MOV #M8A,R0 7$: JSR PC,PRTLIN CLR SRCSYM NOOPT: CLR NAMCTR CLR LINCTR CLR ENTCTR ; THE FOLLOWING IS TAKEN FROM THE SYSLIB ROUTINE 'TIME' MOV #TIME,-(SP) MOV #1,-(SP) MOV SP,R5 JSR PC,TIM CMP (SP)+,(SP)+ RTS PC TIM: CMP -(SP),-(SP) MOV SP,R0 MOV 2(R5),-(SP) MOV R0,-(SP) MOV #10400,-(SP) MOV SP,R0 EMT 375 MOV #2,(SP) MOV SP,R5 JSR PC,TMAS ADD #12,SP RTS PC TMAS: TST (R5)+ MOV (R5)+,R1 MOV (R1)+,R0 MOV (R1),R1 MOV #-1,-(SP) JSR PC,A JSR PC,D MOV R3,-(SP) JSR PC,D MOV R3,-(SP) MOV R1,R3 MOV (R5),R5 BR E F: MOVB #72,(R5)+ E: ADD #366,R3 TSTB R3 BPL E ADD #27472,R3 SWAB R3 MOVB R3,(R5)+ SWAB R3 MOVB R3,(R5)+ MOV (SP)+,R3 BPL F RTS PC A: MOV #62,R4 MOV @#54,R3 BIT #40,300(R3) BNE H D: MOV #74,R4 H: CLR R3 MOV #40,-(SP) C: ASL R1 ROL R0 ROL R3 CMP R3,R4 BLO B SUB R4,R3 INC R1 B: DEC (SP) BNE C TST (SP)+ RTS PC .PAGE CLOSE: MOV #14,R0 JSR PC,PUTCHR CMP #OUTBUF,OTBFPT BEQ MTBUF .WRITW #IOARA,#0,#OUTBUF,#256.,OUTBLK MTBUF: .CLOSE #0 .CLOSE #3 RTS PC .PAGE EXT: .RAD50 /FOR/ .RAD50 /IDX/ .WORD 0,0,0 HLPFIL: .RAD50 /SY / .RAD50 /IND/ .RAD50 /EX / .RAD50 /HLP/ CONFLT: .ASCIZ /INDEX-W SWITCH CONFLICT ERROR/ .EVEN FULL: .ASCII /INDEX-F NON-RESIDENT/ .ASCIZ / HANDLERS HAVE USED UP SYMBOL TABLE SPACE-ABORT/ .EVEN M1: .ASCIZ / INDEX OPTIONS IN EFFECT/ .EVEN M2: .ASCIZ / TREAT DEBUG LINES AS COMMENTS/ .EVEN M2A: .ASCIZ / TREAT DEBUG LINES AS SOURCE CODE/ .EVEN M3: .ASCIZ / USE FIRST 72 COL OF INPUT RECORD FOR SOURCE/ .EVEN M3A: .ASCIZ / USE FIRST 80 COL OF INPUT RECORD FOR SOURCE/ .EVEN M4: .ASCIZ / OUTPUT TO 72 COL DEVICE(TTY MODE)/ .EVEN M4A: .ASCIZ / OUTPUT TO 132 COL DEVICE(LP MODE)/ .EVEN M5: .ASCIZ / DO NOT PRINT INDEX STATISTICS/ .EVEN M5A: .ASCIZ / PRINT INDEX STATISTICS/ .EVEN M6: .ASCIZ / LIST SOURCE/ .EVEN M6A: .ASCIZ / DO NOT LIST SOURCE/ .EVEN M7: .ASCIZ / INDEX ALL VARIABLES/ .EVEN M7A: .ASCIZ ? DO NOT INDEX COMMON/TYPE DECLARED ONLY VARIABLES? .EVEN M7B: .ASCIZ ? INDEX COMMON/TYPE DECLARED BUT UNUSED VARIABLES? .EVEN M8: .ASCIZ / PROGRAM VARIABLES NOT SAVED FOR SUPER INDEX/ .EVEN M8A: .ASCIZ / PROGRAM VARIABLES SAVED FOR SUPER INDEX/ .EVEN .PSECT OPNLIN,D,RW,GBL M0: .ASCII <14>/ / INSTR: .REPT 82. .BYTE 0 .ENDM .END