Commit Diff


commit - d7bdf931da0d9279831a3e2339fbbfaa48e3e09a
commit + 5a80a6992a880aee0fc9dd08e6138c7aaa900110
blob - 78c299b343ff32a7f5120f499183b0aa251ade16
blob + 233780dc2f1d7a621bd37396919e4741cd3a0526
Binary files LINEUTIL.B,PRG and LINEUTIL.B,PRG differ
blob - 19dfef47214b1c3cfb8df71f3b4dfd0f6963ff90
blob + 9e604aedf27456965a03b2ec3306fa3dc707b213
--- LINEUTIL.B.lst
+++ LINEUTIL.B.lst
@@ -211,7 +211,7 @@
 708 PRINT "LOAD ["; P; "]";
 709 A$="": INPUT A$: GOSUB 130: L=A
 710 IF L=0 THEN L=P
-713 OPEN 1,D,2,"@:" + F$ + ",PRG,W"
+713 OPEN 1,D,2, F$ + ",PRG,W"
 714 H = INT(L / 256): L = L - H*256
 715 PRINT# 1, CHR$(L); CHR$(H);
 716 IF P >= Q THEN CLOSE 1: END
@@ -237,8 +237,8 @@
 745 PRINT 53,"FRESPC",PEEK(53)+PEEK(54)*256
 746 PRINT 55,"MEMSIZ",PEEK(55)+PEEK(56)*256
 747 END
-748 REM
-749 REM *RUN 750* READ IO ERROR CHANNEL
+748 REM *RUN 750* READ IO ERROR CHANNEL
+749 REM
 750 FA = PEEK(186)
 751 PRINT "DRIVE [";FA;"]";: INPUT A$
 752 A=FA: IF A$ <>"" THEN A=VAL(A$)
@@ -357,17 +357,19 @@
 992 REM = APPEND PROGRAM CODE BELOW =
 999 REM
 1000 REM
-1001 REM LINECNT
-1002 REM COUNT THE NUMBER OF LINES IN A
-1003 REM BASIC PRG FILE.
+1001 REM =LINEUTIL=
+1002 REM LINE-ORIENTED TOOLS TO EASE
+1003 REM WORKING WITH BASIC PROGRAMS.
 1004 REM PESCO 2026
 1005 REM
-1010 REM 1000 TOP OF FILE COMMENT
-1020 REM 1500 SYMBOL DEFINITIONS
-1030 REM 2000 LINECNT
-1040 REM 3000 SUBROUTINES
+1009 REM -999 [BASASM]
+1010 REM 1000 TOP COMMENT
+1015 REM 1500 (SYMBOL DEFINITIONS)
+1020 REM 2000 LINECNT
+1030 REM 3000 SUBROUTINES
 1050 REM 5000 LINECUT
 1060 REM 6000 LINECAT
+1064 REM 6400 LINECLP
 1080 REM 8000 ENTRY POINTS
 1090 REM 9000 VARIABLES & STATIC DATA
 1099 REM
@@ -498,7 +500,7 @@
 2515 DATA  SBCZ, 44
 2516 DATA  STA, $C40B: REM XXX +
 2520 REM CALCULATE JUNK = BS - "JUNK"
-2525 SEC
+2525 DATA  SEC
 2527 DATA  LDA, CNT.BS
 2530 DATA  SBC, CNT.JUNK
 2535 DATA  STA, CNT.JUNK
@@ -549,13 +551,17 @@
 3000 REM
 3001 REM - SUBROUTINES -
 3002 REM
-3010 REM 3100 PUTSTR
-3020 REM 3200 QUOTREM
-3030 REM 3400 PRINTNAT
-3040 REM 3600 GETSTR
-3050 REM 3800 ATOI
-3060 REM 4000 READNAT
-3070 REM 4100 MEMCPY
+3031 REM 3100 PUTSTR
+3032 REM 3200 QUOTREM
+3034 REM 3400 PRINTNAT
+3036 REM 3600 GETSTR
+3038 REM 3800 ATOI
+3040 REM 4000 READNAT
+3041 REM 4100 MEMCPY
+3042 REM 4200 GETSTASTO
+3043 REM 4300 FINDLINE / FINDNEXT
+3044 REM 4400 GETFILE
+3045 REM 4500 FINDLAST,PUTNL,PRINTNATLN
 3099 REM
 3100 DATA 'PUTSTR
 3101 REM
@@ -614,7 +620,7 @@
 3390 REM
 3400 DATA 'PRINTNAT
 3401 REM
-3402 REM X/Y  IN: NUMBER TO PRINT
+3402 REM X.Y  IN: NUMBER TO PRINT
 3403 REM
 3404 REM CLOBBERS: A, X, Y, 2, 251-252
 3405 REM
@@ -679,9 +685,9 @@
 3675 DATA  JMP, GS1
 3680 DATA 'GS2
 3681 DATA  CMP#, 32:   REM SPC
-3682 DATA  BMIR, GS1
+3682 DATA  BCCR, GS1
 3683 DATA  CMP#, 127:  REM DEL
-3684 DATA  BPLR, GS1
+3684 DATA  BCSR, GS1
 3690 DATA  STA(Y, 251
 3691 DATA  INY
 3695 DATA  JSR, $FFD2
@@ -707,7 +713,7 @@
 3803 REM X/Y  OUT: RESULT
 3804 REM A    OUT: LEN CONSUMED
 3805 REM
-3806 REM CLOBBERS: 215, 251-254
+3806 REM CLOBBERS: 2, 251-254
 3807 REM
 3810 DATA  STXZ, 251
 3811 DATA  STYZ, 252
@@ -720,12 +726,12 @@
 3841 DATA  BEQR, AI2
 3849 REM
 3850 DATA  CMP#, 48:   REM "0"
-3851 DATA  BMIR, AI2
+3851 DATA  BCCR, AI2
 3860 DATA  CMP#, 58:   REM "9"
-3861 DATA  BPLR, AI2
+3861 DATA  BCSR, AI2
 3870 DATA  SEC
 3871 DATA  SBC#, 48
-3880 DATA  STAZ, 215:  REM SAVE DIGIT
+3880 DATA  STAZ, 2:    REM SAVE DIGIT
 3885 DATA  LDAZ, 253:  REM SAVE VALUE
 3886 DATA  LDXZ, 254
 3890 DATA  ASLZ, 253:  REM DBL   2X
@@ -741,7 +747,7 @@
 3910 DATA  ASLZ, 253:  REM DBL  10X
 3911 DATA  ROLZ, 254
 3920 DATA  CLC:        REM ADD DIGIT
-3921 DATA  LDAZ, 215
+3921 DATA  LDAZ, 2
 3922 DATA  ADCZ, 253
 3923 DATA  STAZ, 253
 3924 DATA  BCCR, AI3
@@ -807,89 +813,187 @@
 4185 DATA  JMP, MC1
 4190 DATA 'MC3
 4195 DATA  RTS
+4199 REM
+4200 DATA 'GETSTASTO
+4201 REM
+4202 REM X.Y    OUT: NSTOP
+4203 REM
+4204 REM CLOBBERS: A, X, Y, 2, 251-254
+4205 REM
+4210 DATA  LDX#, S.START
+4211 DATA  LDY#, $C5: REM XXX HI
+4212 DATA  JSR, PUTSTR
+4220 DATA  JSR, READNAT
+4221 DATA  STX, NSTART
+4222 DATA  STY, $C40D: REM XXX +
+4230 DATA  LDX#, S.STOP
+4231 DATA  LDY#, $C5: REM XXX HI
+4232 DATA  JSR, PUTSTR
+4240 DATA  JSR, READNAT
+4241 DATA  STX, NSTOP
+4242 DATA  STY, $C40F: REM XXX +
+4249 REM CMP NSTOP, NSTART
+4250 DATA  CPY, $C40D: REM XXX NSTART+
+4251 DATA  BCCR, GSS1
+4252 DATA  BNER, GSS1
+4253 DATA  CPX, NSTART
+4259 DATA 'GSS1
+4260 DATA  RTS
+4299 REM
+4300 DATA 'FINDLINE
+4301 REM
+4302 REM X.Y      IN: LINE NUMBER
+4303 REM X.Y     OUT: LINE POINTER
+4304 REM 251.252 OUT: -"-
+4305 REM
+4306 REM CLOBBERS: A, X, Y, 251-254
+4307 REM
+4310 DATA  LDAZ, 43:   REM TXTTAB
+4311 DATA  STAZ, 251:  REM -> 251
+4312 DATA  LDAZ, 44
+4313 DATA  STAZ, 252
+4319 REM ...
+4320 DATA 'FINDNEXT
+4321 REM
+4322 REM X.Y         IN: LINE NUMBER
+4323 REM X.Y        OUT: LINE POINTER
+4324 REM 251.252 IN/OUT: -"-
+4325 REM
+4326 REM CLOBBERS: A, X, Y, 251-254
+4327 REM
+4330 DATA  STXZ, 253
+4331 DATA  STYZ, 254
+4340 DATA 'FN3
+4350 DATA  LDY#, 1:    REM -> PNEXT HI
+4351 DATA  LDA(Y, 251
+4352 DATA  BEQR, FN5:  REM RETURN
+4360 DATA  LDY#, 3:    REM -> LINENO HI
+4361 DATA  LDA(Y, 251
+4362 DATA  CMPZ, 254:  REM HI BYTE
+4363 DATA  BCCR, FN4:  REM A < M
+4364 DATA  BNER, FN5:  REM A > M
+4365 DATA  DEY
+4366 DATA  LDA(Y, 251
+4367 DATA  CMPZ, 253:  REM LO BYTE
+4368 DATA  BCCR, FN4
+4369 DATA  JMP, FN5:   REM RETURN
+4370 DATA 'FN4:        REM NEXT LINE
+4371 DATA  LDY#, 0
+4372 DATA  LDA(Y, 251
+4373 DATA  TAX
+4374 DATA  INY
+4375 DATA  LDA(Y, 251
+4376 DATA  STXZ, 251
+4377 DATA  STAZ, 252
+4380 DATA  JMP, FN3
+4390 DATA 'FN5
+4391 DATA  LDXZ, 251
+4392 DATA  LDYZ, 252
+4393 DATA  RTS
+4399 REM
+4400 DATA 'GETFILE
+4401 REM
+4402 REM A   IN: LOGICAL FILE NUMBER
+4403 REM
+4404 REM CLOBBERS: A,X,Y,2,251-254
+4405 REM
+4409 DATA  PHA:        REM SAVE FILE NO
+4410 DATA  LDX#, S.DRVBRA
+4411 DATA  LDY#, $C5: REM XXX HI
+4412 DATA  JSR, PUTSTR
+4413 DATA  LDAZ, 186: REM CURRENT DEV
+4414 DATA  CLC
+4415 DATA  ADC#, 48:  REM XXX PRINTBYTE
+4416 DATA  JSR, $FFD2: REM CHROUT
+4417 DATA  LDX#, S.KETCOL
+4418 DATA  LDY#, $C5: REM XXX HI
+4419 DATA  JSR, PUTSTR
+4420 DATA  JSR, READNAT
+4421 DATA  BNER, GF1:  REM LEN <> 0
+4422 DATA  LDXZ, 186:  REM DEFAULT
+4423 DATA 'GF1
+4424 DATA  PLA:        REM FILE NO
+4425 DATA  LDY#, 0:    REM SEC ADDR
+4426 DATA  JSR, $FFBA: REM SETLFS
+4430 DATA  LDX#, S.FILE
+4431 DATA  LDY#, $C5: REM XXX HI
+4432 DATA  JSR, PUTSTR
+4433 DATA  LDX#, BUF
+4434 DATA  LDY#, $C7: REM XXX HI
+4435 DATA  JSR, GETSTR
+4437 DATA  JSR, $FFBD: REM SETNAM
+4440 DATA  RTS
+4499 REM
+4500 DATA 'FINDLAST
+4501 REM
+4502 REM X.Y      OUT: PTR TO LAST LINE
+4503 REM 251-252  OUT: SAME
+4504 REM
+4505 REM CLOBBERS: A, X, Y, 251-254
+4506 REM
+4510 DATA  LDXZ, 43:   REM TXTTAB
+4511 DATA  LDYZ, 44
+4512 DATA  STXZ, 251
+4513 DATA  STYZ, 252
+4520 DATA  LDY#, 1
+4521 DATA  LDA(Y, 251
+4522 DATA  BEQR, FL2:  REM EMPTY PRG
+4530 DATA 'FL1
+4531 DATA  LDY#, 0
+4532 DATA  LDA(Y, 251
+4533 DATA  STAZ, 253
+4534 DATA  INY
+4535 DATA  LDA(Y, 251
+4536 DATA  STAZ, 254
+4540 DATA  LDA(Y, 253
+4541 DATA  BEQR, FL2
+4550 DATA  LDXZ, 253
+4551 DATA  LDYZ, 254
+4552 DATA  STXZ, 251
+4553 DATA  STYZ, 252
+4555 DATA  JMP, FL1
+4560 DATA 'FL2
+4570 DATA  LDXZ, 251
+4571 DATA  LDYZ, 252
+4572 DATA  RTS
+4579 REM
+4580 DATA 'PUTNL
+4581 DATA  LDA#, 13
+4582 DATA  JMP, $FFD2: REM CHROUT
+4589 REM
+4590 DATA 'PRINTNATLN
+4591 DATA  JSR, PRINTNAT
+4592 DATA  JMP, PUTNL
+4599 REM
+4990 REM
+4995 DATA .=, $C880
 4999 REM
 5000 DATA 'LINECUT
-5010 DATA  LDX#, S.START
-5011 DATA  LDY#, $C5: REM XXX HI
-5012 DATA  JSR, PUTSTR
-5020 DATA  JSR, READNAT
-5021 DATA  STX, NSTART
-5022 DATA  STY, $C40D: REM XXX +
-5030 DATA  LDX#, S.STOP
-5031 DATA  LDY#, $C5: REM XXX HI
-5032 DATA  JSR, PUTSTR
-5040 DATA  JSR, READNAT
-5041 DATA  STX, NSTOP
-5042 DATA  STY, $C40F: REM XXX +
-5049 REM ABORT IF NSTOP <= NSTART
-5050 DATA  CPY, $C40D: REM XXX NSTART+
-5051 DATA  BMIR, LCU1
-5052 DATA  BNER, LCU2
-5053 DATA  CPX, NSTART
-5054 DATA  BMIR, LCU1
-5055 DATA  BNER, LCU2
-5056 DATA 'LCU1
-5058 DATA  RTS
-5059 DATA 'LCU2
+5010 DATA  JSR, GETSTASTO
+5011 DATA  BCCR, LCU1: REM <
+5012 DATA  BNER, LCU2: REM >
+5020 DATA 'LCU1
+5021 DATA  RTS:  REM NSTOP <= NSTART
+5030 DATA 'LCU2
 5060 REM LOCATE START -> PTR IN 251
-5070 DATA  LDXZ, 43:   REM TXTTAB
-5071 DATA  LDYZ, 44
-5080 DATA  STXZ, 251
-5081 DATA  STYZ, 252
-5089 DATA 'LCU3
-5090 DATA  LDY#, 1: REM OFFS PNEXT + 1
-5091 DATA  LDA(Y, 251
-5092 DATA  BEQR, LCU1: REM NOT FOUND
-5100 DATA  LDY#, 3: REM OFFS LINENO + 1
-5101 DATA  LDA(Y, 251
-5102 DATA  CMP, $C40D: REM XXX NSTART+
-5103 DATA  BMIR, LCU4
-5104 DATA  BNER, LCU5
-5105 DATA  DEY
-5106 DATA  LDA(Y, 251
-5107 DATA  CMP, NSTART
-5108 DATA  BMIR, LCU4
-5109 DATA  JMP, LCU5
-5110 DATA 'LCU4:       REM NEXT LINE
-5111 DATA  LDY#, 0
-5112 DATA  LDA(Y, 251
-5113 DATA  TAX
-5114 DATA  INY
-5115 DATA  LDA(Y, 251
-5116 DATA  STXZ, 251
-5117 DATA  STAZ, 252
-5120 DATA  JMP, LCU3
-5130 DATA 'LCU5:       REM PSTART FOUND
-5160 REM LOCATE STOP LINE -> PTR IN 253
-5170 DATA  LDXZ, 251
-5171 DATA  LDYZ, 252
-5180 DATA  STXZ, 253
-5181 DATA  STYZ, 254
-5189 DATA 'LCU6
-5190 DATA  LDY#, 1: REM OFFS PNEXT + 1
-5191 DATA  LDA(Y, 253
-5192 DATA  BEQR, LCU8: REM END OF PROG
-5200 DATA  LDY#, 3: REM OFFS LINENO + 1
-5201 DATA  LDA(Y, 253
-5202 DATA  CMP, $C40F: REM XXX NSTOP+
-5203 DATA  BMIR, LCU7
-5204 DATA  BNER, LCU8
-5205 DATA  DEY
-5206 DATA  LDA(Y, 253
-5207 DATA  CMP, NSTOP
-5208 DATA  BMIR, LCU7
-5209 DATA  JMP, LCU8
-5210 DATA 'LCU7:       REM NEXT LINE
-5211 DATA  LDY#, 0
-5212 DATA  LDA(Y, 253
-5213 DATA  TAX
-5214 DATA  INY
-5215 DATA  LDA(Y, 253
-5216 DATA  STXZ, 253
-5217 DATA  STAZ, 254
-5220 DATA  JMP, LCU6
-5230 DATA 'LCU8:       REM PSTOP FOUND
-5240 REM CALC DELTA=STOP-START -> 163
+5061 DATA  LDX, NSTART
+5062 DATA  LDY, $C40D: REM XXX NSTART+
+5063 DATA  JSR, FINDLINE
+5064 DATA  TXA
+5065 DATA  PHA
+5066 DATA  TYA
+5067 DATA  PHA
+5070 REM LOCATE STOP LINE -> PTR IN 253
+5071 DATA  LDX, NSTOP
+5072 DATA  LDY, $C40F: REM XXX NSTOP+
+5073 DATA  JSR, FINDNEXT
+5074 DATA  STXZ, 253
+5075 DATA  STYZ, 254
+5076 DATA  PLA:        REM PSTART HI
+5077 DATA  STAZ, 252
+5078 DATA  PLA:        REM PSTART LO
+5079 DATA  STAZ, 251
+5240 REM CALC DELTA=STOP-START
 5250 DATA  SEC
 5251 DATA  LDAZ, 253
 5252 DATA  SBCZ, 251
@@ -958,34 +1062,27 @@
 5465 DATA  SBC, $C411: REM XXX +
 5466 DATA  STAZ, 50
 5470 DATA  RTS
-5990 REM
-5995 DATA .=, $C880
 5999 REM
 6000 DATA 'LINECAT
-6010 DATA  LDX#, S.DRVBRA
-6011 DATA  LDY#, $C5: REM XXX HI
-6012 DATA  JSR, PUTSTR
-6013 DATA  LDAZ, 186: REM CURRENT DEV
-6014 DATA  CLC
-6015 DATA  ADC#, 48:  REM XXX PRINTBYTE
-6016 DATA  JSR, $FFD2: REM CHROUT
-6017 DATA  LDX#, S.KETCOL
-6018 DATA  LDY#, $C5: REM XXX HI
-6019 DATA  JSR, PUTSTR
-6020 DATA  JSR, READNAT
-6021 DATA  BNER, LCA1: REM LEN <> 0
-6022 DATA  LDXZ, 186:  REM DEFAULT
-6023 DATA 'LCA1
-6024 DATA  LDA#, 1:    REM FILE NO
-6025 DATA  LDY#, 0:    REM SEC ADDR
-6026 DATA  JSR, $FFBA: REM SETLFS
-6030 DATA  LDX#, S.FILE
-6031 DATA  LDY#, $C5: REM XXX HI
-6032 DATA  JSR, PUTSTR
-6033 DATA  LDX#, BUF
-6034 DATA  LDY#, $C7: REM XXX HI
-6035 DATA  JSR, GETSTR
-6037 DATA  JSR, $FFBD: REM SETNAM
+6001 REM PUT LAST LINE NUMBER ON STACK
+6002 DATA  JSR, FINDLAST
+6005 DATA  LDY#, 1
+6006 DATA  LDA(Y, 251
+6007 DATA  BNER, LCA0: REM EMPTY PRG?
+6010 DATA  LDA#, 0:    REM DEFAULT 0
+6011 DATA  PHA
+6012 DATA  PHA
+6013 DATA  JMP, LCA1
+6015 DATA 'LCA0
+6016 DATA  LDY#, 3
+6017 DATA  LDA(Y, 251
+6018 DATA  PHA
+6019 DATA  DEY
+6020 DATA  LDA(Y, 251
+6021 DATA  PHA
+6025 DATA 'LCA1
+6030 DATA  LDA#, 1:    REM FILE NO
+6031 DATA  JSR, GETFILE
 6040 DATA  SEC
 6041 DATA  LDAZ, 45:   REM VARTAB
 6042 DATA  SBC#, 2:    REM CUT NULL OFF
@@ -998,31 +1095,31 @@
 6049 DATA  LDA#, 0:    REM L/V
 6050 DATA  JSR, $FFD5: REM LOAD
 6051 DATA  BCCR, LCA1.1
-6052 DATA  LDA#, 1
-6053 DATA  JSR, $FFC3: REM CLOSE
-6054 DATA  RTS
+6055 DATA  LDX#, S.ERROR
+6056 DATA  LDY#, $C5: REM XXX HI
+6057 DATA  JSR, PUTSTR
+6058 DATA  RTS
 6060 DATA 'LCA1.1
 6061 DATA  STXZ, 253:  REM PSTOP
 6062 DATA  STYZ, 254
 6070 REM CHECK FOR LINE NUMBER CLASH
-6071 DATA  LDA#, 13
-6072 DATA  JSR, $FFD2: REM CHROUT
 6075 DATA  JMP, LCACHK
 6080 REM SCAN & RELINK LINES
 6081 DATA 'LCA2:      REM FOR EACH LINE
 6090 DATA  LDAZ, 252
 6091 DATA  CMPZ, 254
-6092 DATA  BMIR, LCA3
+6092 DATA  BCCR, LCA2.1
 6093 DATA  BNER, LCA4
 6094 DATA  LDAZ, 251
 6095 DATA  CMPZ, 253
-6096 DATA  BPLR, LCA4: REM PSTOP REACHD
-6097 DATA  LDY#, 1
-6098 DATA  LDA(Y, 251
-6099 DATA  BEQR, LCA4: REM PAST LAST LN
-6100 DATA  LDY#, 3
-6105 DATA 'LCA3:       REM SCAN FOR NUL
-6110 DATA  INY
+6096 DATA  BCSR, LCA4: REM PSTOP REACHD
+6100 DATA 'LCA2.1
+6101 DATA  LDY#, 1
+6102 DATA  LDA(Y, 251
+6103 DATA  BEQR, LCA4: REM PAST LAST LN
+6105 DATA  LDY#, 3
+6110 DATA 'LCA3:       REM SCAN FOR NUL
+6115 DATA  INY
 6120 DATA  LDA(Y, 251
 6121 DATA  BNER, LCA3: REM NEXT CHAR
 6122 DATA  INY:        REM GO PAST NUL
@@ -1060,54 +1157,109 @@
 6197 DATA  STYZ, 50
 6198 DATA  RTS
 6200 DATA 'LCACHK
-6210 REM FIND LAST LINE NUMBER
-6220 DATA  DECZ, 252
-6221 DATA  LDY#, 255
-6230 DATA 'LCAC1
-6240 DATA  DEY
-6250 DATA  LDA(Y, 251
-6260 DATA  BNER, LCAC1
-6270 DATA  INY
-6271 DATA  INY
-6272 DATA  INY
-6280 DATA  LDA(Y, 251
-6281 DATA  TAX
-6282 DATA  INY
-6283 DATA  LDA(Y, 251
-6290 DATA  INCZ, 252
-6291 DATA  LDY#, 3
-6300 DATA  CMP(Y, 251
-6301 DATA  BMIR, LCACOK
-6302 DATA  BNER, LCACFAIL
-6310 DATA  DEY
-6311 DATA  TXA
-6320 DATA  CMP(Y, 251
-6321 DATA  BMIR, LCACOK
-6330 DATA 'LCACFAIL
-6335 REM NULL OFF THE NEW LINES, ABORT
-6340 DATA  LDA#, 0
-6341 DATA  TAY
-6342 DATA  STA(Y, 251
-6343 DATA  INY
-6344 DATA  STA(Y, 251
-6350 DATA  LDX#, S.ECLASH
-6351 DATA  LDY#, $C5: REM XXX HI
-6352 DATA  JSR, PUTSTR
-6360 DATA  LDX#, S.ABORT
-6361 DATA  LDY#, $C5: REM XXX HI
-6362 DATA  JSR, PUTSTR
-6370 DATA  RTS
-6380 DATA 'LCACOK
-6390 DATA  JMP, LCA2
+6210 REM COMPARE VS LAST LINE NUMBER
+6215 DATA  PLA
+6216 DATA  TAX
+6217 DATA  PLA
+6220 DATA  LDY#, 3
+6221 DATA  CMP(Y, 251
+6222 DATA  BCCR, LCACOK
+6223 DATA  BNER, LCACFAIL
+6230 DATA  TXA
+6231 DATA  DEY
+6232 DATA  CMP(Y, 251
+6233 DATA  BCCR, LCACOK
+6235 DATA 'LCACFAIL
+6240 REM NULL OFF THE NEW LINES, ABORT
+6241 DATA  LDA#, 0
+6242 DATA  TAY
+6243 DATA  STA(Y, 251
+6244 DATA  INY
+6245 DATA  STA(Y, 251
+6270 DATA  LDX#, S.ECLASH
+6271 DATA  LDY#, $C5: REM XXX HI
+6272 DATA  JSR, PUTSTR
+6280 DATA  LDX#, S.ABORT
+6281 DATA  LDY#, $C5: REM XXX HI
+6282 DATA  JSR, PUTSTR
+6283 DATA  RTS
+6290 DATA 'LCACOK
+6291 DATA  JMP, LCA2
+6299 REM
+6400 DATA 'LINECLP
+6410 DATA  JSR, GETSTASTO
+6411 DATA  BCCR, LCLRET
+6412 DATA  BEQR, LCLRET
+6420 DATA  LDX, NSTART
+6421 DATA  LDY, $C40D: REM XXX +
+6425 DATA  JSR, FINDLINE
+6430 DATA  TXA
+6431 DATA  PHA
+6432 DATA  TYA
+6433 DATA  PHA
+6440 DATA  LDX, NSTOP
+6441 DATA  LDY, $C40F: REM XXX +
+6442 DATA  JSR, FINDLINE: REM XXX FNEXT
+6445 DATA  TXA
+6446 DATA  PHA
+6447 DATA  TYA
+6448 DATA  PHA
+6450 DATA  LDA#, 1:    REM FILE NO
+6451 DATA  JSR, GETFILE
+6452 DATA  PLA:        REM PSTOP HI
+6453 DATA  STAZ, 254
+6454 DATA  PLA:        REM PSTOP LO
+6455 DATA  STAZ, 253
+6456 DATA  PLA:        REM PSTART HI
+6457 DATA  STAZ, 252
+6458 DATA  PLA:        REM PSTART LO
+6459 DATA  STAZ, 251
+6460 REM SAVE NEXT PNEXT ON STACK
+6461 REM REPLACE IT WITH NULL AND
+6462 REM SET X.Y = PSTOP + 2
+6463 DATA  LDY#, 0
+6464 DATA  LDA(Y, 253
+6465 DATA  PHA
+6466 DATA  INY
+6467 DATA  LDA(Y, 253
+6468 DATA  PHA
+6470 DATA  LDA#, 0
+6471 DATA  STA(Y, 253
+6472 DATA  DEY
+6473 DATA  STA(Y, 253
+6475 DATA  CLC
+6476 DATA  LDA#, 2
+6477 DATA  ADCZ, 253
+6478 DATA  TAX
+6479 DATA  LDA#, 0
+6480 DATA  ADCZ, 254
+6481 DATA  TAY
+6482 DATA  LDA#, 251
+6483 DATA  JSR, $FFD8: REM SAVE
+6484 DATA  LDY#, 1
+6485 DATA  PLA:        REM PNEXT HI
+6486 DATA  STA(Y, 253: REM -> PSTOP[1]
+6487 DATA  DEY
+6488 DATA  PLA:        REM PNEXT LO
+6489 DATA  STA(Y, 253: REM -> PSTOP[0]
+6490 DATA  BCCR, LCLRET
+6491 DATA  LDX#, S.ERROR
+6492 DATA  LDY#, $C5: REM XXX HI
+6493 DATA  JSR, PUTSTR
+6495 DATA 'LCLRET
+6496 DATA  RTS
+6499 REM
 8000 REM
 8001 REM - ENTRY POINTS -
 8002 REM
-8010 DATA .=,   51200:   REM $C800
-8011 DATA  JMP, LINECNT
-8020 DATA .=,   51210
-8021 DATA  JMP, LINECUT
-8030 DATA .=,   51220
-8031 DATA  JMP, LINECAT
+8005 DATA .=,   51200:   REM $C800
+8006 DATA  JMP, LINECNT
+8010 DATA .=,   51210
+8011 DATA  JMP, LINECUT
+8020 DATA .=,   51220
+8021 DATA  JMP, LINECAT
+8030 DATA .=,   51230
+8031 DATA  JMP, LINECLP
 9000 REM
 9001 REM - STATIC DATA -
 9002 REM
@@ -1134,12 +1286,11 @@
 9180 DATA 'S.FILE,   .DSZ,"FILE: "
 9190 DATA 'S.DRVBRA, .DSZ,"DRIVE ["
 9191 DATA 'S.KETCOL, .DSZ,"]: "
-9500 DATA 'S.ABORT
-9501 DATA  .DS, " - ABORT"
-9502 DATA  .DB, 13
-9503 DATA  .DB, 0
-9510 DATA 'S.ECLASH
-9511 DATA  .DSZ, "LINE NUMBER CLASH"
+9500 DATA 'S.ERROR,  .DSZ,"ERROR "
+9505 DATA 'S.ABORT,  .DB, 13
+9506 DATA            .DSZ,"ABORTED"
+9510 DATA 'S.ECLASH, .DSZ
+9511 DATA  " ! LINE NUMBER CLASH"
 9700 DATA .=, $C700
 9701 DATA 'BUF,      .DZ,256
 9999 DATA .END