commit - 2b548c651f8388d9bfaf8faec2f7deb57dfce552
commit + 09d199d623ec10bec6ec8055610375c0407cc5ae
blob - 6b8d83420498126b8fafe2d41aed1485164f430a
blob + 1b75f998e72033242211a2acd2560b2bde5c579b
Binary files LINEUTIL.B,PRG and LINEUTIL.B,PRG differ
blob - f44362a35f3657799cb9ee508a4fc93acaea5d88
blob + cbe6d493723f9a768af3186ee2b695e54de35de9
--- LINEUTIL.B.lst
+++ LINEUTIL.B.lst
1005 REM
1009 REM -999 [BASASM]
1010 REM 1000 TOP COMMENT
-1015 REM 1500 (SYMBOL DEFINITIONS)
+1015 REM 1500 SYMBOL DEFINITIONS
1020 REM 2000 LINECNT
1030 REM 3000 SUBROUTINES
1050 REM 5000 LINECUT
1606 DATA MEMSIZ=, 55
1610 DATA FA=, 186: REM CURRENT DEV
1620 DATA BLNSW=, 204: REM CURSOR BLNK
+1700 DATA T=, 2: REM TEMPORARY
+1710 DATA P=, 251: REM WORD/PTR 1
+1720 DATA Q=, 253: REM WORD/PTR 2
1999 REM
2000 DATA 'LINECNT
2001 DATA LDXZ, TXTTAB
3725 DATA JSR, CHROUT
3726 DATA LDA#, 13
3727 DATA JSR, CHROUT
-3730 DATA LDAZ, 2
-3731 DATA LDXZ, 251
-3732 DATA LDYZ, 252
+3730 DATA LDXZ, 251
+3731 DATA LDYZ, 252
+3732 DATA LDAZ, 2
3733 DATA RTS
3799 REM
3800 DATA 'ATOI
4101 REM
4102 REM 251-252 IN: DST POINTER
4103 REM 253-254 IN: SRC POINTER
-4104 REM X/Y IN: LEN X=MSB!
+4104 REM Y.X IN: LEN !X=MSB!
4105 REM
4106 REM CLOBBERS: A, X, Y, 2, 251-254
4107 REM
-4110 DATA CPY#, 0
-4111 DATA BEQR, MC2
-4115 DATA STYZ, 2: REM SAVE LO(LEN)
-4120 DATA 'MC1
-4130 DATA DEY
-4140 DATA LDA(Y, 253
-4141 DATA STA(Y, 251
-4150 DATA CPY#, 0
-4151 DATA BNER, MC1
-4155 DATA CLC
-4156 DATA LDAZ, 251
-4157 DATA ADCZ, 2
-4158 DATA STAZ, 251
-4159 DATA LDAZ, 252
-4160 DATA ADC#, 0
-4161 DATA STAZ, 252
-4162 DATA CLC
-4163 DATA LDAZ, 253
-4164 DATA ADCZ, 2
-4165 DATA STAZ, 253
-4166 DATA LDAZ, 254
-4167 DATA ADC#, 0
-4168 DATA STAZ, 254
-4170 DATA 'MC2
-4175 DATA CPX#, 0
-4176 DATA BEQR, MC3
-4180 DATA DEX
-4181 DATA INCZ, 252
-4182 DATA INCZ, 254
-4185 DATA JMP, MC1
-4190 DATA 'MC3
-4195 DATA RTS
+4108 REM NB: OVERLAP OKAY IF DST < SRC
+4109 REM
+4110 DATA STYZ, T: REM SAVE LO(LEN)
+4111 DATA LDY#, 0
+4115 DATA CPX#, 0
+4116 DATA BEQR, MC3
+4130 DATA 'MC2: REM BLOCK COPY
+4140 DATA LDA(Y, Q
+4141 DATA STA(Y, P
+4142 DATA INY
+4145 DATA LDA(Y, Q: REM UNROLL (11%)
+4146 DATA STA(Y, P
+4147 DATA INY
+4150 DATA BNER, MC2
+4160 DATA INCZ, P+
+4161 DATA INCZ, Q+
+4165 DATA DEX
+4166 DATA BNER, MC2
+4170 DATA 'MC3: REM PARTIAL BLOCK
+4175 DATA LDAZ, T: REM LO(LEN)
+4176 DATA BEQR, MCRET
+4180 DATA 'MC4
+4181 DATA LDA(Y, Q
+4182 DATA STA(Y, P
+4183 DATA INY
+4184 DATA CPYZ, T
+4185 DATA BCCR, MC4
+4190 DATA 'MCRET
+4191 DATA RTS
4199 REM
4200 DATA 'GETSTASTO
4201 REM
4434 DATA LDY#, BUF^
4435 DATA JSR, GETSTR
4437 DATA JSR, SETNAM
-4440 DATA RTS
+4441 DATA RTS
4499 REM
4500 DATA 'FINDLAST
4501 REM
5020 DATA 'LCU1
5021 DATA RTS: REM NSTOP <= NSTART
5030 DATA 'LCU2
-5060 REM LOCATE START -> PTR IN 251
+5060 REM LOCATE START -> PTR IN P (251)
5061 DATA LDX, NSTART
5062 DATA LDY, NSTART+
5063 DATA JSR, FINDLINE
5065 DATA PHA
5066 DATA TYA
5067 DATA PHA
-5070 REM LOCATE STOP LINE -> PTR IN 253
+5070 REM LOCATE STOP LINE -> PTR IN Q
5071 DATA LDX, NSTOP
5072 DATA LDY, NSTOP+
5073 DATA JSR, FINDNEXT
-5074 DATA STXZ, 253
-5075 DATA STYZ, 254
+5074 DATA STXZ, Q
+5075 DATA STYZ, Q+
5076 DATA PLA: REM PSTART HI
-5077 DATA STAZ, 252
+5077 DATA STAZ, P+
5078 DATA PLA: REM PSTART LO
-5079 DATA STAZ, 251
-5240 REM CALC DELTA=STOP-START
+5079 DATA STAZ, P
+5240 REM CALC. DELTA = PSTOP - PSTART
5250 DATA SEC
-5251 DATA LDAZ, 253
-5252 DATA SBCZ, 251
+5251 DATA LDAZ, Q
+5252 DATA SBCZ, P
5253 DATA STA, DELTA
-5254 DATA LDAZ, 254
-5255 DATA SBCZ, 252
+5254 DATA LDAZ, Q+
+5255 DATA SBCZ, P+
5256 DATA STA, DELTA+
5260 REM SCAN AFTER STOP, ADJUST PTRS
-5270 DATA LDXZ, 253
-5271 DATA LDYZ, 254
+5270 DATA LDXZ, Q
+5271 DATA LDYZ, Q+
5280 DATA STX, TMP: REM SAVE PSTOP
5281 DATA STY, TMP+
5290 DATA 'LCU9
5300 DATA LDY#, 1
-5301 DATA LDA(Y, 253
+5301 DATA LDA(Y, Q
5302 DATA BEQR, LCU10: REM DONE
-5310 DATA LDY#, 0
-5320 DATA LDA(Y, 253
+5310 DATA DEY
+5320 DATA LDA(Y, Q
5321 DATA TAX: REM SAVE LO(PNEXT)
5330 DATA SEC
5331 DATA SBC, DELTA
-5340 DATA STA(Y, 253
+5340 DATA STA(Y, Q
5341 DATA INY
-5350 DATA LDA(Y, 253
-5351 DATA STAZ, 2: REM SAVE HI(PNEXT)
+5350 DATA LDA(Y, Q
+5351 DATA STAZ, T: REM SAVE HI(PNEXT)
5360 DATA SBC, DELTA+
-5370 DATA STA(Y, 253
-5380 DATA LDYZ, 2
-5381 DATA STXZ, 253: REM NEXT LINE
-5382 DATA STYZ, 254
+5370 DATA STA(Y, Q
+5380 DATA LDYZ, T
+5381 DATA STXZ, Q: REM NEXT LINE
+5382 DATA STYZ, Q+
5390 DATA JMP, LCU9
5391 DATA 'LCU10
5392 DATA LDX, TMP: REM SAVED PSTOP
5393 DATA LDY, TMP+
-5394 DATA STXZ, 253
-5395 DATA STYZ, 254
+5394 DATA STXZ, Q
+5395 DATA STYZ, Q+
5400 REM COPY THE REMAINING DATA DOWN
5410 DATA SEC: REM LEN=STREND-PSTOP
5411 DATA LDAZ, STREND
-5412 DATA SBCZ, 253
+5412 DATA SBCZ, Q
5413 DATA TAY: REM Y = LO BYTE!
5414 DATA LDAZ, STREND+
-5415 DATA SBCZ, 254
+5415 DATA SBCZ, Q+
5416 DATA TAX: REM X = HI BYTE!
5420 DATA JSR, MEMCPY
5430 REM ADJUST VARTAB, ARYTAB, STREND
6020 DATA LDA(Y, 251
6021 DATA PHA
6025 DATA 'LCA1
-6030 DATA LDA#, 1: REM FILE NO
-6031 DATA JSR, GETFILE
+6030 DATA JSR, GETFILE
6040 DATA SEC
6041 DATA LDAZ, VARTAB
6042 DATA SBC#, 2: REM CUT NULL OFF
6049 DATA LDA#, 0: REM L/V
6050 DATA JSR, LOAD
6051 DATA BCCR, LCA1.1
-6055 DATA LDX#, S.ERROR
-6056 DATA LDY#, S.ERROR^
-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
-6075 DATA JMP, LCACHK
+6055 DATA PLA
+6056 DATA PLA
+6060 DATA LDA#, 0
+6061 DATA TAY
+6062 DATA STA(Y, 251
+6063 DATA INY
+6064 DATA STA(Y, 251
+6065 DATA LDX#, S.ERROR
+6066 DATA LDY#, S.ERROR^
+6067 DATA JSR, PUTSTR
+6068 DATA RTS
+6070 DATA 'LCA1.1
+6071 DATA STXZ, 253: REM PSTOP
+6072 DATA STYZ, 254
+6075 REM CHECK FOR LINE NUMBER CLASH
+6076 DATA JMP, LCACHK
6080 REM SCAN & RELINK LINES
6081 DATA 'LCA2: REM FOR EACH LINE
6090 DATA LDAZ, 252