NEW AUTO 3,1 *-------------------------------- GET.KEY JSR READ.KEY.CODE COMP.PTR LDX POSH STX ED.PTR RTS *-------------------------------- EDIT.LINE LDA ESC.FLAG IS HE IN EDIT MODE BNE EDIT.ONE.LINE YES, GO EDIT LDA SPECIAL.FLG IS HE POPING INTO EDIT MODE? BEQ .1 NO STA ESC.FLAG YES SET EDIT MODE NOW BNE EDIT.ONE.LINE GO EDIT .1 LDA ONCE.FLG ONE TIME SCROLL FUNCTION STA ESC.FLAG BEQ GET.KEY NO, JUST RETURN KEY EDIT.ONE.LINE LDA #0 STA ONCE.FLG CLEAR ONE TIME SCROLL FUNCTION LDA FIRST.LINE COMPUTE STA CTR INIT CTR JSR P1.INIT INIT PTR1 FOR EDIT LINE SEARCH .1 JSR P1.ENDCK END OF PROG? BNE .2 NO JSR E.ESC ERROR CANT EDIT *EOF* LDA #0 CLEAR SPECIAL FLAG STA SPECIAL.FLG BEQ GET.KEY GO GET KEY FOR SCROLL MODE .2 LDA CTR SEE IF FOUND EDIT LINE CMP POSV POSV IS THE EDIT LINE WANTED BEQ E.FOUND FOUND LINE TO EDIT JSR P1.ADD BUMP FORWARD TO THE EDIT LINE INC CTR BUMP POSN CTR BNE .1 ...ALWAYS E.FOUND LDA CTR STA SAV.CTR SAVE EDIT LINE POSN LDA PTR1 STA SAV.PTR1 SAVE PTR TO IT LDA PTR1+1 STA SAV.PTR1+1 LDY #1 SAVE LINE NUMBER LDA (PTR1),Y STA SAV.LNO INY LDA (PTR1),Y STA SAV.LNO+1 JSR E.GETLN GET THE LINE INTO WBUF * PTR1 IS PTR TO SOURCE LINE * WBUF HAS LINE EXPANDED .1 JSR E.PROCESS.KEY READ AND PROCESS A KEY BCC .1 NON-EXIT TYPE KEY LDA CHANGE.FLG DID LINE CHANGE BEQ .2 NO LDA #0 YES, CLEAR CHANGE FLAG STA CHANGE.FLG JSR E.SUBMIT.LINE SUBMIT THE LINE .2 LDA ESC.FLAG STILL IN EDIT MODE BEQ EDIT.LINE NO GO GET A KEY FOR SCROLL MODE JSR E.ESC CLEAR EDIT FLAG INC ONCE.FLG SET FLAG TO SAY WE ARE DOING LDA CUR.KEY 1 SCROLL MODE FUNCTION RTS RETURN WITH A REG = FUNCTION CODE *-------------------------------- ; if skmod not installed, don't change case E.SHIFT BIT SKMOD.FLG BPL .1 LDA ALPHA.FLG EOR #$80 FLIP ALPHA LOCK FLAG STA ALPHA.FLG .1 CLC RTS *-------------------------------- READ.KEY.CODE JSR MY.RD.KBD GET KEYBOARD CHAR AND #$7F DROP SIGN BIT PHA LDA ESC.FLAG IS HE IN EDIT MODE? BNE .50 YES, SO ALLOW CASE CHANGE PLA NO, SKIP CASE CHANGE bpl .60 BA .50 PLA BIT ALPHA.FLG LOWER CASE BPL .60 NO, UPPER CASE BIT SKMOD.FLG SHFT KEY MOD? BPL .54 NO, SO DONT LOOK AT IT BIT $C063 IS SHIFT KEY DOWN? BMI .54 NO, FORCE LOWER CASE * FIX PROBLEM SHIFT CHARACTERS THAT MUST BE UPPER CASE CMP #'^ ^ -> N BNE .51 LDA #'N .51 CMP #'@ @ -> P BNE .52 LDA #'P .52 CMP #'] ] -> M BNE .53 LDA #'M .53 BNE .60 OTHERWISE USE UPERCASE VALUE * CK AND CHANGE CASE .54 CMP #'A CHANGE UPPER CASE BCC .60 ALPHA CHARS TO LOWER CMP #'Z+1 CASE. BCS .60 ORA #$20 * PROCESS OTHER SHIFT KEYS .60 BIT SKMOD.FLG BPL .2 NOT ALLOWED BIT $C063 IS SW ON BMI .2 NOPE CMP #'H-$40 CHANGE <- TO ^"K" BNE .10 LDA #'K-$40 .10 CMP #'U-$40 CHANGE -> TO ^"J" BNE .11 LDA #'J-$40 .11 PHA LDA ESC.FLAG IF NOT IN EDIT MODE BNE .1 EDIT MODE, NO CAN DO! PLA CMP #'I CHANGE SHIFT I TO "2" BNE .12 LDA #'2 .12 CMP #'] CHANGE SHIFT M TO "1" BNE .2 LDA #'1 PHA .1 PLA .2 STA CUR.KEY RTS *-------------------------------- P1.INIT LDA PP.BEG SET PTR1 TO PROG START STA PTR1 LDA PP.BEG+1 STA PTR1+1 RTS *-------------------------------- P1.ENDCK LDA PTR1 CK FOR PTR1=END OF PROG CMP PP.END BNE .1 LDA PTR1+1 CMP PP.END+1 .1 RTS *-------------------------------- P1.ADD LDY #0 BUMP UP TO NEXT PROG LINE LDA (PTR1),Y CLC ADC PTR1 STA PTR1 BCC .1 INC PTR1+1 .1 RTS *-------------------------------- E.SET.TAB TXA SEC SBC #START.COL-1 CONVERT POSH TO TAB VALUES TAX LDY #0 .1 CMP TAB.TBL,Y SEARCH TAB TABLE BEQ .10 MATCH EXACTLY MEANS DELETE BCC .20 IF POSH=POSH