Commit Diff


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
@@ -265,6 +265,7 @@
 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
@@ -517,9 +518,10 @@
 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
@@ -710,6 +712,52 @@
 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 <
@@ -826,48 +874,16 @@
 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
@@ -909,14 +925,17 @@
 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
@@ -929,49 +948,65 @@
 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