commit - eb9ae0480b840f316f65a14c778441d4f7886942
commit + 7889c72b765d5be3c74b02c0e6eaa2c2b5617b93
blob - d9db77f6c3be99baf66c9acf551c018459770eda
blob + 143e4e55292eeace153b5dc41d4de2d974c90628
Binary files LINEUTIL.B,PRG and LINEUTIL.B,PRG differ
blob - 3c5236d22adc1a2fb809d599349a93a7803f703f
blob + e18f5e224f32a3f9ad284577c47d3c5a2b3a531c
--- LINEUTIL.B.lst
+++ LINEUTIL.B.lst
1722 DATA 'S.KETCOL, .DSZ,"]: "
1730 DATA 'S.DEST, .DSZ,"DEST: "
1799 REM
-1800 DATA 'S.ERROR, .DB, 13
-1801 DATA .DSZ,"ERROR "
-1805 DATA 'S.ABORT, .DB, 13
-1806 DATA .DSZ,"ABORTED"
+1800 DATA 'S.ERROR, .DSZ,"ERROR "
+1805 DATA 'S.ABORT, .DSZ,"ABORTED"
1810 DATA 'S.ECLASH, .DSZ
-1811 DATA " ! LINE NUMBER CLASH"
+1811 DATA "LINE NUMBER CLASH"
1990 REM
1991 REM
1995 DATA .LIM, 50000: REM $C350
3000 REM
3001 REM - SUBROUTINES -
3002 REM
-3031 REM 3100 PUTSTR / PUTISTR / PUT*LN
+3031 REM 3100 PUTSTR, PUTISTR, PUT*LN
3032 REM 3200 QUOTREM
3034 REM 3400 PRINTNAT
3036 REM 3600 GETSTR
+3037 REM 3750 CMPLINENO
3038 REM 3800 ATOI
3040 REM 4000 READNAT
3041 REM 4100 MEMCPY
3042 REM 4200 GETSTASTO
-3043 REM 4300 FINDLINE / FINDNEXT
+3043 REM 4300 FINDLINE, FINDNEXT
3044 REM 4400 GETFILE
3045 REM 4500 FINDLAST,PUTNL,PRINTNATLN
3046 REM 4600 DELTAPPLY
3731 DATA LDYZ, P+
3732 DATA LDAZ, T
3733 DATA RTS
+3749 REM
+3750 DATA 'CMPLINENO
+3751 REM
+3752 REM X.Y IN: LINE NUMBER
+3753 REM P IN: LINE POINTER
+3754 REM
+3755 REM CLOBBERS: Y, T
+3756 REM
+3760 DATA STYZ, T
+3761 DATA LDY#, 1: REM HI(PNEXT)
+3762 DATA LDA(Y, P
+3763 DATA BNER, CLN1
+3764 DATA CLC: REM <
+3765 DATA RTS
+3770 DATA 'CLN1
+3771 DATA LDAZ, T
+3772 DATA LDY#, 3
+3773 DATA CMP(Y, P
+3774 DATA BCCR, CLNRET
+3775 DATA BNER, CLNRET
+3780 DATA TXA
+3781 DATA DEY
+3782 DATA CMP(Y, P
+3790 DATA 'CLNRET
+3791 DATA RTS
3799 REM
3800 DATA 'ATOI
3801 REM
4842 DATA LDYZ, Q+
4843 DATA STX, PPREV
4844 DATA STY, PPREV+
-4860 REM LOCATE STOP LINE
-4861 DATA LDX, NSTOP
-4862 DATA LDY, NSTOP+
-4863 DATA JSR, FINDNEXT
-4864 DATA STX, PSTOP
-4865 DATA STY, PSTOP+
-4879 REM SAVE PTR TO LAST LINE
-4880 DATA LDXZ, Q
-4881 DATA LDYZ, Q+
-4882 DATA STX, PLAST
-4883 DATA STY, PLAST+
-4890 DATA CLC
-4891 DATA RTS
+4850 REM LOCATE STOP LINE
+4851 DATA LDX, NSTOP
+4852 DATA LDY, NSTOP+
+4853 DATA JSR, FINDNEXT
+4854 DATA STX, PSTOP
+4855 DATA STY, PSTOP+
+4860 REM SAVE PTR TO LAST LINE
+4861 DATA LDXZ, Q
+4862 DATA LDYZ, Q+
+4863 DATA STX, PLAST
+4864 DATA STY, PLAST+
+4870 REM CALC. DELTA = PSTART - PSTOP
+4871 DATA SEC
+4872 DATA LDA, PSTART
+4873 DATA SBC, PSTOP
+4874 DATA STA, DELTA
+4875 DATA LDA, PSTART+
+4876 DATA SBC, PSTOP+
+4877 DATA STA, DELTA+
+4880 DATA RTS
4999 REM
5000 DATA 'LINECUT
5001 DATA JSR, PUTISTRLN
-5002 DATA .DSZ, "DELETE LINES"
+5002 DATA .DSZ, "=DELETE LINES"
5010 DATA JSR, GETSTASTOLINE
5011 DATA BCCR, LCU2: REM START < STOP
5012 DATA RTS
5020 DATA 'LCU2
-5240 REM CALC. DELTA = PSTART - PSTOP
-5250 DATA SEC
-5251 DATA LDA, PSTART
-5252 DATA SBC, PSTOP
-5253 DATA STA, DELTA
-5254 DATA LDA, PSTART+
-5255 DATA SBC, PSTOP+
-5256 DATA STA, DELTA+
5260 REM SCAN AFTER STOP, ADJUST PTRS
5270 DATA LDX, PSTOP
5271 DATA LDY, PSTOP+
5999 REM
6000 DATA 'LINECAT
6001 DATA JSR, PUTISTRLN
-6002 DATA .DSZ, "APPEND PRG"
+6002 DATA .DSZ, "=APPEND PRG"
6005 REM SAVE LAST LINE NUMBER IN TMP
6006 DATA JSR, FINDLAST
6007 DATA LDY#, 1
6048 DATA TAY
6049 DATA LDA#, 0: REM L/V
6050 DATA JSR, LOAD
-6051 DATA BCCR, LCA1.1
+6051 DATA JSR, PUTLN
+6052 DATA BCCR, LCA1.1
6060 DATA LDA#, 0
6061 DATA TAY
6062 DATA STA(Y, P
6064 DATA STA(Y, P
6065 DATA LDX#, S.ERROR
6066 DATA LDY#, S.ERROR↑
-6067 DATA JSR, PUTSTR
+6067 DATA JSR, PUTSTRLN
6068 DATA 'LCARET
6069 DATA RTS
6070 DATA 'LCA1.1
6075 REM CHECK FOR LINE NUMBER CLASH
6080 REM COMPARE VS LAST LINE NUMBER
6085 DATA LDX, TMP
-6086 DATA LDA, TMP+
-6090 DATA LDY#, 3
-6091 DATA CMP(Y, P
-6092 DATA BCCR, LCACOK
-6093 DATA BNER, LCACFAIL
-6100 DATA TXA
-6101 DATA DEY
-6102 DATA CMP(Y, P
-6103 DATA BCCR, LCACOK
-6105 DATA 'LCACFAIL
+6086 DATA LDY, TMP+
+6090 DATA JSR, CMPLINENO
+6091 DATA BCCR, LCACOK
6110 REM NULL OFF THE NEW LINES, ABORT
6111 DATA LDA#, 0
6112 DATA TAY
6115 DATA STA(Y, P
6120 DATA LDX#, S.ECLASH
6121 DATA LDY#, S.ECLASH↑
-6122 DATA JSR, PUTSTR
+6122 DATA JSR, PUTSTRLN
6130 DATA LDX#, S.ABORT
6131 DATA LDY#, S.ABORT↑
-6132 DATA JSR, PUTSTR
+6132 DATA JSR, PUTSTRLN
6135 DATA RTS
6140 DATA 'LCACOK
6170 REM SCAN & RELINK LINES
6399 REM
6400 DATA 'LINECLP
6401 DATA JSR, PUTISTRLN
-6402 DATA .DSZ, "SAVE LINES"
+6402 DATA .DSZ, "=SAVE LINES"
6410 DATA JSR, GETSTASTOLINE
6411 DATA BCCR, LCL1
6415 DATA RTS
6563 DATA STAZ, P+
6564 DATA LDA#, P
6565 DATA JSR, SAVE
-6566 DATA BCCR, LCLDONE
-6567 DATA LDX#, S.ERROR
-6568 DATA LDY#, S.ERROR↑
-6569 DATA JSR, PUTSTR
-6570 DATA 'LCLDONE
-6571 DATA LDY#, 0
-6572 DATA LDA, TMP: REM PNEXT LO
-6573 DATA STA(Y, Q: REM -> PSTOP[0]
-6574 DATA INY
-6575 DATA LDA, TMP+: REM PNEXT HI
-6576 DATA STA(Y, Q: REM -> PSTOP[1]
-6580 DATA LDX, PSTART
-6581 DATA LDY, PSTART+
-6582 DATA STXZ, P
-6583 DATA STYZ, P+
-6584 DATA JMP, RELINK: REM TAIL CALL
+6566 DATA JSR, PUTLN
+6567 DATA BCCR, LCLDONE
+6570 DATA LDX#, S.ERROR
+6571 DATA LDY#, S.ERROR↑
+6572 DATA JSR, PUTSTRLN
+6580 DATA 'LCLDONE
+6581 DATA LDY#, 0
+6582 DATA LDA, TMP: REM PNEXT LO
+6583 DATA STA(Y, Q: REM -> PSTOP[0]
+6584 DATA INY
+6585 DATA LDA, TMP+: REM PNEXT HI
+6586 DATA STA(Y, Q: REM -> PSTOP[1]
+6590 DATA LDX, PSTART
+6591 DATA LDY, PSTART+
+6592 DATA STXZ, P
+6593 DATA STYZ, P+
+6594 DATA JMP, RELINK: REM TAIL CALL
6599 REM
6600 DATA 'LINECHG
6601 DATA JSR, PUTISTRLN
-6602 DATA .DSZ, "SHIFT LINES"
+6602 DATA .DSZ, "=SHIFT LINES"
6610 DATA JSR, GETSTASTOLINE
6611 DATA BCCR, LCH1
6612 DATA RTS
6635 DATA STY, NDEST+
6640 REM MUST VALIDATE:
6641 REM 1. NDEST > NPREV
-6642 REM 2. NLAST + DELTA < NNEXT
-6643 REM WHERE DELTA = NDEST - NSTART
+6642 REM 2. NLAST + DELTA < 64000
+6643 REM 3. NLAST + DELTA < NNEXT
+6644 REM WHERE DELTA = NDEST - NSTART
+6645 REM AND NPREV/NNEXT EXIST, RSP.
+6650 DATA LDA, PPREV+
+6651 DATA BEQR, LCH2
+6652 DATA STAZ, P+
+6653 DATA LDA, PPREV
+6654 DATA STAZ, P
+6655 DATA LDX, NDEST
+6656 DATA LDY, NDEST+
+6660 DATA JSR, CMPLINENO
+6661 DATA BCCR, LCHCLASH
+6662 DATA BEQR, LCHCLASH
+6665 DATA 'LCH2
+6669 REM CALC. DELTA = NDEST - NSTART
+6670 DATA SEC
+6671 DATA LDA, NDEST
+6672 DATA SBC, NSTART
+6673 DATA STA, DELTA
+6674 DATA LDA, NDEST+
+6675 DATA SBC, NSTART+
+6676 DATA STA, DELTA+
+6677 DATA BCCR, LCH3: REM DELTA < 0
+6680 REM DETERMINE NLAST
+6681 DATA LDA, PLAST
+6682 DATA STAZ, P
+6683 DATA LDA, PLAST+
+6684 DATA STAZ, P+
+6690 DATA LDY#, 2
+6691 DATA LDA(Y, P
+6692 DATA STA, NLAST
+6693 DATA INY
+6694 DATA LDA(Y, P
+6695 DATA STA, NLAST+
+6700 REM 2. NLAST + DELTA < 64000=FA00
+6701 DATA CLC
+6702 DATA LDA, NLAST
+6703 DATA ADC, DELTA
+6704 DATA TAX: REM LO BYTE -> X
+6705 DATA LDA, NLAST+
+6706 DATA ADC, DELTA+
+6707 DATA BCSR, LCHCLASH
+6708 DATA CMP#, 250: REM = $FA
+6709 DATA BCSR, LCHCLASH
+6710 REM 3. NLAST + DELTA < NNEXT
+6711 DATA TAY: REM HI BYTE -> Y
+6712 DATA LDA, PSTOP+
+6713 DATA BEQR, LCH3
+6714 DATA STAZ, P+
+6715 DATA LDA, PSTOP
+6716 DATA STAZ, P
+6720 DATA JSR, CMPLINENO
+6721 DATA BCSR, LCHCLASH
+6730 DATA 'LCH3
+6740 DATA LDX, PSTART
+6741 DATA LDY, PSTART+
+6742 DATA STXZ, P
+6743 DATA STYZ, P+
+6744 DATA LDX, PSTOP
+6745 DATA LDY, PSTOP+
+6746 DATA STXZ, Q
+6747 DATA STYZ, Q+
+6750 DATA LDA#, 2: REM LINE NUMBER
+6751 DATA JSR, DELTAPPLY
+6752 DATA RTS
+6760 DATA 'LCHCLASH
+6761 DATA LDX#, S.ECLASH
+6762 DATA LDY#, S.ECLASH↑
+6763 DATA JSR, PUTSTRLN
+6764 DATA LDX#, S.ABORT
+6765 DATA LDY#, S.ABORT↑
+6766 DATA JSR, PUTSTRLN
+6767 DATA RTS
9900 REM
9901 REM ENTRY POINTS: $C350 - $C3B4
9902 REM