LOAD TAPE-VB ]LIST 5 CALL 14 * 256 15 ST = 130 * 256:CD = 114 * 256:DIR = 149 * 256 30 D$ = CHR$ (4) 50 U = 30 * 256:EC = 14 * 256:UQ = U + 109 55 DK = PEEK (U + 75):VP = 950:L2 = PEEK (U + 64):L3 = PEEK (U + 65) 90 DIM CS$(30),CT$(40),DS%(30),DT%(30) 91 H$ = CHR$ (8) + "":ZP = PEEK (U + 231) 99 IF PEEK (800) THEN GOTO 103 100 GOSUB 385 101 POKE 7766,1: CALL 3605: PRINT D$;"RUN MAIN" 103 SV = 0:ZX = 0:AP = 0:MC = 0:CQ = 1:PX = 0: POKE U + 236,0: POKE U + 90,0:DJ = DK 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 OP = PEEK (800):OP$ = CHR$ (OP): POKE 800,0 120 N = OP - 64 122 IF N = 1 THEN GOTO 2000 123 IF N = 6 THEN GOTO 1400 125 IF N = 20 THEN GOTO 1200 130 GOTO 100 385 IF DK = 1 THEN POKE UQ,22: CALL EC + 24: GET A$: PRINT 386 ONERR GOTO 7060 387 RETURN 1200 PRINT "TO V B" 1205 BW = 6: GOSUB 7000 1210 GOSUB 5100: IF N = 0 THEN GOTO 100 1220 PRINT "Have you defined all V B page breaks? N";H$: INPUT "";A$: IF LEFT$ (A$,1) = "Y" THEN A = 65000: GOTO 1238 1224 A = VP: PRINT : PRINT "Maximum V B page size is: ";VP: INPUT "Enter new page size:^ ";X$:A = ( LEN (X$) = 0) * VP + VAL (X$) 1227 IF A < 200 THEN PRINT "Too small": GOTO 1224 1229 IF A > 995 THEN PRINT "Too big": GOTO 1224 1236 VP = A 1238 POKE CD + 10,A / 256: POKE CD + 11,A - 256 * PEEK (CD + 10) 1239 IF PEEK (U + 5) = PEEK (U + 69) THEN POKE U + 4,0 1240 SV = 0: GOSUB 5500 1250 CALL CD + 12: CALL 14 * 256: GOTO 100 1300 IF CS$(I) = "]" THEN CS$(I) = "READY" 1302 IF LEFT$ (CS$(I),1) = "]" THEN CS$(I) = MID$ (CS$(I),2,11) 1305 POKE CD + 8,0 1320 FOR K = 1 TO 10: POKE CD + 14 + K, ASC ( MID$ (CS$(I) + " ",K,1)): NEXT K 1345 RETURN 1350 ER = PEEK (CD + 9): IF ER = 0 THEN RETURN 1370 POKE U + 109,41: CALL EC + 24 1371 PRINT "Press any key to continue ";: GET A$: PRINT : GOTO 100 1400 PRINT "From VB" 1405 BQ = 0:BW = 7: GOSUB 7000 1407 IF AP = 1 THEN B = 0:CC = 0: GOTO 1418 1410 PRINT "Do you want control characters? N";H$;: INPUT "";A$:CC = 12 8: IF A$ = "" OR LEFT$ (A$,1) = "N" THEN CC = 0 1412 PRINT "Do you want V B page indicators? N";H$;:B = 0: INPUT "";A$: IF A$ = "" OR A$ = "N" THEN B = 1 1418 IF DK = 1 THEN POKE U + 109,8: CALL EC + 24 1420 POKE CD + 5,0: POKE CD + 8,B: POKE CD + 9,CC: POKE CD + 7,DK 1425 CALL CD:B = PEEK (CD + 5):CY$ = "" 1427 IF B = 255 THEN PRINT CHR$ (7);"Error or no response": GOTO 1371 1430 GOSUB 1570 1437 IF B = 209 THEN GOTO 1495 1438 DY = PEEK (CD + 7) 1450 LE = PEEK (CD + 3) + 256 * PEEK (CD + 4) 1455 CY = PEEK (CD + 6): IF CY = 1 THEN PRINT : IF LE = 0 THEN GOTO 1 480 1457 IF LE = 0 THEN GOTO 1462 1459 IF CY = 1 THEN PRINT 1460 GOSUB 7400 1462 IF B = 32 THEN GOTO 1425 1470 GOSUB 7300 1480 IF B = 64 THEN GOTO 1425 1485 IF B = 128 THEN PRINT "Done loading from VersaBraille": GOTO 1495 1490 GOTO 1370 1495 CALL 14 * 256: IF CY$ = "" THEN GOTO 100 1496 IF AP = 1 THEN GOTO 2100 1497 GOTO 100 1570 CY$ = "": FOR I = 0 TO 10 1571 A = PEEK (CD + 10 + I):CY$ = CY$ + CHR$ (A) 1573 NEXT I 1575 FOR I = 11 TO 1 STEP - 1 1577 IF MID$ (CY$,I,1) < > " " THEN GOTO 1580 1578 NEXT I 1580 CY$ = LEFT$ (CY$,I) 1585 IF L3 AND CY$ = "READY" THEN CY$ = "]" 1590 RETURN 2000 PRINT "Auto print from V B" 2010 AP = 1: GOTO 1405 2100 POKE ST,66: FOR I = 1 TO LEN (CY$): POKE ST + I, ASC ( MID$ (CY$, I,1)): NEXT I 2105 READ U: IF U = 0 THEN CALL EC + 51: GOTO 101 2110 POKE ST + I,U:I = I + 1: GOTO 2105 2130 DATA 13,13,88,88,88,13,80,88,88,88,13,13,49,13,255,0 2200 STOP 5000 TS = 18 5005 POKE UQ,TS: CALL EC + 24: INPUT "";DU$: IF DU$ = "" THEN RETURN 5007 IF LEFT$ (DU$,1) = "+" THEN AG = 1:DU$ = MID$ (DU$,2,30) 5010 IF DU$ = "?" THEN POKE UQ,4: CALL EC + 24: GOTO 5005 5015 DG = VAL (DU$): IF DG = 0 AND LEFT$ (DU$,1) < > "0" THEN DG = DJ : 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 IF DG > 0 THEN POKE U + 85,0: POKE U + 86,DG: CALL EC + 21 5041 IF DU$ = "]" AND L3 = 0 THEN DU$ = "": RETURN 5042 IF ZX = 2 AND DU$ = "" THEN 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 N = 0 5102 IF DK = 1 THEN POKE UQ,8: CALL EC + 24 5105 ZX = 1 5110 AG = 0: GOSUB 5000: IF DU$ = "" AND N = 0 THEN POKE U + 109,25: CALL EC + 24 5112 IF DU$ = "" THEN RETURN 5115 IF DU$ = "/" THEN GOTO 5200 5145 IF DU$ = "]" THEN GOTO 5170 5155 ONERR GOTO 5190 5160 PRINT D$;"BLOAD ";DU$;",A$8200" 5170 POKE 216,0 5180 N = N + 1:CS$(N) = DU$:DS%(N) = DG: IF L2 = 0 AND PEEK (U + 81) = 0 THEN RETURN 5185 GOTO 5110 5190 B = PEEK (222):A = 44 + 2 * (B = 11) - 34 * (B = 6) 5192 POKE UQ,A: CALL EC + 24: GOTO 120 5200 POKE U + 86,DG:NN = 0: IF DG = 0 THEN GOTO 5110 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 5260 5244 N$ = N$ + CHR$ (B):A = A + 1:B = PEEK (A): IF B < > 255 THEN GOTO 5244 5245 NN = NN + 1:CT$(NN) = N$:A = A + 1: GOTO 5240 5260 PRINT : PRINT "There are ";NN;" chapters:": IF NN = 0 THEN GOTO 5 110 5262 FOR I = 1 TO NN: PRINT I;" ";CT$(I): NEXT I 5265 PRINT 5266 IF OP$ = "E" THEN GOTO 5300 5270 PRINT "Use entire list? N";H$;: INPUT "";DU$: IF LEFT$ (DU$ + "N" ,1) < > "Y" THEN GOTO 5300 5277 FOR I = 1 TO NN:N = N + 1:CS$(N) = CT$(I):DS%(N) = DG: NEXT I 5280 IF AG = 1 THEN PRINT "Select more chapters": GOTO 5110 5285 RETURN 5300 B = 0 5310 IF OP$ < > "E" THEN PRINT "Select chapters 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 5318 IF A$ = "-" AND N > 0 THEN CT$(B) = CS$(N):N = N - 1: PRINT CT$(B) ;" Canceled": GOTO 5315 5320 IF A < 1 THEN DU$ = "": GOTO 5280 5325 IF CT$(A) = "" THEN PRINT "You picked this one already": GOTO 531 5 5327 PRINT CT$(A):B = A 5330 N = N + 1:CS$(N) = CT$(A):CT$(A) = "":DS%(N) = DG: GOTO 5315 5500 T = 0 5520 POKE U + 78,0 5530 FOR HJ = 1 TO CQ 5550 FOR I = 1 TO N 5560 CX$ = CS$(I):DX = DS%(I): GOSUB 7100 5570 IF SV = 1 THEN CY$ = CT$(I):DY = DT%(I) 5580 FOR CX = 1 TO PEEK (DIR) 5582 IF OP$ = "T" THEN POKE CD + 7,CX 5585 T = T + 1:CY = CX 5600 LE = PEEK (DIR + 3 * CX + 1) + 256 * PEEK (DIR + 3 * CX + 2) 5610 IF LE = 0 THEN GOTO 5700 5620 GOSUB 7200 5630 POKE ST + LE,255: POKE U + 111,CX 5640 LE = LE + 1: POKE CD + 4, INT (LE / 256): POKE CD + 3,LE - 256 * PEEK (CD + 4) 5645 IF OP$ = "T" THEN GOSUB 1300 5670 CALL CD: IF PEEK (U + 78) > 0 THEN RETURN 5672 IF OP$ = "T" THEN GOSUB 1350 5680 LE = 256 * PEEK (CD + 4) + PEEK (CD + 3) - 1 5690 IF LE AND SV THEN GOSUB 7400 5700 IF SV THEN POKE DIR + 3 * CX + 2, INT (LE / 256): POKE DIR + 3 * CX + 1,LE - 256 * PEEK (DIR + 3 * CX + 2) 5710 NEXT CX 5720 IF SV THEN GOSUB 7300 5729 IF OP$ < > "P" THEN PRINT "Chapter ";CS$(I);" done" 5730 NEXT I 5734 IF OP$ = "P" THEN CALL CD + 5: POKE U + 90,0: IF MC = 1 THEN POKE 38017,0 5735 NEXT HJ 5740 POKE U + 86,1: CALL EC + 21 5750 RETURN 7000 REM 7004 POKE U + 236,BW 7005 IF BW = BQ THEN RETURN 7007 ONERR GOTO 7060 7015 PRINT D$;"BLOAD MOD";BW;",A$7200" 7020 BQ = BW: POKE 216,0: RETURN 7050 POKE 216,0: RETURN 7060 POKE U + 109,9: CALL EC + 24: POKE 216,0: POKE U + 109,22: CALL EC + 24: GET A$: PRINT : 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 EC + 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 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 EC + 42: RETURN ]