No buffers available (repost)

24 replies [Last post]
Offline
Joined: Aug 22 2012
Posts: 19

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

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
Offline
Joined: Aug 22 2012
Posts: 19
Re: No buffers available (repost)

Here is the [url=https://rapidshare.com/files/1671454570/Grapedesk%201.2%20(Bugged).po]disk image[/url].

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 & 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$ <  > 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 " (6) 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 " (6) ";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 > 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 > 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) > 127 THEN  GOTO 59950<br />
 59804  FOR X = 10 TO 39<br />
 59806  IF X > 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 & BACK}<br />
 59852  IF  PEEK ( - 16384) > 127 THEN  GOTO 59950<br />
 59854  FOR D = 1 TO 1000<br />
 59856  NEXT D<br />
 59858 X = X - 1<br />
 59860  IF X < 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 > 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 > 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 > 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 > 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 > 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 > 9)) CHR$ (P1 + 48 + 7 * (P1 > 9))")"<br />
 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+"<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 <  > 4 AND TYPE <  > 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 < 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 > 127 THEN P = P - 128<br />
 63110  IF P < 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 />

david__schmidt's picture
Offline
Joined: Apr 11 2006
Posts: 913
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
Joined: Aug 22 2012
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?

david__schmidt's picture
Offline
Joined: Apr 11 2006
Posts: 913
Re: No buffers available (repost)

Snowyfox wrote:

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.

Snowyfox wrote:

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.

Snowyfox wrote:

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
Joined: Aug 22 2012
Posts: 19
Re: No buffers available (repost)

david__schmidt wrote:
Snowyfox wrote:

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.

Snowyfox wrote:

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$?

Snowyfox wrote:

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?

david__schmidt's picture
Offline
Joined: Apr 11 2006
Posts: 913
Re: No buffers available (repost)

Snowyfox wrote:

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
Joined: Dec 11 2008
Posts: 262
Re: No buffers available (repost)

david__schmidt wrote:
Snowyfox wrote:

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.

__________________

Email me:
Mac GUI Vault: http://macgui.com/vault/
Apple II Book: http://macgui.com/newa2guide/

Offline
Joined: Aug 22 2012
Posts: 19
Re: No buffers available (repost)

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

Offline
Joined: Aug 22 2012
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
Joined: Aug 22 2012
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 <  > 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 & 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$ <  > 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 " (6) 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 " (6) ";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 > 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 > 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) > 127 THEN  GOTO 59950<br />
 59804  FOR X = 10 TO 39<br />
 59806  IF X > 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 & BACK}<br />
 59852  IF  PEEK ( - 16384) > 127 THEN  GOTO 59950<br />
 59854  FOR D = 1 TO 1000<br />
 59856  NEXT D<br />
 59858 X = X - 1<br />
 59860  IF X < 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 > 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 > 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 > 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 > 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 > 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 > 9)) CHR$ (P1 + 48 + 7 * (P1 > 9))")"<br />
 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+"<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 <  > 4 AND TYPE <  > 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 < 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 > 127 THEN P = P - 128<br />
 63110  IF P < 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 <  > 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 & 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' & 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.) &  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.

david__schmidt's picture
Offline
Joined: Apr 11 2006
Posts: 913
Re: No buffers available (repost)

Snowyfox wrote:

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...

Snowyfox wrote:

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
Joined: Aug 22 2012
Posts: 19
Re: No buffers available (repost)

david__schmidt wrote:
Snowyfox wrote:

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?

Snowyfox wrote:

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
Joined: Aug 22 2012
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?

david__schmidt's picture
Offline
Joined: Apr 11 2006
Posts: 913
Re: No buffers available (repost)

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

Offline
Joined: Aug 22 2012
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 <  > 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 & 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$ <  > 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 " (6) 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 " (6) ";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 > 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 > 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) > 127 THEN  GOTO 59950<br />
 59804  FOR X = 10 TO 39<br />
 59806  IF X > 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 & BACK}<br />
 59852  IF  PEEK ( - 16384) > 127 THEN  GOTO 59950<br />
 59854  FOR D = 1 TO 1000<br />
 59856  NEXT D<br />
 59858 X = X - 1<br />
 59860  IF X < 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 > 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 > 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 > 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 > 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 > 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 > 9)) CHR$ (P1 + 48 + 7 * (P1 > 9))")"<br />
 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+"<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 <  > 4 AND TYPE <  > 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 < 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 > 127 THEN P = P - 128<br />
 63110  IF P < 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 <  > 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 & 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' & 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.) &  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
Joined: Feb 18 2007
Posts: 260
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.

__________________

Think Different - Apple II Forever!

Offline
Joined: Aug 22 2012
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
Joined: Feb 18 2007
Posts: 260
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.

__________________

Think Different - Apple II Forever!

Offline
Joined: Aug 22 2012
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 " (6) LOCK FILE/FOLDER (7) UNLOCK FILE/FOLDER (Cool 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$(Cool
2024 VTAB 7: PRINT " (5) ";U$(9)
2025 VTAB 8: PRINT " (6) ";U$(10)
2026 VTAB 9: PRINT " (7) ";U$(11)
2027 VTAB 10: PRINT " (Cool ";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$(Cool = "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$(Cool
2440 VTAB 1: HTAB 1: PRINT " ________________________________________"
2442 VTAB 2: HTAB 1: INPUT " WHAT WOULD YOU LIKE TO CHANGE IT TO? ";U$(Cool
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$(Cool
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$(Cool
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(Cool + 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)Tongue = 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
Joined: Aug 22 2012
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
Joined: Feb 18 2007
Posts: 260
Re: No buffers available (repost)

Snowyfox wrote:

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.

__________________

Think Different - Apple II Forever!

Offline
Joined: Aug 22 2012
Posts: 19
Re: No buffers available (repost)

magnusfalkirk wrote:
Snowyfox wrote:

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
Joined: Aug 22 2012
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
Joined: Aug 22 2012
Posts: 19
Re: No buffers available (repost)

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