commit - a82c27fe5ea67b4c71f1390bd67d74b932f367b3
commit + 65a8a8f00044d5d4e6be1ac5651cd656bbe191c4
blob - fa65d6dd2d09c6fe22921fcec06e62fc121bc4f0
blob + 0fac35319e5e8cd1e4bc05113386810cb7a2a5a5
Binary files LINEUTIL.B,PRG and LINEUTIL.B,PRG differ
blob - 966ae34f817b75e61a3c3fd00c9a35488748b848
blob + dc96c2e69c87f0dedeff7a643ff3d45368323d11
--- LINEUTIL.B.lst
+++ LINEUTIL.B.lst
3044 REM 4400 GETFILE
3045 REM 4500 FINDLAST,PUTNL,PRINTNATLN
3046 REM 4600 DELTAPPLY
+3047 REM 4700 RELINK
3099 REM
3100 DATA 'PUTSTR
3101 REM
4200 DATA 'GETSTASTO
4201 REM
4202 REM X.Y OUT: NSTOP
-4203 REM
-4204 REM CLOBBERS: A, X, Y, 2, P, Q
-4205 REM
+4203 REM C,Z OUT: CMP NSTOP-NSTART
+4204 REM
+4205 REM CLOBBERS: A, X, Y, 2, P, Q
+4206 REM
4210 DATA LDX#, S.START
4211 DATA LDY#, S.START^
4212 DATA JSR, PUTSTR
4691 DATA 'DEA3
4692 DATA RTS
4699 REM
+4700 DATA 'RELINK
+4701 REM
+4702 REM P IN: PTR TO START LINE
+4703 REM Q IN: PTR TO STOP LINE
+4704 REM P OUT: PTR BEYOND LAST LINE
+4705 REM
+4706 REM CLOBBERS: A, X, Y, T
+4709 REM
+4710 DATA 'RL1
+4711 DATA LDAZ, P+
+4712 DATA CMPZ, Q+
+4713 DATA BCCR, RL2
+4714 DATA BNER, RL4
+4715 DATA LDAZ, P
+4716 DATA CMPZ, Q
+4717 DATA BCSR, RL4: REM PSTOP REACHD
+4720 DATA 'RL2
+4721 DATA LDY#, 1
+4722 DATA LDA(Y, P
+4723 DATA BEQR, RL4: REM PAST LAST LN
+4725 DATA LDY#, 3
+4730 DATA 'RL3: REM SCAN FOR NUL
+4735 DATA INY
+4740 DATA LDA(Y, P
+4741 DATA BNER, RL3: REM NEXT CHAR
+4742 DATA INY: REM GO PAST NUL
+4750 DATA CLC: REM ADV POINTER
+4751 DATA TYA
+4752 DATA ADCZ, P
+4753 DATA TAX
+4754 DATA LDA#, 0
+4755 DATA ADCZ, P+
+4760 DATA LDY#, 1
+4761 DATA STA(Y, P
+4762 DATA STAZ, T: REM SAVE HI BYTE
+4763 DATA TXA
+4764 DATA DEY
+4765 DATA STA(Y, P
+4766 DATA LDYZ, T
+4770 DATA STXZ, P
+4771 DATA STYZ, P+
+4780 DATA JMP, RL1: REM NEXT LINE
+4790 DATA 'RL4
+4791 DATA RTS
+4799 REM
+4999 REM
5000 DATA 'LINECUT
5010 DATA JSR, GETSTASTO
5011 DATA BCCR, LCU1: REM <
6065 DATA LDX#, S.ERROR
6066 DATA LDY#, S.ERROR^
6067 DATA JSR, PUTSTR
-6068 DATA RTS
+6068 DATA 'LCARET
+6069 DATA RTS
6070 DATA 'LCA1.1
6071 DATA STXZ, Q: REM PSTOP
6072 DATA STYZ, Q+
6075 REM CHECK FOR LINE NUMBER CLASH
-6076 DATA JMP, LCACHK
+6076 DATA JSR, LCACHK
+6077 DATA BCSR, LCARET
6080 REM SCAN & RELINK LINES
-6081 DATA 'LCA2: REM FOR EACH LINE
-6090 DATA LDAZ, P+
-6091 DATA CMPZ, Q+
-6092 DATA BCCR, LCA2.1
-6093 DATA BNER, LCA4
-6094 DATA LDAZ, P
-6095 DATA CMPZ, Q
-6096 DATA BCSR, LCA4: REM PSTOP REACHD
-6100 DATA 'LCA2.1
-6101 DATA LDY#, 1
-6102 DATA LDA(Y, P
-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, P
-6121 DATA BNER, LCA3: REM NEXT CHAR
-6122 DATA INY: REM GO PAST NUL
-6130 DATA CLC: REM ADV POINTER
-6131 DATA TYA
-6132 DATA ADCZ, P
-6133 DATA TAX
-6134 DATA LDA#, 0
-6135 DATA ADCZ, P+
-6140 DATA LDY#, 1
-6141 DATA STA(Y, P
-6142 DATA STAZ, T: REM SAVE HI BYTE
-6143 DATA TXA
-6144 DATA DEY
-6145 DATA STA(Y, P
-6146 DATA LDYZ, T
-6150 DATA STXZ, P
-6151 DATA STYZ, P+
-6160 DATA JMP, LCA2: REM NEXT LINE
-6170 DATA 'LCA4
+6081 DATA JSR, RELINK
6180 REM REWRITE TERMINATOR TO BE SAFE
6181 DATA LDA#, 0
6182 DATA TAY
6280 DATA LDX#, S.ABORT
6281 DATA LDY#, S.ABORT^
6282 DATA JSR, PUTSTR
-6283 DATA RTS
+6285 DATA SEC
6290 DATA 'LCACOK
-6291 DATA JMP, LCA2
+6291 DATA RTS
6299 REM
6400 DATA 'LINECLP
6410 DATA JSR, GETSTASTO
6411 DATA BCCR, LCLRET
-6412 DATA BEQR, LCLRET
+6412 DATA BNER, LCL1
+6415 DATA 'LCLRET
+6416 DATA RTS
+6419 DATA 'LCL1
6420 DATA LDX, NSTART
6421 DATA LDY, NSTART+
6425 DATA JSR, FINDLINE
6446 DATA STY, PSTOP+
6450 DATA LDA#, 1: REM FILE NO
6451 DATA JSR, GETFILE
-6452 DATA LDX, PSTART
-6453 DATA LDY, PSTART+
-6454 DATA STXZ, P
-6455 DATA STYZ, P+
-6456 DATA LDX, PSTOP
-6457 DATA LDY, PSTOP+
-6458 DATA STXZ, Q
-6459 DATA STYZ, Q+
-6460 REM SAVE NEXT PNEXT
-6461 REM REPLACE IT WITH NULL AND
-6462 REM SET X.Y = PSTOP + 2
-6463 DATA LDY#, 0
-6464 DATA LDA(Y, Q
-6465 DATA STA, TMP
-6466 DATA INY
-6467 DATA LDA(Y, Q
-6468 DATA STA, TMP+
-6470 DATA LDA#, 0
-6471 DATA STA(Y, Q
-6472 DATA DEY
-6473 DATA STA(Y, Q
-6475 DATA CLC
-6476 DATA LDA#, 2
-6477 DATA ADCZ, Q
-6478 DATA TAX
-6479 DATA LDA#, 0
-6480 DATA ADCZ, Q+
-6481 DATA TAY
-6482 DATA LDA#, P
-6483 DATA JSR, SAVE
-6484 DATA LDY#, 0
-6485 DATA LDA, TMP: REM PNEXT LO
-6486 DATA STA(Y, Q: REM -> PSTOP[0]
-6487 DATA INY
-6488 DATA LDA, TMP+: REM PNEXT HI
-6489 DATA STA(Y, Q: REM -> PSTOP[1]
-6490 DATA BCCR, LCLRET
-6491 DATA LDX#, S.ERROR
-6492 DATA LDY#, S.ERROR^
-6493 DATA JSR, PUTSTR
-6495 DATA 'LCLRET
-6496 DATA RTS
-6499 REM
+6455 REM "RELOCATE" PTRS REL TO 2049
+6456 DATA LDX, PSTART
+6457 DATA LDY, PSTART+
+6458 DATA STXZ, P
+6459 DATA STYZ, P+
+6460 DATA SEC
+6461 DATA LDA#, 2049
+6462 DATA SBCZ, P
+6463 DATA STA, DELTA
+6464 DATA LDA#, 2049^
+6465 DATA SBCZ, P+
+6466 DATA STA, DELTA+
+6470 DATA LDX, PSTOP
+6471 DATA LDY, PSTOP+
+6475 DATA LDA#, 0
+6476 DATA JSR, DELTAPPLY
+6480 REM SAVE NEXT PNEXT
+6481 REM REPLACE IT WITH NULL AND
+6482 REM SET X.Y = PSTOP + 2
+6483 DATA LDY#, 0
+6484 DATA LDA(Y, Q
+6485 DATA STA, TMP
+6486 DATA INY
+6487 DATA LDA(Y, Q
+6488 DATA STA, TMP+
+6490 DATA LDA#, 0
+6491 DATA STA(Y, Q
+6492 DATA DEY
+6493 DATA STA(Y, Q
+6550 DATA CLC
+6551 DATA LDA#, 2
+6552 DATA ADCZ, Q
+6553 DATA TAX
+6554 DATA LDA#, 0
+6555 DATA ADCZ, Q+
+6556 DATA TAY
+6560 DATA LDA, PSTART
+6561 DATA STAZ, P
+6562 DATA LDA, PSTART+
+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
+6599 REM
9900 REM
9901 REM ENTRY POINTS: $C350 - $C3B4
9902 REM