Commit Diff


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
@@ -74,12 +74,10 @@
 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
@@ -262,15 +260,16 @@
 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
@@ -465,6 +464,31 @@
 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
@@ -840,35 +864,34 @@
 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+
@@ -921,7 +944,7 @@
 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
@@ -951,7 +974,8 @@
 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
@@ -959,7 +983,7 @@
 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
@@ -968,16 +992,9 @@
 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
@@ -986,10 +1003,10 @@
 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
@@ -1013,7 +1030,7 @@
 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
@@ -1072,26 +1089,27 @@
 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
@@ -1104,8 +1122,80 @@
 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