mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-22 00:32:44 +00:00
235 lines
5.7 KiB
Plaintext
235 lines
5.7 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------
|
||
E.SUBMIT.LINE JSR TRUNCATE TRUNCATE BLANKS FROM END
|
||
JSR PACK.LINE PACK INTO SC FORMAT
|
||
JMP INSERT.LINE PUT INTO SOURCE PROG
|
||
*--------------------------------
|
||
TRUNCATE LDY #254
|
||
.1 LDA WBUF,Y KILL ANY TRAILING BLANKS
|
||
CMP #$20
|
||
BNE .2
|
||
LDA #0
|
||
STA WBUF,Y
|
||
DEY
|
||
CPY #4
|
||
BNE .1
|
||
.2 RTS
|
||
*--------------------------------
|
||
PACK.LINE LDA #0
|
||
STA RPTCNT
|
||
STA RPTCHR
|
||
TAX
|
||
LDY #START.COL START LOOKING AT LINE HERE
|
||
.1 LDA WBUF,Y GET A CHAR
|
||
AND #$7F MASK HIGH BIT OFF
|
||
BEQ .4 END OF LINE CODE
|
||
CMP RPTCHR SEE IF=REPEAT CHAR
|
||
BNE .3 NO
|
||
.2 INC RPTCNT BUMP REPEAT COUNT
|
||
INY NEXT CHAR
|
||
BNE .1 ...ALWAYS
|
||
.3 JSR PROCESS.REPEAT.COUNT
|
||
LDA WBUF,Y
|
||
AND #$7F
|
||
STA RPTCHR
|
||
BNE .2 ...ALWAYS
|
||
.4 JSR PROCESS.REPEAT.COUNT
|
||
LDA #0
|
||
STA WBUF,X
|
||
INX
|
||
TXA
|
||
TAY
|
||
.41 LDA WBUF-1,Y
|
||
STA WBUF+2,Y
|
||
DEY
|
||
BNE .41
|
||
INX
|
||
INX
|
||
INX
|
||
.5 STX WBUF
|
||
LDA SAV.LNO
|
||
STA WBUF+1
|
||
LDA SAV.LNO+1
|
||
STA WBUF+2
|
||
RTS
|
||
*--------------------------------
|
||
PROCESS.REPEAT.COUNT
|
||
LDA RPTCNT ANY REPEAT CHARS
|
||
BEQ .2 NO
|
||
LDA RPTCHR GET REPEAT CHAR
|
||
CMP #$20 WAS IT BLANK?
|
||
BEQ .4 YES, BLANK IS SPECIAL
|
||
STA WBUF+2,X NO, STORE CHAR
|
||
LDA RPTCNT GET COUNT
|
||
CMP #4 MUST BE 4 OR MORE
|
||
BCC .3 NOT ENOUGH
|
||
STA WBUF+1,X STORE COUNT
|
||
LDA #$C0 STORE REPEAT TOKEN
|
||
STA WBUF,X
|
||
INX
|
||
INX COUNT 3 BYTES
|
||
.1 LDA #0 ZERO REPEAT COUNT
|
||
STA RPTCNT
|
||
INX
|
||
.2 RTS
|
||
.3 LDA RPTCHR
|
||
STA WBUF,X
|
||
INX
|
||
DEC RPTCNT
|
||
BNE .3
|
||
RTS
|
||
.4 LDA RPTCNT TAKE BLANK COUNT
|
||
CMP #$40 CK < 64
|
||
BCC .5 YES
|
||
SBC #$3F DECREMENT MAX COUNT
|
||
STA RPTCNT
|
||
LDA #$BF OUTPUT MAX COUNT
|
||
STA WBUF,X IN WBUF
|
||
INX THEN GO BACK FOR MORE
|
||
BNE .4 ...ALWAYS
|
||
.5 ORA #$80 SET HIGH BIT
|
||
STA WBUF,X STORE BLANK COUNT
|
||
BNE .1 ...ALWAYS
|
||
*--------------------------------
|
||
INSERT.LINE LDA SAV.PTR1
|
||
STA PTR1
|
||
STA PTR2
|
||
LDA SAV.PTR1+1
|
||
STA PTR1+1
|
||
STA PTR2+1
|
||
JSR P1.ADD P1=NEXT, P2=CUR
|
||
LDA PTR1
|
||
SEC
|
||
SBC PTR2
|
||
SEC
|
||
SBC WBUF
|
||
BEQ .11 SAME SIZE
|
||
STA MDIST
|
||
LDA #0
|
||
SBC #0
|
||
STA MDIST+1
|
||
BCC .6 LINE IS BIGGER
|
||
*--------------------------------
|
||
* LINE IS SMALLER
|
||
*--------------------------------
|
||
CLC
|
||
LDA PTR2
|
||
ADC MDIST
|
||
STA A4L
|
||
LDA PTR2+1
|
||
ADC MDIST+1
|
||
STA A4H
|
||
JSR MOVE.TEXT.UP
|
||
JMP .11
|
||
*--------------------------------
|
||
* LINE IS BIGGER
|
||
*--------------------------------
|
||
.6 CLC
|
||
LDA PP.BEG
|
||
ADC MDIST
|
||
STA A4L
|
||
LDA PP.BEG+1
|
||
ADC MDIST+1
|
||
STA A4H
|
||
LDA A4L
|
||
CMP SP.END
|
||
LDA A4H
|
||
SBC SP.END+1
|
||
BCC .30 ERROR NO ROOM
|
||
JSR MOVE.TEXT.DOWN
|
||
*--------------------------------
|
||
* MOVE LINE INTO HOLE
|
||
*--------------------------------
|
||
.11 LDX WBUF
|
||
LDY #0
|
||
.12 LDA PTR1
|
||
BNE .13
|
||
DEC PTR1+1
|
||
.13 DEC PTR1
|
||
DEX
|
||
LDA WBUF,X
|
||
STA (PTR1),Y
|
||
TXA
|
||
BNE .12
|
||
.14 RTS
|
||
*--------------------------------
|
||
.30 JMP M.BELL NO ROOM
|
||
*--------------------------------
|
||
MOVE.TEXT.UP JSR COMPUTE.BLOCK.SIZE
|
||
CLC
|
||
LDA PP.BEG
|
||
ADC MDIST
|
||
STA PP.BEG
|
||
LDA PP.BEG+1
|
||
ADC MDIST+1
|
||
STA PP.BEG+1
|
||
LDY #0
|
||
BEQ .3 ...ALWAYS
|
||
* MOVE WHOLE BLOCK
|
||
.1 LDA (PTR2),Y
|
||
STA (A4L),Y
|
||
.2 DEY
|
||
BNE .1
|
||
LDA (PTR2),Y
|
||
STA (A4L),Y
|
||
.3 DEC PTR2+1
|
||
DEC A4H
|
||
DEX ANY MORE BLOCKS
|
||
BNE .2 YES
|
||
* MOVE SHORT BLOCK IF ANY
|
||
LDX BLKSIZ PARTIAL BLOCK SIZE
|
||
BEQ .5 NONE LEFT
|
||
.4 DEY
|
||
LDA (PTR2),Y
|
||
STA (A4L),Y
|
||
DEX
|
||
BNE .4
|
||
.5 RTS
|
||
*--------------------------------
|
||
COMPUTE.BLOCK.SIZE
|
||
SEC
|
||
LDA PTR2
|
||
SBC PP.BEG
|
||
STA BLKSIZ
|
||
LDA PTR2+1
|
||
SBC PP.BEG+1
|
||
TAX # PAGES
|
||
INX
|
||
RTS
|
||
*--------------------------------
|
||
MOVE.TEXT.DOWN
|
||
JSR COMPUTE.BLOCK.SIZE
|
||
LDA PP.BEG
|
||
STA A2L
|
||
LDA PP.BEG+1
|
||
STA A2H
|
||
LDA A4L
|
||
STA PP.BEG
|
||
LDA A4H
|
||
STA PP.BEG+1
|
||
LDY #0
|
||
BEQ .2 ...ALWAYS
|
||
.1 LDA (A2L),Y YES, MOVE 256 BYTE
|
||
STA (A4L),Y
|
||
INY
|
||
BNE .1
|
||
INC A2H NEXT BLOCK
|
||
INC A4H
|
||
.2 DEX ANY MORE BLOCKS
|
||
BNE .1
|
||
* MOVE PARTIAL BLOCK
|
||
LDX BLKSIZ
|
||
BEQ .4 NO PARTIAL BLOCK
|
||
.3 LDA (A2L),Y
|
||
STA (A4L),Y
|
||
INY
|
||
DEX
|
||
BNE .3
|
||
.4 RTS
|
||
*--------------------------------
|
||
MAN
|
||
SAVE usr/src/fse/fse.s.submit
|
||
LOAD usr/src/fse/fse.s
|
||
ASM
|