PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BOOT/BIN/EDIT *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I *-------------------------------------- ZPPTR1 .EQ ZPBIN ZPPTR2 .EQ ZPBIN+2 BufPtr .EQ ZPBIN+4 BufPtrBackup .EQ ZPBIN+6 ClipboardPtr .EQ ZPBIN+8 *-------------------------------------- PromptBufferMax .EQ 64 PromptModeHelp .EQ 2 PromptModeFind .EQ 4 PromptModeReplace .EQ 6 PromptModeSave .EQ 8 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA 0 .DA CS.END-CS.START Code Length To Relocate .DA DS.END-DS.START Data Segment to Allocate .DA 0 .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.SEQ.DETECT .DA SEQ.DETECT L.SEQ.INIT .DA SEQ.INIT L.SEQ.RESET .DA SEQ.RESET L.SEQ.INV .DA SEQ.INV L.SEQ.NORM .DA SEQ.NORM L.SEQ.CEOL .DA SEQ.CEOL L.MSG.TOPBAR .DA MSG.TOPBAR L.MSG.STATUSBAR .DA MSG.STATUSBAR L.MSG.STATUSBAR.H .DA MSG.STATUSBAR.H L.MSG.STATUSBAR.F .DA MSG.STATUSBAR.F L.MSG.STATUSBAR.R .DA MSG.STATUSBAR.R L.MSG.STATUSBAR.S .DA MSG.STATUSBAR.S L.MSG.STATUSBAR.E .DA MSG.STATUSBAR.E L.MSG.NEWFILE .DA MSG.NEWFILE L.MSG.GOTOXY .DA MSG.GOTOXY L.MSG.HELP .DA MSG.HELP J.PROMPT .DA Prompt.Editor .DA Prompt.Help .DA Prompt.Find .DA Prompt.Replace .DA Prompt.Save J.CTRL .DA Ctrl.Invalid .DA Ctrl.A .DA Ctrl.B .DA Ctrl.C .DA Ctrl.D .DA Ctrl.E .DA Ctrl.F .DA Ctrl.G .DA Ctrl.BS .DA Ctrl.TAB .DA Ctrl.LF .DA Ctrl.VT .DA Ctrl.L .DA Ctrl.CR .DA Ctrl.N .DA Ctrl.O .DA Ctrl.P .DA Ctrl.Q .DA Ctrl.R .DA Ctrl.S .DA Ctrl.T .DA Ctrl.FS .DA Ctrl.V .DA Ctrl.W .DA Ctrl.X .DA Ctrl.Y .DA Ctrl.Z .DA Ctrl.ESC .DA Ctrl.Invalid .DA Ctrl.Invalid .DA Ctrl.Invalid .DA Ctrl.Invalid .DA 0 *-------------------------------------- CS.INIT stz hFile stz TmpLen stz TmpLen+1 lda #$ff ldy #bSaved sta (pData),y ldy #S.PS.hARGS lda (pPs),y beq .3 >SYSCALL SYS.GetMemPtrA >STYA ZPPTR1 lda (ZPPTR1) cmp #'/' bne .1 ldy #S.PS.hARGS lda (pPs),y >SYSCALL SYS.PStrCpyA bra .2 .1 ldy #S.PS.hARGS lda (pPs),y >PUSHA ldy #S.PS.hPREFIX lda (pPs),y >PUSHA >SYSCALL SYS.PStrCat .2 ldy #hFileName sta (pData),y >SYSCALL SYS.LoadFileA bcs .3 stx hFile >STYA TmpLen .3 >LDYA TmpLen iny bne .4 inc .4 >PUSHYA >PUSHBI S.MEM.F.INIT0 >SYSCALL SYS.GetMem bcs .98 >STYA ZPPTR2 txa ldy #hBuffer sta (pData),y lda hFile beq .7 >SYSCALL SYS.GetMemPtrA >STYA ZPPTR1 >LDYA TmpLen >STYA TmpCount ldy #0 .5 jsr DecTmpCount beq .6 lda (ZPPTR1),y sta (ZPPTR2),y iny bne .5 inc ZPPTR1+1 inc ZPPTR2+1 bra .5 .6 jsr .98 .7 ldy #FileLen lda TmpLen sta (pData),y iny lda TmpLen+1 sta (pData),y lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc rts .98 lda hFile beq .99 >SYSCALL SYS.FreeMemA sec .99 rts *-------------------------------------- CS.RUN ldy #bCancel lda (pData),y bne .9 ldy #bInit lda (pData),y bne .8 >LDYA L.SEQ.DETECT >SYSCALL SYS.PSTRoutYA Send Query for term W & H bcs .9 .1 ldy #bCancel lda (pData),y bne .9 >SYSCALL SYS.Sleep ldy #ScreenW Wait for Response from terminal lda (pData),y for W & H beq .1 jsr SCRN.Init bcs .9 ldy #bInit lda #$ff sta (pData),y .8 clc rts .9 sec rts *-------------------------------------- CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? lda (pEvent),y ldy #S.PS.hINDEV cmp (pPs),y bne .9 lda (pEvent) and #S.EVT.F.KEY is it a KEY event? beq .9 ldy #S.EVT.DATAHI is it an O or SAPPLE key ? lda (pEvent),y bmi .9 test only OA, bug in Applewin for #,@... * bne .9 ldy #S.EVT.DATALO lda (pEvent),y tax ldy #bEscMode lda (pData),y asl txa bcc .1 cmp #'[' beq .8 ldy #EscBuffer lda (pData),y inc sta (pData),y clc adc #EscBuffer tay txa sta (pData),y cmp #64 bcc .8 jsr CS.DOEVENT.Esc bcs .8 Not translated, exit .1 pha ldy #PromptMode lda (pData),y tax pla jmp (J.PROMPT,x) .8 clc rts .9 sec rts *-------------------------------------- CS.DOEVENT.Esc ldy #bEscMode lda #0 sta (pData),y ldy #EscBuffer lda (pData),y clc adc #EscBuffer tay lda (pData),y ldx EscChars .1 cmp EscChars,x beq .2 dex bne .1 cmp #'R' Response to cursor position query? beq .3 sec rts .2 lda EscAscii,x clc rts .3 stz TmpByte ldy #EscBuffer+1 .4 lda (pData),y cmp #';' beq .5 and #$0f pha lda TmpByte asl asl clc adc TmpByte asl sta TmpByte pla clc adc TmpByte sta TmpByte iny bra .4 .5 phy lda TmpByte ldy #ScreenH sta (pData),y ply stz TmpByte iny .6 lda (pData),y cmp #'R' beq .7 and #$0f pha lda TmpByte asl asl clc adc TmpByte asl sta TmpByte pla clc adc TmpByte sta TmpByte iny bra .6 .7 lda TmpByte ldy #ScreenW sta (pData),y clc rts *-------------------------------------- CS.QUIT ldy #hBuffer lda (pData),y beq .1 >SYSCALL SYS.FreeMemA .1 ldy #hBufferBackup lda (pData),y beq .2 >SYSCALL SYS.FreeMemA .2 ldy #hClipBoard lda (pData),y beq .3 >SYSCALL SYS.FreeMemA .3 ldy #hFileName lda (pData),y beq .8 >SYSCALL SYS.FreeMemA .8 >LDYA L.SEQ.RESET >SYSCALL SYS.PSTRoutYA bcs .9 lda #12 >SYSCALL SYS.CoutA .9 rts *-------------------------------------- SaveFile >PUSHWI 0 Aux type >PUSHBI 4 type=TXT >PUSHBI $C3 access=RW ldy #hFileName lda (pData),y >SYSCALL SYS.GetMemPtrA >PUSHYA >SYSCALL SYS.MLICreateFile bcc .1 cmp #$47 File Exists error? bne .9 no, sec;rts .1 ldy #hFileName lda (pData),y >SYSCALL SYS.MLIOpenA bcs .9 sta hFile stx TmpByte ldy #FileLen+1 >PUSHB (pData),y dey >PUSHB (pData),y ldy #hBuffer lda (pData),y >SYSCALL SYS.GetMemPtrA >PUSHYA >PUSHB hFile >SYSCALL SYS.MLIWrite bcs .99 jsr .99 clc rts .99 pha lda hFile >SYSCALL SYS.MLICloseA lda TmpByte >SYSCALL SYS.FreeMemA pla .9 sec rts *-------------------------------------- DecTmpCount lda TmpCount bne .1 lda TmpCount+1 beq .9 dec TmpCount+1 .1 dec TmpCount ora #$ff make sure NZ .9 rts *-------------------------------------- .INB BIN/EDIT.S.BUF .INB BIN/EDIT.S.CTRL .INB BIN/EDIT.S.SCRN *-------------------------------------- CS.END SEQ.DETECT >PSTRING "Querying terminal capabilities...\e[999;999H\e[6n" SEQ.INIT >PSTRING "\ec\e[2;%dr" SEQ.RESET >PSTRING "\ec" SEQ.INV >PSTRING "\e[7m" SEQ.NORM >PSTRING "\e[0m" SEQ.CEOL >PSTRING "\e[K" MSG.TOPBAR >PSTRING "\e[1;1H\e[7mA2osX Edit:%S\e[K\e[0m" MSG.STATUSBAR >PSTRING "\e[%d;1H\e[7mPress Ctrl-A For Help Length:%D Col:%d Line:%D\e[K\e[0m" MSG.STATUSBAR.H >PSTRING "\e[%d;1H\e[7mPress any key to exit this screen:\e[K\e[0m" MSG.STATUSBAR.F >PSTRING "\e[%d;1H\e[7mFind:%S\e[K\e[0m" MSG.STATUSBAR.R >PSTRING "\e[%d;1H\e[7mReplace:%S\e[K\e[0m" MSG.STATUSBAR.S >PSTRING "\e[%d;1H\e[7mSave:%S\e[K\e[0m" MSG.STATUSBAR.E >PSTRING "\e[%d;1H\e[7mError:%h\e[K\e[0m" MSG.NEWFILE >PSTRING "(new file)" MSG.GOTOXY >PSTRING "\e[%d;%dH" MSG.HELP >PSTRING "All commands: (* = Not yet implemented)" >PSTRING "------------" >PSTRING " Ctrl-A : This help screen" >PSTRING " Ctrl-B : Mark beginning of selection" >PSTRING " Ctrl-C : Copy selection to clipboard" >PSTRING " Ctrl-D : Delete selection" >PSTRING " Ctrl-E : Mark end of selection" >PSTRING " Ctrl-F : * Find a string..." >PSTRING " Ctrl-G : Go to start of current line" >PSTRING " Ctrl-L : Go to end of current line" >PSTRING " Ctrl-N : * Find next" >PSTRING " Ctrl-O : * Page up" >PSTRING " Ctrl-P : * Page down" >PSTRING " Ctrl-Q : Quit" >PSTRING " Ctrl-R : * Replace found string with..." >PSTRING " Ctrl-S : Save file to disk..." >PSTRING " Ctrl-T : Go to top of file" >PSTRING " Ctrl-V : Past clipboard at cursor position" >PSTRING " Ctrl-W : * Erase current line" >PSTRING " Ctrl-X : Cut block to clipboard" >PSTRING " Ctrl-Y : * Go to bottom of file" >PSTRING " Ctrl-Z : * Undo previous change" .HS 00 EscChars >PSTRING "DBAC" EscAscii .HS 04080A0B15 hFile .BS 1 TmpByte .BS 1 TmpLen .BS 2 TmpCount .BS 2 TmpIndex .BS 2 SelLen .BS 2 BUF.LOffset .BS 2 BUF.COffset .BS 2 BUF.TmpLine1 .BS 2 BUF.TmpLine2 .BS 2 bNotRepaint .BS 1 bSelected .BS 1 *-------------------------------------- .DUMMY .OR 0 DS.START PromptBuffer .BS PromptBufferMax+1 PromptMode .BS 1 bCancel .BS 1 bInit .BS 1 bSaved .BS 1 bEscMode .BS 1 EscBuffer .BS 16 hFileName .BS 1 hFind .BS 1 hReplace .BS 1 hBuffer .BS 1 hBufferBackup .BS 1 FileLen .BS 2 hClipBoard .BS 1 ClipBoardLen .BS 2 ScreenW .BS 1 ScreenH .BS 1 ScreenX .BS 1 ScreenY .BS 2 CurX .BS 1 CurY .BS 1 FileX .BS 1 FileY .BS 2 SelStart .BS 2 SelEnd .BS 2 DS.END .ED *-------------------------------------- MAN SAVE BIN/EDIT.S ASM