LOAD PAGEMENU ]LIST 2 CALL 256 * 14: POKE 43624,1 15 ST = 130 * 256:DIR = 149 * 256:EC = 14 * 256:CD = 114 * 256 20 HOME : HIMEM: 29184 30 D$ = CHR$ (4) 50 U = 30 * 256 55 DK = PEEK (U + 75):L2 = PEEK (U + 64):L3 = PEEK (U + 65) 60 IF DK = 1 THEN POKE U + 109,8: CALL EC + 24 90 DIM L(150),X$(60),T(40),X0(40),X1(40),X2(40) 99 H$ = CHR$ (8) + "^":ZP = PEEK (U + 231) 100 POKE U + 86,1: CALL EC + 21 103 POKE U + 84,0:ZX = 0 104 IF PEEK (U + 2) + PEEK (U + 4) + INT ( PEEK (U + 8) / 6) > 0 THEN B = 49200: FOR I = 1 TO 50:A = PEEK (B): NEXT I 110 POKE U + 109,17: CALL EC + 24 120 GET OP$:OP = ASC (OP$): PRINT OP$ 122 IF OP = 1 THEN GOTO 8200 123 IF (OP = 18 OR OP = 42) AND L2 > 0 THEN GOTO 8000 124 IF OP = 19 AND PEEK (U + 81) < > 0 THEN GOTO 8100 125 IF OP = 5 THEN GOTO 8030 126 IF OP = 15 THEN GOTO 8035 128 IF OP = 28 THEN INPUT "";A: INPUT "";B: POKE U + A,B: GOTO 100 129 IF OP = 35 THEN GOTO 6540 130 CALL 852 135 IF OP = 63 OR OP < 32 THEN POKE U + 109,13: CALL EC + 24: GOTO 100 140 IF OP < 65 OR OP > 90 THEN GOTO 390 150 IF OP < 74 THEN ON OP - 64 GOTO 390,390,2000,6500,2570,2200,2785,3 90,390 160 IF OP < 84 THEN ON OP - 73 GOTO 340,2320,390,4000,390,390,390,198, 2625,350 170 ON OP - 83 GOTO 390,390,390,6600,390,390,100 198 IF L2 = 0 THEN GOTO 390 199 END 340 GOSUB 385: PRINT D$;"RUN MAIN" 350 GOSUB 385: PRINT D$;"RUN SECOND" 385 IF DK = 1 THEN POKE U + 109,22: CALL EC + 24: GET A$: PRINT 386 ONERR GOTO 7060 387 RETURN 390 POKE U + 109,23: CALL EC + 24: GOTO 100 2000 PRINT "Change current chapter":CX$ = "": GOSUB 5400: GOTO 100 2200 PRINT "File list": GOSUB 5400 2202 PRINT : PRINT "Chapter ";CX$ 2205 T = 0 2207 PRINT N;" Pages" 2208 IF N = 0 THEN T = 0: GOTO 2235 2210 FOR I = 1 TO N 2215 A = PEEK (DIR + 3 * I):LE = 256 * PEEK (DIR + 3 * I + 2) + PEEK (DIR + 3 * I + 1) 2220 T = T + LE 2222 PRINT "Page ";: IF I < 10 THEN PRINT " "; 2223 PRINT I;" Size"; 2224 PRINT LEFT$ (" ",5 - LEN ( STR$ (LE))); 2227 PRINT LE;" "; CHR$ (64 + A) 2230 NEXT I 2235 PRINT "Total of ";T 2250 GOTO 100 2320 PRINT "Kill pages": GOSUB 5400 2325 PRINT "Chapter ";CX$;" has ";N;" pages" 2330 FOR I = 1 TO N:L(I) = 0: NEXT I 2335 T = 0 2340 PRINT "List pages to kill" 2350 PRINT 2355 INPUT "Page: ^";A$:A = VAL (A$ + " ") 2360 IF A = 0 THEN GOTO 2385 2365 IF A < 0 THEN PRINT CHR$ (7);"Error": GOTO 2355 2370 IF A > N THEN PRINT CHR$ (7);"Too large": GOTO 2355 2375 IF L(A) = 1 THEN PRINT CHR$ (7);"Already in the list" 2380 L(A) = 1:T = T + 1: GOTO 2355 2385 IF T = 0 THEN GOTO 100 2390 PRINT "O K to proceed? N";H$;: INPUT "";X$: IF LEFT$ (X$,1) < > "Y" THEN GOTO 100 2400 J = 1: FOR I = 1 TO N 2405 IF L(I) = 1 THEN GOTO 2425 2410 IF I = J THEN GOTO 2420 2415 FOR K = 0 TO 2: POKE DIR + 3 * J + K, PEEK (DIR + 3 * I + K): NEXT K 2420 J = J + 1: GOTO 2430 2425 CX = I: GOSUB 7600 2430 NEXT I 2435 N = N - T: POKE DIR,N 2440 IF N = 0 THEN N = 1: POKE DIR,N: POKE DIR + 1,1: POKE DIR + 3,1: POKE DIR + 4,0: POKE DIR + 5,0 2445 GOSUB 7300: GOTO 100 2460 REM SELECT PAGE 2465 INPUT "Page: ^";A$:A = VAL (A$ + " ") 2475 IF A < 0 THEN PRINT CHR$ (7);"Too small": GOTO 2460 2480 IF A > N THEN PRINT CHR$ (7);"Too large": GOTO 2460 2485 B = PEEK (DIR + 3 * A + 1) + 256 * PEEK (DIR + 3 * A + 2) 2490 RETURN 2570 PRINT "Exchange pages": GOSUB 5400 2575 PRINT "Enter first "; 2580 GOSUB 2460: IF A = 0 THEN GOTO 100 2585 PRINT "Enter second "; 2590 AS = A: GOSUB 2460: IF A = 0 THEN GOTO 100 2595 LD = 1 2600 FOR J = 0 TO 2 2605 V = PEEK (DIR + AS * 3 + J): POKE DIR + AS * 3 + J, PEEK (DIR + A * 3 + J): POKE DIR + A * 3 + J,V 2610 NEXT J 2615 GOSUB 7300: GOTO 100 2625 PRINT "Rearrange pages": GOSUB 5400 2630 PRINT "Move a range of pages? N";H$;: INPUT "";A$: IF LEFT$ (A$ + "N",1) = "N" THEN GOTO 4200 2635 PRINT "Specify the range to move" 2640 PRINT "From ";: GOSUB 2460:AS = A: IF A = 0 THEN GOTO 100 2645 PRINT "Through ";: GOSUB 2460: IF A = 0 THEN GOTO 100 2650 IF A < AS THEN PRINT CHR$ (7);"Range error": GOTO 2625 2655 AZ = A 2660 PRINT "Move this range before "; 2665 N = N + 1: GOSUB 2460:N = N - 1: IF A = 0 THEN GOTO 100 2670 IF A > = AS THEN IF A < = AZ THEN PRINT CHR$ (7);"Target is w ithin the move area": GOTO 100 2675 T = AZ - AS 2680 LD = 1 2685 FOR I = 0 TO 3 * T + 2 2690 L(I) = PEEK (DIR + 3 * AS + I) 2695 NEXT I 2700 IF A < AS THEN GOSUB 2720: GOSUB 2745 2705 IF A > AS THEN GOSUB 2745: GOSUB 2720 2710 GOSUB 7300: GOTO 100 2720 REM DELETE AS TO AZ 2725 FOR I = 3 * AZ + 3 TO 3 * N + 3 * T + 5 2730 POKE DIR + I - 3 * T - 3, PEEK (DIR + I) 2735 NEXT I 2740 RETURN 2745 REM INSERT 2750 FOR I = 3 * N + 3 * T + 5 TO 3 * A STEP - 1 2755 POKE DIR + I, PEEK (DIR + I - 3 * T - 3) 2760 NEXT I 2765 FOR I = 0 TO 3 * T + 2 2770 POKE DIR + 3 * A + I,L(I) 2775 NEXT I 2780 RETURN 2785 PRINT "Grab pages from another chapter" 2790 GOSUB 5400 2795 NS = N:DQ$ = CX$:DQ = DX:OP$ = "" 2805 PRINT : PRINT "Grab pages from "; 2810 CX$ = "": GOSUB 5400 2815 IF N = 1 THEN AS = 1:A = 1: GOTO 2890 2865 PRINT "There are ";N;" pages in chapter ";CX$ 2866 IF L3 > 0 THEN GOTO 2870 2867 PRINT : PRINT "Select pages from chapter ";CX$ 2870 PRINT "From ";: GOSUB 2460:AS = A: IF A = 0 THEN GOTO 100 2872 PRINT "Through ";: GOSUB 2460: IF A = 0 THEN GOTO 100 2875 IF A < AS THEN PRINT CHR$ (7);"Range error": GOTO 2867 2880 IF DQ$ = "]" AND A - AS + NS + 1 > ZP THEN PRINT "Ready chapter w ill exceed ":ZP;" pages, O K? Y"; CHR$ (8);: INPUT "";A$: IF LEFT$ (A$ + "Y",1) < > "Y" THEN GOTO 2960 2890 FOR I = AS TO A 2895 CX$ = DU$:DX = DG: GOSUB 7100 2910 CX = I: GOSUB 7200:Q1 = PEEK (DIR + 3 * CX + 1):Q2 = PEEK (DIR + 3 * CX + 2):LE = Q1 + 256 * Q2 2920 CX$ = DQ$:DX = DQ: GOSUB 7100: GOSUB 3100 2930 CY$ = DQ$:DY = DQ:CY = N: GOSUB 7400: GOSUB 7300 2940 NEXT I 2950 GOTO 100 2960 N = NS:CX$ = DQ$:DX = DQ: GOTO 100 3100 REM LOAD FRESH PAGE 3110 N = PEEK (DIR) + 1: POKE DIR,N: POKE DIR + 3 * N,0 3113 FL = 0 3115 FL = FL + 1 3117 FOR J = 1 TO N 3120 IF PEEK (DIR + 3 * J) = FL THEN GOTO 3115 3122 NEXT J 3130 POKE DIR + 3 * N,FL: POKE DIR + 3 * N + 1,Q1: POKE DIR + 3 * N + 2 ,Q2 3190 RETURN 4000 PRINT "Merge pages" 4010 POKE 800,160: POKE 801,0: POKE 802,76: POKE 803,44: POKE 804,254 4020 GOSUB 5400 4022 IF N < 2 THEN PRINT CHR$ (7);"Chapter must have at least 2 pages ": GOTO 100 4025 PRINT "Enter first ";: GOSUB 2460: IF A = 0 THEN GOTO 100 4027 AS = A:BS = B 4030 PRINT "Enter second ";: GOSUB 2460: IF A = 0 THEN GOTO 100 4032 IF A = AS THEN PRINT "Cannot merge into the same page": GOTO 100 4035 IF B + BS > 4096 THEN PRINT "Not enough room": GOTO 100 4040 CX = A: IF B THEN GOSUB 7200 4050 POKE 60,0: POKE 61,130: POKE 62,255: POKE 63,145: POKE 66,0: POKE 67,114 4055 CALL 800 4060 CX = AS: IF BS THEN GOSUB 7200 4062 X = CD + B:Y = ST + BS:X1 = INT (X / 256):X2 = X - 256 * X1:Y1 = INT (Y / 256):Y2 = Y - 256 * Y1 4065 POKE 60,0: POKE 61,114: POKE 62,X2: POKE 63,X1: POKE 66,Y2: POKE 6 7,Y1 4070 CALL 800 4075 LE = B + BS:CY = AS: GOSUB 7400 4080 X1 = INT (LE / 256):X2 = LE - 256 * X1: POKE DIR + 3 * AS + 1,X2: POKE DIR + 3 * AS + 2,X1 4082 GOSUB 7300 4085 T = 1: FOR I = 1 TO N:L(I) = 0: NEXT I 4090 L(A) = 1: GOTO 2400: REM DELETE PAGE 4200 PRINT "List the new order of the pages" 4205 FOR I = 1 TO N:L(I) = 0:T(I) = 0: NEXT I 4215 I = 1 4220 PRINT "For new page ";I;", use old ";: GOSUB 2460: IF A = 0 THEN GOTO 100 4230 IF T(A) > 0 THEN PRINT "Error, this page has already been listed" : GOTO 4220 4235 T(A) = I:L(I) = A:I = I + 1: IF I < = N THEN GOTO 4220 4250 FOR I = 1 TO N 4255 B = 3 * L(I) + DIR:X0(I) = PEEK (B):X1(I) = PEEK (B + 1):X2(I) = PEEK (B + 2) 4260 NEXT I 4265 FOR I = 1 TO N 4270 B = 3 * I + DIR: POKE B,X0(I): POKE B + 1,X1(I): POKE B + 2,X2(I) 4275 NEXT I 4280 GOSUB 7300: GOTO 100 5000 TS = 18 5005 POKE U + 109,TS: CALL EC + 24: INPUT "";DU$: IF DU$ = "" THEN RETURN 5007 IF LEFT$ (DU$,1) = "+" THEN DU$ = MID$ (DU$,2,30) 5010 IF DU$ = "?" THEN GOSUB 9000: GOTO 5005 5012 IF RIGHT$ (DU$,1) = " " THEN PRINT CHR$ (7);"Chapter name canno t end with space":DU$ = "": RETURN 5015 DG = VAL (DU$): IF DG = 0 THEN DG = DK: GOTO 5040 5020 IF DG > DK THEN PRINT "You only have ";DK;" disk drives": GOTO 50 05 5030 DU$ = MID$ (DU$, LEN ( STR$ (DG)) + 1,30) 5040 POKE U + 85,0: POKE U + 86,DG: CALL EC + 21 5041 IF DU$ = "" AND L3 = 0 THEN DU$ = "": RETURN 5043 IF DU$ = "" THEN DU$ = "/" 5044 IF DU$ = "/" THEN RETURN 5050 IF ASC (DU$) = 47 THEN POKE U + 85, ASC ( MID$ (DU$ + "/",2,1)): DU$ = "/" 5060 RETURN 5100 REM 5101 IF OP$ = "G" THEN PRINT "Grab into "; 5102 IF DK = 1 THEN POKE U + 109,8: CALL EC + 24 5110 POKE 216,0: GOSUB 5000 5112 IF DU$ = "" THEN RETURN 5113 IF ZX = 2 THEN GOTO 5170 5115 IF DU$ = "/" THEN GOTO 5200 5145 IF DU$ = "]" THEN GOTO 5170 5155 ONERR GOTO 5185 5160 PRINT D$;"BLOAD ";DU$;",A$8200" 5170 POKE 216,0 5180 RETURN 5185 REM ERROR 5187 IF OP$ = "G" THEN POKE 216,0: GOTO 5440 5190 A = 10: IF PEEK (222) < > 6 THEN A = 44 5192 POKE U + 109,A: CALL EC + 24:DU$ = "": GOTO 130 5200 POKE U + 86,DG:NN = 0 5230 CALL 14 * 256 + 33:A = 130 * 256 5235 IF PEEK (U + 109) > 0 GOTO 5110 5240 N$ = "":B = PEEK (A): IF B = 255 THEN GOTO 5250 5244 N$ = N$ + CHR$ (B):A = A + 1:B = PEEK (A): IF B < > 255 THEN GOTO 5244 5245 NN = NN + 1:X$(NN) = N$:A = A + 1: GOTO 5240 5250 IF OP$ = "W" THEN RETURN 5260 PRINT : PRINT "There are ";NN;" chapters:": IF NN = 0 THEN GOTO 5 110 5262 FOR I = 1 TO NN: PRINT I;" ";X$(I): NEXT I 5265 PRINT 5300 REM 5310 PRINT "Select chapter by number" 5315 POKE U + 109,28: CALL EC + 24: INPUT "";A$:A = VAL (A$ + " ") 5317 IF A > NN THEN PRINT "Enter a number from 1 to ";NN: GOTO 5315 5320 IF A < 1 THEN DU$ = "": RETURN 5325 PRINT X$(A):DU$ = X$(A): RETURN 5400 IF CX$ < > "" THEN RETURN 5410 GOSUB 5100: IF DU$ = "" THEN GOTO 100 5420 CX$ = DU$:CY$ = DU$:DX = DG:DY = DG 5430 GOSUB 7100:N = PEEK (DIR): RETURN 5440 POKE U + 109,45: CALL EC + 24 5442 INPUT "";A$: IF LEFT$ (A$ + "Y",1) < > "Y" THEN GOTO 100 5450 N = 0: POKE DIR,0:CX$ = DU$:CY$ = DU$:DX = DG:DY = DG 5455 GOSUB 7300 5460 GOTO 2795 6500 T$ = "Which drive? ": GOSUB 6550: CALL EC + 36 6507 IF PEEK (U + 109) = 0 THEN PRINT "Press space for DOS catalog: ^ ";: GET A$: IF A$ = " " THEN PRINT : PRINT D$;"CATALOG" 6520 PRINT : GOTO 100 6540 IF PEEK (U + 96) = 144 THEN PRINT "Not available on the Apple 2 plus": GOTO 100 6545 T$ = "Free sectors on drive: ": GOSUB 6550: CALL EC + 33 6546 IF PEEK (U + 109) = 0 THEN PRINT 256 * PEEK (255) + PEEK (254) ;" sectors free" 6547 GOTO 100 6550 DU$ = H$: IF DK > 9 THEN DU$ = CHR$ (8) + DU$ 6555 PRINT T$;DK;DU$;: INPUT "";A$:DG = VAL (A$): IF DG = 0 THEN DG = DK 6557 IF A$ = "?" THEN GOTO 6580 6560 IF DG > DK THEN PRINT "You only have ";DK;" disk drives": GOTO 65 50 6565 POKE U + 86,DG: RETURN 6580 S = PEEK (8164): IF S THEN PRINT "Sider has ";S;" volumes" 6581 A = PEEK (8167): IF A < > 1 THEN PRINT "Main disk redirected to drive ";A 6582 FOR I = 1 TO DK - S 6584 PRINT I + S;" is slot "; PEEK (8144 + 2 * I);" drive "; PEEK (8145 + 2 * I) 6585 NEXT I: GOTO 6550 6600 PRINT "Whole disk catalog" 6602 HZ = 0:DU$ = H$: IF DK > 9 THEN DU$ = CHR$ (8) + DU$ 6604 PRINT "Which drive? ";DK;DU$;: INPUT "";A$ 6605 IF LEFT$ (A$,1) = "+" THEN HZ = 1:A$ = MID$ (A$,2,5) 6606 IF LEFT$ (A$,1) = "&" THEN HZ = 1:A$ = MID$ (A$,2,5): IF L3 > 0 THEN HZ = 2 6607 DG = VAL (A$): IF DG = 0 THEN DG = DK 6610 IF DG > DK THEN PRINT "You only have ";DK;" disk drives": GOTO 66 02 6611 IF HZ > 0 THEN GOTO 6660 6612 POKE U + 85,0: POKE U + 86,DG: CALL EC + 21 6615 DX = DG: GOSUB 5200 6617 PRINT 256 * PEEK (255) + PEEK (254);" free sectors" 6620 IF NN = 0 THEN PRINT "No BEX chapters on this disk": GOTO 6655 6625 PRINT "There are ";NN;" chapters on this disk:": PRINT 6628 VX = 0:K = 0: GOSUB 6770 6630 FOR I = 1 TO NN 6635 GOSUB 6700:C$ = LEFT$ (" ",3 - LEN ( STR$ (NX))):VJ = V: IF V > 99999 THEN VJ = 20000 6636 A$ = LEFT$ (" ",K - LEN (X$(I)) + 1):B$ = LEFT$ (" ",6 - LEN ( STR$ (VJ))) 6639 PRINT X$(I);A$;NX;C$;"pages";B$;V;" size":VX = VX + V 6640 NEXT I 6645 PRINT 6650 PRINT "Grand total ";VX;" characters" 6655 PRINT : IF HZ > 0 THEN RETURN 6657 GOTO 100 6660 PRINT "through: ";DK;DU$;: INPUT "";A$:DT = VAL (A$): IF DT = 0 THEN DT = DK 6662 IF DT > DK THEN PRINT "You only have ";DK;" disk drives": GOTO 66 60 6664 IF DT < DG THEN PRINT CHR$ (7);"Bad range": GOTO 6600 6665 DS = DG: IF HZ = 2 THEN POKE U + 82,0: POKE 46533,0: POKE U + 83,0 : POKE U + 81,64: POKE U + 31,128 6670 FOR DG = DS TO DT 6675 PRINT : PRINT : PRINT "Disk drive ";DG 6678 GOSUB 6612 6680 NEXT DG 6682 IF HZ = 2 THEN POKE U + 31,0: GOTO 8120 6685 GOTO 100 6700 PRINT D$;"BLOAD ";X$(I);",A$9500" 6705 NX = PEEK (DIR) 6710 V = 0: IF NX = 0 THEN GOTO 6740 6715 FOR J = 1 TO NX 6720 A = PEEK (DIR + 3 * J + 1) + 256 * PEEK (DIR + 3 * J + 2) 6725 V = V + A 6730 NEXT J 6740 RETURN 6770 FOR I = 1 TO NN 6775 A = LEN (X$(I)): IF A > K THEN K = A 6780 NEXT I: RETURN 7060 POKE U + 109,9: CALL EC + 24: POKE 216,0: GOTO 100 7100 IF CX$ = "]" THEN POKE U + 239,0: GOTO 7310 7105 POKE U + 86,DX: CALL EC + 21: PRINT D$;"BLOAD";CX$;",A$9500": RETURN 7200 OL = PEEK (DIR + 3 * CX) + 64: IF CX$ = "]" AND OL < 65 + ZP THEN GOTO 7250 7207 POKE U + 86,DX: CALL EC + 21 7210 PRINT D$;"BLOAD ";CX$;"."; CHR$ (OL);",A$8200": RETURN 7250 POKE U + 239,0: POKE U + 238,OL - 64: GOTO 7460 7300 IF CY$ < > "]" THEN POKE U + 86,DY: CALL EC + 21: PRINT D$;"BSAV E";CY$;",A$9500,L$FF": RETURN 7302 POKE DIR + 254,179: POKE DIR + 255,42 7305 POKE U + 239,1 7310 POKE U + 237,0: POKE U + 238,1: CALL 14 * 256 + 42: RETURN 7400 OL = PEEK (DIR + 3 * CY) + 64: IF CY$ = "]" AND OL < 65 + ZP THEN GOTO 7450 7407 POKE U + 86,DY: CALL EC + 21 7408 IF LE = 0 THEN RETURN 7410 PRINT D$;"BSAVE ";CY$;"."; CHR$ (OL);",A$8200,L";LE: RETURN 7450 POKE U + 239,1: POKE U + 238,OL - 64 7460 POKE U + 237,2: CALL 14 * 256 + 42: RETURN 7500 IF CX$ = "]" THEN RETURN 7505 POKE U + 86,DX: CALL EC + 21 7510 PRINT D$;"DELETE ";CX$: RETURN 7600 OL = PEEK (DIR + 3 * CX) + 64: IF CX$ = "]" AND OL < 65 + ZP THEN RETURN 7607 POKE U + 86,DX: CALL EC + 21 7608 IF PEEK (DIR + 3 * CX + 1) + PEEK (DIR + 3 * CX + 2) = 0 THEN RETURN 7610 PRINT D$;"DELETE ";CX$;"."; CHR$ (OL): RETURN 8000 IF PEEK (U + 81) > 0 THEN PRINT "Cancel remember mode": POKE U + 81,0: GOTO 100 8010 POKE U + 82,0: POKE 46533,0: POKE U + 83,0: POKE U + 81,64: PRINT : PRINT "Begin remember mode": GOTO 100 8030 PRINT CHR$ (5); 8035 GET A$: PRINT A$;: IF ASC (A$) < > 13 THEN GOTO 8035 8040 GOTO 100 8100 CALL EC + 48:TS = 38: GOSUB 5005: IF DU$ = "" THEN GOTO 100 8105 LE = PEEK (U + 82) + 256 * PEEK (U + 83):CY$ = DU$:DY = DG: GOSUB 7300:CY = 1: GOSUB 7400: GOTO 100 8120 CALL EC + 48: PRINT "Save list as": GOSUB 5000: IF DU$ = "" THEN GOTO 100 8125 GOTO 8105 8200 TS = 38: GOSUB 5005: IF DU$ = "" THEN GOTO 100 8210 CX$ = DU$:CX = 1:DX = DG: GOSUB 7100: GOSUB 7200: CALL EC + 51:CX$ = "": GOTO 100 9000 IF ZX = 3 THEN GOTO 9100 9010 POKE U + 109,4: CALL EC + 24: RETURN 9100 POKE U + 109,5: CALL EC + 24: RETURN ]