.TITLE OPEN/CLOSE .MCALL ..V2..,.REGDEF ..V2.. .REGDEF .MCALL .PRINT .GLOBL DEBUG,FINLIN,LIN .GLOBL CHRWD .GLOBL INBFPT,OTBFPT,GETLIN,OPEN,CLOSE,LOWAV .GLOBL INBUF,OUTBUF,HNDLR,INBLK,OUTBLK,LINENO .MCALL .CLOSE,.CSIGEN,.WAIT,.READ,.WRITW,.SRESET .CSECT OPNCLO ; OPEN: ;OPENS AND INITIALIZES INDEX FOR EACH NEW INPUT FILE MOV SP,TMPSTK .CSIGEN #HNDLR,#EXT,#0 ;GET COMMAND STRING FROM TT: MOV R0,LOWAV MOV #10,CHRWD ;DEFALT IS TTY OUTPUT-8 HOW USED ;PER LINE CLR DEBUG ;DEFALT DEBUG LINES ARE COMMENTS MOV #LIN+72.,FINLIN ;DEFALT-USE COLLS 7-72 FOR CODE TST (SP) ;ANY SWITHCES??? BEQ NOSWTC ;NO SKIP NEXT MOV (SP)+,R0 ;GET NUMBER OF SWITCHES SWCK: MOVB (SP),R1 ;GET SWITCH CHR CMPB #'H,R1 ;WAS IT FOR HELP BEQ HELP CMPB #'L,R1 ;FOR 132 COL OUTPUT BEQ LPMODE CMPB #'E,R1 ;80 COL INPUT BEQ COL80 CMPB #'D,R1 ;DEBUG LINES AS SOURCE CODE BEQ DBUG BR VALCK ;UNKNOWN SWITCH-IGNORE DBUG: INC DEBUG ;SET DEBUG LINE FLAG VALCK: TST (SP)+ ;WAS A VALUE USED BGE NOVAL TST (SP)+ ;IF YES SKIP IT NOVAL: DEC R0 ;DEC SWITCH CTR BNE SWCK ;IF NOT DONE YET GO BACK FOR NEW SWITCH BR NOSWTC COL80: MOV #LIN+80.,FINLIN ;USE WHLOE LINE TO COL 80 FOR SOURCE BR VALCK LPMODE: MOV #15.,CHRWD ;SET LP MODE FOR OUTPUT BR VALCK HELP: .PRINT #HELPMS ;PRINT SWITCH SUMMARY MOV TMPSTK,SP ;THIS SWITCH OVERRIDES ALL ELSE BR OPEN ;AND GOES BACK TO OPEN NO MATTER WHAT ELSE WAS ; INPUTED WITH IT NOSWTC: MOV TMPSTK,SP ;RESET SP-NO SWITCHES HERE .WAIT #0 ;WAS OUTPUT SPECIFIED BCS OPEN ;NO TRY AGAIN .WAIT #3 ;WAS INPUT SPECIOFIRED BCS OPEN ;LIKEWISE TRY AGAIN CLR INBLK ;SET INPUT BLOCK NO PTR TO BLOCK 0 CLR OUTBLK ;SAME FOR OUTPUT BLOCK .READ #RDARA,#3,#INBUF,#256.,INBLK ;INITALIZE ROUTINE ;GET BLOCK 0 INTO INPUT BUFFER MOV #256.,R1 MOV #OUTBUF,R2 ;CLEAR OUTPUT BUFFER CLR: CLR (R2)+ DEC R1 BNE CLR MOV #INBUF,INBFPT ;INITIALIZE BUFFER POINTERS MOV #OUTBUF,OTBFPT .WAIT #3 ;WAIT UNTILL INPUT BUFFER FULL CMPB #15,INBUF ;IS FIRST CHR BNE NOCR ;IGNORE IT IF YES INC INBFPT NOCR: INC INBLK ;INC INPUT BUFFER POINTER NO JSR PC,GETLIN ;INITIALIZE TEMP BUFF LINE RTS PC ; CLOSE: .WRITW #RDARA,#0,#OUTBUF,#256.,OUTBLK ;INPUT FILE INDEXED ;CLOSE DOWN FOR THIS TIME .CLOSE #0 .CLOSE #3 .SRESET ;GET RID OFF ALL HANDLERS RTS PC ; DEBUG: .WORD 0 FINLIN: .WORD 0 HELPMS: .BYTE 15,14,12 .ASCII /INDEX SWITCHES:/ .BYTE 15,12,12,12 .ASCII ?/D TREAT DEBUG LINES AS SOURCE CODE? .BYTE 15,12 .ASCII ?/E EXTEND TO COL 80 ON INPUT? .BYTE 15,12 .ASCII ?/H PRINT THIS MESSAGE? .BYTE 15,12 .ASCII ?/L OUTPUT IN LINE PRINTER MODE (132 COL)? .BYTE 15,12,200 .EVEN EXT: .RAD50 /FOR/ ;DEFALT INPUT EXT=.FOR .RAD50 /IDX/ ;DEFALT OUTPUT EXT=.IDX .WORD 0,0,0 RDARA: .BLKW 6 INBLK: .WORD 0 ;INPUT FILE BLOCK NO OUTBLK: .WORD 0 ;OUTPUT FILE BLOCK NO INBFPT: .WORD 0 ;INPUT BUFFER POINTER-NEXT AVAILABLE CHR(BYTE) OTBFPT: .WORD 0 ;OUTPUT BUFFER POINTER-NEXT AVAILABLE LOC. TMPSTK: .WORD 0 ;TEMP STORAGE FOR SP .END