commit a82c27fe5ea67b4c71f1390bd67d74b932f367b3 from: Sven M. Hallberg date: Sun May 31 18:15:35 2026 UTC LINEUTIL.B.7 commit - 93808d44910f1689e7e65a3485be4347f7754c7b commit + a82c27fe5ea67b4c71f1390bd67d74b932f367b3 blob - 1b75f998e72033242211a2acd2560b2bde5c579b blob + fa65d6dd2d09c6fe22921fcec06e62fc121bc4f0 Binary files LINEUTIL.B,PRG and LINEUTIL.B,PRG differ blob - cbe6d493723f9a768af3186ee2b695e54de35de9 blob + 966ae34f817b75e61a3c3fd00c9a35488748b848 --- LINEUTIL.B.lst +++ LINEUTIL.B.lst @@ -6,42 +6,83 @@ 1005 REM 1009 REM -999 [BASASM] 1010 REM 1000 TOP COMMENT -1015 REM 1500 SYMBOL DEFINITIONS +1011 REM 1100 SYMBOL DEFINITIONS +1015 REM 1500 VARIABLES & STATIC DATA 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 +1099 REM 9900 ENTRY POINTS +1100 REM +1101 REM - SYMBOL DEFINITIONS - +1102 REM +1110 DATA CHROUT=, $FFD2 +1120 DATA GETIN=, $FFE4 +1130 DATA SETLFS=, $FFBA +1140 DATA SETNAM=, $FFBD +1150 DATA LOAD=, $FFD5 +1160 DATA SAVE=, $FFD8 +1200 DATA TXTTAB=, 43 +1201 DATA VARTAB=, 45 +1202 DATA ARYTAB=, 47 +1203 DATA STREND=, 49 +1204 DATA FRETOP=, 51 +1205 DATA FRESPC=, 53 +1206 DATA MEMSIZ=, 55 +1210 DATA FA=, 186: REM CURRENT DEV +1220 DATA BLNSW=, 204: REM CURSOR BLNK +1300 DATA T=, 2: REM TEMPORARY +1310 DATA P=, 251: REM WORD/PTR 1 +1320 DATA Q=, 253: REM WORD/PTR 2 +1330 DATA B=, 255: REM BKUP/AUX 1500 REM -1501 REM - SYMBOL DEFINITIONS - +1501 REM - STATIC DATA / VARIABLES - 1502 REM -1510 DATA CHROUT=, $FFD2 -1520 DATA GETIN=, $FFE4 -1530 DATA SETLFS=, $FFBA -1540 DATA SETNAM=, $FFBD -1550 DATA LOAD=, $FFD5 -1560 DATA SAVE=, $FFD8 -1600 DATA TXTTAB=, 43 -1601 DATA VARTAB=, 45 -1602 DATA ARYTAB=, 47 -1603 DATA STREND=, 49 -1604 DATA FRETOP=, 51 -1605 DATA FRESPC=, 53 -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 +1510 DATA .=, $C000 +1511 DATA 'BUF, .DZ,256 +1520 DATA 'CNT, .DW,0 +1521 DATA 'CNT.REM, .DW,0 +1522 DATA 'CNT.DATA, .DW,0 +1523 DATA 'CNT.JUNK, .DW,0 +1524 DATA 'CNT.SPC, .DW,0 +1525 DATA 'CNT.BS, .DW,0 +1530 DATA 'NSTART, .DW,0 +1531 DATA 'NSTOP, .DW,0 +1532 DATA 'PSTART, .DW,0 +1533 DATA 'PSTOP, .DW,0 +1540 DATA 'DELTA, .DW,0 +1541 DATA 'TMP, .DW,0 +1599 REM +1700 DATA 'S.REM, .DSZ," REM " +1701 DATA 'S.DATA, .DSZ," DATA " +1702 DATA 'S.LINES, .DSZ," LINES " +1703 DATA 'S.BYTES, .DSZ," BYTES " +1704 DATA 'S.JUNK, .DSZ," JUNK " +1705 DATA 'S.SPC, .DSZ," SPC " +1710 DATA 'S.START, .DSZ,"START: " +1711 DATA 'S.STOP, .DSZ,"STOP: " +1720 DATA 'S.FILE, .DSZ,"FILE: " +1721 DATA 'S.DRVBRA, .DSZ,"DRIVE [" +1722 DATA 'S.KETCOL, .DSZ,"]: " +1799 REM +1800 DATA 'S.ERROR, .DSZ,"ERROR " +1805 DATA 'S.ABORT, .DB, 13 +1806 DATA .DSZ,"ABORTED" +1810 DATA 'S.ECLASH, .DSZ +1811 DATA " ! LINE NUMBER CLASH" +1990 REM +1991 REM +1995 DATA .LIM, 50000: REM $C350 +1996 REM -ENTRY POINT TABLE GOES HERE- +1997 DATA .=, 50100: REM $C3B4 +1998 REM 1999 REM 2000 DATA 'LINECNT 2001 DATA LDXZ, TXTTAB 2002 DATA LDYZ, TXTTAB+ -2003 DATA STXZ, 251 -2004 DATA STYZ, 252 +2003 DATA STXZ, P +2004 DATA STYZ, P+ 2005 DATA LDA#, 0 2006 DATA STA, CNT 2007 DATA STA, CNT+ @@ -56,7 +97,7 @@ 2020 DATA 'LOOP 2021 DATA LDA#, 1 2022 DATA TAY -2023 DATA LDA(Y, 251 +2023 DATA LDA(Y, P 2024 DATA BNER, NOTDONE 2025 REM COUNT THE TERMINATING NULL PTR 2026 DATA CLC @@ -78,7 +119,7 @@ 2101 DATA TAY 2105 DATA 'LC1 2107 DATA INY: REM NEXT CHAR -2110 DATA LDA(Y, 251: REM LOAD CHAR +2110 DATA LDA(Y, P: REM LOAD CHAR 2120 DATA BEQR, NEXT: REM END OF LINE 2130 DATA CMP#, $20: REM SPACE 2140 DATA BNER, LC1.1:REM EXIT LOOP @@ -104,7 +145,7 @@ 2229 REM 3. SCAN REST OF LINE 2230 DATA 'LC3 2231 DATA INY: REM NEXT CHAR -2232 DATA LDA(Y, 251: REM LOAD CHAR +2232 DATA LDA(Y, P: REM LOAD CHAR 2233 DATA BEQR, NEXT: REM END OF LINE 2235 DATA CMP#, $20: REM SPACE 2240 DATA BNER, LC3.1 @@ -117,7 +158,7 @@ 2252 DATA BNER, LC3 2260 DATA 'LC3.2: REM SKIP STRING 2261 DATA INY -2262 DATA LDA(Y, 251: REM LOAD NXT CHR +2262 DATA LDA(Y, P: REM LOAD NXT CHR 2263 DATA BEQR, NEXT: REM END OF LINE 2265 DATA CMP#, $22 2266 DATA BEQR, LC3: REM QUOTE CLOSED @@ -135,29 +176,29 @@ 2420 REM ADVANCE (DEREF) LINE PTR 2421 DATA LDA#, 0 2422 DATA TAY -2423 DATA LDA(Y, 251 +2423 DATA LDA(Y, P 2425 DATA TAX 2426 DATA INY -2427 DATA LDA(Y, 251 +2427 DATA LDA(Y, P 2428 DATA TAY -2430 DATA STXZ, 251 -2431 DATA STYZ, 252 +2430 DATA STXZ, P +2431 DATA STYZ, P+ 2490 DATA JMP, LOOP 2500 DATA 'DONE -2501 REM PUSH 251 PAST THE END +2501 REM PUSH "P" (251) PAST THE END 2502 DATA CLC -2503 DATA LDAZ, 251 +2503 DATA LDAZ, P 2504 DATA ADC#, 2 -2505 DATA STAZ, 251 +2505 DATA STAZ, P 2506 DATA BCCR, DONE.1 -2507 DATA INCZ, 252 +2507 DATA INCZ, P+ 2508 DATA 'DONE.1 2509 REM CALCULATE TOTAL BYTES 2510 DATA SEC -2511 DATA LDAZ, 251 +2511 DATA LDAZ, P 2512 DATA SBCZ, TXTTAB 2513 DATA STA, CNT.BS -2514 DATA LDAZ, 252 +2514 DATA LDAZ, P+ 2515 DATA SBCZ, TXTTAB+ 2516 DATA STA, CNT.BS+ 2520 REM CALCULATE JUNK = BS - "JUNK" @@ -223,26 +264,27 @@ 3043 REM 4300 FINDLINE / FINDNEXT 3044 REM 4400 GETFILE 3045 REM 4500 FINDLAST,PUTNL,PRINTNATLN +3046 REM 4600 DELTAPPLY 3099 REM 3100 DATA 'PUTSTR 3101 REM 3102 REM X.Y IN: PTR TO NULL-TERM STR 3103 REM A OUT: LENGTH OF STRING 3104 REM -3105 REM CLOBBERS: A, 251-252 +3105 REM CLOBBERS: A, 251-252 (P) 3106 REM -3110 DATA STXZ, 251: REM USER Z/P AREA -3111 DATA STYZ, 252 +3110 DATA STXZ, P: REM USER ZP AREA +3111 DATA STYZ, P+ 3112 DATA LDY#, 0 3120 DATA 'PS1 -3130 DATA LDA(Y, 251 +3130 DATA LDA(Y, P 3135 DATA BEQR, PS2 3140 DATA JSR, CHROUT 3150 DATA INY 3160 DATA JMP, PS1 3170 DATA 'PS2 3175 DATA TYA -3176 DATA LDYZ, 252 +3176 DATA LDYZ, P+ 3180 DATA RTS 3199 REM 3200 DATA 'QUOTREM @@ -252,30 +294,30 @@ 3204 REM A RESULT: QUOTIENT 3205 REM X.Y RESULT: REMAINDER 3206 REM -3207 REM CLOBBERS 2 AND C +3207 REM CLOBBERS: C, T 3208 REM 3209 REM 3210 DATA LDA#, 0 -3211 DATA STAZ, 2 +3211 DATA STAZ, T 3220 DATA 'QR1 3225 DATA SEC 3230 DATA TXA -3240 DATA SBCZ, 251 +3240 DATA SBCZ, P 3245 DATA TAX 3250 DATA TYA -3260 DATA SBCZ, 252 +3260 DATA SBCZ, P+ 3265 DATA TAY 3270 DATA BCCR, QR2 -3280 DATA INCZ, 2 +3280 DATA INCZ, T 3290 DATA JMP, QR1 3300 DATA 'QR2 3310 DATA TXA -3312 DATA ADCZ, 251 +3312 DATA ADCZ, P 3314 DATA TAX 3316 DATA TYA -3318 DATA ADCZ, 252 +3318 DATA ADCZ, P+ 3320 DATA TAY -3322 DATA LDAZ, 2 +3322 DATA LDAZ, T 3323 DATA CLC 3324 DATA RTS 3390 REM @@ -283,33 +325,33 @@ 3401 REM 3402 REM X.Y IN: NUMBER TO PRINT 3403 REM -3404 REM CLOBBERS: A, X, Y, 2, 251-252 +3404 REM CLOBBERS: A, X, Y, T, P 3405 REM 3410 DATA LDA#, 10000 -3411 DATA STAZ, 251 +3411 DATA STAZ, P 3412 DATA LDA#, 10000^ -3413 DATA STAZ, 252 +3413 DATA STAZ, P+ 3420 DATA JSR, QUOTREM 3430 DATA ADC#, $30: REM "0" 3440 DATA JSR, CHROUT 3450 DATA LDA#, 1000 -3451 DATA STAZ, 251 +3451 DATA STAZ, P 3452 DATA LDA#, 1000^ -3453 DATA STAZ, 252 +3453 DATA STAZ, P+ 3460 DATA JSR, QUOTREM 3470 DATA ADC#, $30 3480 DATA JSR, CHROUT 3490 DATA LDA#, 100 -3491 DATA STAZ, 251 +3491 DATA STAZ, P 3492 DATA LDA#, 0 -3493 DATA STAZ, 252 +3493 DATA STAZ, P+ 3500 DATA JSR, QUOTREM 3510 DATA ADC#, $30 3520 DATA JSR, CHROUT 3530 DATA LDA#, 10 -3531 DATA STAZ, 251 +3531 DATA STAZ, P 3532 DATA LDA#, 0 -3533 DATA STAZ, 252 +3533 DATA STAZ, P+ 3540 DATA JSR, QUOTREM 3550 DATA ADC#, $30 3551 DATA JSR, CHROUT @@ -320,20 +362,20 @@ 3599 REM 3600 DATA 'GETSTR 3601 REM -3602 REM X/Y IN/OUT: PTR TO STR BUF +3602 REM X.Y IN/OUT: PTR TO STR BUF 3603 REM A OUT: LEN OF STRING 3604 REM -3605 REM CLOBBERS: 2, 251-252 +3605 REM CLOBBERS: T, P 3606 REM -3610 DATA STXZ, 251 -3611 DATA STYZ, 252 +3610 DATA STXZ, P +3611 DATA STYZ, P+ 3620 DATA LDY#, 0 3625 DATA STYZ, BLNSW: REM CURSOR ON 3630 DATA 'GS1 -3635 DATA STYZ, 2: REM SAVE Y +3635 DATA STYZ, T: REM SAVE Y 3640 DATA JSR, GETIN 3641 DATA BEQR, GS1 -3645 DATA LDYZ, 2: REM RESTORE Y +3645 DATA LDYZ, T: REM RESTORE Y 3650 DATA CMP#, 13: REM CR 3651 DATA BEQR, GS3 3660 DATA CMP#, 20: REM DEL @@ -349,41 +391,41 @@ 3682 DATA BCCR, GS1 3683 DATA CMP#, 127: REM DEL 3684 DATA BCSR, GS1 -3690 DATA STA(Y, 251 +3690 DATA STA(Y, P 3691 DATA INY 3695 DATA JSR, CHROUT 3696 DATA JMP, GS1 3700 DATA 'GS3 3710 DATA LDA#, 0 -3720 DATA STA(Y, 251 -3721 DATA STYZ, 2 +3720 DATA STA(Y, P +3721 DATA STYZ, T 3722 DATA LDA#, 1 3723 DATA STAZ, BLNSW: REM CURSOR OFF 3724 DATA LDA#, 32: REM ERASE CRSR 3725 DATA JSR, CHROUT 3726 DATA LDA#, 13 3727 DATA JSR, CHROUT -3730 DATA LDXZ, 251 -3731 DATA LDYZ, 252 -3732 DATA LDAZ, 2 +3730 DATA LDXZ, P +3731 DATA LDYZ, P+ +3732 DATA LDAZ, T 3733 DATA RTS 3799 REM 3800 DATA 'ATOI 3801 REM -3802 REM X/Y IN: PTR TO STR -3803 REM X/Y OUT: RESULT +3802 REM X.Y IN: PTR TO STR +3803 REM X.Y OUT: RESULT 3804 REM A OUT: LEN CONSUMED 3805 REM -3806 REM CLOBBERS: 2, 251-254 +3806 REM CLOBBERS: T, P, Q 3807 REM -3810 DATA STXZ, 251 -3811 DATA STYZ, 252 +3810 DATA STXZ, P +3811 DATA STYZ, P+ 3820 DATA LDX#, 0 3821 DATA LDY#, 0 -3825 DATA STXZ, 253 -3826 DATA STXZ, 254 +3825 DATA STXZ, Q +3826 DATA STXZ, Q+ 3830 DATA 'AI1 -3840 DATA LDA(Y, 251 +3840 DATA LDA(Y, P 3841 DATA BEQR, AI2 3849 REM 3850 DATA CMP#, 48: REM "0" @@ -392,39 +434,39 @@ 3861 DATA BCSR, AI2 3870 DATA SEC 3871 DATA SBC#, 48 -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 -3891 DATA ROLZ, 254 -3892 DATA ASLZ, 253: REM DBL 4X -3893 DATA ROLZ, 254 +3880 DATA STAZ, T: REM SAVE DIGIT +3885 DATA LDAZ, Q: REM SAVE VALUE +3886 DATA LDXZ, Q+ +3890 DATA ASLZ, Q: REM DBL 2X +3891 DATA ROLZ, Q+ +3892 DATA ASLZ, Q: REM DBL 4X +3893 DATA ROLZ, Q+ 3900 DATA CLC: REM ADD 5X -3901 DATA ADCZ, 253 -3902 DATA STAZ, 253 +3901 DATA ADCZ, Q +3902 DATA STAZ, Q 3903 DATA TXA -3904 DATA ADCZ, 254 -3905 DATA STAZ, 254 -3910 DATA ASLZ, 253: REM DBL 10X -3911 DATA ROLZ, 254 +3904 DATA ADCZ, Q+ +3905 DATA STAZ, Q+ +3910 DATA ASLZ, Q: REM DBL 10X +3911 DATA ROLZ, Q+ 3920 DATA CLC: REM ADD DIGIT -3921 DATA LDAZ, 2 -3922 DATA ADCZ, 253 -3923 DATA STAZ, 253 +3921 DATA LDAZ, T +3922 DATA ADCZ, Q +3923 DATA STAZ, Q 3924 DATA BCCR, AI3 -3925 DATA INCZ, 254 +3925 DATA INCZ, Q+ 3926 DATA 'AI3 3930 DATA INY 3940 DATA BNER, AI1 3950 DATA 'AI2 3955 DATA TYA -3956 DATA LDXZ, 253 -3957 DATA LDYZ, 254 +3956 DATA LDXZ, Q +3957 DATA LDYZ, Q+ 3960 DATA RTS 3999 REM 4000 DATA 'READNAT 4001 REM -4002 REM X/Y OUT: RESULT +4002 REM X.Y OUT: RESULT 4003 REM A OUT: LENGTH CONSUMED 4004 REM 4010 DATA LDX#, BUF @@ -436,11 +478,11 @@ 4099 REM 4100 DATA 'MEMCPY 4101 REM -4102 REM 251-252 IN: DST POINTER -4103 REM 253-254 IN: SRC POINTER +4102 REM P (251) IN: DST POINTER +4103 REM Q (253) IN: SRC POINTER 4104 REM Y.X IN: LEN !X=MSB! 4105 REM -4106 REM CLOBBERS: A, X, Y, 2, 251-254 +4106 REM CLOBBERS: A, X, Y, T, P, Q 4107 REM 4108 REM NB: OVERLAP OKAY IF DST < SRC 4109 REM @@ -476,7 +518,7 @@ 4201 REM 4202 REM X.Y OUT: NSTOP 4203 REM -4204 REM CLOBBERS: A, X, Y, 2, 251-254 +4204 REM CLOBBERS: A, X, Y, 2, P, Q 4205 REM 4210 DATA LDX#, S.START 4211 DATA LDY#, S.START^ @@ -502,58 +544,58 @@ 4301 REM 4302 REM X.Y IN: LINE NUMBER 4303 REM X.Y OUT: LINE POINTER -4304 REM 251.252 OUT: -"- +4304 REM P (251) OUT: -"- 4305 REM -4306 REM CLOBBERS: A, X, Y, 251-254 +4306 REM CLOBBERS: A, X, Y, P, Q 4307 REM 4310 DATA LDAZ, TXTTAB -4311 DATA STAZ, 251: REM -> 251 +4311 DATA STAZ, P: REM -> P 4312 DATA LDAZ, TXTTAB+ -4313 DATA STAZ, 252 +4313 DATA STAZ, P+ 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: -"- +4324 REM P (251) IN/OUT: -"- 4325 REM -4326 REM CLOBBERS: A, X, Y, 251-254 +4326 REM CLOBBERS: A, X, Y, P, Q 4327 REM -4330 DATA STXZ, 253 -4331 DATA STYZ, 254 +4330 DATA STXZ, Q +4331 DATA STYZ, Q+ 4340 DATA 'FN3 4350 DATA LDY#, 1: REM -> PNEXT HI -4351 DATA LDA(Y, 251 +4351 DATA LDA(Y, P 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 +4361 DATA LDA(Y, P +4362 DATA CMPZ, Q+: 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 +4366 DATA LDA(Y, P +4367 DATA CMPZ, Q: 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 +4372 DATA LDA(Y, P 4373 DATA TAX 4374 DATA INY -4375 DATA LDA(Y, 251 -4376 DATA STXZ, 251 -4377 DATA STAZ, 252 +4375 DATA LDA(Y, P +4376 DATA STXZ, P +4377 DATA STAZ, P+ 4380 DATA JMP, FN3 4390 DATA 'FN5 -4391 DATA LDXZ, 251 -4392 DATA LDYZ, 252 +4391 DATA LDXZ, P +4392 DATA LDYZ, P+ 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 +4404 REM CLOBBERS: A,X,Y,T,P,Q 4405 REM 4409 DATA PHA: REM SAVE FILE NO 4410 DATA LDX#, S.DRVBRA @@ -585,34 +627,34 @@ 4500 DATA 'FINDLAST 4501 REM 4502 REM X.Y OUT: PTR TO LAST LINE -4503 REM 251-252 OUT: SAME +4503 REM P (251) OUT: SAME 4504 REM -4505 REM CLOBBERS: A, X, Y, 251-254 +4505 REM CLOBBERS: A, X, Y, P, Q 4506 REM 4510 DATA LDXZ, TXTTAB 4511 DATA LDYZ, TXTTAB+ -4512 DATA STXZ, 251 -4513 DATA STYZ, 252 +4512 DATA STXZ, P +4513 DATA STYZ, P+ 4520 DATA LDY#, 1 -4521 DATA LDA(Y, 251 +4521 DATA LDA(Y, P 4522 DATA BEQR, FL2: REM EMPTY PRG 4530 DATA 'FL1 4531 DATA LDY#, 0 -4532 DATA LDA(Y, 251 -4533 DATA STAZ, 253 +4532 DATA LDA(Y, P +4533 DATA STAZ, Q 4534 DATA INY -4535 DATA LDA(Y, 251 -4536 DATA STAZ, 254 -4540 DATA LDA(Y, 253 +4535 DATA LDA(Y, P +4536 DATA STAZ, Q+ +4540 DATA LDA(Y, Q 4541 DATA BEQR, FL2 -4550 DATA LDXZ, 253 -4551 DATA LDYZ, 254 -4552 DATA STXZ, 251 -4553 DATA STYZ, 252 +4550 DATA LDXZ, Q +4551 DATA LDYZ, Q+ +4552 DATA STXZ, P +4553 DATA STYZ, P+ 4555 DATA JMP, FL1 4560 DATA 'FL2 -4570 DATA LDXZ, 251 -4571 DATA LDYZ, 252 +4570 DATA LDXZ, P +4571 DATA LDYZ, P+ 4572 DATA RTS 4579 REM 4580 DATA 'PUTNL @@ -623,9 +665,51 @@ 4591 DATA JSR, PRINTNAT 4592 DATA JMP, PUTNL 4599 REM -4990 REM -4995 DATA .=, $C880 -4999 REM +4600 DATA 'DELTAPPLY +4601 REM +4602 REM P (251) IN: PTR TO START LINE +4603 REM X.Y IN: PTR TO STOP LINE +4604 REM A IN: OFFSET TO MODIFY +4605 REM DELTA IN: VALUE TO ADD +4606 REM Q (253) OUT: COPY OF X.Y INPUT +4607 REM +4608 REM CLOBBERS: A,X,Y,P,Q,T,B +4609 REM +4610 DATA STXZ, Q +4611 DATA STYZ, Q+ +4612 DATA STAZ, B +4620 DATA 'DEA1 +4630 DATA LDAZ, P+ +4631 DATA CMPZ, Q+ +4632 DATA BCCR, DEA2: REM P < Q +4633 DATA BNER, DEA3: REM P > Q +4634 DATA LDAZ, P +4635 DATA CMPZ, Q +4636 DATA BCSR, DEA3 +4637 DATA 'DEA2 +4640 DATA LDY#, 1 +4641 DATA LDA(Y, P +4642 DATA BEQR, DEA3: REM DONE +4645 DATA STAZ, T: REM SAVE PNEXT (HI) +4646 DATA DEY +4647 DATA LDA(Y, P +4648 DATA TAX: REM SAVE PNEXT (LO) +4650 DATA LDYZ, B +4651 DATA LDA(Y, P +4660 DATA CLC +4661 DATA ADC, DELTA +4662 DATA STA(Y, P +4663 DATA INY +4664 DATA LDA(Y, P +4665 DATA ADC, DELTA+ +4666 DATA STA(Y, P +4680 DATA LDYZ, T +4681 DATA STXZ, P: REM NEXT LINE +4682 DATA STYZ, P+ +4690 DATA JMP, DEA1 +4691 DATA 'DEA3 +4692 DATA RTS +4699 REM 5000 DATA 'LINECUT 5010 DATA JSR, GETSTASTO 5011 DATA BCCR, LCU1: REM < @@ -637,182 +721,162 @@ 5061 DATA LDX, NSTART 5062 DATA LDY, NSTART+ 5063 DATA JSR, FINDLINE -5064 DATA TXA -5065 DATA PHA -5066 DATA TYA -5067 DATA PHA +5064 DATA STX, PSTART +5065 DATA STY, PSTART+ 5070 REM LOCATE STOP LINE -> PTR IN Q 5071 DATA LDX, NSTOP 5072 DATA LDY, NSTOP+ 5073 DATA JSR, FINDNEXT -5074 DATA STXZ, Q -5075 DATA STYZ, Q+ -5076 DATA PLA: REM PSTART HI -5077 DATA STAZ, P+ -5078 DATA PLA: REM PSTART LO -5079 DATA STAZ, P -5240 REM CALC. DELTA = PSTOP - PSTART +5074 DATA STX, PSTOP +5075 DATA STY, PSTOP+ +5240 REM CALC. DELTA = PSTART - PSTOP 5250 DATA SEC -5251 DATA LDAZ, Q -5252 DATA SBCZ, P +5251 DATA LDA, PSTART +5252 DATA SBC, PSTOP 5253 DATA STA, DELTA -5254 DATA LDAZ, Q+ -5255 DATA SBCZ, P+ +5254 DATA LDA, PSTART+ +5255 DATA SBC, PSTOP+ 5256 DATA STA, DELTA+ 5260 REM SCAN AFTER STOP, ADJUST PTRS -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, Q -5302 DATA BEQR, LCU10: REM DONE -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, Q -5341 DATA INY -5350 DATA LDA(Y, Q -5351 DATA STAZ, T: REM SAVE HI(PNEXT) -5360 DATA SBC, DELTA+ -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, 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, Q -5413 DATA TAY: REM Y = LO BYTE! -5414 DATA LDAZ, STREND+ -5415 DATA SBCZ, Q+ -5416 DATA TAX: REM X = HI BYTE! -5420 DATA JSR, MEMCPY -5430 REM ADJUST VARTAB, ARYTAB, STREND -5440 DATA SEC -5441 DATA LDAZ, VARTAB -5442 DATA SBC, DELTA -5443 DATA STAZ, VARTAB -5444 DATA LDAZ, VARTAB+ -5445 DATA SBC, DELTA+ -5446 DATA STAZ, VARTAB+ -5450 DATA SEC -5451 DATA LDAZ, ARYTAB -5452 DATA SBC, DELTA -5453 DATA STAZ, ARYTAB -5454 DATA LDAZ, ARYTAB+ -5455 DATA SBC, DELTA+ -5456 DATA STAZ, ARYTAB+ -5460 DATA SEC -5461 DATA LDAZ, STREND -5462 DATA SBC, DELTA -5463 DATA STAZ, STREND -5464 DATA LDAZ, STREND+ -5465 DATA SBC, DELTA+ -5466 DATA STAZ, STREND+ -5470 DATA RTS +5270 DATA LDX, PSTOP +5271 DATA LDY, PSTOP+ +5272 DATA STXZ, P +5273 DATA STYZ, P+ +5280 DATA LDXZ, STREND +5281 DATA LDYZ, STREND+ +5290 DATA LDA#, 0: REM MODIFY PNEXT +5291 DATA JSR, DELTAPPLY +5300 REM COPY THE REMAINING DATA DOWN +5301 DATA LDX, PSTART: REM DST +5302 DATA LDY, PSTART+ +5303 DATA STXZ, P +5304 DATA STYZ, P+ +5305 DATA LDX, PSTOP: REM SRC +5306 DATA LDY, PSTOP+ +5307 DATA STXZ, Q +5308 DATA STYZ, Q+ +5310 DATA SEC: REM LEN=STREND-PSTOP +5311 DATA LDA, STREND +5312 DATA SBCZ, Q +5313 DATA TAY: REM Y = LO BYTE! +5314 DATA LDA, STREND+ +5315 DATA SBCZ, Q+ +5316 DATA TAX: REM X = HI BYTE! +5320 DATA JSR, MEMCPY +5330 REM ADJUST VARTAB, ARYTAB, STREND +5340 DATA CLC +5341 DATA LDAZ, VARTAB +5342 DATA ADC, DELTA +5343 DATA STAZ, VARTAB +5344 DATA LDAZ, VARTAB+ +5345 DATA ADC, DELTA+ +5346 DATA STAZ, VARTAB+ +5350 DATA CLC +5351 DATA LDAZ, ARYTAB +5352 DATA ADC, DELTA +5353 DATA STAZ, ARYTAB +5354 DATA LDAZ, ARYTAB+ +5355 DATA ADC, DELTA+ +5356 DATA STAZ, ARYTAB+ +5360 DATA CLC +5361 DATA LDAZ, STREND +5362 DATA ADC, DELTA +5363 DATA STAZ, STREND +5364 DATA LDAZ, STREND+ +5365 DATA ADC, DELTA+ +5366 DATA STAZ, STREND+ +5370 DATA RTS 5999 REM 6000 DATA 'LINECAT -6001 REM PUT LAST LINE NUMBER ON STACK +6001 REM SAVE LAST LINE NUMBER IN TMP 6002 DATA JSR, FINDLAST 6005 DATA LDY#, 1 -6006 DATA LDA(Y, 251 +6006 DATA LDA(Y, P 6007 DATA BNER, LCA0: REM EMPTY PRG? 6010 DATA LDA#, 0: REM DEFAULT 0 -6011 DATA PHA -6012 DATA PHA +6011 DATA STA, TMP +6012 DATA STA, TMP+ 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 +6016 DATA LDY#, 2 +6017 DATA LDA(Y, P +6018 DATA STA, TMP +6019 DATA INY +6020 DATA LDA(Y, P +6021 DATA STA, TMP+ 6025 DATA 'LCA1 6030 DATA JSR, GETFILE 6040 DATA SEC 6041 DATA LDAZ, VARTAB 6042 DATA SBC#, 2: REM CUT NULL OFF -6043 DATA STAZ, 251: REM PSTART +6043 DATA STAZ, P: REM PSTART 6044 DATA TAX 6045 DATA LDAZ, VARTAB+ 6046 DATA SBC#, 0 -6047 DATA STAZ, 252 +6047 DATA STAZ, P+ 6048 DATA TAY 6049 DATA LDA#, 0: REM L/V 6050 DATA JSR, LOAD 6051 DATA BCCR, LCA1.1 -6055 DATA PLA -6056 DATA PLA 6060 DATA LDA#, 0 6061 DATA TAY -6062 DATA STA(Y, 251 +6062 DATA STA(Y, P 6063 DATA INY -6064 DATA STA(Y, 251 +6064 DATA STA(Y, P 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 +6071 DATA STXZ, Q: REM PSTOP +6072 DATA STYZ, Q+ 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 -6091 DATA CMPZ, 254 +6090 DATA LDAZ, P+ +6091 DATA CMPZ, Q+ 6092 DATA BCCR, LCA2.1 6093 DATA BNER, LCA4 -6094 DATA LDAZ, 251 -6095 DATA CMPZ, 253 +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, 251 +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, 251 +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, 251 +6132 DATA ADCZ, P 6133 DATA TAX 6134 DATA LDA#, 0 -6135 DATA ADCZ, 252 +6135 DATA ADCZ, P+ 6140 DATA LDY#, 1 -6141 DATA STA(Y, 251 -6142 DATA STAZ, 2: REM SAVE HI BYTE +6141 DATA STA(Y, P +6142 DATA STAZ, T: REM SAVE HI BYTE 6143 DATA TXA 6144 DATA DEY -6145 DATA STA(Y, 251 -6146 DATA LDYZ, 2 -6150 DATA STXZ, 251 -6151 DATA STYZ, 252 +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 6180 REM REWRITE TERMINATOR TO BE SAFE 6181 DATA LDA#, 0 6182 DATA TAY -6183 DATA STA(Y, 251 +6183 DATA STA(Y, P 6184 DATA INY -6185 DATA STA(Y, 251 +6185 DATA STA(Y, P 6189 REM ADJUST VARTAB &C AND RET PSTOP -6190 DATA LDXZ, 253 -6191 DATA LDYZ, 254 +6190 DATA LDXZ, Q +6191 DATA LDYZ, Q+ 6192 DATA STXZ, VARTAB 6193 DATA STYZ, VARTAB+ 6194 DATA STXZ, ARYTAB @@ -822,24 +886,23 @@ 6198 DATA RTS 6200 DATA 'LCACHK 6210 REM COMPARE VS LAST LINE NUMBER -6215 DATA PLA -6216 DATA TAX -6217 DATA PLA +6215 DATA LDX, TMP +6216 DATA LDA, TMP+ 6220 DATA LDY#, 3 -6221 DATA CMP(Y, 251 +6221 DATA CMP(Y, P 6222 DATA BCCR, LCACOK 6223 DATA BNER, LCACFAIL 6230 DATA TXA 6231 DATA DEY -6232 DATA CMP(Y, 251 +6232 DATA CMP(Y, P 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 +6243 DATA STA(Y, P 6244 DATA INY -6245 DATA STA(Y, 251 +6245 DATA STA(Y, P 6270 DATA LDX#, S.ECLASH 6271 DATA LDY#, S.ECLASH^ 6272 DATA JSR, PUTSTR @@ -857,55 +920,51 @@ 6420 DATA LDX, NSTART 6421 DATA LDY, NSTART+ 6425 DATA JSR, FINDLINE -6430 DATA TXA -6431 DATA PHA -6432 DATA TYA -6433 DATA PHA +6430 DATA STX, PSTART +6431 DATA STY, PSTART+ 6440 DATA LDX, NSTOP 6441 DATA LDY, NSTOP+ 6442 DATA JSR, FINDNEXT -6445 DATA TXA -6446 DATA PHA -6447 DATA TYA -6448 DATA PHA +6445 DATA STX, PSTOP +6446 DATA STY, PSTOP+ 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 +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, 253 -6465 DATA PHA +6464 DATA LDA(Y, Q +6465 DATA STA, TMP 6466 DATA INY -6467 DATA LDA(Y, 253 -6468 DATA PHA +6467 DATA LDA(Y, Q +6468 DATA STA, TMP+ 6470 DATA LDA#, 0 -6471 DATA STA(Y, 253 +6471 DATA STA(Y, Q 6472 DATA DEY -6473 DATA STA(Y, 253 +6473 DATA STA(Y, Q 6475 DATA CLC 6476 DATA LDA#, 2 -6477 DATA ADCZ, 253 +6477 DATA ADCZ, Q 6478 DATA TAX 6479 DATA LDA#, 0 -6480 DATA ADCZ, 254 +6480 DATA ADCZ, Q+ 6481 DATA TAY -6482 DATA LDA#, 251 +6482 DATA LDA#, P 6483 DATA JSR, 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] +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^ @@ -913,48 +972,12 @@ 6495 DATA 'LCLRET 6496 DATA RTS 6499 REM -8000 REM -8001 REM - ENTRY POINTS - -8002 REM -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 -9009 DATA .=, $C400 -9010 DATA 'CNT, .DW,0 -9020 DATA 'CNT.REM, .DW,0 -9030 DATA 'CNT.DATA, .DW,0 -9040 DATA 'CNT.JUNK, .DW,0 -9050 DATA 'CNT.SPC, .DW,0 -9060 DATA 'CNT.BS, .DW,0 -9070 DATA 'NSTART, .DW,0 -9071 DATA 'NSTOP, .DW,0 -9072 DATA 'DELTA, .DW,0 -9073 DATA 'TMP, .DW,0 -9099 DATA .=, $C500 -9100 DATA 'S.REM, .DSZ," REM " -9110 DATA 'S.DATA, .DSZ," DATA " -9120 DATA 'S.LINES, .DSZ," LINES " -9130 DATA 'S.BYTES, .DSZ," BYTES " -9140 DATA 'S.JUNK, .DSZ," JUNK " -9150 DATA 'S.SPC, .DSZ," SPC " -9160 DATA 'S.START, .DSZ,"START: " -9170 DATA 'S.STOP, .DSZ,"STOP: " -9180 DATA 'S.FILE, .DSZ,"FILE: " -9190 DATA 'S.DRVBRA, .DSZ,"DRIVE [" -9191 DATA 'S.KETCOL, .DSZ,"]: " -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 +9900 REM +9901 REM ENTRY POINTS: $C350 - $C3B4 +9902 REM +9904 DATA .=, 50000, JMP, LINECNT +9910 DATA .=, 50010, JMP, LINECUT +9920 DATA .=, 50020, JMP, LINECAT +9930 DATA .=, 50030, JMP, LINECLP +9998 DATA .LIM, 50100 9999 DATA .END