NEW AUTO 3,1 .LIST OFF *-------------------------------------- BUF.InsertA sta TmpByte jsr BUF.ComputeCOffset cpy #255 beq .8 lda BUF.COffset clc >ADC.G BufBase tax lda BUF.COffset+1 >ADC.G BufBase+1 sta BufPtr+1 inx bne .1 inc .1 stx BufPtrDst sta BufPtrDst+1 jsr BUF.MoveForwardTail .2 lda TmpByte sta (BufPtr) inc FileLen bne .8 inc FileLen+1 .8 clc .9 rts *-------------------------------------- BUF.DelCharAtCursor lda (BufPtr) pha Save deleted char for later >LDYA BufPtr >STYA BufPtrDst iny bne .1 inc .1 >STYA BufPtr jsr BUF.MoveBackTail lda FileLen bne .5 dec FileLen+1 .5 dec FileLen jsr BUF.ResetSel pla Get back deleted char clc .9 rts *-------------------------------------- BUF.InsertClipboard >LDA.G hClipBoard beq .8 >SYSCALL GetMemPtr >STYA ClipboardPtr jsr BUF.ComputeCOffset lda FileLen sec ldy #ClipboardLen adc (pData),y pha lda FileLen+1 iny adc (pData),y ply jsr BUF.GetNewYA bcs .9 >LDYA BUF.COffset jsr BUF.Start2YA jsr BUF.CopyClipboard jsr BUF.CopyTail >LDA.G ClipboardLen clc adc FileLen sta FileLen iny lda (pData),y adc FileLen+1 sta FileLen+1 .8 clc .9 rts *-------------------------------------- BUF.InsertTAB jsr BUF.ComputeCOffset cpy #256-TABLEN beq .8 lda FileLen sec adc #TABLEN tay lda FileLen+1 adc #0 jsr BUF.GetNewYA bcs .9 >LDYA BUF.COffset jsr BUF.Start2YA ldy #TABLEN lda #C.SPACE .1 sta (BufPtr) inc BufPtr bne .2 inc BufPtr+1 .2 dey bne .1 .3 jsr BUF.CopyTail .4 lda FileLen clc adc #TABLEN sta FileLen bcc .8 inc FileLen+1 .8 clc .9 rts *-------------------------------------- BUF.DelSel jsr BUF.GetSelLen bcs .8 lda FileLen sec sbc SelLen tay lda FileLen+1 sbc SelLen+1 iny bne .1 inc .1 jsr BUF.GetNewYA bcs .9 >LDYA.G SelStart jsr BUF.Start2YA lda BufPtrBackup clc adc SelLen sta BufPtrBackup lda BufPtrBackup+1 adc SelLen+1 sta BufPtrBackup+1 jsr BUF.CopyTail lda FileLen sec sbc SelLen sta FileLen lda FileLen+1 sbc SelLen+1 sta FileLen+1 jsr BUF.ResetSel .8 clc .9 rts *-------------------------------------- BUF.SelToClipboard jsr BUF.GetSelLen bcs .8 >LDA.G hClipBoard beq .1 >SYSCALL FreeMem >STZ.G hClipBoard .1 >LDYA SelLen >SYSCALL GetMem bcs .9 >STYA ClipboardPtr txa >STA.G hClipBoard >LDA.G hBuffer >SYSCALL GetMemPtr pha tya clc >ADC.G SelStart sta BufPtr pla iny SelStart+1 adc (pData),y sta BufPtr+1 lda SelLen >STA.G ClipBoardLen eor #$ff tax iny lda SelLen+1 sta (pData),y eor #$ff pha ldy #0 .2 inx bne .3 pla inc beq .8 pha .3 lda (BufPtr),y sta (ClipboardPtr),y iny bne .2 inc BufPtr+1 inc ClipboardPtr+1 bra .2 .8 clc .9 rts *-------------------------------------- BUF.CopyClipboard >LDA.G ClipboardLen eor #$ff tax iny lda (pData),y eor #$ff pha ldy #0 .1 inx bne .2 pla inc beq .3 pha .2 lda (ClipboardPtr),y sta (BufPtr),y iny bne .1 inc ClipboardPtr+1 inc BufPtr+1 bra .1 .3 tya clc adc ClipboardPtr sta ClipboardPtr bcc BUF.CopyAddY inc ClipboardPtr+1 BUF.CopyAddY tya clc adc BufPtr sta BufPtr bcc .2 inc BufPtr+1 .2 rts *-------------------------------------- BUF.Start2YA eor #$ff pha tya eor #$ff tax ldy #0 .1 inx bne .2 pla inc beq .3 pha .2 lda (BufPtrBackup),y sta (BufPtr),y iny bne .1 inc BufPtrBackup+1 inc BufPtr+1 bra .1 .3 tya clc adc BufPtrBackup sta BufPtrBackup bcc BUF.CopyAddY inc BufPtrBackup+1 bra BUF.CopyAddY *-------------------------------------- BUF.CopyTail ldy #0 .1 lda (BufPtrBackup),y sta (BufPtr),y beq .8 iny bne .1 inc BufPtrBackup+1 inc BufPtr+1 bra .1 .8 rts *-------------------------------------- BUF.MoveBackTail ldy #0 lda BufPtr+1 pha .1 lda (BufPtr),y sta (BufPtrDst),y beq .8 iny bne .1 inc BufPtr+1 inc BufPtrDst+1 bra .1 .8 pla sta BufPtr+1 rts *-------------------------------------- BUF.MoveForwardTail ldy #0 ldx #$ff phx .1 lda (BufPtr),y beq .4 dex bne .2 pla dec pha .2 iny bne .1 inc BufPtr+1 inc BufPtrDst+1 bra .1 .4 lda (BufPtr),y sta (BufPtrDst),y tya bne .5 dec BufPtr+1 dec BufPtrDst+1 .5 dey inx bne .4 pla inc beq .8 pha bra .4 .8 rts *-------------------------------------- * Out : Y = Line Length *-------------------------------------- BUF.ComputeCOffset jsr BUF.GetLine bcs .9 phy save line length >LDA.G FileX * clc adc BUF.LOffset sta BUF.COffset lda #0 adc BUF.LOffset+1 sta BUF.COffset+1 ply clc .9 rts *-------------------------------------- BUF.GetNextLine sec .HS 90 BCC BUF.GetLine clc >LDA.G FileY adc #0 pha iny lda (pData),y adc #0 tax pla BUF.GetLineAX sta BUF.TmpLine1 Requested Line stx BUF.TmpLine1+1 stz BUF.TmpLine2 stz BUF.TmpLine2+1 stz BUF.LOffset stz BUF.LOffset+1 >LDA.G hBuffer >SYSCALL GetMemPtr >STYA BufPtr .1 ldy #0 .2 lda (BufPtr),y beq .7 cmp #C.CR beq .3 iny bne .2 .3 lda BUF.TmpLine1 cmp BUF.TmpLine2 bne .4 lda BUF.TmpLine1+1 cmp BUF.TmpLine2+1 beq .8 .4 tya sec adc BufPtr sta BufPtr bcc .5 inc BufPtr+1 .5 tya sec adc BUF.LOffset sta BUF.LOffset bcc .6 inc BUF.LOffset+1 .6 inc BUF.TmpLine2 bne .1 inc BUF.TmpLine2+1 bra .1 .7 lda BUF.TmpLine1 cmp BUF.TmpLine2 bne .9 lda BUF.TmpLine1+1 cmp BUF.TmpLine2+1 bne .9 .8 clc Y = Line length rts .9 sec rts *-------------------------------------- BUF.GetNewYA tax In 256 bytes page to avoid fragmentation tya beq .10 inx .10 phx >LDA.G hBufferBackup beq .1 >SYSCALL FreeMem .1 >LDA.G hBuffer >STA.G hBufferBackup >SYSCALL GetMemPtr >STYA BufPtrBackup >STZ.G hBuffer pla ldy #0 >SYSCALL GetMem bcs .9 >STYA.G BufBase txa >STA.G hBuffer >LDA.G bSaved beq .8 lda #0 sta (pData),y jsr SCRN.UpdateTopBar bcs .9 .8 * clc .9 rts *-------------------------------------- BUF.ResetSel lda #$ff ldy #SelStart sta (pData),y iny sta (pData),y iny #SelEnd inc lda #0 sta (pData),y iny sta (pData),y rts *-------------------------------------- BUF.CheckSelected lda BUF.COffset ldy #SelStart cmp (pData),y lda BUF.COffset+1 iny sbc (pData),y bcc .9 CC:COffset < SelStart iny #SelEnd lda (pData),y clc sbc BUF.COffset iny lda (pData),y sbc BUF.COffset+1 * CC:SelEnd < COffset .9 lda #0 ror $80 = selected rts *-------------------------------------- BUF.GetSelLen ldy #SelEnd lda (pData),y sec ldy #SelStart sbc (pData),y sta SelLen tax ldy #SelEnd+1 lda (pData),y ldy #SelStart+1 sbc (pData),y sta SelLen+1 bcc .9 bne .8 txa beq .9 .8 clc rts .9 sec rts *-------------------------------------- MAN SAVE USR/SRC/BIN/EDIT.S.BUF LOAD USR/SRC/BIN/EDIT.S ASM