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
|