.TITLE OPEN AND CLOSE ROUTINES .MCALL ..V2..,.REGDEF,.CSIGEN,.CLOSE,.PRINT,.READ,.READW .MCALL .WAIT,.WRITW,.LOOKUP,.GTIM,.RCTRLO,.EXIT ..V2.. .REGDEF .GLOBL OPEN,CLOSE,TMP,HNDLR,EXT,CHRWD,PRSTAT,OPTN,DEBUG .GLOBL LIN,FINLIN,IOARA,INBLK,OUTBLK,INBFPT,OTBFPT,INBUF .GLOBL LOWAV,HIGHAV,LOWPTR,HIGPTR,LINCTR,NOSRC,TIME,EXT .GLOBL OUTBUF,GETLIN,PRTLIN,NAMCTR,ENTCTR,HNDLR,SRCSYM .GLOBL PUTCHR,SNGCOM,SUPER,OUTSUP .PAGE .MACRO CKSW LT,LOC CMPB #''LT,R1 BEQ LOC .ENDM .CSECT OPNCLO 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 .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 .READ #IOARA,#3,#INBUF,#256.,INBLK ;GET FIRST BUFER FULL OF INPUT MOV #INBUF,INBFPT ;INIT BUFFER POINTERS .WAIT #3 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/ M0: .ASCII <14>/ / INSTR: .REPT 82. .BYTE 0 .ENDM 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 .END