No buffers available (repost)

25 posts / 0 new
Last post
Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
No buffers available (repost)

Sorry about the two previous posts. They both send no data (for some reason) and thus cannot be viewed.

Anyways, I am making a program here called Grapedesk. It was supposed to be a surprise final version (1.2), but because this error exists, I am forced to reveal it early.

It uses text files to make a user account system. All was working well, until one day I made page 11 of the included guide. At that point, for some reason, everytime I try to use an account text file, it throws a NO BUFFERS AVAILABLE error. MAXFILES doesn't help, no matter how it is used, and I used CLOSE before running the program. I can make a seperate program that also uses text files, and it works just fine. I also tried copying Grapedesk 1.2 to another disk, but the error still persists.

I am uploading the disk image with the program right now, as proof.t

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

Here is the disk image.

Also, here is the code for the program.

1 REM 0---------------0<br /> 2 REM | GRAPEDESK 1.2 |<br /> 3 REM 0---------------0<br /> 5 REM {INITIALIZING}<br /> 10 D$ = CHR$ (4)<br /> 11 T$ = CHR$ (13)<br /> 15 DIM A(5)<br /> 16 DIM U$(12)<br /> 20 REM {SPLASH SCREEN}<br /> 25 HOME : INVERSE : PRINT " WELCOME TO GRAPEDESK 1.2 MADE BY SILENT FLAMER OF EMACULATION NO PATCHES CURRENTLY INSTALLED "<br /> 30 VTAB 6: PRINT " NEW USERS SHOULD THOROUGHLY READ THE GRAPE GUIDE BEFORE USING GRAPEDESK 1.2 "<br /> 32 VTAB 11: PRINT " "<br /> 34 VTAB 16: PRINT " A USERNAME AND PASSWORD IS CURRENTLY COMPULSORY. LOG INTO YOUR ACCOUNT OR TYPE 'NEW' TO CREATE A NEW ACCOUNT "<br /> 36 VTAB 21: PRINT " "<br /> 37 NORMAL<br /> 38 GOSUB 100<br /> 40 REM {MAIN MENU}<br /> 45 HOME : INVERSE : PRINT "GRAPEDESK 1.2 MAIN MENU"<br /> 50 NORMAL : PRINT " (1) DISK UTILITIES (2) APP SHORTCUTS (3) GRAPE GUIDE (4) EXIT TO PRODOS (D) DESK ACCESORIES "<br /> 55 PRINT " INSTRUCTIONS FOR INSTALING GRAPDESK 1.2 ON A DISK ARE PROVIDED INSIDE THE GRAPE GUIDE, WHICH ALSO CONTAINS OTHER USEFUL INFO. "<br /> 60 PRINT " CHECK OUT CYBERNATIONS, AN ONLINE GAME THAT LETS YOU GOVERN YOUR OWN NATION. "<br /> 65 GOSUB 63700<br /> 66 PRINT JO$<br /> 70 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 75 VTAB 23: HTAB 39: GET M$<br /> 80 IF M$ = "1" THEN GOTO 1000<br /> 81 IF M$ = "2" THEN GOTO 2000<br /> 82 IF M$ = "3" THEN GOTO 3000<br /> 83 IF M$ = "4" THEN GOSUB 63800<br /> 84 IF M$ = "D" THEN GOSUB 60000<br /> 85 GOTO 40<br /> 100 REM {USER &amp; PW}<br /> 105 VTAB 23: HTAB 1: INPUT " USERNAME : ";U$(1)<br /> 106 IF U$(1) = "NEW" THEN GOTO 200<br /> 107 IF U$(1) = "" THEN GOTO 58100: IF U$(1) = " " THEN GOTO 58100: IF U$(1) = "Q" THEN GOTO 58100<br /> 110 PRINT D$;"RENAME ";U$(1);",READING"<br /> 115 PRINT D$;"RENAME READING,";U$(1)<br /> 120 PRINT D$;"OPEN ";U$(1)<br /> 125 PRINT D$;"READ ";U$(1)<br /> 130 INPUT O$<br /> 131 INPUT U$(2)<br /> 135 PRINT D$;"CLOSE ";U$(1)<br /> 139 VTAB 23: HTAB 1: PRINT " "<br /> 140 VTAB 23: HTAB 1: INPUT " PASSWORD : ";I$<br /> 145 IF I$ &lt; &gt; U$(2) THEN GOTO 950<br /> 150 GOTO 40<br /> 200 REM {CREATE NEW USER}<br /> 205 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CREATE NEW USER"<br /> 210 NORMAL : PRINT " GRAPEDESK 1.2 HAS A USER AND PASSWORD SYSTEM THAT LETS YOU HAVE YOUR OWN USERNAME, PASSWORD AND A PERSONALIZED APPLICATION SHORTCUTS LIST. AN ACCOUNT "<br /> 215 VTAB 7: PRINT " MAY ALSO BE USED IN FUTURE PATCHES FOR DATA STORAGE. EACH USER ACCOUNT IS STORED IN A FILE AT THE SAME PREFIX (DIRECTORY) AS GRAPEDESK. DELETING "<br /> 220 VTAB 11: PRINT " ANOTHER USER'S ACCOUNT FILE WILL NOT HELP YOU ACCESS THEIR DATA, AS DOING SO DELETES ALL DATA AND NOT ONLY ITS PASSWORD. "<br /> 225 VTAB 16: PRINT " IF YOU'VE CHANGE YOUR MIND, TYPE 'Q' AT THE FOLLOWING PROMPT TO RETURN TO THE SPLASH SCREEN. ALSO NOTE THAT MAKING A NEW ACCOUNT UNDER THE SAME NAME AS ANOTHER OVERWRITES THE OLDER. "<br /> 230 VTAB 23: HTAB 39: GET O$<br /> 235 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CREATE NEW USER"<br /> 240 NORMAL : INPUT " THE NAME OF THE NEW USER IS ";U$(1)<br /> 245 IF U$(1) = "Q" THEN GOTO 0<br /> 249 PRINT<br /> 250 INPUT " AND THE PASSWORD OF THIS ACCOUNT IS ";U$(2)<br /> 251 PRINT<br /> 255 IF U$(2) = "Q" THEN GOTO 0<br /> 256 FOR C = 3 TO 12<br /> 257 U$(C) = "NONE"<br /> 258 NEXT C<br /> 260 PRINT D$;"OPEN ";U$(1)<br /> 261 PRINT D$;"CLOSE ";U$(1)<br /> 265 PRINT D$;"DELETE ";U$(1)<br /> 270 PRINT D$;"OPEN ";U$(1)<br /> 271 PRINT D$;"WRITE ";U$(1)<br /> 275 FOR C = 1 TO 12<br /> 280 PRINT U$(C)<br /> 281 NEXT C<br /> 285 PRINT D$;"CLOSE ";U$(1)<br /> 290 PRINT " THE USER ACCOUNT WAS SUCCESSFULLY CREATED! WOULD YOU LIKE TO LOG INTO IT RIGHT NOW? "<br /> 295 VTAB 10: HTAB 13: GET M$<br /> 300 IF M$ = "Y" THEN GOTO 40<br /> 305 IF M$ = "N" THEN GOTO 20<br /> 310 GOTO 295<br /> 900 REM {USER NOT FOUND}<br /> 905 VTAB 1: HTAB 1: PRINT " THE USER THAT YOU TRIED TO LOG INTO WAS NOT FOUND! ________________________________________"<br /> 910 GOTO 100<br /> 950 REM {WRONG PASSWORD}<br /> 954 FOR C = 1 TO 40<br /> 955 GOSUB 63990<br /> 960 GOTO 100<br /> 1000 REM {DISK UTILITIES}<br /> 1005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 DISK UTILITIES"<br /> 1010 NORMAL : PRINT " (1) VIEW FILES (2) CHANGE DIRECTORY (3) RENAME FILE/FOLDER (4) DELETE FILE/FOLDER (5) CREATE FOLDER "<br /> 1015 VTAB 8: PRINT " <img src="https://www.applefritter.com/sites/all/modules/smiley/packs/kolobok/diablo.gif" alt="Diablo" /> LOCK FILE/FOLDER (7) UNLOCK FILE/FOLDER (8) RETURN TO MAIN MENU "<br /> 1020 GOSUB 63700<br /> 1025 PRINT JO$<br /> 1040 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 1045 VTAB 23: HTAB 39: GET M$<br /> 1050 IF M$ = "1" THEN GOTO 1100<br /> 1051 IF M$ = "2" THEN GOTO 1200<br /> 1052 IF M$ = "3" THEN GOTO 1300<br /> 1053 IF M$ = "4" THEN GOTO 1400<br /> 1054 IF M$ = "5" THEN GOTO 1500<br /> 1055 IF M$ = "6" THEN GOTO 1600<br /> 1056 IF M$ = "7" THEN GOTO 1700<br /> 1057 IF M$ = "8" THEN GOTO 40<br /> 1058 IF M$ = "D" THEN GOSUB 60000<br /> 1060 GOTO 1000<br /> 1100 REM {DU:VIEW FILES}<br /> 1105 HOME : INVERSE : PRINT "GRAPEDESK 1.2 VIEW FILES"<br /> 1110 NORMAL : PRINT D$;"CAT"<br /> 1115 VTAB 23: HTAB 39: GET O$<br /> 1120 GOTO 1000<br /> 1200 REM {DU:CHANGE DIRECTORY}<br /> 1205 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1210 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE DIRECTORY YOU WISH TO CHANGE TO IS ";I$<br /> 1215 PRINT D$;"PREFIX ";I$<br /> 1220 VTAB 1: HTAB 1: PRINT " CHANGE TO GIVEN DIRECTORY SUCCESSFUL. ________________________________________"<br /> 1225 VTAB 4: HTAB 39: GET O$<br /> 1230 GOTO 1000<br /> 1300 REM {DU:RENAME FILE\FOLDER}<br /> 1305 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1310 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO RENAME IS ";I$<br /> 1315 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1320 VTAB 2: HTAB 1: INPUT " THE NEW NAME OF THE FILE\FOLDER IS ";I2$<br /> 1325 PRINT D$;"RENAME ";I$;","I2$<br /> 1330 VTAB 1: HTAB 1: PRINT " RENAME OF FILE\FOLDER IS SUCCESSFUL. ________________________________________"<br /> 1335 VTAB 4: HTAB 39: GET O$<br /> 1340 GOTO 1000<br /> 1400 REM {DU:DELETE FILE\FOLDER}<br /> 1405 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1410 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE/FOLDER YOU WISH TO DELETE IS ";I$<br /> 1415 PRINT D$;"DELETE ";I$<br /> 1420 VTAB 1: HTAB 1: PRINT " DELETION OF THE FILE/FOLDER IS SUCCESSFUL. ________________________________________"<br /> 1425 VTAB 4: HTAB 39: GET O$<br /> 1430 GOTO 1000<br /> 1500 REM {DU:CREATE FOLDER}<br /> 1505 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1510 VTAB 2: HTAB 1: INPUT " THE NAME OF THE NEW FOLDER IS ";I$<br /> 1515 PRINT D$;"CREATE ";I$<br /> 1520 VTAB 1: HTAB 1: PRINT " FOLDER SUCCESSFULLY CREATED. ________________________________________"<br /> 1525 VTAB 4: HTAB 39: GET O$<br /> 1530 GOTO 1000<br /> 1600 REM {DU:LOCK FILE}<br /> 1605 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1610 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO LOCK IS ";I$<br /> 1615 PRINT D$;"LOCK ";I$<br /> 1620 VTAB 1: HTAB 1: PRINT " FILE\FOLDER SUCCESSFULLY LOCKED. ________________________________________"<br /> 1625 VTAB 4: HTAB 39: GET O$<br /> 1630 GOTO 1000<br /> 1700 REM {DU:UNLOCK FILE}<br /> 1705 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1710 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO UNLOCK IS ";I$<br /> 1715 PRINT D$;"UNLOCK ";I$<br /> 1720 VTAB 1: HTAB 1: PRINT " FILE\FOLDER SUCCESSFULLY UNLOCKED. ________________________________________"<br /> 1725 VTAB 4: HTAB 39: GET O$<br /> 1730 GOTO 1000<br /> 2000 REM {APP SHORTCUTS}<br /> 2005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 APPLICATION SHORTCUTS"<br /> 2006 PRINT D$;"OPEN ";U$(1)<br /> 2007 PRINT D$;"READ ";U$(1)<br /> 2008 FOR C = 1 TO 12<br /> 2009 INPUT U$(C)<br /> 2010 NEXT C<br /> 2011 PRINT D$;"CLOSE ";U$(1)<br /> 2012 NORMAL<br /> 2020 VTAB 3: PRINT " (1) ";U$(5)<br /> 2021 VTAB 4: PRINT " (2) ";U$(6)<br /> 2022 VTAB 5: PRINT " (3) ";U$(7)<br /> 2023 VTAB 6: PRINT " (4) ";U$(8)<br /> 2024 VTAB 7: PRINT " (5) ";U$(9)<br /> 2025 VTAB 8: PRINT " <img src="https://www.applefritter.com/sites/all/modules/smiley/packs/kolobok/diablo.gif" alt="Diablo" /> ";U$(10)<br /> 2026 VTAB 9: PRINT " (7) ";U$(11)<br /> 2027 VTAB 10: PRINT " (8) ";U$(12)<br /> 2028 VTAB 11: PRINT " (9) RETURN TO MAIN MENU "<br /> 2030 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 2035 VTAB 23: HTAB 39: GET M$<br /> 2040 IF M$ = "1" THEN GOTO 2100<br /> 2041 IF M$ = "2" THEN GOTO 2200<br /> 2042 IF M$ = "3" THEN GOTO 2300<br /> 2043 IF M$ = "4" THEN GOTO 2400<br /> 2044 IF M$ = "5" THEN GOTO 2500<br /> 2045 IF M$ = "6" THEN GOTO 2600<br /> 2046 IF M$ = "7" THEN GOTO 2700<br /> 2047 IF M$ = "8" THEN GOTO 2800<br /> 2050 IF M$ = "D" THEN GOSUB 60000<br /> 2055 IF M$ = "9" THEN GOTO 40<br /> 2060 GOTO 2000<br /> 2100 IF U$(5) = "NONE" THEN GOTO 2150<br /> 2105 VTAB 3: HTAB 39: GET M$<br /> 2110 IF M$ = "C" THEN GOTO 2140<br /> 2115 IF M$ = "R" THEN GOTO 2125<br /> 2120 GOTO 2000<br /> 2125 PRINT D$;"-";U$(5)<br /> 2140 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2142 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";I$<br /> 2143 U$(5) = I$<br /> 2144 GOSUB 2900<br /> 2146 GOTO 2000<br /> 2150 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2155 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(5)<br /> 2160 GOSUB 2900<br /> 2165 GOTO 2000<br /> 2200 IF U$(6) = "NONE" THEN GOTO 2250<br /> 2205 VTAB 4: HTAB 39: GET M$<br /> 2210 IF M$ = "C" THEN GOTO 2240<br /> 2215 IF M$ = "R" THEN GOTO 2225<br /> 2220 GOTO 2000<br /> 2225 PRINT D$;"RUN ";U$(6)<br /> 2240 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2242 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(6)<br /> 2244 GOSUB 2900<br /> 2246 GOTO 2000<br /> 2250 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2255 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(6)<br /> 2260 GOSUB 2900<br /> 2265 GOTO 2000<br /> 2300 IF U$(7) = "NONE" THEN GOTO 2350<br /> 2305 VTAB 5: HTAB 39: GET M$<br /> 2310 IF M$ = "C" THEN GOTO 2340<br /> 2315 IF M$ = "R" THEN GOTO 2325<br /> 2320 GOTO 2000<br /> 2325 PRINT D$;"-";U$(7)<br /> 2340 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2342 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(7)<br /> 2344 GOSUB 2900<br /> 2346 GOTO 2000<br /> 2350 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2355 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(7)<br /> 2360 GOSUB 2900<br /> 2365 GOTO 2000<br /> 2400 IF U$(8) = "NONE" THEN GOTO 2450<br /> 2405 VTAB 6: HTAB 39: GET M$<br /> 2410 IF M$ = "C" THEN GOTO 2440<br /> 2415 IF M$ = "R" THEN GOTO 2425<br /> 2420 GOTO 2000<br /> 2425 PRINT D$;"-";U$(8)<br /> 2440 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2442 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(8)<br /> 2444 GOSUB 2900<br /> 2446 GOTO 2000<br /> 2450 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2455 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(8)<br /> 2460 GOSUB 2900<br /> 2465 GOTO 2000<br /> 2500 IF U$(9) = "NONE" THEN GOTO 2550<br /> 2505 VTAB 7: HTAB 39: GET M$<br /> 2510 IF M$ = "C" THEN GOTO 2540<br /> 2515 IF M$ = "R" THEN GOTO 2525<br /> 2520 GOTO 2000<br /> 2525 PRINT D$;"-";U$(8)<br /> 2540 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2542 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(9)<br /> 2544 GOSUB 2900<br /> 2546 GOTO 2000<br /> 2550 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2555 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(9)<br /> 2560 GOSUB 2900<br /> 2565 GOTO 2000<br /> 2600 IF U$(10) = "NONE" THEN GOTO 2650<br /> 2605 VTAB 8: HTAB 39: GET M$<br /> 2610 IF M$ = "C" THEN GOTO 2640<br /> 2615 IF M$ = "R" THEN GOTO 2625<br /> 2620 GOTO 2000<br /> 2625 PRINT D$;"-";U$(10)<br /> 2640 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2642 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(10)<br /> 2644 GOSUB 2900<br /> 2646 GOTO 2000<br /> 2650 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2655 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(10)<br /> 2660 GOSUB 2900<br /> 2665 GOTO 2000<br /> 2700 IF U$(11) = "NONE" THEN GOTO 2750<br /> 2705 VTAB 9: HTAB 39: GET M$<br /> 2710 IF M$ = "C" THEN GOTO 2740<br /> 2715 IF M$ = "R" THEN GOTO 2725<br /> 2720 GOTO 2000<br /> 2725 PRINT D$;"-";U$(11)<br /> 2740 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2742 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(11)<br /> 2744 GOSUB 2900<br /> 2746 GOTO 2000<br /> 2750 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2755 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(11)<br /> 2760 GOSUB 2900<br /> 2765 GOTO 2000<br /> 2800 IF U$(12) = "NONE" THEN GOTO 2850<br /> 2805 VTAB 10: HTAB 39: GET M$<br /> 2810 IF M$ = "C" THEN GOTO 2840<br /> 2815 IF M$ = "R" THEN GOTO 2825<br /> 2820 GOTO 2000<br /> 2825 PRINT D$;"-";U$(12)<br /> 2840 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2842 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(12)<br /> 2844 GOSUB 2900<br /> 2846 GOTO 2000<br /> 2850 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2855 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(12)<br /> 2860 GOSUB 2900<br /> 2865 GOTO 2000<br /> 2900 REM {SAVE CHANGES}<br /> 2901 PRINT D$;"OPEN ";U$(1)<br /> 2902 PRINT D$;"CLOSE ";U$(1)<br /> 2903 PRINT D$;"DELETE ";U$(1)<br /> 2905 PRINT D$;"OPEN ";U$(1)<br /> 2910 PRINT D$;"WRITE ";U$(1)<br /> 2915 FOR C = 1 TO 12<br /> 2920 PRINT U$(C)<br /> 2925 NEXT C<br /> 2930 PRINT D$;"CLOSE ";U$(1)<br /> 2935 RETURN<br /> 3000 REM {GRAPE GUIDE}<br /> 3005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3010 NORMAL : PRINT " GOOD DAY, AND THANK YOU FOR GIVING A TRY AT GRAPEDESK 1.2. THIS VERSION WAS INTENDED TO BE MUCH MORE USEFUL THAN ITS PREDECESSORS, AND IT HAS INDEED "<br /> 3015 VTAB 7: PRINT " BECOME SO. INSTEAD OF GIVING A RICH TEXT MANUAL, I HAVE DECIDED TO TYPE IN ALL DOCUMENTATION IN THE GRAPE GUIDE THIS TIME. EACH FEATURE IN THE PROGRAM WILL BE EXPLAINED IN AN ENCYCLOPEDIAC "<br /> 3020 VTAB 12: PRINT " FASHION. THE CONTENTS ARE LISTED IN THE NEXT PAGE, SO KINDLY TYPE '2' AND HIT . "<br /> 3025 VTAB 15: PRINT " ALSO, IF YOU HAVE THE TIME, I WOULD BE VASTLY GRATEFUL IF YOU COULD REGISTER FOR THE 'VALHALLA HOME SERVICES' BBS, WHICH CAN BE ACCESSED BY TELNET AT 'VALHALLA.SYNCHRO.NET', PORT 23. "<br /> 3026 VTAB 21: PRINT " OH, AND TYPE 'Q' TO RETURN. "<br /> 3030 VTAB 23: HTAB 1: PRINT " [PAGE #1][INTRODUCTION] "<br /> 3035 VTAB 23: HTAB 26: GET M$<br /> 3036 VTAB 23: HTAB 27: GET M2$<br /> 3040 GOSUB 59500<br /> 3045 GOTO 3000<br /> 3100 REM {G.G. PAGE 2}<br /> 3105 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3110 NORMAL : PRINT " THE GRAPE GUIDE IS INCOMPLETE, SO CONTENTS ARE STILL NOT CONFIRMED. "<br /> 3130 VTAB 23: HTAB 1: PRINT " [PAGE #2][CONTENTS] "<br /> 3135 VTAB 23: HTAB 22: GET M$<br /> 3136 VTAB 23: HTAB 23: GET M2$<br /> 3140 GOSUB 59500<br /> 3145 GOTO 3100<br /> 3200 REM {G.G. PAGE 3}<br /> 3205 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3210 NORMAL : PRINT " GRAPEDESK 1.2 IS SIMILLAR TO ITS PRE- DECCESORS. THERE ARE DISK UTILITIES, A CUSTOMIZED APPLICATION SHORTCUT LIST, THIS GRAPE GUIDE AND A SLEW OF DESK ACCESORIES. EACH OF THESE AND ITS "<br /> 3215 VTAB 8: PRINT " CONTENTS ARE EXPLAINED IN THE NEXT FEW PAGES. ON ANOTHER NOTE, THE CHANGES OF G.D. 1.2 FROM PREDECCESORS INCLUDE A NEW, EASILY CHANGED APPLICATION SHORT CUTS LIST, A SIMPLE SCREENSAVER, "<br /> 3216 VTAB 13: PRINT " HAVING MACHINE.ID INTEGRATED, AN UPDATED CALCULATOR THAT SUPPORTS UP TO FIVE INTEGERS WITH ONE OPERATION, ERROR HANDLING FINALLY INSTALLED, A SOMEWHAT RELIABLE ACCOUNT SYSTEM, AN "<br /> 3217 VTAB 18: PRINT " INTENTIONALLY INCLUDED SLIGHTLY RANDOM JOKE IN THE MAIN AND DISK UTILITIES MENU, AN UPDATED GRAPE GUIDE AND A SETUP PROGRAM. "<br /> 3220 VTAB 23: HTAB 1: PRINT " [PAGE #3][CHANGES FROM BEFORE] "<br /> 3225 VTAB 23: HTAB 33: GET M$<br /> 3226 VTAB 23: HTAB 34: GET M2$<br /> 3230 GOSUB 59500<br /> 3235 GOTO 3200<br /> 3300 REM {G.G. PAGE 4}<br /> 3305 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3310 NORMAL : PRINT " THE DISK UTILITIES MENU HOUSES MOST OF THE CURRENT FUNCTIONS THAT RELATE TO FILES AND FOLDERS IN THE DISK. THIS MENU HAS BEEN AROUND SINCE THE BETA. "<br /> 3315 VTAB 8: PRINT " FROM A MERE THREE FUNCTIONS IN THE BETA, IT GREW INTO THE SEVEN FUNCTIONS THAT ARE MOST COMMONLY USED. CURRENTLY, THE FUNCTIONS INCLUDE 'VIEW FILES', 'CHANGE DIRECTORY', 'RENAME FILE/ "<br /> 3316 VTAB 13: PRINT " FOLDER', 'CREATE FOLDER', 'LOCK FILE/ FOLDER' AND 'UNLOCK FILE/FOLDER'. EACH OF THESE HAVE THEIR OWN PAGE IN THE GRAPE GUIDE. IF YOU WISH TO USE OTHER FUNCTIONS, YOU WILL HAVE TO EXIT G.D. "<br /> 3317 VTAB 18: PRINT " TO PRODOS. FROM THERE, NORMAL USE OF PRODOS MAY COMMENCE. "<br /> 3320 VTAB 23: PRINT " [PAGE #4][DISK UTILITIES] "<br /> 3325 VTAB 23: HTAB 28: GET M$<br /> 3326 VTAB 23: HTAB 29: GET M2$<br /> 3330 GOSUB 59500<br /> 3335 GOTO 3300<br /> 3400 REM {G.G. PAGE 5}<br /> 3405 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3410 NORMAL : PRINT " THE FIRST GRAPEDESK DISK UTILITY EVER MADE, AND THE FIRST IN THE LIST IS 'VIEW FILES'. IT WAS CALLED 'CATALOG CURRENT PREFIX' "<br /> 3415 VTAB 8: PRINT " IN THE BETA, 'CATALOG PREFIX' IN V1.0 AND ALSO CALLED 'VIEW FILES' IN V1.1. THIS FUNCTION IS THE EQUIVALENT OF 'CAT' IN PRODOS. "<br /> 3416 VTAB 13: PRINT " IT LISTS ALL THE FILES IN THE CURRENT PREFIX (DIRECTORY). THERE ARE NO KNOWN BUGS, BUT AS I HAVE USED 'VTAB 23:HTAB 39:GET O$' AT THE END OF THE CATALOG, I SUSPECT LISTINGS OF OVER ONE SCREEN "<br /> 3417 VTAB 18: PRINT " WILL HIDE A CHARACTER NEAR THE BOTTOM- RIGHT CORNER WITH A BLINKING CURSOR. "<br /> 3420 VTAB 23: HTAB 1: PRINT " [PAGE #5][D.U. VIEW FILES] "<br /> 3425 VTAB 23: HTAB 29: GET M$<br /> 3426 VTAB 23: HTAB 30: GET M2$<br /> 3430 GOSUB 59500<br /> 3435 GOTO 3400<br /> 3500 REM {G.G. PAGE #6}<br /> 3505 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3510 NORMAL : PRINT " THE SECOND IN THE LIST IS 'CHANGE DIR- ECTORY'. IT WAS CALLED 'CHANGE PREFIX' IN THE BETA, V1.0 AND V1.1. IT IS THE EQUIVALENT OF 'PREFIX' IN PRODOS. "<br /> 3515 VTAB 8: PRINT " IT CHANGES THE PREFIX (DIRECTORY) TO THE ONE GIVEN BY THE USER. THE USER MAY STATE THE NAME OF THE DIRECTORY IF IT IS IN THE CURRENT DIRECTORY, OR A FULL ADDRESS IF IT IS NOT IN THE CUR- "<br /> 3516 VTAB 13: PRINT " RENT DIRECTORY AND ANY OF ITS SUBDIR- ECTORIES. IF AN INVALID RESPONSE IS GIVEN, AN ERROR IS UNLEASHED. "<br /> 3520 VTAB 23: HTAB 1: PRINT " [PAGE #6][D.U. CHANGE DIRECTORY] "<br /> 3525 VTAB 23: HTAB 35: GET M$<br /> 3526 VTAB 23: HTAB 36: GET M2$<br /> 3530 GOSUB 59500<br /> 3535 GOTO 3500<br /> 3600 REM {G.G. PAGE #7}<br /> 3605 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3610 NORMAL : PRINT " THE THIRD FUNCTION IS 'RENAME FILE/ FOLDER'. IT IS A NEW FUNCTION. IT IS THE EQUIVALENT OF 'RENAME' IN PRODOS. "<br /> 3615 VTAB 7: PRINT " IT RENAMES A FILE OR FOLDER TO A NAME GIVEN BY THE USER. THE USER MAY GIVE THE NAME OF THE FILE TO BE RENAMED IF IT IS IN THE CURRENT DIRECTORY, OR THE FULL ADDRESS IF IT IS NOT IN THE CUR- "<br /> 3616 VTAB 12: PRINT " RENT DIRECTORY AND ANY OF ITS SUBDIR- ECTORIES. IF AN INVALID RESPONSE OR A NON-EXISTANT FILE IS STATED, AN ERROR IS UNLEASHED. "<br /> 3620 VTAB 23: HTAB 1: PRINT " [PAGE #7][D.U. RENAME FILE/FOLDER] "<br /> 3625 VTAB 23: HTAB 37: GET M$<br /> 3626 VTAB 23: HTAB 38: GET M2$<br /> 3630 GOSUB 59500<br /> 3635 GOTO 3600<br /> 3700 REM {G.G. PAGE #8}<br /> 3705 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3710 NORMAL : PRINT " THE FOURTH IS 'DELETE FILE/FOLDER'. IT IS CALLED 'DELETE FILES/FOLDERS' IN THE BETA, 'DELETE FILES' IN V1.0 AND THE SAME IN V1.1. IT IS THE EQUIVALENT OF 'DELETE' IN PRODOS. "<br /> 3715 VTAB 9: PRINT " IT DELETES THE FILE OR FOLDER STATED BY THE USER. THE USER MAY GIVE THE NAME OF THE FILE/FOLDER IF IT IS IN THE CURRENT DIRECTORY, OR A FULL ADD- RESS IF THE FILE/FOLDER IS NOT IN THE "<br /> 3716 VTAB 14: PRINT " CURRENT DIRECTORY AND ANY OF ITS SUB- DIRECTORIES. IF AN INVALID RESPONSE OR A NON-EXISTANT FILE/FOLDER IS STATED, AN ERROR IS UNLEASHED. "<br /> 3720 VTAB 23: PRINT " [PAGE #8][D.U. DELETE FILE/FOLDER] "<br /> 3725 VTAB 23: HTAB 37: GET M$<br /> 3726 VTAB 23: HTAB 38: GET M2$<br /> 3730 GOSUB 59500<br /> 3735 GOTO 3700<br /> 3800 REM {G.G. PAGE #9}<br /> 3805 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3810 NORMAL : PRINT " THE FIFTH FUNCTION IS 'CREATE FOLDER'. IT IS NOT IN THE BETA, IT IS ALSO CALLED 'CREATE FOLDER' IN V1.0, BUT IT IS CALLED 'CREATE DIR' IN V1.1. IT IS THE EQUIVALENT OF 'CREATE' IN PRODOS. "<br /> 3815 VTAB 9: PRINT " IT CREATES A FOLDER IN THE CURRENT DIRECTORY WITH THE NAME GIVEN BY THE USER. IF THE USER TYPES INVALID CHAR- ACTERS IN THE NAME, AN ERROR IS UNLEA- SHED. "<br /> 3820 VTAB 23: HTAB 1: PRINT " [PAGE #9][D.U. CREATE FOLDER] "<br /> 3825 VTAB 23: HTAB 32: GET M$<br /> 3826 VTAB 23: HTAB 33: GET M2$<br /> 3830 GOSUB 59500<br /> 3835 GOTO 3800<br /> 3900 REM {G.G. PAGE #10}<br /> 3905 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3910 NORMAL : PRINT " THE SIXTH FUNCTION IS 'LOCK FILE/ FOLDER'. IT IS NOT PRESENT IN THE BETA AND V1.0, AND IS NAMED 'LOCK FILES' IN V1.1. IT IS THE EQUIVALENT OF 'LOCK' IN PRODOS. "<br /> 3915 VTAB 9: PRINT " IT LOCKS THE FILE/FOLDER STATED BY THE USER, PREVENTING IT FROM BEING MODI- FIED IN ANY WAY. THE USER MAY GIVE THE NAME OF THE FILE/FOLDER IF IT IS IN THE CURRENT DIRECTORY, OR THE FULL "<br /> 3916 VTAB 14: PRINT " ADDRESS IF THE FILE/FOLDER IS NOT IN THE CURRENT DIRECTORY AND ANY OF ITS SUBDIRECTORIES. IF AN INVALID RESPONSE OR A NON-EXISTANT FILE/FOLDER IS GIVEN, AN ERROR IS UNLEASHED. "<br /> 3920 VTAB 23: HTAB 1: PRINT " [PAGE #10][D.U. LOCK FILE] "<br /> 3925 VTAB 23: HTAB 29: GET M$<br /> 3926 VTAB 23: HTAB 30: GET M2$<br /> 3930 GOSUB 59500<br /> 3935 GOTO 3900<br /> 4000 REM {G.G. PAGE #11}<br /> 4005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 4010 NORMAL : PRINT " THE SEVENTH AND LAST FUNCTION IS 'UN- LOCK FILE/FOLDER'.IT IS ABSENT IN THE BETA AND V1.0, AND NAMED 'UNLOCK FILE' IN V1.1. IT IS THE EQUIVALENT OF 'UN- LOCK' IN PRODOS. "<br /> 4015 VTAB 9: PRINT " IT UNLOCKS THE FILE/FOLDER STATED BY THE USER, ENABLING THE FILE/FOLDER TO BE ONCE AGAIN MODIFIED. THE USER MAY GIVE THE NAME OF THE FILE/FOLDER IF IT IS IN THE CURRENT DIRECTORY, OR A FULL "<br /> 4016 VTAB 14: PRINT " ADDRESS IF THE FILE/FOLDER IS NOT IN THE CURRENT DIRECTORY AND ANY OF ITS SUBDIRECTORIES. IF AN INVALID RESPONSE OR A NON-EXISTANT FILE/FOLDER IS STA- TED, AN ERROR IS UNLEASHED. "<br /> 4020 VTAB 23: HTAB 1: PRINT " [PAGE #11][D.U. UNLOCK FILE/FOLDER] "<br /> 4025 VTAB 23: HTAB 38: GET M$<br /> 4026 VTAB 23: HTAB 39: GET M2$<br /> 4030 GOSUB 59500<br /> 4035 GOTO 4000<br /> 4100 REM {G.G. PAGE #12}<br /> 4105 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 4110 NORMAL : PRINT " THE NEW APPLICATION SHORTCUT LIST IS DIFFERENT FROM THE ONES IN THE OLDER VERSIONS OF GRAPEDESK. BEFORE, IF THE APPLICATION LIST WERE TO BE MODIFIED, ONE WOULD HAVE TO EDIT THE CODE OF "<br /> 4115 VTAB 8: PRINT " GRAPEDESK. COUPLED WITH THE ABSENCE OF 'ONERR', IF ANY FILES IN THE SHORTCUT LIST WAS REMOVED, THE ONCOMING ERROR PROVES TO BE INCONVENIENT. "<br /> 4116 VTAB 13: PRINT " THEREFORE, WITH MY NEW KNOWLEDGE OF THE USE OF TEXT FILES, THE APPLICATION SHORTCUT LIST IN THIS VERSION HAS 8 SLOTS THAT CAN BE MODIFIED INSIDE G.D. AND STORED INSIDE THE USER'S PERSONAL "<br /> 4117 VTAB 18: PRINT " ACCOUNT FILE. THE NEW ACCOUNT SYSTEM PROVES ITS USE THROUGH THIS NEW LIST. ALSO, THE FUNCTIONS OF THIS SHORTCUT LIST CANNOT BE DIRECTLY ACHIEVABLE IN "<br /> 4120 VTAB 23: HTAB 1: PRINT " [PAGE #12][APP LIST] "<br /> 4125 VTAB 23: HTAB 18: GET M$<br /> 4126 VTAB 23: HTAB 19: GET M2$<br /> 4130 GOSUB 59500<br /> 4135 GOTO 4100<br /> 5835 GOTO 5800<br /> 58100 HOME : END<br /> 59500 REM {G.G. NAVIGATION}<br /> 59505 IF M$ = "1" AND M2$ = R$ THEN GOTO 3000<br /> 59506 IF M$ = "2" AND M2$ = R$ THEN GOTO 3100<br /> 59507 IF M$ = "3" AND M2$ = R$ THEN GOTO 3200<br /> 59508 IF M$ = "4" AND M2$ = R$ THEN GOTO 3300<br /> 59509 IF M$ = "5" AND M2$ = R$ THEN GOTO 3400<br /> 59510 IF M$ = "6" AND M2$ = R$ THEN GOTO 3500<br /> 59511 IF M$ = "7" AND M2$ = R$ THEN GOTO 3600<br /> 59512 IF M$ = "8" AND M2$ = R$ THEN GOTO 3700<br /> 59513 IF M$ = "9" AND M2$ = R$ THEN GOTO 3800<br /> 59514 IF M$ = "1" AND M2$ = "0" THEN GOTO 3900<br /> 59515 IF M$ = "1" AND M2$ = "1" THEN GOTO 4000<br /> 59516 IF M$ = "1" AND M2$ = "2" THEN GOTO 4100<br /> 59517 IF M$ = "1" AND M2$ = "3" THEN GOTO 4200<br /> 59518 IF M$ = "1" AND M2$ = "4" THEN GOTO 4300<br /> 59519 IF M$ = "1" AND M2$ = "5" THEN GOTO 4400<br /> 59520 IF M$ = "1" AND M2$ = "6" THEN GOTO 4500<br /> 59521 IF M$ = "1" AND M2$ = "7" THEN GOTO 4600<br /> 59522 IF M$ = "1" AND M2$ = "8" THEN GOTO 4700<br /> 59523 IF M$ = "1" AND M2$ = "9" THEN GOTO 4800<br /> 59524 IF M$ = "2" AND M2$ = "0" THEN GOTO 4900<br /> 59597 IF M$ = "Q" THEN GOTO 40<br /> 59598 IF M$ = "D" THEN GOSUB 60000<br /> 59599 RETURN<br /> 59702 REM {OCEAN SCREENSAVER}<br /> 59704 GR<br /> 59706 POKE - 16302,0<br /> 59708 GOTO 59900<br /> 59710 COLOR= 15<br /> 59712 FOR C = 0 TO 9<br /> 59714 IF C &gt; 9 THEN GOTO 59750<br /> 59716 VLIN 36,47 AT C<br /> 59718 NEXT C<br /> 59750 REM {OCEAN}<br /> 59752 COLOR= 2<br /> 59754 FOR C = 10 TO 39<br /> 59756 IF C &gt; 39 THEN GOTO 59800<br /> 59758 VLIN 37,47 AT C<br /> 59760 NEXT C<br /> 59800 REM {SMALL WAVE}<br /> 59802 IF PEEK ( - 16384) &gt; 127 THEN GOTO 59950<br /> 59804 FOR X = 10 TO 39<br /> 59806 IF X &gt; 39 THEN GOTO 59850<br /> 59808 PLOT X,36<br /> 59810 FOR D = 1 TO 40<br /> 59812 NEXT D<br /> 59814 COLOR= 6<br /> 59816 PLOT X,36<br /> 59818 COLOR= 2<br /> 59820 NEXT X<br /> 59850 REM {DELAY &amp; BACK}<br /> 59852 IF PEEK ( - 16384) &gt; 127 THEN GOTO 59950<br /> 59854 FOR D = 1 TO 1000<br /> 59856 NEXT D<br /> 59858 X = X - 1<br /> 59860 IF X &lt; 10 THEN GOTO 59800<br /> 59862 PLOT X,36<br /> 59864 FOR D = 1 TO 40<br /> 59866 NEXT D<br /> 59868 COLOR= 6<br /> 59870 PLOT X,36<br /> 59872 COLOR= 2<br /> 59874 GOTO 59858<br /> 59900 REM {PAINT SKY}<br /> 59902 COLOR= 6<br /> 59904 FOR C = 0 TO 39<br /> 59906 IF C &gt; 39 THEN GOTO 59912<br /> 59908 VLIN 0,47 AT C<br /> 59910 NEXT C<br /> 59912 COLOR= 13<br /> 59914 PLOT 37,0: PLOT 38,0: PLOT 39,0: PLOT 37,1: PLOT 38,1: PLOT 39,1: PLOT 37,2: PLOT 38,2: PLOT 39,2<br /> 59916 GOTO 59710<br /> 59950 REM {KEY PRESSED}<br /> 59952 POKE - 16368,0<br /> 59954 TEXT : HOME<br /> 59956 RETURN<br /> 60000 REM {DESK ACCESORIES}<br /> 60005 HTAB 1: VTAB 1: PRINT " (1) CALCULATOR (2) RUN PROGRAM (3) MACHINE ID (4) SCREENSAVER "<br /> 60010 HTAB 1: VTAB 6: PRINT " AWAITING COMMAND. ________________________________________"<br /> 60015 HTAB 39: VTAB 7: GET M$<br /> 60020 IF M$ = "1" THEN GOTO 61000<br /> 60025 IF M$ = "2" THEN GOTO 62000<br /> 60030 IF M$ = "3" THEN GOTO 63000<br /> 60035 IF M$ = "4" THEN GOSUB 59702<br /> 60040 RETURN<br /> 61000 REM {CALCULATOR}<br /> 61001 FOR C = 1 TO 6<br /> 61002 N(C) = 0<br /> 61003 NEXT C<br /> 61005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CALCULATOR"<br /> 61010 NORMAL : PRINT " (1) ADDITION (2) SUBTRACTION (3) MULTIPLICATION (4) DIVISION ( ) RETURN TO PREVIOUS MENU "<br /> 61015 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 61020 VTAB 23: HTAB 39: GET M$<br /> 61025 IF M$ = "1" THEN GOTO 61100<br /> 61030 IF M$ = "2" THEN GOTO 61200<br /> 61035 IF M$ = "3" THEN GOTO 61300<br /> 61040 IF M$ = "4" THEN GOTO 61400<br /> 61050 GOTO 40<br /> 61100 REM {CALC:ADD}<br /> 61101 VTAB 9: HTAB 1: INPUT " WHAT'S THE FIRST NUMBER TO ADD? ";N(1)<br /> 61102 VTAB 9: PRINT " "<br /> 61103 N(6) = 0<br /> 61105 FOR C = 2 TO 6<br /> 61106 IF C &gt; 5 THEN GOTO 61180<br /> 61110 VTAB 9: INPUT " WHAT'S THE NEXT NUMBER TO ADD IN? TYPE 0 TO SUM UP ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61111 N(6) = N(1) + N(2) + N(3) + N(4) + N(5)<br /> 61115 IF N(C) = 0 THEN GOTO 61190<br /> 61130 NEXT C<br /> 61180 VTAB 9: PRINT " "<br /> 61182 VTAB 9: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE SUM FOR EVERYTHING IS ";N(6)<br /> 61183 HTAB 39: VTAB 23: GET O$<br /> 61185 GOTO 61196<br /> 61190 VTAB 9: PRINT " "<br /> 61192 VTAB 9: PRINT " ALRIGHT THEN. THE SUM FOR EVERYTHING SO FAR IS ";N(6)<br /> 61195 HTAB 39: VTAB 23: GET O$<br /> 61196 GOTO 61000<br /> 61200 REM {CALC:SUBTR}<br /> 61201 N(6) = 0<br /> 61205 VTAB 9: HTAB 1: INPUT " WHAT'S THE BIGGEST NUMBER? ";N(1)<br /> 61210 VTAB 9: PRINT " "<br /> 61215 FOR C = 2 TO 6<br /> 61220 IF C &gt; 5 THEN GOTO 61280<br /> 61225 VTAB 9: INPUT " WHAT'S THE NEXT NUMBER TO SUBTRACT FROM THE BIGGEST NUMBER? TYPE 0 TO SUBTRACT ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61226 N(6) = N(1) - N(2) - N(3) - N(4) - N(5)<br /> 61230 IF N(C) = 0 THEN GOTO 61290<br /> 61235 NEXT C<br /> 61280 VTAB 9: PRINT " "<br /> 61282 VTAB 9: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE FIRST NUMBER MINUS EVERYTHING ELSE IS ";N(6)<br /> 61284 VTAB 23: HTAB 39: GET O$<br /> 61286 GOTO 61000<br /> 61290 VTAB 9: PRINT " "<br /> 61292 VTAB 9: PRINT " ALRIGHT THEN. THE FIRST NUMBER MINUS EACH OTHER NUMBER IS ";N(6)<br /> 61294 VTAB 23: HTAB 39: GET O$<br /> 61296 GOTO 61000<br /> 61300 REM {CALC:MULTI}<br /> 61305 N(6) = 0<br /> 61310 VTAB 9: HTAB 1: INPUT " WHAT IS THE FIRST NUMBER TO MULTIPLY WITH? ";N(1)<br /> 61311 N(6) = N(1)<br /> 61315 FOR C = 2 TO 6<br /> 61320 IF C &gt; 5 THEN GOTO 61390<br /> 61325 VTAB 9: HTAB 1: INPUT " WHAT IS THE NEXT NUMBER TO MULTIPLY WITH? TYPE 0 TO MULTIPLY ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61330 IF N(C) = 0 THEN GOTO 61380<br /> 61335 N(6) = N(6) * N(C)<br /> 61340 NEXT C<br /> 61380 VTAB 9: HTAB 1: PRINT " "<br /> 61382 VTAB 9: HTAB 1: PRINT " ALRIGHT THEN. THE PRODUCT OF ALL THE NUMBERS WE HAVE SO FAR IS ";N(6)<br /> 61384 HTAB 39: VTAB 23: GET O$<br /> 61386 GOTO 61000<br /> 61390 VTAB 9: HTAB 1: PRINT " "<br /> 61392 VTAB 9: HTAB 1: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE PRODUCT OF ALL THE NUMBERS SO FAR IS ";N(6)<br /> 61394 HTAB 39: VTAB 23: GET O$<br /> 61396 GOTO 61000<br /> 61400 REM {CALC:DIVISION}<br /> 61405 N(6) = 0<br /> 61410 VTAB 9: HTAB 1: INPUT " WHAT IS THE FIRST NUMBER TO DIVIDE EVERYTHING ELSE WITH? ";N(1)<br /> 61415 N(6) = N(1)<br /> 61420 FOR C = 2 TO 6<br /> 61425 IF C &gt; 5 THEN GOTO 61490<br /> 61430 VTAB 9: HTAB 1: INPUT " WHAT IS THE NEXT NUMBER TO BE DIVIDED BY THE FIRST NUMBER? TYPE 0 TO DIVIDE ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61435 IF N(C) = 0 THEN GOTO 61480<br /> 61440 N(6) = N(6) / N(C)<br /> 61445 NEXT C<br /> 61480 VTAB 9: HTAB 1: PRINT " "<br /> 61482 VTAB 9: HTAB 1: PRINT " ALRIGHT THEN. THE FIRST NUMBER DIVIDED BY THE OTHERS, ONE BY ONE IS ";N(6)<br /> 61484 HTAB 39: VTAB 23: GET O$<br /> 61486 GOTO 61000<br /> 61490 VTAB 9: HTAB 1: PRINT " "<br /> 61492 VTAB 9: HTAB 1: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE FIRST NUMBER DIVIDED BY EVERYTHING ELSE, ONE BY ONE IS ";N(6)<br /> 61494 HTAB 39: VTAB 23: GET O$<br /> 61496 GOTO 61000<br /> 62000 REM {RUN PROGRAM}<br /> 62005 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 62010 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE THAT YOU WISH TO RUN IS ";I$<br /> 62011 IF I$ = "" THEN GOTO RETURN<br /> 62015 PRINT D$;"-";I$<br /> 62020 GOTO 40<br /> 63000 REM {ABOUT THIS APPLE}<br /> 63003 TEXT : PRINT CHR$ (21): HOME<br /> 63004 INVERSE : PRINT "GRAPEDESK 1.2 ABOUT THIS APPLE"<br /> 63005 NORMAL :LOC = 49048: PRINT "MACHINE ID BYTE:"LOC" ($BF98)"<br /> 63010 P = PEEK (LOC): PRINT " VALUE:"P" ($";:P1 = P - INT (P / 16) * 16:P2 = INT (P / 16): PRINT CHR$ (P2 + 48 + 7 * (P2 &gt; 9)) CHR$ (P1 + 48 + 7 * (P1 &gt; 9))")"<br /> 63015 PRINT " BITS:";: FOR I = 1 TO 8:BIT(I) = P - INT (P / 2) * 2: HTAB 18 - I - (I &gt; 4): PRINT BIT(I);:P = INT (P / 2): NEXT : PRINT : PRINT : REM BIT#1.ON.RIGHT/BIT#8.ON.LEFT 25 TYPE = 4 * BIT(8) + 2 * BIT(7) + BIT(4):APL$(0) = "II+"<br /> 63020 K = 2 * BIT(6) + BIT(5):MEM(1) = 48:MEM(2) = 64:MEM(3) = 128<br /> 63025 HUH$(0) = "NO":HUH$(1) = "YES"<br /> 63030 IF TYPE &lt; &gt; 4 AND TYPE &lt; &gt; 5 THEN 63050<br /> 63035 PRINT "THIS IS AN APPLE "APL$(TYPE)" WITH "MEM(K)"K."<br /> 63040 PRINT " CLOCK:"HUH$(BIT(1))<br /> 63045 PRINT " 80-COLUMNS:"HUH$(BIT(2))<br /> 63050 PRINT<br /> 63055 PRINT "POSSIBLE SLOT CONTENTS:"<br /> 63060 FOR SLOT = 1 TO 7: REM NO, YOU CAN'T PEEK AT SLOT 0!<br /> 63065 LOC = 49152 + 256 * SL:A$ = ""<br /> 63070 IF PEEK (LOC + 23) = 201 AND PEEK (LOC + 55) = 207 AND PEEK (LOC + 76) = 234 THEN A$ = "SILENTYPE": GOTO 600<br /> 63075 IF PEEK (LOC) = 8 AND PEEK (LOC + 1) = 120 AND PEEK (LOC + 2) = 40 THEN A$ = "CLOCK": GOTO 600<br /> 63080 IF PEEK (LOC + 5) = 24 AND PEEK (LOC + 7) = 24 THEN A$ = "COMMUNICATIONS CARD": GOTO 600<br /> 63085 IF PEEK (LOC + 5) = 56 AND PEEK (LOC + 7) = 24 THEN A$ = "SERIAL CARD"<br /> 63090 IF PEEK (LOC + 11) = 1 THEN I = INT ( PEEK (LOC + 12) / 16): IF I &lt; 10 THEN I = I + 1: RESTORE : FOR J = 1 TO I: READ A$: NEXT : GOTO 63105<br /> 63095 DATA USED,PRINTER,JOYSTICK,I/O CARD,MODEM,AUDIO CARD,CLOCK,MASS STORAGE,80-COLUMN CARD,NETWORK CARD<br /> 63100 IF PEEK (LOC + 5) = 72 AND PEEK (LOC + 7) = 72 THEN A$ = "PARALLEL CARD"<br /> 63105 FOR J = 48946 TO 48946 + PEEK (48945):P = PEEK (J): IF P &gt; 127 THEN P = P - 128<br /> 63110 IF P &lt; 16 * SL THEN 63130<br /> 63115 DR = P - 16 * SL<br /> 63120 IF DR = 4 THEN A$ = "PROFILE"<br /> 63125 IF DR = 0 THEN A$ = "DISK DRIVE"<br /> 63130 NEXT J<br /> 63135 PRINT " SLOT "SL": ";: IF LEN (A$) THEN PRINT A$<br /> 63140 IF NOT LEN (A$) THEN PRINT "EMPTY?"<br /> 63145 NEXT SL<br /> 63150 PRINT CHR$ (4)"PREFIX": INPUT A$: PRINT "CURRENT PREFIX: "A$<br /> 63155 PRINT "LAST USED SLOT: " PEEK (48700): PRINT "LAST USED DRIVE: " PEEK (48701)<br /> 63160 VTAB 23: HTAB 39: GET O$<br /> 63170 GOTO 40<br /> 63700 REM {RANDOM JOKE}<br /> 63705 JO = RND (1) * 10<br /> 63710 JO = INT (JO)<br /> 63715 IF JO = 0 THEN JO$ = " ON A SWEDISH CHAINSAW: 'DO NOT ATTEMPT TO STOP CHAIN WITH YOUR HANDS.' "<br /> 63716 IF JO = 1 THEN JO$ = " ON A JAPANESE FOOD PROCESSOR: 'NOT TO BE USED FOR THE OTHER USE.' "<br /> 63717 IF JO = 2 THEN JO$ = " ON SAINSBURY PEANUTS: 'WARNING: CONTAINS NUTS.' "<br /> 63718 IF JO = 3 THEN JO$ = " ON BOOTS CHILDREN MEDICINE: 'DO NOT DRIVE CAR OR OPERATE MACHINERY.' "<br /> 63719 IF JO = 4 THEN JO$ = " ON A BAG OF FRITOS: 'YOU COULD BE A WINNER! NO PURCHASE NECCESARY. DETAILS INSIDE.' "<br /> 63720 IF JO = 5 THEN JO$ = " ANY MARRIED MAN SHOULD FORGET HIS MISTAKES. THERE'S NO POINT IN TWO PEOPLE REMEMBERING THE SAME THING. "<br /> 63721 IF JO = 6 THEN JO$ = " ALWAYS TAKE THE TIME TO SMELL THE ROSES...AND SOONER OR LATER YOU'LL INHALE A BEE. "<br /> 63722 IF JO = 7 THEN JO$ = " IF GENIUS IS 1% INSPIRATION AND 99% PERSPIRATION, THEN I MUST BE SHARING ELEVATORS WITH A LOT OF BRIGHT PEOPLE. "<br /> 63723 IF JO = 8 THEN JO$ = " IT'S ALWAYS DARKEST BEFORE DAWN..SO IF YOU'RE GOING TO STEAL THE NEIGHBOURS' NEWSPAPER, THAT'S THE TIME TO DO IT. "<br /> 63724 IF JO = 9 THEN JO$ = " IT TAKES FEWER MUSCLES TO SMILE THAN TO FROWN...BUT FEWER STILL TO IGNORE SOMEONE COMPLETELY. "<br /> 63725 IF JO = 10 THEN JO$ = " EAGLES MAY SOAR, BUT WEASLES DON'T GET SUCKED INTO JET ENGINES. "<br /> 63730 RETURN<br /> 63800 REM {EXIT TO PRODOS}<br /> 63805 HTAB 1: VTAB 1: PRINT " ARE YOU SURE YOU WANT TO EXIT TO PRODOS? (Y/N) ________________________________________"<br /> 63810 VTAB 3: HTAB 39: GET M$<br /> 63815 IF M$ = "Y" THEN GOTO 63835<br /> 63820 IF M$ = "N" THEN GOTO 63830<br /> 63825 GOTO 63800<br /> 63830 RETURN<br /> 63835 NORMAL : HOME : END<br /> 63900 REM {ERROR HANDLING}<br /> 63901 E = PEEK (222)<br /> 63902 IF E = 133 THEN GOSUB 63910<br /> 63903 IF E = 176 THEN GOSUB 63920<br /> 63904 IF E = 254 THEN GOSUB 63930<br /> 63905 IF E = 16 THEN GOSUB 63940<br /> 63906 IF E = 6 THEN GOSUB 63950<br /> 63907 IF E = 10 THEN GOSUB 63960<br /> 63908 GOSUB 63990: VTAB 23: HTAB 39: GET O$<br /> 63909 GOTO 20<br /> 63910 REM {DIVISION BY ZERO!?}<br /> 63912 VTAB 1: HTAB 1: PRINT " PLEASE, DON'T TRY TO DIVIDE SOMETHING BY ZERO. ________________________________________"<br /> 63914 RETURN<br /> 63920 REM {STRING TOO LONG}<br /> 63922 VTAB 1: HTAB 1: PRINT " THE APPLE HAS A LIMIT TO THE LENGTH OF STRINGS AND RESPONSES, YOU KNOW. ________________________________________"<br /> 63924 RETURN<br /> 63930 REM {FALSE RESPONSE}<br /> 63932 VTAB 1: HTAB 1: PRINT " YOU GAVE AN INVALID RESPONSE! BE SURE YOU TYPED WHAT WAS NEEDED. ________________________________________"<br /> 63934 RETURN<br /> 63940 REM {SYNTAX}<br /> 63942 VTAB 1: HTAB 1: PRINT " I DON'T KNOW WHAT YOU DID, BUT A SYNTAX ERROR OCCURED. ________________________________________"<br /> 63944 RETURN<br /> 63950 REM {FILE NOT FOUND}<br /> 63952 VTAB 1: HTAB 1: PRINT " THE FILE OR FOLDER YOU JUST REFERENCED TO WAS NOT FOUND! TRY TYPING THE FULL ADDRESS, OR CHECK IF IT REALLY EXISTS. ________________________________________"<br /> 63954 RETURN<br /> 63960 REM {WRITE PROTECTED}<br /> 63962 VTAB 1: HTAB 1: PRINT " THE FILE, DIRECTORY OR EVEN THE ENTIRE DISK IS WRITE-PROTECTED! PLEASE UNLOCK THE DISK OR FILES NEEDED. ________________________________________"<br /> 63964 RETURN<br /> 63990 FOR C = 1 TO 40<br /> 63991 X = PEEK ( - 16336)<br /> 63992 NEXT C<br /> 63993 RETURN<br />

Offline
Last seen: 9 years 1 month ago
Joined: Apr 10 2006 - 20:01
Posts: 1013
Re: No buffers available (repost)

You're out of memory. Page 11 pushed you over the limit to have any left for a disk buffer.
PRINT FRE(0)

Some other things to consider:

I think you mean RETURN here...
150 GOTO 40
I think you mean RETURN here...
300 IF M$ = "Y" THEN GOTO 40
This will leak memory on the stack, since you GOSUBBED to get here...
305 IF M$ = "N" THEN GOTO 20
There is no line number 0...
245 IF U$(1) = "Q" THEN GOTO 0
R$ is never defined...
59505 IF M$ = "1" AND M2$ = R$ THEN GOTO 3000
There is no line 4200 and beyond for other gotos in this section...
59517 IF M$ = "1" AND M2$ = "3" THEN GOTO 4200

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

You're out of memory. Page 11 pushed you over the limit to have any left for a disk buffer.
PRINT FRE(0)
Oh. And, what does PRINT FRE(0) do?

Some other things to consider:

I think you mean RETURN here...
150 GOTO 40
Right, thanks for pointing that.
I think you mean RETURN here...
300 IF M$ = "Y" THEN GOTO 40
Right, thanks for pointing that.
This will leak memory on the stack, since you GOSUBBED to get here...
305 IF M$ = "N" THEN GOTO 20
Then what should I replace it with?
There is no line number 0...
245 IF U$(1) = "Q" THEN GOTO 0
Right, thanks for pointing that.
R$ is never defined...
59505 IF M$ = "1" AND M2$ = R$ THEN GOTO 3000
T$ was originally R$. I thought maybe R$ was some reserved variable, and thus I changed it to T$. Didn't help.
There is no line 4200 and beyond for other gotos in this section...
59517 IF M$ = "1" AND M2$ = "3" THEN GOTO 4200
Line 4200 and beyond was supposed to be filled with pages 12 and over, but then I encountered this error and delayed the process.

Thanks for the quick reply. I hope I'm not bothering with these questions. Anyways, what should I do now? Chain the program?

Offline
Last seen: 9 years 1 month ago
Joined: Apr 10 2006 - 20:01
Posts: 1013
Re: No buffers available (repost)

Oh. And, what does PRINT FRE(0) do?

It shows you the number of bytes you have left. On a freshly booted (or NEW'd) machine, it will be larger than 32768, so it will appear negative. You'll have to add 65536 to the negative number in order to calculate the number of bytes left in that case.


This will leak memory on the stack, since you GOSUBbed to get here...
305 IF M$ = "N" THEN GOTO 20
Then what should I replace it with?

Well, you'll need to replace it with some program structure. You can't RETURN from a GOSUB to two different places. One possible solution is to set a return code from that subroutine and branch based on that return code's value.


Thanks for the quick reply. I hope I'm not bothering with these questions. Anyways, what should I do now? Chain the program?

No trouble. One possibility for overcoming this memory constraint is not cluttering your main logic with the help text. Pure text takes up much more room than tokenized BASIC statements, so memory gets chewed up quickly with that. You could instead save help text on disk as a file or multiple files, and read/print it when necessary. Another step is to take out all those giant sets of spaces that shift the text to a new line in the messages and instead put a CHR$(13) inline to get to a new line. You may need to take an extra step of clearing the message area (with a loop instead of literal spaces).

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

Oh. And, what does PRINT FRE(0) do?

It shows you the number of bytes you have left. On a freshly booted (or NEW'd) machine, it will be larger than 32768, so it will appear negative. You'll have to add 65536 to the negative number in order to calculate the number of bytes left in that case.


This will leak memory on the stack, since you GOSUBbed to get here...
305 IF M$ = "N" THEN GOTO 20
Then what should I replace it with?

Well, you'll need to replace it with some program structure. You can't RETURN from a GOSUB to two different places. One possible solution is to set a return code from that subroutine and branch based on that return code's value.
Then, I should do something like setting O$ to 1 if M$ is "N" and 0 if it's not, then later RETURNing and decide where to go based on O$?


Thanks for the quick reply. I hope I'm not bothering with these questions. Anyways, what should I do now? Chain the program?

No trouble. One possibility for overcoming this memory constraint is not cluttering your main logic with the help text. Pure text takes up much more room than tokenized BASIC statements, so memory gets chewed up quickly with that. You could instead save help text on disk as a file or multiple files, and read/print it when necessary. Another step is to take out all those giant sets of spaces that shift the text to a new line in the messages and instead put a CHR$(13) inline to get to a new line. You may need to take an extra step of clearing the message area (with a loop instead of literal spaces).
So, I print each help message into a text file. Then, in each page in the Grape Guide, I print out the corresponding texts from the file? For the loop part, should I use a FOR...NEXT loop to initially set VTAB to 1, clear the line and then use NEXT to change VTAB to the next line?

By the way, about the memory part, I thought all spaces in 0 to 63999 was usuable without any problems?

Offline
Last seen: 9 years 1 month ago
Joined: Apr 10 2006 - 20:01
Posts: 1013
Re: No buffers available (repost)

By the way, about the memory part, I thought all spaces in 0 to 63999 was usuable without any problems?

Oh, my, no. Not at all. That's a little like saying, "my checking account can't be overdrawn - I still have checks!" (If you're referring to BASIC line numbers).

You have about 36k of useable RAM in BASIC. Doesn't matter if your Apple II has 48, 64, or 128k. BASIC has 36k to work with, and that's all. If you pack a bunch of text on line #10, you'll use up memory much faster than if you have a numeric variable assignment. Once you use up your money - whether or not you have checks (line numbers) left - the bank stops cashing them.

Dog Cow's picture
Offline
Last seen: 5 years 7 months ago
Joined: Dec 11 2008 - 16:26
Posts: 554
Re: No buffers available (repost)

Oh. And, what does PRINT FRE(0) do?

It shows you the number of bytes you have left.

It also does garbage collection by removing unused strings from the Applesoft string storage area.

If you're running ProDOS, you get a patched version of FRE which is faster than the built-in ROM Applesoft routine.

Applesoft will run garbage collection on its own, but only if it runs out of memory to store a new string. If you get to this point, FRE will take a moment to run, causing a noticeable delay in program execution (though it's faster with ProDOS, as noted earlier). Applesoft strings are immutable, so every time you modify a string, you take up more memory. Running FRE periodically in a program that makes heavy use of strings helps avoid this unexpected long delay.

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

Alright then, I'll work on these changes. Thank you very much for the help.

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

I saved all the text into the text file correctly. However, if I try to read the text, it only prints all text from the start to the coma, and skips everything else inside that field. Is there a way for it to print the rest?

Or, should I use CHAIN to make Grapedesk run a program that saves needed text into variables and returns to Grapedesk?
From there, I could print out the text from the variable in the page.

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

Sorry about three consecutive replies. I just deleted the program that used the text file method (I have a habit of cleaning unused files up, and just remembered about the program). I now have Grapedesk, the CHAIN program, and an Applesoft program that sets the text into variables and returns. This set up is for the chaining method I mentioned earlier.

I have another problem now, though.

Here is the updated main program :
1 REM 0---------------0<br /> 2 REM | GRAPEDESK 1.2 |<br /> 3 REM 0---------------0<br /> 5 REM {INITIALIZING}<br /> 6 IF GG &lt; &gt; 0 THEN GOTO 59000<br /> 10 D$ = CHR$ (4)<br /> 11 R$ = CHR$ (13)<br /> 14 PRINT FRE (0)<br /> 15 DIM A(5)<br /> 16 DIM U$(12)<br /> 20 REM {SPLASH SCREEN}<br /> 25 HOME : INVERSE : PRINT " WELCOME TO GRAPEDESK 1.2 MADE BY SILENT FLAMER OF EMACULATION NO PATCHES CURRENTLY INSTALLED "<br /> 30 VTAB 6: PRINT " NEW USERS SHOULD THOROUGHLY READ THE GRAPE GUIDE BEFORE USING GRAPEDESK 1.2 "<br /> 32 VTAB 11: PRINT " "<br /> 34 VTAB 16: PRINT " A USERNAME AND PASSWORD IS CURRENTLY COMPULSORY. LOG INTO YOUR ACCOUNT OR TYPE 'NEW' TO CREATE A NEW ACCOUNT "<br /> 36 VTAB 21: PRINT " "<br /> 37 NORMAL<br /> 38 GOSUB 100<br /> 40 REM {MAIN MENU}<br /> 45 HOME : INVERSE : PRINT "GRAPEDESK 1.2 MAIN MENU"<br /> 50 NORMAL : PRINT " (1) DISK UTILITIES (2) APP SHORTCUTS (3) GRAPE GUIDE (4) EXIT TO PRODOS (D) DESK ACCESORIES "<br /> 55 PRINT " INSTRUCTIONS FOR INSTALING GRAPDESK 1.2 ON A DISK ARE PROVIDED INSIDE THE GRAPE GUIDE, WHICH ALSO CONTAINS OTHER USEFUL INFO. "<br /> 60 PRINT " CHECK OUT CYBERNATIONS, AN ONLINE GAME THAT LETS YOU GOVERN YOUR OWN NATION. "<br /> 65 GOSUB 63700<br /> 66 PRINT JO$<br /> 70 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 75 VTAB 23: HTAB 39: GET M$<br /> 80 IF M$ = "1" THEN GOTO 1000<br /> 81 IF M$ = "2" THEN GOTO 2000<br /> 82 IF M$ = "3" THEN GOTO 3000<br /> 83 IF M$ = "4" THEN GOSUB 63800<br /> 84 IF M$ = "D" THEN GOSUB 60000<br /> 85 GOTO 40<br /> 100 REM {USER &amp; PW}<br /> 105 VTAB 23: HTAB 1: INPUT " USERNAME : ";U$(1)<br /> 106 IF U$(1) = "NEW" THEN GOTO 200<br /> 107 IF U$(1) = "" THEN GOTO 58100: IF U$(1) = " " THEN GOTO 58100: IF U$(1) = "Q" THEN GOTO 58100<br /> 110 PRINT D$;"RENAME ";U$(1);",READING"<br /> 115 PRINT D$;"RENAME READING,";U$(1)<br /> 120 PRINT D$;"OPEN ";U$(1)<br /> 125 PRINT D$;"READ ";U$(1)<br /> 130 INPUT O$<br /> 131 INPUT U$(2)<br /> 135 PRINT D$;"CLOSE ";U$(1)<br /> 139 VTAB 23: HTAB 1: PRINT " "<br /> 140 VTAB 23: HTAB 1: INPUT " PASSWORD : ";I$<br /> 145 IF I$ &lt; &gt; U$(2) THEN GOTO 950<br /> 150 RETURN<br /> 200 REM {CREATE NEW USER}<br /> 205 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CREATE NEW USER"<br /> 210 NORMAL : PRINT " GRAPEDESK 1.2 HAS A USER AND PASSWORD SYSTEM THAT LETS YOU HAVE YOUR OWN USERNAME, PASSWORD AND A PERSONALIZED APPLICATION SHORTCUTS LIST. AN ACCOUNT "<br /> 215 VTAB 7: PRINT " MAY ALSO BE USED IN FUTURE PATCHES FOR DATA STORAGE. EACH USER ACCOUNT IS STORED IN A FILE AT THE SAME PREFIX (DIRECTORY) AS GRAPEDESK. DELETING "<br /> 220 VTAB 11: PRINT " ANOTHER USER'S ACCOUNT FILE WILL NOT HELP YOU ACCESS THEIR DATA, AS DOING SO DELETES ALL DATA AND NOT ONLY ITS PASSWORD. "<br /> 225 VTAB 16: PRINT " IF YOU'VE CHANGE YOUR MIND, TYPE 'Q' AT THE FOLLOWING PROMPT TO RETURN TO THE SPLASH SCREEN. ALSO NOTE THAT MAKING A NEW ACCOUNT UNDER THE SAME NAME AS ANOTHER OVERWRITES THE OLDER. "<br /> 230 VTAB 23: HTAB 39: GET O$<br /> 235 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CREATE NEW USER"<br /> 240 NORMAL : INPUT " THE NAME OF THE NEW USER IS ";U$(1)<br /> 245 IF U$(1) = "Q" THEN GOTO 5<br /> 249 PRINT<br /> 250 INPUT " AND THE PASSWORD OF THIS ACCOUNT IS ";U$(2)<br /> 251 PRINT<br /> 255 IF U$(2) = "Q" THEN GOTO 0<br /> 256 FOR C = 3 TO 12<br /> 257 U$(C) = "NONE"<br /> 258 NEXT C<br /> 260 PRINT D$;"OPEN ";U$(1)<br /> 261 PRINT D$;"CLOSE ";U$(1)<br /> 265 PRINT D$;"DELETE ";U$(1)<br /> 270 PRINT D$;"OPEN ";U$(1)<br /> 271 PRINT D$;"WRITE ";U$(1)<br /> 275 FOR C = 1 TO 12<br /> 280 PRINT U$(C)<br /> 281 NEXT C<br /> 285 PRINT D$;"CLOSE ";U$(1)<br /> 290 PRINT " THE USER ACCOUNT WAS SUCCESSFULLY CREATED! WOULD YOU LIKE TO LOG INTO IT RIGHT NOW? "<br /> 295 VTAB 10: HTAB 13: GET M$<br /> 300 IF M$ = 'Y" THEN RETURN<br /> 305 IF M$ = "N" THEN GOTO 20<br /> 310 GOTO 295<br /> 900 REM {USER NOT FOUND}<br /> 905 VTAB 1: HTAB 1: PRINT " THE USER THAT YOU TRIED TO LOG INTO WAS NOT FOUND! ________________________________________"<br /> 910 GOTO 100<br /> 950 REM {WRONG PASSWORD}<br /> 954 FOR C = 1 TO 40<br /> 955 GOSUB 63990<br /> 960 GOTO 100<br /> 1000 REM {DISK UTILITIES}<br /> 1005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 DISK UTILITIES"<br /> 1010 NORMAL : PRINT " (1) VIEW FILES (2) CHANGE DIRECTORY (3) RENAME FILE/FOLDER (4) DELETE FILE/FOLDER (5) CREATE FOLDER "<br /> 1015 VTAB 8: PRINT " <img src="https://www.applefritter.com/sites/all/modules/smiley/packs/kolobok/diablo.gif" alt="Diablo" /> LOCK FILE/FOLDER (7) UNLOCK FILE/FOLDER (8) RETURN TO MAIN MENU "<br /> 1020 GOSUB 63700<br /> 1025 PRINT JO$<br /> 1040 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 1045 VTAB 23: HTAB 39: GET M$<br /> 1050 IF M$ = "1" THEN GOTO 1100<br /> 1051 IF M$ = "2" THEN GOTO 1200<br /> 1052 IF M$ = "3" THEN GOTO 1300<br /> 1053 IF M$ = "4" THEN GOTO 1400<br /> 1054 IF M$ = "5" THEN GOTO 1500<br /> 1055 IF M$ = "6" THEN GOTO 1600<br /> 1056 IF M$ = "7" THEN GOTO 1700<br /> 1057 IF M$ = "8" THEN GOTO 40<br /> 1058 IF M$ = "D" THEN GOSUB 60000<br /> 1060 GOTO 1000<br /> 1100 REM {DU:VIEW FILES}<br /> 1105 HOME : INVERSE : PRINT "GRAPEDESK 1.2 VIEW FILES"<br /> 1110 NORMAL : PRINT D$;"CAT"<br /> 1115 VTAB 23: HTAB 39: GET O$<br /> 1120 GOTO 1000<br /> 1200 REM {DU:CHANGE DIRECTORY}<br /> 1205 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1210 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE DIRECTORY YOU WISH TO CHANGE TO IS ";I$<br /> 1215 PRINT D$;"PREFIX ";I$<br /> 1220 VTAB 1: HTAB 1: PRINT " CHANGE TO GIVEN DIRECTORY SUCCESSFUL. ________________________________________"<br /> 1225 VTAB 4: HTAB 39: GET O$<br /> 1230 GOTO 1000<br /> 1300 REM {DU:RENAME FILE\FOLDER}<br /> 1305 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1310 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO RENAME IS ";I$<br /> 1315 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1320 VTAB 2: HTAB 1: INPUT " THE NEW NAME OF THE FILE\FOLDER IS ";I2$<br /> 1325 PRINT D$;"RENAME ";I$;","I2$<br /> 1330 VTAB 1: HTAB 1: PRINT " RENAME OF FILE\FOLDER IS SUCCESSFUL. ________________________________________"<br /> 1335 VTAB 4: HTAB 39: GET O$<br /> 1340 GOTO 1000<br /> 1400 REM {DU:DELETE FILE\FOLDER}<br /> 1405 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1410 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE/FOLDER YOU WISH TO DELETE IS ";I$<br /> 1415 PRINT D$;"DELETE ";I$<br /> 1420 VTAB 1: HTAB 1: PRINT " DELETION OF THE FILE/FOLDER IS SUCCESSFUL. ________________________________________"<br /> 1425 VTAB 4: HTAB 39: GET O$<br /> 1430 GOTO 1000<br /> 1500 REM {DU:CREATE FOLDER}<br /> 1505 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1510 VTAB 2: HTAB 1: INPUT " THE NAME OF THE NEW FOLDER IS ";I$<br /> 1515 PRINT D$;"CREATE ";I$<br /> 1520 VTAB 1: HTAB 1: PRINT " FOLDER SUCCESSFULLY CREATED. ________________________________________"<br /> 1525 VTAB 4: HTAB 39: GET O$<br /> 1530 GOTO 1000<br /> 1600 REM {DU:LOCK FILE}<br /> 1605 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1610 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO LOCK IS ";I$<br /> 1615 PRINT D$;"LOCK ";I$<br /> 1620 VTAB 1: HTAB 1: PRINT " FILE\FOLDER SUCCESSFULLY LOCKED. ________________________________________"<br /> 1625 VTAB 4: HTAB 39: GET O$<br /> 1630 GOTO 1000<br /> 1700 REM {DU:UNLOCK FILE}<br /> 1705 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1710 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO UNLOCK IS ";I$<br /> 1715 PRINT D$;"UNLOCK ";I$<br /> 1720 VTAB 1: HTAB 1: PRINT " FILE\FOLDER SUCCESSFULLY UNLOCKED. ________________________________________"<br /> 1725 VTAB 4: HTAB 39: GET O$<br /> 1730 GOTO 1000<br /> 2000 REM {APP SHORTCUTS}<br /> 2005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 APPLICATION SHORTCUTS"<br /> 2006 PRINT D$;"OPEN ";U$(1)<br /> 2007 PRINT D$;"READ ";U$(1)<br /> 2008 FOR C = 1 TO 12<br /> 2009 INPUT U$(C)<br /> 2010 NEXT C<br /> 2011 PRINT D$;"CLOSE ";U$(1)<br /> 2012 NORMAL<br /> 2020 VTAB 3: PRINT " (1) ";U$(5)<br /> 2021 VTAB 4: PRINT " (2) ";U$(6)<br /> 2022 VTAB 5: PRINT " (3) ";U$(7)<br /> 2023 VTAB 6: PRINT " (4) ";U$(8)<br /> 2024 VTAB 7: PRINT " (5) ";U$(9)<br /> 2025 VTAB 8: PRINT " <img src="https://www.applefritter.com/sites/all/modules/smiley/packs/kolobok/diablo.gif" alt="Diablo" /> ";U$(10)<br /> 2026 VTAB 9: PRINT " (7) ";U$(11)<br /> 2027 VTAB 10: PRINT " (8) ";U$(12)<br /> 2028 VTAB 11: PRINT " (9) RETURN TO MAIN MENU "<br /> 2030 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 2035 VTAB 23: HTAB 39: GET M$<br /> 2040 IF M$ = "1" THEN GOTO 2100<br /> 2041 IF M$ = "2" THEN GOTO 2200<br /> 2042 IF M$ = "3" THEN GOTO 2300<br /> 2043 IF M$ = "4" THEN GOTO 2400<br /> 2044 IF M$ = "5" THEN GOTO 2500<br /> 2045 IF M$ = "6" THEN GOTO 2600<br /> 2046 IF M$ = "7" THEN GOTO 2700<br /> 2047 IF M$ = "8" THEN GOTO 2800<br /> 2050 IF M$ = "D" THEN GOSUB 60000<br /> 2055 IF M$ = "9" THEN GOTO 40<br /> 2060 GOTO 2000<br /> 2100 IF U$(5) = "NONE" THEN GOTO 2150<br /> 2105 VTAB 3: HTAB 39: GET M$<br /> 2110 IF M$ = "C" THEN GOTO 2140<br /> 2115 IF M$ = "R" THEN GOTO 2125<br /> 2120 GOTO 2000<br /> 2125 PRINT D$;"-";U$(5)<br /> 2140 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2142 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";I$<br /> 2143 U$(5) = I$<br /> 2144 GOSUB 2900<br /> 2146 GOTO 2000<br /> 2150 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2155 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(5)<br /> 2160 GOSUB 2900<br /> 2165 GOTO 2000<br /> 2200 IF U$(6) = "NONE" THEN GOTO 2250<br /> 2205 VTAB 4: HTAB 39: GET M$<br /> 2210 IF M$ = "C" THEN GOTO 2240<br /> 2215 IF M$ = "R" THEN GOTO 2225<br /> 2220 GOTO 2000<br /> 2225 PRINT D$;"RUN ";U$(6)<br /> 2240 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2242 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(6)<br /> 2244 GOSUB 2900<br /> 2246 GOTO 2000<br /> 2250 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2255 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(6)<br /> 2260 GOSUB 2900<br /> 2265 GOTO 2000<br /> 2300 IF U$(7) = "NONE" THEN GOTO 2350<br /> 2305 VTAB 5: HTAB 39: GET M$<br /> 2310 IF M$ = "C" THEN GOTO 2340<br /> 2315 IF M$ = "R" THEN GOTO 2325<br /> 2320 GOTO 2000<br /> 2325 PRINT D$;"-";U$(7)<br /> 2340 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2342 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(7)<br /> 2344 GOSUB 2900<br /> 2346 GOTO 2000<br /> 2350 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2355 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(7)<br /> 2360 GOSUB 2900<br /> 2365 GOTO 2000<br /> 2400 IF U$(8) = "NONE" THEN GOTO 2450<br /> 2405 VTAB 6: HTAB 39: GET M$<br /> 2410 IF M$ = "C" THEN GOTO 2440<br /> 2415 IF M$ = "R" THEN GOTO 2425<br /> 2420 GOTO 2000<br /> 2425 PRINT D$;"-";U$(8)<br /> 2440 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2442 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(8)<br /> 2444 GOSUB 2900<br /> 2446 GOTO 2000<br /> 2450 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2455 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(8)<br /> 2460 GOSUB 2900<br /> 2465 GOTO 2000<br /> 2500 IF U$(9) = "NONE" THEN GOTO 2550<br /> 2505 VTAB 7: HTAB 39: GET M$<br /> 2510 IF M$ = "C" THEN GOTO 2540<br /> 2515 IF M$ = "R" THEN GOTO 2525<br /> 2520 GOTO 2000<br /> 2525 PRINT D$;"-";U$(8)<br /> 2540 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2542 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(9)<br /> 2544 GOSUB 2900<br /> 2546 GOTO 2000<br /> 2550 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2555 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(9)<br /> 2560 GOSUB 2900<br /> 2565 GOTO 2000<br /> 2600 IF U$(10) = "NONE" THEN GOTO 2650<br /> 2605 VTAB 8: HTAB 39: GET M$<br /> 2610 IF M$ = "C" THEN GOTO 2640<br /> 2615 IF M$ = "R" THEN GOTO 2625<br /> 2620 GOTO 2000<br /> 2625 PRINT D$;"-";U$(10)<br /> 2640 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2642 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(10)<br /> 2644 GOSUB 2900<br /> 2646 GOTO 2000<br /> 2650 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2655 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(10)<br /> 2660 GOSUB 2900<br /> 2665 GOTO 2000<br /> 2700 IF U$(11) = "NONE" THEN GOTO 2750<br /> 2705 VTAB 9: HTAB 39: GET M$<br /> 2710 IF M$ = "C" THEN GOTO 2740<br /> 2715 IF M$ = "R" THEN GOTO 2725<br /> 2720 GOTO 2000<br /> 2725 PRINT D$;"-";U$(11)<br /> 2740 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2742 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(11)<br /> 2744 GOSUB 2900<br /> 2746 GOTO 2000<br /> 2750 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2755 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(11)<br /> 2760 GOSUB 2900<br /> 2765 GOTO 2000<br /> 2800 IF U$(12) = "NONE" THEN GOTO 2850<br /> 2805 VTAB 10: HTAB 39: GET M$<br /> 2810 IF M$ = "C" THEN GOTO 2840<br /> 2815 IF M$ = "R" THEN GOTO 2825<br /> 2820 GOTO 2000<br /> 2825 PRINT D$;"-";U$(12)<br /> 2840 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2842 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(12)<br /> 2844 GOSUB 2900<br /> 2846 GOTO 2000<br /> 2850 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2855 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(12)<br /> 2860 GOSUB 2900<br /> 2865 GOTO 2000<br /> 2900 REM {SAVE CHANGES}<br /> 2901 PRINT D$;"OPEN ";U$(1)<br /> 2902 PRINT D$;"CLOSE ";U$(1)<br /> 2903 PRINT D$;"DELETE ";U$(1)<br /> 2905 PRINT D$;"OPEN ";U$(1)<br /> 2910 PRINT D$;"WRITE ";U$(1)<br /> 2915 FOR C = 1 TO 12<br /> 2920 PRINT U$(C)<br /> 2925 NEXT C<br /> 2930 PRINT D$;"CLOSE ";U$(1)<br /> 2935 RETURN<br /> 3000 REM {GRAPE GUIDE}<br /> 3005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3010 GG = 1<br /> 3011 PRINT D$;"BLOAD CHAIN,A520"<br /> 3012 CALL 520"G.G.TEXT"<br /> 3015 NORMAL : PRINT GT$(0)<br /> 3020 VTAB 7: PRINT GT$(1)<br /> 3025 VTAB 12: PRINT GT$(2)<br /> 3030 VTAB 23: PRINT " [PAGE #1][INTRODUCTION] "<br /> 3035 VTAB 23: HTAB 26: GET M$<br /> 3036 VTAB 23: HTAB 26: GET M2$<br /> 3040 GOSUB 59500<br /> 3045 GOTO 3000<br /> 58100 HOME : END<br /> 59000 REM {WHICH PAGE TO RETURN TO?}<br /> 59500 REM {G.G. NAVIGATION}<br /> 59505 ON GG GOTO 3015,3115,3215,3315,3415,3515,3615,3715,3815,3915,4015,4115,4215,4315,4415,4515,4615,4715,4815,4915,5015,5115<br /> 59506 IF M$ = "2" AND M2$ = R$ THEN GOTO 3100<br /> 59507 IF M$ = "3" AND M2$ = R$ THEN GOTO 3200<br /> 59508 IF M$ = "4" AND M2$ = R$ THEN GOTO 3300<br /> 59509 IF M$ = "5" AND M2$ = R$ THEN GOTO 3400<br /> 59510 GOTO 10<br /> 59511 IF M$ = "7" AND M2$ = R$ THEN GOTO 3600<br /> 59512 IF M$ = "8" AND M2$ = R$ THEN GOTO 3700<br /> 59513 IF M$ = "9" AND M2$ = R$ THEN GOTO 3800<br /> 59514 IF M$ = "1" AND M2$ = "0" THEN GOTO 3900<br /> 59515 IF M$ = "1" AND M2$ = "1" THEN GOTO 4000<br /> 59516 IF M$ = "1" AND M2$ = "2" THEN GOTO 4100<br /> 59517 IF M$ = "1" AND M2$ = "3" THEN GOTO 4200<br /> 59518 IF M$ = "1" AND M2$ = "4" THEN GOTO 4300<br /> 59519 IF M$ = "1" AND M2$ = "5" THEN GOTO 4400<br /> 59520 IF M$ = "1" AND M2$ = "6" THEN GOTO 4500<br /> 59521 IF M$ = "1" AND M2$ = "7" THEN GOTO 4600<br /> 59522 IF M$ = "1" AND M2$ = "8" THEN GOTO 4700<br /> 59523 IF M$ = "1" AND M2$ = "9" THEN GOTO 4800<br /> 59524 IF M$ = "2" AND M2$ = "0" THEN GOTO 4900<br /> 59525 IF M$ = "2" AND M2$ = "1" THEN GOTO 5000<br /> 59526 IF M$ = "2" AND M2$ = "2" THEN GOTO 5100<br /> 59527 IF M$ = "2" AND M2$ = "3" THEN GOTO 5200<br /> 59597 IF M$ = "Q" THEN GOTO 40<br /> 59598 IF M$ = "D" THEN GOSUB 60000<br /> 59599 RETURN<br /> 59702 REM {OCEAN SCREENSAVER}<br /> 59704 GR<br /> 59706 POKE - 16302,0<br /> 59708 GOTO 59900<br /> 59710 COLOR= 15<br /> 59712 FOR C = 0 TO 9<br /> 59714 IF C &gt; 9 THEN GOTO 59750<br /> 59716 VLIN 36,47 AT C<br /> 59718 NEXT C<br /> 59750 REM {OCEAN}<br /> 59752 COLOR= 2<br /> 59754 FOR C = 10 TO 39<br /> 59756 IF C &gt; 39 THEN GOTO 59800<br /> 59758 VLIN 37,47 AT C<br /> 59760 NEXT C<br /> 59800 REM {SMALL WAVE}<br /> 59802 IF PEEK ( - 16384) &gt; 127 THEN GOTO 59950<br /> 59804 FOR X = 10 TO 39<br /> 59806 IF X &gt; 39 THEN GOTO 59850<br /> 59808 PLOT X,36<br /> 59810 FOR D = 1 TO 40<br /> 59812 NEXT D<br /> 59814 COLOR= 6<br /> 59816 PLOT X,36<br /> 59818 COLOR= 2<br /> 59820 NEXT X<br /> 59850 REM {DELAY &amp; BACK}<br /> 59852 IF PEEK ( - 16384) &gt; 127 THEN GOTO 59950<br /> 59854 FOR D = 1 TO 1000<br /> 59856 NEXT D<br /> 59858 X = X - 1<br /> 59860 IF X &lt; 10 THEN GOTO 59800<br /> 59862 PLOT X,36<br /> 59864 FOR D = 1 TO 40<br /> 59866 NEXT D<br /> 59868 COLOR= 6<br /> 59870 PLOT X,36<br /> 59872 COLOR= 2<br /> 59874 GOTO 59858<br /> 59900 REM {PAINT SKY}<br /> 59902 COLOR= 6<br /> 59904 FOR C = 0 TO 39<br /> 59906 IF C &gt; 39 THEN GOTO 59912<br /> 59908 VLIN 0,47 AT C<br /> 59910 NEXT C<br /> 59912 COLOR= 13<br /> 59914 PLOT 37,0: PLOT 38,0: PLOT 39,0: PLOT 37,1: PLOT 38,1: PLOT 39,1: PLOT 37,2: PLOT 38,2: PLOT 39,2<br /> 59916 GOTO 59710<br /> 59950 REM {KEY PRESSED}<br /> 59952 POKE - 16368,0<br /> 59954 TEXT : HOME<br /> 59956 RETURN<br /> 60000 REM {DESK ACCESORIES}<br /> 60005 HTAB 1: VTAB 1: PRINT " (1) CALCULATOR (2) RUN PROGRAM (3) MACHINE ID (4) SCREENSAVER "<br /> 60010 HTAB 1: VTAB 6: PRINT " AWAITING COMMAND. ________________________________________"<br /> 60015 HTAB 39: VTAB 7: GET M$<br /> 60020 IF M$ = "1" THEN GOTO 61000<br /> 60025 IF M$ = "2" THEN GOTO 62000<br /> 60030 IF M$ = "3" THEN GOTO 63000<br /> 60035 IF M$ = "4" THEN GOSUB 59702<br /> 60040 RETURN<br /> 61000 REM {CALCULATOR}<br /> 61001 FOR C = 1 TO 6<br /> 61002 N(C) = 0<br /> 61003 NEXT C<br /> 61005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CALCULATOR"<br /> 61010 NORMAL : PRINT " (1) ADDITION (2) SUBTRACTION (3) MULTIPLICATION (4) DIVISION ( ) RETURN TO PREVIOUS MENU "<br /> 61015 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 61020 VTAB 23: HTAB 39: GET M$<br /> 61025 IF M$ = "1" THEN GOTO 61100<br /> 61030 IF M$ = "2" THEN GOTO 61200<br /> 61035 IF M$ = "3" THEN GOTO 61300<br /> 61040 IF M$ = "4" THEN GOTO 61400<br /> 61050 GOTO 40<br /> 61100 REM {CALC:ADD}<br /> 61101 VTAB 9: HTAB 1: INPUT " WHAT'S THE FIRST NUMBER TO ADD? ";N(1)<br /> 61102 VTAB 9: PRINT " "<br /> 61103 N(6) = 0<br /> 61105 FOR C = 2 TO 6<br /> 61106 IF C &gt; 5 THEN GOTO 61180<br /> 61110 VTAB 9: INPUT " WHAT'S THE NEXT NUMBER TO ADD IN? TYPE 0 TO SUM UP ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61111 N(6) = N(1) + N(2) + N(3) + N(4) + N(5)<br /> 61115 IF N(C) = 0 THEN GOTO 61190<br /> 61130 NEXT C<br /> 61180 VTAB 9: PRINT " "<br /> 61182 VTAB 9: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE SUM FOR EVERYTHING IS ";N(6)<br /> 61183 HTAB 39: VTAB 23: GET O$<br /> 61185 GOTO 61196<br /> 61190 VTAB 9: PRINT " "<br /> 61192 VTAB 9: PRINT " ALRIGHT THEN. THE SUM FOR EVERYTHING SO FAR IS ";N(6)<br /> 61195 HTAB 39: VTAB 23: GET O$<br /> 61196 GOTO 61000<br /> 61200 REM {CALC:SUBTR}<br /> 61201 N(6) = 0<br /> 61205 VTAB 9: HTAB 1: INPUT " WHAT'S THE BIGGEST NUMBER? ";N(1)<br /> 61210 VTAB 9: PRINT " "<br /> 61215 FOR C = 2 TO 6<br /> 61220 IF C &gt; 5 THEN GOTO 61280<br /> 61225 VTAB 9: INPUT " WHAT'S THE NEXT NUMBER TO SUBTRACT FROM THE BIGGEST NUMBER? TYPE 0 TO SUBTRACT ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61226 N(6) = N(1) - N(2) - N(3) - N(4) - N(5)<br /> 61230 IF N(C) = 0 THEN GOTO 61290<br /> 61235 NEXT C<br /> 61280 VTAB 9: PRINT " "<br /> 61282 VTAB 9: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE FIRST NUMBER MINUS EVERYTHING ELSE IS ";N(6)<br /> 61284 VTAB 23: HTAB 39: GET O$<br /> 61286 GOTO 61000<br /> 61290 VTAB 9: PRINT " "<br /> 61292 VTAB 9: PRINT " ALRIGHT THEN. THE FIRST NUMBER MINUS EACH OTHER NUMBER IS ";N(6)<br /> 61294 VTAB 23: HTAB 39: GET O$<br /> 61296 GOTO 61000<br /> 61300 REM {CALC:MULTI}<br /> 61305 N(6) = 0<br /> 61310 VTAB 9: HTAB 1: INPUT " WHAT IS THE FIRST NUMBER TO MULTIPLY WITH? ";N(1)<br /> 61311 N(6) = N(1)<br /> 61315 FOR C = 2 TO 6<br /> 61320 IF C &gt; 5 THEN GOTO 61390<br /> 61325 VTAB 9: HTAB 1: INPUT " WHAT IS THE NEXT NUMBER TO MULTIPLY WITH? TYPE 0 TO MULTIPLY ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61330 IF N(C) = 0 THEN GOTO 61380<br /> 61335 N(6) = N(6) * N(C)<br /> 61340 NEXT C<br /> 61380 VTAB 9: HTAB 1: PRINT " "<br /> 61382 VTAB 9: HTAB 1: PRINT " ALRIGHT THEN. THE PRODUCT OF ALL THE NUMBERS WE HAVE SO FAR IS ";N(6)<br /> 61384 HTAB 39: VTAB 23: GET O$<br /> 61386 GOTO 61000<br /> 61390 VTAB 9: HTAB 1: PRINT " "<br /> 61392 VTAB 9: HTAB 1: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE PRODUCT OF ALL THE NUMBERS SO FAR IS ";N(6)<br /> 61394 HTAB 39: VTAB 23: GET O$<br /> 61396 GOTO 61000<br /> 61400 REM {CALC:DIVISION}<br /> 61405 N(6) = 0<br /> 61410 VTAB 9: HTAB 1: INPUT " WHAT IS THE FIRST NUMBER TO DIVIDE EVERYTHING ELSE WITH? ";N(1)<br /> 61415 N(6) = N(1)<br /> 61420 FOR C = 2 TO 6<br /> 61425 IF C &gt; 5 THEN GOTO 61490<br /> 61430 VTAB 9: HTAB 1: INPUT " WHAT IS THE NEXT NUMBER TO BE DIVIDED BY THE FIRST NUMBER? TYPE 0 TO DIVIDE ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61435 IF N(C) = 0 THEN GOTO 61480<br /> 61440 N(6) = N(6) / N(C)<br /> 61445 NEXT C<br /> 61480 VTAB 9: HTAB 1: PRINT " "<br /> 61482 VTAB 9: HTAB 1: PRINT " ALRIGHT THEN. THE FIRST NUMBER DIVIDED BY THE OTHERS, ONE BY ONE IS ";N(6)<br /> 61484 HTAB 39: VTAB 23: GET O$<br /> 61486 GOTO 61000<br /> 61490 VTAB 9: HTAB 1: PRINT " "<br /> 61492 VTAB 9: HTAB 1: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE FIRST NUMBER DIVIDED BY EVERYTHING ELSE, ONE BY ONE IS ";N(6)<br /> 61494 HTAB 39: VTAB 23: GET O$<br /> 61496 GOTO 61000<br /> 62000 REM {RUN PROGRAM}<br /> 62005 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 62010 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE THAT YOU WISH TO RUN IS ";I$<br /> 62011 IF I$ = "" THEN GOTO RETURN<br /> 62015 PRINT D$;"-";I$<br /> 62020 GOTO 40<br /> 63000 REM {ABOUT THIS APPLE}<br /> 63003 TEXT : PRINT CHR$ (21): HOME<br /> 63004 INVERSE : PRINT "GRAPEDESK 1.2 ABOUT THIS APPLE"<br /> 63005 NORMAL :LOC = 49048: PRINT "MACHINE ID BYTE:"LOC" ($BF98)"<br /> 63010 P = PEEK (LOC): PRINT " VALUE:"P" ($";:P1 = P - INT (P / 16) * 16:P2 = INT (P / 16): PRINT CHR$ (P2 + 48 + 7 * (P2 &gt; 9)) CHR$ (P1 + 48 + 7 * (P1 &gt; 9))")"<br /> 63015 PRINT " BITS:";: FOR I = 1 TO 8:BIT(I) = P - INT (P / 2) * 2: HTAB 18 - I - (I &gt; 4): PRINT BIT(I);:P = INT (P / 2): NEXT : PRINT : PRINT : REM BIT#1.ON.RIGHT/BIT#8.ON.LEFT 25 TYPE = 4 * BIT(8) + 2 * BIT(7) + BIT(4):APL$(0) = "II+"<br /> 63020 K = 2 * BIT(6) + BIT(5):MEM(1) = 48:MEM(2) = 64:MEM(3) = 128<br /> 63025 HUH$(0) = "NO":HUH$(1) = "YES"<br /> 63030 IF TYPE &lt; &gt; 4 AND TYPE &lt; &gt; 5 THEN 63050<br /> 63035 PRINT "THIS IS AN APPLE "APL$(TYPE)" WITH "MEM(K)"K."<br /> 63040 PRINT " CLOCK:"HUH$(BIT(1))<br /> 63045 PRINT " 80-COLUMNS:"HUH$(BIT(2))<br /> 63050 PRINT<br /> 63055 PRINT "POSSIBLE SLOT CONTENTS:"<br /> 63060 FOR SLOT = 1 TO 7: REM NO, YOU CAN'T PEEK AT SLOT 0!<br /> 63065 LOC = 49152 + 256 * SL:A$ = ""<br /> 63070 IF PEEK (LOC + 23) = 201 AND PEEK (LOC + 55) = 207 AND PEEK (LOC + 76) = 234 THEN A$ = "SILENTYPE": GOTO 600<br /> 63075 IF PEEK (LOC) = 8 AND PEEK (LOC + 1) = 120 AND PEEK (LOC + 2) = 40 THEN A$ = "CLOCK": GOTO 600<br /> 63080 IF PEEK (LOC + 5) = 24 AND PEEK (LOC + 7) = 24 THEN A$ = "COMMUNICATIONS CARD": GOTO 600<br /> 63085 IF PEEK (LOC + 5) = 56 AND PEEK (LOC + 7) = 24 THEN A$ = "SERIAL CARD"<br /> 63090 IF PEEK (LOC + 11) = 1 THEN I = INT ( PEEK (LOC + 12) / 16): IF I &lt; 10 THEN I = I + 1: RESTORE : FOR J = 1 TO I: READ A$: NEXT : GOTO 63105<br /> 63095 DATA USED,PRINTER,JOYSTICK,I/O CARD,MODEM,AUDIO CARD,CLOCK,MASS STORAGE,80-COLUMN CARD,NETWORK CARD<br /> 63100 IF PEEK (LOC + 5) = 72 AND PEEK (LOC + 7) = 72 THEN A$ = "PARALLEL CARD"<br /> 63105 FOR J = 48946 TO 48946 + PEEK (48945):P = PEEK (J): IF P &gt; 127 THEN P = P - 128<br /> 63110 IF P &lt; 16 * SL THEN 63130<br /> 63115 DR = P - 16 * SL<br /> 63120 IF DR = 4 THEN A$ = "PROFILE"<br /> 63125 IF DR = 0 THEN A$ = "DISK DRIVE"<br /> 63130 NEXT J<br /> 63135 PRINT " SLOT "SL": ";: IF LEN (A$) THEN PRINT A$<br /> 63140 IF NOT LEN (A$) THEN PRINT "EMPTY?"<br /> 63145 NEXT SL<br /> 63150 PRINT CHR$ (4)"PREFIX": INPUT A$: PRINT "CURRENT PREFIX: "A$<br /> 63155 PRINT "LAST USED SLOT: " PEEK (48700): PRINT "LAST USED DRIVE: " PEEK (48701)<br /> 63160 VTAB 23: HTAB 39: GET O$<br /> 63170 GOTO 40<br /> 63700 REM {RANDOM JOKE}<br /> 63705 JO = RND (1) * 10<br /> 63710 JO = INT (JO)<br /> 63715 IF JO = 0 THEN JO$ = " ON A SWEDISH CHAINSAW: 'DO NOT ATTEMPT TO STOP CHAIN WITH YOUR HANDS.' "<br /> 63716 IF JO = 1 THEN JO$ = " ON A JAPANESE FOOD PROCESSOR: 'NOT TO BE USED FOR THE OTHER USE.' "<br /> 63717 IF JO = 2 THEN JO$ = " ON SAINSBURY PEANUTS: 'WARNING: CONTAINS NUTS.' "<br /> 63718 IF JO = 3 THEN JO$ = " ON BOOTS CHILDREN MEDICINE: 'DO NOT DRIVE CAR OR OPERATE MACHINERY.' "<br /> 63719 IF JO = 4 THEN JO$ = " ON A BAG OF FRITOS: 'YOU COULD BE A WINNER! NO PURCHASE NECCESARY. DETAILS INSIDE.' "<br /> 63720 IF JO = 5 THEN JO$ = " ANY MARRIED MAN SHOULD FORGET HIS MISTAKES. THERE'S NO POINT IN TWO PEOPLE REMEMBERING THE SAME THING. "<br /> 63721 IF JO = 6 THEN JO$ = " ALWAYS TAKE THE TIME TO SMELL THE ROSES...AND SOONER OR LATER YOU'LL INHALE A BEE. "<br /> 63722 IF JO = 7 THEN JO$ = " IF GENIUS IS 1% INSPIRATION AND 99% PERSPIRATION, THEN I MUST BE SHARING ELEVATORS WITH A LOT OF BRIGHT PEOPLE. "<br /> 63723 IF JO = 8 THEN JO$ = " IT'S ALWAYS DARKEST BEFORE DAWN..SO IF YOU'RE GOING TO STEAL THE NEIGHBOURS' NEWSPAPER, THAT'S THE TIME TO DO IT. "<br /> 63724 IF JO = 9 THEN JO$ = " IT TAKES FEWER MUSCLES TO SMILE THAN TO FROWN...BUT FEWER STILL TO IGNORE SOMEONE COMPLETELY. "<br /> 63725 IF JO = 10 THEN JO$ = " EAGLES MAY SOAR, BUT WEASLES DON'T GET SUCKED INTO JET ENGINES. "<br /> 63730 RETURN<br /> 63800 REM {EXIT TO PRODOS}<br /> 63805 HTAB 1: VTAB 1: PRINT " ARE YOU SURE YOU WANT TO EXIT TO PRODOS? (Y/N) ________________________________________"<br /> 63810 VTAB 3: HTAB 39: GET M$<br /> 63815 IF M$ = "Y" THEN GOTO 63835<br /> 63820 IF M$ = "N" THEN GOTO 63830<br /> 63825 GOTO 63800<br /> 63830 RETURN<br /> 63835 NORMAL : HOME : END<br /> 63900 REM {ERROR HANDLING}<br /> 63901 E = PEEK (222)<br /> 63902 IF E = 133 THEN GOSUB 63910<br /> 63903 IF E = 176 THEN GOSUB 63920<br /> 63904 IF E = 254 THEN GOSUB 63930<br /> 63905 IF E = 16 THEN GOSUB 63940<br /> 63906 IF E = 6 THEN GOSUB 63950<br /> 63907 IF E = 10 THEN GOSUB 63960<br /> 63908 GOSUB 63990: VTAB 23: HTAB 39: GET O$<br /> 63909 GOTO 20<br /> 63910 REM {DIVISION BY ZERO!?}<br /> 63912 VTAB 1: HTAB 1: PRINT " PLEASE, DON'T TRY TO DIVIDE SOMETHING BY ZERO. ________________________________________"<br /> 63914 RETURN<br /> 63920 REM {STRING TOO LONG}<br /> 63922 VTAB 1: HTAB 1: PRINT " THE APPLE HAS A LIMIT TO THE LENGTH OF STRINGS AND RESPONSES, YOU KNOW. ________________________________________"<br /> 63924 RETURN<br /> 63930 REM {FALSE RESPONSE}<br /> 63932 VTAB 1: HTAB 1: PRINT " YOU GAVE AN INVALID RESPONSE! BE SURE YOU TYPED WHAT WAS NEEDED. ________________________________________"<br /> 63934 RETURN<br /> 63940 REM {SYNTAX}<br /> 63942 VTAB 1: HTAB 1: PRINT " I DON'T KNOW WHAT YOU DID, BUT A SYNTAX ERROR OCCURED. ________________________________________"<br /> 63944 RETURN<br /> 63950 REM {FILE NOT FOUND}<br /> 63952 VTAB 1: HTAB 1: PRINT " THE FILE OR FOLDER YOU JUST REFERENCED TO WAS NOT FOUND! TRY TYPING THE FULL ADDRESS, OR CHECK IF IT REALLY EXISTS. ________________________________________"<br /> 63954 RETURN<br /> 63960 REM {WRITE PROTECTED}<br /> 63962 VTAB 1: HTAB 1: PRINT " THE FILE, DIRECTORY OR EVEN THE ENTIRE DISK IS WRITE-PROTECTED! PLEASE UNLOCK THE DISK OR FILES NEEDED. ________________________________________"<br /> 63964 RETURN<br /> 63990 FOR C = 1 TO 40<br /> 63991 X = PEEK ( - 16336)<br /> 63992 NEXT C<br /> 63993 RETURN<br />

Here is the seperate program that sets the guide text into variables and returns :
1 IF GG &lt; &gt; 0 THEN GOTO GOTO 400<br /> 2 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3 NORMAL : PRINT " THIS PROGRAM STORES ALL THE TEXT FOR USE IN THE GRAPE GUIDE, AND SHOULD NOT BE RUN BY ITSELF.<br /> 4 VTAB 23: HTAB 39: GET O$<br /> 5 HOME : END<br /> 10 REM {GET CONTENTS OF GRAPE GUIDE)<br /> 15 D$ = CHR$ (4)<br /> 29 REM {PAGE 1}<br /> 30 GT$(0) = " GOOD DAY, AND THANK YOU FOR GIVING A TRY AT GRAPEDESK 1.2. THIS VERSION WAS INTENDED TO BE MUCH MORE USEFUL THAN ITS PREDECESSORS, AND IT HAS INDEED "<br /> 35 GT$(1) = " BECOME SO. INSTEAD OF GIVING A RICH TEXT MANUAL, I HAVE DECIDED TO TYPE IN ALL DOCUMENTATION IN THE GRAPE GUIDE THIS TIME. EACH FEATURE IN THE PROGRAM WILL BE EXPLAINED IN DETAIL. THE "<br /> 40 GT$(2)" CONTENTS ARE LISTED IN THE NEXT PAGE, SO TYPE '2' AND HIT RETURN. ALSO, I WOULD BE GRATEFUL IF YOU WOULD SIGN UP FOR THE 'VALHALLA HOME SERVICES' BBS, BY TELNET AT 'VALHALLA.SYNCHRO.NET'. "<br /> 42 PRINT D$;"BLOAD CHAIN,A520"<br /> 43 CALL 520"GRAPEDESK"<br /> 44 REM {PAGE 2}<br /> 45 GT$(0) = " {PAGE 1} INTRODUCTION {PAGE 2} CONTENTS {PAGE 3-10} DISK UTILITIES {PAGE 4} CHANGES {PAGE 4-11} DISK UTILITIES "<br /> 50 GT$(1) = " {PAGE 12} APP. SHO. LIST {PAGE 13} GRAPE GUIDE {PAGE 14-18} DESK ACCESORIES {PAGE 19} ACCOUNT SYSTEM {PAGE 20} MODS AND PATCHES "<br /> 55 GT$(2) = " {PAGE 21} ERROR HANDLING {PAGE 22} OTHER MESSAGES "<br /> 60 GT$(3) = ""<br /> 62 PRINT D$;"BLOAD CHAIN,A520"<br /> 63 CALL 520"GRAPEDESK"<br /> 64 REM {PAGE 3}<br /> 65 GT$(0) = " GRAPEDESK 1.2 IS SIMILLAR TO ITS PRE- DECCESORS. DISK UTILITIES, AN APPLI- CATIONS SHORTCUT LIST, THE GRAPE GUIDE AND THE DESK ACCESORIES WERE AROUND IN PREVIOUS VERSIONS. HOWEVER, THERE ARE "<br /> 70 GT$(1) = " CHANGES; THE UPDATED APPLICATIONS SHORTCUT LIST (CHANGES LISTED ON ITS PAGE), AN INCREDIBLY SIMPLE SCREEN- SAVER, ERROR HANDLING, UPDATED CALCU- LATOR (CHANGES ON ITS PAGE), A RANDOM "<br /> 75 GT$(2) = " JOKE IN THE MAIN AND DISK UTILITIES MENU, THE LARGER GRAPE GUIDE, HAVING MACHINE.ID INTEGRATED AND A SETUP PROGRAM (EXPLAINED LATER IN THE GUIDE. "<br /> 77 PRINT D$;"BLOAD CHAIN,A520"<br /> 78 CALL 520"GRAPEDESK"<br /> 79 REM {PAGE 4}<br /> 80 GT$(0) = " THE DISK UTILITIES MENU HOUSES MOST OF THE FUNCTIONS THAT HANDLES FILES IN THE DISK. THE MENU GREW FROM 3 FUNC- TIONS IN THE BETA TO TODAY'S 7. EACH HAVE THEIR OWN PAGE IN THE GUIDE. "<br /> 85 GT$(1) = " THE SEVEN FUNCTIONS ARE 'VIEW FILES', 'CHANGE DIRECTORY', 'RENAME FILE/ FOLDER', 'CREATE FOLDER', 'LOCK FILE/ FOLDER' AND 'UNLOCK FILE/FOLDER'. IF YOU WISH TO USE FUNCTIONS NOT LISTED, "<br /> 90 GT$(2) = " YOU WOULD HAVE TO EXIT TO PRODOS AND DO THOSE MANUALLY. ALSO, GIVING A FALSE RESPONSE UNLEASHES AN ERROR (ERRORS ARE EXPLAINED ON THEIR OWN PAGE. "<br /> 92 PRINT D$;"BLOAD CHAIN,A520"<br /> 93 CALL 520"GRAPEDESK"<br /> 94 REM {PAGE 5}<br /> 95 T$(0) = " THE FIRST DISK UTILITY MADE AND ALSO THE FIRST IN THE LIST IS 'VIEW FILES', A.K.A. 'CATALOG CURRENT PREFIX' IN THE BETA, 'CATALOG PREFIX' IN V1.0 &amp; ALSO CALLED 'VIEW FILES' IN V1.1. "<br /> 100 GT$(1) = " IT IS THE EQUIVALENT OF CAT IN PRODOS. IT LISTS ALL THE FILES IN THE CURRENT PREFIX. THERE ARE NO KNOW BUGS, BUT IF YOUR CATALOG IS OVER A PAGE LONG, A "<br /> 105 GT$(2) = " BLINKING CURSOR WILL BE NEAR THE BOTTOM RIGHT CORNER (DUE TO HOW THE CODE WAS WRITTEN). "<br /> 107 PRINT D$;"BLOAD CHAIN,A520"<br /> 108 CALL 520"GRAPEDESK"<br /> 109 REM {PAGE 6}<br /> 110 GT$(0) = " THE SECOND IN THE LIST IS 'CHANGE DIR- ECTORY', A.K.A. 'CHANGE PREFIX' IN THE PREVIOUS VERSIONS. IT IS THE EQUIVAL- ENT OF 'PREFIX' IN PRODOS. "<br /> 115 GT$(1) = " IT CHANGES THE CURRENT PREFIX TO THE ONE GIVEN BY THE USER. IF THE NEW PRE- FIX IS IN THE CURRENT ONE, SIMPLY THE NAME CAN BE GIVEN. A FULL ADDRESS HAS TO BE GIVEN IF IT IS NOT. "<br /> 117 PRINT D$;"BLOAD CHAIN,A520"<br /> 118 CALL 520"GRAPEDESK"<br /> 119 REM {PAGE 7}<br /> 120 GT$(0) = " THE THIRD IN THE LIST IS 'RENAME FILE/ FOLDER'. IT IS NEW IN THE GRAPEDESK SERIES. ITS PRODOS EQUIVALENT IS 'REN- AME'. "<br /> 125 GT$(1) = " IT RENAMES A FILE OR FOLDER STATED BY THE USER TO THE NAME GIVEN. THE NAME CAN BE GIVEN IF THE FILE/FOLDER IS IN THE CURRENT DIRECTORY, OR A FULL ADD- RESS IF OTHERWISE. "<br /> 127 PRINT D$;"BLOAD CHAIN,A520"<br /> 128 CALL 520"GRAPEDESK"<br /> 129 REM {PAGE 8}<br /> 130 GT$(0) = " THE FOURTH IN THE LIST IS 'DELETE FILE/FOLDER', A.K.A. 'DELETE FILES/FO- LDERS' IN THE BETA, 'DELETE FILES' IN V1.0 AND 'DELETE FILE' IN V1.1. IT IS THE EQUIVALENT OF 'DELETE' IN PRODOS. "<br /> 135 GT$(1) = " IT DELETES THE FILE GIVEN BY THE USER. SAME RULES APPLY ABOUT GIVING EITHER THE NAME OR THE FULL ADDRESS. "<br /> 137 PRINT D$;"BLOAD CHAIN,A520"<br /> 138 CALL 520"GRAPEDESK"<br /> 139 REM {PAGE 9}<br /> 140 GT$(0) = " THE FIFTH FUNCTION IS 'CREATE FOLDER', A.K.A. THE SAME IN V1.0 BUT 'CREATE DIR' IN V1.1. IT IS THE EQUIVALENT OF 'CREATE' IN PRODOS. "<br /> 145 GT$(1) = " IT CREATES A FOLDER IN THE CURRENT PREFIX WITH THE NAME GIVEN BY THE USER. IF AN INVALID FILENAME IS GIVEN, AN ERROR IS UNLEASHED. "<br /> 147 PRINT D$;"BLOAD CHAIN,A520"<br /> 148 CALL 520"GRAPEDESK"<br /> 149 REM {PAGE 10}<br /> 150 GT$(0) = " THE SIXTH FUNCTION IS 'LOCK FILE/FOL- DER', A.K.A. 'LOCK FILES' I V1.1. IT IS THE EQUIVALENT OF 'LOCK' IN PRODOS. "<br /> 155 GT$(1) = " IT LOCKS THE FILE/FOLDER STATED BY THE USER. SAME RULE APPLIES ABOUT WHETHER TO GIVE SIMPLY THE NAME OR THE FULL ADDRESS. "<br /> 157 PRINT D$;"BLOAD CHAIN,A520"<br /> 158 CALL 520"GRAPEDESK"<br /> 159 REM {PAGE 11}<br /> 160 GT$(0) = " THE LAST FUNCTION IS 'UNLOCK FILE/FOL- DER', A.K.A. 'UNLOCK FILE' IN V1.1. IT IS THE EQUIVALENT OF 'UNLOCK' IN PRO- DOS. "<br /> 165 GT$(1) = " IT UNLOCKS A LOCKED FILE STATED BY THE USER. SAME RULES APPLY ABOUT WHETHER TO GIVE SIMPLY A NAME OR THE FULL ADD- RESS. "<br /> 167 PRINT D$;"BLOAD CHAIN,A520"<br /> 168 CALL 520"GRAPEDESK"<br /> 169 REM {PAGE 12}<br /> 170 GT$(0) = " THE NEW APPLICATIONS SHORTCUT LIST IS DIFFERENT FROM ITS PREVIOUS COUNTER- PARTS. BEFORE, TO CUSTOMIZE THE LIST, ONE WOULD HAVE TO EDIT THE CODE. NOW, ALL OF THE EIGHT SLOTS CAN BE MODIFIED "<br /> 175 GT$(1) = " INSIDE GRAPEDESK ITSELF, AND THE ADD- RESSES ARE SAVED INSIDE THE ACCOUNT FILE. AT THE LIST, PRESS THE NUMBER OF THE SLOT YOU WOULD LIKE TO USE, THEN TYPE 'R' TO RUN IT OR 'C' TO CHANGE "<br /> 180 GT$(2) = " ITS CONTENTS. ONE CAN CLEAR IT BY TYP- ING 'EMPTY'. IF THE SLOT IS EMPTY, A DIALOG AUTOMATICALLY APPEARS, ASKING FOR THE NEW ADDRESS. "<br /> 182 PRINT D$;"BLOAD CHAIN,A520"<br /> 183 CALL 520"GRAPEDESK"<br /> 184 REM {PAGE 13}<br /> 185 GT$(0) = " THIS NEW GRAPE GUIDE IS MUCH MORE LAR- GER AND COMPREHENSIVE THAN ITS PREDE- CCESORS. EACH FUNCTION OF GRAPEDESK HAS ITS OWN PAGE IN THE GUIDE. "<br /> 190 GT$(1) = " TO ACCESS PAGES 1-9, TYPE THE PAGE NUMBER AND HIT RETURN. TO ACCESS PAGES 10 AND ABOVE, TYPE BOTH NUMBERS WITH- OUT HITTING RETURN. FOR EXAMPLE, TO ACCESS PAGE 3, TYPE '3' &amp; HIT RETURN. "<br /> 195 GT$(2) = " TO ACCESS PAGE 13, TYPE '1' AND THEN '3' (DON'T HIT RETURN!). DESK ACCESOR- IES ARE STILL ACCESIBLE WITH D, AND YOU MAY TYPE 'Q' TO RETURN TO THE MAIN MENU. "<br /> 197 PRINT D$;"BLOAD CHAIN,A520"<br /> 198 CALL 520"GRAPEDESK"<br /> 199 REM {PAGE 14}<br /> 200 GT$(0) = " THE DESK ACCESORIES ARE A SET OF SMALL PROGRAMS. IT WAS PRESENT IN THE BETA (ALTHOUGH IT WAS MORE OF A MENU SINCE IT WAS ONLY ACCESIBLE FROM THE MAIN MENU). IT ADOPTED ITS PROPER FORM IN "<br /> 205 GT$(1) = " V1.0, WHERE IT CAN BE ACCESED IN MOST PROMPTS (INCLUDING THE GRAPE GUIDE). FROM ONLY TWO IN THE BETA (THE CALCUL- ATOR AND APPLE I.D.), IT HAS EVOLVED INTO TODAY'S 4; AN UPDATED CALCULATOR, "<br /> 210 GT$(2) = " A QUICK WAY TO RUN ANOTHER PROGRAM, MACHINE I.D. (PREVIOUSLY APPLE I.D.) &amp; A PLAIN, BLOCKY SCREENSAVER SHOWING AN OCEAN, THROWING WAVES AT THE HARBOR. "<br /> 212 PRINT D$;"BLOAD CHAIN,A520"<br /> 213 CALL 520"GRAPEDESK"<br /> 214 REM {PAGE 15}<br /> 215 GT$(0) = " THE FIRST AND MOST USEFUL DESK ACCES- ORY IS THE CALCULATOR. IT HAS THE SAME 4 FUNCTIONS OF THE BETA (I ATTEMPTED TO MAKE A FUNCTION FOR CUSTOM EQUAT- IONS, BUT IT DIDN'T MAKE IT). HOWEVER, "<br /> 220 GT$(1) = " IT NOW CAN CALCULATE UP TO 5 NUMBERS IN ONE FUNCTION, UNLIKE THE PREVIOUS VERSIONS WHICH CAN ONLY CALCULATE TWO. THE DIALOGS FOR THE FOUR FUNCTIONS; ADDITION, SUBTRACTION, MULTIPLICATION "<br /> 225 GT$(2) = " AND DIVISION; SHOULD BE SELF-EXPLANOT- ORY. "<br /> 227 PRINT D$;"BLOAD CHAIN,A520"<br /> 228 CALL 520"GRAPEDESK"<br /> 229 REM {PAGE 16}<br /> 230 GT$(0) = " THE SECOND IN LINE IS 'RUN PROGRAM'. IT RUNS ANY PROGRAM STATED BY THE USER. SAME RULES APPLY ABOUT WHETHER TO GIVE SIMPLY A NAME OR THE FULL ADD- REES. IT IS CONVINIENT AS IT IS IN THE "<br /> 235 GT$(1) = " DESK ACCESORIES MENU. "<br /> 237 PRINT D$;"BLOAD CHAIN,A520"<br /> 238 CALL 520"GRAPEDESK"<br /> 239 REM {PAGE 17}<br /> 240 GT$(0) = " THE THIRD IS 'MACHINE I.D.'. IT WAS CALLED 'APPLE I.D.' IN THE BETA. IT LISTS ALOT OF COOL INFORMATION ABOUT THE APPLE. I ACTUALLY COPIED THE PRO- GRAM OFF A DISK IMAGE FROM ASIMOV. "<br /> 245 GT$(1) = " I WANTED TO GIVE CREDIT TO THE AUTHOR FOR THIS USEFUL PROGRAM, BUT I FORGOT WHERE I GOT IT FROM. EITHER WAY, I EX- PRESS MY GRATITUDE AND GIVE CREDIT TO WHOEVER THE AUTHOR IS. I USE THE TEXT "<br /> 250 GT$(2) = " FILE TRICK TO INTEGRATE THE PROGRAM CODE INTO GRAPEDESK. "<br /> 252 PRINT D$;"BLOAD CHAIN,A520"<br /> 253 CALL 520"GRAPEDESK"<br /> 254 REM {PAGE 18}<br /> 255 GT$(0) = " THE LAST DESK ACCESORY IS THE OCEAN SCREENSAVER. I MADE IT MYSELF. IT IS INCREDIBLY SIMPLE TO MAKE, BUT INEVIT- ABLY VERY POOR ON GRAPHICS AS WELL. IT PORTRAYS AN EMPTY STONE HARBOR, UNDER "<br /> 260 GT$(1) = " THE SUN, PUSHING BACK WAVES COMING FROM THE OCEAN. IT DOES FIT IN IF THE COLORS OF THE SCREENSAVER MATCH THE COLORS OF YOUR ROOM. "<br /> 264 REM {PAGE 19}<br /> 265 GT$(0) = " THE ACCOUNT SYSTEM WAS ACTUALLY INSTA- LLED IN V1.0, BUT WAS DISABLED BY DE- FAULT. IT FIRST ASKED THE USER TO LOG IN AT STARTUP. IT ALSO DECIDES WHETHER THE DISK UTILITIES COULD BE USED (ONLY "<br /> 270 GT$(1) = " ADMINISTRATORS COULD USE THOSE), AND ALSO DECIDES WHICH APPLICATIONS SHORT- CUT LIST WILL BE USED. ANY NEW USERS HAD TO BE CODED IN MANUALLY, AND THE ONLY USER INSTALLED WAS 'SNOWYFOX', AN "<br /> 275 GT$(2) = " ADMINISTRATOR. THE NEW ACCOUNT SYSTEM IS ENABLED BY DEFAULT. IT LETS EXISTING USERS LOG IN AND NEW USERS TO MAKE THEIR OWN ACCOU- "<br /> 280 GT$(3) = " NT. THESE ACCOUNTS EACH HAVE THEIR OWN TEXT FILE, ON WHICH THEY STORE THEIR DATA (THUS THE TERM 'ACCOUNT FILE'). THESE ACCOUNTS, FOR NOW, ONLY STORE THE DATA IN THE NEW APPLICATIONS "<br /> 282 PRINT D$;"BLOAD CHAIN,A520"<br /> 283 CALL 520"GRAPEDESK"<br /> 284 REM {PAGE 20}<br /> 285 GT$(0) = " SHORTCUT LIST. EXTRA, EMPTY SLOTS ARE PROVIDED FOR FUTURE ADDITIONS OR MODS TO GRAPEDESK.<br /> 290 GT$(1) = " WITH MY NEW KNOWLEDGE OF TEXT FILES, I NOW KNOW HOW TO MAKE MODS AND PATCH- ES FOR GRAPEDESK. IF YOU HAVE EXPERIE- NCE IN APPLESOFT BASIC, I WOULD BE GR- ATEFUL IF YOU COULD MAKE A MOD FOR GR- "<br /> 295 GT$(2) = " APEDESK. YOU COULD MAKE A NEW GRAPE GUIDE OR ADD TO IT. YOU COULD MAKE A BETTER SCREENSAVER. YOU COULD ADD NEW FUNCTIONS. YOU COULD DO ANYTHING, REALLY. AFTER THOSE WORK, YOU CAN "<br /> 297 PRINT D$;"BLOAD CHAIN,A520"<br /> 298 CALL 520"GRAPEDESK"<br /> 299 REM {PAGE 21}<br /> 300 GT$(0) = " MAKE A TEXT FILE AND WRITE THE ENTIRE NEW GRAPEDESK CODE INTO IT, THUS MAKING A SMALL-SIZE TEXT FILE THAT CAN BE 'EXEC'ED TO APPLY THE PATCH/MOD. "<br /> 305 GT$(1) = " ERROR HANDLING IS ALL THAT'S LEFT. IT WAS INTENDED TO BE MADE A LONG TIME AGO, BUT I ONLY LEARNED ABOUT 'ONERR' AFTER MAKING V1.1. THE NEW ERROR HAN- DLING TELLS YOU WHAT ERROR IT IS IF IT "<br /> 310 GT$(2) = " IS KNOWN, THEN A BEEP. ONLY THE BEEP IS GIVEN IF THE ERROR IS UNKNOWN (IF A WRONG PASSWORD WAS GIVEN AT STARTUP, THOUGH, IT ALSO MAKES ONLY THE BEEP. "<br /> 312 PRINT D$;"BLOAD CHAIN,A520"<br /> 313 CALL 520"GRAPEDESK"<br /> 314 REM {PAGE 22}<br /> 315 GT$(0) = " THERE WAS ACTUALLY A COMPLETED VERSION OF GRAPEDESK V1.2 LAST TIME. FOR SOME REASON, HOWEVER, I DELETED THE ENTIRE PROGRAM. I BOTH REGRET AND AM GLAD ABOUT THAT DECISION. I FEEL REGRET BE- "<br /> 320 GT$(1) = " CAUSE I WASTED ALL MY EFFORT. I FEEL GLAD, THOUGH, BECAUSE THAT DELETION MADE ME MAKE THIS MUCH MORE ENHANCED VERSION. "<br /> 325 GT$(2) = " I CODED GRAPEDESK 1.2 ENTIRELY (EXCEPT FOR MACHINE I.D.). IF YOU WOULD LIKE TO HELP, I WOULD BE GRATEFUL IF YOU JOINED VALHALLA HOME SERVICES OR MADE A MOD FOR GRAPEDESK. I BELIEVE THIS "<br /> 330 GT$(3) = " WILL BE THE LAST VERSION OF GRAPEDESK FOR THE APPLE II. "<br /> 337 PRINT D$;"BLOAD CHAIN,A520"<br /> 338 CALL 520"GRAPEDESK"<br /> 339 REM {PAGE 23}<br /> 340 GT$(0) = " TO INSTALL GRAPEDESK ON A SEPERATE DISK, GOTO GRAPEDESK'S DIRECTORY, TYPE 'LOAD GRAPEDESK' AND THEN TYPE 'RUN 59000'. FOLLOW THE ONSCREEN INSTRUCT- IONS TO INSTALL. "<br /> 345 GT$(1) = " IF A NON-EXISTANT FILE/FOLDER OR AN INVALID RESPONSE IS GIVEN, AN ERROR IS UNLEASHED. ANY ERROR ENCOUNTERED SENDS YOU TO THE LOGIN SCREEN INSTEAD OF THE MAIN MENU, SO THAT PEOPLE CANOT INTEN- "<br /> 350 GT$(2) = " TIONALLY CAUSE AN ERROR AT THE STARTUP SCREEN TO BREAK INTO GRAPEDESK WITHOUT LOGGING IN. "<br /> 353 PRINT D$;"BLOAD CHAIN,A520"<br /> 354 CALL 520"GRAPEDESK"<br /> 400 REM {WHICH PAGE?}<br /> 405 ON GG GOTO 30,45,65,80,95,110,120,130,140,150,160,170,185,200,215,230,240,255,265,285,300,315,340<br />

The problem is that, when I go to the new first page of the guide to test, it shows "LOAD G.G.TEXT" and then hangs. I cannot exit with CTRL-C. The chaining isn't working. I used the CHAIN program from this disk image, gotten from the Asimov archive. Its contents are :
0208- AD D8 03 LDA $03D8<br /> 020B- 8D 12 02 STA $0212<br /> 020E- A2 01 LDX #$01<br /> 0210- BD 53 FF LDA $FF53,X<br /> 0213- 95 06 STA $06,X<br /> 0215- CA DEX<br /> 0216- 10 F8 BPL $0210<br /> 0218- AD 00 E0 LDA $E000<br /> 021B- C9 4C CMP #$4C<br /> 021D- F0 0B BEQ $022A<br /> 021F- A2 0B LDX #$0B<br /> 0221- BD C1 03 LDA $03C1,X<br /> 0224- 9D B5 03 STA $03B5,X<br /> 0227- CA DEX<br /> 0228- 10 F7 BPL $0221<br /> 022A- 20 AF 03 JSR $03AF<br /> 022D- A9 07 LDA #$07<br /> 022F- 85 8F STA $8F<br /> 0231- A5 69 LDA $69<br /> 0233- A6 6A LDX $6A<br /> 0235- 85 9D STA $9D<br /> 0237- 86 9E STX $9E<br /> 0239- E4 6C CPX $6C<br /> 023B- D0 04 BNE $0241<br /> 023D- C5 6B CMP $6B<br /> 023F- F0 05 BEQ $0246<br /> 0241- 20 9D 02 JSR $029D<br /> 0244- F0 F3 BEQ $0239<br /> 0246- 85 9F STA $9F<br /> 0248- 86 A0 STX $A0<br /> 024A- A9 03 LDA #$03<br /> 024C- 85 8F STA $8F<br /> 024E- A5 9F LDA $9F<br /> 0250- A6 A0 LDX $A0<br /> 0252- E4 6E CPX $6E<br /> 0254- D0 07 BNE $025D<br /> 0256- C5 6D CMP $6D<br /> 0258- D0 03 BNE $025D<br /> 025A- 4C FF 02 JMP $02FF<br /> 025D- 85 9D STA $9D<br /> 025F- 86 9E STX $9E<br /> 0261- A0 00 LDY #$00<br /> 0263- B1 9D LDA ($9D),Y<br /> 0265- AA TAX<br /> 0266- C8 INY<br /> 0267- B1 9D LDA ($9D),Y<br /> 0269- 08 PHP<br /> 026A- C8 INY<br /> 026B- B1 9D LDA ($9D),Y<br /> 026D- 65 9F ADC $9F<br /> 026F- 85 9F STA $9F<br /> 0271- C8 INY<br /> 0272- B1 9D LDA ($9D),Y<br /> 0274- 65 A0 ADC $A0<br /> 0276- 85 A0 STA $A0<br /> 0278- 28 PLP<br /> 0279- 10 D3 BPL $024E<br /> 027B- 8A TXA<br /> 027C- 30 D0 BMI $024E<br /> 027E- C8 INY<br /> 027F- B1 9D LDA ($9D),Y<br /> 0281- A0 00 LDY #$00<br /> 0283- 0A ASL<br /> 0284- 69 05 ADC #$05<br /> 0286- 65 9D ADC $9D<br /> 0288- 85 9D STA $9D<br /> 028A- 90 02 BCC $028E<br /> 028C- E6 9E INC $9E<br /> 028E- A6 9E LDX $9E<br /> 0290- E4 A0 CPX $A0<br /> 0292- D0 04 BNE $0298<br /> 0294- C5 9F CMP $9F<br /> 0296- F0 BA BEQ $0252<br /> 0298- 20 A7 02 JSR $02A7<br /> 029B- F0 F3 BEQ $0290<br /> 029D- B1 9D LDA ($9D),Y<br /> 029F- 30 46 BMI $02E7<br /> 02A1- C8 INY<br /> 02A2- B1 9D LDA ($9D),Y<br /> 02A4- 10 41 BPL $02E7<br /> 02A6- C8 INY<br /> 02A7- B1 9D LDA ($9D),Y<br /> 02A9- F0 3C BEQ $02E7<br /> 02AB- C8 INY<br /> 02AC- B1 9D LDA ($9D),Y<br /> 02AE- AA TAX<br /> 02AF- C8 INY<br /> 02B0- B1 9D LDA ($9D),Y<br /> 02B2- 85 9C STA $9C<br /> 02B4- 86 9B STX $9B<br /> 02B6- C5 B0 CMP $B0<br /> 02B8- F0 02 BEQ $02BC<br /> 02BA- B0 2B BCS $02E7<br /> 02BC- 88 DEY<br /> 02BD- 88 DEY<br /> 02BE- B1 9D LDA ($9D),Y<br /> 02C0- 48 PHA<br /> 02C1- 38 SEC<br /> 02C2- A5 6F LDA $6F<br /> 02C4- 85 94 STA $94<br /> 02C6- F1 9D SBC ($9D),Y<br /> 02C8- C8 INY<br /> 02C9- 91 9D STA ($9D),Y<br /> 02CB- 85 6F STA $6F<br /> 02CD- C8 INY<br /> 02CE- A5 70 LDA $70<br /> 02D0- 85 95 STA $95<br /> 02D2- E9 00 SBC #$00<br /> 02D4- 91 9D STA ($9D),Y<br /> 02D6- 85 70 STA $70<br /> 02D8- 68 PLA<br /> 02D9- 18 CLC<br /> 02DA- 65 9B ADC $9B<br /> 02DC- 85 96 STA $96<br /> 02DE- A5 9C LDA $9C<br /> 02E0- 69 00 ADC #$00<br /> 02E2- 85 97 STA $97<br /> 02E4- 20 B2 03 JSR $03B2<br /> 02E7- A5 8F LDA $8F<br /> 02E9- 18 CLC<br /> 02EA- 65 9D ADC $9D<br /> 02EC- 85 9D STA $9D<br /> 02EE- 90 02 BCC $02F2<br /> 02F0- E6 9E INC $9E<br /> 02F2- A5 9D LDA $9D<br /> 02F4- A6 9E LDX $9E<br /> 02F6- A0 00 LDY #$00<br /> 02F8- 60 RTS<br /> 02F9- C4 C1 CPY $C1<br /> 02FB- CF ???<br /> 02FC- CC 84 8D CPY $8D84<br /> 02FF- A9 00 LDA #$00<br /> 0301- 85 94 STA $94<br /> 0303- 85 9C STA $9C<br /> 0305- 85 97 STA $97<br /> 0307- A9 69 LDA #$69<br /> 0309- 85 9B STA $9B<br /> 030B- A9 71 LDA #$71<br /> 030D- 85 96 STA $96<br /> 030F- A9 01 LDA #$01<br /> 0311- 85 95 STA $95<br /> 0313- 20 B2 03 JSR $03B2<br /> 0316- A2 01 LDX #$01<br /> 0318- B5 69 LDA $69,X<br /> 031A- 95 9B STA $9B,X<br /> 031C- B5 6D LDA $6D,X<br /> 031E- 95 96 STA $96,X<br /> 0320- B5 6F LDA $6F,X<br /> 0322- 95 94 STA $94,X<br /> 0324- CA DEX<br /> 0325- F0 F1 BEQ $0318<br /> 0327- 20 B2 03 JSR $03B2<br /> 032A- A5 94 LDA $94<br /> 032C- 85 A1 STA $A1<br /> 032E- A6 95 LDX $95<br /> 0330- E8 INX<br /> 0331- 86 A2 STX $A2<br /> 0333- A0 06 LDY #$06<br /> 0335- B9 F8 02 LDA $02F8,Y<br /> 0338- 20 AC 03 JSR $03AC<br /> 033B- 88 DEY<br /> 033C- D0 F7 BNE $0335<br /> 033E- C8 INY<br /> 033F- B1 B8 LDA ($B8),Y<br /> 0341- F0 0A BEQ $034D<br /> 0343- C9 22 CMP #$22<br /> 0345- F0 06 BEQ $034D<br /> 0347- 20 AC 03 JSR $03AC<br /> 034A- C8 INY<br /> 034B- D0 F2 BNE $033F<br /> 034D- A9 5B LDA #$5B<br /> 034F- 85 36 STA $36<br /> 0351- A9 03 LDA #$03<br /> 0353- 85 37 STA $37<br /> 0355- 20 EA 03 JSR $03EA<br /> 0358- 6C B9 03 JMP ($03B9)<br /> 035B- A5 06 LDA $06<br /> 035D- 85 36 STA $36<br /> 035F- A5 07 LDA $07<br /> 0361- 85 37 STA $37<br /> 0363- 20 EA 03 JSR $03EA<br /> 0366- 20 A9 03 JSR $03A9<br /> 0369- 38 SEC<br /> 036A- A5 69 LDA $69<br /> 036C- E5 F8 SBC $F8<br /> 036E- 85 9D STA $9D<br /> 0370- A5 6A LDA $6A<br /> 0372- E5 F9 SBC $F9<br /> 0374- 85 9E STA $9E<br /> 0376- A2 FA LDX #$FA<br /> 0378- 20 9A 03 JSR $039A<br /> 037B- E8 INX<br /> 037C- 20 9A 03 JSR $039A<br /> 037F- A2 01 LDX #$01<br /> 0381- B5 FE LDA $FE,X<br /> 0383- 95 6F STA $6F,X<br /> 0385- 95 3E STA $3E,X<br /> 0387- B5 A1 LDA $A1,X<br /> 0389- 95 3C STA $3C,X<br /> 038B- B5 69 LDA $69,X<br /> 038D- 95 42 STA $42,X<br /> 038F- CA DEX<br /> 0390- F0 EF BEQ $0381<br /> 0392- A0 00 LDY #$00<br /> 0394- 20 2C FE JSR $FE2C F8ROM:MOVE<br /> 0397- 6C B7 03 JMP ($03B7)<br /> 039A- 18 CLC<br /> 039B- B5 00 LDA $00,X<br /> 039D- 65 9D ADC $9D<br /> 039F- 95 71 STA $71,X<br /> 03A1- E8 INX<br /> 03A2- B5 00 LDA $00,X<br /> 03A4- 65 9E ADC $9E<br /> 03A6- 95 71 STA $71,X<br /> 03A8- 60 RTS<br /> 03A9- 6C B5 03 JMP ($03B5)<br /> 03AC- 6C BB 03 JMP ($03BB)<br /> 03AF- 6C BD 03 JMP ($03BD)<br /> 03B2- 6C BF 03 JMP ($03BF)<br /> 03B5- 65 D6 ADC $D6<br /> 03B7- D2 D7 CMP ($D7)<br /> 03B9- FB ???<br /> 03BA- DA PHX<br /> 03BB- 5C ???<br /> 03BC- DB ???<br /> 03BD- 84 E4 STY $E4<br /> 03BF- 9A TXS<br /> 03C0- D3 ???<br /> 03C1- 65 0E ADC $0E<br /> 03C3- D4 ???<br /> 03C4- 0F ???<br /> 03C5- FC ???<br /> 03C6- 12 5F ORA ($5F)<br /> 03C8- 13 ???<br /> 03C9- 7B ???<br /> 03CA- 1C 9A 0B TRB $0B9A<br />

Any idea what's going on? Sorry for all the trouble.

Offline
Last seen: 9 years 1 month ago
Joined: Apr 10 2006 - 20:01
Posts: 1013
Re: No buffers available (repost)

I saved all the text into the text file correctly. However, if I try to read the text, it only prints all text from the start to the coma, and skips everything else inside that field. Is there a way for it to print the rest?

BASIC's string parsing is going to use the comma as a field delimiter, so yeah, you're going to have to do something different - like pretend it's binary data instead.

You can also work on compressing your strings. I did an experiment where I replaced instances of 40 spaces with a variable set to 40 spaces, and re-used that everywhere it appeared in the code. I did the same thing with the horizontal bar. Those changes alone saved about 8k...

Or, should I use CHAIN to make Grapedesk run a program that saves needed text into variables and returns to Grapedesk?
From there, I could print out the text from the variable in the page.

See: http://www.atarimagazines.com/compute/issue87/Chaining_Programs_In_Applesoft_BASIC.php

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

I saved all the text into the text file correctly. However, if I try to read the text, it only prints all text from the start to the coma, and skips everything else inside that field. Is there a way for it to print the rest?

BASIC's string parsing is going to use the comma as a field delimiter, so yeah, you're going to have to do something different - like pretend it's binary data instead.
Can I use CHR$([the one for comma]) to place commas inside text files?

You can also work on compressing your strings. I did an experiment where I replaced instances of 40 spaces with a variable set to 40 spaces, and re-used that everywhere it appeared in the code. I did the same thing with the horizontal bar. Those changes alone saved about 8k...
Alright then. Also, all the disk utility pages in the guide have the same warning about errors at the end. You can see that in the new program I made above (the one that sets the guide text into variables), I set that error into one universal paragraph, and print it when needed. If I try that trick, and all the others we've gathered so far, is it possible to compress it far enough for the program to fit?

Or, should I use CHAIN to make Grapedesk run a program that saves needed text into variables and returns to Grapedesk?
From there, I could print out the text from the variable in the page.

See: http://www.atarimagazines.com/compute/issue87/Chaining_Programs_In_Applesoft_BASIC.php

Sorry, that's a bit too complicated. I'm not ready for binary yet (I'm training to the max for Applesoft, then I'm jumping over to Java).

*EDIT* Also, in the program above (the one that sets the guide text into variables), the entire completed guide is there, giving a total of 23 pages.

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

I take back what I said about it being complicated. The problem is...

5 LOC = 24576 + 1 : IF PEEK (103) + PEEK (104) $ 256 < > LOC THEN POKE LOC - 1, 0 : POKE 103, LOC - INT (LOC / 256) * 256 : POKE 104, INT (LOC / 256) : PRINT CHR$ (4) "RUN PROGRAM 1"

...this. If I try to type this in, Applesoft will give a syntax error because it doesn't understand what PEEK(104) $256 means.

Is there possibly a typo of some sorts?

Offline
Last seen: 9 years 1 month ago
Joined: Apr 10 2006 - 20:01
Posts: 1013
Re: No buffers available (repost)

Yep, looks like a typo. Should be PEEK (104) * 256.

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

I just made the change you suggested, and you were right in the case. The test worked just fine.

Sorry for the constant problems, but this time if I try to run the main program, it will throw an error saying "UNDEFINED STATEMENT IN 30". As I thought I actually made a coding error on line 30, I checked the listing. And a lot of lines became jumbled memory strings. If I reboot, load the program and LIST without running, everything is still fine. So, the chaining memory trick is malfunctioning, typed in wrongly or for another reason. Here's the new code for the main program :
1 REM 0---------------0<br /> 2 REM | GRAPEDESK 1.2 |<br /> 3 REM 0---------------0<br /> 5 REM {INITIALIZING}<br /> 6 LOC = 24576 + 1: IF PEEK (103) + PEEK (104) * 256 &lt; &gt; LOC THEN POKE LOC - 1,0: POKE 103,LOC - INT (LOC / 256) * 256: POKE 104, INT (LOC / 256)<br /> 7 IF GG = 3 THEN GOTO 59000<br /> 10 D$ = CHR$ (4)<br /> 11 R$ = CHR$ (13)<br /> 14 PRINT FRE (0)<br /> 15 DIM A(5)<br /> 16 DIM U$(12)<br /> 20 REM {SPLASH SCREEN}<br /> 25 HOME : INVERSE : PRINT " WELCOME TO GRAPEDESK 1.2 MADE BY SILENT FLAMER OF EMACULATION NO PATCHES CURRENTLY INSTALLED "<br /> 30 VTAB 6: PRINT " NEW USERS SHOULD THOROUGHLY READ THE GRAPE GUIDE BEFORE USING GRAPEDESK 1.2 "<br /> 32 VTAB 11: PRINT " "<br /> 34 VTAB 16: PRINT " A USERNAME AND PASSWORD IS CURRENTLY COMPULSORY. LOG INTO YOUR ACCOUNT OR TYPE 'NEW' TO CREATE A NEW ACCOUNT "<br /> 36 VTAB 21: PRINT " "<br /> 37 NORMAL<br /> 38 GOSUB 100<br /> 40 REM {MAIN MENU}<br /> 45 HOME : INVERSE : PRINT "GRAPEDESK 1.2 MAIN MENU"<br /> 50 NORMAL : PRINT " (1) DISK UTILITIES (2) APP SHORTCUTS (3) GRAPE GUIDE (4) EXIT TO PRODOS (D) DESK ACCESORIES "<br /> 55 PRINT " INSTRUCTIONS FOR INSTALING GRAPDESK 1.2 ON A DISK ARE PROVIDED INSIDE THE GRAPE GUIDE, WHICH ALSO CONTAINS OTHER USEFUL INFO. "<br /> 60 PRINT " CHECK OUT CYBERNATIONS, AN ONLINE GAME THAT LETS YOU GOVERN YOUR OWN NATION. "<br /> 65 GOSUB 63700<br /> 66 PRINT JO$<br /> 70 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 75 VTAB 23: HTAB 39: GET M$<br /> 80 IF M$ = "1" THEN GOTO 1000<br /> 81 IF M$ = "2" THEN GOTO 2000<br /> 82 IF M$ = "3" THEN GOTO 3000<br /> 83 IF M$ = "4" THEN GOSUB 63800<br /> 84 IF M$ = "D" THEN GOSUB 60000<br /> 85 GOTO 40<br /> 100 REM {USER &amp; PW}<br /> 105 VTAB 23: HTAB 1: INPUT " USERNAME : ";U$(1)<br /> 106 IF U$(1) = "NEW" THEN GOTO 200<br /> 107 IF U$(1) = "" THEN GOTO 58100: IF U$(1) = " " THEN GOTO 58100: IF U$(1) = "Q" THEN GOTO 58100<br /> 110 PRINT D$;"RENAME ";U$(1);",READING"<br /> 115 PRINT D$;"RENAME READING,";U$(1)<br /> 120 PRINT D$;"OPEN ";U$(1)<br /> 125 PRINT D$;"READ ";U$(1)<br /> 130 INPUT O$<br /> 131 INPUT U$(2)<br /> 135 PRINT D$;"CLOSE ";U$(1)<br /> 139 VTAB 23: HTAB 1: PRINT " "<br /> 140 VTAB 23: HTAB 1: INPUT " PASSWORD : ";I$<br /> 145 IF I$ &lt; &gt; U$(2) THEN GOTO 950<br /> 150 RETURN<br /> 200 REM {CREATE NEW USER}<br /> 205 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CREATE NEW USER"<br /> 210 NORMAL : PRINT " GRAPEDESK 1.2 HAS A USER AND PASSWORD SYSTEM THAT LETS YOU HAVE YOUR OWN USERNAME, PASSWORD AND A PERSONALIZED APPLICATION SHORTCUTS LIST. AN ACCOUNT "<br /> 215 VTAB 7: PRINT " MAY ALSO BE USED IN FUTURE PATCHES FOR DATA STORAGE. EACH USER ACCOUNT IS STORED IN A FILE AT THE SAME PREFIX (DIRECTORY) AS GRAPEDESK. DELETING "<br /> 220 VTAB 11: PRINT " ANOTHER USER'S ACCOUNT FILE WILL NOT HELP YOU ACCESS THEIR DATA, AS DOING SO DELETES ALL DATA AND NOT ONLY ITS PASSWORD. "<br /> 225 VTAB 16: PRINT " IF YOU'VE CHANGE YOUR MIND, TYPE 'Q' AT THE FOLLOWING PROMPT TO RETURN TO THE SPLASH SCREEN. ALSO NOTE THAT MAKING A NEW ACCOUNT UNDER THE SAME NAME AS ANOTHER OVERWRITES THE OLDER. "<br /> 230 VTAB 23: HTAB 39: GET O$<br /> 235 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CREATE NEW USER"<br /> 240 NORMAL : INPUT " THE NAME OF THE NEW USER IS ";U$(1)<br /> 245 IF U$(1) = "Q" THEN GOTO 5<br /> 249 PRINT<br /> 250 INPUT " AND THE PASSWORD OF THIS ACCOUNT IS ";U$(2)<br /> 251 PRINT<br /> 255 IF U$(2) = "Q" THEN GOTO 0<br /> 256 FOR C = 3 TO 12<br /> 257 U$(C) = "NONE"<br /> 258 NEXT C<br /> 260 PRINT D$;"OPEN ";U$(1)<br /> 261 PRINT D$;"CLOSE ";U$(1)<br /> 265 PRINT D$;"DELETE ";U$(1)<br /> 270 PRINT D$;"OPEN ";U$(1)<br /> 271 PRINT D$;"WRITE ";U$(1)<br /> 275 FOR C = 1 TO 12<br /> 280 PRINT U$(C)<br /> 281 NEXT C<br /> 285 PRINT D$;"CLOSE ";U$(1)<br /> 290 PRINT " THE USER ACCOUNT WAS SUCCESSFULLY CREATED! WOULD YOU LIKE TO LOG INTO IT RIGHT NOW? "<br /> 295 VTAB 10: HTAB 13: GET M$<br /> 300 IF M$ = 'Y" THEN RETURN<br /> 305 IF M$ = "N" THEN GOTO 20<br /> 310 GOTO 295<br /> 900 REM {USER NOT FOUND}<br /> 905 VTAB 1: HTAB 1: PRINT " THE USER THAT YOU TRIED TO LOG INTO WAS NOT FOUND! ________________________________________"<br /> 910 GOTO 100<br /> 950 REM {WRONG PASSWORD}<br /> 954 FOR C = 1 TO 40<br /> 955 GOSUB 63990<br /> 960 GOTO 100<br /> 1000 REM {DISK UTILITIES}<br /> 1005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 DISK UTILITIES"<br /> 1010 NORMAL : PRINT " (1) VIEW FILES (2) CHANGE DIRECTORY (3) RENAME FILE/FOLDER (4) DELETE FILE/FOLDER (5) CREATE FOLDER "<br /> 1015 VTAB 8: PRINT " <img src="https://www.applefritter.com/sites/all/modules/smiley/packs/kolobok/diablo.gif" alt="Diablo" /> LOCK FILE/FOLDER (7) UNLOCK FILE/FOLDER (8) RETURN TO MAIN MENU "<br /> 1020 GOSUB 63700<br /> 1025 PRINT JO$<br /> 1040 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 1045 VTAB 23: HTAB 39: GET M$<br /> 1050 IF M$ = "1" THEN GOTO 1100<br /> 1051 IF M$ = "2" THEN GOTO 1200<br /> 1052 IF M$ = "3" THEN GOTO 1300<br /> 1053 IF M$ = "4" THEN GOTO 1400<br /> 1054 IF M$ = "5" THEN GOTO 1500<br /> 1055 IF M$ = "6" THEN GOTO 1600<br /> 1056 IF M$ = "7" THEN GOTO 1700<br /> 1057 IF M$ = "8" THEN GOTO 40<br /> 1058 IF M$ = "D" THEN GOSUB 60000<br /> 1060 GOTO 1000<br /> 1100 REM {DU:VIEW FILES}<br /> 1105 HOME : INVERSE : PRINT "GRAPEDESK 1.2 VIEW FILES"<br /> 1110 NORMAL : PRINT D$;"CAT"<br /> 1115 VTAB 23: HTAB 39: GET O$<br /> 1120 GOTO 1000<br /> 1200 REM {DU:CHANGE DIRECTORY}<br /> 1205 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1210 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE DIRECTORY YOU WISH TO CHANGE TO IS ";I$<br /> 1215 PRINT D$;"PREFIX ";I$<br /> 1220 VTAB 1: HTAB 1: PRINT " CHANGE TO GIVEN DIRECTORY SUCCESSFUL. ________________________________________"<br /> 1225 VTAB 4: HTAB 39: GET O$<br /> 1230 GOTO 1000<br /> 1300 REM {DU:RENAME FILE\FOLDER}<br /> 1305 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1310 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO RENAME IS ";I$<br /> 1315 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1320 VTAB 2: HTAB 1: INPUT " THE NEW NAME OF THE FILE\FOLDER IS ";I2$<br /> 1325 PRINT D$;"RENAME ";I$;","I2$<br /> 1330 VTAB 1: HTAB 1: PRINT " RENAME OF FILE\FOLDER IS SUCCESSFUL. ________________________________________"<br /> 1335 VTAB 4: HTAB 39: GET O$<br /> 1340 GOTO 1000<br /> 1400 REM {DU:DELETE FILE\FOLDER}<br /> 1405 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1410 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE/FOLDER YOU WISH TO DELETE IS ";I$<br /> 1415 PRINT D$;"DELETE ";I$<br /> 1420 VTAB 1: HTAB 1: PRINT " DELETION OF THE FILE/FOLDER IS SUCCESSFUL. ________________________________________"<br /> 1425 VTAB 4: HTAB 39: GET O$<br /> 1430 GOTO 1000<br /> 1500 REM {DU:CREATE FOLDER}<br /> 1505 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1510 VTAB 2: HTAB 1: INPUT " THE NAME OF THE NEW FOLDER IS ";I$<br /> 1515 PRINT D$;"CREATE ";I$<br /> 1520 VTAB 1: HTAB 1: PRINT " FOLDER SUCCESSFULLY CREATED. ________________________________________"<br /> 1525 VTAB 4: HTAB 39: GET O$<br /> 1530 GOTO 1000<br /> 1600 REM {DU:LOCK FILE}<br /> 1605 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1610 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO LOCK IS ";I$<br /> 1615 PRINT D$;"LOCK ";I$<br /> 1620 VTAB 1: HTAB 1: PRINT " FILE\FOLDER SUCCESSFULLY LOCKED. ________________________________________"<br /> 1625 VTAB 4: HTAB 39: GET O$<br /> 1630 GOTO 1000<br /> 1700 REM {DU:UNLOCK FILE}<br /> 1705 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 1710 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO UNLOCK IS ";I$<br /> 1715 PRINT D$;"UNLOCK ";I$<br /> 1720 VTAB 1: HTAB 1: PRINT " FILE\FOLDER SUCCESSFULLY UNLOCKED. ________________________________________"<br /> 1725 VTAB 4: HTAB 39: GET O$<br /> 1730 GOTO 1000<br /> 2000 REM {APP SHORTCUTS}<br /> 2005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 APPLICATION SHORTCUTS"<br /> 2006 PRINT D$;"OPEN ";U$(1)<br /> 2007 PRINT D$;"READ ";U$(1)<br /> 2008 FOR C = 1 TO 12<br /> 2009 INPUT U$(C)<br /> 2010 NEXT C<br /> 2011 PRINT D$;"CLOSE ";U$(1)<br /> 2012 NORMAL<br /> 2020 VTAB 3: PRINT " (1) ";U$(5)<br /> 2021 VTAB 4: PRINT " (2) ";U$(6)<br /> 2022 VTAB 5: PRINT " (3) ";U$(7)<br /> 2023 VTAB 6: PRINT " (4) ";U$(8)<br /> 2024 VTAB 7: PRINT " (5) ";U$(9)<br /> 2025 VTAB 8: PRINT " <img src="https://www.applefritter.com/sites/all/modules/smiley/packs/kolobok/diablo.gif" alt="Diablo" /> ";U$(10)<br /> 2026 VTAB 9: PRINT " (7) ";U$(11)<br /> 2027 VTAB 10: PRINT " (8) ";U$(12)<br /> 2028 VTAB 11: PRINT " (9) RETURN TO MAIN MENU "<br /> 2030 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 2035 VTAB 23: HTAB 39: GET M$<br /> 2040 IF M$ = "1" THEN GOTO 2100<br /> 2041 IF M$ = "2" THEN GOTO 2200<br /> 2042 IF M$ = "3" THEN GOTO 2300<br /> 2043 IF M$ = "4" THEN GOTO 2400<br /> 2044 IF M$ = "5" THEN GOTO 2500<br /> 2045 IF M$ = "6" THEN GOTO 2600<br /> 2046 IF M$ = "7" THEN GOTO 2700<br /> 2047 IF M$ = "8" THEN GOTO 2800<br /> 2050 IF M$ = "D" THEN GOSUB 60000<br /> 2055 IF M$ = "9" THEN GOTO 40<br /> 2060 GOTO 2000<br /> 2100 IF U$(5) = "NONE" THEN GOTO 2150<br /> 2105 VTAB 3: HTAB 39: GET M$<br /> 2110 IF M$ = "C" THEN GOTO 2140<br /> 2115 IF M$ = "R" THEN GOTO 2125<br /> 2120 GOTO 2000<br /> 2125 PRINT D$;"-";U$(5)<br /> 2140 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2142 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";I$<br /> 2143 U$(5) = I$<br /> 2144 GOSUB 2900<br /> 2146 GOTO 2000<br /> 2150 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2155 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(5)<br /> 2160 GOSUB 2900<br /> 2165 GOTO 2000<br /> 2200 IF U$(6) = "NONE" THEN GOTO 2250<br /> 2205 VTAB 4: HTAB 39: GET M$<br /> 2210 IF M$ = "C" THEN GOTO 2240<br /> 2215 IF M$ = "R" THEN GOTO 2225<br /> 2220 GOTO 2000<br /> 2225 PRINT D$;"RUN ";U$(6)<br /> 2240 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2242 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(6)<br /> 2244 GOSUB 2900<br /> 2246 GOTO 2000<br /> 2250 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2255 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(6)<br /> 2260 GOSUB 2900<br /> 2265 GOTO 2000<br /> 2300 IF U$(7) = "NONE" THEN GOTO 2350<br /> 2305 VTAB 5: HTAB 39: GET M$<br /> 2310 IF M$ = "C" THEN GOTO 2340<br /> 2315 IF M$ = "R" THEN GOTO 2325<br /> 2320 GOTO 2000<br /> 2325 PRINT D$;"-";U$(7)<br /> 2340 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2342 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(7)<br /> 2344 GOSUB 2900<br /> 2346 GOTO 2000<br /> 2350 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2355 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(7)<br /> 2360 GOSUB 2900<br /> 2365 GOTO 2000<br /> 2400 IF U$(8) = "NONE" THEN GOTO 2450<br /> 2405 VTAB 6: HTAB 39: GET M$<br /> 2410 IF M$ = "C" THEN GOTO 2440<br /> 2415 IF M$ = "R" THEN GOTO 2425<br /> 2420 GOTO 2000<br /> 2425 PRINT D$;"-";U$(8)<br /> 2440 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2442 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(8)<br /> 2444 GOSUB 2900<br /> 2446 GOTO 2000<br /> 2450 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2455 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(8)<br /> 2460 GOSUB 2900<br /> 2465 GOTO 2000<br /> 2500 IF U$(9) = "NONE" THEN GOTO 2550<br /> 2505 VTAB 7: HTAB 39: GET M$<br /> 2510 IF M$ = "C" THEN GOTO 2540<br /> 2515 IF M$ = "R" THEN GOTO 2525<br /> 2520 GOTO 2000<br /> 2525 PRINT D$;"-";U$(8)<br /> 2540 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2542 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(9)<br /> 2544 GOSUB 2900<br /> 2546 GOTO 2000<br /> 2550 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2555 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(9)<br /> 2560 GOSUB 2900<br /> 2565 GOTO 2000<br /> 2600 IF U$(10) = "NONE" THEN GOTO 2650<br /> 2605 VTAB 8: HTAB 39: GET M$<br /> 2610 IF M$ = "C" THEN GOTO 2640<br /> 2615 IF M$ = "R" THEN GOTO 2625<br /> 2620 GOTO 2000<br /> 2625 PRINT D$;"-";U$(10)<br /> 2640 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2642 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(10)<br /> 2644 GOSUB 2900<br /> 2646 GOTO 2000<br /> 2650 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2655 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(10)<br /> 2660 GOSUB 2900<br /> 2665 GOTO 2000<br /> 2700 IF U$(11) = "NONE" THEN GOTO 2750<br /> 2705 VTAB 9: HTAB 39: GET M$<br /> 2710 IF M$ = "C" THEN GOTO 2740<br /> 2715 IF M$ = "R" THEN GOTO 2725<br /> 2720 GOTO 2000<br /> 2725 PRINT D$;"-";U$(11)<br /> 2740 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2742 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(11)<br /> 2744 GOSUB 2900<br /> 2746 GOTO 2000<br /> 2750 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2755 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(11)<br /> 2760 GOSUB 2900<br /> 2765 GOTO 2000<br /> 2800 IF U$(12) = "NONE" THEN GOTO 2850<br /> 2805 VTAB 10: HTAB 39: GET M$<br /> 2810 IF M$ = "C" THEN GOTO 2840<br /> 2815 IF M$ = "R" THEN GOTO 2825<br /> 2820 GOTO 2000<br /> 2825 PRINT D$;"-";U$(12)<br /> 2840 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2842 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(12)<br /> 2844 GOSUB 2900<br /> 2846 GOTO 2000<br /> 2850 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 2855 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(12)<br /> 2860 GOSUB 2900<br /> 2865 GOTO 2000<br /> 2900 REM {SAVE CHANGES}<br /> 2901 PRINT D$;"OPEN ";U$(1)<br /> 2902 PRINT D$;"CLOSE ";U$(1)<br /> 2903 PRINT D$;"DELETE ";U$(1)<br /> 2905 PRINT D$;"OPEN ";U$(1)<br /> 2910 PRINT D$;"WRITE ";U$(1)<br /> 2915 FOR C = 1 TO 12<br /> 2920 PRINT U$(C)<br /> 2925 NEXT C<br /> 2930 PRINT D$;"CLOSE ";U$(1)<br /> 2935 RETURN<br /> 3000 REM {GRAPE GUIDE}<br /> 3005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3010 GG = 1<br /> 3011 PRINT D$;"BLOAD CHAIN,A520"<br /> 3012 CALL 520"G.G.TEXT"<br /> 3015 NORMAL : PRINT GT$(0)<br /> 3020 VTAB 7: PRINT GT$(1)<br /> 3025 VTAB 12: PRINT GT$(2)<br /> 3030 VTAB 23: PRINT " [PAGE #1][INTRODUCTION] "<br /> 3035 VTAB 23: HTAB 26: GET M$<br /> 3036 VTAB 23: HTAB 26: GET M2$<br /> 3040 GOSUB 59500<br /> 3045 GOTO 3000<br /> 58100 HOME : END<br /> 59000 REM {ASK FOR TEXT}<br /> 59005 GG = 1:GG = 1 + 0<br /> 59010 POKE 16383, PEEK (105): POKE 16382, PEEK (106): POKE 16381, PEEK (107): POKE 16380, PEEK (108): POKE 16379, PEEK (109): POKE 16378, PEEK (110)<br /> 59011 POKE 16377, PEEK (111): POKE 16376, PEEK (112)<br /> 59015 PRINT D$;"RUN G.G.TEXT"<br /> 59020 GOTO 20<br /> 59500 REM {GRAPE GUIDE NAVIGATION}<br /> 59505 IF M$ = "1" AND M2$ = R$ THEN GOTO 3000<br /> 59506 IF M$ = "2" AND M2$ = R$ THEN GOTO 3100<br /> 59507 IF M$ = "3" AND M2$ = R$ THEN GOTO 3200<br /> 59508 IF M$ = "4" AND M2$ = R$ THEN GOTO 3300<br /> 59509 IF M$ = "5" AND M2$ = R$ THEN GOTO 3400<br /> 59510 IF M$ = "6" AND M2$ = R$ THEN GOTO 3500<br /> 59511 IF M$ = "7" AND M2$ = R$ THEN GOTO 3600<br /> 59512 IF M$ = "8" AND M2$ = R$ THEN GOTO 3700<br /> 59513 IF M$ = "9" AND M2$ = R$ THEN GOTO 3800<br /> 59514 IF M$ = "1" AND M2$ = "0" THEN GOTO 3900<br /> 59515 IF M$ = "1" AND M2$ = "1" THEN GOTO 4000<br /> 59516 IF M$ = "1" AND M2$ = "2" THEN GOTO 4100<br /> 59517 IF M$ = "1" AND M2$ = "3" THEN GOTO 4200<br /> 59518 IF M$ = "1" AND M2$ = "4" THEN GOTO 4300<br /> 59519 IF M$ = "1" AND M2$ = "5" THEN GOTO 4400<br /> 59520 IF M$ = "1" AND M2$ = "6" THEN GOTO 4500<br /> 59521 IF M$ = "1" AND M2$ = "7" THEN GOTO 4600<br /> 59522 IF M$ = "1" AND M2$ = "8" THEN GOTO 4700<br /> 59523 IF M$ = "1" AND M2$ = "9" THEN GOTO 4800<br /> 59524 IF M$ = "2" AND M2$ = "0" THEN GOTO 4900<br /> 59525 IF M$ = "2" AND M2$ = "1" THEN GOTO 5000<br /> 59526 IF M$ = "2" AND M2$ = "2" THEN GOTO 5100<br /> 59527 IF M$ = "2" AND M2$ = "3" THEN GOTO 5200<br /> 59597 IF M$ = "Q" THEN GOTO 40<br /> 59598 IF M$ = "D" THEN GOSUB 60000<br /> 59599 RETURN<br /> 59702 REM {OCEAN SCREENSAVER}<br /> 59704 GR<br /> 59706 POKE - 16302,0<br /> 59708 GOTO 59900<br /> 59710 COLOR= 15<br /> 59712 FOR C = 0 TO 9<br /> 59714 IF C &gt; 9 THEN GOTO 59750<br /> 59716 VLIN 36,47 AT C<br /> 59718 NEXT C<br /> 59750 REM {OCEAN}<br /> 59752 COLOR= 2<br /> 59754 FOR C = 10 TO 39<br /> 59756 IF C &gt; 39 THEN GOTO 59800<br /> 59758 VLIN 37,47 AT C<br /> 59760 NEXT C<br /> 59800 REM {SMALL WAVE}<br /> 59802 IF PEEK ( - 16384) &gt; 127 THEN GOTO 59950<br /> 59804 FOR X = 10 TO 39<br /> 59806 IF X &gt; 39 THEN GOTO 59850<br /> 59808 PLOT X,36<br /> 59810 FOR D = 1 TO 40<br /> 59812 NEXT D<br /> 59814 COLOR= 6<br /> 59816 PLOT X,36<br /> 59818 COLOR= 2<br /> 59820 NEXT X<br /> 59850 REM {DELAY &amp; BACK}<br /> 59852 IF PEEK ( - 16384) &gt; 127 THEN GOTO 59950<br /> 59854 FOR D = 1 TO 1000<br /> 59856 NEXT D<br /> 59858 X = X - 1<br /> 59860 IF X &lt; 10 THEN GOTO 59800<br /> 59862 PLOT X,36<br /> 59864 FOR D = 1 TO 40<br /> 59866 NEXT D<br /> 59868 COLOR= 6<br /> 59870 PLOT X,36<br /> 59872 COLOR= 2<br /> 59874 GOTO 59858<br /> 59900 REM {PAINT SKY}<br /> 59902 COLOR= 6<br /> 59904 FOR C = 0 TO 39<br /> 59906 IF C &gt; 39 THEN GOTO 59912<br /> 59908 VLIN 0,47 AT C<br /> 59910 NEXT C<br /> 59912 COLOR= 13<br /> 59914 PLOT 37,0: PLOT 38,0: PLOT 39,0: PLOT 37,1: PLOT 38,1: PLOT 39,1: PLOT 37,2: PLOT 38,2: PLOT 39,2<br /> 59916 GOTO 59710<br /> 59950 REM {KEY PRESSED}<br /> 59952 POKE - 16368,0<br /> 59954 TEXT : HOME<br /> 59956 RETURN<br /> 60000 REM {DESK ACCESORIES}<br /> 60005 HTAB 1: VTAB 1: PRINT " (1) CALCULATOR (2) RUN PROGRAM (3) MACHINE ID (4) SCREENSAVER "<br /> 60010 HTAB 1: VTAB 6: PRINT " AWAITING COMMAND. ________________________________________"<br /> 60015 HTAB 39: VTAB 7: GET M$<br /> 60020 IF M$ = "1" THEN GOTO 61000<br /> 60025 IF M$ = "2" THEN GOTO 62000<br /> 60030 IF M$ = "3" THEN GOTO 63000<br /> 60035 IF M$ = "4" THEN GOSUB 59702<br /> 60040 RETURN<br /> 61000 REM {CALCULATOR}<br /> 61001 FOR C = 1 TO 6<br /> 61002 N(C) = 0<br /> 61003 NEXT C<br /> 61005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CALCULATOR"<br /> 61010 NORMAL : PRINT " (1) ADDITION (2) SUBTRACTION (3) MULTIPLICATION (4) DIVISION ( ) RETURN TO PREVIOUS MENU "<br /> 61015 VTAB 23: PRINT " AWAITING COMMAND. "<br /> 61020 VTAB 23: HTAB 39: GET M$<br /> 61025 IF M$ = "1" THEN GOTO 61100<br /> 61030 IF M$ = "2" THEN GOTO 61200<br /> 61035 IF M$ = "3" THEN GOTO 61300<br /> 61040 IF M$ = "4" THEN GOTO 61400<br /> 61050 GOTO 40<br /> 61100 REM {CALC:ADD}<br /> 61101 VTAB 9: HTAB 1: INPUT " WHAT'S THE FIRST NUMBER TO ADD? ";N(1)<br /> 61102 VTAB 9: PRINT " "<br /> 61103 N(6) = 0<br /> 61105 FOR C = 2 TO 6<br /> 61106 IF C &gt; 5 THEN GOTO 61180<br /> 61110 VTAB 9: INPUT " WHAT'S THE NEXT NUMBER TO ADD IN? TYPE 0 TO SUM UP ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61111 N(6) = N(1) + N(2) + N(3) + N(4) + N(5)<br /> 61115 IF N(C) = 0 THEN GOTO 61190<br /> 61130 NEXT C<br /> 61180 VTAB 9: PRINT " "<br /> 61182 VTAB 9: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE SUM FOR EVERYTHING IS ";N(6)<br /> 61183 HTAB 39: VTAB 23: GET O$<br /> 61185 GOTO 61196<br /> 61190 VTAB 9: PRINT " "<br /> 61192 VTAB 9: PRINT " ALRIGHT THEN. THE SUM FOR EVERYTHING SO FAR IS ";N(6)<br /> 61195 HTAB 39: VTAB 23: GET O$<br /> 61196 GOTO 61000<br /> 61200 REM {CALC:SUBTR}<br /> 61201 N(6) = 0<br /> 61205 VTAB 9: HTAB 1: INPUT " WHAT'S THE BIGGEST NUMBER? ";N(1)<br /> 61210 VTAB 9: PRINT " "<br /> 61215 FOR C = 2 TO 6<br /> 61220 IF C &gt; 5 THEN GOTO 61280<br /> 61225 VTAB 9: INPUT " WHAT'S THE NEXT NUMBER TO SUBTRACT FROM THE BIGGEST NUMBER? TYPE 0 TO SUBTRACT ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61226 N(6) = N(1) - N(2) - N(3) - N(4) - N(5)<br /> 61230 IF N(C) = 0 THEN GOTO 61290<br /> 61235 NEXT C<br /> 61280 VTAB 9: PRINT " "<br /> 61282 VTAB 9: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE FIRST NUMBER MINUS EVERYTHING ELSE IS ";N(6)<br /> 61284 VTAB 23: HTAB 39: GET O$<br /> 61286 GOTO 61000<br /> 61290 VTAB 9: PRINT " "<br /> 61292 VTAB 9: PRINT " ALRIGHT THEN. THE FIRST NUMBER MINUS EACH OTHER NUMBER IS ";N(6)<br /> 61294 VTAB 23: HTAB 39: GET O$<br /> 61296 GOTO 61000<br /> 61300 REM {CALC:MULTI}<br /> 61305 N(6) = 0<br /> 61310 VTAB 9: HTAB 1: INPUT " WHAT IS THE FIRST NUMBER TO MULTIPLY WITH? ";N(1)<br /> 61311 N(6) = N(1)<br /> 61315 FOR C = 2 TO 6<br /> 61320 IF C &gt; 5 THEN GOTO 61390<br /> 61325 VTAB 9: HTAB 1: INPUT " WHAT IS THE NEXT NUMBER TO MULTIPLY WITH? TYPE 0 TO MULTIPLY ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61330 IF N(C) = 0 THEN GOTO 61380<br /> 61335 N(6) = N(6) * N(C)<br /> 61340 NEXT C<br /> 61380 VTAB 9: HTAB 1: PRINT " "<br /> 61382 VTAB 9: HTAB 1: PRINT " ALRIGHT THEN. THE PRODUCT OF ALL THE NUMBERS WE HAVE SO FAR IS ";N(6)<br /> 61384 HTAB 39: VTAB 23: GET O$<br /> 61386 GOTO 61000<br /> 61390 VTAB 9: HTAB 1: PRINT " "<br /> 61392 VTAB 9: HTAB 1: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE PRODUCT OF ALL THE NUMBERS SO FAR IS ";N(6)<br /> 61394 HTAB 39: VTAB 23: GET O$<br /> 61396 GOTO 61000<br /> 61400 REM {CALC:DIVISION}<br /> 61405 N(6) = 0<br /> 61410 VTAB 9: HTAB 1: INPUT " WHAT IS THE FIRST NUMBER TO DIVIDE EVERYTHING ELSE WITH? ";N(1)<br /> 61415 N(6) = N(1)<br /> 61420 FOR C = 2 TO 6<br /> 61425 IF C &gt; 5 THEN GOTO 61490<br /> 61430 VTAB 9: HTAB 1: INPUT " WHAT IS THE NEXT NUMBER TO BE DIVIDED BY THE FIRST NUMBER? TYPE 0 TO DIVIDE ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)<br /> 61435 IF N(C) = 0 THEN GOTO 61480<br /> 61440 N(6) = N(6) / N(C)<br /> 61445 NEXT C<br /> 61480 VTAB 9: HTAB 1: PRINT " "<br /> 61482 VTAB 9: HTAB 1: PRINT " ALRIGHT THEN. THE FIRST NUMBER DIVIDED BY THE OTHERS, ONE BY ONE IS ";N(6)<br /> 61484 HTAB 39: VTAB 23: GET O$<br /> 61486 GOTO 61000<br /> 61490 VTAB 9: HTAB 1: PRINT " "<br /> 61492 VTAB 9: HTAB 1: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE FIRST NUMBER DIVIDED BY EVERYTHING ELSE, ONE BY ONE IS ";N(6)<br /> 61494 HTAB 39: VTAB 23: GET O$<br /> 61496 GOTO 61000<br /> 62000 REM {RUN PROGRAM}<br /> 62005 VTAB 1: HTAB 1: PRINT " ________________________________________"<br /> 62010 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE THAT YOU WISH TO RUN IS ";I$<br /> 62011 IF I$ = "" THEN GOTO RETURN<br /> 62015 PRINT D$;"-";I$<br /> 62020 GOTO 40<br /> 63000 REM {ABOUT THIS APPLE}<br /> 63003 TEXT : PRINT CHR$ (21): HOME<br /> 63004 INVERSE : PRINT "GRAPEDESK 1.2 ABOUT THIS APPLE"<br /> 63005 NORMAL :LOC = 49048: PRINT "MACHINE ID BYTE:"LOC" ($BF98)"<br /> 63010 P = PEEK (LOC): PRINT " VALUE:"P" ($";:P1 = P - INT (P / 16) * 16:P2 = INT (P / 16): PRINT CHR$ (P2 + 48 + 7 * (P2 &gt; 9)) CHR$ (P1 + 48 + 7 * (P1 &gt; 9))")"<br /> 63015 PRINT " BITS:";: FOR I = 1 TO 8:BIT(I) = P - INT (P / 2) * 2: HTAB 18 - I - (I &gt; 4): PRINT BIT(I);:P = INT (P / 2): NEXT : PRINT : PRINT : REM BIT#1.ON.RIGHT/BIT#8.ON.LEFT 25 TYPE = 4 * BIT(8) + 2 * BIT(7) + BIT(4):APL$(0) = "II+"<br /> 63020 K = 2 * BIT(6) + BIT(5):MEM(1) = 48:MEM(2) = 64:MEM(3) = 128<br /> 63025 HUH$(0) = "NO":HUH$(1) = "YES"<br /> 63030 IF TYPE &lt; &gt; 4 AND TYPE &lt; &gt; 5 THEN 63050<br /> 63035 PRINT "THIS IS AN APPLE "APL$(TYPE)" WITH "MEM(K)"K."<br /> 63040 PRINT " CLOCK:"HUH$(BIT(1))<br /> 63045 PRINT " 80-COLUMNS:"HUH$(BIT(2))<br /> 63050 PRINT<br /> 63055 PRINT "POSSIBLE SLOT CONTENTS:"<br /> 63060 FOR SLOT = 1 TO 7: REM NO, YOU CAN'T PEEK AT SLOT 0!<br /> 63065 LOC = 49152 + 256 * SL:A$ = ""<br /> 63070 IF PEEK (LOC + 23) = 201 AND PEEK (LOC + 55) = 207 AND PEEK (LOC + 76) = 234 THEN A$ = "SILENTYPE": GOTO 600<br /> 63075 IF PEEK (LOC) = 8 AND PEEK (LOC + 1) = 120 AND PEEK (LOC + 2) = 40 THEN A$ = "CLOCK": GOTO 600<br /> 63080 IF PEEK (LOC + 5) = 24 AND PEEK (LOC + 7) = 24 THEN A$ = "COMMUNICATIONS CARD": GOTO 600<br /> 63085 IF PEEK (LOC + 5) = 56 AND PEEK (LOC + 7) = 24 THEN A$ = "SERIAL CARD"<br /> 63090 IF PEEK (LOC + 11) = 1 THEN I = INT ( PEEK (LOC + 12) / 16): IF I &lt; 10 THEN I = I + 1: RESTORE : FOR J = 1 TO I: READ A$: NEXT : GOTO 63105<br /> 63095 DATA USED,PRINTER,JOYSTICK,I/O CARD,MODEM,AUDIO CARD,CLOCK,MASS STORAGE,80-COLUMN CARD,NETWORK CARD<br /> 63100 IF PEEK (LOC + 5) = 72 AND PEEK (LOC + 7) = 72 THEN A$ = "PARALLEL CARD"<br /> 63105 FOR J = 48946 TO 48946 + PEEK (48945):P = PEEK (J): IF P &gt; 127 THEN P = P - 128<br /> 63110 IF P &lt; 16 * SL THEN 63130<br /> 63115 DR = P - 16 * SL<br /> 63120 IF DR = 4 THEN A$ = "PROFILE"<br /> 63125 IF DR = 0 THEN A$ = "DISK DRIVE"<br /> 63130 NEXT J<br /> 63135 PRINT " SLOT "SL": ";: IF LEN (A$) THEN PRINT A$<br /> 63140 IF NOT LEN (A$) THEN PRINT "EMPTY?"<br /> 63145 NEXT SL<br /> 63150 PRINT CHR$ (4)"PREFIX": INPUT A$: PRINT "CURRENT PREFIX: "A$<br /> 63155 PRINT "LAST USED SLOT: " PEEK (48700): PRINT "LAST USED DRIVE: " PEEK (48701)<br /> 63160 VTAB 23: HTAB 39: GET O$<br /> 63170 GOTO 40<br /> 63700 REM {RANDOM JOKE}<br /> 63705 JO = RND (1) * 10<br /> 63710 JO = INT (JO)<br /> 63715 IF JO = 0 THEN JO$ = " ON A SWEDISH CHAINSAW: 'DO NOT ATTEMPT TO STOP CHAIN WITH YOUR HANDS.' "<br /> 63716 IF JO = 1 THEN JO$ = " ON A JAPANESE FOOD PROCESSOR: 'NOT TO BE USED FOR THE OTHER USE.' "<br /> 63717 IF JO = 2 THEN JO$ = " ON SAINSBURY PEANUTS: 'WARNING: CONTAINS NUTS.' "<br /> 63718 IF JO = 3 THEN JO$ = " ON BOOTS CHILDREN MEDICINE: 'DO NOT DRIVE CAR OR OPERATE MACHINERY.' "<br /> 63719 IF JO = 4 THEN JO$ = " ON A BAG OF FRITOS: 'YOU COULD BE A WINNER! NO PURCHASE NECCESARY. DETAILS INSIDE.' "<br /> 63720 IF JO = 5 THEN JO$ = " ANY MARRIED MAN SHOULD FORGET HIS MISTAKES. THERE'S NO POINT IN TWO PEOPLE REMEMBERING THE SAME THING. "<br /> 63721 IF JO = 6 THEN JO$ = " ALWAYS TAKE THE TIME TO SMELL THE ROSES...AND SOONER OR LATER YOU'LL INHALE A BEE. "<br /> 63722 IF JO = 7 THEN JO$ = " IF GENIUS IS 1% INSPIRATION AND 99% PERSPIRATION, THEN I MUST BE SHARING ELEVATORS WITH A LOT OF BRIGHT PEOPLE. "<br /> 63723 IF JO = 8 THEN JO$ = " IT'S ALWAYS DARKEST BEFORE DAWN..SO IF YOU'RE GOING TO STEAL THE NEIGHBOURS' NEWSPAPER, THAT'S THE TIME TO DO IT. "<br /> 63724 IF JO = 9 THEN JO$ = " IT TAKES FEWER MUSCLES TO SMILE THAN TO FROWN...BUT FEWER STILL TO IGNORE SOMEONE COMPLETELY. "<br /> 63725 IF JO = 10 THEN JO$ = " EAGLES MAY SOAR, BUT WEASLES DON'T GET SUCKED INTO JET ENGINES. "<br /> 63730 RETURN<br /> 63800 REM {EXIT TO PRODOS}<br /> 63805 HTAB 1: VTAB 1: PRINT " ARE YOU SURE YOU WANT TO EXIT TO PRODOS? (Y/N) ________________________________________"<br /> 63810 VTAB 3: HTAB 39: GET M$<br /> 63815 IF M$ = "Y" THEN GOTO 63835<br /> 63820 IF M$ = "N" THEN GOTO 63830<br /> 63825 GOTO 63800<br /> 63830 RETURN<br /> 63835 NORMAL : HOME : END<br /> 63900 REM {ERROR HANDLING}<br /> 63901 E = PEEK (222)<br /> 63902 IF E = 133 THEN GOSUB 63910<br /> 63903 IF E = 176 THEN GOSUB 63920<br /> 63904 IF E = 254 THEN GOSUB 63930<br /> 63905 IF E = 16 THEN GOSUB 63940<br /> 63906 IF E = 6 THEN GOSUB 63950<br /> 63907 IF E = 10 THEN GOSUB 63960<br /> 63908 GOSUB 63990: VTAB 23: HTAB 39: GET O$<br /> 63909 GOTO 20<br /> 63910 REM {DIVISION BY ZERO!?}<br /> 63912 VTAB 1: HTAB 1: PRINT " PLEASE, DON'T TRY TO DIVIDE SOMETHING BY ZERO. ________________________________________"<br /> 63914 RETURN<br /> 63920 REM {STRING TOO LONG}<br /> 63922 VTAB 1: HTAB 1: PRINT " THE APPLE HAS A LIMIT TO THE LENGTH OF STRINGS AND RESPONSES, YOU KNOW. ________________________________________"<br /> 63924 RETURN<br /> 63930 REM {FALSE RESPONSE}<br /> 63932 VTAB 1: HTAB 1: PRINT " YOU GAVE AN INVALID RESPONSE! BE SURE YOU TYPED WHAT WAS NEEDED. ________________________________________"<br /> 63934 RETURN<br /> 63940 REM {SYNTAX}<br /> 63942 VTAB 1: HTAB 1: PRINT " I DON'T KNOW WHAT YOU DID, BUT A SYNTAX ERROR OCCURED. ________________________________________"<br /> 63944 RETURN<br /> 63950 REM {FILE NOT FOUND}<br /> 63952 VTAB 1: HTAB 1: PRINT " THE FILE OR FOLDER YOU JUST REFERENCED TO WAS NOT FOUND! TRY TYPING THE FULL ADDRESS, OR CHECK IF IT REALLY EXISTS. ________________________________________"<br /> 63954 RETURN<br /> 63960 REM {WRITE PROTECTED}<br /> 63962 VTAB 1: HTAB 1: PRINT " THE FILE, DIRECTORY OR EVEN THE ENTIRE DISK IS WRITE-PROTECTED! PLEASE UNLOCK THE DISK OR FILES NEEDED. ________________________________________"<br /> 63964 RETURN<br /> 63990 FOR C = 1 TO 40<br /> 63991 X = PEEK ( - 16336)<br /> 63992 NEXT C<br /> 63993 RETURN<br />

And here's the program where the guide text is gotten from :
0 LOC = 24576 + 1: IF PEEK (103) + PEEK (104) * 256 &lt; &gt; LOC THEN POKE LOC - 1,0: POKE 103,LOC - INT (LOC / 256) * 256: POKE 104, INT (LOC / 256)<br /> 1 IF GG = 1 THEN GOTO 10<br /> 2 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"<br /> 3 NORMAL : PRINT " THIS PROGRAM STORES ALL THE TEXT FOR USE IN THE GRAPE GUIDE, AND SHOULD NOT BE RUN BY ITSELF.<br /> 4 VTAB 23: HTAB 39: GET O$<br /> 5 HOME : END<br /> 10 REM {GET CONTENTS OF GRAPE GUIDE)<br /> 14 DIM GT$(63)<br /> 15 D$ = CHR$ (4)<br /> 29 REM {PAGE 1}<br /> 30 GT$(0) = " GOOD DAY, AND THANK YOU FOR GIVING A TRY AT GRAPEDESK 1.2. THIS VERSION WAS INTENDED TO BE MUCH MORE USEFUL THAN ITS PREDECESSORS, AND IT HAS INDEED "<br /> 35 GT$(1) = " BECOME SO. INSTEAD OF GIVING A RICH TEXT MANUAL, I HAVE DECIDED TO TYPE IN ALL DOCUMENTATION IN THE GRAPE GUIDE THIS TIME. EACH FEATURE IN THE PROGRAM WILL BE EXPLAINED IN DETAIL. THE "<br /> 40 GT$(2) = " CONTENTS ARE LISTED IN THE NEXT PAGE, SO TYPE '2' AND HIT RETURN. ALSO, I WOULD BE GRATEFUL IF YOU WOULD SIGN UP FOR THE 'VALHALLA HOME SERVICES' BBS, BY TELNET AT 'VALHALLA.SYNCHRO.NET'. "<br /> 41 GT$(0) = GT$(0) + ""<br /> 42 GT$(1) = GT$(1) + ""<br /> 43 GT$(2) = GT$(2) + ""<br /> 44 REM {PAGE 2}<br /> 45 GT$(3) = " {PAGE 1} INTRODUCTION {PAGE 2} CONTENTS {PAGE 3-10} DISK UTILITIES {PAGE 4} CHANGES {PAGE 4-11} DISK UTILITIES "<br /> 50 GT$(4) = " {PAGE 12} APP. SHO. LIST {PAGE 13} GRAPE GUIDE {PAGE 14-18} DESK ACCESORIES {PAGE 19} ACCOUNT SYSTEM {PAGE 20} MODS AND PATCHES "<br /> 55 GT$(5) = " {PAGE 21} ERROR HANDLING {PAGE 22} OTHER MESSAGES "<br /> 60 GT$(6) = ""<br /> 61 GT$(3) = GT$(3) + ""<br /> 62 GT$(4) = GT$(4) + ""<br /> 63 GT$(5) = GT$(5) + "";GT$(6) = GT$(6) + ""<br /> 64 REM {PAGE 3}<br /> 65 GT$(7) = " GRAPEDESK 1.2 IS SIMILLAR TO ITS PRE- DECCESORS. DISK UTILITIES, AN APPLI- CATIONS SHORTCUT LIST, THE GRAPE GUIDE AND THE DESK ACCESORIES WERE AROUND IN PREVIOUS VERSIONS. HOWEVER, THERE ARE "<br /> 70 GT$(8) = " CHANGES; THE UPDATED APPLICATIONS SHORTCUT LIST (CHANGES LISTED ON ITS PAGE), AN INCREDIBLY SIMPLE SCREEN- SAVER, ERROR HANDLING, UPDATED CALCU- LATOR (CHANGES ON ITS PAGE), A RANDOM "<br /> 75 GT$(9) = " JOKE IN THE MAIN AND DISK UTILITIES MENU, THE LARGER GRAPE GUIDE, HAVING MACHINE.ID INTEGRATED AND A SETUP PROGRAM (EXPLAINED LATER IN THE GUIDE. "<br /> 76 GT$(7) = GT$(7) + ""<br /> 77 GT$(8) = GT$(8) + ""<br /> 78 GT$(9) = GT$(9) + ""<br /> 79 REM {PAGE 4}<br /> 80 GT$(10) = " THE DISK UTILITIES MENU HOUSES MOST OF THE FUNCTIONS THAT HANDLES FILES IN THE DISK. THE MENU GREW FROM 3 FUNC- TIONS IN THE BETA TO TODAY'S 7. EACH HAVE THEIR OWN PAGE IN THE GUIDE. "<br /> 85 GT$(11) = " THE SEVEN FUNCTIONS ARE 'VIEW FILES', 'CHANGE DIRECTORY', 'RENAME FILE/ FOLDER', 'CREATE FOLDER', 'LOCK FILE/ FOLDER' AND 'UNLOCK FILE/FOLDER'. IF YOU WISH TO USE FUNCTIONS NOT LISTED, "<br /> 90 GT$(12) = " YOU WOULD HAVE TO EXIT TO PRODOS AND DO THOSE MANUALLY. ALSO, GIVING A FALSE RESPONSE UNLEASHES AN ERROR (ERRORS ARE EXPLAINED ON THEIR OWN PAGE. "<br /> 91 GT$(10) = GT$(10) + "<br /> 92 GT$(11) = GT$(11) + ""<br /> 93 GT$(12) = GT$(12) + ""<br /> 94 REM {PAGE 5}<br /> 95 GT$(13) = " THE FIRST DISK UTILITY MADE AND ALSO THE FIRST IN THE LIST IS 'VIEW FILES', A.K.A. 'CATALOG CURRENT PREFIX' IN THE BETA, 'CATALOG PREFIX' IN V1.0 &amp; ALSO CALLED 'VIEW FILES' IN V1.1. "<br /> 100 GT$(14) = " IT IS THE EQUIVALENT OF CAT IN PRODOS. IT LISTS ALL THE FILES IN THE CURRENT PREFIX. THERE ARE NO KNOW BUGS, BUT IF YOUR CATALOG IS OVER A PAGE LONG, A "<br /> 105 GT$(15) = " BLINKING CURSOR WILL BE NEAR THE BOTTOM RIGHT CORNER (DUE TO HOW THE CODE WAS WRITTEN). "<br /> 106 GT$(13) = GT$(13) + ""<br /> 107 GT$(14) = GT$(14) + ""<br /> 108 GT$(15) = GT$(15) + ""<br /> 109 REM {PAGE 6}<br /> 110 GT$(16) = " THE SECOND IN THE LIST IS 'CHANGE DIR- ECTORY', A.K.A. 'CHANGE PREFIX' IN THE PREVIOUS VERSIONS. IT IS THE EQUIVAL- ENT OF 'PREFIX' IN PRODOS. "<br /> 115 GT$(17) = " IT CHANGES THE CURRENT PREFIX TO THE ONE GIVEN BY THE USER. IF THE NEW PRE- FIX IS IN THE CURRENT ONE, SIMPLY THE NAME CAN BE GIVEN. A FULL ADDRESS HAS TO BE GIVEN IF IT IS NOT. "<br /> 116 GT$(16) = GT$(16) + ""<br /> 117 GT$(17) = GT$(17) + ""<br /> 119 REM {PAGE 7}<br /> 120 GT$(18) = " THE THIRD IN THE LIST IS 'RENAME FILE/ FOLDER'. IT IS NEW IN THE GRAPEDESK SERIES. ITS PRODOS EQUIVALENT IS 'REN- AME'. "<br /> 125 GT$(19) = " IT RENAMES A FILE OR FOLDER STATED BY THE USER TO THE NAME GIVEN. THE NAME CAN BE GIVEN IF THE FILE/FOLDER IS IN THE CURRENT DIRECTORY, OR A FULL ADD- RESS IF OTHERWISE. "<br /> 126 GT$(18) = GT$(18) + ""<br /> 127 GT$(19) = GT$(19) + ""<br /> 129 REM {PAGE 8}<br /> 130 GT$(20) = " THE FOURTH IN THE LIST IS 'DELETE FILE/FOLDER', A.K.A. 'DELETE FILES/FO- LDERS' IN THE BETA, 'DELETE FILES' IN V1.0 AND 'DELETE FILE' IN V1.1. IT IS THE EQUIVALENT OF 'DELETE' IN PRODOS. "<br /> 135 GT$(21) = " IT DELETES THE FILE GIVEN BY THE USER. SAME RULES APPLY ABOUT GIVING EITHER THE NAME OR THE FULL ADDRESS. "<br /> 136 GT$(20) = GT$(20) + ""<br /> 137 GT$(21) = GT$(21) + ""<br /> 139 REM {PAGE 9}<br /> 140 GT$(22) = " THE FIFTH FUNCTION IS 'CREATE FOLDER', A.K.A. THE SAME IN V1.0 BUT 'CREATE DIR' IN V1.1. IT IS THE EQUIVALENT OF 'CREATE' IN PRODOS. "<br /> 145 GT$(23) = " IT CREATES A FOLDER IN THE CURRENT PREFIX WITH THE NAME GIVEN BY THE USER. IF AN INVALID FILENAME IS GIVEN, AN ERROR IS UNLEASHED. "<br /> 146 GT$(22) = GT$(22) + ""<br /> 147 GT$(23) = GT$(23) + ""<br /> 149 REM {PAGE 10}<br /> 150 GT$(24) = " THE SIXTH FUNCTION IS 'LOCK FILE/FOL- DER', A.K.A. 'LOCK FILES' I V1.1. IT IS THE EQUIVALENT OF 'LOCK' IN PRODOS. "<br /> 155 GT$(25) = " IT LOCKS THE FILE/FOLDER STATED BY THE USER. SAME RULE APPLIES ABOUT WHETHER TO GIVE SIMPLY THE NAME OR THE FULL ADDRESS. "<br /> 156 GT$(24) = GT$(24) + ""<br /> 157 GT$(25) = GT$(25) + ""<br /> 159 REM {PAGE 11}<br /> 160 GT$(26) = " THE LAST FUNCTION IS 'UNLOCK FILE/FOL- DER', A.K.A. 'UNLOCK FILE' IN V1.1. IT IS THE EQUIVALENT OF 'UNLOCK' IN PRO- DOS. "<br /> 165 GT$(27) = " IT UNLOCKS A LOCKED FILE STATED BY THE USER. SAME RULES APPLY ABOUT WHETHER TO GIVE SIMPLY A NAME OR THE FULL ADD- RESS. "<br /> 166 GT$(26) = GT$(26) + ""<br /> 167 GT$(27) = GT$(27) + ""<br /> 169 REM {PAGE 12}<br /> 170 GT$(28) = " THE NEW APPLICATIONS SHORTCUT LIST IS DIFFERENT FROM ITS PREVIOUS COUNTER- PARTS. BEFORE, TO CUSTOMIZE THE LIST, ONE WOULD HAVE TO EDIT THE CODE. NOW, ALL OF THE EIGHT SLOTS CAN BE MODIFIED "<br /> 175 GT$(29) = " INSIDE GRAPEDESK ITSELF, AND THE ADD- RESSES ARE SAVED INSIDE THE ACCOUNT FILE. AT THE LIST, PRESS THE NUMBER OF THE SLOT YOU WOULD LIKE TO USE, THEN TYPE 'R' TO RUN IT OR 'C' TO CHANGE "<br /> 180 GT$(30) = " ITS CONTENTS. ONE CAN CLEAR IT BY TYP- ING 'EMPTY'. IF THE SLOT IS EMPTY, A DIALOG AUTOMATICALLY APPEARS, ASKING FOR THE NEW ADDRESS. "<br /> 181 GT$(28) = GT$(28) + ""<br /> 182 GT$(29) = GT$(29) + ""<br /> 183 GT$(30) = GT$(30) + ""<br /> 184 REM {PAGE 13}<br /> 185 GT$(31) = " THIS NEW GRAPE GUIDE IS MUCH MORE LAR- GER AND COMPREHENSIVE THAN ITS PREDE- CCESORS. EACH FUNCTION OF GRAPEDESK HAS ITS OWN PAGE IN THE GUIDE. "<br /> 190 GT$(32) = " TO ACCESS PAGES 1-9, TYPE THE PAGE NUMBER AND HIT RETURN. TO ACCESS PAGES 10 AND ABOVE, TYPE BOTH NUMBERS WITH- OUT HITTING RETURN. FOR EXAMPLE, TO ACCESS PAGE 3, TYPE '3' &amp; HIT RETURN. "<br /> 195 GT$(33) = " TO ACCESS PAGE 13, TYPE '1' AND THEN '3' (DON'T HIT RETURN!). DESK ACCESOR- IES ARE STILL ACCESIBLE WITH D, AND YOU MAY TYPE 'Q' TO RETURN TO THE MAIN MENU. "<br /> 196 GT$(31) = GT$(31) + ""<br /> 197 GT$(32) = GT$(32) + ""<br /> 198 GT$(33) = GT$(33) + ""<br /> 199 REM {PAGE 14}<br /> 200 GT$(34) = " THE DESK ACCESORIES ARE A SET OF SMALL PROGRAMS. IT WAS PRESENT IN THE BETA (ALTHOUGH IT WAS MORE OF A MENU SINCE IT WAS ONLY ACCESIBLE FROM THE MAIN MENU). IT ADOPTED ITS PROPER FORM IN "<br /> 205 GT$(35) = " V1.0, WHERE IT CAN BE ACCESED IN MOST PROMPTS (INCLUDING THE GRAPE GUIDE). FROM ONLY TWO IN THE BETA (THE CALCUL- ATOR AND APPLE I.D.), IT HAS EVOLVED INTO TODAY'S 4; AN UPDATED CALCULATOR, "<br /> 210 GT$(36) = " A QUICK WAY TO RUN ANOTHER PROGRAM, MACHINE I.D. (PREVIOUSLY APPLE I.D.) &amp; A PLAIN, BLOCKY SCREENSAVER SHOWING AN OCEAN, THROWING WAVES AT THE HARBOR. "<br /> 211 GT$(34) = GT$(34) + ""<br /> 212 GT$(35) = GT$(35) + ""<br /> 213 GT$(36) = GT$(36) + ""<br /> 214 REM {PAGE 15}<br /> 215 GT$(37) = " THE FIRST AND MOST USEFUL DESK ACCES- ORY IS THE CALCULATOR. IT HAS THE SAME 4 FUNCTIONS OF THE BETA (I ATTEMPTED TO MAKE A FUNCTION FOR CUSTOM EQUAT- IONS, BUT IT DIDN'T MAKE IT). HOWEVER, "<br /> 220 GT$(38) = " IT NOW CAN CALCULATE UP TO 5 NUMBERS IN ONE FUNCTION, UNLIKE THE PREVIOUS VERSIONS WHICH CAN ONLY CALCULATE TWO. THE DIALOGS FOR THE FOUR FUNCTIONS; ADDITION, SUBTRACTION, MULTIPLICATION "<br /> 225 GT$(39) = " AND DIVISION; SHOULD BE SELF-EXPLANOT- ORY. "<br /> 226 GT$(37) = GT$(37) + ""<br /> 227 GT$(38) = GT$(38) + ""<br /> 228 GT$(39) = GT$(39) + ""<br /> 229 REM {PAGE 16}<br /> 230 GT$(40) = " THE SECOND IN LINE IS 'RUN PROGRAM'. IT RUNS ANY PROGRAM STATED BY THE USER. SAME RULES APPLY ABOUT WHETHER TO GIVE SIMPLY A NAME OR THE FULL ADD- REES. IT IS CONVINIENT AS IT IS IN THE "<br /> 235 GT$(41) = " DESK ACCESORIES MENU. "<br /> 236 GT$(40) = GT$(40) + ""<br /> 237 GT$(41) = GT$(41) + ""<br /> 239 REM {PAGE 17}<br /> 240 GT$(42) = " THE THIRD IS 'MACHINE I.D.'. IT WAS CALLED 'APPLE I.D.' IN THE BETA. IT LISTS ALOT OF COOL INFORMATION ABOUT THE APPLE. I ACTUALLY COPIED THE PRO- GRAM OFF A DISK IMAGE FROM ASIMOV. "<br /> 245 GT$(43) = " I WANTED TO GIVE CREDIT TO THE AUTHOR FOR THIS USEFUL PROGRAM, BUT I FORGOT WHERE I GOT IT FROM. EITHER WAY, I EX- PRESS MY GRATITUDE AND GIVE CREDIT TO WHOEVER THE AUTHOR IS. I USE THE TEXT "<br /> 250 GT$(44) = " FILE TRICK TO INTEGRATE THE PROGRAM CODE INTO GRAPEDESK. "<br /> 251 GT$(42) = GT$(42) + ""<br /> 252 GT$(43) = GT$(43) + ""<br /> 253 GT$(44) = GT$(44) + ""<br /> 254 REM {PAGE 18}<br /> 255 GT$(45) = " THE LAST DESK ACCESORY IS THE OCEAN SCREENSAVER. I MADE IT MYSELF. IT IS INCREDIBLY SIMPLE TO MAKE, BUT INEVIT- ABLY VERY POOR ON GRAPHICS AS WELL. IT PORTRAYS AN EMPTY STONE HARBOR, UNDER "<br /> 260 GT$(46) = " THE SUN, PUSHING BACK WAVES COMING FROM THE OCEAN. IT DOES FIT IN IF THE COLORS OF THE SCREENSAVER MATCH THE COLORS OF YOUR ROOM. "<br /> 261 GT$(45) = GT$(45) + ""<br /> 262 GT$(46) = GT$(46) + ""<br /> 264 REM {PAGE 19}<br /> 265 GT$(47) = " THE ACCOUNT SYSTEM WAS ACTUALLY INSTA- LLED IN V1.0, BUT WAS DISABLED BY DE- FAULT. IT FIRST ASKED THE USER TO LOG IN AT STARTUP. IT ALSO DECIDES WHETHER THE DISK UTILITIES COULD BE USED (ONLY "<br /> 270 GT$(48) = " ADMINISTRATORS COULD USE THOSE), AND ALSO DECIDES WHICH APPLICATIONS SHORT- CUT LIST WILL BE USED. ANY NEW USERS HAD TO BE CODED IN MANUALLY, AND THE ONLY USER INSTALLED WAS 'SNOWYFOX', AN "<br /> 275 GT$(49) = " ADMINISTRATOR. THE NEW ACCOUNT SYSTEM IS ENABLED BY DEFAULT. IT LETS EXISTING USERS LOG IN AND NEW USERS TO MAKE THEIR OWN ACCOU- "<br /> 280 GT$(50) = " NT. THESE ACCOUNTS EACH HAVE THEIR OWN TEXT FILE, ON WHICH THEY STORE THEIR DATA (THUS THE TERM 'ACCOUNT FILE'). THESE ACCOUNTS, FOR NOW, ONLY STORE THE DATA IN THE NEW APPLICATIONS "<br /> 281 GT$(47) = GT$(47) + ""<br /> 282 GT$(48) = GT$(48) + ""<br /> 283 GT$(49) = GT$(49) + "":GT$(50) = GT$(50) + ""<br /> 284 REM {PAGE 20}<br /> 285 GT$(51) = " SHORTCUT LIST. EXTRA, EMPTY SLOTS ARE PROVIDED FOR FUTURE ADDITIONS OR MODS TO GRAPEDESK.<br /> 290 GT$(52) = " WITH MY NEW KNOWLEDGE OF TEXT FILES, I NOW KNOW HOW TO MAKE MODS AND PATCH- ES FOR GRAPEDESK. IF YOU HAVE EXPERIE- NCE IN APPLESOFT BASIC, I WOULD BE GR- ATEFUL IF YOU COULD MAKE A MOD FOR GR- "<br /> 295 GT$(53) = " APEDESK. YOU COULD MAKE A NEW GRAPE GUIDE OR ADD TO IT. YOU COULD MAKE A BETTER SCREENSAVER. YOU COULD ADD NEW FUNCTIONS. YOU COULD DO ANYTHING, REALLY. AFTER THOSE WORK, YOU CAN "<br /> 296 GT$(51) = GT$(51) + ""<br /> 297 GT$(52) = GT$(52) + ""<br /> 298 GT$(53) = GT$(53) + ""<br /> 299 REM {PAGE 21}<br /> 300 GT$(54) = " MAKE A TEXT FILE AND WRITE THE ENTIRE NEW GRAPEDESK CODE INTO IT, THUS MAKING A SMALL-SIZE TEXT FILE THAT CAN BE 'EXEC'ED TO APPLY THE PATCH/MOD. "<br /> 305 GT$(55) = " ERROR HANDLING IS ALL THAT'S LEFT. IT WAS INTENDED TO BE MADE A LONG TIME AGO, BUT I ONLY LEARNED ABOUT 'ONERR' AFTER MAKING V1.1. THE NEW ERROR HAN- DLING TELLS YOU WHAT ERROR IT IS IF IT "<br /> 310 GT$(56) = " IS KNOWN, THEN A BEEP. ONLY THE BEEP IS GIVEN IF THE ERROR IS UNKNOWN (IF A WRONG PASSWORD WAS GIVEN AT STARTUP, THOUGH, IT ALSO MAKES ONLY THE BEEP. "<br /> 311 GT$(54) = GT$(54) + ""<br /> 312 GT$(55) = GT$(55) + ""<br /> 313 GT$(56) = GT$(56) + ""<br /> 314 REM {PAGE 22}<br /> 315 GT$(57) = " THERE WAS ACTUALLY A COMPLETED VERSION OF GRAPEDESK V1.2 LAST TIME. FOR SOME REASON, HOWEVER, I DELETED THE ENTIRE PROGRAM. I BOTH REGRET AND AM GLAD ABOUT THAT DECISION. I FEEL REGRET BE- "<br /> 320 GT$(58) = " CAUSE I WASTED ALL MY EFFORT. I FEEL GLAD, THOUGH, BECAUSE THAT DELETION MADE ME MAKE THIS MUCH MORE ENHANCED VERSION. "<br /> 325 GT$(59) = " I CODED GRAPEDESK 1.2 ENTIRELY (EXCEPT FOR MACHINE I.D.). IF YOU WOULD LIKE TO HELP, I WOULD BE GRATEFUL IF YOU JOINED VALHALLA HOME SERVICES OR MADE A MOD FOR GRAPEDESK. I BELIEVE THIS "<br /> 330 GT$(60) = " WILL BE THE LAST VERSION OF GRAPEDESK FOR THE APPLE II. "<br /> 331 GT$(57) = GT$(57) + ""<br /> 332 GT$(58) = GT$(58) + ""<br /> 333 GT$(59) = GT$(59) + "":GT$(60) = GT$(60) + ""<br /> 339 REM {PAGE 23}<br /> 340 GT$(61) = " TO INSTALL GRAPEDESK ON A SEPERATE DISK, GOTO GRAPEDESK'S DIRECTORY, TYPE 'LOAD GRAPEDESK' AND THEN TYPE 'RUN 59000'. FOLLOW THE ONSCREEN INSTRUCT- IONS TO INSTALL. "<br /> 345 GT$(62) = " IF A NON-EXISTANT FILE/FOLDER OR AN INVALID RESPONSE IS GIVEN, AN ERROR IS UNLEASHED. ANY ERROR ENCOUNTERED SENDS YOU TO THE LOGIN SCREEN INSTEAD OF THE MAIN MENU, SO THAT PEOPLE CANOT INTEN- "<br /> 350 GT$(63) = " TIONALLY CAUSE AN ERROR AT THE STARTUP SCREEN TO BREAK INTO GRAPEDESK WITHOUT LOGGING IN. "<br /> 351 GT$(61) = GT$(61) + ""<br /> 352 GT$(62) = GT$(62) + ""<br /> 353 GT$(63) = GT$(63) + ""<br /> 354 GG = 3:GG = 3 + 0<br /> 355 POKE 16383, PEEK (105): POKE 16382, PEEK (106): POKE 16381, PEEK (107): POKE 16380, PEEK (108): POKE 16379, PEEK (109): POKE 16378, PEEK (110)<br /> 360 POKE 16377, PEEK (111): POKE 16376, PEEK (112)<br /> 365 PRINT D$;"RUN GRAPEDESK"<br />

Any ideas?

*EDIT* Also, line 7 is written wrongly. It's supposed to be IF GG<>3.

magnusfalkirk's picture
Offline
Last seen: 1 day 3 hours ago
Joined: Feb 18 2007 - 11:46
Posts: 335
Re: No buffers available (repost)

I tried both of these programs in Virtual II and got a syntax error in 6 in GrapeDesk and syntax error in 0 in the other program.

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

That's strange. Both point to the memory lines. Did you perhaps made a typo? Or included the s? Maybe only Virtual II has that problem?

magnusfalkirk's picture
Offline
Last seen: 1 day 3 hours ago
Joined: Feb 18 2007 - 11:46
Posts: 335
Re: No buffers available (repost)

I did a copy and paste from the program lines you posted in your last message to Virtual II, so there was no typing involved.

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

Then I'm pretty sure the (/br)s (I can't type them with < and >) are included. It's gonna be a real tough fight to remove them (if only there's a function for "remove all (this)").

I used the code function to frame the code I posted. As you can see, it posted (/br) on the end of every line. Here's the code without the (/br)s.

1 REM 0---------------0
2 REM | GRAPEDESK 1.2 |
3 REM 0---------------0
5 REM {INITIALIZING}
9 IF GG < > 0 THEN GOTO 59000
10 D$ = CHR$ (4)
11 R$ = CHR$ (13)
14 PRINT FRE (0)
15 DIM A(5)
16 DIM U$(12)
20 REM {SPLASH SCREEN}
25 HOME : INVERSE : PRINT " WELCOME TO GRAPEDESK 1.2 MADE BY SILENT FLAMER OF EMACULATION NO PATCHES CURRENTLY INSTALLED "
30 VTAB 6: PRINT " NEW USERS SHOULD THOROUGHLY READ THE GRAPE GUIDE BEFORE USING GRAPEDESK 1.2 "
32 VTAB 11: PRINT " "
34 VTAB 16: PRINT " A USERNAME AND PASSWORD IS CURRENTLY COMPULSORY. LOG INTO YOUR ACCOUNT OR TYPE 'NEW' TO CREATE A NEW ACCOUNT "
36 VTAB 21: PRINT " "
37 NORMAL
38 GOSUB 100
40 REM {MAIN MENU}
45 HOME : INVERSE : PRINT "GRAPEDESK 1.2 MAIN MENU"
50 NORMAL : PRINT " (1) DISK UTILITIES (2) APP SHORTCUTS (3) GRAPE GUIDE (4) EXIT TO PRODOS (D) DESK ACCESORIES "
55 PRINT " INSTRUCTIONS FOR INSTALING GRAPDESK 1.2 ON A DISK ARE PROVIDED INSIDE THE GRAPE GUIDE, WHICH ALSO CONTAINS OTHER USEFUL INFO. "
60 PRINT " CHECK OUT CYBERNATIONS, AN ONLINE GAME THAT LETS YOU GOVERN YOUR OWN NATION. "
65 GOSUB 63700
66 PRINT JO$
70 VTAB 23: PRINT " AWAITING COMMAND. "
75 VTAB 23: HTAB 39: GET M$
80 IF M$ = "1" THEN GOTO 1000
81 IF M$ = "2" THEN GOTO 2000
82 IF M$ = "3" THEN GOTO 3000
83 IF M$ = "4" THEN GOSUB 63800
84 IF M$ = "D" THEN GOSUB 60000
85 GOTO 40
100 REM {USER & PW}
105 VTAB 23: HTAB 1: INPUT " USERNAME : ";U$(1)
106 IF U$(1) = "NEW" THEN GOTO 200
107 IF U$(1) = "" THEN GOTO 58100: IF U$(1) = " " THEN GOTO 58100: IF U$(1) = "Q" THEN GOTO 58100
110 PRINT D$;"RENAME ";U$(1);",READING"
115 PRINT D$;"RENAME READING,";U$(1)
120 PRINT D$;"OPEN ";U$(1)
125 PRINT D$;"READ ";U$(1)
130 INPUT O$
131 INPUT U$(2)
135 PRINT D$;"CLOSE ";U$(1)
139 VTAB 23: HTAB 1: PRINT " "
140 VTAB 23: HTAB 1: INPUT " PASSWORD : ";I$
145 IF I$ < > U$(2) THEN GOTO 950
150 RETURN
200 REM {CREATE NEW USER}
205 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CREATE NEW USER"
210 NORMAL : PRINT " GRAPEDESK 1.2 HAS A USER AND PASSWORD SYSTEM THAT LETS YOU HAVE YOUR OWN USERNAME, PASSWORD AND A PERSONALIZED APPLICATION SHORTCUTS LIST. AN ACCOUNT "
215 VTAB 7: PRINT " MAY ALSO BE USED IN FUTURE PATCHES FOR DATA STORAGE. EACH USER ACCOUNT IS STORED IN A FILE AT THE SAME PREFIX (DIRECTORY) AS GRAPEDESK. DELETING "
220 VTAB 11: PRINT " ANOTHER USER'S ACCOUNT FILE WILL NOT HELP YOU ACCESS THEIR DATA, AS DOING SO DELETES ALL DATA AND NOT ONLY ITS PASSWORD. "
225 VTAB 16: PRINT " IF YOU'VE CHANGE YOUR MIND, TYPE 'Q' AT THE FOLLOWING PROMPT TO RETURN TO THE SPLASH SCREEN. ALSO NOTE THAT MAKING A NEW ACCOUNT UNDER THE SAME NAME AS ANOTHER OVERWRITES THE OLDER. "
230 VTAB 23: HTAB 39: GET O$
235 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CREATE NEW USER"
240 NORMAL : INPUT " THE NAME OF THE NEW USER IS ";U$(1)
245 IF U$(1) = "Q" THEN GOTO 5
249 PRINT
250 INPUT " AND THE PASSWORD OF THIS ACCOUNT IS ";U$(2)
251 PRINT
255 IF U$(2) = "Q" THEN GOTO 0
256 FOR C = 3 TO 12
257 U$(C) = "NONE"
258 NEXT C
260 PRINT D$;"OPEN ";U$(1)
261 PRINT D$;"CLOSE ";U$(1)
265 PRINT D$;"DELETE ";U$(1)
270 PRINT D$;"OPEN ";U$(1)
271 PRINT D$;"WRITE ";U$(1)
275 FOR C = 1 TO 12
280 PRINT U$(C)
281 NEXT C
285 PRINT D$;"CLOSE ";U$(1)
290 PRINT " THE USER ACCOUNT WAS SUCCESSFULLY CREATED! WOULD YOU LIKE TO LOG INTO IT RIGHT NOW? "
295 VTAB 10: HTAB 13: GET M$
300 IF M$ = 'Y" THEN RETURN
305 IF M$ = "N" THEN GOTO 20
310 GOTO 295
900 REM {USER NOT FOUND}
905 VTAB 1: HTAB 1: PRINT " THE USER THAT YOU TRIED TO LOG INTO WAS NOT FOUND! ________________________________________"
910 GOTO 100
950 REM {WRONG PASSWORD}
954 FOR C = 1 TO 40
955 GOSUB 63990
960 GOTO 100
1000 REM {DISK UTILITIES}
1005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 DISK UTILITIES"
1010 NORMAL : PRINT " (1) VIEW FILES (2) CHANGE DIRECTORY (3) RENAME FILE/FOLDER (4) DELETE FILE/FOLDER (5) CREATE FOLDER "
1015 VTAB 8: PRINT " Diablo LOCK FILE/FOLDER (7) UNLOCK FILE/FOLDER (8) RETURN TO MAIN MENU "
1020 GOSUB 63700
1025 PRINT JO$
1040 VTAB 23: PRINT " AWAITING COMMAND. "
1045 VTAB 23: HTAB 39: GET M$
1050 IF M$ = "1" THEN GOTO 1100
1051 IF M$ = "2" THEN GOTO 1200
1052 IF M$ = "3" THEN GOTO 1300
1053 IF M$ = "4" THEN GOTO 1400
1054 IF M$ = "5" THEN GOTO 1500
1055 IF M$ = "6" THEN GOTO 1600
1056 IF M$ = "7" THEN GOTO 1700
1057 IF M$ = "8" THEN GOTO 40
1058 IF M$ = "D" THEN GOSUB 60000
1060 GOTO 1000
1100 REM {DU:VIEW FILES}
1105 HOME : INVERSE : PRINT "GRAPEDESK 1.2 VIEW FILES"
1110 NORMAL : PRINT D$;"CAT"
1115 VTAB 23: HTAB 39: GET O$
1120 GOTO 1000
1200 REM {DU:CHANGE DIRECTORY}
1205 VTAB 1: HTAB 1: PRINT " ________________________________________"
1210 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE DIRECTORY YOU WISH TO CHANGE TO IS ";I$
1215 PRINT D$;"PREFIX ";I$
1220 VTAB 1: HTAB 1: PRINT " CHANGE TO GIVEN DIRECTORY SUCCESSFUL. ________________________________________"
1225 VTAB 4: HTAB 39: GET O$
1230 GOTO 1000
1300 REM {DU:RENAME FILE\FOLDER}
1305 VTAB 1: HTAB 1: PRINT " ________________________________________"
1310 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO RENAME IS ";I$
1315 VTAB 1: HTAB 1: PRINT " ________________________________________"
1320 VTAB 2: HTAB 1: INPUT " THE NEW NAME OF THE FILE\FOLDER IS ";I2$
1325 PRINT D$;"RENAME ";I$;","I2$
1330 VTAB 1: HTAB 1: PRINT " RENAME OF FILE\FOLDER IS SUCCESSFUL. ________________________________________"
1335 VTAB 4: HTAB 39: GET O$
1340 GOTO 1000
1400 REM {DU:DELETE FILE\FOLDER}
1405 VTAB 1: HTAB 1: PRINT " ________________________________________"
1410 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE/FOLDER YOU WISH TO DELETE IS ";I$
1415 PRINT D$;"DELETE ";I$
1420 VTAB 1: HTAB 1: PRINT " DELETION OF THE FILE/FOLDER IS SUCCESSFUL. ________________________________________"
1425 VTAB 4: HTAB 39: GET O$
1430 GOTO 1000
1500 REM {DU:CREATE FOLDER}
1505 VTAB 1: HTAB 1: PRINT " ________________________________________"
1510 VTAB 2: HTAB 1: INPUT " THE NAME OF THE NEW FOLDER IS ";I$
1515 PRINT D$;"CREATE ";I$
1520 VTAB 1: HTAB 1: PRINT " FOLDER SUCCESSFULLY CREATED. ________________________________________"
1525 VTAB 4: HTAB 39: GET O$
1530 GOTO 1000
1600 REM {DU:LOCK FILE}
1605 VTAB 1: HTAB 1: PRINT " ________________________________________"
1610 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO LOCK IS ";I$
1615 PRINT D$;"LOCK ";I$
1620 VTAB 1: HTAB 1: PRINT " FILE\FOLDER SUCCESSFULLY LOCKED. ________________________________________"
1625 VTAB 4: HTAB 39: GET O$
1630 GOTO 1000
1700 REM {DU:UNLOCK FILE}
1705 VTAB 1: HTAB 1: PRINT " ________________________________________"
1710 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE\FOLDER YOU WISH TO UNLOCK IS ";I$
1715 PRINT D$;"UNLOCK ";I$
1720 VTAB 1: HTAB 1: PRINT " FILE\FOLDER SUCCESSFULLY UNLOCKED. ________________________________________"
1725 VTAB 4: HTAB 39: GET O$
1730 GOTO 1000
2000 REM {APP SHORTCUTS}
2005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 APPLICATION SHORTCUTS"
2006 PRINT D$;"OPEN ";U$(1)
2007 PRINT D$;"READ ";U$(1)
2008 FOR C = 1 TO 12
2009 INPUT U$(C)
2010 NEXT C
2011 PRINT D$;"CLOSE ";U$(1)
2012 NORMAL
2020 VTAB 3: PRINT " (1) ";U$(5)
2021 VTAB 4: PRINT " (2) ";U$(6)
2022 VTAB 5: PRINT " (3) ";U$(7)
2023 VTAB 6: PRINT " (4) ";U$(8)
2024 VTAB 7: PRINT " (5) ";U$(9)
2025 VTAB 8: PRINT " Diablo ";U$(10)
2026 VTAB 9: PRINT " (7) ";U$(11)
2027 VTAB 10: PRINT " (8) ";U$(12)
2028 VTAB 11: PRINT " (9) RETURN TO MAIN MENU "
2030 VTAB 23: PRINT " AWAITING COMMAND. "
2035 VTAB 23: HTAB 39: GET M$
2040 IF M$ = "1" THEN GOTO 2100
2041 IF M$ = "2" THEN GOTO 2200
2042 IF M$ = "3" THEN GOTO 2300
2043 IF M$ = "4" THEN GOTO 2400
2044 IF M$ = "5" THEN GOTO 2500
2045 IF M$ = "6" THEN GOTO 2600
2046 IF M$ = "7" THEN GOTO 2700
2047 IF M$ = "8" THEN GOTO 2800
2050 IF M$ = "D" THEN GOSUB 60000
2055 IF M$ = "9" THEN GOTO 40
2060 GOTO 2000
2100 IF U$(5) = "NONE" THEN GOTO 2150
2105 VTAB 3: HTAB 39: GET M$
2110 IF M$ = "C" THEN GOTO 2140
2115 IF M$ = "R" THEN GOTO 2125
2120 GOTO 2000
2125 PRINT D$;"-";U$(5)
2140 VTAB 1: HTAB 1: PRINT " ________________________________________"
2142 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";I$
2143 U$(5) = I$
2144 GOSUB 2900
2146 GOTO 2000
2150 VTAB 1: HTAB 1: PRINT " ________________________________________"
2155 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(5)
2160 GOSUB 2900
2165 GOTO 2000
2200 IF U$(6) = "NONE" THEN GOTO 2250
2205 VTAB 4: HTAB 39: GET M$
2210 IF M$ = "C" THEN GOTO 2240
2215 IF M$ = "R" THEN GOTO 2225
2220 GOTO 2000
2225 PRINT D$;"RUN ";U$(6)
2240 VTAB 1: HTAB 1: PRINT " ________________________________________"
2242 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(6)
2244 GOSUB 2900
2246 GOTO 2000
2250 VTAB 1: HTAB 1: PRINT " ________________________________________"
2255 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(6)
2260 GOSUB 2900
2265 GOTO 2000
2300 IF U$(7) = "NONE" THEN GOTO 2350
2305 VTAB 5: HTAB 39: GET M$
2310 IF M$ = "C" THEN GOTO 2340
2315 IF M$ = "R" THEN GOTO 2325
2320 GOTO 2000
2325 PRINT D$;"-";U$(7)
2340 VTAB 1: HTAB 1: PRINT " ________________________________________"
2342 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(7)
2344 GOSUB 2900
2346 GOTO 2000
2350 VTAB 1: HTAB 1: PRINT " ________________________________________"
2355 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS IN THIS SLOT IS ";U$(7)
2360 GOSUB 2900
2365 GOTO 2000
2400 IF U$(8) = "NONE" THEN GOTO 2450
2405 VTAB 6: HTAB 39: GET M$
2410 IF M$ = "C" THEN GOTO 2440
2415 IF M$ = "R" THEN GOTO 2425
2420 GOTO 2000
2425 PRINT D$;"-";U$(8)
2440 VTAB 1: HTAB 1: PRINT " ________________________________________"
2442 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(8)
2444 GOSUB 2900
2446 GOTO 2000
2450 VTAB 1: HTAB 1: PRINT " ________________________________________"
2455 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(8)
2460 GOSUB 2900
2465 GOTO 2000
2500 IF U$(9) = "NONE" THEN GOTO 2550
2505 VTAB 7: HTAB 39: GET M$
2510 IF M$ = "C" THEN GOTO 2540
2515 IF M$ = "R" THEN GOTO 2525
2520 GOTO 2000
2525 PRINT D$;"-";U$(8)
2540 VTAB 1: HTAB 1: PRINT " ________________________________________"
2542 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(9)
2544 GOSUB 2900
2546 GOTO 2000
2550 VTAB 1: HTAB 1: PRINT " ________________________________________"
2555 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(9)
2560 GOSUB 2900
2565 GOTO 2000
2600 IF U$(10) = "NONE" THEN GOTO 2650
2605 VTAB 8: HTAB 39: GET M$
2610 IF M$ = "C" THEN GOTO 2640
2615 IF M$ = "R" THEN GOTO 2625
2620 GOTO 2000
2625 PRINT D$;"-";U$(10)
2640 VTAB 1: HTAB 1: PRINT " ________________________________________"
2642 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(10)
2644 GOSUB 2900
2646 GOTO 2000
2650 VTAB 1: HTAB 1: PRINT " ________________________________________"
2655 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(10)
2660 GOSUB 2900
2665 GOTO 2000
2700 IF U$(11) = "NONE" THEN GOTO 2750
2705 VTAB 9: HTAB 39: GET M$
2710 IF M$ = "C" THEN GOTO 2740
2715 IF M$ = "R" THEN GOTO 2725
2720 GOTO 2000
2725 PRINT D$;"-";U$(11)
2740 VTAB 1: HTAB 1: PRINT " ________________________________________"
2742 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(11)
2744 GOSUB 2900
2746 GOTO 2000
2750 VTAB 1: HTAB 1: PRINT " ________________________________________"
2755 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(11)
2760 GOSUB 2900
2765 GOTO 2000
2800 IF U$(12) = "NONE" THEN GOTO 2850
2805 VTAB 10: HTAB 39: GET M$
2810 IF M$ = "C" THEN GOTO 2840
2815 IF M$ = "R" THEN GOTO 2825
2820 GOTO 2000
2825 PRINT D$;"-";U$(12)
2840 VTAB 1: HTAB 1: PRINT " ________________________________________"
2842 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(12)
2844 GOSUB 2900
2846 GOTO 2000
2850 VTAB 1: HTAB 1: PRINT " ________________________________________"
2855 VTAB 2: HTAB 1: INPUT " THE SLOT IS CURRENTLY EMPTY. THE NEW ADDRESS FOR THIS SLOT IS ";U$(12)
2860 GOSUB 2900
2865 GOTO 2000
2900 REM {SAVE CHANGES}
2901 PRINT D$;"OPEN ";U$(1)
2902 PRINT D$;"CLOSE ";U$(1)
2903 PRINT D$;"DELETE ";U$(1)
2905 PRINT D$;"OPEN ";U$(1)
2910 PRINT D$;"WRITE ";U$(1)
2915 FOR C = 1 TO 12
2920 PRINT U$(C)
2925 NEXT C
2930 PRINT D$;"CLOSE ";U$(1)
2935 RETURN
3000 REM {GRAPE GUIDE}
3005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 GRAPE GUIDE"
3010 GG = 1
3011 PRINT D$;"BLOAD CHAIN,A520"
3012 CALL 520"G.G.TEXT"
3015 NORMAL : PRINT GT$(0)
3020 VTAB 7: PRINT GT$(1)
3025 VTAB 12: PRINT GT$(2)
3030 VTAB 23: PRINT " [PAGE #1][INTRODUCTION] "
3035 VTAB 23: HTAB 26: GET M$
3036 VTAB 23: HTAB 26: GET M2$
3040 GOSUB 59500
3045 GOTO 3000
58100 HOME : END
59500 REM {G.G. NAVIGATION}
59505 IF M$ = "1" AND M2$ = R$ THEN GOTO 3100
59506 IF M$ = "2" AND M2$ = R$ THEN GOTO 3100
59507 IF M$ = "3" AND M2$ = R$ THEN GOTO 3200
59508 IF M$ = "4" AND M2$ = R$ THEN GOTO 3300
59509 IF M$ = "5" AND M2$ = R$ THEN GOTO 3400
59510 GOTO 10
59511 IF M$ = "7" AND M2$ = R$ THEN GOTO 3600
59512 IF M$ = "8" AND M2$ = R$ THEN GOTO 3700
59513 IF M$ = "9" AND M2$ = R$ THEN GOTO 3800
59514 IF M$ = "1" AND M2$ = "0" THEN GOTO 3900
59515 IF M$ = "1" AND M2$ = "1" THEN GOTO 4000
59516 IF M$ = "1" AND M2$ = "2" THEN GOTO 4100
59517 IF M$ = "1" AND M2$ = "3" THEN GOTO 4200
59518 IF M$ = "1" AND M2$ = "4" THEN GOTO 4300
59519 IF M$ = "1" AND M2$ = "5" THEN GOTO 4400
59520 IF M$ = "1" AND M2$ = "6" THEN GOTO 4500
59521 IF M$ = "1" AND M2$ = "7" THEN GOTO 4600
59522 IF M$ = "1" AND M2$ = "8" THEN GOTO 4700
59523 IF M$ = "1" AND M2$ = "9" THEN GOTO 4800
59524 IF M$ = "2" AND M2$ = "0" THEN GOTO 4900
59525 IF M$ = "2" AND M2$ = "1" THEN GOTO 5000
59526 IF M$ = "2" AND M2$ = "2" THEN GOTO 5100
59527 IF M$ = "2" AND M2$ = "3" THEN GOTO 5200
59597 IF M$ = "Q" THEN GOTO 40
59598 IF M$ = "D" THEN GOSUB 60000
59599 RETURN
59702 REM {OCEAN SCREENSAVER}
59704 GR
59706 POKE - 16302,0
59708 GOTO 59900
59710 COLOR= 15
59712 FOR C = 0 TO 9
59714 IF C > 9 THEN GOTO 59750
59716 VLIN 36,47 AT C
59718 NEXT C
59750 REM {OCEAN}
59752 COLOR= 2
59754 FOR C = 10 TO 39
59756 IF C > 39 THEN GOTO 59800
59758 VLIN 37,47 AT C
59760 NEXT C
59800 REM {SMALL WAVE}
59802 IF PEEK ( - 16384) > 127 THEN GOTO 59950
59804 FOR X = 10 TO 39
59806 IF X > 39 THEN GOTO 59850
59808 PLOT X,36
59810 FOR D = 1 TO 40
59812 NEXT D
59814 COLOR= 6
59816 PLOT X,36
59818 COLOR= 2
59820 NEXT X
59850 REM {DELAY & BACK}
59852 IF PEEK ( - 16384) > 127 THEN GOTO 59950
59854 FOR D = 1 TO 1000
59856 NEXT D
59858 X = X - 1
59860 IF X < 10 THEN GOTO 59800
59862 PLOT X,36
59864 FOR D = 1 TO 40
59866 NEXT D
59868 COLOR= 6
59870 PLOT X,36
59872 COLOR= 2
59874 GOTO 59858
59900 REM {PAINT SKY}
59902 COLOR= 6
59904 FOR C = 0 TO 39
59906 IF C > 39 THEN GOTO 59912
59908 VLIN 0,47 AT C
59910 NEXT C
59912 COLOR= 13
59914 PLOT 37,0: PLOT 38,0: PLOT 39,0: PLOT 37,1: PLOT 38,1: PLOT 39,1: PLOT 37,2: PLOT 38,2: PLOT 39,2
59916 GOTO 59710
59950 REM {KEY PRESSED}
59952 POKE - 16368,0
59954 TEXT : HOME
59956 RETURN
60000 REM {DESK ACCESORIES}
60005 HTAB 1: VTAB 1: PRINT " (1) CALCULATOR (2) RUN PROGRAM (3) MACHINE ID (4) SCREENSAVER "
60010 HTAB 1: VTAB 6: PRINT " AWAITING COMMAND. ________________________________________"
60015 HTAB 39: VTAB 7: GET M$
60020 IF M$ = "1" THEN GOTO 61000
60025 IF M$ = "2" THEN GOTO 62000
60030 IF M$ = "3" THEN GOTO 63000
60035 IF M$ = "4" THEN GOSUB 59702
60040 RETURN
61000 REM {CALCULATOR}
61001 FOR C = 1 TO 6
61002 N(C) = 0
61003 NEXT C
61005 HOME : INVERSE : PRINT "GRAPEDESK 1.2 CALCULATOR"
61010 NORMAL : PRINT " (1) ADDITION (2) SUBTRACTION (3) MULTIPLICATION (4) DIVISION ( ) RETURN TO PREVIOUS MENU "
61015 VTAB 23: PRINT " AWAITING COMMAND. "
61020 VTAB 23: HTAB 39: GET M$
61025 IF M$ = "1" THEN GOTO 61100
61030 IF M$ = "2" THEN GOTO 61200
61035 IF M$ = "3" THEN GOTO 61300
61040 IF M$ = "4" THEN GOTO 61400
61050 GOTO 40
61100 REM {CALC:ADD}
61101 VTAB 9: HTAB 1: INPUT " WHAT'S THE FIRST NUMBER TO ADD? ";N(1)
61102 VTAB 9: PRINT " "
61103 N(6) = 0
61105 FOR C = 2 TO 6
61106 IF C > 5 THEN GOTO 61180
61110 VTAB 9: INPUT " WHAT'S THE NEXT NUMBER TO ADD IN? TYPE 0 TO SUM UP ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)
61111 N(6) = N(1) + N(2) + N(3) + N(4) + N(5)
61115 IF N(C) = 0 THEN GOTO 61190
61130 NEXT C
61180 VTAB 9: PRINT " "
61182 VTAB 9: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE SUM FOR EVERYTHING IS ";N(6)
61183 HTAB 39: VTAB 23: GET O$
61185 GOTO 61196
61190 VTAB 9: PRINT " "
61192 VTAB 9: PRINT " ALRIGHT THEN. THE SUM FOR EVERYTHING SO FAR IS ";N(6)
61195 HTAB 39: VTAB 23: GET O$
61196 GOTO 61000
61200 REM {CALC:SUBTR}
61201 N(6) = 0
61205 VTAB 9: HTAB 1: INPUT " WHAT'S THE BIGGEST NUMBER? ";N(1)
61210 VTAB 9: PRINT " "
61215 FOR C = 2 TO 6
61220 IF C > 5 THEN GOTO 61280
61225 VTAB 9: INPUT " WHAT'S THE NEXT NUMBER TO SUBTRACT FROM THE BIGGEST NUMBER? TYPE 0 TO SUBTRACT ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)
61226 N(6) = N(1) - N(2) - N(3) - N(4) - N(5)
61230 IF N(C) = 0 THEN GOTO 61290
61235 NEXT C
61280 VTAB 9: PRINT " "
61282 VTAB 9: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE FIRST NUMBER MINUS EVERYTHING ELSE IS ";N(6)
61284 VTAB 23: HTAB 39: GET O$
61286 GOTO 61000
61290 VTAB 9: PRINT " "
61292 VTAB 9: PRINT " ALRIGHT THEN. THE FIRST NUMBER MINUS EACH OTHER NUMBER IS ";N(6)
61294 VTAB 23: HTAB 39: GET O$
61296 GOTO 61000
61300 REM {CALC:MULTI}
61305 N(6) = 0
61310 VTAB 9: HTAB 1: INPUT " WHAT IS THE FIRST NUMBER TO MULTIPLY WITH? ";N(1)
61311 N(6) = N(1)
61315 FOR C = 2 TO 6
61320 IF C > 5 THEN GOTO 61390
61325 VTAB 9: HTAB 1: INPUT " WHAT IS THE NEXT NUMBER TO MULTIPLY WITH? TYPE 0 TO MULTIPLY ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)
61330 IF N(C) = 0 THEN GOTO 61380
61335 N(6) = N(6) * N(C)
61340 NEXT C
61380 VTAB 9: HTAB 1: PRINT " "
61382 VTAB 9: HTAB 1: PRINT " ALRIGHT THEN. THE PRODUCT OF ALL THE NUMBERS WE HAVE SO FAR IS ";N(6)
61384 HTAB 39: VTAB 23: GET O$
61386 GOTO 61000
61390 VTAB 9: HTAB 1: PRINT " "
61392 VTAB 9: HTAB 1: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE PRODUCT OF ALL THE NUMBERS SO FAR IS ";N(6)
61394 HTAB 39: VTAB 23: GET O$
61396 GOTO 61000
61400 REM {CALC:DIVISION}
61405 N(6) = 0
61410 VTAB 9: HTAB 1: INPUT " WHAT IS THE FIRST NUMBER TO DIVIDE EVERYTHING ELSE WITH? ";N(1)
61415 N(6) = N(1)
61420 FOR C = 2 TO 6
61425 IF C > 5 THEN GOTO 61490
61430 VTAB 9: HTAB 1: INPUT " WHAT IS THE NEXT NUMBER TO BE DIVIDED BY THE FIRST NUMBER? TYPE 0 TO DIVIDE ALL THE NUMBERS WE HAVE SO FAR. : ";N(C)
61435 IF N(C) = 0 THEN GOTO 61480
61440 N(6) = N(6) / N(C)
61445 NEXT C
61480 VTAB 9: HTAB 1: PRINT " "
61482 VTAB 9: HTAB 1: PRINT " ALRIGHT THEN. THE FIRST NUMBER DIVIDED BY THE OTHERS, ONE BY ONE IS ";N(6)
61484 HTAB 39: VTAB 23: GET O$
61486 GOTO 61000
61490 VTAB 9: HTAB 1: PRINT " "
61492 VTAB 9: HTAB 1: PRINT " I THINK THAT'S ENOUGH NUMBERS FOR NOW. THE FIRST NUMBER DIVIDED BY EVERYTHING ELSE, ONE BY ONE IS ";N(6)
61494 HTAB 39: VTAB 23: GET O$
61496 GOTO 61000
62000 REM {RUN PROGRAM}
62005 VTAB 1: HTAB 1: PRINT " ________________________________________"
62010 VTAB 2: HTAB 1: INPUT " THE ADDRESS OF THE FILE THAT YOU WISH TO RUN IS ";I$
62011 IF I$ = "" THEN GOTO RETURN
62015 PRINT D$;"-";I$
62020 GOTO 40
63000 REM {ABOUT THIS APPLE}
63003 TEXT : PRINT CHR$ (21): HOME
63004 INVERSE : PRINT "GRAPEDESK 1.2 ABOUT THIS APPLE"
63005 NORMAL :LOC = 49048: PRINT "MACHINE ID BYTE:"LOC" ($BF98)"
63010 P = PEEK (LOC): PRINT " VALUE:"P" ($";:P1 = P - INT (P / 16) * 16:P2 = INT (P / 16): PRINT CHR$ (P2 + 48 + 7 * (P2 > 9)) CHR$ (P1 + 48 + 7 * (P1 > 9))")"
63015 PRINT " BITS:";: FOR I = 1 TO 8:BIT(I) = P - INT (P / 2) * 2: HTAB 18 - I - (I > 4): PRINT BIT(I);:P = INT (P / 2): NEXT : PRINT : PRINT : REM BIT#1.ON.RIGHT/BIT#8.ON.LEFT 25 TYPE = 4 * BIT(8) + 2 * BIT(7) + BIT(4):APL$(0) = "II+"
63020 K = 2 * BIT(6) + BIT(5):MEM(1) = 48:MEM(2) = 64:MEM(3) = 128
63025 HUH$(0) = "NO":HUH$(1) = "YES"
63030 IF TYPE < > 4 AND TYPE < > 5 THEN 63050
63035 PRINT "THIS IS AN APPLE "APL$(TYPE)" WITH "MEM(K)"K."
63040 PRINT " CLOCK:"HUH$(BIT(1))
63045 PRINT " 80-COLUMNS:"HUH$(BIT(2))
63050 PRINT
63055 PRINT "POSSIBLE SLOT CONTENTS:"
63060 FOR SLOT = 1 TO 7: REM NO, YOU CAN'T PEEK AT SLOT 0!
63065 LOC = 49152 + 256 * SL:A$ = ""
63070 IF PEEK (LOC + 23) = 201 AND PEEK (LOC + 55) = 207 AND PEEK (LOC + 76) = 234 THEN A$ = "SILENTYPE": GOTO 600
63075 IF PEEK (LOC) = 8 AND PEEK (LOC + 1) = 120 AND PEEK (LOC + 2) = 40 THEN A$ = "CLOCK": GOTO 600
63080 IF PEEK (LOC + 5) = 24 AND PEEK (LOC + 7) = 24 THEN A$ = "COMMUNICATIONS CARD": GOTO 600
63085 IF PEEK (LOC + 5) = 56 AND PEEK (LOC + 7) = 24 THEN A$ = "SERIAL CARD"
63090 IF PEEK (LOC + 11) = 1 THEN I = INT ( PEEK (LOC + 12) / 16): IF I < 10 THEN I = I + 1: RESTORE : FOR J = 1 TO I: READ A$: NEXT : GOTO 63105
63095 DATA USED,PRINTER,JOYSTICK,I/O CARD,MODEM,AUDIO CARD,CLOCK,MASS STORAGE,80-COLUMN CARD,NETWORK CARD
63100 IF PEEK (LOC + 5) = 72 AND PEEK (LOC + 7) = 72 THEN A$ = "PARALLEL CARD"
63105 FOR J = 48946 TO 48946 + PEEK (48945):P = PEEK (J): IF P > 127 THEN P = P - 128
63110 IF P < 16 * SL THEN 63130
63115 DR = P - 16 * SL
63120 IF DR = 4 THEN A$ = "PROFILE"
63125 IF DR = 0 THEN A$ = "DISK DRIVE"
63130 NEXT J
63135 PRINT " SLOT "SL": ";: IF LEN (A$) THEN PRINT A$
63140 IF NOT LEN (A$) THEN PRINT "EMPTY?"
63145 NEXT SL
63150 PRINT CHR$ (4)"PREFIX": INPUT A$: PRINT "CURRENT PREFIX: "A$
63155 PRINT "LAST USED SLOT: " PEEK (48700): PRINT "LAST USED DRIVE: " PEEK (48701)
63160 VTAB 23: HTAB 39: GET O$
63170 GOTO 40
63700 REM {RANDOM JOKE}
63705 JO = RND (1) * 10
63710 JO = INT (JO)
63715 IF JO = 0 THEN JO$ = " ON A SWEDISH CHAINSAW: 'DO NOT ATTEMPT TO STOP CHAIN WITH YOUR HANDS.' "
63716 IF JO = 1 THEN JO$ = " ON A JAPANESE FOOD PROCESSOR: 'NOT TO BE USED FOR THE OTHER USE.' "
63717 IF JO = 2 THEN JO$ = " ON SAINSBURY PEANUTS: 'WARNING: CONTAINS NUTS.' "
63718 IF JO = 3 THEN JO$ = " ON BOOTS CHILDREN MEDICINE: 'DO NOT DRIVE CAR OR OPERATE MACHINERY.' "
63719 IF JO = 4 THEN JO$ = " ON A BAG OF FRITOS: 'YOU COULD BE A WINNER! NO PURCHASE NECCESARY. DETAILS INSIDE.' "
63720 IF JO = 5 THEN JO$ = " ANY MARRIED MAN SHOULD FORGET HIS MISTAKES. THERE'S NO POINT IN TWO PEOPLE REMEMBERING THE SAME THING. "
63721 IF JO = 6 THEN JO$ = " ALWAYS TAKE THE TIME TO SMELL THE ROSES...AND SOONER OR LATER YOU'LL INHALE A BEE. "
63722 IF JO = 7 THEN JO$ = " IF GENIUS IS 1% INSPIRATION AND 99% PERSPIRATION, THEN I MUST BE SHARING ELEVATORS WITH A LOT OF BRIGHT PEOPLE. "
63723 IF JO = 8 THEN JO$ = " IT'S ALWAYS DARKEST BEFORE DAWN..SO IF YOU'RE GOING TO STEAL THE NEIGHBOURS' NEWSPAPER, THAT'S THE TIME TO DO IT. "
63724 IF JO = 9 THEN JO$ = " IT TAKES FEWER MUSCLES TO SMILE THAN TO FROWN...BUT FEWER STILL TO IGNORE SOMEONE COMPLETELY. "
63725 IF JO = 10 THEN JO$ = " EAGLES MAY SOAR, BUT WEASLES DON'T GET SUCKED INTO JET ENGINES. "
63730 RETURN
63800 REM {EXIT TO PRODOS}
63805 HTAB 1: VTAB 1: PRINT " ARE YOU SURE YOU WANT TO EXIT TO PRODOS? (Y/N) ________________________________________"
63810 VTAB 3: HTAB 39: GET M$
63815 IF M$ = "Y" THEN GOTO 63835
63820 IF M$ = "N" THEN GOTO 63830
63825 GOTO 63800
63830 RETURN
63835 NORMAL : HOME : END
63900 REM {ERROR HANDLING}
63901 E = PEEK (222)
63902 IF E = 133 THEN GOSUB 63910
63903 IF E = 176 THEN GOSUB 63920
63904 IF E = 254 THEN GOSUB 63930
63905 IF E = 16 THEN GOSUB 63940
63906 IF E = 6 THEN GOSUB 63950
63907 IF E = 10 THEN GOSUB 63960
63908 GOSUB 63990: VTAB 23: HTAB 39: GET O$
63909 GOTO 20
63910 REM {DIVISION BY ZERO!?}
63912 VTAB 1: HTAB 1: PRINT " PLEASE, DON'T TRY TO DIVIDE SOMETHING BY ZERO. ________________________________________"
63914 RETURN
63920 REM {STRING TOO LONG}
63922 VTAB 1: HTAB 1: PRINT " THE APPLE HAS A LIMIT TO THE LENGTH OF STRINGS AND RESPONSES, YOU KNOW. ________________________________________"
63924 RETURN
63930 REM {FALSE RESPONSE}
63932 VTAB 1: HTAB 1: PRINT " YOU GAVE AN INVALID RESPONSE! BE SURE YOU TYPED WHAT WAS NEEDED. ________________________________________"
63934 RETURN
63940 REM {SYNTAX}
63942 VTAB 1: HTAB 1: PRINT " I DON'T KNOW WHAT YOU DID, BUT A SYNTAX ERROR OCCURED. ________________________________________"
63944 RETURN
63950 REM {FILE NOT FOUND}
63952 VTAB 1: HTAB 1: PRINT " THE FILE OR FOLDER YOU JUST REFERENCED TO WAS NOT FOUND! TRY TYPING THE FULL ADDRESS, OR CHECK IF IT REALLY EXISTS. ________________________________________"
63954 RETURN
63960 REM {WRITE PROTECTED}
63962 VTAB 1: HTAB 1: PRINT " THE FILE, DIRECTORY OR EVEN THE ENTIRE DISK IS WRITE-PROTECTED! PLEASE UNLOCK THE DISK OR FILES NEEDED. ________________________________________"
63964 RETURN
63990 FOR C = 1 TO 40
63991 X = PEEK ( - 16336)
63992 NEXT C
63993 RETURN

*EDIT* This won't work either, as the forum changes the "textual smileys" into graphical ones. Copying and pasting the smiley doesn't yield the original text, so yeah.

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

This might seem ridiculous, but uploading it to Rapidshare seems to be the only way I could post a copyable and pastable copy of the code.

https://rapidshare.com/files/465285740/GRAPEDESK.txt

Hope you can help out here.

magnusfalkirk's picture
Offline
Last seen: 1 day 3 hours ago
Joined: Feb 18 2007 - 11:46
Posts: 335
Re: No buffers available (repost)

This might seem ridiculous, but uploading it to Rapidshare seems to be the only way I could post a copyable and pastable copy of the code.

https://rapidshare.com/files/465285740/GRAPEDESK.txt

Hope you can help out here.

Downloaded it and did a cut and paste into Virtual II, saved it to a disk with Prodos and Basic System 1.5. Tried to run it and got "?UNDEF'D STATEMENT ERROR IN 38". Tried to list line 38 and it's not there. Type list and end up with it listing from 14000 to 63993, and we know there is no 14000 in the program listing.

If I remove line 38 I get to the main menu but have problems from there.

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

This might seem ridiculous, but uploading it to Rapidshare seems to be the only way I could post a copyable and pastable copy of the code.

https://rapidshare.com/files/465285740/GRAPEDESK.txt

Hope you can help out here.

Downloaded it and did a cut and paste into Virtual II, saved it to a disk with Prodos and Basic System 1.5. Tried to run it and got "?UNDEF'D STATEMENT ERROR IN 38". Tried to list line 38 and it's not there. Type list and end up with it listing from 14000 to 63993, and we know there is no 14000 in the program listing.

If I remove line 38 I get to the main menu but have problems from there.

That would be around the same problem as me. In this case, are there any other alternatives?

The last resort would be to just make the Grape Guide a really small guide and put all other useful info in a rich text manual, like the previous versions.

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

So, what are the alternatives (at least, without using the chaining trick)?
Or is there no other way but to make the guide smaller?

It would be nice if you friendly people could give me an answer, so I can begin working on the program again.

Offline
Last seen: 12 years 2 months ago
Joined: Aug 21 2012 - 21:42
Posts: 19
Re: No buffers available (repost)

Oh well. Guess there is no other way...Thanks for the help, guys.

Log in or register to post comments