Boot the D CODE disk ONLY if you are going to be using ProDOS. To use DOS 3.3 D CODE, boot a DOS 3.3 disk first. D CODE Summary ------------------------------------------------------------ To COMPACT an Applesoft program 1. Load your program from your disk. 2. Insert the D CODE disk, and type "BRUN COMPACT". 3. Select the features you want. 4. Type "C". (to use COMPACT again while it's still loaded, type "&".) ------------------------------------------------------------ To COMPARE Files 1. Insert the D CODE disk, and type "BRUN COMPARE". 2. Type the name of two same type files you want to compare. *to use COMPARE again while it's still loaded, type "&".) ------------------------------------------------------------ De-Bugging Functions (D.BUG) Insert the D CODE disk and type "BRUN D.BUG" to install the following new commands (single letter abbreviations in parentheses): BREAK lets you set up program breakpoints CHECK (C) proofreads a program DUMP (D) lists the last statements used before a program crash. FIND (F) finds all occurrences of a word in a program. L lists a program. NOTRACE (N) turns off TRACE functions. TRACE (T) turns on the trace and function. VARIABLES (V:) sets up variables and expressions to be TRACEd. WINDOW (W) lets you pre-adjust the size of the TRACE window. SIZE (S) lets you ste the buffer size for DUMP. ZAP (Z) clears the DUMP buffer. ------------------------------------------------------------------------------- COMPACT ------- D CODE's COMPACT program allows you to reduce the amount of memory occupied by an Applesoft program, by optionally removing Rem statements, packing as many statements as possible into single lines, and shortining variable names. How to Use Compact 1. Lock the program you want compacted on disk so you don't accidentally loose it. 2. LOAD the program you want to compact. 3. BRUN COMPACT. If this has recently been done you probably can just type "&". D.BUG Note: If you want D.BUG and COMPACT both in memory, you must BRUN D.BUG first. Otherwise COMPACT will disappear. Now you will see COMPACT's menu: (1) REMOVE REMS ............... YES (2) CONCATENATE LINES ......... YES (3) SHORTEN VARIABLE NAMES .... YES (4) RENAME VARIABLES .......... YES (5) COMPACT PART OF PROGRAM .... NO (6) VARIABLE TABLE TO PRINTER .. NO (C) COMPACT (Q) QUIT COMPACT Menu Options 1. REMOVE REMS YES means when you compact your program, every Remark statement will be deleted. If you use a lot of Rems, this option will save more program space than any other, because every character and space in a Remark takes up an entire byet of memory. 2. CONCATENATE LINES YES means that when you compact your program, as many statements as possible will be packed into single program lines, thus eliminating old line numbers. ULTRA-LONG-LINE PROBLEMS With option 2 set at YES, COMPACT will often create a program line that works perfectly, but is too long to edit. Applesoft allows program lines of about 250 bytes (each Applesoft word like "PRINT" takes up one byte). Editing, however, has to consider each character in the listing (now "PRINT" tkaes up five characters, plus two more for spaces on each end). Even GPLE's "Pack" feature won't always let you edit an ultra-long line. WATCH OUT that you don't inadvertently chop off a program line when you attempt to edit it. If you are cursor-tracing a line and you hear beeping (or you try to edit with GPLE and code is missing), type CONTROL-X immediately, and BRUN LINE.SPLITTER. 3. SHORTEN VARIABLE NAMES When this option is set to YES, all variable names longer than two characters will be shortened to two characters. In Applesoft, it doesn't matter how long your variable names are, only the first two characters count (COMPACT leaves only those two characters if you select YES for this option). The variables APPLE, APPALOOSA and AP are the same. So are MOUSE$, MOUNTEVEREST$ and MO$. The advantage to long variable names is that they are more descriptave. The disadvantage is that they take up a lot of room - one byte per character. Note: OPTION 3 simply chops off the end of long variable names. OPTION 4 actually renames variables without regard to their former names 4. RENAME VARABLES When this option is selected, COMPACT will change as many two-or-more character variable names into one-letter names as possible. The multiple characater variables that are used most often will be converted to single letter names until all 26 letters have been used (for each variable type. Remember, A$, A% and A may all be in the same program). Note: A (4) YES sets (3) to YES and (5) to NO. A (4) NO sets (6) to NO. 5. COMPACT PART OF PROGRAM Use this option if you only want a portion of a program compacted. After typing "C" to start compacting, you will be asked for the start and end line numbers for compacting. You may default to the beginning or the end of the program by simply hitting RETURN as an answer to either question. Note: A (5) YES sets (4) to NO. 6. VARIABLE TABLE TO PRINTER When set to YES, this option will print the renamed variables on your slot 1 printer (if option 4 set to YES). "&" TO RE-RUN COMPACT After COMPACT has been used and exited, you will usually be able to bring it up again by typing "&" (return). If this doesn't work, just type "BRUN COMPACT" again. EXTRA BYTES AT THE END OF A PROGRAM COMPACT assumes that any extra bytes that it findes imbedded beyond the end of a program is relocatable code that the program uses. If extra bytes are found, you will be asked if you wish to keep them. Answering "Y" will move the code to the new program end. "N" will delete the extra bytes. If you don't think you have anything beyond the end of the program, and COMPACT asks you about it anyway, just answer "N" and that will be the end of that. UNUSED STATEMENTS When programs have undergone heavy revision, statements often remain that can't possibly be executed - your program just won't encounter them. COMPACT will report the line numbers that contain these potentially useless statements. It's up to you to delete them after COMPACT is finished. THE VARIABLE CONVERSION TABLE When RENAME VARIABLES (option 4) is set to YES, a variable conversion table will be displayed on the screen during compaction. This chart lists the name of every variable in the program, it's new name (if it was changed), and the number of times it appears in the program. (Note: Only the first two characters of the variable will appear under the OLD column heading, even though that variable may have had a longer name.). One-character variables are listed first, unchanged, in the order of their appearance in the program. Next come the multiple-character variables. COMPACT will shorten as many of those as possible to one character, with the ones that appear most often in the program changed first. If no name appears in the NEW column, it's because there are no more single characters left for that particular variable type. This will only occur in very large and/or complex programs. Usually real of string variables will be the first to run out of the 26 available single-character names. LOOK FOR "LONE" VARIABLES Watch the conversion chart for variables that appear only once or twice in a program. This could indicate that the variable name was misspelled or was once part of a program segment that was removed. You might be able to save add- itional space (or uncover a potential bug) if you look at the lone variable. --------------------------------------------------------------------------- OLD NEW OCCURRENCES --- --- ----------- D \ 2 SAMPLE VARIABLE CONVERSION TABLE L$ \ 6 This table prints on the screen when COMPACT B \ 5 option 4 (Rename Variables) is set to YES. B$ \ 8 A%( \ 2 L \ 14 H \ 21 C \ 4 K \ 1 <-- Note: Only 1 occurance may indicate an Z \ 8 unnecessary (or misspelled) variable name. J ! 9 N$ !--- 15 -- Single-chartacter variables are listed first, D$ / 7 and will remain unchanged. A$ / 72 S$ / 52 A / 95 X / 17 T$ / 20 S / 12 Variables A, B,C, & D are already used, so the T / ---- 9 --- first multi-character variable is converted to E P( / ! 16 I / ! 94 <-- End of old single-character variable names. BU => E <--- 39 <-- The most-often used multi-character variable name FI => F 19 is converted first EC => G 17 LV => M 16 SM => N 14 YE => O 14 BE => P 14 CO => Q 13 BP => R 12 DF$( => A$( <----- 11 -- First string array is named A$(). CD => U 11 PN => V 10 FD => W 10 FI$( => B$( 9 PN$( => C$( 8 BL => Y 8 IP 8 ID 8 PR 8 PR% => A% <------ 8 --- First integer variable is named A%. IO 8 CF 8 ME$ => A$ <------ 7 --- First string is name A$. WD 6 --------------------------------------------------------------------------- COMPACT ERROR MESSAGES NO APPLESOFT PROGRAM IN MEMORY This means what it says. Load your program first, then BRUN COMPACT (or type "&" if COMPACT is already loaded). MEMORY OVERFLOW. PROGRAM TOO LARGE This sometimes happens when you have other machine language program(s) in memory in addition to COMPACT. You may need to re-boot!or take other measures to clear memory. RELOAD YOUR BASIC PROGRAM This message will occasionally come up when you're going to compact a very long Applesoft program. Just re-load the program as instructed, and type "&" to re-run COMPACT. In case you care: When you first BRUN COMPACT, it's code Bloads at $4000 (16384 decimal), and then relocates itself just under HIMEM. If your loaded program extends above $4000, it will be partially wiped out by COMPACT and you'll be told to re-load. ------------------------------------------------------------------------------ LINE.SPLITTER LINE.SPLITTER simply chops a program line into two prats, into two parts, in case it is too long to edit. With your program loaded simply type "BRUN LINE.SPLITTER" and, when asked, type the number of the line you want to split. LINE.SPLITTER will split the line as near the middle as possible, taking into consideration any IF statements. The second section of the split line will be numbered one line number higher than the first section. LINE.SPLITTER ERROR MESSAGES LINE DOES NOT EXIST Oops, try again. RENUMBER FOLLOWING LINE If the higher number is already taken, the split will be cancelled and you will have to renumber that part of your program to make room. LINE CAN'T BE SPLIT The line has only one statement, or its first statement contains an IF. ------------------------------------------------------------------------------ COMPARE D CODE's COMPARE program will take two Applesoft programs and tell you exactly what lines are unique, different, or the same. You can also use COMPARE to check binary and text files to see if they are identical. JUST BRUN COMPARE AND TYPE TWO FILE NAMES Select COMPARE from the D CODE startup menu, or simply type: BRUN COMPARE Unfortunatly, COMPACT and COMPARE cannot live in the same Apple at the same time - irreconcilable differences. COMPARE and D.BUG get along quite well, however. So do COMPACT and D.BUG. When the COMPARE screen appears, enter the names of the two files you want to COMPARE. RETURN (with no name) signifies the Applesoft program currently in memory. Under DOS 3.3, type the file name and any DOS parameters that go with it (for example - MYPROGRAM,S6,D2). Under ProDOS, COMPARE will assume the current prefix, unless the full pathname is specified (for example /MYDISK/MY.SUBDIR/MYPROGRAM). COMPARING APPLESOFT FILES When you're comparing two Applesoft programs, COMPARE will ask you if you want occurences of identical lines printed. You will usually want to answer "N", since "Y" will often print a ton of meaningless line numbers. During comparison, a 1, 2, D or D will appear next to the line numbers as they are shown on the screen: 1 means that this line is unique to Program #1 (the first one you selected) and doesn't exist in Program #2. 2 meand the line exists in Program #2 and not in #1. D means both programs have duplicata line numbers, but the contents of the lines are different. S means the lines are the same (This will appear only if yo answered "Y" to the DISPLAY SAME LINES? option.) COMPARING BINARY AND TEXT FILES Since there are no line numbers in binary and text files, COMPARE will just tell you if the files are identical or not. Binary file note: If you're using DOS 3.3, COMPARE will also display the starting address and length of both files (If you're in ProDOS, just type "CATALOG" and take a look there.) "&" TO RE-COMPARE Once it's loaded, you may usually re-enter COMPARE and use it again by typing "&" (return). page 20 ----------------------------------------------------------------------------- D.BUG LOADING D.BUG To load and activate D.BUG's commands, just type: BRUN D.BUG Or select D.BUG from the STARTUP program's menu. If you want D.BUG to co-exist in memory with either COMPACT or COMPARE, D.BUG must be loaded first. Other programs like GPLE, Double-Take, ProntoDOS, and so on, should be loaded before D.BUG. D.BUG may be loaded from a program in the usual way: 10 PRINT: PRINT CHR$(4);"BRUN D.BUG" REMOVING D.BUG To disable D.BUG and free up approximatly 5.5K of memory it occupies, type "FP" (DOS 3.3) or "-FP" (ProDOS - FP is a memory clearing file in the ProDOS D.CODE catalog.). SINGLE CHARACTER ABBREVIATIONS Each D.BUG command may be abbriviated by typing only its first character (or characters). For example, the new CHECK command can be abbreviated as C, CH, CHE, or CHEC. To function properly, some of the new commands may or must be followed by other characters or words. D.BUG FUNCTIONS AND COMMANDS Fast Finder New command: FIND (F) Function: Quickly searches through an Applesoft program for occurrences of a specified character or word. Program Checker New command: CHECK (C) Function: Quickly proofreads Applesoft programs for syntax errors and undefined statement errors. In addition, everything you type from the keyboard is proofread automaticly (no command required) Easy Lister New command: L Function: Saves you three keystrokes every time you list a program, by letting you type "L" instead of "LIST". Window Tracer New commands: TRACE (T), NOTRACE (N), VARIABLES (V), and WINDOW (W) Function: Lets you watch Applesoft program line numbers and statements "live" as they are executed (and optionally watch variable and expression values) in an adjustable text window at the bottom of the screen. Dump Tracer New commands: DUME (D), SIZE (S), and ZAP (Z) Function: After a program stops for any reason, you can see the line numbers and statements that were most-recently executed. Breakpoints New command: BREAK (B) Function: Lets you set up breakpoints so your program will automaticly stop when a variable becomes a certain value, or when other specified conditions are true. Note: All D.BUG commands may be used within a program. ----------------------------------------------------------------------------- FAST FINDER (BRUN D.BUG to load) New command: FIND (F) With any Applesoft program (and D.BUG) in memory, type "F" (return). You will be asked what you want to "SEARCH FOR:". After you respond, all line numbers containing your character or word will be roeported. If your word appears in line, say three times, that line number will appear three times. The total number of occurrences will be reported ofter the search ends. FIND scans your entire program twice, first looking for your string in PRINT, REM, and DATA statements, and then in the form of Applesoft words, or tokens. When you tell FIND to to search for "READ", for example, it reports one set of line numbers for ocurrences like PRINT "READ YOUR MAIL." and then another set of numbers for occurrences line READ A$. WILDC@RD C#ARACTERS Using "@" in a search word will match a single character in a string. Using "#" in a search will match any number of characters. FIND AND LIST (FIND L OR FL) Typing "FINDL" of "FL" works like "F" (above), but each occurrence will be Listed, and the search word will be highlighted in inverse. ----------------------------------------------------------------------------- PROGRAM CHECKER (BRUN D.BUG to load) New command: CHECK (C) With any Applesoft program (and D.BUG) in memory, type "C" (return), and your program will quickly be proofread for two specific things: ?SYNTAX ERRORS: This includes misspelled commands (like "PTINT"), improperly punctuated Applesoft statements (like "INPUT A/B") and type-mismatch errors (like A="CAT" and a$=CAT). ?UNDEFINED STATEMENT ERRORS: For example, a "GOTO 100" statement when there is no line 100 in your program. Sorry: misspelled words inside quote marks (including DOS commands) and in REM and DATA statements will be ignored. CHECK will also not find ?Illegal Quantity errors and the like. The COMPACT program will find program statements or lines that can't possibly be executed (not really an error; see page 11) D.BUG does not cancel improper statements, it just tells you about them. Maybee your "error" was intentional - like a GOTO 100 when you hadn't typed in line 100 yet. After entering a program line thatis improper, you should immediatly edit, re-enter or delete the line. And speaking of editing, D.BUG is totally compatible with GPLE. If you want to type a statement that containes an error, and you don't want to see and hear D.BUG's warning, precede the statement (and line number, if any) with a slash ("/"). The slash turns off D.BUG's proofread function for that line only. ERROR MESSAGES No Errors: This means that the program in memory when you typed "C" is free of syntax and undefinedc statement errors. An inverse "?" in a listed program line or statement means a syntax error exists nearby. <#> An inverse "#" in a listed program line or statement means an undefined statement error exists neasby. "LIVE" SYNTAX CHECKING With D.BUG loaded, every time you type anything, it will automaticly be checked for syntax and undefined statement errors. Improper statements will be listed and flagged with an inverse "?" or "#". ----------------------------------------------------------------------------- EASY LISTER (BRUN D.BUG to load) New command: L With D.BUG loaded you may simply type "L" (return) to LIST a program in memory. All Applesoft syntax is in effect; therefore you can use commands like L10-100, L-100, and L100-. ----------------------------------------------------------------------------- WINDOW TRACER (BRUN D.BUG to load) New commands: TRACE (T), NOTRACE (N), VARIABLES (V), WINDOW (W) Typing "T" before you run a program activates an adjustable-size "trace window" at the bottom of the screen. that displays the current line numbers and statements currently being executed. You can slow down the program execution or ewen execute one program line at a time. Note: Most 80-col!cards for the ][+ do not scroll properly because they don't support the required windows for "Window Tracer" NOTRACE (N) Typing "N" disables TRACE and related commands VARIABLES (V:) With TRACE active you can specify particular variables to display in the trace window. (Only the first 12 characters of strings will appear) All variable expressions are also displayed. Type "V:" to cancel variable tracing. Errors: When an expression which are impossible to interpret, like CHR$(-65) or 123/0, will produce an error message during a trace. WINDOW (W) This command changes the size of the trace window. The controls are: (Up arrow or Ctrl-K): Moves the top of the trace window up. (Down arrow or Ctrl-J): Moves the top of the trace window down. (the trace window can occupy all bet the top 3 lines on the screen) (> or .): Moves the division between the variable area and the statement area 20 spaces right. (< or ,): Moves the division between the variable area and the statement area 20 spaces left. (the "*" shows the division between the two areas in the trace window) While the program is running you can use these keys: Space bar: Will execute one statement. If the trace window is active the statement will appear in the window BEFORE it is executed so you can press Ctrl-C before it goes. Return: Will restore normal execution after using the above function. Left arrow: Will slow down execution to one lower of eight speeds. Right arrow: Will speed up execution to the next higher of the eight speeds. Button 1: Will turn off the TRACE function making your program run faster. Button 0: Will restore the TRACE function. Ctrl-C: Does it's normal thing. ------------------------------------------------------------------------------- DUMP TRACER New commands: DUMP (D) SIZE (S) ZAP (Z) DUMP (D) After a program stops for any reason "D" will list, in order used, the last line numbers and statements that were executed. If D is followed by a number only that many lines will be displayed. (You can only dump up to the amount of space set aside by the "S" option) PR#1 will work normally with DUMP. If you change your program in any way the dump buffer will be cleared, thus if you are going to DUMP then you should do it immediatly after execution. If you don't want the buffer cleared when you run a program type "RUN 10" (or whatever the first line in the program is) While you are DUMPing you may use the following: Left & Right arraows: Will control the direction of the dump, however it is pretty hard to understand while going backwards. Ctrl-S: Does the same thing it has always done. Space bar: Will single step through a DUMP. Ctrl-C: Halts a DUMP. SIZE (S) Type "S" followed by a number to specify how many lines you want to be stored in the DUMP buffer. Each line in the buffer eats 2 bytes of memory. You cannot specify a SIZE smaller than 5. If you want only 5 lines in the buffer you need only type "S". Anytime you use SIZE all of your variables are cleared, and you will also need to run your program again before DUMP will work. Note: The buffer is above HIMEM, when you use SIZE, HIMEM is changed. ZAP (Z) This will clear the dump buffer. If you do not ZAP before typing "RUN FILENAME", you will get meaningless garbage next time you DUMP. ------------------------------------------------------------------------------- BREAKPOINTS New commands: BREAK IF... BREAK ON... BREAK AT... BREAK LIST BREAK + BREAK - Typing "BREAK:" or "B:" followed by a number 1-8 will set up a breakpoint. Sample program: 5 TEXT:HOME 10 X=INT(RND(1)*20) 20 PRINT X 30 IF X+2 THEN PRINT CHR$(7): GOTO 10 40 IF NOT INT(RND(1)*200) THEN 10 50 PRINT "END":END Sample breakpoints: B1: IF X=10 B2: ON GOTO B8: AT 20,10 BREAK IF... The first breakpoint will caust the program to stop anytime X=10. When X does equal ten then the following will appear: BREAKPOINT 1: IF X=10 BREAK IN 20 The first line tells you what made the program stop, the second is the next statement executed after the break occured. BREAK ON... The second breakpoint will stop the program the first time a statement beginning with GOTO. This breakpoint will stop the program at lines 30 or 30. BREAK AT... The thire breakpoint will halt the program the 10th time a statement in line 20 is executed. If there were two statements, seperated by a colon, in line 20, then the 5th time the program reached line 20 the program would stop. If the breakpoint was set up as "B8: AT 20" then the first time line 20 was encountered the program would break. BREAK LIST (BLIST) This will list all breakpoints that are currently in memory. A "+" will indicate an active breakpoint, and a "-" will denote an inactive one. To list one breakpoint, 2 for example, type "B2LIST". BREAK- (B-) To deactivate all breakpoints just type "B-" to deactiveate only one, say 4, type "B4-". BREAK+ (B+) "B+" will activate all breakpoints. You can use the same method to activate only one as you do do deactivate one breakpoint. After a breakpoint does it's job you can continue the program with "CONT". If the program stopped with a BREAK IF... or BREAK ON... then you will need to deactivate that breakpoint or change the condition, or the program will stop immediatly after you restart it. Do not, however, change the program. Breakpoints will probably slow a program down considerably. However, BREAK ON and BREAK AT won't slow down a program much at all.