Classic Computer Magazine Archive COMPUTE! ISSUE 58 / MARCH 1985 / PAGE 123

SpeedScript 3.0

Charles Brannon, Program Editor

Since its introduction in the January 1984 issue of our companion magazine, COMPUTE!'s GAZETTE, SpeedScript has been the most popular program ever published by COMPUTE! Publications. Written entirely in machine language, SpeedScript contains nearly every command and convenience you'd expect from a quality word processor. Starting this month, COMPUTE! presents the most recent and most powerful version of SpeedScript ever, version 3.0. It incorporates a year's worth of enhancements, readers' suggestions, and additional debugging. This month's SpeedScript is for the Commodore 64, and versions for the VIC-20, Atari, and Apple II-series computers are coming in future issues.


The Commodore 64 version of SpeedScript 3.0 may be ordered on disk directly from COMPUTE! Publications. Call TOLL FREE 800-334-0868 (in NC 919-275-9809) to charge your order 8:30 a.m.-7:00 p.m. EST, Monday through Friday. Or send check or money order ($12.95 plus $2.00 shipping and handling) to:

COMPUTE! Publications,
Inc. P.O. Box 5058
Greensboro, NC 27403 USA

Readers outside the US and Canada add $3.00 shipping and handling. All orders must be prepaid in US Funds.

SpeedScript 3.0, though compact in size (6K), has many features found on commercial word processors. SpeedScript is also very easy to learn and use. You can start writing with it the first time you use it. You type in everything first; preview and make corrections on the screen; insert and delete words, sentences, and paragraphs; then print out an error-free draft, letting SpeedScript take care of things like margins, centering, headers, and footers.
    SpeedScript is a writing tool. It won't make you a better writer, but you may become a better writer once the tedium of retyping and erasing is replaced by the flexibility of a word processor. Words are no longer frozen in place by ink; they become free-floating entities. You no longer think about typewriting; you can stand back and work directly with words and ideas. The distinction between rough and final drafts becomes blurred as you perfect your writing while you write it.

Typing In SpeedScript
The main disadvantage of SpeedScript is that you can't just go into a store and buy it-you have to type it in. SpeedScript is one of the longest machine language programs we've ever published, but the MLX machine language entry system helps you type it right the first time. MLX also lets you type SpeedScript in more than one sitting. Unfortunately, if you have an earlier version of SpeedScript, you cannot just make certain changes to bring it up to version 3.0. You have to type it in from scratch.
    Although this might seem daunting, we guarantee it will be worthwhile.

Using MLX
MLX makes it possible for you to type in a long machine language program correctly. It can detect most errors people make when entering numbers. See the MLX article elsewhere in this issue.
    Before you begin typing SpeedScript (or begin a subsequent session of typing if you enter SpeedScript in more than one sitting), you must enter the following POKEs before you load and run the MLX program. These POKEs are essential to protect SpeedScript from BASIC while you are typing it in. Again, these POKEs should be performed before you load MLX, but are not necessary to run the finished program:

    POKE 44,33:POKE 8448,0:NEW

    Now load and run the 64 version of MLX. Answer the first two questions like this:

    Starting Address? 2049
    Ending Address? 8204

    You will then see the first prompt, the number 2049 followed by a colon. Type in each three-digit number shown in the listing. You do not need to press the comma shown in the listing. MLX types the comma automatically.
    The last number you enter in a line is a checksum. It represents the values of the other numbers in the line summed together. If you make a mistake while entering the line, the checksum calculated by MLX should not match that of the listing, and you will have to retype the line. MLX is not foolproof, though. It's possible to fool the checksum by exchanging the position of the three-digit numbers. Also, an error in one number can be offset by an error in another (just as 3 + 4 + 7 = 1 + 4 + 9). Keep this in mind. MLX will help catch your errors, but you still must be very careful.

Typing SpeedScript In Multiple Sittings
    If you want to stop typing the listing at some point and pick up later, press SHIFT-S and follow the screen prompts. Remember to note the line number of the last line you typed in. When you are ready to continue typing, enter the POKES mentioned above, load MLX, answer the starting and ending address prompts, then press SHIFT-L. MLX asks for the filename you gave to the partially typed program. After the LOAD is complete, press SHIFT-N and tell MLX the line number you stopped at. Now continue typing as before. When you finish all typing, MLX automatically prompts you to save the program.
    At this point MLX has saved a program file on tape or disk. If you load it and list it, you'll see that it looks like a normal one-line BASIC program, with a line number and a SYS command. The machine language program that is SpeedScript starts in memory just after the SYS command. The simulated BASIC line is included so that you can load SpeedScript like any BASIC program, and enter RUN to start it. You don't need to add the ",1" like you do with many machine language programs. Just LOAD "SPEEDSCRIPT" (or whatever filename you called it) for tape, or LOAD "SPEEDSCRIPT",8 for disk, then enter RUN. Once SpeedScript is in memory, you can save it from BASIC like any BASIC program. If SpeedScript is running, tap the RESTORE key to exit to BASIC.
    Before using SpeedScript, you should generally unplug all cartridges and expanders such as Simons' BASIC or 80-column video cards. SpeedScript cannot take advantage of any custom hardware configurations except those that do not interfere with normal operations.

Entering Text
When you run SpeedScript, the screen colors change to dark gray on light gray, simulating the appearance of type on paper. The first line on the screen is black with white letters. This command line is used to communicate with SpeedScript. SpeedScript presents all messages here. The remaining 24 lines of the screen are used to enter, edit, and display your document. A blinking dark square, the cursor, shows where the next character you type will appear on the screen. SpeedScript lets you move the cursor anywhere within your document, making it easy to find and correct errors.
    To begin using SpeedScript, just start typing. When the cursor reaches the right edge of the screen, it automatically jumps to the beginning of the next line, just as in BASIC. But unlike BASIC, SpeedScript never splits words at the right edge of the screen. If a word you're typing won't fit at the end of one line, it's instantly moved to the next line. This feature, called word wrap or sometimes parsing, makes it much easier to read your text on the screen. Even if you make numerous editing changes, SpeedScript reformats the screen and rewraps all words.

Scrolling And Screen Formatting
When you finish typing on the last screen line, SpeedScript automatically scrolls the text upward to make room for a new line at the bottom. This is similar to the way BASIC works, but with one exception: The screen can scroll both up and down. Imagine the screen as a 24-line window on a long continuous document. More than 43K of text space is available in memory, room enough for 20-40 printed pages of text. To check at any time how much space is left, press CTRL- (hold down the CTRL key while pressing the = key). The number which appears in the command line indicates how much room remains for characters of text.
    If you're used to a typewriter, you'll have to unlearn some habits. First, since the screen is only 40 columns wide, and most printers have 80-column carriages, it doesn't make sense to press RETURN at the end of each line as you do on a typewriter. SpeedScript's word wrap takes care of this automatically. You want to press RETURN only when you want to force a carriage return to end a paragraph or limit the length of a line. To permit you to see these forced carriage returns, they appear on the screen as a leftpointing arrow. (This is called a return-mark in this article.)
    When you print your document, SpeedScript automatically formats your text-to fit the width of the paper. Don't manually space over for a left margin or try to center a line yourself, as you would on a typewriter. SpeedScript's printing routine automatically takes care of all margins and lets you customize the margin settings. Also, don't worry about where a printed page would end. When printing, SpeedScript automatically fits your text onto separate pages, and can even put short phrases and page numbers at the top or bottom of each page if you want.
    Like all good word processors, SpeedScript has a wide selection of editing and convenience features. You can move the cursor a single space in either direction, or skip to the next or previous word, sentence, or paragraph. You can also move the cursor to the top of the screen, the top of the document, or to the end of the document. The INST/DEL key is used to insert a single space or delete a single character. Other features let you erase a word, sentence, or paragraph, and move or copy sentences, words, and paragraphs to other places in your document. Using Search and Replace, you can find any phrase, and even automatically change one phrase to another throughout the entire document.
    You can save your text on tape or disk, then load it later for additions and corrections. You can transpose (exchange) two characters, change the screen and text colors, send disk commands, read the disk error channel, and automatically tab over five spaces for paragraph indents. You don't need to learn all these commands right away, but you'll be glad they're available as you become more comfortable with word processing.

Using The Keyboard
Most of these features are accessed with control-key commands-you hold down CTRL while pressing another key. In this article, controlkey commands are abbreviated CTRL-x (where x is the key you press in combination with CTRL). An example is the CTRL- mentioned above to check on free memory. CTRL-E means hold down CTRL and press E. Sometimes you have to hold down both SHIFT and CTRL as you type the command key, as in SHIFT-CTRL-H. Other keys are referenced by name or function, such as back-arrow for the left-pointing arrow in the top-left corner of the keyboard, pound sign for the British pound sign (£), CLR/HOME for the Home Cursor key, SHIFT-CLR/HOME for the Clear Screen key, f1 for special function key 1, and up-arrow for the upward-pointing arrow to the left of the RESTORE key. See Figure 1 for a complete quickreference chart of all keyboard commands.

Figure 1

    Some keys let you move the cursor to different places in the document to make corrections or scroll text into view. SpeedScript uses a unique method of cursor movement that is related to writing, not programming. Programmers work with lines of text, and need to move the cursor up and down a line or left and right across a line. SpeedScript, however, is oriented for writers. You aren't working with lines of text, but with a continuous document.
    Therefore, SpeedScript moves the cursor by character, word, sentence, or paragraph. SpeedScript defines a word as any sequence of characters preceded or followed by a space. A sentence is any sequence of characters ending with a period, exclamation point, question mark, or return-mark. And a paragraph is defined as any sequence of characters ending in a return-mark.
    Here's how to control the cursor:

    • The left-right cursor key works as usual; pressing this key by itself moves the cursor right (forward) one space, and pressing it with SHIFT moves the cursor left (backward) one space.
    • The up/down cursor key moves the cursor forward to the beginning of the next sentence. Pressing it with SHIFT moves the cursor backward to the beginning of the previous sentence.
    • The fl special function key moves the cursor forward to the beginning of the next word. The f2 key (hold down SHIFT and press fl) moves the cursor backward to the beginning of the previous word.
    • The f3 special function key moves the cursor forward to the beginning of the next sentence (just like the up/down cursor key). The f4 key (hold down SHIFT and press f3) moves the cursor backward to the beginning of the previous sentence (just like pressing SHIFT and the up/down cursor key).
    • The f5 special function key moves the cursor forward to the beginning of the next paragraph. The f6 key (hold down SHIFT and press f5) moves the cursor backward to the beginning of the previous paragraph.
    • The CLR/HOME key, pressed once by itself, moves the cursor to the top of the screen without scrolling. Pressed twice; it moves the cursor to the beginning of the document.
    • CTRL-Z moves the cursor to the bottom of the document.

Correcting Your Typing
One strength of a word processor is that you need never have mistakes in your printed document. Since you've typed everything before you print it, you have plenty of opportunities to proofread and correct your work. The easiest way to correct something is to just type over it, but there are other ways, too.
    Sometimes you'll have to insert some characters to make a correction. Maybe you accidentally dropped a letter, typing "hngry" instead of "hungry." When you change the length of a word, you need to push over everything to the right of the word to make room for the insertion. Use SHIFT - INST/DEL to open up a single space, just as in BASIC. Merely position the cursor at the point where you want to insert a space, and press SHIFT-INST/DEL.

Insert Modes
It can be tedious to use the SHIFT-INST/DEL key to open up enough space for a whole sentence or paragraph. For convenience, SpeedScript has an insert mode that automatically inserts space for each character you type. In this mode, you can't type over characters; everything is inserted at the cursor position. To enter insert mode, press CTRL-I. To cancel insert mode, press CTRL-I again (a command key that turns something on and off is called a toggle). To let you know you're in insert mode, the normally black command line at the top of the screen turns light blue.
    Insert mode is the easiest way to insert text, but it can become too slow when working with a very long document because it must move all the text following the cursor position. Although SpeedScript uses turbocharged memory-move routines, the 6502/6510 microprocessor can go only so fast. So SpeedScript has even more ways to insert blocks of text.
    One way is to use the RUN/STOP key. It is programmed in SpeedScript to act as a five-space margin indent. To end a paragraph and start another, press RETURN twice and press RUN/ STOP. Alternatively, press SHIFT - RETURN, which does this automatically (a function suggested by COMPUTO's GAZETTE reader Richard Scherer). You can use RUN/STOP to open up more space than SHIFT-INST/DEL. No matter how much space you want to insert, each insertion takes the same amount of time. So the RUN/STOP key can insert five spaces five times faster than pressing SHIFT-INST/DEL five times.
    There's an even better way, though. Press SHIFT-RUN/STOP to insert 255 spaces. This is enough room for a sentence or two. You can press it several times to open up as much space as you need. And SHIFT-RUN/STOP is fast. (You don't want to be in insert mode when you use this trick; that would defeat its purpose.)
    Since the INST/DEL key also is slow when working with large documents (it, too, must move all text following the cursor), you may prefer to use the back-arrow key to backspace. The back-arrow key by itself moves the cursor left one space and blanks out that position. It's more like a backspace than a delete.
    After you're done inserting with these methods, there will probably be some inserted spaces left over that you didn't use. Just press SHIFT-CTRL-back arrow. This instantly deletes all extra spaces between the cursor and the start of following text. SHIFTCTRL-back arrow is also generally useful whenever you want to delete a bunch of spaces.

Erasing Text
Inserting and retyping are not the only kinds of corrections you'll need to make. Part of writing is separating the wheat from the chaff. On a typewriter, you pull out the paper, ball it up, and dunk it in the trash can. SpeedScript lets you be more selective.
    Press the INST/DEL key by itself to erase the character to the left of the cursor. All the following text is pulled back to fill the vacant space.
    Press CTRL-back arrow to delete the character on which the cursor is sitting. Again, all the following text is moved toward the cursor to fill the empty space.
    These keys are fine for minor deletions, but it could take all day to delete a whole paragraph this way. So SpeedScript has two commands that can delete an entire word, sentence, or paragraph at a time. CTRL-E erases text after (to the right of) the cursor position, and CTRL-D deletes text behind (to the left of) the cursor.
    To use the CTRL-E erase mode, first place the cursor at the beginning of the word, sentence, or paragraph you want to erase. Then press CTRL-E. The command line shows the message "Erase (S,WP): RETURN to exit." Press S to erase a sentence, W for a word, or P for a paragraph. Each time you press one of these letters, the text is quickly erased. You can keep pressing S, W, or P until you've erased all the text you wish. Then press RETURN to exit the erase mode.
    The CTRL-D delete mode works similarly, but deletes only one word, sentence, or paragraph at a time. First place the cursor after the word, sentence, or paragraph you want to delete. Then press CTRL-D. Next, press S, W or P for sentence, word, or paragraph. The text is immediately deleted and you return to editing. You don't need to press RETURN to exit the CTRL-D delete mode unless you pressed this key by mistake. (In general, you can escape from any command in SpeedScript by simply pressing RETURN.) CTRL-D is most convenient when the cursor is already past what you've been typing.

The Text Buffer
When you erase or delete with CTRL-E and CTRL-D, the text isn't lost forever. SpeedScript remembers what you've removed by storing deletions in a separate area of memory called a buffer. The buffer is a fail-safe device. If you erase too much, or change your mind, just press CTRL-R to restore the deletion. However, be aware that SpeedScript remembers only the last erase or delete you performed.
    Another, more powerful use of this buffer is to move or copy sections of text. To move some text from one location in your document to another, first erase or delete it with CTRL-E or CTRL-D. Then move the cursor to where you want the text to appear and press CTRL-R. CTRL-R instantly inserts the contents of the buffer at the cursor position. If you want to copy some text from one part of your document to another, just erase or delete it with CTRL-E or CTRL-D, restore it at the original position with CTRL-R, then move the cursor elsewhere and press CTRL-R to restore it again. You can retrieve the buffer with CTRL-R as many times as you like.
    Important: The CTRL-E erase mode lets you erase up to the maximum size of the buffer (12K, or over 12,000 characters), and CTRL-E also removes the previous contents of the buffer. Keep this in mind if there's something in the buffer you'd rather keep. If you don't want the buffer to be erased, press SHIFT-CTRL-E. This preserves the buffer contents and adds newly erased text to the buffer.
    Now you can see why CTRL-D lets you delete only a single sentence, word, or paragraph at a time. If it didn't, the deleted text would be added to the end of the buffer, and when you pressed CTRL-R to retrieve the buffer, the deleted text would be out of order (since CTRL-D deletes backward).
    If you ever need to erase the contents of the buffer, press CTRL-K (remember kill buffer).
    It's relatively easy to move blocks of text between documents. Using the buffer, you can load one document, erase some text into the buffer, load another document, then.insert the buffer. You can also use the buffer to save an often-used word or phrase, then repeat it whenever you need it.

The Wastebasket Command
If you want to start a new document, or simply obliterate all your text, press SHIFT-CLR/HOME. SpeedScript asks, "ERASE ALL: Are you sure? (Y/N)." This is your last chance. If you don't want to erase the entire document, press N or any other key. Press Y to perform the irreversible deed. There is no way to recover text wiped out with Erase All.
    The RUN/STOP-RESTORE reset combination has been disabled in SpeedScript. As mentioned above, pressing RUN/STOP by itself inserts five spaces for indenting paragraphs. Pressing RESTORE by itself brings up the message "Exit SpeedScript: Are you sure? (Y/N)." If you press Y for yes, you exit to BASIC. In BASIC you still have one chance to reenter SpeedScript without losing your text-simply enter RUN (but your chances decrease if you execute other commands in BASIC). If you press N or any other key at the prompt, you return to editing text with no harm done.

Search And Replace
Here's another feature only a computer can bring to writing. SpeedScript has a Hunt command that searches through your document to find a selected word or phrase. A Replace option lets you automatically change one word to another throughout the document. Since CTRL-S is synonymous with the CLR/HOME key (try it), and since SpeedScript already uses CTRL-R, we have to resort to command keys which are slightly less than mnemonic for these functions.
    SHIFT-CTRL-H activates the Hunt feature, SHIFT-CTRL-J (J is used because it's next to the H) lets you selectively hunt and replace, and CTRL-G (also next to the H) is for automatically searching and replacing.
    Searching for something is a two-step process. First you need to tell SpeedScript what to search for, then you trigger the actual search. Press SHIFT-CTRL-H. The command line says "Hunt for:". Type in what you'd like to search for, the search phrase, up to 29 characters. SpeedScript remembers the search phrase until you change it. (Incidentally, when you are typing on the command line, the only editing key that works is the INST/DEL key for backing up. SpeedScript does not let you enter control codes or cursor controls when you type in the command line, and you can type no more than one screen line.) Press RETURN when you've finished typing. If you press RETURN alone without typing anything, the Hunt command is canceled.
    When you are ready to search, press CTRL-H. SpeedScript looks for the next occurrence of the search phrase starting from the current cursor position. If you want to hunt through the entire document, press CLR/HOME twice to move the cursor to the very top before beginning the search. Each time you press CTRL-H, SpeedScript looks for the next occurrence of the search phrase and places the cursor at the start of the phrase. If the search fails, you'll see the message "Not Found."
    CTRL-J (Replace) works together with CTRL-H. After you've specified the search phrase with SHIFT-CTRL-H, press SHIFT-CTRL-J to select the replace phrase. SpeedScript also remembers this replace phrase until you change it. (You can press RETURN alone at the "Replace with:" prompt to select a null replace phrase. When you hunt and replace, this deletes the located phrase.) To manually search and replace, start by pressing CTRL-H. After SpeedScript finds the search phrase, press CTRL-J if you want to replace the phrase. If you don't want to replace the phrase, don't press CTRL-J. You are not in a special search and replace mode. You're free to continue writing at any time.
    CTRL-G links CTRL-H and CTRL-J together. It first asks "Hunt for:", then "Replace with:", then automatically searches and replaces throughout the document starting at the cursor position.
    A few hints and cautions: First, realize that if you use "the" as the search phrase, SpeedScript dutifully finds the embedded "the" in words like "therefore" and "heathen." If you changed all occurrences of "the" to "cow," these words would become "cowrefore" and "heacown." If you want to find or replace a single word, include a space as the first character of the word, since almost all words are preceded by a space. Naturally, if you are replacing, you need to include the space in the replace phrase, too. Also, SpeedScript distinguishes between uppercase and lowercase. The word "Meldids" does not match with "meldids." SpeedScript will not find a capitalized word unless you capitalize it in the search phrase. To cover all bases, you will sometimes need to make two passes when replacing a word. Keep these things in mind when using CTRL-G, since you don't have a chance to stop an out-of-control search and replace.

Storing Your Document
Another advantage of word processing is that you can store your writing on tape or disk. A Commodore disk, with 170K of storage space, can store 80-150 pages of text in one or more documents. Tapes also have great storage capacity, but they're slower, and it's harder to locate one of several documents on a cassette. However, SpeedScript can be used with tape, making it possible to set up an extremely economical word processing system. (Note: Although you can load SpeedScript much more quickly from cassette using the "TurboTape" utility published in the January 1985 issue of comPUTE!, you can't use TurboTape to save and load SpeedScript documents at high speed. The two programs are not compatible.)
    SpeedScript can also be used as a simple data base manager. Type in the information you need, then store it as a SpeedScript document. The search feature lets you quickly find information, especially if you use graphics characters to flag key lines. You can search for the graphics characters and quickly skip from field to field.
    It's easy to store a document. First, make sure the cassette or disk drive is plugged in and functioning. Insert the tape and rewind it, or insert a formatted (NEWed) disk into the drive. Press f8 (SHIFT-f7). You'll see the prompt "Save:". Type in a filename for your document. A filename can be up to 16 characters long and can include almost any characters, but do not use question marks or asterisks. You cannot use the same name for two different documents on a single disk. To replace a document already on disk using the same filename, precede your filename with the characters @0: or @:. You can also precede the filename with either 0: or 1: if you use a dual disk drive. SpeedScript cannot access a second disk drive with a device number of 9.
    After entering the filename, answer the prompt "Ta e or Disk" by pressing either the T or D key. (Unless you see the green cursor on the command line, SpeedScript is asking only for a single keystroke, and RETURN is not necessary.) You can cancel the SAVE command by pressing RETURN without typing anything else at either the "Save:" or "Tape or Disk?" prompt.
    After you press T for tape, press RECORD and PLAY simultaneously on the cassette drive. SpeedScript begins saving. If you press D for disk, and the disk is formatted and has room, your file is stored relatively quickly. After the SAVE, SpeedScript reports "No errors" if all is well, or reads and reports the disk error message if not.
    It is not possible to detect errors during a tape SAVE, so if you want peace of mind, use the Verify command. Rewind the tape, press CTRL-V, then type the filename. Press T for tape, then press PLAY on the recorder. SpeedScript compares the file on tape with that in memory, and reports "No errors" if the verify succeeds, or "Verify Error" if not. You can also verify disk files.

Loading A Document
To recall a previously saved document, press f7. Answer the "Load:" prompt with the filename. Insert the tape or disk, rewind the tape, then answer T or D. Press PLAY on tape. SpeedScript loads the file and should display "No errors." Otherwise, SpeedScript reads the error channel of the disk drive or simply reports "Load error" for tape.
    The position of the cursor is important before loading a file. SpeedScript starts loading at the cursor position, so be sure to press CLR/HOME twice or SHIFT-CLR/ HOME (Erase All) to move the cursor to the start of text space, unless you want to merge two documents. When you press f7 to load, the command line turns green to warn you if the cursor is not at the top of the text space.
    To merge two or more files, simply load the first file, press CTRL-Z to move the cursor to the end of the document, and then load the file you want to merge. Do not place the cursor somewhere in the middle of your document before loading. A LOAD does not insert the text from tape or disk, but overwrites all text after the cursor position. The last character loaded becomes the new end-oftext pointer, and you cannot access any text that appears ahead of this pointer.

File Compatibility
SpeedScript documents are stored as program files (a PRG type on disk). Naturally, you can't load and run a SpeedScript file from BASIC. Program files on tape are more reliable than data files. The characters are stored in their screen code (POKE) equivalents. Several commercial word processors store text similarly, including WordPro 3+, PaperClip, and EasyScript. As a matter of fact, two commercial spelling checkers designed for WordPro also work with SpeedScript: SpellRight Plus (from Professional Software) and SpellPro 64 (from Pro-Line).
    Program 2 after this article is a SpeedScript file conversion utility. It translates SpeedScript screen code program files into either Commodore ASCII or true ASCII. These translated files are stored in SEQuential format, the file type used in most file-processing applications. The file converter program can also translate a Commodore ASCII sequential file into a screen-code SpeedScript program file. You can use the file converter to translate a data base into a SpeedScript file (or vice versa), and you can convert SpeedScript files to true ASCII and use a modem program to upload them to another computer.

Figure 2

Disk Commands
Sometimes you forget the name of a file, or need to scratch or rename a file. SpeedScript gives you full control over the disk drive. Just press CTRL-up arrow, then type in a 1541 disk command. You don't need to type PRINT# 15 as you do in BASIC, just the actual command. If you press RETURN without typing a disk command, SpeedScript displays the disk status. It also displays the status after completing a disk command. Here is a quick summary of disk commands:
    n:disk name,ID This formats (NEWS) a disk. You must format a new disk before using it for the first time. The disk name can be up to 16 characters. The ID (identifier) is any two characters. You must use a unique ID for each disk you have. Don't forget that this command erases any existing data on a disk.
    s:filename Scratches (deletes) a file from the disk.
    r:newname=oldname Changes the name of file oldname to newname.
    c:backup filename= original name Creates a new file (the backup copy) of an existing file (original copy) on the same disk.
    I: Initialize disk. This resets several disk variables and should be used after you swap disks or when you have trouble reading a disk.
    v: Validate disk. This recomputes the number of available blocks and can sometimes free up disk space. Always use Validate if you notice a filename on the directory flagged with an asterisk. Validate can take awhile to finish.
    uj: Resets the disk drive to power-up state.

Additional Features
SpeedScript has a few commands that don't do much, but are nice to have. CTRL-X exchanges the character under the cursor with the character to the right of the cursor. Thus you can fix transposition errors with a single keystroke. CTRL-A changes the character under the cursor from uppercase to lowercase or vice versa. You can hold down CTRL-A to continue changing the following characters.
    Press CTRL-B to change the background and border colors. Each time you press CTRL-B, one of 16 different background colors appears. Press CTRL-L to cycle between one of 16 character (lettering) colors. The colors are preserved until you change them. In fact, if you resave SpeedScript, the program will load and run with your color choice in the future.

PRINT!
If you already think SpeedScript has plenty of commands, wait until you see what the printing package offers. SpeedScript supports an array of powerful formatting features. It automatically fits your text between left and right margins you can specify. You can center a line or block it against the right margin. SpeedScript skips over the perforation on continuous-form paper, or can wait for you to insert singlesheet paper. A line of text can be printed at the top of each page (a header) and/or at the bottom of each page (a footer), and can include automatic page numbering, starting with whatever number you like.
    SpeedScript can print on different lengths and widths of paper, and single-, double-, triple-, or any- spacing is easy. You can print a document as big as can fit on a tape or disk by linking several files together during printing. You can print to the screen or to a sequential disk file instead of to a printer. Other features let you print to most printers using most printer interfaces, and send special codes to the printer to control features like underlining, boldfacing, and doublewidth type (depending on the printer).
    But with all this power comes the need to learn additional commands. Fortunately, SpeedScript sets most of these variables to a default state. If you don't change these settings, SpeedScript assumes a left margin of five, a right margin position of 75, no header or footer, single-spacing, and continuouspaper page feeding. To begin printing, simply press CTRL-P. If your printer is attached, powered on, and selected (on-line), SpeedScript begins printing immediately. To cancel printing, hold down the RUN/STOP key until printing stops, then release it when the border color changes to white.
    Before printing, be sure the paper in your printer is adjusted to top-of-form (move the paper perforation just above the printing element). CTRL-P assumes a Commodore printer, so it's helpful if your interface simulates the modes and codes of the Commodore 1525, MPS-801, or 1526 printers. CTRL-P prints with a device number of 4 and a secondary address of 7 (uppercase/lowercase mode).
    If CTRL-P doesn't work for you, try another variation, SHIFT-CTRL-P. Answer the prompt "Print to: Screen, Disk, Printer?" with the single letter S, D, or P. Press any other key to cancel the command.
    If you press P for printer, SpeedScript requests two more keystrokes. First answer "Device number" with a number from 4 to 7. This lets you print to one of several printers addressed with different device numbers. Next answer "Secondary Address?" with a number from 0 to 9.

Figure 3

Non-Commodore Printers
The secondary address is used on most non-Commodore printer interfaces to control special features. For example, you can bypass the emulation features and use graphic mode to communicate directly with your printer (see the true ASCII command below). Consult the list of secondary addresses in your printer interface manual. SpeedScript does not work properly with RS-232 serial printers or interfaces.
    One additional note: Some printers and interfaces incorporate an automatic skip-over-perforation feature. The printer skips to the next page when it reaches the bottom of a page. Since SpeedScript already controls paper feeding, you need to turn off this automatic skip-over-perf feature before running SpeedScript, or paging won't work properly.
    We've successfully tested SpeedScript with the following printers: Commodore 1525/MPS 801, Commodore 1526 (second revision), Prowriter/C. Itoh 8510, Epson MX-80, Gemini 10-X, Okimate-10, Okidata 82, Okidata 92, and Hush-80 CD.
    We've also successfully tested SpeedScript with these printer interfaces: Cardco A/B/G+, Tymac Connection, Xetec, TurboPrint, and MW-350.
    SpeedScript should work even if your printer or interface is not on this list. These are just the ones we've tested.
    Be sure your printer or interface supplies its own linefeeds. Again, consult your manuals and insure that either your printer or interface (but not both) supplies an automatic linefeed after carriage return. To test this, print a small sample of text with CTRL-P. Since the default is single-spacing, you should not see double-spacing, nor should all printing appear on the same line. If you still aren't getting linefeeds, use the linefeed command discussed below.

Printing To Screen And Disk
SHIFT-CTRL-P prints to the screen when you press S. The screen colors change to white letters on a black background, and what appears on the screen is exactly what would print on the printer. It takes two screen lines to hold one 80-column printed line, of course. If you use double-spacing (see below), it's much easier to see how each line is printed. With this screen preview, you can see where lines and pages break. To freeze printing, hold down either SHIFT key or engage SHIFT lock. The border color changes to white while SHIFT is held down. When printing is finished, press any key to return to editing.
    SHIFT-CTRL-P prints to a disk file when you press D. Enter the filename when requested. SpeedScript sends out all printer information to a sequential file. You can use other programs to process this formatted file. Try this simple example:

10 OPEN 1,4
20 OPEN 2,8,8,"filename"
30 GET#2,A$:SS=ST:
   PRINT#1,A$,:IF SS=0
   THEN 30
40 PRINT#1:CLOSE1
50 CLOSE2

    This program dumps the disk file specified by the filename in line 20 to any printer. You can use it to print SpeedScript files (produced with SHIFT-CTRL-P) on another Commodore computer and printer without running SpeedScript. Change line 10 to OPEN 1,2,0,CHR$(6) to dump the file to a modem or RS-232 printer, or OPEN 1,3 to display it on the screen.

Formatting Commands
The print formatting commands must be distinguished from normal text, so they appear onscreen in reverse field with the text and background colors switched. You enter these reverse-video letters by pressing CTRL-pound sign. You can also use CTRL-3, which is easier to type with one hand. Answer the prompt "Enter format key:" by pressing a single key. This key is inserted into text in reverse video. All lettered printer commands should be entered in lowercase (unSHIFTed). During printing, SpeedScript treats these characters as printing commands.
    There are two kinds of printing commands, which we'll call Stage 1 and Stage 2. Stage 1 commands usually control variables such as left margin and right margin. Most are followed by a number, with no space between the command and the number. Stage 1 commands are executed before a line is printed.
    Stage 2 commands, like centering and underlining, are executed while the line is being printed. Usually Stage 1 commands must be on a line of their own, although you can group several Stage 1 commands together on a line. Stage 2 commands are by nature embedded within a line of text. A sample Stage 1 line could look like this:

  

Embedded Stage 2 commands look like this:

   

Stage 1 Commands
    l Left margin. Follow with a number from 0 to 255. Use 0 for no margin. Defaults to 5. See Figure 2 for a graphic illustration of margin settings.
    r Right margin position, a number from 1 to 255. Defaults to 75. Be sure the right margin value is greater than the left margin value, or SpeedScript will go bonkers.
    t Top margin. The position at which the first line of text is printed, relative to the top of the page. Defaults to 5. The header (if any) is always printed on the first line of the page, before the first line of text.
    b Bottom margin. The line at which printing stops before continuing to the next page. Standard 81/2 X 11-inch paper has 66 lines. Bottom margin defaults to the fiftyeighth line. The footer (if any) is always printed on the last line of the page, after the last line of text.
    p Page length. Defaults to 66. If your printer does not print six lines per inch, multiply lines-per inch by 11 to get the page length. European paper is usually longer than American paper-115/s or 12 inches. Try a page length of 69 or 72.
    s Spacing. Defaults to singlespacing. Follow with a number from 1 to 255. Use 1 for single spacing, 2 for double-spacing, 3 for triple-spacing.
    @ Start numbering at page number given. Page numbering normally starts with 1.
    ? Disables printing until selected page number is reached. For example, a value of 3 would start printing the third page of your document. Normally, SpeedScript prints starting with the first page.
    x Sets the page width, in columns (think a cross). Defaults to 80. You need to change this for the sake of the centering command if you are printing in double-width or condensed type, or are using a 40column or wide-carriage printer.
    n Forced paging. Normally, SpeedScript prints the footer and moves on to the next page only when it has finished a page, but you can force it to continue to the next page by issuing this command. It requires no numbers.
    m Margin release. Disables the left margin for the next printed line. Remember that this executes before the line is printed. It's used for outdenting.
    a True ASCII. Every character is assigned a number in the ASCII (American Standard Code for Infor mation Interchange) character set. Most printers use this true ASCII standard, but Commodore printers exchange the values for uppercase and lowercase to match Commodore's own variation of ASCII. Some printer interfaces do not translate Commodore ASCII into true ASCII, so you need to use this command to tell SpeedScript to translate. Also, you will sometimes want to intentionally disable your interface's emulation mode in order to control special printer features that would otherwise be rejected by emulation. Place this command as the first character in your document, even before the header and footer definitions. Don't follow it with a number.
    Since, in effect, the true ASCII command changes the case of all letters, you can type something in lowercase and use true ASCII to make it come out in uppercase.
    w Page wait. Like the true ASCII command, this one should be placed at the beginning of your document before any text. With page wait turned on, SpeedScript prompts you to "Insert next sheet, press RETURN" when each page is finished printing. Insert the next sheet, line it up with the printhead, then press RETURN to continue. Page wait is ignored during disk or screen output.
    j Select automatic linefeeds after carriage return. Like a and w, this command must be placed before any text. Don't use this command to achieve double-spacing, but only if all text prints on the same line.
    i Information. This works like REM in BASIC. You follow the command with a line of text, up to 255 characters, ending in a returnmark. This line will be ignored during printing, and is handy for making notes to yourself such as the filename of the document.
    h Header define and enable. The header must be a single line of text (up to 255 characters) ending in a return-mark. The header prints on the first line of each page. You can include Stage 2 commands such as centering and page numbering in a header. You can use a header by itself without a footer. The header and footer should be defined at the top of your document, before any text. If you want to prevent the header from printing on the first page, put a return-mark by itself at the top of your document before the header definition.
    f Footer define and enable. The footer must be a single line of text (up to 255 characters) ending in a return-mark. The footer prints on the last line of each page. As with the header, you can include Stage 2 printing commands, and you don't need to set the header to use a footer.
    g GOTO (link) next file. Put this command as the last line in your document. Follow the command with the letter D for disk or T for tape, then a colon (:), then the name of the file to print next. After the text in memory is printed, the link command loads the next file into memory. You can continue linking in successive files, but don't include a link in the last file. Before you start printing a linked file, make sure the first of the linked files is in memory. When printing is finished, the last file linked to will be in memory.

Stage 2 Commands
These commands either precede a line of text, or are embedded within one.
    c Centering. Put this at the beginning of a line you want to center. This will center only one line ending in a return-mark. Repeat this command at the beginning of every line you want centered. Centering uses the page-width setting (see above) to properly center the line. To center a double-width line, either set the page width to 40 or pad out the rest of the line with an equal number of spaces. If you use double width, remember that the spaces preceding the centered text will be double-wide spaces.
    # When SpeedScript encounters this command, it prints the current page number. You usually embed this within a header or footer.
    u A simple form of underlining. It does not work on Commodore printers, but only on printers that recognize CHR$(8) as a backspace and CHR$(95) as an underline character. Underlining works on spaces, too. Use the first u to start underlining, and another one to turn off underlining.

Fonts And Styles
Most dot-matrix printers are capable of more than just printing text at ten characters per inch. The Commodore MPS-801 can print in double width and reverse field. Some printers have several character sets, with italics and foreign language characters. Most can print in double width (40 characters per line), condensed (132 characters per line), and in either pica or elite. Other features include programmable characters, programmable tab stops, and graphics modes. Many word processors customize themselves to a particular printer, but SpeedScript was purposely designed not to be printer-specific. Instead, SpeedScript lets you define your own Stage 2 printing commands.
    You define a programmable printkey by choosing any character that is not already used for other printer commands. The entire uppercase alphabet is available for printkeys, and you can choose letters that are related to their function (like D for double width). You enter these commands like printer commands, by first pressing CTRL-3.
    To define a printkey, just press CTRL-3, then the key you want to assign as the printkey, then an equals sign (=), and finally the ASCII value to be substituted for the printkey during printing. For example, to define the + key as the letter Z, you first look up the ASCII value of the letter Z (in either your printer manual or in Appendix J in The Commodore 64 User's Manual). The ASCII value of the letter Z is 91, so the definition is:  .

Now, anywhere you want to print the letter Z, substitute the printkey:



This would appear on paper as:

 Gadzooks! The zoo is zany!

    More practically, look up the value of reverse-on and reverse-off. Reverse-on, a value of 18, prints all text in reverse video until canceled by reverse-off (a value of 146) or a carriage return. So define SHIFT-R as 18 and SHIFT-O as 146. Anywhere you want to print a word in reverse, bracket the word with printkey R and printkey O.
    You can similarly define whatever codes your printer uses for features like double width or em phasized mode. For your convenience, four of the printkeys are predefined, though you can change them. Printkey 1 is defined as a 27, the value of the ESCape code used to precede many two-character printer commands. For example, the Epson command for double strike is ESC-G. You can select it in SpeedScript with
    Printkey 2, a value of 14, goes into double-width mode on most printers, and printkey 3, a value of 1.5, turns off double width on some printers and selects condensed mode on others. Printkey 4 is defined as 18, which selects reverse field with Commodore printers (and on some graphics interfaces in emulation mode), or condensed mode on some other printers.
    With so many codes available, you can even design custom logos and symbols using your printer's graphics mode. For example, on the 1525/MPS-801, you can draw a box (perhaps for a checklist) by first setting the appropriate codes:

Then display the box with text by typing:

This appears on paper as:


    Keep one thing in mind about printkeys. SpeedScript always assumes it is printing to a rather dumb, featureless printer, the least common denominator. SpeedScript doesn't understand the intent of a printkey; it justs sends its value out. So if you make one word within a line double-width, it may make the line overflow the specified right margin. There's no way for SpeedScript to include built-in font and type-style codes without being customized for a particular printer, since no set of codes is universal to all printers.

Hints And Tips
It may take you awhile to fully master SpeedScript, but as you do you'll discover many ways to use the editing and formatting commands. For example, there is a simple way to simulate tab stops, say for a columnar table. Just type a period at every tab stop position. Erase the line, then restore it multiple times. When you are filling in the table, just use word left/word right or sentence left/sentence right keys to jump quickly between the periods. Or you can use programmable printkeys to embed your printer's own commands for setting and jumping to tab stops.
    You don't have to change or define printer commands every time you write. Just save these defi nitions as a small text file, and load this file in each time you write. You can create many custom definition files and have them ready to use on disk. You can create customized "fill-in-the-blank" letters. Just type the letter, and everywhere you'll need to insert something, substitute a graphic symbol. When you're ready to customize the letter, just hunt for each graphic symbol and insert the specific information.
    SpeedScript does not work with any 80-column video boards or software. SpeedScript also wipes out most kinds of resident (RAMloaded) software, including most software-simulated printer drivers.

The Commodore 64 version of SpeedScript 3.0 may be ordered on disk directly from COMPUTE! Publications. Call TOLL FREE 800-334-0868 (in NC 919-275-9809) to charge your order 8:30 a.m.-7:00 p.m. EST, Monday through Friday. Or send check or money order ($12.95 plus $2.00 shipping and handling) to:

COMPUTE! Publications, Inc.
P.O. Box 5058
Greensboro, NC 27403 USA

Readers outside the US and Canada add $3.00 shipping and handling. All orders must be prepaid in US Funds.


Program 1: speedscript
3.0 For Commodore 64
Please refer to the "MLX" article
before entering this listing.

2049 :011,008,010,000,158,050,238
2055 :048,054,049,000,000,000,158
2061 :032,136,009,169,203,205,255
2067 :110,035,141,110,035,240,178
2073 :003,032,055,009,032,197,097
2079 :009,076,105,010,165,038,178
2085 :141,067,008,165,039,141,086
2091 :068,008,165,158,141,070,141
2097 :008,165,159,141,071,008,089
2103 :166,181,240,032,169,000,075
2109 :141,021,032,160,000,185,088
2115 :000,000,153,000,000,200,164
2121 :204,021,032,208,244,238,252
2127 :068,008,238,071,008,224,184
2133 :000,240,007,202,208,224,198
2139 :165,180,208,222,096,165,103
2145 :181,170,005,180,208,001,074
2151 :096,024,138,101,039,141,130
2157 :139,008,165,038,141,138,226
2163 :008,024,138,101,159,141,174
2169 :142,008,165,158,141,141,108
2175 :008,232,164,180,208,004,155
2181 :240,013,160,255,185,082,044
2187 :036,153,087,036,136,192,011
2193 :255,208,245,206,139,008,182
2199 :206,142,008,202,208,234,127
2205 :096,169,040,133,195,133,155
2211 :020,169,004,133,196,169,086
2217 :216,133,021,173,017,032,249
2223 :133,251,173,018,032,133,147
2229 :252,162,001,173,020,032,053
2235 :133,012,173,029,013,141,176
2241 :032,208,160,000,173,044,042
2247 :013,145,020,177,251,153,190
2253 :029,032,200,041,127,201,067
2259 :031,240,019,192,040,208,173
2265 :235,136,177,251,041,127,160
2271 :201,032,240,005,136,208,021
2277 :245,160,039,200,132,059,040
2283 :136,185,029,032,145,195,189
2289 :136,016,248,164,059,024,120
2295 :152,101,251,133,251,165,020
2301 :252,105,000,133,252,224,195
2307 :001,208,003,140,016,032,147
2313 :192,040,240,008,169,032,178
2319 :145,195,200,076,009,009,137
2325 :024,165,195,105,040,133,171
2331 :195,133,020,144,004,230,241
2337 :196,230,021,232,224,025,193
2343 :240,003,076,195,008,165,214
2349 :251,141,027,032,165,252,145
2355 :141,028,032,096,173,008,017
2361 :032,133,251,141,017,032,151
2367 :141,023,032,133,057,173,110
2373 :009,032,133,252,141,018,142
2379 :032,141,024,032,133,058,239
2385 :056,173,011,032,237,009,087
2391 :032,170,169,032,160,255,137
2397 :198,252,145,251,200,230,089
2403 :252,145,251,200,208,251,126
2409 :230,252,202,208,246,145,108
2415 :251,096,133,059,132,060,074
2421 :160,000,177,059,240,006,247
2427 :032,210,255,200,208,246,250
2433 :096,032,228,255,240,251,207
2439 :096,169,147,032,210,255,020
2445 :169,054,133,001,169,000,155
2451 :141,020,032,141,008,032,009
2457 :141,010,032,141,012,032,009
2463 :141,014,032,141,176,032,183
2469 :141,207,032,169,036,024,006
2475 :105,001,141,009,032,169,116
2481 :207,141,011,032,169,208,177
2487 :141,013,032,169,255,141,166
2493 :015,032,141,174,032,076,147
2499 :132,255,032,226,013,169,254
2505 :128,141,138,002,133,157,132
2511 :032,093,017,169,006,141,153
2517 :024,003,169,010,141,025,073
2523 :003,173,008,032,133,057,113
2529 :173,009,032,133,058,032,150
2535 :246,009,169,038,160,030,115
2541 :032,113,009,238,019,032,168
2547 :076,177,011,032,078,010,115
2553 :169,018,160,030,032,113,003
2559 :009,169,000,141,019,032,113
2565 :096,072,138,072,152,072,095
2571 :169,127,141,013,221,172,086
2577 :013,221,016,003,076,114,204
2583 :254,173,113,036,240,006,077
2589 :165,002,160,000,145,057,046
2595 :169,002,133,012,032,204,075
2601 :255,032,078,010,169,247,064
2607 :160,031,032,113,009,032,168
2613 :167,016,208,009,032,069,042
2619 :020,120,169,127,076,102,161
2625 :254,032,069,020,162,250,084
2631 :154,032,197,009,076,105,132
2637 :010,162,039,169,032,157,134
2643 :000,004,202,016,250,169,212
2649 :019,076,210,255,072,041,250
2655 :128,074,133,059,104,041,122
2661 :063,005,059,096,160,000,228
2667 :140,113,036,177,057,133,251
2673 :002,160,000,177,057,073,070
2679 :128,145,057,173,113,036,003
2685 :073,001,141,113,036,032,009
2691 :158,008,032,228,255,208,252
2697 :013,165,162,041,016,240,006
2703 :245,169,000,133,162,076,160
2709 :114,010,170,160,000,165,000
2715 :002,145,057,140,113,036,136
2721 :224,095,208,012,032,112,076
2727 :012,169,032,160,000,145,173
2733 :057,076,105,010,173,019,101
2739 :032,240,007,138,072,032,188
2745 :246,009,104,170,138,201,029
2751 :013,208,002,162,095,138,041
2757 :041,127,201,032,144,078,052
2763 :224,160,208,002,162,032,223
2769 :138,072,160,000,177,057,045
2775 :201,031,240,005,173,020,117
2781 :032,240,003,032,056,016,088
2787 :104,032,093,010,160,000,114
2793 :145,057,032,158,008,056,177
2799 :165,057,237,023,032,133,118
2805 :059,165,058,237,024,032,052
2811 :005,059,144,014,165,057,183
2817 :105,000,141,023,032,165,211
2823 :058,105,000,141,024,032,111
2829 :230,057,208,002,230,058,030
2835 :032,177,011,076,105,010,174
2841 :138,174,059,011,221,059,175
2847 :011,240,006,202,208,248,178
2853 :076,105,010,202,138,010,066
2859 :170,169,010,072,169,104,225
2865 :072,189,100,011,072,189,170
2871 :099,011,072,096,039,029,145
2877 :157,137,133,002,012,138,128
2883 :134,020,148,004,019,009,145
2889 :147,135,139,005,136,140,007
2895 :022,145,017,159,018,024,208
2901 :026,016,028,030,006,001,192
2907 :011,008,031,003,131,010,029
2913 :141,007,102,012,111,012,226
2919 :122,012,176,012,016,013,198
2925 :029,013,044,013,146,013,111
2931 :217,014,055,016,013,015,189
2937 :080,015,157,016,190,016,083
2943 :224,016,001,017,163,017,053
2949 :202,019,181,018,025,020,086
2955 :044,013,146,013,097,020,216
2961 :123,021,033,022,244,012,088
2967 :179,022,168,019,079,027,133
2973 :244,014,049,022,225,013,212
2979 :232,027,239,029,244,015,181
2985 :236,015,139,028,028,016,119
2991 :199,027,032,015,012,056,004
2997 :165,057,237,017,032,165,086
3003 :058,237,018,032,176,032,228
3009 :056,173,017,032,237,008,204
3015 :032,133,059,173,018,032,134
3021 :237,009,032,005,059,240,019
3027 :013,165,057,141,017,032,124
3033 :165,058,141,018,032,032,151
3039 :158,008,056,173,027,032,165
3045 :229,057,133,251,173,028,076
3051 :032,229,058,133,252,005,176
3057 :251,240,002,176,024,024,190
3063 :173,017,032,109,016,032,114
3069 :141,017,032,173,018,032,154
3075 :105,000,141,018,032,032,075
3081 :158,008,076,225,011,096,071
3087 :056,173,023,032,237,010,034
3093 :032,133,059,173,024,032,218
3099 :237,011,032,005,059,144,003
3105 :012,173,010,032,141,023,168
3111 :032,173,011,032,141,024,196
3117 :032,056,165,057,237,008,088
3123 :032,133,059,165,058,237,223
3129 :009,032,005,059,176,011,093
3135 :173,008,032,133,057,173,127
3141 :009,032,133,058,096,056,197
3147 :165,057,237,023,032,133,210
3153 :059,165,058,237,024,032,144
3159 :005,059,176,001,096,173,085
3165 :023,032,133,057,173,024,023
3171 :032,133,058,096,230,057,193
3177 :208,002,230,058,076,177,088
3183 :011,165,057,208,002,198,240
3189 :058,198,057,076,177,011,182
3195 :165,057,133,251,165,058,184
3201 :133,252,198,252,160,255,099
3207 :177,251,201,032,240,004,016
3213 :201,031,208,003,136,208,160
3219 :243,177,251,201,032,240,011
3225 :008,201,031,240,004,136,005
3231 :208,243,096,056,152,101,247
3237 :251,133,057,165,252,105,104
3243 :000,133,058,076,177,011,114
3249 :160,000,177,057,201,032,036
3255 :240,008,201,031,240,004,139
3261 :200,208,243,096,200,208,064
3267 :011,230,058,165,058,205,154
3273 :024,032,144,002,208,025,124
3279 :177,057,201,032,240,236,126
3285 :201,031,240,232,024,152,069
3291 :101,057,133,057,165,058,022
3297 :105,000,133,058,076,177,006
3303 :011,173,023,032,133,057,148
3309 2173,024,032,133,058,076,221
3315 :177,011,169,000,141,017,246
3321 :032,173,024,032,056,233,031
3327 :004,205,009,032,176,003,172
3333 :173,009,032,141,018,032,154
3339 :032,158,008,076,232,012,017
3345 :238,029,013,173,029,013,000
3351 :041,015,141,029,013,096,102
3357 :012,238,044,013,173,044,041
3363 :013,041,015,141,044,013,046
3369 :076,158,008,011,165,057,004
3375 :133,251,165,058,133,252,015
3381 :198,252,160,255,177,251,066
3387 :201,046,240,012,201,033,024
3393 :240,008,201,063,240,004,053
3399 :201,031,208,004,136,208,091
3405 :235,096,177,251,201,046,059
3411 :240,027,201,033,240,023,079
3417 :201,063,240,019,201,031,076
3423 240,015,136,208,235,198,103
3429 :252,165,252,205,008,032,247
3435 :176,226,076,134,013,132,096
3441 :059,198,059,200,240,010,111
3447 :177,251,201,032,240,247,243
3453 :136,076,162,012,164,059,222
3459 :076,079,013,173,008,032,000
3465 :133,057,173,009,032,133,162
3471 :058,076,177,011,160,000,113
3477 :177,057,201,046,240,029,131
3483 :201,033,240,025,201,063,150
3489 :240,021,201,031,240,017,143
3495 :200,298,235,230,058,165,239
3501 :058,205,024,032,240,226,190
3507 :144,224,076,232,012,200,043
3513 :208,014,230,058,165,058,150
3519 :205,024,032,144,005,240,073
3525 :003,076,232,012,177,057,242
3531 :201,032,240,233,201,046,132
3537 :240,229,201,033,240,225,097
3543 :201,063,240,221,201,031,148
3549 :240,217,076,217,012,173,132
3555 :012,032,141,140,032,173,245
3561 :013,032,141,141,032,032,112
3567 :078,010,169,058,160,030,232
3573 :032,113,009,169,001,141,198
3579 :019,032,096,056,165,057,164
3585 :237,008,032,133,059,165,123
3591 :058,237,009,032,005,059,151
3597 :208,003,104,104,096,165,181
3603 :057,133,038,165,058,133,091
3609 :039,096,056,165,057,133,059
3615 :158,073,255,101,038,141,029
3621 :144,032,165,058,133,159,216
3627 :073,255,101,039,141,145,029
3633 :032,165,038,141,146,032,091
3639 :165,039,141,147,032,165;232
3645 :158,141,148,032,133,038,199
3651 :165,159,141,149,032,133,078
3657 :039,056,173,145,032,109,115
3663 :141,032,205,015,032,144,136
3669 :020,032,078,010,169,073,211
3675 :160,030,032,113,009,169,092
3681 :001,141,019,032,169,000,203
3687 :133,198,096,173,140,032,107
3693 :133,158,173,141,032,133,111
3699 :159,173,144,032,133,180,168
3705 :024,109,140,032,141,140,195
3711 :032,173,145,032,133,181,055
3717 :109,141,032,141,141,032,217
3723 :169,000,141,026,208,169,084
3729 :052,133,001,032,035,008,150
3735 :169,054,133,001,169,001,166
3741 :141,026,288,173,146,032,115
3747 :133,038,173,147,032,133,051
3753 :039,173,148,032,133,158,084
3759 :173,149,032,133,159,056,109
3765 :173,023,032,229,158,133,161
3771 :180,173,024,032,229,159,216
3777 :133,181,032,035,008,056,126
3783 :173,023,032,237,144,032,072
3789 :141,023,032,173,024,032,118
3795 :237,145,032,141,024,032,054
3801 :096,032,254,013,032,112,244
3807 :012,032,027,014,056,173,025
3813 :140,032,233,001,141,140,148
3819 :032,173,141,032,233,000,078
3825 :141,141,032,096,173,141,197
3831 :002,201,005,208,003,076,230
3837 :122,015,032,103,012,032,057
3843 :154,013,032,112,012,032,202
3849 :027,014,076,227,014,032,143
3855 :226,013,169,002,133,012,058
3861 :032,078,010,169,085,160,043
3867 :030,032,113,009,032,130,117
3873 :009,072,032,246,009,104,249
3879 :041,191,201,023,208,009,200
3885 :032,254,013,032,123,012,255
3891 :076,027,014,201,019,208,084
3897 :009,032,254,013,032,045,186
3903 :013,076,027,014,201,016,154
3909 :208,009,032,254,013,032,105
3915 :092,017,076,027,014,096,051
3921 :056,165,057,237,017,032,133
3927 :133,059,165,058,237,018,245
3933 :032,005,059,240,011,173,101
3939 :017,032,133,057,173,018,017
3945 :032,133,058,096,173,008,093
3951 :032,133,057,173,009,032,035
3957 :133,058,076,177,011,165,225
3963 :057,133,251,133,158,165,252
3969 :058,133,252,133,159,160,000
3975 :000,177,251,201,032,208,236
3981 :030,200,208,247,165,252,219
3987 :205,024,032,144,015,173,228
3993 :023,032,133,251,173,024,021
3999 :032,133,252,160,000,076,044
4005 :172,015,230,252,076,136,022
4011 :015,024,152,101,251,133,079
4017 :038,169,000,101,252,133,102
4023 :039,056,173,023,032,229,223
4029 :158,133,180,173,024,032,121
4035 :229,159,133,181,056,165,094
4041 :038,229,158,141,144,032,175
4047 :165,039,229,159,141,145,061
4053 :032,032,035,008,056,173,037
4059 :023,032,237,144,032,141,060
4065 :023,032,173,024,032,237,234
4071 :145,032,141,024,032,096,189
4077 :169,255,141,169,032,076,055
4083 :007,016,169,005,141,169,238
4089 :032,032,007,016,177,057,058
4095 :201,032,208,001,200,076,205
4101 :217,012,169,000,141,170,202
4107 :032,032,078,016,169,032,114
4113 :174,169,032,160,000,145,185
4119 :057,200,202,208,250,096,012
4125 :032,056,016,032,056,016,237
4131 :169,031,160,000,145,057,085
4137 :200,145,057,032,158,008,129
4143 :032,103,012,032,103,012,085
4149 :076,245,015,169,001,141,188
4155 :169,032,169,000,141,170,228
4161 :032,032,078,016,169,032,168
4167 :160,000,145,057,076,177,174
4173 :011,024,173,023,032,109,193
4179 :169,032,173,024,032,109,110
4185 :170,032,205,011,032,144,171
4191 :005,104,104,076,157,016,045
4197 :024,165,057,133,038,109,115
4203 :169,032,133,158,165,058,054
4209 :133,039,109,170,032,133,217
4215 :159,056,173,023,032,229,023
4221 :038,133,180,173,024,032,193
4227 :229,039,133,181,032,096,073
4233 :008,024,173,023,032,109,250
4239 :169,032,141,023,032,173,201
4245 :024,032,109,170,032,141,145
4251 :024,032,096,173,020,032,020
4257 :073,014,141,020,032,096,025
4263 :169,100,160,030,032,113,003
4269 :009,032,159,255,032,228,120
4275 :255,240,248,201,147,240,230
4281 :244,041,127,201,089,096,215
4287 :169,002,133,012,032,078,105
4293 :010,169,123,160,030,032,209
4299 :113,009,032,167,016,240,012
4305 :003,076,246,009,162,250,187
4311 :154,032,055,009,032,197,182
4317 :009,076,105,010,160,000,069
4323 :177,057,201,031,240,017,182
4329 :200,208,247,230,058,165,061
4335 :058,205,024,032,144,238,172
4341 :240,236,076,232,012,200,217
4347 :208,002,230,058,076,217,018
4353 :012,165,057,133,251,165,016
4359 :058,133,252,198,252,160,036
4365 :255,177,251,201,031,240,144
4371 :017,136,192,255,208,245,048
4377 :198,252,165,252,205,009,082
4383 :032,176,236,076,134,013,186
4389 :056,152,101,251,133,251,213
4395 :169,000,101,252,133,252,182
4401 :056,165,251,229,057,133,172
4407 :059,165,252,229,058,005,055
4413 :059,208,018,132,059,024,049
4419 :165,251,229,059,133,251,131
4425 :165,252,233,000,133,252,084
4431 :076,020,017,165,251,133,229
4437 :057,165,252,133,058,076,058
4443 :177,011,120,169,000,141,197
4449 :014,220,169,027,141,017,173
4455 :208,169,124,141,020,003,000
4461 :169,017,141,021,003,169,117
4467 :001,141,026,208,141,018,138
4473 :208,088,096,169,058,164,136
4479 :012,205,018,208,208,005,015
4485 :169,001,172,029,013,140,145
4491 :033,208,141,018,208,201,180
4497 :001,240,008,169,001,141,193
4503 :025,208,076,188,254,169,047
4509 :001,141,025,208,076,049,145
4515 :234,173,141,002,041,001,243
4521 :208,003,032,226,013,032,171
4527 :078,010,169,138,160,030,248
4533 :032,113,009,160,000,177,160
4539 :057,073,128,145,057,032,167
4545 :158,008,160,000,177,057,241
4551 :073,128,145,057,169,002,005
4557 :133,012,032,130,009,009,018
4563 :064,201,087,208,009,032,044
4569 :001,018,032,177,012,076,021
4575 :016,018,201,083,208,009,246
4581 :032,001,018,032,147,013,216
4587 :076,016,018,201,080,208,066
4593 :009,032,001,018,032,225,046
4599 :016,076,016,018,032,177,070
4605 :011,076,246,009,165,057,049
4611 :133,158,141,134,032,165,254
4617 :058,133,159,141,135,032,155
4623 :096,056,165,057,133,038,048
4629 :237,134,032,141,144,032,229
4635 :165,058,133,039,237,135,026
4641 :032,141,145,032,032,050,209
4647 :014,173,134,032,133,057,070
4653 :173,135,032,133,058,032,096
4659 :158,008,076,184,017,169,151
4665 :039,229,211,141,025,032,222
4671 :160,000,169,153,032,210,019
4677 :255,169,018,032,210,255,240
4683 :169,032,032,210,255,169,174
4689 :157,032,210,255,140,026,133
4695 :032,032,130,009,172,026,232
4701 :032,133,059,169,146,032,152
4707 :210,255,169,032,032,210,239
4713 :255,169,157,032,210,255,159
4719 :169,155,032,210,255,165,073
4725 :059,201,013,240,050,201,113
4731 :020,208,015,136,016,004,010
4737 :200,076,065,018,169,157,046
4743 :032,210,255,076,065,018,023
4749 :165,059,041,127,201,032,254
4755 :144,172,204,025,032,240,196
4761 :167,165,059,153,069,032,030
4767 :032,210,255,169,000,133,190
4773 :212,133,216,200,076,065,043
4779 :018,032,210,255,169,000,087
4785 :153,069,032,152,096,032,199
4791 :078,010,169,188,160,030,050
4797 :032,113,009,032,028,019,166
4803 :176,032,173,008,032,133,237
4809 :251,173,009,032,133,252,027
4815 :174,023,032,172,024,032,152
4821 :169,251,032,216,255,176,032
4827 :009,165,144,041,191,208,209
4833 :003,076,010,020,240,039,101
4839 :173,027,019,201,008,144,035
4845 :006,032,150,027,076,005,021
4851 :019,173,027,019,201,001,171
4857 :240,249,032,078,010,169,003
4863 :194,160,030,032,113,009,025
4869 :032,093,017,169,001,141,202
4875 :019,032,096,032,078,010,022
4881 :169,205,160,030,032,113,214
4887 :009,076,005,019,000,032,164
4893 :056,018,240,022,169,236,002
4899 :160,030,032,113,009,032,155
4905 :130,009,162,008,201,068,107
4911 :240,012,162,001,201,084,235
4917 :240,006,032,246,009,104,178
4923 :104,096,142,027,019,169,104
4929 :001,160,000,032,186,255,187
4935 :160,000,224,001,240,049,233
4941 :185,069,032,201,064,208,068
4947 :014,185,070,032,201,058,131
4953 :240,035,185,071,032,201,085
4959 :058,240,028,169,048,141,011
4965 :109,032,169,058;141,110,208
4971 :032,185,069,032,153,111,177
4977 :032,200,204,026,032,144,239
4983 :244,240,242,200,076,138,235
4989 :019,185,069,032,153,109,180
4995 :032,200,204,026,032,208,065
5001 :244,140,133,032,032,078,028
5007 :010,169,069,160,032,032,103
5013 :113,009,173,133,032,162,003
5019 :109,160,032,032,189,255,164
5025 :169,013,032,210,255,076,148
5031 :069,020,032,078,010,169,033
5037 :170,160,030,032,113,009,175
5043 :032,130,009,032,093,010,229
5049 :009,128,072,173,020,032,107
5055 :240,003,032,056,016,032,058
5061 :246,009,104,076,231,010,105
5067 :056,165,057,237,008,032,246
5073 :333,059,165,058,237,009,102
5079 :032,005,059,240,004,169,212
5085 :005,133,012,032,078,010,235
5091 :169,000,160,031,032,113,220
5097 :009,032,028,019,165,012,242
5103 :201,005,240,003,032,055,007
5109 :009,169,000,166,057,164,042
5115 :058,032,213,255,144,003,188
5121 :076,229,018,142,023,032,009
5127 :140,024,032,032,231,255,209
5133 :032,078,010,169,226,160,176
5139 :030,032,113,009,076,005,028
5145 :019,032,078,010,169,006,083
5151 :160,031,032,113,009,032,152
5157 :028,019,169,001,174,008,180
5163 :032,172,009,032,032,213,021
5169 :255,165,144,041,191,240,061
5175 :210,032,078,010,169,213,255
5181 :160,030;032,113,009;076,225
5187 :005,019,120,169,000,141,009
5193 :026,208,141,032,208,141,061
5199 :033,208,169,049,141,020,187
5205 :003,169,234,141,021,003,144
5211 :169,001,141,014,220,088,212
5217 :096,169,147,032,210,255,238
5223 :169,013,032,210,255,032,046
5229 :069,020,032,148,020,169,055
5235 :013,032,210,255,169,014,040
5241 :160,031,032,113,009,032,242
5247 :228,255,201,013,208,249,001
5253 :032,093,017,076,246,009,094
5259 :032,204,255,169,001,032,064
5265 :195,255,096,032,231,255,185
5271 :169,001,162,008,160,000,139
5277 :032,186,255,169,001,162,194
5283 :043,160,031,032,189,255,105
5289 :032,192,255,176,221,162,183
5295 :001,032,198,255,032,001,182
5301 :021,032,001,021,032,001,033
5307 :021,032,001,021,240,202,192
5313 :032,204,255,032,228,255,175
5319 :201,032,208,003,032,130,037
5325 :009,162,001,032,198,255,094
5331 :032,001,021,072,032,001,114
5337 :021,168,104,170,152,160,224
5343 :055,132,001,032,205,189,069
5349 :160,054,132,001,169,032,009
5355 :032,210,255,032,001,021,018
5361 :240,006,032,210,255,076,036
5367 :238,020,169,013,032,210,161
5373 :255,076,185,020,032,207,004
5379 :255,072,165,144,041,191,103
5385 :240,006,104,104,104,076,131
5391 :139,020,104,096,162,000,024
5397 :142,136,032,142,137,032,130
5403 :142,138,032,142,139,032,140
5409 :056,177,251,233,048,144,174
5415 :042,201,010,176,038,014,008
5421 :136,032,046,137,032,014,186
5427 :136,032,046,137,032,014,192
5433 :136,032,046,137,032,014,198
5439 :136,032,046,137,032,013,203
5445 :136,032,141,136,032,200,234
5451 :208,212,230,252,076,033,062
5457 :021,248,173,136,032,013,192
5463 :137,032,240,028,056,173,241
5469 :136,032,233,001,141,136,004
5475 :032,173,137,032,233,000,194
5481 :141,137,032,238,138,032,055
5487 :208,003,238,139,032,076,039
5493 :083,021,173,138,032,216,012
5499 :096,056,173,140,032,237,089
5505 :012,032,141,142,032,173,149
5511 :141,032,237,013,032,141,219
5517 :143,032,013,142,032,208,199
5523 :016,032,078,010,169,052,248
5529 :160,031,032,113,009,169,155
5535 :001,141,019,032,096,024,216
5541 :165,057,133,038,109,142,041
5547 :032,133,158,165,058,133,082
5553 :039,109,143,032,133,159,024
5559 :056,173,023,032,229,038,222
5565 :133,180,173,024,032,229,192
5571 :039,133,181,024,101,159,064
5577 :205,011,032,144,016,032,129
5583 :078,010,169,044,160,031,187
5589 :032,113,009,169,001,141,166
5595 :019,032,096,032,096,008,246
5601 :024,173,142,032,133,180,141
5607 :109,023,032,141,023,032,079
5613 :173,143,032,133,181,109,240
5619 :024,032,141,024,032,165,149
5625 :057,133,158,165,058,133,185
5631 :159,173,012,032,133,038,034
5637 :173,013,032,133,039,169,052
5643 :000,141,026,208,169,052,095
5649 :133,001,032,035,008,169,139
5655 :054,133,001,169,001,141,010
5661 :026,208,076,177,011,160,175
5667 :000,177,057,170,200,177,048
5673 :057,136,145,057,200,138,006
5679 :145,057,096,160,000,177,170
5685 :057,041,063,240,010,201,153
5691 :027,176,006,177,057,073,063
5697 :064,145,057,076,103,012,010
5703 :133,059,041,063,006,059,176
5709 :036,059,016,002,009,128,071
5715 :112,002,009,064,133,059,206
5721 :096,005,075,066,005,058,138
5727 :001,001,001,000,001,000,099
5733 :080,027,014,015,018,141,140
5739 :175,032,138,072,152,072,236
5745 :056,173,159,032,237,161,163
5751 :032,173,160,032,237,162,147
5757 :032,144,031,173,175,032,200
5763 :032,210,255,173,141,002,176
5769 :041,001,141,032,208,208,000
5775 :246,165,145,201,127,208,211
5781 :009,238,032,208,032,084,240
5787 :025,076,120,024,104,168,160
5793 :104,170,173,175,032,096,143
5799 :032,078,010,169,164,160,012
5805 :031,076,113,009,076,120,086
5811 :024,173,029,013,141,111,158
5817 :036,169,000,133,012,141,164
5823 :032,208,141,029,013,032,134
5829 :189,255,169,004,141,170,101
5835 :032,160,007,173,141,002,206
5841 :041,001,208,003,076,104,130
5847 :023,032,078,010,169,071,086
5853 :160,031,032,113,009,032,086
5859 :130,009,041,127,162,003,187
5865 :142,170,032,201,083,240,077
5871 :086,162,008,142,170,032,071
5877 :201,068,240,034,201,080,045
5883 :208,180,032,078,010,169,160
5889 :109,160,031,032,113,009,199
5895 :032,130,009,056,233,048,003
5901 :201,004,144,160,201,080,035
5907 :176,156,141,170,032,076,002
5913 :070,023,032,078,010,169,151
5919 :145,160,031,032,113,009,009
5925 :032,056,018,240,135,172,178
5931 :026,032,169,044,153,069,024
5937 :032,200,169,087,153,069,247
5943 :032,200,140,026,032,173,146
5949 :026,032,162,069,160,032,030
5955 :032,189,255,173,170,032,150
5961 :168,201,004,144,026,201,049
5967 :008,176,022,032,078,010,149
5973 :169,124,160,031,032,113,202
5979 :009,032,130,009,056,233,048
5985 :048,168,016,003,076,177,073
5991 :022,169,001,174,170,032,159
5997 :032,186,255,032,167,022,035
6003 :169,001,032,195,255,032,031
6009 :192,255,162,001,032,201,196
6015 :255,144,003,076,120,024,237
6021 :162,000,142,151,032,142,250
6027 :150,032,142,171,032,142,040
6033 :172,032,142,112,036,189,060
6039 :090,022,157,152,032,232,068
6045 :224,012,208,245,169,255,246
6051 :141,166,032,141,164,032,071
6057 :162,004,189,101,022,157,036
6063 :030,033,202,208,247,173,044
6069 :008,032,133,251,173,009,019
6075 :032,133,252,160,000,140,136
6081 :165,032,204,164,032,240,006
6087 :006,173,152,032,141,165,100
6093 :032,177,251,016,003,076,248
6099 :098,025,201,031,240,044,982
6105 :153,110,033,200,238,165,092
6111 :032,173,165,032,205,153,215
6117 :032,144,230,140,022,032,061
6123 :177,251,201,032,240,020,132
6129 :206,165,032,136,208,244,208
6135 :172,022,032,076,008,024,069
6141 :200,177,251,201,032,240,074
6147 :001,136,140,022,032,152,230
6153 :056,101,251,133,251,165,198
6159 :252,105,000,133,252,160,149
6165 :000,173,166,032,201,255,080
6171 :208,003,032,009,025,173,221
6177 :164,032,240,003,032,049,041
6183 :025,056,046,164,032,173,023
6189 :022,032,141,021,032,169,206
6195 :110,133,253,169,033,133,114
6201 :254,032,051,029,032,066,009
6207 :025,173,166,032,205,156,052
6213 :032,144,003,032,151,024,199
6219 :056,165,251,237,023,032,071
6225 :133,059,165,252,237,024,183
6231 :032,005,059,240,056,144,111
6237 :054,173,151,032,240,011,242
6243 :169,000,141,150,032,141,220
6249 :155,032,032,151,024,173,160
6255 :170,032,201,003,208,003,216
6261 :032,130,009,032,225,255,032
6267 :240,251,169,001,032,195,243
6273 :255,032,231,255,173,111,162
6279 :036,141,029,013,162,250,254
6285 :154,032,246,009,076,105,251
6291 :010,076,190,023,056,173,163
6297 :154,032,237,166,032,168,174
6303 :136,136,240,008,048,006,221
6309 :032,084,025,136,208,250,132
6315 :173,151,032,240,017,141,157
6321 :021,032,169,111,133,253,128
6327 :169,035,133,254,032,049,087
6333 :025,032,051,029,032,084,186
6339 :025,032,084,025,032,084,221
6345 :025,238,159,032,208,003,098
6351 :238,160,032,173,158,032,232
6357 :208,050,173,170,032,201,023
6363 :003,240,043,201,008,240,186
6369 :039,056,173,159,032,237,153
6375 :161,032,173,160,032,237,002
6381 :162,032,144,024,032,204,067
6387 :255,032,078,010,169,179,198
6393 :160,031,032,113,009,032,114
6399 :130,009,032,167,022,162,009
6405 :001,032,201,255,173,150,049
6411 :032,240,017,141,021,032,238
6417 :169,110,133,253,169,034,117
6423 :133,254,032,049,025,032,036
6429 :051,029,172,155,032,140,096
6435 :166,032,136,240,008,048,153
6441 :006,032,084,025,136,208,020
6447 :250,096,169,032,172,152,150
6453 :032,140,165,032,240,006,156
6459 :032,106,022,136,208,250,045
6465 :096,172,157,032,024,152,186
6471 :109,166,032,141,166,032,205
6477 :032,084,025,136,208,250,044
6483 :096,169,013,032,106,022,009
6489 :173,112,036,240,003,032,173
6495 :106,022,096,141,168,032,148
6501 :041,127,032,071,022,174,056
6507 :173,025,221,173,025,240,196
6513 :009,202,208,248,206,165,127
6519 :032,076,190,026,202,138,015
6525 :010,170,140,167,032,169,045
6531 :025,072,169,144,072,189,034
6537 :193,025,072,189,192,025,065
6543 :072,096,056,173,167,032,227
6549 :101,251,133,251,165,252,022
6555 :105,000,133,252,076,190,143
6561 :023,177,251,201,031,240,060
6567 :001,136,140,167,032,096,227
6573 :018,087,065,076,082,084,073
6579 :066,083,078,072,070,064,100
6585 :080,063,088,077,073,071,125
6591 :074,032,026,050,026,059,202
6597 :026,069,026,079,026,089,000
6603 :026,099,026,109,026,124,101
6609 :026,158,026,006,026,022,217
6615 :026,246,025,236,025,227,232
6621 :025,183,026,224,026,041,234
6627 :026,200,169,000,141,164,159
6633 :032,076,162,025,200,032,248
6639 :019,021,141,163,032,076,179
6645 :162,025,200,032,019,021,192
6651 :141,161,032,173,139,032,161
6657 :141,162;032,076,162,025,087
6663 :200,032,019,021,141,159,067
6669 :032,173,139,032,141,160,178
6675 :032,076,162,025,200,032,034
6681 :019,021,141,154,032,076,212
6687 :162,025,169,000,141,158,174
6693 :032,200,076,162,025,169,189
6699 :010,141,112,036,200,076,106
6705 :162,025,200,169,001,141,235
6711 :171,032,076,162,025,200,209
6717 :032,019,021,141,152,032,202
6723 :076,162,025,200,032,019,069
6729 :021,141,153,032,076,162,146
6735 :025,200,032,019,021,141,005
6741 :155,032,076,162,025,200,223
6747 :032,019,021,141,156,032,236
6753 :076,162,025,200,032,019,099
6759 :021,141,157,032,076,162,180
6765 :025,172,167,032,200,152,089
6771 :072,032,151,024,104,168,154
6777 :140,167,032,096,032,151,227
6783 :026,136,140,150,032,160,003
6789 :001,177,251,153,109,034,090
6795 :200,204,150,032,144,245,090
6801 :240,243,200,076,162,025,067
6807 :200,177,251,201,031,208,195
6813 :249,096,032,151,026,136,079
6819 :140,151,032,160,001,177,056
6825 :251,153,110,035,200,204,098
6831 :151,032,144,245,240,243,206
6837 :076,162,025,032,151,026,141
6843 :076,162,025,200,177,251,054
6849 :201,061,240,007,136,173,243
6855 :168,032,076,217,023,200,147
6861 :032,019,021,072,173,168,178
6867 :032,041,127,170,104,157,074
6873 :238,032,032,162,025,076,014
6879 :145,025,200,162,008,177,172
6885 :251,041,063,201,004,240,005
6891 :009,162,001,201,020,240,100
6897 :003,076,177,022,142,027,176
6903 :019,200,177,251,201,058,129
6909 :240,003,076,177,022,200,203
6915 :177,251,201,031,240,009,144
6921 :032,071,022,153,106,032,169
6927 :076,002,027,152,056,233,049
6933 :003,162,109,160,032,032,007
6939 :189,255,032,204,255,169,107
6945 :002,032,195,255,169,002,176
6951 :174,027,019,160,000,032,195
6957 :186,255,032,055,009,169,239
6963 :000,166,057,164,058,032,016
6969 :213,255,144,003,076,177,157
6975 :022,142,023,032,140,024,190
6981 :032,104,104,162,001,032,248
6987 :201,255,076,180,023,032,074
6993 :231,255,169,000,032,189,189
6999 :255,169,015,162,008,160,088
7005 :015,032,186,255,032,192,037
7011 :255,144,011,169,015,032,213
7017 :195,255,032,231,255,076,125
7023 :246,009,032,078,010,169,143
7029 :029,160,031,032,113,009,235
7035 :032,056,018,240,022,162,141
7041 :015,032,201,255,176,223,007
7047 :169,069,160,032,032,113,198
7053 :009,169,013,032,210,255,061
7059 :032,204,255,032,231,255,132
7065 :169,000,032,189,255,169,199
7071 :015,162,008,160,015,032,039
7077 :186,255,032,192,255,176,237
7083 :186,032,078,010,162,015,142
7089 :032,198,255,032,056,018,000
7095 :032,204,255,169,015,032,122
7101 :195,255,032,231,255,169,046
7107 :001,141,019,032,096,032,004
7113 :240,027,173,176,032,240,065
7119 :022,032,147,028,032,022,234
7125 :028,173,174,032,201,255,052
7131 :240,009,032,182,028,032,230
7137 :158,008,076,211,027,076,013
7143 :246,009,173,141,002,201,235
7149 :065,208,038,032,078,010,096
7155 :169,213,160,031,032,113,193
7161 :009,032,056,018,141,176,169
7167 :032,208,003,076,246,009,061
7173 :160,000,185,069,032,153,092
7179 :177,032,200,204,026,032,170
7185 :208,244,076,246,009,165,197
7191 :057,133,251,165,058,133,052
7197 :252,169,255,141,174,032,028
7203 :160,001,162,000,173,176,195
7209 :032,240,080,189,177,032,023
7215 :032,093,010,209,251,240,114
7221 :002,162,255,200,208,011,123
7227 :230,252,165,252,205,024,163
7233 :032,240,002,176,054,232,033
7239 :236,176,032,208,224,024,203
7245 :152,101,251,133,059,165,170
7251 :252,105,000,133,060,173,038
7257 :023,032,197,059,173,024,085
7263 :032,229,060,144,024,056,128
7269 :165,059,237,176,032,133,135
7275 :057,141,173,032,165,060,223
7281 :233,000,133,058,141,174,084
7287 :032,032,177,011,096,032,243
7293 :078,010,169,223,160,031,028
7299 :032,113,009,169,001,141,084
7305 :019,032,096,173,141,002,088
7311 :201,005,208,035,032,078,190
7317 :010,169,233,160,031,032,016
7323 :113,009,032,056,018,141,012
7329 :207,032,240,014,160,000,046
7335 :185,069,032,153,208,032,078
7341 :200,204,026,032,208,244,063
7347 :076,246,009,056,165,057,020
7353 :133,158,237,173,032,133,027
7359 :059,165,058,133,159,237,234
7365 :174,032,005,059,208,101,008
7371 :169,255,141,174,032,024,230
7377 :173,176,032,101,057,133,113
7383 :038,169,000,101,058,133,202
7389 :039,056,173,023,032,229,005
7395 :158,133,180,173,024,032,159
7401 :229,159,133,181,032,035,234
7407 :008,056,173,023,032,237,000
7413 :176,032,141,023,032,173,054
7419 :024,032,233,000,141,024,193
7425 :032,173,207,032,240,041,214
7431 :141,169,032,169,000,141,147
7437 :170,032,032,078,016,160,245
7443 :000,185,208,032,032,093,057
7449 :010,145,057,200,204,207,080
7455 :032,208,242,024,165,057,247
7461 :109,207,032,133,057,165,228
7467 :058,105,000,133,058,076,217
7473 :177,011,160,000,204,021,110
7479 :032,240,032,177,253,048,069
7485 :029,032,071,022,032,208,199
7491 :029,032,106,022,173,172,089
7497 :032,240,010,169,008,032,052
7503 :106,022,169,095,032,106,097
7509 :022,200,076,053,029,096,049
7515 :140,167,032,041,127,141,227
7521 :168,032,032,071,022,201,111
7527 :067,208,027,056,173,163,029
7533 :032,237,021,032,074,056,049
7539 :237,152,032,168,169,032,137
7545 :032,106,022,136,208,250,107
7551 :172,167,032,076,086,029,177
7557 :201,069,208,017,056,173,089
7563 :153,032,237,021,032,056,158
7569 :237,152,032,168,169,032,167
7575 :076,121,029,201,085,208,103
7581 :008,173,172,032,073,001,104
7587 :141,172,032,201,035,208,184
7593 :026,140,167,032,174,159,099
7599 :032,173,160,032,160,055,019
7605 :132,001,032,205,189,160,132
7611 :054,132,001,172,167,032,233
7617 :076,086,029,174,168,032,246
7623 :189,238,032,032,106,022,050
7629 :076,086,029,174,171,032,005
7635 :240,026,133,059,041,127,069
7641 :201,065,144,018,201,091,169
7647 :176,014,170;165,059,041,080
7653 :128,073,128,074,074,133,071
7659 :059,138,005,059,096,032,112
7665 :078,010,056,173,010,032,088
7671 :237,023,032,170,173,011,125
7677 :032,237,024,032,160,055,025
7683 :132,001,032,205,189,160,210
7689 :054,132,001,169,001,141,251
7695 :019,032,096,008,014,155,083
7701 :146,211,080,069,069,068,152
7707 :211,067,082,073,080,084,112
7713 :032,051,046,048,000,032,242
7719 :066,089,032,195,072,065,046
7725 :082,076,069,083,032,194,069
7731 :082,065,078,078,079,078,255
7737 :000,194,085,070,070,069,033
7743 :082,032,195,076,069,065,070
7749 :082,069,068,000,194,085,055
7755 :070,070,069,082,032,198,084
7761 :085,076,076,000,196,069,071
7767 :076,069,084,069,032,040,201
7773 :211,044,215,044,208,041,088
7779 :000,058,032,193,082,069,021
7785 :032,089,079,085,032,083,249
7791 :085,082,069,063,032,040,226
7797 :217,047,206,041,058,000,174
7803 :197,210,193,211,197,032,139
7809 :193,204,204,032,212,197,147
7815 :216,212,000,197,082,065,139
7821 :083,069,032,040,211,044,108
7827 :215,044,208,041,058,032,233
7833 :018,210,197,212,213,210,189
7839 :206,146,032,084,079,032,226
7845 :069,088,073,084,000,208,175
7851 :082,069,083,083,032,070,078
7857 :079,082,077,065,084,032,084
7863 :075,069,089,058,000,211,173
7869 :065,086,069,058,000,212,167
7875 :065,080,069,032,197,210,080
7881 :210,207,210,000,211,084,099
7887 :079,080,080,069,068,000,071
7893 :214,069,082,073,070,089,042
7899 :032,197,082,082,079,082,005
7905 :000,206,079,032,069,082,181
7911 :082,079,082,083,000,147,192
7917 :032,018,212,146,065,080,022
7923 :069,032,079,082,032,018,043
7929 :196,146,073,083,075,063,117
7935 :000,204,079,065,068,058,217
7941 :000,214,069,082,073,070,001
7947 :089,058,000,208,082,069,005
7953 :083,083,032,018,210,197,128
7959 :212,213,210,206,146,000,242
7965 :196,073,083,075,032,067,043
7971 :079,077,077,065,078,068,223
7977 :058,000,036,206,079,032,196
7983 :210,079,079,077,000,206,186
7989 :079,032,084,069,088,084,233
7995 :032,073,078,032,066,085,169
8001 :070,070,069,082,046,000,146
8007 :147,208,082,073,078,084,231
8013 :032,084,079,058,032,018,124
8019 :211,146,067,082,069,069,215
8025 :078,044,018,196,146,073,132
8031 :083,075,044,018,208,146,157
8037 :082,073,078,084,069,082,057
8043 :063,000,196,069,086,073,082
8049 :067,069,032,078,085,077,009
8055 :066,069,082,063,000,211,098
8061 :069,067,079,078,068,065,039
8067 :082,089,032,193,068,068,151
8073 :082,069,083,083,032,035,009
8079 :063,000,208,082,073,078,135
8085 :084,032,084,079,032,070,018
8091 :073,076,069,078,065,077,081
8097 :069,058,000,147,208,082,213
8103 :073,078,084,073,078,071,112
8109 :046,046,046,013,013,000,081
8115 :201,078,083,069,082,084,008
8121 :032,078,069,088,084,032,056
8127 :083,072,069,069,084,044,100
8133 :032,080,082,069,083,083,114
8139 :032,018,210,197,212,213,061
8145 :210,206,146,000,200,085,032
8151 :078,084,032,070,079,082,128
8157 :058,000,206,079,084,032,168
8163 :198,079,085,078,068,000,223
8169 :210,069,080,076,065,067,032
8175 :069,032,087,073,084,072,144
8181 :058,000,197,216,201,212,105
8187 :032,211,080,069,069,068,012
8193 :211,067,082,073,080,084,086
8199 :000,013,013,013,013,013,072


Program 2: SpeedScript 3.0 File Converter
Please refer to "COMPUTEI's Guide To Typing In
Programs" before entering this listing.

100 PRINT"(CLR}{RVS}(N}(2 SPACES}SPEEDSCRIPT
    {SPACE}FILE CONVERSION PROGRAM{3 SPACES}"
                                      :rem 25
110 GOSUB410                         :rem 167
120 INPUT"{DOWN}_INPUT FILE NAME";I$ :rem 113
130 IFI$='-THEN120                   :rem 211
140 INPUT"{DOWN}OUTPUT FILE NAME";O$ :rem 218
150 PRINT"{DOWN}TRVS}D{OFF)ISK, {RVS}S(OFF}CR
    EEN, (RVS}P{OFF)RINTER, {RVS}M(OFF}ODEM,
    {SPACE}(RVS}O(OFF}THER"          :rem 223
160 GETA$:IFA$="'rTHEN160             :rem 81
170 DV=-(A$="T")-2*(A$="M")-3*(A$="S")-4*(A$=
    "P")-8*(A$="D"):SA=7             :rem 166
180 IFDV=OTHENINPUT"DEVICE NUMBER";DV:INPUT"S
    ECONDARY ADDRESS";SA              :rem 11
190 PRINT"(2 DOWN}WHICH CONVERSION:" :rem 192
200 PRINT"(DOWN}1) SPEEDSCRIPT TO COMMODORE A
    SCII"                            :rem 197
210 PRINT"{DOWN}2) SPEEDSCRIPT TO TRUE ASCII"
                                       :rem98
220 PRINT"(DOWN}3) COMMODORE ASCII TO SPEEDSC
    RIPT"                            :rem 201
230 GETP$:IFP$<"1"ORP$>"3"THEN230    :rem 101
240 ADR=828+VAL(P$)*3-3              :rem 220
250 OPEN15,8,15,"IO":REM REMOVE ,"I0" IF YOU'
    VE CHANGED THE DRIVE'S SPEED      :rem 97
260 OPEN1,8,3,I$:INPUT#15,EN,EM$:F$=I$:IFEN=0
    THEN290                           :rem 44
270 PRINT"(DOWN}DISK ERROR FOR ";F$:PRINTEM$
                                     :rem 185
280 PRINT"(3 DOWN)RUNG UP}":CLOSE1:CLOSE2:CL
    OSE15:END                         :rem 48
290 IFDV=2THENOPEN2,2,3,CHR$(6+32)+(6+64):GOT
    O 380                             :rem 28
295 IFDV<>8THENOPEN2,DV,SA,O$:GOT0380 :rem 65
300 EX$=",S,W":IFP$="3"THENEX$=",P,W" :rem 56
310 OPEN2,DV,SA,"O:"+O$+EX$:INPUT#15,EN,EM$:F
    $=0$                              :rem 42
320 IFEN=OTHEN380                    :rem 238
330 IFEN<>63THEN270                   :rem 99
340 IFEN=63THENPRINT"{DOWN}";O$;" EXISTS... R
    EPLACE? (RVS}Y{OFF}/(RVS}N{OFF}:" :rem 26
350 GETA$:IFA$<>"Y"ANDA$<>"N"THEN350  :rem 45
360 IFA$="N"THEN270                   :rem 36
370 PRINT#15,"S0:"+O$:CLOSE2:GOTO310 :rem 100
380 SYS(ADR):IF(PEEK(144)AND191)=0THENPRINT"
    {DOWN}DONE.":GOTO280             :rem 184
390 PRINT"I/O ERROR DURING CONVERSION.":INPUT
    #15,EN,EM$:IFEN<>0THEN270        :rem 253
400 GOTO280                          :rem 103
410 FORI=828TO1001:READA:POKEI,A:CK=CK+A:NEXT
    :IFCK=21584THENRETURN            :rem 222
420 PRINT"{RVS}ERROR IN DATA STATEMENTS.":END
                                     :rem 251
430 DATA 076,069,003,076,122,003      :rem 33
440 DATA 076,174,003,032,225,255      :rem 36
450 DATA 240,018,032,216,003,032      :rem 20
460 DATA 095,003,032,183,255,072      :rem 39
470 DATA 032,224,003,104,041,064      :rem 21
480 DATA 240,233,076,204,255,133      :rem 38
490 DATA 251,041,064,010,005,251      :rem 24
500 DATA 041,191,133,251,041,032      :rem 20
510 DATA 073,032,010,005,251,201      :rem 12
520 DATA 095,208,002,169,013,133      :rem 34
530 DATA 251,096,032,225,255,240      :rem 37
540 DATA 221,032,216,003,032,095      :rem 24
550 DATA 003,041,127,201,065,144      :rem 25
560 DATA 018,201,091,176,014,170      :rem 34
570 DATA 165,251,041,128,073,128      :rem 43
580 DATA 074,074,133,251,138,005      :rem 41
590 DATA 251,133,251,032,183,255      :rem 40
600 DATA 072,032,224,003,104,041      :rem 15
610 DATA 064,240,207,076,204,255      :rem 37
620 DATA 032,225,255,240,169,032      :rem 35
630 DATA 216,003,201,013,208,002      :rem 14
640 DATA 169,031,072,041,128,074      :rem 40
650 DATA 133,251,104,041,063,005      :rem 24
660 DATA 251,133,251,032,183,255      :rem 38
670 DATA 072,032,224,003,104,041      :rem 22
680 DATA 064,240,217,076,204,255      :rem 45
690 DATA 162,001,032,198,255,076      :rem 47
700 DATA 207,255,162,002,032,201      :rem 21
710 DATA 255,165,251,076,210,255      :rem 42