Charles Brannon,
Program Editor
COMPUTE! continues its SpeedScript 3.0 series this month with our enhanced version for the Commodore VIC-20 (with at least 8K memory expansion). Written entirely in machine language, SpeedScript contains nearly every command and convenience you'd expect from a quality word processor. First introduced in the January 1984 issue of our companion magazine, COMPUTE!'s GAZETTE, SpeedScript incorporates a year's worth of improvements, readers' suggestions, and additional debugging. Because the VIC version is so similar to the Commodore 64 version, refer to last month's article for a full tutorial-style explanation. This month's article is an abbreviated description. Look for the Atari and Apple versions of SpeedScript 3.0 in coming issues.
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 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.
Entering SpeedScript
SpeedScript is one of the longest machine language programs we've ever published, but the MLX entry system helps you type it right the first time. MLX can detect most errors people make when entering numbers. (See the MLX article elsewhere in this issue.) 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 from scratch.) Although the program listing is lengthy, we guarantee the effort will be worthwhile.
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 SpeedScript program:
POKE 44,42:POKE
10752,0:NEW
Now load and run the VIC version of MLX (remember that you need at least 8K memory expansion to run VIC MLX). Answer the first two questions like this:
Starting
Address? 4609
Ending Address? 10482
Ending Address? 10482
The screen will then show the first prompt, the number 4609 followed by a colon. Type in each three-digit number shown in the listing. You do not need to type the comma shown in the listing. MLX inserts the comma automatically.
The last number you enter in each 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 and displayed on the screen 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 careful.
Typing 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 oneline 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 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 when loading 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 a BASIC program. If SpeedScript is running, press RUN/STOP-RESTORE to exit to BASIC.
Before using SpeedScript, you should generally unplug all cartridges such as the Super Expander. You must have a memory expansion cartridge plugged in that provides at least an additional 8K, although SpeedScript can take advantage of up to 24K of memory. 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 black on white. The first two lines on the screen are black with white letters. SpeedScript presents all messages on these command lines. The remaining 21 lines of the screen are used to enter, edit, and display your document. 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.
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. Imagine the screen as a 21line window on a long continuous document. In total, there's room for 3072 characters of text with an 8K expander; up to 19,456 with a 24K expander. 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. Since the screen is only 22 columns wide, and most printers have 80column 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. Press RETURN only when you want to force a carriage return to end a paragraph or limit the length of a line. A return-mark appears on the screen as a left-pointing arrow.
Using The Keyboard
Most features are accessed with control-key commands-you hold down CTRL while pressing another key. In this article, control-key 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 topleft 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, f l 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 quick-reference chart of all keyboard commands.
Some keys let you move the cursor to different places in the document to make corrections or scroll text into view. You can move the cursor by character, word, sentence, or paragraph. 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 f1 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
Sometimes you'll have to insert some characters to make a correction. 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.
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. To let you know you're in insert mode, the normally black command lines at the top of the screen turn 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. 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. 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. You can press it several times to open up as much space as you need. And SHIFTRUN/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.
Erasing Text
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,W,P): 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 (1K, or 1024 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.
If you ever need to erase the contents of the buffer, press CTRL-K (kill buffer).
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: 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.
If you press RUN/STOPRESTORE, you'll find yourself back to BASIC's READY prompt. Once 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).
Search And Replace
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.
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 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 lines say "Hunt for:". Type in what you'd like to search for, the search phrase. 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 to gether with CTRL-H. After you've specified the search phrase with SHIFT-CTRL-H, press SHIFTCTRL-J to select the replace phrase. (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.
Storing Your Document
Just press f8 (SHIFT-f7) to store a document. You'll see the prompt "Save:". Type in a filename up to 16 characters long, 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 our 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 "Tape or Disk" by pressing either the T or D key. You can cancel the SAVE command by pressing RETURN without typing anything else at either the "Save:" or "Tape or Disk?" prompt.
When the SAVE is complete, 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 lines turn 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-of-text pointer, and you cannot access any text that appears ahead of this pointer.
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.
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.
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 the eight character (lettering) colors. The colors are preserved until you change them. If you resave SpeedScript from BASIC as described above, the program will load and run with your color choice in the future.
PRINT!
To begin printing, simply press CTRL-P. If your printer is attached, powered on, and selected (online), 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. SpeedScript assumes a left margin of five, a right margin of 75, single-spacing, and continuous-feed paper. You can change these default settings if you want (see below).
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 printer. 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.
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 about four 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. 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 (see last month's SpeedScript article for details).
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-field letters by pressing CTRL-£ (pound sign). Answer the prompt "Enter format key:" by pressing a single key. This key is inserted into text in reversefield. 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.
Stage 1 Commands
l Left margin. Follow with a number from 0 to 255. Use 0 for no margin. Defaults to 5.
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 8½ X 11-inch paper has 66 lines. Bottom margin defaults to the fifty-eighth 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-11 5/8 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 40-column 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 Information 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.
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 254 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 254 characters) ending in a return-mark. The footer prints two lines prior to 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-£.
To define a printkey, just press CTRL-£, then the key you want to assign as the printkey, then an equal sign (=), and finally the ASCII value to be substituted for the printkey during printing.
Here's how you could program reverse-video printed text. 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 (CTRL-9SHIFT-R=18). 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 emphasized mode. For your convenience, four of the printkeys are predefined, though you can change them. The keys 1-4 are defined as 27, 14, 15, and 18, common values for most printers.
We hope SpeedScript is as valuable to you as it has been for thousands of existing users. Again, for more information, see the article accompanying the Commodore 64 version in the March 1985 issue of COMPUTE!. And keep sending in your suggestions and criticisms - someday they may help make SpeedScript 4.0 a reality.
SpeedScript 3.0 For VIC-20
Please refer to the "MLX" article before entering this listing.
4609 :011,018,010,000,158,052,250
4615 :054,050,049,000,000,000,160
4621 :032,131,019,169,203,205,004
4627 :109,044,141,109,044,240,194
4633 :003,032,050,019,032,195,100
4639 :019,076,038,020,165,038,131
4645 :141,067,018,165,039,141,096
4651 :068,018,165,158,141,070,151
4657 :018,165,159,141,071,018,109
4663 :166,181,240,032,169,000,075
4669 :141,000,041,160,000,185,076
4675 :000,000,153,000,000,200,164
4681 :204,000,041,208,244,238,240
4687 :068,018,238,071,018,224,204
4693 :000,240,007,202,208,224,198
4699 :165,180,208,222,096,165,103
4705 :181,170,005,180,208,001,074
4711 :096,024,138,101,039,141,130
4717 :139,018,165,038,141,138,236
4723 :018,024,138,101,159,141,184
4729 :142,018,165,158,141,141,118
4735 :018,232,164,180,208,004,165
4741 :240,013,160,255,185,000,218
4747 :000,153,000,000,136,192,108
4753 :255,208,245,206,139,018,192
4759 :206,142,018,202,208,234,137
4765 :096,169,044,133,195,133,159
4771 :020,169,016,133,196,169,098
4777 :148,133,021,173,252,040,168
4783 :133,251,173,253,040,133,134
4789 :252,173,255,040,032,014,179
4795 :020,162,002,160,000,173,192
4801 :020,023,145,020,177,251,061
4807 :153,008,041,200,041,127,001
4813 :201,031,240,019,192,022,142
4819 :208,235,136,177,251,041,235
4825 :127,201,032,240,005,136,190
4831 :208,245,160,021,200,132,165
4837 :059,136,185,008,041,145,035
4843 :195,136,016,248,164,059,029
4849 :024,152,101,251,133,251,129
4855 :165,252,105,000,133,252,130
4861 :224,002,208,003,140,251,057
4867 :040,192,022,240,008,169,162
4873 :032,145,195,200,076,004,149
4879 :019,024,165,195,105,022,033
4885 :133,195,133,020,144,004,138
4891 :230,196,230,021,232,224,136
4897 :023,240,003,076,190,018,071
4903 :165,251,141,006,041,165,040
4909 :252,141,007,041,096,173,243
4915 :243,040,133,251,141,252,087
4921 :040,141,002,041,133,057,215
4927 :173,244,040,133,252,141,022
4933 :253,040,141,003,041,133,168
4939 :058,056,173,246,040,237,117
4945 :244,040,170,169,032,160,128
4951 :255,198,252,145,251,200,108
4957 :230,252,145,251,200,208,099
4963 :251,230,252,202,208,246,208
4969 :145,251,096,133,059,132,153
4975 :060,160,000,177,059,240,039
4981 :006,032,210,255,200,208,004
4987 :246,096,032,228,255,240,196
4993 :251,096,169,000,141,255,017
4999 :040,141,243,040,141,245,217
5005 :040,141,247,040,141,249,231
5011 :040,141,155,041,141,196,093
5017 :041,169,045,024,105,001,026
5023 :141,244,040,056,165,056,093
5029 :233,001,141,250,040,056,118
5035 :233,004,141,248,040,056,125
5041 :233,001,141,246,040,169,239
5047 :255,141,153,041,032,202,239
5053 :023,169,147,076,210,255,045
5059 :169,128,141,138,002,133,138
5065 :157,173,005,023,032,241,064
5071 :022,173,243,040,133,057,107
5077 :173,244,040,133,058,032,125
5083 :234,019,169,072,160,039,144
5089 :032,108,019,238,254,040,148
5095 :076,134,021,032,250,019,251
5101 :169,054,160,039,032,108,031
5107 :019,169,000,141,254,040,098
5113 :096,162,043,169,160,157,012
5119 :000,016,202,016,250,169,140
5125 :019,032,210,255,169,018,196
5131 :076,210,255,141,134,002,061
5137 :162,043,157,000,148,202,217
5143 :016,250,096,072,041,128,114
5149 :074,133,059,104,041,063,247
5155 :005,059,096,160,000,177,020
5161 :057,133,002,160,000,177,058
5167 :057,073,128,145,057,032,027
5173 :158,018,173,141,002,041,074
5179 :004,240,009,165,197,201,107
5185 :064,240,003,076,216,020,172
5191 :032,228,255,208,013,165,204
5197 :162,041,016,240,229,169,166
5203 :000,133,162,076,044,020,006
5209 :170,160,000,165,002,145,219
5215 :057,224,095,208,012,032,211
5221 :069,022,169,032,160,000,041
5227 :145,057,076,038,020,173,104
5233 :254,040,240,007,138,072,096
5239 :032,234,019,104,170,138,048
5245 :201,013,208,002,162,095,038
5251 :138,041,127,201,032,144,046
5257 :100,224,160,208,002,162,225
5263 :032,138,072,160,000,177,210
5269 :057,201,031,240,005,173,088
5275 :255,040,240,003,032,015,228
5281 :026,104,032,026,020,160,017
5287 :000,145,057,032,158,018,065
5293 :056,165,057,237,002,041,219
5299 :133,059,165,058,237,003,066
5305 :041,005,059,144,014,165,101
5311 :057,105,000,141,002,041,025
5317 :165,058,105,000,141,003,157
5323 :041,230,057,208,002,230,203
5329 :058,032,134,021,076,038,056
5335 :020,160,000,165,002,145,195
5341 :057,024,165,197,105,064,065
5347 :170,132,162,165,162,201,195
5353 :010,208,250,132,198,138,145
5359 :174,016,021,221,016,021,196
5365 :240,006,202,208,248,076,201
5371 :038,020,202,138,010,170,061
5377 :169,020,072,169,037,072,028
5383 :189,057,021,072,189,056,079
5389 :021,072,096,039,029,157,171
5395 :137,133,099,085,138,134,233
5401 :020,148,082,019,076,147,005
5407 :135,139,113,136,140,091,017
5413 :145,017,121,074,090,097,069
5419 :077,070,118,072,081,108,057
5425 :107,110,003,131,084,141,113
5431 :083,059,022,068,022,079,132
5437 :022,133,022,229,022,005,238
5443 :023,020,023,122,023,175,197
5449 :024,014,026,227,024,039,171
5455 :025,116,026,146,026,181,087
5461 :026,214,026,049,027,063,234
5467 :029,048,028,148,029,020,137
5473 :023,122,023,191,029,203,176
5479 :030,095,031,201,022,235,205
5485 :031,029,029,131,036,202,055
5491 :024,111,031,201,023,028,021
5497 :037,027,039,203,025,195,135
5503 :025,191,037,243,025,251,131
5509 :036,032,228,021,056,165,159
5515 :057,237,252,040,165,058,180
5521 :237,253,040,176,032,056,171
5527 :173,252,040,237,243,040,112
5533 :133,059,173,253,040,237,028
5539 :244,040,005,059,240,013,252
5545 :165,057,141,252,040,165,221
5551 :058,141,253,040,032,158,089
5557 :018,056,173,006,041,229,192
5563 :057,133,251,173,007,041,081
5569 :229,058,133,252,005,251,097
5575 :240,002,176,024,024,173,070
5581 :252,040,109,251,040,141,014
5587 :252,040,173,253,040,105,050
5593 :000,141,253,040,032,158,073
5599 :018,076,182,021,096,056,160
5605 :173,002,041,237,245,040,199
5611 :133,059,173,003,041,237,113
5617 :246,040,005,059,144,012,235
5623 :173,245,040,141,002,041,121
5629 :173,246,040,141,003,041,129
5635 :056,165,057,237,243,040,033
5641 :133,059,165,058,237,244,137
5647 :040,005,059,176,011,173,223
5653 :243,040,133,057,173,244,143
5659 :040,133,058,096,056,165,063
5665 :057,237,002,041,133,059,050
5671 :165,058,237,003,041,005,036
5677 :059,176,001,096,173,002,040
5683 :041,133,057,173,003,041,243
5689 :133,058,096,230,057,208,071
5695 :002,230,058,076,134,021,072
5701 :165,057,208,002,198,058,245
5707 :198,057,076,134,021,165,214
5713 :057,133,251,165,058,133,110
5719 :252,198,252,160,255,177,101
5725 :251,201,032,240,004,201,254
5731 :031,208,003,136,208,243,166
5737 :177,251,201,032,240,008,246
5743 :201,031,240,004,136,208,163
5749 :243,096,056,152,101,251,248
5755 :133,057,165,252,105,000,067
5761 :133,058,076,134,021,160,199
5767 :000,177,057,201,032,240,074
5773 :008,201,031,240,004,200,057
5779 :208,243,096,200,208,011,089
5785 :230,058,165,058,205,003,104
5791 :041,144,002,208,025,177,244
5797 :057,201,032,240,236,201,108
5803 :031,240,232,024,152,101,183
5809 :057,133,057,165,058,105,240
5815 :000,133,058,076,134,021,093
5821 :173,002,041,133,057,173,000
5827 :003,041,133,058,076,134,128
5833 :021,169,000,141,252,040,056
5839 :173,003,041,056,233,004,205
5845 :205,244,040,176,003,173,030
5851 :244,040,141,253,040,032,201
5857 :158,018,076,189,022,238,158
5863 :005,023,173,005,023,041,245
5869 :015,141,005,023,010,010,185
5875 :010,010,133,059,173,005,121
5881 :023,041,007,024,105,008,201
5887 :101,059,141,015,144,096,043
5893 :001,238,020,023,173,020,224
5899 :023,041,007,141,020,023,010
5905 :076,158,018,000,165,057,235
5911 :133,251,165,058,133,252,247
5917 :198,252,160,255,177,251,042
5923 :201,046,240,012,201,033,000
5929 :240,008,201,063,240,004,029
5935 :201,031,208,004,136,208,067
5941 :235,096,177,251,201,046,035
5947 :240,027,201,033,240,023,055
5953 :201,063,240,019,201,031,052
5959 :240,015,136,208,235,198,079
5965 :252,165,252,205,243,040,210
5971 :176,226,076,110,023,132,058
5977 :059,198,059,200,240,010,087
5983 :177,251,201,032,240,247,219
5989 :136,076,119,022,164,059,165
5995 :076,055,023,173,243,040,205
6001 :133,057,173,244,040,133,125
6007 :058,076,134,021,160,000,056
6013 :177,057,201,046,240,029,107
6019 :201,033,240,025,201,063,126
6025 :240,021,201,031,240,017,119
6031 :200,208,235,230,058,165,215
6037 :058,205,003,041,240,226,154
6043 :144,224,076,189,022,200,242
6049 :208,014,230,058,165,058,126
6055 :205,003,041,144,005,240,037
6061 :003,076,189,022,177,057,185
6067 :201,032,240,233,201,046,108
6073 :240,229,201,033,240,225,073
6079 :201,063,240,221,201,031,124
6085 :240,217,076,174,022,173,075
6091 :247,040,141,119,041,173,196
6097 :248,040,141,120,041,032,063
6103 :250,019,169,093,160,039,177
6109 :032,108,019,169,001,141,179
6115 :254,040,096,056,165,057,127
6121 :237,243,040,133,059,165,086
6127 :058,237,244,040,005,059,114
6133 :208,003,104,104,096,165,157
6139 :057,133,038,165,058,133,067
6145 :039,096,056,165,057,133,035
6151 :158,073,255,101,038,141,005
6157 :123,041,165,058,133,159,180
6163 :073,255,101,039,141,124,240
6169 :041,165,038,141,125,041,064
6175 :165,039,141,126,041,165,196
6181 :158,141,127,041,133,038,163
6187 :165,159,141,128,041,133,042
6193 :039,056,173,124,041,109,079
6199 :120,041,205,250,040,144,087
6205 :020,032,250,019,169,108,147
6211 :160,039,032,108,019,169,082
6217 :001,141,254,040,169,000,166
6223 :133,198,096,173,119,041,071
6229 :133,158,173,120,041,133,075
6235 :159,173,123,041,133,180,132
6241 :024,109,119,041,141,119,138
6247 :041,173,124,041,133,181,028
6253 :109,120,041,141,120,041,169
6259 :032,035,018,173,125,041,027
6265 :133,038,173,126,041,133,253
6271 :039,173,127,041,133,158,030
6277 :173,128,041,133,159,056,055
6283 :173,002,041,229,158,133,107
6289 :180,173,003,041,229,159,162
6295 :133,181,032,035,018,056,094
6301 :173,002,041,237,123,041,006
6307 :141,002,041,173,003,041,052
6313 :237,124,041,141,003,041,244
6319 :096,032,230,023,032,069,145
6325 :022,032,003,024,056,173,235
6331 :119,041,233,001,141,119,073
6337 :041,173,120,041,233,000,033
6343 :141,120,041,096,173,141,143
6349 :002,201,005,208,003,076,188
6355 :081,025,032,060,022,032,207
6361 :230,023,032,069,022,032,113
6367 :003,024,076,185,024,032,055
6373 :202,023,169,002,032,014,159
6379 :020,032,250,019,169,120,077
6385 :160,039,032,108,019,032,119
6391 :125,019,072,032,234,019,236
6397 :104,041,191,201,023,208,253
6403 :009,032,230,023,032,080,153
6409 :022,076,003,024,201,019,098
6415 :208,009,032,230,023,032,037
6421 :021,023,076,003,024,201,113
6427 :016,208,009,032,230,023,033
6433 :032,215,026,076,003,024,153
6439 :096,056,165,057,237,252,134
6445 :040,133,059,165,058,237,225
6451 :253,040,005,059,240,011,147
6457 :173,252,040,133,057,173,117
6463 :253,040,133,058,096,173,048
6469 :243,040,133,057,173,244,191
6475 :040,133,058,076,134,021,025
6481 :165,057,133,251,133,158,210
6487 :165,058,133,252,133,159,219
6493 :160,000,177,251,201,032,146
6499 :208,030,200,208,247,165,133
6505 :252,205,003,041,144,015,253
6511 :173,002,041,133,251,173,116
6517 :003,041,133,252,160,000,194
6523 :076,131,025,230,252,076,145
6529 :095,025,024,152,101,251,009
6535 :133,038,169,000,101,252,060
6541 :133,039,056,173,002,041,073
6547 :229,158,133,180,173,003,255
6553 :041,229,159,133,181,056,184
6559 :165,039,229,158,141,123,245
6565 :041,165,039,229,159,141,171
6571 :124,041,032,035,018,056,221
6577 :173,002,041,237,123,041,026
6583 :141,002,041,173,003,041,072
6589 :237,124,041,141,003,041,008
6595 :096,169,255,141,148,041,021
6601 :076,222,025,169,005,141,071
6607 :148,041,032,222,025,177,084
6613 :057,201,032,208,001,200,144
6619 :076,174,022,169,000,141,033
6625 :149,041,032,037,026,169,167
6631 :032,174,148,041,160,000,018
6637 :145,057,200,202,208,250,019
6643 :096,032,015,026,032,015,203
6649 :026,169,031,160,000,145,012
6655 :057,200,145,057,032,158,136
6661 :018,032,060,022,032,060,229
6667 :022,076,204,025,169,001,252
6673 :141,148,041,169,000,141,145
6679 :149,041,032,037,026,169,221
6685 :032,160,000,145,057,076,243
6691 :134,021,024,173,002,041,174
6697 :109,148,041,173,003,041,044
6703 :109,149,041,205,246,040,069
6709 :144,005,104,104,076,116,090
6715 :026,024,165,057,133,038,246
6721 :109,148,041,133,158,165,051
6727 :058,133,039,109,149,041,088
6733 :133,159,056,173,002,041,129
6739 :229,038,133,180,173,003,071
6745 :041,229,039,133,181,032,232
6751 :093,018,024,173,002,041,193
6757 :109,148,041,141,002,041,071
6763 :173,003,041,109,149,041,111
6769 :141,003,041,096,173,255,054
6775 :040,073,006,141,255,040,162
6781 :096,169,135,160,039,032,244
6787 :108,019,032,228,255,240,245
6793 :251,201,147,240,247,041,240
6799 :127,201,089,096,169,002,059
6805 :032,014,020,032,250,019,004
6811 :169,148,160,039,032,108,043
6817 :019,032,126,026,240,003,095
6823 :076,234,019,162,250,154,038
6829 :032,050,019,032,195,019,008
6835 :076,038,020,160,000,177,138
6841 :057,201,031,240,017,200,163
6847 :208,247,230,058,165,058,133
6853 :205,003,041,144,238,240,044
6859 :236,076,189,022,200,208,110
6865 :002,230,058,076,174,022,003
6871 :165,057,133,251,165,058,020
6877 :133,252,198,252,160,255,191
6883 :177,251,201,031,240,017,120
6889 :136,192,255,208,245,198,187
6895 :252,165,252,205,244,040,117
6901 :176,236,076,110,023,056,154
6907 :152,101,251,133,251,169,028
6913 :000,101,252,133,252,056,027
6919 :165,251,229,057,133,059,133
6925 :165,252,229,058,005,059,013
6931 :208,018,132,059,024,165,113
6937 :251,229,059,133,251,165,089
6943 :252,233,000,133,252,076,209
6949 :233,026,165,251,133,057,134
6955 :165,252,133,058,076,134,093
6961 :021,173,141,002,041,001,172
6967 :208,003,032,202,023,032,043
6973 :250,019,169,158,160,039,088
6979 :032,108,019,160,000,177,051
6985 :057,073,128,145,057,032,053
6991 :158,018,160,000,177,057,137
6997 :073,128,145,057,169,002,147
7003 :032,014,020,032,125,019,077
7009 :009,064,201,087,208,009,163
7015 :032,144,027,032,134,022,238
7021 :076,159,027,201,083,208,095
7027 :009,032,144,027,032,123,226
7033 :023,076,159,027,201,080,175
7039 :208,009,032,144,027,032,067
7045 :182,026,076,159,027,032,123
7051 :134,021,076,234,019,165,020
7057 :057,133,158,141,113,041,020
7063 :165,058,133,159,141,114,153
7069 :041,096,056,165,057,133,193
7075 :038,237,113,041,141,123,088
7081 :041,165,058,133,039,237,074
7087 :114,041,141,124,041,032,156
7093 :026,024,173,113,041,133,179
7099 :057,173,114,041,133,058,251
7105 :032,158,018,076,070,027,062
7111 :169,044,229,211,141,004,229
7117 :041,160,000,169,166,032,005
7123 :210,255,169,157,032,210,220
7129 :255,140,005,041,032,125,047
7135 :019,172,005,041,133,059,140
7141 :169,032,032,210,255,169,072
7147 :157,032,210,255,165,059,089
7153 :201,013,240,050,201,020,198
7159 :208,015,136,016,004,200,058
7165 :076,208,027,169,157,032,154
7171 :210,255,076,208,027,165,176
7177 :059,041,127,201,032,144,101
7183 :192,204,004,041,240,187,115
7189 :165,059,153,048,041,032,007
7195 :210,255,169,000,133,212,238
7201 :133,216,200,076,208,027,125
7207 :032,210,255,169,000,153,090
7213 :048,041,152,096,032,250,152
7219 :019,169,214,160,039,032,172
7225 :108,019,032,148,028,176,056
7231 :032,173,243,040,133,251,167
7237 :173,244,046,133,252,174,061
7243 :002,041,172,003,041,169,247
7249 :251,032,216,255,176,009,252
7255 :165,144,041,191,208,003,071
7261 :076,130,029,240,036,173,009
7267 :147,028,201,008,144,006,121
7273 :032,202,036,076,128,028,095
7279 :173,147,028,201,001,240,133
7285 :249,032,250,019,169,220,032
7291 :160,039,032,108,019,169,138
7297 :001,141,254,040,096,032,181
7303 :250,019,169,231,160,039,235
7309 :032,108,019,076,128,028,020
7315 :000,032,199,027,240,022,155
7321 :169,006,160,040,032,108,156
7327 :019,032,125,019,162,008,012
7333 :201,068,240,012,162,001,081
7339 :201,084,240,006,032,234,200
7345 :019,104,104,096,142,147,021
7351 :028,169,001,160,000,032,061
7357 :186,255,160,000,224,001,247
7363 :240,049,185,048,041,201,191
7369 :064,208,014,185,049,041,250
7375 :201,058,240,035,185,050,208
7381 :041,201,058,240,028,169,182
7387 :048,141,088,041,169,058,252
7393 :141,089,041,185,048,041,002
7399 :153,090,041,200,204,005,156
7405 :041,144,244,240,242,200,068
7411 :076,002,029,185,048,041,112
7417 :153,088,041,200,204,005,172
7423 :041,208,244,140,112,041,017
7429 :032,250,019,169,048,166,171
7435 :041,032,108,019,173,112,240
7441 :041,162,088,160,041,032,029
7447 :189,255,169,013,076,210,167
7453 :255,032,250,019,169,196,182
7459 :160,039,032,108,019,032,169
7465 :125,019,032,026,020,009,016
7471 :128,072,173,255,040,240,187
7477 :003,032,015,026,032,234,139
7483 :019,104,076,166,020,056,244
7489 :165,057,237,243,040,133,172
7495 :251,165,058,237,244,040,042
7501 :005,251,240,007,169,005,242
7507 :133,251,032,014,020,032,053
7513 :250,019,169,026,160,040,241
7519 :032,108,019,032,148,028,206
7525 :165,251,201,005,240,003,198
7531 :032,050,019,169,000,166,031
7537 :057,164,058,032,213,255,124
7543 :144,003,076,096,028,142,096
7549 :002,041,140,003,041,032,128
7555 :234,251,032,231,255,032,142
7561 :250,019,169,252,160,039,002
7567 :032,108,019,076,128,028,022
7573 :032,250,019,169,032,160,043
7579 :040,032,108,019,032,148,022
7585 :028,169,001,174,243,040,048
7591 :172,244,040,032,213,255,099
7597 :165,144,041,191,240,207,137
7603 :032,250,019,169,239,160,024
7609 :039,032,108,019,076,128,075
7615 :028,169,147,032,210,255,008
7621 :169,013,032,210,255,032,140
7627 :236,029,169,013,032,210,124
7633 :255,169,040,160,040,032,137
7639 :108,019,032,228,255,201,034
7645 :013,208,249,076,234,019,252
7651 :032,204,255,169,001,032,152
7657 :195,255,096,032,231,255,017
7663 :169,001,162,008,160,000,227
7669 :032,186,255,169,001,162,026
7675 :069,160,040,032,189,255,228
7681 :032,192,255,176,221,162,015
7687 :001,032,198,255,032,081,094
7693 :030,032,081,030,032,081,043
7699 :030,032,081,030,240,202,122
7705 :032,204,255,032,228,255,007
7711 :201,032,208,003,032,125,120
7717 :019,162,001,032,198,255,192
7723 :032,081,030,072,032,081,115
7729 :030,168,104,170,152,032,193
7735 :205,221,169,032,032,210,156
7741 :255,032,081,030,240,006,193
7747 :032,210,255,076,062,030,220
7753 :169,013,032,210,255,076,060
7759 :017,030,032,207,255,072,180
7765 :165,144,041,191,240,006,104
7771 :104,104,104,076,227,029,223
7777 :104,096,162,000,142,115,204
7783 :041,142,116,041,142,117,190
7789 :041,142,118,041,056,177,172
7795 :251,233,048,144,042,201,010
7801 :010,176,038,014,115,041,003
7807 :046,116,041,014,115,041,244
7813 :046,116,041,014,115,041,250
7819 :046,116,041,014,115,041,000
7825 :046,116,041,013,115,041,005
7831 :141,115,041,200,208,212,044
7837 :230,252,076,113,030,248,082
7843 :173,115,041,013,116,041,150
7849 :240,028,056,173,115,041,054
7855 :233,001,141,115,041,173,111
7861 :116,041,233,000,141,116,060
7867 :041,238,117,041,208,003,067
7873 :238,118,041,076,163,030,091
7879 :173,117,041,216,096,056,130
7885 :173,119,041,237,247,040,038
7891 :141,121,041,173,120,041,080
7897 :237,248,040,141,122,041,022
7903 :013,121,041,208,016,032,142
7909 :250,019,169,078,160,040,177
7915 :032,108,0Y9,169,001,141,193
7921 :254,040,096,024,165,057,109
7927 :133,038,109,121,041,133,054
7933 :158,165,058,133,039,109,147
7939 :122,041,133,159,056,173,175
7945 :002,041,229,038,133,180,120
7951 :173,003,041,229,039,133,121
7957 :181,024,101,159,205,246,169
7963 :040,144,016,032,250,019,016
7969 :169,070,160,040,032,108,100
7975 :019,169,001,141,254,040,151
7981 :096,032,096,018,024,173,228
7987 :121,041,133,180,109,002,125
7993 :041,141,002,041,173,122,065
7999 :041,133,181,109,003,041,059
8005 :141,003,041,165,057,133,097
8011 :158,165,058,133,159,173,153
8017 :247,040,133,038,173,248,192
8023 :040,133,039,032,035,018,128
8029 :076,134,021,160,000,177,149
8035 :057,170,200,177,057,136,128
8041 :145,057,200,138,145,057,079
8047 :096,160,000,177,057,041,130
8053 :063,240,010,201,027,176,066
8059 :006,177,057,073,064,145,133
8065 :057,076,060,022,133,059,024
8071 :041,063,006,059,036,059,143
8077 :016,002,009,128,112,002,154
8083 :009,064,133,059,096,005,001
8089 :075,066,005,058,001,001,103
8095 :001,000,001,000,080,027,012
8101 :014,015,018,141,154,041,036
8107 :138,072,152,072,056,173,066
8113 :138,041,237,140,041,173,179
8119 :139,041,237,141,041,144,158
8125 :025,173,154,041,032,210,056
8131 :255,173,141,002,041,001,040
8137 :208,249,165,145,201,127,016
8143 :208,006,032,136,034,076,187
8149 :168,033,104,168,104,170,192
8155 :173,154,041,096,032,250,197
8161 :019,169,173,160,040,076,094
8167 :108,019,076,168,033,169,036
8173 :000,032,189,255,173,020,138
8179 :023,141,134,002,169,004,204
8185 :141,149,041,160,007,173,152
8191 :141,002,041,001,208,003,139
8197 :076,152,032,032,250,019,054
8203 :169,097,160,040,032,108,105
8209 :019,032,125,019,041,127,124
8215 :162,003,142,149,041,201,209
8221 :083,240,086,162,008,142,238
8227 :149,041,201,068,240,034,000
8233 :201,080,208,188,032,250,232
8239 :019,169,127,160,040,032,082
8245 :108,019,032,125,019,056,156
8251 :233,048,201,004,144,168,089
8257 :201,080,176,164,141,149,208
8263 :041,076,118,032,032,250,108
8269 :019,169,163,160,040,032,148
8275 :108,019,032,199,027,240,196
8281 :143,172,005,041,169,044,151
8287 :153,048,041,200,169,087,025
8293 :153,048,041,200,140,005;176
8299 :041,173,005,041,162,048,065
8305 :160,041,032,189,255,173,195
8311 :149,041,168,201,004,144,058
8317 :026,201,008,176,022,032,078
8323 :250,019,169,142,160,040,143
8329 :032,108,019,032,125,019,216
8335 :056,233,048,168,016,003,155
8341 :076,233,031,169,001,174,065
8347 :149,041,032,186,255,032,082
8353 :223,031,169,001,032,195,044
8359 :255,032,192,255,162,001,040
8365 :032,201,255,144,003,076,116
8371 :168,033,162,000,142,130,046
8377 :041,142,129,041,142,150,062
8383 :041,142,151,041,142,110,050
8389 :045,189,152,031,157,131,134
8395 :041,232,224,012,208,245,141
8401 :169,255,141,145,041,141,077
8407 :143,041,162,004,189,163,149
8413 :031,157,029,042,202,208,122
8419 :247,173,243,040,133,251,034
8425 :173,244,040,133,252,160,211
8431 :000,140,144,041,204,143,143
8437 :041,240,006,173,131,041,109
8443 :141,144,041,177,251,016,253
8449 :003,076,150,034,201,031,240
8455 :240,044,153,109,042,200,027
8461 :238,144,041,173,144,041,026
8467 :205,132,041,144,230,140,143
8473 :001,041,177,251,201,032,216
8479 :240,020,206,144,041,136,050
8485 :208,244,172,001,041,076,011
8491 :056,033,200,177,251,201,193
8497 :032,240,001,136,140,001,087
8503 :041,152,056,101,251,133,021
8509 :251,165,252,105,000,133,199
8515 :252,160,000,173,145,041,070
8521 :201,255,208,003,032,057,061
8527 :034,173,143,041,240,003,201
8533 :032,101,034,056,046,143,241
8539 :041,173,001,041,141,000,232
8545 :041,169,109,133,253,169,203
8551 :042,133,254,032,103,038,193
8557 :032,118,034,173,145,041,140
8563 :205,135,041,144,003,032,163
8569 :199,033,056,165,251,237,038
8575 :002,041,133,059,165,252,011
8581 :237,003,041,005,059,240,206
8587 :056,144,054,173,130,041,225
8593 :240,011,169,000,141,129,067
8599 :041,141,134,041,032,199,227
8605 :033,173,149,041,201,003,245
8611 :208,003,032,125,019,032,070
8617 :225,255,240,251,173,255,032
8623 :040,141,134,002,169,001,150
8629 :032,195,255,032,231,255,157
8635 :162,250,154,032,234,019,014
8641 :076,038,020,076,238,032,161
8647 :056,173,133,041,237,145,216
8653 :041,168,136,136,240,008,166
8659 :048,006,032,136,034,136,091
8665 :208,250,173,130,041,240,235
8671 :017,141,000,041,169,110,189
8677 :133,253,169,044,133,254,191
8683 :032,101,034,032,103,038,063
8689 :032,136,034,032,136,034,133
8695 :032,136,034,238,138,041,098
8701 :208,003,238,139,041,173,031
8707 :137,041,208,050,173,149,249
8713 :041,201,003,240,043,201,226
8719 :008,240,039,056,173,138,157
8725 :041,237,140,041,173,139,024
8731 :041,237,141,041,144,024,143
8737 :032,204,255,032,250,019,057
8743 :169,188,160,040,032,108,224
8749 :019,032,125,019,032,223,239
8755 :031,162,001,032,201,255,221
8761 :173,129,041,240,017,141,030
8767 :000,041,169,109,133,253,000
8773 :169,043,133,254,032,101,033
8779 :034,032,103,038,032,136,194
8785 :034,172,134,041,140,145,235
8791 :041,136,136,240,008,048,184
8797 :006,032,136,034,136,208,133
8803 :250,096,169,032,172,131,181
8809 :041,140,144,041,240,006,205
8815 :032,168,031,136,208,250,168
8821 :096,172,136,041,024,152,226
8827 :109,145,041,141,145,041,233
8833 :032,136,034,136,208,250,157
8839 :096,169,013,032,168,031,132
8845 :173,110,045,240,003,032,232
8851 :168,031,096,141,147,041,003
8857 :041,127,032,133,031,174,179
8863 :225,034,221,225,034,240,114
8869 :009,202,208,248,206,144,158
8875 :041,076,242,035,202,138,137
8881 :010,170,140,146,041,169,085
8887 :034,072,169,196,072,189,147
8893 :245,034,072,189,244,034,239
8899 :072,096,056,173,146,041,011
8905 :101,251,133,251,165,252,074
8911 :105,000,133,252,076,238,243
8917 :032,177,251,201,031,240,121
8923 :001,136,140,146,041,096,011
8929 :018,087,065,076,082,084,125
8935 :066,083,078,072,070,064,152
8941 :080,063,088,077,073,071,177
8947 :074,084,035,102,035,111,172
8953 :035,121,035,131,035,141,235
8959 :035,151,035,161,035,176,080
8965 :035,210,035,058,035,074,196
8971 :035,042,035,032,035,023,213
8977 :035,235,035,020,036,093,215
8983 :035,200,169,000,141,143,199
8989 :041,076,214,034,200,032,114
8995 :099,030,141,142,041,076,052
9001 :214,034,200,032,099,030,138
9007 :141,140,041,173,118,041,189
9013 :141,141,041,076,214,034,188
9019 :200,032,099,030,141,138,187
9025 :041,173,118,041,141,139,206
9031 :041,076,214,034,200,032,156
9037 :099,030,141,133,041,076,085
9043 :214,034,169,000,141,137,010
9049 :041,200,076,214,034,169,055
9055 :010,141,110,045,200,076,165
9061 :214,034,200,169,001,141,092
9067 :150,041,076,214,034,200,054
9073 :032,099,030,141,131,041,075
9079 :076,214,034,200,032,099,006
9085 :030,141,132,041,076,214,247
9091 :034,200,032,099,030,141,155
9097 :134,041,076,214,034,200,068
9103 :032,099,030,141,135,041,109
9109 :076,214,034,200,032,099,036
9115 :030,141,136,041,076,214,025
9121 :034,172,146,041,200,152,138
9127 :072,032,199,033,104,168,007
9133 :140,146,041,096,032,203,063
9139 :035,136,140,129,041,160,052
9145 :001,177,251,153,108,043,150
9151 :200,204,129,041,144,245,130
9157 :240,243,200,076,214,034,180
9163 :200,177,251,201,031,208,247
9169 :249,096,032,203,035,136,192
9175 :140,130,041,160,001,177,096
9181 :251,153,109,044,200,204,158
9187 :130,041,144,245,240,243,246
9193 :076,214,034,032,203,035,059
9199 :076,214,034,200,177,251,167
9205 :201,061,240,007,136,173,039
9211 :147,041,076,009,033,200,245
9217 :032,099,030,072,173,147,042
9223 :041,041,127,170,104,157,135
9229 :237,041,032,214,034,076,135
9235 :197,034,200,162,008,177,029
9241 :251,041,063,201,004,240,057
9247 :009,162,001,201,020,240,152
9253 :003,076,233,031,142,147,157
9259 :028,200,177,251,201,058,190
9265 :240,003,076,233,031,200,064
9271 :177,251,201,031,240,009,196
9277 :032,133,031,153,085,041,024
9283 :076,054,036,152,056,233,162
9289 :003,162,088,160,041,032,047
9295 :189,255,032,204,255,169,159
9301 :002,032,195,255,169,002,228
9307 :174,147,028,160,000,032,120
9313 :186,255,032,050,019,169,040
9319 :000,166,057,164,058,032,068
9325 :213,255,144,003,076,233,009
9331 :031,142,002,041,140,003,218
9337 :041,104,104,162,001,032,053
9343 :201,255,076,228,032,032,183
9349 :231,255,169,000,032,189,241
9355 :255,169,015,162,008,160,140
9361 :015,032,186,255,032,192,089
9367 :255,144,011,169,015,032,009
9373 :195,255,032,231,255,076,177
9379 :234,019,032,250,019,169,118
9385 :055,160,040,032,108,019,071
9391 :032,199,027,240,022,162,089
9397 :015,032,201,255,176,223,059
9403 :169,048,160,041,032,108,233
9409 :019,169,013,032,210,255,123
9415 :032,204,255,032,231,255,184
9421 :169,000,032,189,255,169,251
9427 :015,162,008,160,015,032,091
9433 :186,255,032,192,255,176,033
9439 :186,032,250,019,162,015,119
9445 :032,198,255,032,199,027,204
9451 :032,204,255,169,015,032,174
9457 :195,255,032,231,255,169,098
9463 :001,141,254,040,096,032,043
9469 :036,037,173,155,041,240,167
9475 :022,032,199,037,032,074,143
9481 :037,173,153,041,201,255,101
9487 :240,009,032,234,037,032,087
9493 :158,018,076,007,037,076,137
9499 :234,019,173,141,002,201,029
9505 :005,208,038,032,250,019,073
9511 :169,209,160,040,032,108,245
9517 :019,032,199,027,141,155,106
9523 :041,208,003,076,234,019,120
9529 :160,000,185,048,041,153,132
9535 :156,041,200,204,005,041,198
9541 :208,244,076,234,019,165,247
9547 :057,133,251,165,058,133,104
9553 :252,169,255,141,153,041,068
9559 :160,001,162,000,173,155,226
9565 :041,240,080,189,156,041,072
9571 :032,026,020,209,251,240,109
9577 :002,162,255,200,208,011,175
9583 :230,252,165,252,205,003,194
9589 :041,240,002,176,054,232,094
9595 :236,155,041,208,224,024,243
9601 :152,101,251,133,059,165,222
9607 :252,105,000,133,060,173,090
9613 :002,041,197,059,173,003,104
9619 :041,229,060,144,024,056,189
9625 :165,059,237,155,041,133,175
9631 :057,141,152,041,165,060,007
9637 :233,000,133,058,141,153,115
9643 :041,032,134,021,096,032,015
9649 :250,019,169,219,160,040,010
9655 :032,108,019,169,001,141,141
9661 :254,040,096,173,141,002,127
9667 :201,005,208,035,032,250,158
9673 :019,169,229,160,040,032,082
9679 :108,019,032,199,027,141,221
9685 :196,041,240,014,160,000,096
9691 :185,048,041,153,197,041,116
9697 :200,204,005,041,208,244,103
9703 :076,234,019,056,165,057,070
9709 :133,158,237,152,041,133,067
9715 :059,165,058,133,159,237,030
9721 :153,041,005,059,208,101,048
9727 :169,255,141,153,041,024,014
9733 :173,155,041,101,057,133,153
9739 :038,169,000,101,058,133,254
9745 :039,056,173,002,041,229,045
9751 :158,133,180,173,003,041,199
9757 :229,159,133,181,032,035,030
9763 :018,056,173,002,041,237,050
9769 :155,041,141,002,041,173,082
9775 :003,041,233,000,141,003,212
9781 :041,173,196,041,240,041,017
9787 :141,148,041,169,000,141,187
9793 :149,041,032,037,026,160,254
9799 :000,185,197,041,032,026,040
9805 :020,145,057,200,204,196,131
9811 :041,208,242,024,165,057,052
9817 :109,196,041,133,057,165,022
9823 :058,105,000,133,058,076,013
9829 :134,021,160,000,204,000,108
9835 :041,240,032,177,253,048,130
9841 :029,032,133,031,032,252,110
9847 :038,032,168,031,173,151,200
9853 :041,240,010,169,008,032,113
9859 :168,031,169,095,032,168,026
9865 :031,200,076,105,038,096,171
9871 :140,146,041,041,127,141,011
9877 :147,041,032,133,031,201,222
9883 :067,208,027,056,173,142,060
9889 :041,237,000,041,074,056,098
9895 :237,131,041,168,169,032,177
9901 :032,168,031,136,208,250,230
9907 :172,146,041,076,138,038,022
9913 :201,069,208,017,056,173,141
9919 :132,041,237,000,041,056,186
9925 :237,131,041,168,169,032,207
9931 :076,173,038,201,085,208,216
9937 :008,173,151,041,073,001,144
9943 :141,151,041,201,035,208,224
9949 :018,140,146,041,174,138,110
9955 :041,173,139,041,032,205,090
9961 :221,172,146,041,076,138,003
9967 :038,174,147,041,189,237,041
9973 :041,032,168,031,076,138,219
9979 :038,174,150,041,240,026,152
9985 :133,059,041,127,201,065,115
9991 :144,018,201,091,176,014,139
9997 :170,165,059,041,128,073,137
10003 :128,074,074,133,059,138,113
10009 :005,059,096,032,250,019,230
10015 :056,173,245,040,237,002,016
10021 :041,170,173,246,040,237,176
10027 :003,041,032,205,221,169,202
10033 :001,141,254,040,096,008,077
10039 :014,211,080,069,069,068,054
10045 :211,067,082,073,080,084,146
10051 :032,051,046,048,000,013,001
10057 :018,066,089,032,195,072,033
10063 :065,082,076,069,083,032,230
10069 :194,082,065,078,078,079,149
10075 :078,000,194,085,070,070,076
10081 :069,082,032,195,076,069,108
10087 :065,082,069,068,000,194,069
10093 :085,070,070,069,082,032,005
10099 :198,085,076,076,000,196,234
10105 :069,076,069,084,069,032,008
10111 :040,211,044,215,044,208,121
10117 :041,000,058,032,211,085,048
10123 :082,069,063,032,217,047,137
10129 :206,058,000,197,210,193,241
10135 :211,197,032,193,204,204,168
10141 :000,197,082,065,083,069,141
10147 :032,040,211,044,215,044,237
10153 :208,041,013,018,208,082,227
10159 :069,083,083,032,146,210,030
10165 :197,212,213,210,206,018,213
10171 :032,084,079,032,069,088,059
10177 :073,084,000,208,082,069,197
10183 :083,083,032,070,079,082,116
10189 :077,065,084,032,075,069,095
10195 :089,058,000,211,065,086,208
10201 :069,058,000,212,065,080,189
10207 :069,032,197,210,210,207,124
10213 :210,000,211,084,079,080,125
10219 :080,069,068,000,214,069,223
10225 :082,073,070,089,032,197,016
10231 :082,082,079,082,000,206,010
10237 :079,032,069,082,082,079,164
10243 :082,083,000,147,032,018,109
10249 :212,146,065,080,069,032,101
10255 :079,082,032,018,196,146,056
10261 :073,083,075,063,000,204,007
10267 :079,065,068,058,000,214,255
10273 :069,082,073,070,089,058,218
10279 :000,208,082,069,083,083,052
10285 :032,018,210,197,212,213,159
10291 :210,206,146,000,196,073,114
10297 :083,075,032,067,079,077,214
10303 :077,065,078,068,058,000,153
10309 :036,206,079,032,210,079,199
10315 :079,077,000,206,079,032,036
10321 :084,069,088,084,032,073,255
10327 :078,032,066,085,070,070,232
10333 :069,082,046,000,147,018,199
10339 :211,146,067,082,069,069,231
10345 :078,044,032,018,196,146,107
10351 :073,083,075,044,032,018,180
10357 :208,146,082,073,078,084,020
10363 :069,082,063,000,196,069,090
10369 :086,073,067,069,032,078,022
10375 :085,077,066,069,082,063,065
10381 :000,211,069,067,079,078,133
10387 :068,065,082,089,032,113,164
10393 :068,068,082,069,083,063,094
10399 :032,035,063,000,198,073,048
10405 :076,069,078,065,077,063,087
10411 :058,000,147,208,082,073,227
10417 :078,084,073,078,071,046,095
10423 :046,046,013,013,000,206,251
10429 :069,088,084,032,083,072,105
10435 :069,069,084,044,032,146,127
10441 :210,197,212,213,210,206,169
10447 :018,000,200,085,078,084,160
10453 :032,070,079,082,058,000,022
10459 :206,079,084,032,198,079,129
10465 :085,078,068,000,210,069,223
10471 :080,076,065,067,069,058,134
10477 :000,209,213,201,212,000,048