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