         .OUTPI ALFRES
         .ENTRY E,D,K,D2,D3,P,LINEL,KEY,ADR,LEN,KDEV,PDEV
         .ENTRY SCRPRT,PRCHAR,CGET,CPUT,BGET,BPUT,GETK,GETCHR,GETLIN
         .ENTRY CLOSE,CAPS,CAPLIN,OPNIN,OPNOUT,OPNUPD,OPNAPP,OPNDIR
         .ENTRY SUBINI,SUBXIT
;Contains some useful code expansions
E        =   $00     ;CHANNEL 3 FOR SCREEN
D        =   $10     ;CHANNEL 1 FOR DISK
K        =   $20     ;CHANNEL 2 FOR KEYBOARD
D2       =   $30
D3       =   $40
P        =   $50
LINEL    .BYTE 0     ;Length of Line
KEY      .BYTE 0
ADR      .WORD 0
LEN      .WORD 0
SAVA     .BYTE 0
SAVY     .BYTE 0
SREG     .BYTE 0,0,0
KDEV     .BYTE "K:",$9B
PDEV     .BYTE "P3:",$9B
;SCRPRT PRINTS A LINE ON THE SCREEN
;STOPPING AT $00 OR $9B (DOESN'T SEND $00)
;INVOKES PRCHAR TO DO FUNCTION
SCRPRT   STX SCR01+1
         STY SCR01+2 ;HOLD FOR LOAD
         LDY #0      ;START HERE
SCR01    LDA SCR01,Y ;GET CHAR
         BEQ SCR02   ;STOP AT $00
         JSR PRCHAR  ;PUT ON SCREEN
         INY
         BNE SCR01   ;BR BACK
SCR02    RTS
PRCHAR   STX SREG
         STY SREG+1
         STA SREG+2
         LDX #E
         LDA #11
         STA $0342,X
         LDA #0
         STA $0348,X
         STA $0349,X
         LDA SREG+2
         JSR $E456
         LDA SREG+2
         LDX SREG
         LDY SREG+1
         RTS
;BGET & BPUT ARE 2 ENTRY POINTS TO BINIO
;X=CHAN,LEN & ADR MUST BE PRELOADED
;AFTER THE JSR, THEY ARE UPDATED FROM THE IOCB
;
CGET     LDA #5
         BNE BINIO
CPUT     LDA #9
         BNE BINIO
BGET     LDA #7
         BNE BINIO   ;BR OVER BPUT
BPUT     LDA #11
;
BINIO    STA $0342,X ;SET COMMAND
         LDA ADR
         STA $0344,X
         LDA ADR+1
         STA $0345,X
         LDA LEN
         STA $0348,X
         LDA LEN+1
         STA $0349,X
         JSR $E456
         PHP
         LDA $0348,X
         STA LEN
         LDA $0349,X
         STA LEN+1
         PLP
         RTS
;GETLIN,GETCHR,OUTPUT ALL TIE TOGETHER
;
GETK     LDX #K
         BNE GETC01
GETCHR   LDX #E
GETC01   LDA #7
         STA $0342,X
         LDA #0
         STA $0348,X
         STA $0349,X
         JSR $E456
         RTS
;
GETLIN   LDA #0
         STA LINEL   ;RESET LINE LENGTH
GETL1    JSR GETCHR
GETL2    CMP #$7E    ;BAKSPACE
         BEQ GETL4
         CMP #$9B    ;EOL ?
         BEQ GETL3
         LDY LINEL   ;GET LENGTH
         CPY #78     ;40 COLS
         BCS GETL1   ;NOT YET
         STA LINE,Y  ;STORE KEY
         INC LINEL
         JMP GETL1   ;GET NEXT KEY
GETL3    LDY LINEL
         STA LINE,Y
         RTS
GETL4    DEC LINEL
         LDA #$7E
         JMP GETL1
;
CLOSE    LDA #12
         STA $0342,X
         JSR $E456
         RTS
;
;CAPS & CAPLINE GO TOGETHER TO
;UPPERCASE COMMANDS
CAPS     CMP #123
         BCC CAP1
         RTS
CAP1     CMP #97
         BCS CAP2
         RTS
CAP2     SBC #32
         RTS
;
CAPLIN   LDY LINEL   ;LOAD LINE LENGTH
         BEQ CAPL2
         DEY         ;DOWN FOR OFFSET
         TYA
         CMP #82
         BCS CAPL2
CAPL1    LDA LINE,Y
         JSR CAPS
         STA LINE,Y
         DEY
         BPL CAPL1
CAPL2    RTS
;NEW OPEN HANDLER - HANDLES ALL OPEN CALLS
;6 ENTRY POINTS- OPNIN,OPENOUT,OPENUPD,OPENAPP,OPENDIR
;OPEN13(MDM,E:)
OPNIN    PHA
         LDA #4
         BNE OPEN
OPNOUT   PHA
         LDA #8
         BNE OPEN
OPNUPD   PHA
         LDA #12
         BNE OPEN
OPNAPP   PHA
         LDA #9
         BNE OPEN
OPNDIR   PHA
         LDA #6
OPEN     STA SAVA    ;SAVE OPEN CODE
         STY SAVY    ;AND MSB OF FILENAME
         JSR CLOSE   ;CLOSE CHANNEL FIRST
         LDA #3      ;OPEN COMMAND
         STA $0342,X
         LDA SAVA    ;OPEN CODE
         STA $034A,X
         LDA SAVY    ;MSB OF NAME
         STA $0345,X
         PLA
         STA $0344,X ;LSB OF NAME
         LDA #0
         STA $034B,X
         JSR $E456
         RTS
;Subroutine initializer
SUBINI   LDX #D
         JSR CLOSE
         LDX #K
         LDA #.LO.KDEV
         LDY #.HI.KDEV
         JSR OPNIN
         RTS
SUBXIT   LDX #D
         JSR CLOSE
         LDX #K
         JSR CLOSE
         RTS
