?-READMEB1STPOSTING 0 !cZ80EMACSDOC0Z80EMACSREFz6MAPKEYS DOC.LMETERM DOCzBINDIST SUBME COMqMEOV032 OZR - MEOV033 OZR MEOV000 OVR{MEOV001 OVR$ xqMEOV002 OVR-MEOV003 OVR5MEOV004 OVR< VMEOV005 OVRIMEOV006 OVRNMEOV007 OVRUQ[MEOV008 OVR\ϗMEOV009 OVRb˩MEOV010 OVRf MEOV011 OVRm18MEOV012 OVRuMEOV013 OVRyMEOV014 OVR~uMEOV015 OVRMEOV016 OVRuJMEOV017 OVR/MEOV018 OVR7MEOV019 OVRJMEOV020 OVRiMEOV021 OVR''MEOV027 OVR MEOV028 OVRbBMEOV029 OVRiMEOV030 OVR9MEOV031 OVR *MEOV034 OVRbMAPKEYS COM6%bMECONFIGCOMOMETERM COM`TELANSI C  OTELANSI O % HME SYM/S}MAPPING TXTC &{ZMECMDS LSTPME RSM_>This is the "read me first" file for the Z80EMACS binary distribution. It is in ZMAX-B01.LZR; The source is in ZMAX-S01.LZR so you can see this is release 0.1! Documentation: Z80EMACS.DOC general intro POSTING.0 slightly obsolete intro, as posted to internet network news. Z80EMACS.REF command reference MAPKEYS.DOC keyboard customization METERM.DOC screen customization Installation: 0. Uncrunch the two overlay files that were crunched. LU310: error reading unwritten data.... 1. Read Z80EMACS.DOC 2. Read METERM.DOC, and customize ME.COM to fit your terminal. 3. If you are familiar with any kind of emacs, just print MAPPING.TXT as a quick reference. Otherwise, better take a peek at Z80EMACS.REF ( skim through it ). 4. Try it out. 5. If you don't like the way the keystrokes fit the commands, read MAPKEYS.DOC and do what you need to do. 6. Enjoy. Z80EMACS can find its overlays if they are on the current drive, or on drive A:, B:, or C: ( your BDOS may extend this ). Even if you don't have a hard drive, performance is good. I tested this distribution file... Other files: BINDIST.SUB used to create the binary distribution library. ME.COM The Z80EMACS program *.OVR Z80EMACS overlays MAPKEYS.COM keyboard customization MECONFIG.COM keyboard customization METERM.COM screen customization TELANSI.C In case you need to patch TELANSI.O ditto ME.SYM used for both customization programs MAPPING.TXT quick reference ZMECMDS.LST data file for MAPKEYS.COM, do not clobber! ME.RSM I don't think you need it. ; but with it, you could ( if you wanted ) create new ; overlays without even having Z80EMACS source... POSTING.0 part 0 of internet source posting.  This is the first posting of the Z80 microemacs source. 1. HISTORY I started with microemacs 3.6, which said " * This program is in public domain; written by Dave G. Conroy." All the files being edited in the buffers are kept in memory; it was fairly easy to compile the version of microemacs I used, and produce a runnable program, but the first version had no space at all for files! (March 1989). Porting to cp/m was easy because I used AZTEC C ( version 1.05c, from 1982 ). I really would have preferred BDS/C because compilation is so fast, but: no static initializers, no typedefs, no "long"... I'm not sure if BDS has overlays. If BDS has overlays, it would be worth while porting my version to BDS. If it doesn't, an overlay system could be added. I started making overlays and optimizing, and soon ( June 1989 ) could edit about 24KB of one file ( 58KB TPA ). As soon as I could edit 3K, I started using the editor to maintain itself; editors are always well-tested if you use them to maintain themselves. This is why the original files were split up into very small pieces, and some comments removed. The comments removed include the microemacs authors' names, but microemacs is freely available with attribution. No attempt to hide the origin is intended. I think the version of microemacs I used was 3.6, but I can't be sure. Then I stopped and created a program for customization of the binaries, figuring to distribute the z80me program in that fashion. There is one customization program that patches terminal-control sequences into the binary, and another that patches keystroke-to-command bindings. I could find no CP/M BBS to post it to, and gave up. ( July 1989 ). Documentation was never written, especially for the customization, and now I have to work from memory. In fact, I find no program to patch terminal-control; the term-control module was written to make this possible, though. In August or September, 1991, I saw a message in comp.os.cpm asking about editors. I posted a notice about microemacs for cp/m and got many helpful and encouraging replies. ---------------------------- 2. PHILOSOPHY AND FEATURES This program also embodies some of my thoughts about the nature of editors. Programmers use the editor more than any tool, and think about it less than any other. Even with a simple editor like vi, most programmers don't bother to learn every command... The version of microemacs that I started with was an awful editor, and I hated it. Some things had to change if I was to use it, so I changed them. If an editor's bindings are perfect from the standpoint of having neat little mnemonics ( ^N for "next line" ), they may are unlikely to be perfect from the standpoint of making frequently-used commands easy to type. A prime example is the emacs binding of Meta-f for "word forwards"; this is a frequently-used command, and should be ONE KEYSTROKE! The default Z80EMACS word forward is ^F, word back is ^B, del word forward is ^W. If an editor's bindings are perfect from both of the above standpoints, they still will run into trouble with the keyboard: yes, the dreaded ARROW KEYS. If you're alert, and leaning forward over the keyboard, you may not want to use the arrow keys; such is the argument in favor of vi's "hjkl". If you're thinking instead of typing, browsing instead of hacking, you want the arrow keys to work. Z80EMACS has predefined arrow keys that fit most ASCII terminals, ^H^J^K^L, and ^V the same as ^J. If a command is hard to type, so what? If you use it twice in a row, simply use the "REPEAT LAST COMMAND" key! It appears that I never put this feature into Z80EMACS. vi has two different kinds of word commands, "W" and "w" ( it also provides forward, backward, and forward-to-end directions for them ). Z80EMACS has word-forward and word-backward commands, just two commands, but there is another command that changes the way these two work -- you can use vi-style or emacs-style words, and stop at end-of-word or at beginning-of-word. Z80EMACS doesn't implement the vi ^^ ( control-carat ) command, that you use to toggle between buffers, but it does have the vi :n command, that you use to sequentially walk the linked list of buffers. It is inexcusable for any editor to be without at least one of these two commands. Both commands SHOULD exist. Z80EMACS can display more than one buffer on the screen at the same time; this capability was part of the original microemacs. With more than one buffer on the screen, however, you must remember to type very slowly! Z80EMACS stores its keyboard macro in a file; it uses the same mechanism as the "execute-file" command, which microemacs didn't have. Keyboard macro execution is slow, but it's better than retyping commands. Storing the keyboard macro in a file means that you can use it again after you exit and restart the editor. It looks like Z80EMACS still doesn't have "execute file"; however, internally, "execfile" would use the same mechanisms that you use to execute the keyboard macro from a file, and so "exec file" can be added with relative ease. Z80EMACS makes ".BAK" files when it saves or writes. Z80EMACS has the "vikill" command; kills whole lines, no matter where the cursor is in the line. I despise the emacs ^K command, except when used as "kill-to-end" ( the emacs-style kill is still there ). Z80EMACS has funny vertical arrows. Up-arrow moves two lines. Both up-arrow and down-arrow can wrap from the last line of the buffer to the first line. These are both bugs that would have been easy to fix; both are interesting features. I put the funny up-arrow in my unix version of emacs, and used it for at least a year before deciding I didn't like it after all ( it was that close to being a wash! ). The idea is, if you don't specify a parameter, up-arrow moves by two lines; if you do specify, it moves the correct number. If you want to move up 1, 2, 3, 4, 5, or 6 lines, it takes 2, 1, 3, 2, 4, or 3 keystrokes instead of 1, 2, 3, 4, 5, or 6 keystrokes; an average savings of one keystroke per line. However, moving up 1 line is the most common case, and the extra mental effort involved in overshooting and moving down one is distracting. ( As I type this, I have funny-up-arrow in effect on UNIX; you really do get used to it. ) Z80EMACS has two different command introducers; one for positive values ( ^U, "universal parameter" ), one for negative ( ^\ ). Many commands have special meanings with negative parameters. According to my editor theories, it's easier to learn and remember some of the odd commands if they're shoehorned onto normal commands with special parameters. For example, take the "go-to-start-of-line" command, with the normal emacs binding of ^A; if you just enter ^A with no parameters, you go to column 0; with the "shoehorn" theory in effect, if you specify a positive parameter, you go to column N, and if you specify a negative parameter, you go to the first non-white-space character in the line. I feel this is better than having three separate commands ( vi "0", "|", and "_", respectively. Metadigits start arguments. They start arguments between those who like their emacs to accept escape-9 as a command, and those who like it to supply an argument of 9 to the next command. I am in the latter camp, so in Z80EMACS, Metadigits start arguments. Z80EMACS has the vi "find-character-in-line" command. Z80EMACS has the "goto line by line number" command. (but doesn't display line numbers, so it's not as useful a command as it should be). Z80EMACS allows you to change the buffer name as well as the file name. Z80EMACS has the vi "go to column number" command: "go to start of line" with a positive parameter goes to a specific column in the line. ( with a negative parameter, it goes to end-of-line. ) ----------------------------------------------- Alas, no regular expressions, no search-replace. ----------------------------------------------- 3. OPTIMIZATION TO SAVE SPACE In order to have more room for editing files, the program had to be made smaller. A large part of this was done by moving things to overlays, but some of it was pure byte-squeezing. Most of the optimization was done in the root segment, but several overlays were optimized to make the overlay area smaller. The key to good performance with overlays is to have all the most-often-used commands in one overlay: this is ovudfb31.c ( overlay up down forward back, overlay 31 ) Almost every file was touched. Simple things like "putting the most-often-used structure member first in the structure" can save a lot of bytes. Using exactly the right number of register variables helps. Making exactly the right variables into registers helps. You have to experiment with your compiler... #define temp_int (*(int *)0xc0) saves bytes, compared to a stack variable; if ZCPR uses this area, too bad. I used a simple CP/M 2.2, with CCPPLUS, and the original ( Digital Research ) BDOS. I used zsid on the program to find out where in main() the main processing loop starts, and used up those addresses as variable addresses; I also discovered that nobody was using 0xc0 to 0xcf, and used those locations as well. Using temporary variables instead of repeated curwp->w_bufp->b_dotp->something->something_else saves a lot of bytes. Rewriting the whole thing with a better algorithm also saves a lot sometimes! When microemacs lengthens a line, or when it creates a new line, it allocates 16 bytes. Z80EMACS allocates 4 bytes. The savings is tremendous, especially when there are blank lines in the file. This is in line.c; for a while, I had COHERENT 3.0, which came with microemacs 3.8 as its only editor. I made the same change there, because they only had small-model compiler, and it dumped core! The AZTEC C library was available in source form. I chopped it down by quite a few bytes. Goodbye, stderr! Replacing shared, duplicated code with a "goto" is an optimization that a real C compiler will perform. The one that comes free with UNIX doesn't do it, and neither does CP/M AZTEC C. ( "gcc" does, though. ) Making the messages more terse saves bytes! 4. STRUCTURE OF THE PROGRAM AND OF THE POSTINGS comp.os.cpm isn't a "source-files" newsgroup. The whole source adds up to just under 600KB, uncompressed. One is not supposed to post so much to comp.os.cpm... I don't have direct internet access, so I can't just pop it into an archive site. I've decided to handle the source by mailing it to a volunteer >> acknowledged in the Internet version ofthis file << who can simply stick it into an internet archive site. This will be part00, and it will run to about 8 parts. The Z80EMACS editing system now consists of 3 ".COM" files, a slew of overlay files, a text data file, a ".SYM" file, source of one module, and minimal documentation. It supports ASCII and ANSI terminals, but the user has to patch it by hand; this uses the source file and the ".SYM" file. Binding of keystrokes to editor commands is a two-step procedure, using two of the ".COM" files, the text file, and the ".SYM" file. mapkeys.com makes a mapping, writing it to an intermediate file; meconfig.com uses the intermediate file to patch ME.COM. Z80EMACS can find its overlays if they are on the current drive, on drive a:, or on drive b:, or on drive c:, but only ( I think ) in the current user area -- checking other user areas is a job for a more advanced BDOS than the one I used, not a job for an application program. There are only two known bugs: 1. Random crashes, about once every three or four hours. No clues, and it doesn't happen often enough to make it easy to track down. 2. The file you name on the command line doesn't get read in. The buffer gets named okay, but the file is never read. Note: both the bugs were fixed since the above was written. Several other things were also corrected. This is a CP/M, Z80 version of emacs, derived from microemacs version 3.6; the CP/M version was created by Ralph Betza in 1989. Z80EMACS is an editor, not a word processor. It's also not really finished, although as it stands it works quite well and is more feature-rich than any other CP/M editor. ( No, it doesn't have wordprocessing features; it's an editor, not... ). This is a good place for a commercial: Z80EMACS isn't quite finished; it lacks several features that I think any decent editor really ought to have ( but few do ). If enough people send checks to Ralph Betza 646 11th Avenue New Hyde Park, NY, 11040 there will be another release of Z80EMACS, with new features, and with fixes ( if any are needed ;-) I won't do it if nobody cares, but I'll work for a buck an hour on it if enough people do care. This isn't shareware, so don't feel guilty... End of commercial. Z80EMACS is a so-called "modeless" editor, like WordStar and VDE; control characters are commands, and printable characters get put into the file. Here are some of the features of Z80EMACS that make it so much more powerful than what you're used to seeing on CP/M: 1. As in any version of emacs, you can use Z80EMACS to edit more than one file at a time; not all of the files being edited need to be on the screen at the same time, but more than one of them can be -- Given that there are 24 screen lines available, and each file shown must get at least 2 lines of the screen, you could get up to 12 files shown at once. ( You wouldn't want to, but you could ). Two files at once on the screen is usually enough -- an include file and a program. Two files at once being edited is often not enough; the number of files in Z80EMACS is limited only by available memory. In EMACS, we like to call each file a "buffer". You can be editing text that doesn't have a filename. ( You'll find there are uses for this ). It's easy to copy or move text from one file to another. 2. You can reconfigure Z80EMACS; if you want ^N to be the down-arrow key, you can have what you want. See MAPKEYS.DOC for details. 3. When you delete text, you can get it back; this is great if you made a mistake, and it's also part of the method used to move or copy text. 4. Up-arrow and down-arrow move straight up and down the screen -- like WordStar, not like VDE ( unless VDE fixed this since 1989 ). 5. Variable tabs ( sorry, only by inserting N spaces, not by displaying tabs as different numbers of spaces on the screen while having tabs in the file -- next release, maybe ). 6. "Word" commands can work in any of 4 ways, at your pleasure. There are 7 different "word" commands. 7. Z80EMACS can remember one position in each window, and one position in each file that's not shown on the screen. In EMACS, we like to call this remembered position a "mark". 8. Lots of "region" commands: the area between the cursor and the "mark" is called the "current region". There are currently only 5 things you can do to the current region, but wait for next release... The emacs "region" concept is similar to the WordStar "block" concept. Each way of doing things has its own advantages and disadvantages. 9. The emacs "keyboard macro": you tell Z80EMACS to start remembering what you type, do your normal editing commands, tell it to stop remembering, and you can execute the same sequence again. Much better than VDE macros. Z80EMACS saves its keyboard macro in a file, so you can use it again tomorrow. 10. When you try to exit, Z80EMACS asks for confirmation if any of your files are modified -- and it's smart enough to keep its mouth shut if you already saved everything. 11. Z80EMACS has 9 "Display Control" commands, to let you control windows, a bunch of "session control" commands ( some are mistakenly labeled as editing comands in ZMECMDS.LST, I'd say there are about 10 session control commands in all ), to let you control the buffers and the files in them, and more editing commands than you're likely to use. 12. Z80EMACS lets you give parameters to the commands. The parameters are numeric. For example, if you type ^U60+ at the start of a line, you get ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ( notice that even the printable characters are ordinary commands ). 13. Source code for Z80EMACS is available. You should be able to find it in the same place you found the binaries. ============================================================ There are other advantages, but these are the most important. The rest of what I'm going to say is good news/bad news: Z80EMACS is a big program, and it uses overlays; that's bad if you use floppies, good if you have a ramdisk. It's good in either case because it makes it easier to expand Z80EMACS; you could even add an overlay without recompiling, using MAPKEYS.COM to get the new overlay invoked. Despite the overlays, performance is good; all the most-frequently-used commands are in the same overlay, and the overlays are small, so they don't take a lot of time to read in. Z80EMACS keeps all file data in memory, in linked lists of lines. "In memory" is faster than a temporary file, but limits the size; with my 60KB TPA, I can edit 22542 bytes in 824 lines of one file ( the same file I always use to test this after I've tried to improve these figures ), or fewer bytes spread over more files. Of course, the size limit encourages modular programming... "Linked lists" are okay because most operations on the file use sequential access. A pointer array would have plusses and minuses. If there is more than one window on the screen showing the same file that you're typing in, and if you type at all quickly, you will lose characters. This only happens if more than one window is showing the current buffer, which is an uncommon situation. Documentation could be better, but then, it could be worse. Ralph Betza, October 4, 1991 This file describes all the commands available in Z80EMACS and also tells what the default bindings are. See "MAPKEYS.DOC" if you don't know what I mean by "bindings". 111111111111111111111111111111111111111111111111111111111111 1 1 1 ABOUT UECS 1 1 1 111111111111111111111111111111111111111111111111111111111111 All the commands have funny names. The funny names are based on the UECS, or Universal Editor Command Set. The first part of each name classifies the command according to "command-type", or category. These are the categories used in Z80EMACS: CI commands are "command input" commands. These commands make your life easier when you are typing in editor commands. DC commands are "display control" commands; you use them to control what's on your screen. EC commands are "editor command" commands; most commands are EC commands. SC commands are "session control" commands. They are concerned with managing the list of buffers. UI commands are "user interface" commands. BUGS: The categorization of the commands is not perfect. 222222222222222222222222222222222222222222222222222222222222 2 2 2 COMMAND REFERENCE: 2 2 2 222222222222222222222222222222222222222222222222222222222222 11 CI-Abort-Cancel This has a default binding of ^G, and can be rebound ( partially ). Abort-Cancel beeps the terminal; if a keyboard macro is being recorded, it gets stopped; everything goes back to normal. On the message line ( when Z80EMACS asks you for a file ), Abort-Cancel aborts the command that asked; this usage of it can't be rebound. 34 CI-Keyboard-Macro-Begin Keyboard-Macro-Begin, whose default binding is ^X(, tells z80emacs to start remembering every keystroke you type. They will be written to a file named "KY+BD+MC.KBM", on the current drive and user area. 35 CI-Keyboard-Macro-End By default, ^X) == close the keyboard macro file, which thus becomes available for execution. 36 CI-Keyboard-Macro-Execute By default, this is M-I ( the BACKTAB key on my terminal ). The traditional emacs binding for it is ^XE The file "KY+BD+MC.KBM" becomes the current source of command input. The keystrokes that were recorded are now replayed. If any of the commands make the terminal beep, execution stops. Any parameter to this command is ignored. The screen is updated as the stored commands are replayed. ** CI-Universal-Argument ^U cannot be remapped. It is the emacs parameter introducer. Many Z80EMACS commands can use parameters. Most often the parameter is a repetition count, e.g., "do this thing 6 times". Sometimes the parameter modifies the command behavior in other ways. Typing ^U gives you an argument of 4, but if you type in some digits, they give the argument value; after that, typing ^U again multiplies the current argument by 4. This is so confusing to explain... just try it out, and see. For example, to insert several A's at once: ^UA gives 4 of them ^U2A 2 of them ^U^UA 16 ** CI-Universal-Negative-Argument This is like ^U for starting arguments, but it starts with "-1" ( minus-one ). Negative arguments often have special meanings. It is mapped as "^\" and can't be remapped. 58 DC-Discard-Other-Window ^X1 gets rid of all the windows on the screen except the current one. 59 DC-Enlarge-Window ^Xz makes the current window larger, by taking lines away from its neighbors. The parameter to this command controls how many lines bigger ( or smaller, with a negative argument ) the window gets. 63 DC-Reposit-Top This is M-! by default. It redisplays the window with the current line at the top. With an argument, the current line becomes line N of the window. With a negative argument, the current line becomes the bottom line of the window. 64 DC-Scroll-Down ^X^J moves all the text in the window down one line; the cursor stays on the same line of the file. The argument is a repetition count, negative scrolls up. 67 DC-Scroll-Up ^X^K; see description of DC-Scroll-Down. 72 DC-Shrink-Window ^XZ == see DC-Enlarge-Window 73 DC-Split-Window ^X2 makes two windows out of the current one, by spliting it in half. No arguments. 79 EC-Arrow-Down Down-arrow is mapped as ^J AND as ^V because many ASCII terminals use ^V as their down-arrow key. Argument is repetition count, negative argument reverses the direction. FUNNY-ARROW: arrow down from the last line of the buffer goes to the first line of the buffer. 80 EC-Arrow-Left ^H is the default mapping. Argument is repetition count, negative argument reverses the direction. 81 EC-Arrow-Right ^L is the default mapping. Argument is repetition count, negative argument reverses the direction. 82 EC-Arrow-Up ^K is the default mapping. Argument is repetition count, negative argument reverses the direction. FUNNY-ARROW: arrow up from the first line of the buffer goes to the last line; arrow up always goes one line more than specified. FUNNY-ARROW was a bug that I left in as an interesting feature; the actual implementation in Z80EMACS is not quite right, because if you SPECIFY an argument, arrow-up should move exactly that many lines; it's only if you don't specify any argument that funny-arrow-up should move an extra line. 91 EC-Back-Search-Simple ^P prompts for a string, and then searches backwards in the buffer for it. If you just hit return instead of entering a new string, it searches for the last thing you searched for. Argument is ignored ( of course, negative SHOULD search forwards ); no incremental search or regular expressions; there should be a "search-again" command, so you wouldn't have to hit RETURN at the prompt. 93 EC-CR-With-Indent ^M ( carriage return ) inserts a new line, with indentation matching the previous line, and goes to the start of it ( after the indentation ). Argument is repetition count, negative argument does nothing. 95 EC-Capitalize-Region This is listed in ZMECMDS.LST, but there's no such thing. 96 EC-Capitalize-Word M-c Goes Forward To The Start Of The Next Word, Makes The First Letter Uppercase, And Skips Over The Rest Of The Word. Argument is repetition count, negative argument does nothing. A "word" is defined according to EC-Set-Word-Mode. 98 EC-Deblank ^X^O gets rid of blank lines around the cursor. 103 EC-Exchange-Local-Mark ^Z sets the "mark" at the cursor position and moves the cursor to where the "mark" used to be. The "mark" is a remembered cursor position, of which there's one per window. 106 EC-Execute-File Next release. This is like CI-Keyboard-Macro-Execute, except that it asks you for a file name; thus, you can have lots of editor command files around. 107 EC-Exit ^X^C ends the execution of Z80EMACS. Unless you give it an argument, it will check to see if any buffers have been modified and not saved yet, and if so, it will ask you "Quit[Y/N]?". It won't ask you anything unless you might need to save something. 111 EC-Find-File ^X^F is the command you use to edit files. It asks you for a file name, and then looks to see if the file is already in a buffer. If so, it just goes to that buffer; if not, it makes a new buffer and reads in the file and goes to the new buffer. 129 EC-Forward-Search-Simple ^N == see EC-Back-Search-Simple 142 EC-Goto-Beginning-Of-Line ^@ ( 0x00 ) goes to the beginning of the current line, or with a negative parameter, it goes to the end of the line, or with a parameter it goes to column N of the current line. 144 EC-Goto-End-of-Line ^E goes to the end of the current line, or with a negative parameter, it goes to the start of the line. 145 EC-Goto-First-Buffer-Line M-g actually goes to line N of the buffer, but with no argument it goes to the first line, of course. Negative arguments mean "go to N lines from end". 150 EC-Goto-Last-Buffer-Line M-G; see EC-Goto-First-Buffer-Line 161 EC-Goto-Next-Page ^C pages forwards; it actually does this by going forwards as many lines as there are lines in the window. Argument is repetition count, negative argument reverses the direction. 166 EC-Goto-Next-Window ^Xn is useful when you have more than one window on the screen. It moves down one window. It's wrongly listed as an EC command instead of as a DC command, because it may change the current buffer by doing so. 180 EC-Goto-Previous-Page ^R == see EC-Goto-Next-Page 186 EC-Goto-Previous-Window ^Xp == see EC-Goto-Next-Window 192 EC-GrabFrom-Stack Well, Z80EMACS doesn't really have a stack, but only one "kill buffer". The "kill stack" contains a copy of deleted text. ^Y ( "yank" ) inserts that deleted text into the buffer at the cursor position. You can give it an argument, to get extra copies of the text. This very important command is used to undo mistakes, to copy text, and to move text. 204 EC-Kill-Lines-Count M-R deletes arg lines, starting with the cursor line. Negative argument just beeps. The silly binding of Meta-R is because that's what the "LINE DELETE" key on my trminal sends. 208 EC-Kill-Region The "region" is the area enclosed by the cursor and the "mark". M-L deletes the region; you can get it back with EC-GrabFrom-Stack. Silly mapping, my terminal.... 209 EC-Kill-to-EOL-emacs M-T deletes the text up to the end of the line; if you're already at the end of the line, it deletes the newline and joins the lines; with an argument of 0, it kills to start of line, with other arguments it does what emacs users expect it to. If you're not an emacs user, you don't want to know, and I don't want to waste a thousand words on this. Silly mapping, my terminal.... 211 EC-Kill-Char-Back ^? ( DEL ) deletes left by characters. Argument is repetition count, negative argument reverses the direction. 212 EC-Kill-Char-Forw ^D == see EC-Kill-Char-Back 213 EC-Kill-Word-Back M-b deletes the word before the cursor. Argument is repetition count, negative argument does nothing. A "word" is defined according to EC-Set-Word-Mode. 214 EC-Kill-Word-Forw M-f deletes the word after the cursor. Argument is repetition count, negative argument does nothing. A "word" is defined according to EC-Set-Word-Mode. 219 EC-Lower-Case-Region ^X^L turns all the caps in the region to lowercase. If you do it by accident, what a pain! 220 EC-Lower-Case-Word M-_ ( Meta-underline ), lowercases the next word. 224 EC-Open-Lines ^O is like WordStar's ^N. Arg is repetition count. 229 EC-PickUp-Region M-P is a shortcut for EC-Kill-Region followed by EC-GrabFrom-Stack. ( The mapping is my "PRINT" key, M-p would be better. ) 235 EC-Quote-One M-Q is what you use to insert arg copies of a control character into the file. ( or to insert a bunch of digits ). There is no special warning if you insert ^Z into a text file. 236 EC-Read-File ^X^R with no argument gets rid of the file that's currently in the current buffer and then reads in a new one. ( You get prompted for a filename ). With a negative argument, it reads the file in at the cursor position, which is "EC-Insert-File". 238 EC-Redraw M-\ clears the screen and redraws, with the cursor line in the middle of its window. UNIX editors MUST HAVE this command, because other processes might send messages to the screen. The default mapping is sort of random... 240 EC-Rename-Buffer ^X^N changes the "buffer name". Each buffer has a buffer name and a file name. You can use ^X^N to make short names so that ^Xb is easier to use. With a negative parameter, it changes the file name. 244 EC-Save-File ^X^S is the default. If your terminal uses xon-xoff, remap this! Z80EMACS creates a backup file, with the ".BAK" extension, whenever it saves or writes to an existing file. 245 EC-Self-Insert The printable characters are all self-inserting characters and can't be remapped. You could map other things to be self-inserting, but why? The argument is a repetition count, and must be greater than zero. 255 EC-Set-Local-Mark M-* tells Z80EMACS to remember the current cursor position. The silly mapping is because of my terminal... If you want to go to some other place in the file and then come back, use this command; use this command also for defining the "region" for the various commands that use it. 258 EC-Set-Word-Mode M-W sets "Word" mode, as opposed to "word" mode. With a negative argument, it sets vi Word mode, as opposed to emacs Word mode. See also EC-Unset-Word-Mode, which is M-w Z80EMACS has four possible word mode settings ( vi or emacs, word or Word ). The word mode affects ALL THE COMMANDS that have "Word" in their names. It's quicker for you to try it out than for me to explain it. 263 EC-TAB ^I ( TAB ) normally inserts a tab into the buffer, or a number of spaces if variable tab size has been set. With an argument, it sets the "variable tab size" instead; for example, ^U^I says that from now on tabs will be expanded as spaces to fit tabstops every 4 characters. An argument of 0 goes back to inserting real tabs, an argument of 1 is the same as no argument at all. 265 EC-Transpose-Chars M-~ transposes the two character to the left of the cursor. 268 EC-Unset-Word-Mode M-w, see EC-Set-Word-Mode 276 EC-Upper-Case-Region M-j ( my shift-up-arrow ) 277 EC-Upper-Case-Word M-^ ( escape carat ) 282 EC-Word-Back ^B goes back a word, arg is repeat count, negative arg goes forwards. See "Word Mode". 283 EC-Word-Forw ^F goes forward a word. See EC-Word-Back. 286 EC-Write-File ^X^W gives the buffer a new filename and writes it out. 487 SC-Discard-Buffer M-Y ( "PAGE ERASE" on my terminal ) asks for a buffer name and gets rid of the indicated buffer. Because the amount of memory available is limited, you may want to get rid of buffers you no longer need. 494 SC-SwitchTo-Buffer ^Xb asks for a buffer name and goes to that buffer. 495 SC-SwitchTo-Next-Sequential-Buffer ^^ ( control-carat ) goes to the next buffer in Z80EMACS' internal list of all the existing buffers. Most of the time, you have only two or three active buffers, so this is more convenient than ^Xb 528 UI-Buffer-Selection-Menu ^X^B makes a buffer named "[List]", fills it with a nice-looking list of the active buffers, and goes to it. Unfortunately, you can't do anything with this menu; when you're in the [List] buffer, you should be able to 1) go to the buffer indicated by the cursor line, 2) discard the indicated buffer, 3) re-order the list, 4) save the file in the indicated buffer, 5) rename file or buffer. 543 UI-Give-Statistics ^X= puts out a message on the message line that tells you a useless X and Y, the hex value of the character under the cursor, and the cursor position within the file. 999 Undefined-Function This isn't really an editor command. It's defined so that MAPKEYS.COM can UNMAP some keys. "Binding" is one of those words of emacs jargon that might be bothersome, but we have to use it. The idea is that an editor contains a certain set of commands, which are always the same commands no matter what keystrokes are used to invoke them. The association of a keystroke to a command is called a "binding". Editors derived from emacs have an internal structure that makes it easy to change the bindings ( unlike WordStar or VDE ). On a big computer, you can change emacs bindings online; but z80emacs has to fit in 64KB, so the bindings are done offline. Z80emacs comes with a default set of bindings already installed. These bindings are just fine for the terminal I use, but you probably will want to change them in your copy of the program. Here's how: First, make sure you have a copy ( NOT your only copy! ) of ME.COM on your current disk and user area; make sure you have ZMECMDS.LST, ME.SYM, MAPKEYS.COM, and MECONFIG.COM. Take a look at ZMECMDS.LST, but don't change it! This file contains a list of the names of all the commands in z80emacs, and for each command there is a number. The command names are in the format of the UECS ( Universal Editor Command Set ), version 1.0; each name starts with a prefix that assigns the command to a class of commands. In order to customize the bindings, you will have to run two programs, first MAPKEYS.COM and then MECONFIG.COM. MAPKEYS.COM will read the ZMECMDS.LST file as part of its processing. Another part of its processing will be to read the keyboard, and you'll be typing in these names. Fortunately, you won't have to type in the whole name ( as we'll see later ). MECONFIG.COM will read a file produced by MAPKEYS ( MAPTABLE.ZME ), will read ME.COM and ME.SYM, and will write the new bindings out to ME. COM. It installs the bindings by patching them into the program. ====================================================== = = = USING MAPKEYS.COM = = = ====================================================== After you start MAPKEYS, it will tell you how many lines it read from ZMECMDS.LST, and then ask you to "Enter a name: ". If you just hit RETURN, it will list all the commands, one screenful at a time, with "[Return to continue]". Try typing "word" at this prompt ( leave out the quotes, hit RETURN at the end of it ). MAPKEYS will list for you about 9 commands that include the word "Word", and tell you how many commands it matched. Neat stuff, huh? If you manage to match exactly one name, MAPKEYS will prompt you to "Enter a keystroke sequence: ". You can just type the sequence that you want to use to invoke the command, and then hit RETURN. This is easy enough, but how do you map something to RETURN? or to LINEFEED? Aha, there's a trick! I figured that you wouldn't want to map the carat ( "^" ) to anything else ( in fact you can't, as I'll explain later when I tell you what you CAN't map ), so: If you type "^M" ( a carat and an M ), MAPKEYS interprets it as meaning ^M ( control-M, or carriage return ). At the "Enter a keystroke sequence: " prompt, if you don't want to make a new mapping for this command after all, just hit RETURN right away. There's one more trick you need to know about: how to UNMAP a key! The problem is this: there is a predefined amount of space allocated for the command dispatch tables. If you map ^J to something, MECONFIG will see that ^J used to be mapped to something else, and will free up the slot in the table that was used by the old mapping. But, if you map ^X^J to something, you've used up one of the empty slots! Suppose you map it to EC-Word-Forw; MECONFIG does NOT assume that you want to unmap ^F; it's legitimate to have more than one sequence bound to the same command! To keep from running out of slots in the table, you may have to explicitly UNMAP some sequences by mapping them to "Undefined-Function". ====================================================== = = = WHAT'S A "SEQUENCE"; WHAT YOU CAN'T DO = = = ====================================================== In the standard emacs command-space, there are 384 possible sequences of keystrokes that could be mapped to commands. ( but only 382 sequences ). First of all, there are the 128 normal ASCII characters. In any proper emacs, they are all mappable; but in order to be able to keep up with your flying fingers, z80emacs had to make a few compromises; four special characters, ^U, ^\, ^X, and ESCAPE, are hardcoded in the program, and can't be reassigned ( this defect came with the original microemacs code ), and the printable characters are all forced to be self-inserting ( type an 'A', get an 'A' in the file ). Secondly, there are 128 "meta-characters", which you type by hitting ESCAPE and then hitting any of the 128 normal ASCII characters. Third and last, there are 128 "control-X" characters, that you enter by hitting ^X and then something else. By the way, lhe other special characters I mentioned, control-U and control-\, are used when you want to start typing in a numerical argument to feed to the next regular command. Thus, there are 284 different command sequences that can be remapped, which makes z80emacs pretty well customizable, though not perfectly so. There are only 67 or so commands that you can assign to these 380 command sequences, so most sequences will be undefined. The command space is much larger than the number of commands, so multiple mappings are sensible; a multiple mapping is where you have two or more sequences bound to the same command, in other words, more than one way to do the same thing. Only 4 of the commands are built in to the root segment, and always stay in memory: ^G ( CI-Abort-Cancel ), right arrow, left arrow, and self-insert; self-insert isn't in the internal dispatch table, and there is only one free slot in this table ( this is relevant to the discussion about running out of slots; see above ). All the other commands live in overlays, and their dispatch table has 5 extra entries. A few commands already have multiple sequences in the default mapping ( this is because some ASCII teminals send ^J for down-arrow, but others send ^V ). If you're running out of space in the overlay dispatch table because you are making lots of multiple mappings, there are commands you can get rid of: "deblank", "lowercase region", "uppercase region", "previous window" ( "next window" is good enough, you won't have so many windows that you need a "previous window" command ), "shrink window" ( you can always change to the other window and enlarge it ), "scroll down window" ( you can hit ^\^X^K, "scroll up" with a negative parameter ), "scroll up window" ( to save space, z80emacs doesn't do fancy screen updating, so the scrolling commands aren't too great ), "capitalize word", "lowercase word", "uppercase word". ====================================================== = = = CHOOSING A MAPPING; WHY THE DEFAULT IS SO AWFUL = = = ====================================================== If you're used to any of the several standard incompatible forms of emacs, the default mapping is awful because it isn't like the one you're used to. The default mapping is a compromise between a newfangled "theoretically best" mapping I almost finished working out, and an oldfashioned desire to be able to use all the fancy keys on the terminal I used while developing z80emacs. I should clean this up, of course... The commands labeled ZMAP in "mapping.h" are theoretical; the theoretical mapping is a compromise between ergonomics ( frequently-used commands are easy to type, a consideration that most emacs command sets overlooked; for example, most emacses use M-f for word forwards, M-v for page back ), and mnemonics ( less-often-used commands try to be easier to remember ). The commands with TVI in their comments are based on my function keys. Several useful control keys were left unmapped: ^A because I thought I might put in "magic mode", so I could use the FUNCT key on my terminal, ^Q and ^S because lots of terminals eat these, ( if you can use ^Q, please don't make it "quote" as emacs does; it's so stupid to use up an easy-to-type character for a rarely-used command ), ^W should probably be zmap for delete-word-forward, ^] and ^_ could be used for anything you want. To choose your own mapping, I recommend that you try keeping ZMAP commands as they are, and remap the TVI commands to whatever your terminal does. Of course, if your terminal sends ^[[A for up-arrow, you're out of luck. If there's ever another release, this should be fixed. ====================================================== = = = PRINTING OUT WHAT MAPPING YOU INSTALLED = = = ====================================================== There should be a program to read ME.COM and report on the installed mapping; there isn't. Have fun, Ralph Betza, October 4, 1991 Terminal customization for z80emacs is accomplished by using the program METERM.COM In order to keep the program as small as possible, thus allowing you to edit as much data as possible, I assumed that there are only two kinds of terminals in the world: ANSI and ASCII. I also restricted z80emacs to using just three different terminal control sequences: direct cursor motion, clear-to-end-of-line, and clear-whole-screen. In order to keep the program as small as possible, I didn't use a fancy termcap package ( though, if I had one, I could have initialized it in an overlay, so my feeble excuse doesn't hold much water ). Another consideration is that, once z80emacs is installed, it will "always" be used with one and only one terminal type, and reading a termcap file would take time ( a slightly better argument; METERM.COM is like an overlay that only executes once ). That's what meterm is about: it reads ME.SYM and ME.COM, reports what it finds, gets input from the user, and writes new data to ME.COM; meterm is very careful to check that ME.COM matches ME.SYM, by the way, so nothing cango rwong. Just in case, meterm tells you where the ansimove() routine is found, so that you can patch it if you need to; in case you need to do so, the binary distribution includes TELANSI.C, TELANSI.ASM, TELANSI.O, and my apologies... Most people shouldn't need to patch. If your terminal is like a PC or like a VT100, it's ANSI; otherwise, it's almost sure to be ASCII. The sequences for clear-to-end-of-line and clear-whole-screen are simply sent out as they appear in the termctrl[] table. The problem is direct-cursor-motion; that's why there's a variable called "ansiterm", that tells the ansimove() subroutine whether it's dealing with an ANSI or ASCII terminal. If ASCII, the cursor-motion sequence is probably 4 bytes long, escape, '=', space, space; the first two characters are sent out as is, the third character is added to the binary line number and sent out, the fourth character is added to the binary column number and sent out. This works as is for televideo, wyse, qume, ADM, etc., etc; for a few others, you may have to modify the second character. If the sequence isn't 4 bytes long, if the column number needs to be sent first, you'll have to patch. If ANSI, the cursor-motion sequence as stored by z80emacs is 4 bytes long: "1b 5b 3b 48". The first two are sent out as is, then the line number is sent out in decimal, then the third is sent out, then the column number in decimal, then the fourth. In both cases, you can specify the sequence as being longer than 4 bytes in order to send out "padding" bytes. You may think this is a monumental kludge, but I think it's an elegant simplification. Nyahh, nyaah, so there! ----Ralph Betza, October 1, 1991 ; ;pip a:=c:meov032.ovr ;era a:meov032.ozr ;crunch a:meov032.ovr ; ; ;pip a:=c:meov033.ovr ;era a:meov033.ozr ;crunch a:meov033.ovr ; ; ERA A:BINDIST.LBR XSUB LU310 -O A:BINDIST.LBR 64 -A -READMEB.1ST -A POSTING.0 -A Z80EMACS.DOC -A Z80EMACS.REF -A MAPKEYS.DOC -A METERM.DOC -A BINDIST.SUB -A C:ME.COM -A A:MEOV032.OZR -A A:MEOV033.OZR -A C:*.OVR -A MAPKEYS.COM -A MECONFIG.COM -A C:METERM.COM -A C:TELANSI.C -A C:TELANSI.O -A C:ME.SYM -A MAPPING.TXT -A ZMECMDS.LST -A C:ME.RSM -C -X . ; ERA A:BINDIST.LZR crunch a:bindist.lbr ; ; Ï(b1!H(!!*9|M*9"!"9*9*Ͱ1M F "*7|dF!"!"*͡1ʅ!"*͡1ʈ!"!"!"*1ʶ**|*q2!! "͡1!*ͥ2"`*-͡1*|c!"!"`*01]*91]*|E!"!"* Y2*"`cã*͡1ʈ*|*#"+*q2"*͡1ʠG ̓2"!"9"9 *9|*9"!"9*9*Ͱ1ìMmeovArg: %db1!9!]4b1!!4000.ovrb1!"7! 9^#V!9]4!!kDM1^͏!!!9]4!94!|!!kDM1ʣ͏!:9o&#}29b1!ͱva:b1! 9^#V*7͡1! 9^#V"7!͂4DM*7d͇10! s*7 ͇1 10`i#DMs*7 10`i#DMs!`i#DMs!!4!!kDM1ʀ!ͱ!!s,1ʜx!!!N53!x!*P53*R5x3*R5*P5xs,1x͏!9*T5a1.ovrb1!!!>63!:o&>6s!>6DM!"6`i~[`i^! 1[`i#DM>`i^zʞ`i*6#"6+)66s#r`i#DM~ʞ`i^! 1ʛ!`isÞy!66*6ͱb1͸*! 9~#!3͖(A:$$$.SUBb1!b1! 9N#F! ^#V!͡1 `i! s#r*6|(*6*6^#V"6J! ^#V &|J!! s#r!`in&̓2s! s#rb1!T7DM!!9s#rÚ`iDM!9~#fo#s#r!9^#V!1ʽ! ^#V!͡1Ã!"7!!7nf!9^#V!Q1#!9s#r!9^#V!Q1n&`is!9^#V!Q1 n&! snf! s#rn&! sn&! s!w ! s#r!9^#V!9^#V!9^#Vnfa1! 9!1ʆ!!9^#Vb1! 9N#F`i1³`i1ʽ!"7!`i)))T7nfnfa1DM!uuuu!ut`ib1!V5DM `i&DM`i53'!% ^z1!"7!!9^#V(L!"7!!9^#V!Q1f!ͧ(!ͧ(͡1ʩ!9^#V!Q1ʜ!ͧ(͡1ʦ!"7!!9^#V!Q1͡1!"7!!!! s#r!# s!$ s`i!9^#V!s#r!9^#V!Q1#!% s!Q1# !T !9^#V!s#r6 !: !9^#V!s#r!b1!!9^#V!%s!b1! 9N#F!ͧ(!!% s!b1!b1! 9^#V!1ʙ !! 9^#V!6^!Q1b1! 9^#V!1 !! 9^#V!6^!Q1b1*7^#V!^*7##^#V͡1 !*7##^#V*7^#V^!6^BK*F9Q1> `iQ1͡1`iQ1b1*7͡1y *7y)DM͡1v `i͡1y ͯ *7Ͱ1ʬ DM*7͡1ʬ *7V*͡1ʬ `ib1*7| *7*!"7"7b1!ͻ(b1G DM͡1 G ̓2`ib1!ͯ !b1!"7*̀ j *1P !"7*1L !O !**# *7"7!7DM*6))7`i3ʷ `i^#V*͡1ʬ **! ^#Va1` `iDMo !7DM*6))7`i3 `i^#V*͡1 **! ^! ^!9` `iDMü !"7 b1! 9^#V###Q1|A ! &DM|` !x !! s! 9^#V! s`iNo Memoryb1*6 ^!Ͱ1ʥ !! 9s#r*6 ^!Q1 !! 9~#fo̓2s#r!*6 n&̓2s*:9DMx" ! ^#V*6͡1 ! 9^#V`in&̓2s! ^#VBK b1!͂ *7! 9^#V"*6 ^#VnfDM͡1 * "|o !*! ^#V"s#r`i*s#r**! s#rsr##s#r!9^#V*ut*4!nf"! ^! ^*1ʇ! ^* "|k !*3*`i*3! ^*͵2`i****3*! ^#Vs#r`i^#V##s#r7'*`i"n&s! ^`i"**͵2"`i**Ͱ1*+"^*+"sû*|!9^#V***4*:9|n f PY͡14*u t nfPY͡1}*ut*7͡1hnf*1}*##~#fos#rnfPY͡1ʻ*utnf*1ʻ*~#fos#rnf !b1*:9DM! 9^#V^#V"x[! ^#V͡1*! s#r`i^#V͡1)*`is#r!! s#r! ^#V͡1O*! s#r!! s#r! ^#VBK*6DMxʹ`i^#V͡1ʇ*`is#r!! s#r! ^#V͡1ʭ*! s#r!! s#r! ^#VBK`*nfs#r! 9^#V##^#V*##s#r7'b1*7|*77'!"7"7"7b1*7*7͡1_*7 &DM|0!*7*73*7|O*77'`i"7!*7"7! 9^#V*7#"7+*7s!b1!͂ *7DM`i^#V! ^#V"* "|³!**3n&*͵2*3*n&͵2snf*##s#r**##^#Vs#rsr*s#r*:9DMx! ^#V͡1c*! s#r`i^#V͡1ʤ! ^#V*1ʍ*`is#rä*`i##~#fo͵2s#r! ^#V͡1! ^#V*1*! s#r*`i~#fo͵2s#r! ^#VBKC!b1! 9^#V"*1*7^#V"*6 ^#V͡18!*7##^#V"*^*͵2""*1l*"*|¥!͂ ʗ!9~#ʛ! ›!*+" !͂ **"*"!9~#*Ͱ1#+^!**͵2**3**n&͵2s*:9DMx`i^#V*͡1ʂ! ^#V*1ʂ*`i##~#fo͵2s#r! ^#V*1ʂ*! s#r! ^#V*͡1! ^#V*1*`i~#fo͵2s#r! ^#V*1*! s#r! ^#VBK-**͵2" !b1*7^#V!^"*6 ^#Vnf"͡1=*|9!*^* "|\!**3*^***3**^#V##s#rnfs#r*^#V*s#rnf*##s#r*:9DMxʑ! ^#V͡1! ^#V*͡1 *! s#r`i^#V͡1;`i^#V*͡1D*`i##~#fos#r*`is#r! ^#V͡1z! ^#V*͡1ʅ*`i~#fos#r*! s#r! ^#VBK7'*7'!b1!9N#F`i1`iq2!9^#VV`i+DM#|R*7##~#=*6 ^#V*7^#V##^#V͡1 !*7s#rn&*7##s#r!*7n&̓2sO*7##~#fo+s#r#!b1!9N#F`i1ʂ`iq2!9^#Vͣ`i+DM#|*7^#V!^*7##^#V͡1*6 ^#V*7^#V͡1!*7^#V^#V*7s#r!*7##s#r!*7n&̓2s*7##~#fo#s#r+Â!b1!!ͦ%!"7b1!L9^#V!9]4!!94!@!9!9ͳDM`i͡1}!xʦ!9^!y͡1¢!9^!Y͡1ʦ!! [y/n]? b1!DM! 9^#VG û!`i#DM+!9~#fos! !">9!9^#V^z !!!^!G!*>9">9 !xV`i+DM!9~#fo^! 1V!9^#V+`i1ʸ`i#DM+!9~#fos 1ʫ!^*>9#">9!@73*>9#">92 00Yb1!! !*>9+">9b1! 9^#V!ͻ(b1!!!9! 9~#fo#s#r+^BKz`i%Ͱ1¡! 9~#fo#s#r+^BK`ið! nf!ÿnf!ÿ*>9#">9ÿ2dls+ͦ%!"7b1! 9~#fo#s#r+^BKz*>9#">9b1! 9^#V!1,! 9^#Vq2! 9s#r!-! 9^#V!9~#fo͇1DMxS!9^#V! 9^#V!9~#fo15^*>9#">9b1! 9^#V"@9!9^#V"B9b1! 9N#F*B9P1!$*@9)*D9^#V!Qs!̀ `i*B9#"B9+*@9)*D9^#V##s!*@9)*D9^#V*B9##`i ͡1@! #+s*B9#"B9Q1=*B9P1d!^#+s`i@73u!*B9"B9!b1! !P*B9͵2*@9)*D9^#V*B9##4b1!9^#VBK!9^#V!9^#V!P"n&`i^͡1`i*͡1`i#DM#ü!"*"!9^#V!P"*+"^*+"^͡18*^! Ͱ15!"*#""*#"*|v*PYͰ1v*+^! ͡1v*+"Q`i!9~#fo͵2!9^#V`i*Ͱ1`i#DM+^#+s*>9#">9Ò**Ͱ1ͦ%`i*Ͱ1`i#DM+^#+sb1! 9^#V*<9Ͱ1!9^#V*>9Ͱ1E! 9^#V"<9!9^#V">9!9^#V!9^#VE$b1*:9|M n&"n f  ^#V"n&|A n&Q1n f DM!" * #" *1nf`i͡1Š`i*͡1`i^#VBKØn&" 1* +" *1*+" 7* 1*** " * 1'!" 7*͋2" nfDM* +" 1l! ^#V*Ͱ1l! ^#VBK?`iu t !n&̓2sn f DMn&" n&Q1ʻ"<6!!n&Q1n&** 1"`i^#VBK* #" 5 n&Q15 nf`iͰ1- * #" `i^#VBK "!u!unf Q*7 ^#VBK*7^"6*7^#V`iͰ1ʈ *6#"6`i^#VBKg !"6!" *7##^#V* 1 * #" +PY^"* ͡1 !*6̓2"6 *̀ *6#"6*6#"6Ô *6P1 !!O"6*7|ʀ!!" !!* #" * 1n!!* )*D9^#V~#fo̓2s#r! !P* )*9^#V##4!͘%!"7"7">9"<9!" Ð!* #" * 1!* )*D9^#V"*^#V!Q1!!*~#foQ1s#r* )*9^#V##*##* ͖É!*6*6b1!!* )*D9^#V~#fo̓2s#r!* y!9^#V! ^#V! ^#V!9^#VͰ1ʣ"! 9^#V!^!DM~"`i#DM`i1ʣ"! 9^#V`i^͕y"hb1*6DMx"`i!9^#V$4"`i! ^#VBKô"!9~#a#!, &DM|"!! |#7'!*6! s#r`i"6! s#r`is#rsrsr!9^#V! s! 9^#V`i]4`ib1! 9^#V! ^!Q1͡1ʛ#!8$3Ͱ1ʛ#!!!9^#V! n&Q1s! 9^#V! ^#V!9^#V! ^#V^#VBKͰ1#õ#! 9^#V! ^#V!9^#Vs#r!!9^#V!s#r!9^#V!s#r!9^#V##s#r!Junk changesb1!9DM`i#DM+^`i#DM+^+`i#DM+^+*6|$`i#DM+^! 9~#fo#`i#DM+^!9~#fo#u%! 9^#V! ͇1`i#DM+^#! 9^#V! 1`i#DM+^#`i#DM+^+! 9^#V! ͇1`i#DM+^#! 9^#V! 1`i#DM+^#+1ʗ%`i#DM+^u%b1!ʹ%b1!ʹ%b1! 9^#V! Y29DM`i#DM+^+1%`i#DM+^%b1!b1! 9^#V###"3#"*5|A&!5"5"5!"5nfDMX&`i`i^#VBK! ^#V*3&! ^#V*͡1ʆ&`i^#Vsr÷&*`i##~#fo͵2s#r! ^#V))PYDM*! s#r"5!!9^#V`i4`i`i*5͡1&&DM|&!L&b1*))T(DM͡1'!`i*ut7'*5b1! 9^#V!DM*5['nf`i3x'nf`i3ª'nf3ʧ'`i3ª'nf`i3ª'R'nf! ^#V))PY͡1'nf##^#V`i##~#fos#rnf^#V`is#r'nf`is#rnf))PY͡19(! ^#V##~#fos#r`i^#VsrA(`iut"5!W(#|+!9^#V*5y(*59}|y(*5"5|ɯ=go!9~#f/o|/g#"5* Ö(J3ͪ(J3*5DM*5o&J3(o&J3*5*+++*5DM*5!9N#F#^#Vkb6#> 6 #=(>6#=( : >/) Ai)[ )@,)ai){i)`w# .J)c)2)p)w#3){o|g c)p)w#T)!!|a{ b1! 9N#F! ^#V`i^#V3=*! ^!Q1ʭ)!!`in&Q1s`i~#)! ^#V! ^#V! ^s,1%*| *!*!`in&̓2s!! ^#V`is#r! s#r`i~#fo#s#r+^!Q1b1! 9N#F!9^#Vnfnf3ʊ*j+`i~#fo#s#r+sb1!!9^#Vj+b1!5DM`i263*`i DM**b1! 9N#F!`i~]+! ^!Q1+!j+! ^͏̓2! ^!Q1]+*6! ^#Vs#r! ^#V"6!! sb1! 9N#F! ^!Q1+! ^#V`i^#V͵2! ^#V! ^.͡1+!`in&̓2s!!9^#V!͡1 ,!`in&Q1s!`is#r! s#r!`i~#,! ^#V`is#r! ^#V! ^#V! s#r!`in&̓2s!9^#V`i~#fo#s#r+sb1! 9^#V!1˜,! 9^#V!1ʢ,!"7!! 9^#V)))T7DM!9^#V!9^#V! ^#V`i^)5^#Va1b1!DM!9^#V$~A-n$&!͵2DM!9~#fo3)-!9^#VBK!9^#V-A-!!9^#V`i͵2"3!9s#rzʦ-!9^#V!9^#V`iq3!9s#rzʦ-!9^#V!9~#fo͵2ͥ2PY!9^#V!ͥ2PYDM`i!9~#fo3-!9^#V`i͵2!9^#V`i--`i!9^#Vb1! 9N#F!!ͧ(!!ͧ("7|'.!!9^#V!$ ^!!9^#V3!$ ^!9~#foQ1!$ sz{.`i!~#fo#s#r!b1! 9^#V!1¤.! 9^#V!1ʮ.!"7!! 9^#V)))T7DM!9^#V!9^#V! ^#V! ^)5^#Va1b1!DM!9^#V$~O/n$&!͵2DM!9~#fo37/!9^#VBK!9^#V0O/!!9^#V`i͵2"3!9s#rzʴ/!9^#V!9^#V`iy3!9s#rzʴ/!9^#V!9~#fo͵2ͥ2PY!9^#V!ͥ2PYDM`i!9~#fo3/!9^#V`i͵2!9^#V`i0/`i!9^#Vb1! 9N#F!!ͧ(!!ͧ("7͡1A0*7͡1\0!"7!!!4h0*7|h0!!9^#V!9^#V!$ ^!3!"ͧ("7|ʠ0!!$ ^!9~#foQ1!$ sz0`i!~#fo#s#r!b1!9N#F!0#!9~#fo1M1`i#DM+^!9s#r!9^#V! ͡151! !9^#Vͧ(!9^#V!9^#Vͧ(0|g}o|/g}/o^#V#DM!99`ia1|z252:5q2}2}}«1|ʺ1!}º1|ʫ1!}|1}|?>o&zo&|1}|>o&|o&z252:5q2||2/g}/o#z2/W{/_2DM!>25))22#}o|gJ2 :5=25*2}:5=25*2}DM!>))i2 =a2}}/o|/g#}|ʺ1ë1|g}o{_ʲ2|*3|7g}o˜2{_ʲ2)­2}}o|gN#F# N#F#z2{2##^#VBK^#Vz3#y2###2#x2#~#fo}|>?o&}|>o&{_ʲ2|g}o*3|g}o~# x?3!95~#Z3!g3|7J3!~3J3"*5!"5*5·3*5!4©3#4*5+"5}3o&"7*5b1!9!29^#V(!9!ͧ(! 9F+N+V+^+~+ngx4w# 3!9^#V#N#F#nx"4s# 4!9^#V#~#foxH4M4H4# 44!W4!}!}!9^#V#~#fox4~4# n4!9~#foʗ4#Î4}!9^#V#^#V#N#F44!9^#V#^#V#N#Fn4!9^#V#~#fox4~4# 4n4!9^#V#^#V#N#F4!9^#V#n~5"5#5!|!9^#V#n>5#55x5 +~>5"50123456789ABCDEFH9,.00D CCCCCCCCCC##########################333333333333333333333333337  V    (   *) ,.*-!gG bcfIj LPQR/T+WwY\_^~      =12b()npz= TvMEOV032.OVR# x 9f 9rGg+5B9hDK!$9"(9@ >X/ u  2&!Ä*\HeaUOC`4@ngla] l8͔̕,5\Sb2Z +FF.YȇT:[ :n\'ū(:`M>)5Y4q!'1 e uk7ϲ: s@6j eյk9xS,:Y[h춛mB1e&D`-d e ;lLp3@CKӀ2Gp(cץYplh#cVHrX̕q@3MHXrLM I pe3RV3`3T$y`떥j_a!,!`P(G~Jfy<C&#6G#p$v CYC4P>}9L=@h6 ҿuد恢8:A_~:sׄ]8n:B n"_𺾸?B/݋`1D|B1o g8CЏ6CՇ?p?q 0(? @pp|2`P:A 9[\#U3'd0l x 1 @ SPhuL9V¤hpwf2-Dx}!ӫ0fa@0g%D&"|Qm+;d !@|sz ;5ax! a 1&5@Ɉ HC#{3~3cH,"f9"a'w+t8ie\X/ u  2&!Ä*\HeaUOC`4@ngla] l8͔̕,5\Sb2Z +FF.YȇT:[ :n\'ū(:`M>)5Y4q!'1 e uk7ϲ: s@6j eյk9xS,:Y[h춛mB1e&D`-d e ;lLp3@CKӀ2<Ô(cץYplh#cVHrX̕q@3MHXrLM I pe3RV3`3T$y`떥j_a!,!`P(G~Jfy<C&#6G#p$v CYC4P>}9L=@h6 ҿuد恢8:A_~:sׄ]8n:B n"_𺾸?B/݋`1D|B1o g8CЏ6CՇ?p?q 0(? @pp|2`P:A 9[\#U3'd0l x 1 @ SPhuL9V¤hpwf2-Dx}!ӫ0fa@0g%D&"|Qm+;d !@|sz ;5ax! a 1&5@Ɉ HC#{3~3cH,"f9"a'w+t8ie\6]4! "9!"9!9^#V"9!"l!9^#V!͡1>!!!?ͪ"DM|>!D>!!9!&?ͳͰ1&>!!!9ͪ"DM|D>!*6 n&+szj>!*7*63`i"6`i*7 s#r! ^#V*7 s#r!*7n&̓2s`i n&#s+|>!*6*73!*:9|?*7Ͱ1?n f PY͡1?!*6*73?nf >![List]Use buffer: b1*:9~#I?!*:9DMxk?`i*7͡1k?! ^#VBKN?`i"?!?!9"?H9*?!9^#V*?H9 ;b1!*9^#V!͡1s9!.9^#V!.9^#Vͮ:!.9^#V!1:!!9!:ͳ͡1ʦ9|9!:*6]49!9*6]4*:9DMx:! ^#V*6͡1:!`in&̓2s! ^#VBK9!!!9!:ͳ͡16:|B:!9*6]4*:9DMxʏ:! ^#V*6͡1ʃ:!`in&̓2s! ^#VBKY:!File Name: Buffer Name: b1G !9^#V!1:!!9~#:! ͡1;zDM`i͡1 ;!9~#fo+s#rz:`i!9^#V# "R;!;;!9"P;H9*R;!9^#V*P;H9r6]4!!"9!""9!bak":!:!9":H9*:!9^#V*:b1!9!L9^#V(!9!ͧ(!9!J9^#V(!9!L9^#V(!9!ͧ(H9r6]4! "9!"9!9^#V"9!"6]4!!"9!""9!bak":!w:!9":H9*:!9^#V*:b1!9!L9^#V(!9!ͧ(!9!J9^#V(!9!L9^#V(!9!ͧ(H9J[;b1!9^#V!1d9 !*:9~#}9!9;!*7^#VBKz¯9*:9DM! ^#V*7Ͱ1ʯ9! ^#VBKÓ9*7^!9~#fo19!I;!*7^#V`i͡1a:! ^#V!9#!9~#fo19:! ^#V! ^#VnfͰ19:nf9! s#r!9^#V`in&͵2s:*7 ^#V!~:#!9~#fo1ʱ:*6 ^#VͰ1ʱ:nfw:*7 s#r!9^#V*7n&s!9^#V*7n&͵2s!9^#V`in&s!*7n&̓2s!`in&̓2s!Only one windowImpossible change";!x;!9";H9*;!9^#V*;H9;b1! 9^#V!͡1s9!9^#V!9^#V^;! 9^#V!͡1ʙ9!9^#V!9^#V͎;*:9*7Ͱ1,:*:9DM! ^#V":9! ^#V! n&+sz$:`i^#V! ^#Vs#r! ^#V! ^#V##s#r! ^#V! ^#V!s#r! ^#V! ^#V!s#r7'Ù9*7~#:*7^#VBK! ^#V*7s#r! ^#V! n&+sz:`i^#V! ^#Vs#r! ^#V! ^#V##s#r! ^#V! ^#V!s#r! ^#V! ^#V!s#r7',:*7 ^#V*7^|;*6 ^#VnfͰ1;+nf:!*7s!*7s*7 s#r!*7n&̓2s!b1!9^#V*7s!*7n&̓2s!b1! 9~#¼;! *7n&̓2s!"7;!*7s!*7n&̓2s!":!d#!9s#r!Ͱ19!9^#V! ^#V7'!*6PYͰ1:nf 9nf |:"6':ut 7'!Kill buffer: Buffer is being displayed":!u:!9":H9*:!9^#V*:H9FX;b1!9^#V!1d9 !*:9~#}9!6;!*7^#VBKz¯9*:9DM! ^#V*7Ͱ1ʯ9! ^#VBKÓ9! ^!9~#fo19!F;!*7^#V`i͡1X:! ^#V!9#!9~#fo13:! ^#V! ^#VͰ13:nf9! s#r!9^#V`in&s:*7 ^#V!u:#!9~#fo1ʫ:*6 ^#VnfͰ1ʫ:nfn:*7 s#r!9^#V*7n&͵2s!9^#V*7n&s!9^#V`in&͵2s!*7n&̓2s!`in&̓2s!Only one windowImpossible change";!u;!9";H9*;!9^#V*;H9x6]4! "9!"9!9^#V"9!"F:!.:!9"D:H9*F:!9^#V*D:H9z;!:Õ:!b1!9^#V!1a;!!9~#fo+s#r#|ʈ< ”;!!V‘;!w; ʅ<*7##^#V*7^#V^BK`ia1;`iz1;! PY͵2DM`i*7##^#V*7^#Vs!͂ !!V 6]4!!"9!"9!"9!*7"7!"7*7|µ9 !:!"7Ù9*7|9:9*7Ͱ19*7Ͱ19n9*7*!"7*7͡1:!::!:!"7Ù9*7|6::6:*7|9:n9!:!>6]4! "9!"9Ó9*7"7!"7*7|l:ñ9!"7Ù92X999 :U::Not NowKY+BD+MC.KBM[StartMac][EndMac][MacDone]KY+BD+MC.KBMb1*7|:!*7^"";! ;!9" ;H9*";!9^#V* ;H9:b1! 9^#V:!9^#V!9^#V_: !9^#V!1ʈ9!Ë9!!9^#V!1"F9*F9Q19*F9Q19!:9!,:9*F9Q19!>:9!M:!!9^#V!_:2X9n9r9r99:[vi WORD mode][emacs WORD mode][vi word mode][emacs word mode]b1! 9~#‡:͚:ʇ:!:3DM͡1ʒ::!ͱ`iQuitb1*6DMx:! ^!Q1͡1:!! ^#VBKä:!b1!!ͦ%";!;!9";H9*;!9^#V*;H9Vh?b1!"*7nfDM*6 ^#V"!""! ^"nf"! 9^#V"(19*19!*73"*q2"*+>*";*|9*+"*19*";n&+*Y2"-:*#"6:*|!:*+"*6 ^#VBK!"6"7*7Q1H:*6"7!*7̓2"7*Q1:?|:! ^#VBK*Ͱ1|:a:Ø:?ʘ:`i^#VBK*Ͱ1ʘ::! ^*Ͱ1:`i*^" ͡1:!*̓2":*̀ :>*#"*71:*#"Ø:L?`iut*ut;*"?];*F9Q16;>6;ç; E;ͱ>>6;*F9Q1Z;>Z;ç;;*͡1;`iut*ut;>ʧ;?ʴ; ›;>ʧ;>É; ʱ;>«;!>Û;Ã;ͱ>*͡1;!"**!*|;*?*Q1<**ͣʧ;*";*1Ø=?’=;!>`iut*ut;~# >!>!nfutnfutL?=!ڡ>!A>^#V6::;};;};;;!::9999>>>>>>>>>>>>>>>>>>>>>>>>>> ͱ>>!>>!b1*#"b1*+"1b1**# b1*7Q1>?!*7̓2"7b1!*7n&̓2s"?!?!9"?H9*?!9^#V*?H9:b1!*7|_9 *6 ^#V^#V!!9s#r*6 ^#VͰ1:n&*7n&!:!9Ͱ19*7! V*͡19*7! V*͡19!!::!9~#fo#s#rnf{9*7!V**7*͡1ʗ:!9^#V!:!*6 n&Q1s*:9DMxʗ:! ^#V*6͡1ʋ:!`in&̓2s! ^#VBKa:Write I/O error[Wrote %d lines]"^;!:!9"\;H9*^;!9^#V*\;b1! 9N#F!9^#V!9~#foY2!;#3S;!9^#V`i#DM+^V*͡1P;!;!9^#V"zmecmds.lstmaptable.zmeo! 9^#V!B!9^#V##^#V"8! 9^#V!d!9^#V!^#V"!*ʹ%"*ʛ*!!w9͡!͌!|ʻ ͳͮʸ] Þcould not open %d for output o!!9s#r!*8!9s#rz*8!!w9͡!͌!9!9s#r!9^#V!!8͵!9~#fo#s#r:8o&0):8o&9)!8! 9s#r! 9~#fo#s#r+^!9s#rzʲ!9^#V! ͮʯõ|)! 9^#V͸1!9s#r!9^#V!M!9~#fo+s#r! 9~#fo^!9s#r! ͮ4!9^#V! ͮ4!9^#V! ͮ4!9^#V! ͮM!! 9^#V!9~#fos!9^#V!)!9^#V!1)!!9s#r!8!9s#rÕ!9~#fo#s#r!9^#V^!9!9^#V^!0! !9~#fofs#r!9^#V^!!9~#fos#rÆ!9^#V!9^#V!s#r! 9^#V!9^#V!H͓1!!9^#V!s#r!! 9s#r!9s#r[!9~#fo#s#r!9^#V!^#V!! 9^#V!9~#fo~! 9^#V!9~#fo^!-ͮ! 9^#V!9^#V!~#fo#s#r+)!9~#fos#r! 9~#fo#s#rL!9^#V!!9s#r ! 9~#fo#s#r! 9^#V~ʠ! 9^#V^!-ͮ! 9^#V^!9s#r!9^#V!At!9^#V!Zt! !9~#foDs#r!9^#V! 9~#fo#s#r+s!! 9^#Vs!9^#V!͸1!9^#V!s#r!9~#fozs#r*4#"4)*4!~ropen fails: %s Read %d lines o!o~!}28!a9!!8͵^:8o&ͮ^:8o&|^:8o&ͮn!~~!͌Enter a name: reached EOF o*ʦ*'! 9^#V"%o!8! 9s#r!!9s#r!9s#r!9s#r!zf9!9s#r! 9^#V^!ͮ !͌! 9~#fo#s#r+^!9s#r!0q!9^#V!9q! !9~#fofs#r!9^#V!!9~#fos#r !9~#ß!9~#fozs#r!9~#fo#s#r!9^#V*4 !9^#V!^#V!9~#foͽ~!9~#fo#s#r!9^#V"6!9^#V!H!9^#V!^#V! ~~ñ ! 9~#fo+s#r! 9^#V͸1!9s#r!9^#V!ʷ!9~#fo+s#r! 9~#fo^!9s#r! ͮž!9^#V! ͮž!9^#V! ͮž!9^#V! ͮʷ!!9^#V!9~#fos3!9^#V!!9^#V!1! ~!͌!! 9s#r ! 9~#fo#s#r! 9^#V~ʘ ! 9^#V^!-ͮ! 9^#V^!9s#r!9^#V!Al !9^#V!Zl ! !9~#foDs#r!9^#V! 9~#fo#s#r+s!! 9^#Vs!͸1"!!9s#r !9~#fozs#r!9~#fo#s#r!9^#V*4ʱ !9^#V!^#V!9s#r*!9~#fo ñ *!9~#fo) *!9s#r!9^#V!9^#V!!1‘ !9^#V!H!9^#V!^#V! ~!9^#V"6!9~#fo#s#r ñ !!9s#rî !9~#fo#s#r!9^#V!^#V!9^#Vʮ !9^#V)!9~#fo^#V!9^#V!^#V!9s#r*!9~#fo® *!9~#fo+ *!9s#r!9^#V!9^#V)!9~#fo^#V!9~#fo!1« !9^#V!H!9^#V!^#V! ~!9^#V"6!9~#fo#s#r î ß ñ !9^#V! ~!9^#V%3d %s bad input line %3d %s %3d %s ===== %d matches o! 9^#V!! !V ~!a9>! 9s#r! ͽU ! 9^#V!ͽU ) [MORE]o!! 9s#r!!9s#r!9s#r!~!a9>!9s#r!ͽ!9^#V! ͽ!9^#V!^‡ !9^#VæÇ !9^#V!^ !!9~#fo͐s#rÇ !9^#V!^! 9s#r!!9~#fo^s#r!9^#V!^ ! 9^#V!ͮm !!9~#fo͐s#r!!9~#fo͐s#rÇ ! 9^#V!ͮʪ !!9~#fo͐s#r!!9~#fo͐s#rÇ ! 9^#V!ͮ !!9~#fo͐s#r!!9~#fo͐s#rÇ !!9~#fo͐s#rÇ !!9~#fo͐s#rÇ !9^#V!^5!! 9s#r !9^#V! 9s#r!9^#V! ‡ !9^#V!‡ !9^#V!^ !9^#V!^Ž!!9s#r!!9~#fo͐s#rÇ  ^ ?5Ç !9^#V3! 9^#V! 3! 9^#V!3! 9^#V! ! 9^#V!3!~b ! 9^#V!ͮL!~*6^#V"! 9^#V!9~#fo͐"!!*b,ͽʟ!!w9͡!͌*6H*6^#V!9^#V! 9~#fo͐!+~!9Enter a keystroke sequence: Please try again Okay, we'll skip this one. write error The internal code 0x%x has been mapped to %d %s |g}o|/g}/o^#V#DM!99`in|z2%6:%6~},}}¸|!}|ʸ!}|}|?>o&zo&|}|>o&|o&z2%6:%6~||/g}/o#z,/W{/_,DM!>2$6))?#}o|gW :$6=2$67}:$6=2$67}DM!>))v =n}}/o|/g#}|ø|g}o{_ʿ|7|7g}o¥{_ʿ)º}}o|gN#F# N#F#z{##^#VBK^#Vz #y####x#~#fo}|>?o&}|>o&{_ʿ|g}o7|g}o~# xL!9&6~#g!t|7o!l9",6!9!9^#V!o! 9^#V",6!9!9^#V!o*,6!9^#Vo!a9DM`i~`i DM9 !!9^#V#^!+ͮ!9^#V^|@!C!!9^#Vʹ%! s!ͮd!|u!x!͐!9^#Vʹ%! s!ͮʟ!|ʰ!ó!͐!9^#Vʹ%! s!ͮ!!͑2;2! ^4/!9!"!r2wga!! s!! s#r!`is#r! s#r! s#r`io! 9^#VBK!a9>ͽʄ ͽʄ`i#DM+sU!`isͮʬ`i! 9~#foͮʬ!! 9^#Vo! 9^#V!9~#fo+s#r!!9^#V>DMͽ`i#+s`i ͮ!u`iͮ5! 9~#foͮ5!! 9^#Vo! 9N#F͜^o`i~#fo+s#r!J[ llo! 9N#F`i~ʼ!l9`i#DM+^ͮʹ!Ò!l9! o! 9N#F`i~!9^#V`i#DM+^ͮ!!o! 9N#F!9^#V!PY^DM`i ͮK! ͮK!o! 9^#V͜DMͮˆ! 9^#Vͮ͜ʌ!ͲPY͐o! 9N#F! ^#V`i^#V`! ^!^!!`in&^s`i~#]! ^#V! ^#V! ^&)H|/!2!`in&͐s!! ^#V`is#r! s#r`i~#fo#s#r+^!^o!w9!9^#Vo! 9N#F!9^#Vʸ!!9^#V`i/!`io!9N#F! ^#V`i^#V! 9^#V!^! 9^#V`i~#fo#s#r+s!^o!!9^#Vo!a9DM`i9"v`i DMwVo!9N#F!!9s#r`i~! ^!^ʻ!!9s#r! ^'!9~#fo͐s#r! ^!^*9! ^#Vs#r! ^#V"9!! s!9^#Vo! 9N#F! ^!^ʀ! ^#V`i^#V! ^#V! ^b,ͮʀ!`in&͐s!!9^#V!ͮʹ!`in&^s!`is#r! s#r!`i~#]! ^#V!ͮ!!9! ^b,ͮg!9^#V! ^#V`is#r! ^#V! ^#V! s#r!`in&͐s!9^#V`i~#fo#s#r+s!^o!9N#F! ^#V!ͮʈ`i! s#r*9|ʨ*9!9s#r*9^#V"9! ^#V!9s#rz!! s#ry!`in&͐s!9^#V! s#ro*06|!"".6"06*06DM! 9^#V*06"06PY"3`i"06!*06*.6#r*06*.6^! 9s#r"*! 9^#V*.6".6`io! 9^#V"26!9!9^#V!!*26so! 9^#V*26#"26+s!^o!N9N#F!P9^#V#+^z %ͮ !!9s!!D9s#r! !B9s#r!!@9s#rn&-ͮM!!D9s#r#+^0ͮd!0!B9s#r!!>9s#r#+^!0ʳ9ʳ!>9^#V! f!>9s#ro.ͮ!!@9s#r#+^!09!@9^#V! f!@9s#rlͮN#+^!:9!T9~#fos#r͘2ͫ2dͮʀ!:9!T9~#fo##s#r++^#V6ͫ2eͮ¤fͮ¤gͮ!9!T9~#fos#r#6#6!:9!T9~#fo##s#r++^#V5ͫ2×!9!!>9͘2;29!!9!49s#rþ!:9͘2̓25l!9! !>9͘22;2 !9!49s#r!-!69~#fo+s#rsÏ!9! !>9͘2;2 !9!49s#rþ!9! !>9͘2;29!!9!49s#rþ!9!!>9͘2;29!!9!49s#rþ!:9͘26!49s#r͸1!89s#reͮ!!!B9^#V!ͮ,!4!B9^#V!9! 9#6#6#6!9! 9!49s#r͸1!89s#r!!@9s#r!:9͘26!9!69s#rsþoduxsefct!9!49~#fo!89s#r!89^#V!@9~#fo!@9^#V!89s#r!D9~#4 !>9~#fo+s#r#!89~#fo4 !B9^#V`in !!69s#rQ !69~#fo#s#r!49^#V~ʑ !69^#V!@9~#foʑ !49~#fo#s#r+^`inB !D9~# !>9~#fo+s#r#!89~#fo ! `inÛ `ino!9N#F!9^#V`i6;2!9͘22~4646^+s! 9`i62͘2D4ͫ2 3 o!9N#F!9^#V! 9͘2̓25!! 9͘26^! 9!9͘2̓23̓2̀3ͫ2`i͘6;2!9͘22~46)46^+s! 9`i͘62͘2D4ͫ2!9͘2;2 !9*#"W""W*&6DM*(6o&W@"o&W*&6*+++*(6DM**6!9N#F#^#Vkb6#> 6 #=k">6#=t" : >§" A"[Ҙ"@ä"a"{"`w# .""ʪ""w#ë"{o|g ""w#"!!|a{ !9^#V*E6!9}|#*E6"E6|!o!!!61!:o&^6s!$"G6!6DM!"7*7$`i^! ͮ#`i^! ͮʇ#`i#DMc#`i^z$`i^!>ͮʨ#!ü#`i^!<ͮʛ$!`i#DM^! ͮ#`i^! ͮ#ü#`i`i#DM~$`i^! ͮ $`i^! ͮ$!`i#DM+s$#'|:$!͔%H$!ʹ%ͮʘ$!$!͓1!1! %!1!͸1!!b,! "%$`i*7#"7+)G6s#r`i#DM~$`i^! ͮ$`i^! ͮ$!`i#DM+s$ï$V#!G6*7"%Can't open file for redirection: oL! 9~#<%!@%0"A:$$$.SUBo!"!o!con:CON:lst:LST:prn:PRN:pun:PUN:rdr:RDR:o!9^#V!!9^#Vʹ%o!F!!9s#r%!9~#fo#s#r!9^#V! &nfJ%ͮ&%!"!!DM"&`iDM`i~#C&!9^#V`i^#VZ1C&&! ^#V!9^#V!^#!9s#r!9^#V!^ʊ&n&u|Š&!"!!9^#V!^ʱ&n&u|±&!"!! ^#Vsrn&un&u!)ut!9^#V!9^#V!9^#Vnfn! 9!'!!9^#Vo! 9^#V!<'! 9^#V! F'!"!! 9^#V)))FDM! ^#V! ^#Vn! 9s#r!! s! s! s`is!J%! s#r! 9^#Vo!7DMò'`i&DM`i58"'!% ^z'ê'!"!!9^#VX"'!"!!9^#V!^ (!"!"ͮO(!9^#V!^B(!"ͮL(!"!o(!9^#V!^ͮo(!"!!!! s#r!# s!$ s`i!9^#V!s#r!9^#V!^#!% s!^(!(!9^#V!s#r(!(!9^#V!s#r!o!!9^#V!%s!o! 9N#F!"!!% s!o!o! 9^#V!K)! 9^#V! U)!"!! 9^#V)))FDM!9^#V!9^#V! ^#V`i^)58^#Vno!DM!9^#V$~)n$&!DM!9~#fo#)!9^#VBK!9^#Vͫ*)!!9^#V`i/!9s#rzY*!9^#V!9^#V`iͧ0!9s#rzY*!9^#V!9~#foͲPY!9^#V!ͲPYDM`i!9~#fo"ʢ*!9^#V`i!9^#V`iͫ*ʢ*`i!9^#Vo! 9N#F!!"!!""|*!!9^#V!$ ^!!9^#V1!$ ^!9~#fo^!$ sz.+`i!~#fo#s#r!o:>8o&|º+!}2=8!}2?8}2>8!=8! "! !":?8o&ͮʈ+!}2>8!! :>8o&#}2>8=8#s! :>8o&#}2>8=8#s!"?9:>8o&DM!9~#fo+!9^#VBK*?9=8!9^#V1`i*?9"?9`i:>8o&}2>8`io!9N#F!+,#!9~#fo^,! 9^#V"`i#DM+s!ͮ^,$,o! 9^#V!‡,! 9^#V! ʑ,!"!! 9^#V)))FDM!9^#V!9^#V! ^#V! ^)A9^#Vno!DM!9^#V$~2-n$&!DM!9~#fo#-!9^#VBK!9^#V-2-!!9^#V`i/!9s#rzʗ-!9^#V!9^#V`iͯ0!9s#rzʗ-!9^#V!9~#foͲPY!9^#V!ͲPYDM`i!9~#fo"-!9^#V`i!9^#V`i--`i!9^#Vo! 9N#F!!"!!""ͮ$.*ͮ?.!"!!!>1K.*|K.!!9^#V!9^#V!$ ^!1!"""|ʃ.!!$ ^!9~#fo^!$ szµ.`i!~#fo#s#r!o!9N#F!.#!9~#fo0/`i#DM+^!9s#r!9^#V! ͮ/! !9^#V"!9^#V!9^#V".o! 9^#V!p/! 9^#V! p/! 9^#V)))I^z~/!"͑2! 9^#V)))L^#VBK!9^#V0!"ͮʾ/!"͑2!#"!!$ s!9!! ^#V5̓23;2!$ ^62T32͘2T3ͫ220!"͑2//00!!# s!9͘2̓25m0!!! s#r!$ s!"͑2!9͘26^!$ s!9͘2̓236!! s#r!9͘2W!ô0W"*(6!"(6*&60*&6!40#4**6+"*6}µ0o&"**6o!9!29^#VX"!9!"! 9F+N+V+^+~+ngx<1w# /1!9^#V#N#F#nxX1s# M1!9^#V#~#fox~1ƒ1~1# j1!ڍ1!}!}!9^#V#~#foxʵ1~ʵ1# ä1!9~#fo1#1}!9^#V#^#V#N#Fj1!9^#V#^#V#N#Fä1!9^#V#~#foxʵ1~2# 2ä1!9^#V#^#V#N#F2!9^#V#n~R2X2#E2!|!9^#V#nt2#k2xR2 +~t2X2!*9Ü2!*9w#w#w#w*9~#~#~#~"I9*9V+^+V+^*I9"I9*9s#r#s#r*I9*9*9"9"9*9>w#2*9~5#3ÿ5=ɯ<*9*9###=33A3333+C3*9*9#_3*9*9#u3*9*9#Š3*9*9#Ÿ3*9*9#´3*9~/w#3*9~?G*9^#V#~#fo))3#3DM*9s#r#q#p*9~?W*9###~ 4~w+447~w+$4 4~#54O2*9U924y2S9*9]924:S92S9ͱ4U9*9w#m4:S92*9U924y2S9*9]924ͱ4Y9*9w# 4:S92!Y9w#·4> 2T9!U9~w#4OY9!]9#4y4!U94!T954!T95*5!U9~w#5OY9!]9#5y44Y9!]9#35*9]9~#F5*9Y9~#V5!U9w#d5> 2T9!U9~w#u5Ҡ5U9!]9#‰5Ҡ5”5!T95o5*9U9w#¯5#35!#3ʿ5!<#35ÿ5#355ÿ5#355#35ʿ55*9s#r#6#6*9s#r#z66#6*9^#V0123456789abcdefJ%)2+,J%,..K9O9))Y%Y%Y%J%J%J%J%J%J%J%J%b%g%l%:q%:v%:{%:%:%:%@%@)'NKEYTAB_keytab_NOVERTABovertab_ctrlg_CI-Abort-CancelbackcharEC-Arrow-LeftforwcharEC-Arrow-Rightlinsert_EC-Self_InsertEC-Goto-Beginning-Of-LineEC-Word-BackEC-Goto-Next-PageEC-Kill-Char-ForwEC-Goto-End-Of-LineEC-Word-ForwEC-TABEC-Arrow-DownEC-Arrow-UpEC-CR-With-IndentEC-Forward-Search-SimpleEC-Open-LinesEC-Backward-Search-SimpleEC-Page-BackwardEC-Grab-From-StackEC-Exchange-Local-MarkSC-SwitchTo-Next-Sequential-BufferEC-Kill-Char-BackEC-Set-LocalMarkDC-Reposit-TopEC-Goto-First-Buffer-LineEC-Goto-Last-Buffer-LineEC-Kill-Word-BackEC-Capitalize-WordEC-Kill-Word-ForwCI-Keyboard-Macro-ExecuteEC-Uppercase-RegionEC-Kill-RegionEC-PickUp-RegionCI-Quote-OneEC-Kill-Lines-CountEC-Kill-EOL-EmacsEC-Set-Word-ModeEC-Unset-Word-ModeSC-Discard-BufferDC-RedrawEC-Lower-Case-WordEC-Uppercase-WordEC-Transpose-CharactersUI-Buffer-Selection-MenuEC-ExitEC-Find-FileDC-Scroll-DownDC-Scroll-UpEC-Lower-Case-RegionSC-ReName-BufferEC-DeblankEC-Read-FileEC-Save-FileEC-Write-FileDC-Shrink-WindowUI-Give-StatisticsDC-Discard-Other-WindowDC-Split-WindowCI-Keyboard-Macro-StartCI-Keyboard-Macro-EndSC-Goto-Next-WindowSC-Goto-Previous-WindowDC-Enlarge-WindowME.SYMME.COMmaptable.zme!c *B<"~B*~B|*B!e !m*!*<@*">@*>@D4*<@!s !"@?*@?Dt*~B!O!.Bt!.B7+"4@*4@.B^! Ž*4@.B^! ʣ!*4@+"4@#.Bsh!3B"?!"4@ú*4@#"4@+*4@ B?^#V~*4@ B?^#V*?ͥ6*4@ D?L òò*:?*?ͥ6 !$BL :*>?*?ͥ6;!,BL :*8?*?ͥ6V!&BL :*@q. P*B P!9~#fo#s#r*B JM#!9^#V!*@@!!!>͚!9s#r!9^#V!yʶ!9^#V!Yʶ!!m*Read %d Mapping Entries Succeeded in Mapping %d of them Shall we update the .COM file? So long, then! !!9s#rE!9~#fo#s#r!9^#V! J?^#V!1!9^#V! J?^#V*B6!!9s#rÞ!9~#fo#s#r!9^#V*2@D!9^#V))*0@^#V!*B!9^#V))*0@s#r!9^#V! D?^#V!9^#V))*0@##s#r*@@#"@@!9^#V! F?^#V!e!!9s#rN!9~#fo#s#r!9^#V)))J@^#V!W!9^#V)))J@^#V*B?!!9s#rã!9~#fo#s#r!9^#V*B@D:!9^#V))*(B^#V!”*B!9^#V))*(Bs#r!9^#V)))H@^!9^#V))*(B##s!9^#V)))I@^!9^#V))*(B###s*@@#"@@!9^#V)))D@^#V!*B!Built-in table full, cannot map %s Overlay table full, cannot map %s UECS function number %d is unknown to me. !!9s#r!9~#fo#s#r!9^#V! J?^#V!ʀ!!9s#r3!9~#fo#s#r!9^#V*2@D}!9^#V))*0@^#V*B$!!9^#V))*0@s#r*@@#"@@!!9s#rÝ!9~#fo#s#r!9^#V)))J@^#V!"!!9s#r!9~#fo#s#r!9^#V*B@D!9^#V))*(B^#V*B!!9^#V))*(Bs#r*@@#"@@Î*B!0Key %04x was not mapped! ! 9^#V###͋#"*t;|‚!p;"t;"p;!"r;nfDMÙ`i`i^#VBK! ^#V*p! ^#V* `i^#Vsr*`i##~#fos#r! ^#V))PYDM*! s#r"t;!!9^#V`i͉6`i`i*t; 8<DM|8!Í*))͕DM Z!`i*utx*t;! 9^#V!DM*t;Ünf`iʹnf`i~nfp`inf`i~Ónf! ^#V))PY 3nf##^#V`i##~#fos#rnf^#V`is#r?nf`is#rnf))PY z! ^#V##~#fos#r`i^#VsrÂ`iut"t;!͘#|+!9^#V*v;ں*x;9}|ں*v;"v;|ɯ=go!9~#f/o|/g#"x;*c(ͳͳ*|;DM*~;o&ͳ o&ͳ*|;*+++*~;DM*;!9N#F#^#Vkb6#> 6 #=4>6#== : >p Aڪ[a@maڪ{Ҫ`w# .ʋʤsͱw#t{o|g ʤͱw#•!!|a{ |g}o|/g}/o^#V#DM!99`i|z2{;o:{;}͈}}|#!}#|!}|<}|?>o&zo&|V}|>o&|o&z2{;o:{;||z/g}/o#z/W{/_ÈDM!>2z;))қ#}o|gҳ :z;=2z;“}:z;=2z;“}DM!>)) =}}/o|/g#}|#|g}o{_||7g}o{_)}}o|gN#F# N#F#z?{C##^#VBK^#Vzi#yc###Q#x^#~#fo}|>?o&}|>o&{_|g}o“|g}o~# x¨!9|;~#!|7!>";!9!9^#V!% "! 9^#V";!9!9^#V!% "*;!9^#Vd!>DM`i~j`i DM.?pg!F!9^#V#^!+ !9^#V^b|ʜ!ß!!9^#V*! s! !u|!!!9^#V*! s! !u| !!!9^#V*! s! 6!!7 8! ^4!9u!"&@!IrwaX!! s!! s#r!`is#r! s#r! s#r`i! 9^#VBK!>͚ `i#DM+sñ!`is `i! 9~#fo !! 9^#V! 9^#V!9~#fo+s#r!Ej!9^#V͚DMj`i#+s`i j !u`i ʑ! 9~#fo ʑ!! 9^#V! 9N#Fͺ`i~#fo+s#r!æI ! 9N#F`i~!>`i#DM+^d !!>! d! 9N#F`i~`!9^#V`i#DM+^d ]!2!! 9N#F!9^#V!PYͺDM`i ʧ! < ʧ!<! 9^#VDM ! 9^#V !PY! 9N#F! ^#V`i^#Vpʼ! ^!ͺ,!!`in&ͺs`i~#R͹ ! ^#V! ^#V! ^q.*ʤ|‹!Î!`in&s!! ^#V`is#r! s#r`i~#fo#s#r+^!ͺ!>!9^#V<! 9N#F!9^#V<D!!9^#V`i͋<D9!`i!9N#F! ^#V`i^#Vpq! 9^#V!ͺr! 9^#V`i~#fo#s#r+s!ͺ!!9^#Vr!>DM`i.?~`i DMò!9N#F!!9s#r`i~`! ^!ͺ!r!9s#r! ^b,!9~#fos#r! ^!ͺ`*6?! ^#Vs#r! ^#V"6?!! s!9^#V! 9N#F! ^!ͺ! ^#V`i^#V! ^#V! ^ͭ1 !`in&s!!9^#V!  !`in&ͺs!`is#r! s#r!`i~#& ͹ ! ^#V! _ !!9! ^ͭ1 !9^#V! ^#V`is#r! ^#V! ^#V! s#r!`in&s!9^#V`i~#fo#s#r+s!ͺ!9N#F! ^#V!  `i! s#r*6?|!*6?!9s#r*6?^#V"6?+!! ^#VO!!9s#rz+!!! s#r !`in&s!9^#V! s#r*;|j!!͉";";*;DM! 9^#V*;";PY~ʏ!`i";!*;*;!*;*;ͺ! 9s#r͉ʆ!! 9^#V*;";`i! 9^#V";!9!9^#V!" "!*;s! 9^#V*;#";+s!ͺ!N9N#F!P9^#V#+^z2'% ''!!9s!!D9s#r! !B9s#r!!@9s#rn&- ʩ"!!D9s#r#+^0 "!0!B9s#r!!>9s#r#+^!0)#9*#!>9^#V! !>9s#r". j#!!@9s#r#+^!0)j#9*j#!@9^#V! !@9s#r&#l ʪ##+^!:9!T9~#fos#r77I$d #!:9!T9~#fo##s#r++^#VS;7I$e $f $g &$!9!T9~#fos#rn;n;I$!:9!T9~#fo##s#r++^#VE;7%!9!!>97 8͕'!9!49s#r&!:977;$!9! !>97D8 83'!9!49s#r!-!69~#fo+s#rs$!9! !>97 83'!9!49s#r&!9! !>97 8͕'!9!49s#r&!9!!>97 8͕'!9!49s#r&!:97f;!49s#r7!89s#r2&e n%!q%!!B9^#V! ʈ%!Ð%!B9^#V!9! 9n;n;n;!9! 9!49s#r7!89s#r!!@9s#r2&!:97f;!9!69s#rs&IoO$du$u$x%s:%e\%f\%c%%!9!49~#fo!89s#r!89^#V!@9~#foEU&!@9^#V!89s#r!D9~#ʐ&!>9~#fo+s#r#!89~#foEʐ&!B9^#V`i_&!!69s#rí&!69~#fo#s#r!49^#V~&!69^#V!@9~#foD&!49~#fo#s#r+^`iÞ&!D9~#$'!>9~#fo+s#r#!89~#foE$'! `i&/'`i6"!9N#F!9^#V`iS; 8!97!89f;;^+s! 9`iS;587͏97T8I'!9N#F!9^#V! 977;K(! 97f;ͺ! 9!977F9787`iS; 8!97!89f;);^+s! 9`iS;587͏97!97 83'!9!!!;i6!:o&ͺ;s!H*";!;DM!"W<*W<D5*`i^! (`i^! (`i#DMî(`i^z5*`i^!> (!)`i^!< )!`i#DM^! &)`i^! )))`i`i#DM~f)`i^! T)`i^! c)!`i#DM+sf).)b,|ʅ)!*Ó)!* )!I*!6!I7!k*!I7!7!!ͭ1! m*2*`i*W<#"W<+);s#r`i#DM~2*`i^!  *`i^! /*!`i#DM+s2*)á(!;*W<m*Can't open file for redirection: ͨ! 9~#ʇ*!*C6A:$$$.SUB!"&@!!con:CON:lst:LST:prn:PRN:pun:PUN:rdr:RDR:!9^#V!!9^#V*!?!!9s#r1+!9~#fo#s#r!9^#V! DS+nf* ]++!"&@!!?DMm+`iDM`i~#ʎ+!9^#V`i^#Vͥ6ʎ+e+! ^#V!9^#V!ͺ#!9s#r!9^#V!ͺ+n&u|+!"&@!!9^#V!ͺ+n&u|+!"&@!! ^#Vsrn&un&u!h.ut!9^#V!9^#V!9^#Vnf! 9!DY,!!9^#V! 9^#V!D‡,! 9^#V! Eʑ,!"&@!! 9^#V)))?DM! ^#V! ^#V! 9s#r!! s! s! s`is!*! s#r! 9^#V!Y:=o&DM!9~#foE%1!9^#VBK*>=!9^#Vi6`i*>">`i:=o&}2=`i!9N#F!v1#!9~#foDʩ1! 9^#V`i#DM+s! ©1o1! 9^#V!D1! 9^#V! E1!"&@!! 9^#V)))?DM!9^#V!9^#V! ^#V! ^)>^#V!DM!9^#V$~}2n$&!DM!9~#foe2!9^#VBK!9^#V43}2!!9^#V`i͋!9s#rz2!9^#V!9^#V`i5!9s#rz2!9^#V!9~#foPY!9^#V!PYDM`i!9~#fo~+3!9^#V`i!9^#V`i43+3`i!9^#V! 9N#F!!!!"&@ o3*&@ ʊ3!"&@!!!͉6Ö3*&@|ʖ3!!9^#V!9^#V!$ ^!i6!""&@|3!!$ ^!9~#foͺ!$ sz4`i!~#fo#s#r!!9N#F! 4#!9~#foD{4`i#DM+^!9s#r!9^#V! c4! !9^#V!9^#V!9^#V4! 9^#V!D»4! 9^#V! E»4! 9^#V)))?^z4!"&@7! 9^#V)))?^#VBK!9^#Vj5!  5!"&@7!#!!$ s!9!! ^#VE;79 8!$ ^S;!8͟8587͟87}5!"&@7I45Y5\5!!# s!977;ʸ5!!! s#r!$ s!"&@7!97f;ͺ!$ s!977F9f;!! s#r!97ͳ!5ͳ"*~;!"~;*|;86*|;!4*6#4*;+";}6o&"&@*;!9!29^#V!!9!! 9F+N+V+^+~+ngxʇ6w# z6!9^#V#N#F#nxʣ6s# Ø6!9^#V#~#fox666# õ6!6!}!}!9^#V#~#fox7~7# 6!9~#fo7#7}!9^#V#^#V#N#Fõ6!9^#V#^#V#N#F6!9^#V#~#fox7~j7# [76!9^#V#^#V#N#F[7!9^#V#n~ʝ7ʣ7#Ð7!|!9^#V#nʿ7#ö7xʝ7 +~¿7ã7!*4?7!*2?w#w#w#w*2?~#~#~#~">*2?V+^+V+^*>">*4?s#r#s#r*>*4?*2?"4?"2?*2?>w#J8*2?~;#Y8 ;=ɯ<*2?*4?###8j8Ì8f8f8j8+Ž8*2?*4?#ª8*2?*4?#8*2?*4?#8*2?*4?#8*2?*4?#8*2?~/w#9*4?~?G*2?^#V#~#fo))49#,9DM*2?s#r#q#p*4?~?W*2?###~k9~w+]9Y97~w+o9k9~#€9OG8*2?>}9y2>*4?>}9:>2>9>*2?w#¸9:>D8*2?>}9y2>*4?>}99>*2?w#9:>D8!>w#:> 2>!>~w#:O>!>#(:yC:!>4!>5 :!>5u:!>~w#P:O>!>#c:yC:7:>!>#~:*4?>~#‘:*2?>~#¡:!>w#¯:> 2>!>~w#::>!>#:::!>5º:*2?>w#:n8;!n8 ;!> &- =FPT] Qluh.h.***********h.*?*?*t?*t?*t?*t?*t?*t?*z?*z?*@,;     ( O R *]%>)L[f w,.g -?gG )b;C`Nf`$z q/+Ww !4F ^wk o @ CbS   H=%1:=2IM("e)#{jk;ansimoveansitermtermctrlNKEYTAB_keytab_NOVERTABovertab_ctrlg_CI-Abort-CancelbackcharEC-Arrow-LeftforwcharEC-Arrow-Rightlinsert_EC-Self_InsertEC-Goto-Beginning-Of-LineEC-Word-BackEC-Goto-Next-PageEC-Kill-Char-ForwEC-Goto-End-Of-LineEC-Word-ForwEC-TABEC-Arrow-DownEC-Arrow-UpEC-CR-With-IndentEC-Forward-Search-SimpleEC-Open-LinesEC-Backward-Search-SimpleEC-Page-BackwardEC-Grab-From-StackEC-Exchange-Local-MarkSC-SwitchTo-Next-Sequential-BufferEC-Kill-Char-BackEC-Set-LocalMarkDC-Reposit-TopEC-Goto-First-Buffer-LineEC-Goto-Last-Buffer-LineEC-Kill-Word-BackEC-Capitalize-WordEC-Kill-Word-ForwCI-Keyboard-Macro-ExecuteEC-Uppercase-RegionEC-Kill-RegionEC-PickUp-RegionCI-Quote-OneEC-Kill-Lines-CountEC-Kill-EOL-EmacsEC-Set-Word-ModeEC-Unset-Word-ModeSC-Discard-BufferDC-RedrawEC-Lower-Case-WordEC-Uppercase-WordEC-Transpose-CharactersUI-Buffer-Selection-MenuEC-ExitEC-Find-FileDC-Scroll-DownDC-Scroll-UpEC-Lower-Case-RegionSC-ReName-BufferEC-DeblankEC-Read-FileEC-Save-FileEC-Write-FileDC-Shrink-WindowUI-Give-StatisticsDC-Discard-Other-WindowDC-Split-WindowCI-Keyboard-Macro-StartCI-Keyboard-Macro-EndSC-Goto-Next-WindowSC-Goto-Previous-WindowDC-Enlarge-WindowME.SYMME.COMmaptable.zme! *H>"H*H|"*H!! !o0!*fF1"hF*hFFO*fF!/ !"jE*jE F*H!O!ZH!!ZH=+"^F*^FZH^! ©*^FZH^! ʾ!*^F+"^F#ZHsÃ!_H"E!"^F*^F#"^F+*^F lE^#V~ *^F lE^#V*Eͧ<*^F nEB *@E*Eͧ<;!VHB U*DE*EͧE*Eͧ*F!b *PHͿ !!jF*Es4l!p *jF))L"NH|“*jF!! *XHͿ *jF))*jF))*NH*Es4! *LHͿ !!\F*Es4! *\F))L"ZF| *\F!! *RHͿ !!FE*Es4J ! *THͿ !!JE*Es4x !5 *VHͿ *\F))*\F))*ZF*Es4ʬ !U  D*RHͿ !!FE*Eͯ7 !{ *THͿ !!JE*Eͯ7 ! *Ed2!o0r%s not found %s not found only %d out of %d names found in %s %s not found read myNOVERTAB fails failed: pMyOvertab = malloc( %d * %d ) failed: read overlay dispatch table read myNKEYTAB fails failed: pMyKeytab = malloc( %d * %d ) failed: read "ansiterm" variable failed: read "termctrl" table failed: read builtin dispatch table failed: write "ansiterm" variable failed: write "termctrl" table !bF!9^#V!UA=!!bF= >*É:!9UA=A ! 9^#V! !o0lseek failure %x 0123456789ABCDEF!!9^#Vs#r!!9s#rt !9~#fo#s#r!9^#V!F !!9^#V~#fos#r!!9s#rü !9~#fo#s#r!9^#V!F *`F!9~#fo^!9^#V!ZH^  !9^#V!9^#V~#fos#r í e *jE#"jE!!9s#rA !9~#fo#s#r!9^#V!FW!!9s#rn !9~#fo#s#r!9^#V*\FFʱ !9^#V! nE^#V!9^#V))*ZF##^#V T_ !9^#V! tE^#V!`!9^#V! pE^#V!}!9^#V! lE^#V!!9^#V))*ZF##^#V!!9^#V! nE^#V*H!!o02 !No match for UECS number %d UECS Name: %s Function Name: %s Core Address: %x Address From %s: %x Version Information Verified !!9s#r!D͜!!9s#r! ;!9^#V!y -!9^#V!Y 8!!9s#r!9^#V!!9s#r*FE!*FE|o!r!!!ʞ*FE"FE!!9s#r:JEo&!!G!!9s#r!9~#fo#s#r:JEo&!9^#V,!9^#V!JE^!S!Y)!JE͵!9~#fos#r:TEo&!r!!!9s#r^!9~#fo#s#r:TEo&!9^#V,ʎ!9^#V!TE^!O!ʴ!TE͵!9~#fos#r:^Eo&!!#!!9s#r!9~#fo#s#r:^Eo&!9^#V,!9^#V!^E^!/!5?!^E͵!9~#fos#r!N!!9~#q*F!!9s#r!9~#‹!!o0The "ansiterm" variable is set to %d This means that your terminal %s an ANSI terminal. ISis NOTShall we change this? The control sequence for cursor motion is %d characters long, and it is: %02x Shall we change this? The control sequence for ClearToEndOfLine is %d characters long, and it is: %02x Shall we change this? The control sequence for ClearWholeScreen is %d characters long, and it is: %02x Shall we change this? In case you need to patch it, the address of ansimove() is %04x Shall we patch %s? So long, then! !9^#V!9s#r!z!9s#r!9^#V!0F!9^#V!9G"!!D͜!!9s#r!D͜!  !0!9~#fo s#r!9~#F!!9^#V!9~#fo#s#r+s!!!!<!\!9~#fo+s#r!+!D͜!! 9s#r!D͜!! 9s#r!D͜!!9s#r! 9^#V!a+! 9^#V!f,! 9^#V!! 9s#rä! 9^#V!A+5! 9^#V!F,5! 9^#V!! 9s#rä! 9^#V!0+n! 9^#V!9,n!0! 9~#fo s#rä! 9^#V!!9^#V!9s#r!D͜! ʡÍ! 9^#V!a+! 9^#V!f,! 9^#V!! 9s#rZ! 9^#V!A+! 9^#V!F,! 9^#V!! 9s#rZ! 9^#V!0+I! 9^#V!9,I!0! 9~#fo s#rZ! 9^#V! 9s#rn!9^#V! ʉ! !9s#r!D͜! ʉu!9^#V! !9^#V! !9^#V!9s#r!D͜! ÷!! 9^#V!ͼ!9^#V!ͼ))))!9s#r!9^#V!9~#fo#s#r+sÁ!9^#V! Z!9^#V!9s#r!D͜! O;!!9^#V!9s#r!9~#fo#s#r+^!9s#r!-!9~#fo+s#r!+!9~#fo#s#r+^!>Ë!D!Enter the length, 1 to 9 ( 0 for no change ): Enter the sequence in hex, 0 to 9, A to F or a to f, TWO hex digits and then either hit space or RETURN, ( RETURN after the last one ) Bad hex digit %c I told you to put a space or to hit RETURN between each pair of hex digits! I told you to hit RETURN after the last pair of hex digits! What I got was: %02x Okay? ! 9^#V###͍#"*vA|„!rA"vA"rA!"tAnfDMÛ`i`i^#VBK! ^#V*r ! ^#V* `i^#Vsr*`i##~#fo s#r! ^#V))PYDM*! s#r"vA!!9^#V`i͋<`i`i*vA :>DM|:!Ï*))͗DM \!`i*utz*vA! 9^#V!DM*vAÞnf`íʻnf`ìnfr`ínf`ìÕnf! ^#V))PY 5nf##^#V`i##~#fos#rnf^#V`is#rAnf`is#rnf))PY |! ^#V##~#fos#r`i^#VsrÄ`iut"vA!͚#|+!9^#V*xAڼ*zA9}|ڼ*xA"xA|ɯ=go!9~#f/o|/g#"zA*e.͵͵*~ADM*Ao&͵ o&͵*~A*+++*ADM*A!9N#F#^#Vkb6#> 6 #=6>6#=? : >r Aڬ[c@oaڬ{Ҭ`w# .ʍʦuͳw#v{o|g ʦͳw#—!!|a{ |g}o|/g}/o^#V#DM!99`i|z2}Aq:}A}͊}}|%!}%|!}|>}|?>o&zo&|X}|>o&|o&z2}Aq:}A|||/g}/o#z/W{/_ÊDM!>2|A))ҝ#}o|gҵ :|A=2|A•}:|A=2|A•}DM!>)) =}}/o|/g#}|%|g}o{_||7g}o{_)}}o|gN#F# N#F#zA{E##^#VBK^#Vzk#ye###S#x`#~#fo}|>?o&}|>o&{_|g}o•|g}o~# xª!9~A~#!|7!D"A!9!9^#V!'"(! 9^#V"A!9!9^#V!'"(*A!9^#Vf"!DDM`i~l`i DM0Eri!H!9^#V#^!+ !9^#V^d |ʞ!á!!9^#V1! s! !w |!!!9^#V1! s! !w | ! !!9^#V1! s! 8 !!= >! ^́:!9w !"PF!Krwa Z !! s!! s#r!`is#r! s#r! s#r`i! 9^#VBK!D͜!   `i#DM+só !`is  !`i! 9~#fo  !!! 9^#V! 9^#V!9~#fo+s#r!Gl!!9^#V͜!DMl!`i#+s`i l!"!!u`i ʓ!! 9~#fo ʓ!!! 9^#V! 9N#F"ͼ!`i~#fo+s#r!è!K! !!!! 9N#F`i~"!D`i#DM+^f" "!!!D! f"! 9N#F`i~b"!9^#V`i#DM+^f" _"!4"!! 9N#F!9^#V!PYͼDM`i ʩ"! >$ ʩ"!>$! 9^#V"DM "! 9^#V" "!PY! 9N#F! ^#V`i^#Vrʾ#! ^!ͼ.#!!`in&ͼs`i~#T#ͻ&! ^#V! ^#V! ^s4,ʦ#|#!Ð#!`in&s!! ^#V`is#r! s#r`i~#fo#s#r+^!ͼ!D!9^#V>$! 9N#F!9^#V>$F$!!9^#V`i͍>$F;$!`i!9N#F! ^#V`i^#Vrs$! 9^#V!ͼt%! 9^#V`i~#fo#s#r+s!ͼ!!9^#Vt%!DDM`i0È$`i DM$ô$!9N#F!!9s#r`i~b%! ^!ͼ%!t%!9s#r! ^d2!9~#fos#r! ^!ͼb%*9s#r#+^!0+)9,)!>9^#V! !>9s#r(. l)!!@9s#r#+^!0+l)9,l)!@9^#V! !@9s#r()l ʬ)#+^!:9!T9~#fos#r==K*d )!:9!T9~#fo##s#r++^#VUA=K*e *f *g (*!9!T9~#fos#rpApAK*!:9!T9~#fo##s#r++^#VGA=+!9!!>9= >͗-!9!49s#r,!:9==A*!9! !>9=F> >5-!9!49s#r!-!69~#fo+s#rs*!9! !>9= >5-!9!49s#r,!9! !>9= >͗-!9!49s#r,!9!!>9= >͗-!9!49s#r,!:9=hA!49s#r=!89s#r4,e p+!s+!!B9^#V! ʊ+!Ò+!B9^#V!9! 9pApApA!9! 9!49s#r=!89s#r!!@9s#r4,!:9=hA!9!69s#rs,KoQ*dw*u*x+s<+e^+f^+c++!9!49~#fo !89s#r!89^#V!@9~#foGW,!@9^#V!89s#r!D9~#ʒ,!>9~#fo+s#r#!89~#foGʒ,!B9^#V`ia,!!69s#rï,!69~#fo#s#r!49^#V~,!69^#V!@9~#foF,!49~#fo#s#r+^`ià,!D9~#&-!>9~#fo+s#r#!89~#foG&-! `i,1-`i8(!9N#F!9^#V`iUA >!9=#>?hAA^+s! 9`iUA7>=͑?=V>K-!9N#F!9^#V! 9==AM.! 9=hAͼ! 9!9==H?=>=`iUA >!9=#>?hA)A^+s! 9`iUA7>=͑?=!9= >5-!9!!!Ak .! /`i^!< /!`i#DM^! (/`i^! +/ /`i`i#DM~h/`i^! V/`i^! e/!`i#DM+sh/0/d2|ʇ/!0Õ/!1 /!K0!!$ ^UA#>͡>7>=͡>=;!"PF=K:;[;^;!!# s!9==Aʺ;!!! s#r!$ s!"PF=!9=hAͼ!$ s!9==H?hA!! s#r!9=͵!<͵"*A!"A*~A:<*~A!4,<#4*A+"A}w#L>*6E~A#[> A=ɯ<*6E*8E###>l>Î>h>h>l>+>*6E*8E#¬>*6E*8E#>*6E*8E#>*6E*8E#>*6E*8E#?*6E~/w#?*8E~?G*6E^#V#~#fo))6?#.?DM*6Es#r#q#p*8E~?W*6E###~m?~w+_?[?7~w+q?m?~#‚?OI>*6ED?y2D*8ED?:D2D?D*6Ew#º?:DF>*6ED?y2D*8ED??D*6Ew#?:DF>!Dw#@> 2D!D~w#@OD!D#*@yE@!D4!D5@!D5w@!D~w#R@OD!D#e@yE@9@D!D#€@*8ED~#“@*6ED~#£@!Dw#±@> 2D!D~w#@@D!D#@@@!D5¼@*6EDw#@p>A!p> A!

A Ap>AA Ap> AAp> A AA*6Es#r#6#6*6Es#r#zOA6#6*6E^#VH0123456789abcdef046\708::DD '/8= TAH XaPox Qj4j400000000000j40F0F0E0E0E0E0E0E0E0ETF21      ( O" R. *]@Y)g[ ,.g -?g+G DbVC`if{$ q/+W w  2<Oa yk o @ CbS   H-=@1:X2Ih(")#jk;#include "stdio.h" #include "ed.h" #define NROW 24 /* Screen size. */ #define NCOL 80 /* Edit if you want to. */ #define BEL 0x07 /* BEL character. */ #define ESC 0x1B /* ESC character. */ int ansiterm; char termctrl[3][10] = { 4, ESC, '=', ' ', ' ', 0,0,0,0,0, 2, ESC, 'T', 0,0, 0,0,0,0,0, 1, 26, 0,0,0, 0,0,0,0,0 }; ansimove(row, col) { register char * cp; register int i; cp = &termctrl[0][0]; i = *cp++; conout( *cp++ ); --i; conout( *cp++ ); --i; if ( ! ansiterm ) { conout( row + *cp++ ); ++i; conout( col + *cp++ ); ++i; } else { conout( ( row / 10 ) + *cp++ ); ++i; conout( ( row % 10 ) + *cp++ ); ++i; conout( *cp++ ); --i; conout( ( row / 10 ) + *cp++ ); ++i; conout( ( row % 10 ) + *cp++ ); ++i; } while ( --i >= 0 ) conout( *cp++ ); } ansiclear() { ctlout( 2 ); } ansieeol() { ctlout( 1 ); } ctlout( x ) { register char * cp; register int i; cp = &termctrl[x][0]; i = *cp++; while ( --i >= 0 ) conout( *cp++ ); } ansibeep() { conout( BEL ); } 1= Ttc!bDM`i#DM+^`i#DM+^u+`i#DM+^u+*a|d`i#DM+^!"c9~#fou#e!"cclass_ mansiterm termctrl ansimove.zsavve)conout_9.dvut_6.rmut_es.geut_ Sansicleaoctlout_ aansieeolf'.mleeol ansibeep #F.lnprmp     00Rnm'&r`35DF $MEMRY 35F5 .ARG1 35F7 .ARG2 35F9 .ARG3 3151 .an 334A .asave 288F .begin 3161 .chl 3159 .cm 3187 .dv 31A1 .eq 31AB .false 31C0 .ge 31DC .gt 32BE .jmp 31C1 .le 3632 .lnprm 32A5 .ls 31DB .lt 3259 .ml 333F .move 31B0 .ne 3271 .ng 327B .nt 3283 .or 31F5 .rm 328B .rs 32B5 .sb 3434 .stlp 32E0 .swt 346E .sylp 31BA .true 319A .ud 3308 .ue 3307 .uf 3316 .ug 3315 .ul 321F .um 3322 .ur 3337 .xr 3162 .zsav 363E Argbuf_ 36BE Argc_ 3636 Argv_ 28A7 CPM_ 35FB Cbuffs_ 050C Croot_ 36C2 NKEYTAB_ 36C4 NOVERTAB 36C0 Stdbufs_ 25FB ansibeep 2598 ansiclea 25A6 ansieeol 2445 ansimove 36D0 ansiterm 16A3 backchar 05D9 badfd_ 2364 bclear_ 28A7 bdos_ 289F bdoshl_ 30D6 bdoswr_ 22AA bfind_ 36CE bheadp_ 28BB bios_ 28C5 bioshl_ 36D2 blistp_ 3371 blkrd_ 3379 blkwr_ 33E8 blockmv_ 2896 boot__ 36D4 cclass_ 3754 chantab_ 3408 clear_ 2AB8 closall_ 078F close_ 0ACE conin_ 19FB conout_ 2202 cramline 19D6 crtbs_ 25B4 ctlout_ 0AFC ctrlg_ 36CC curbp_ 36CA curcol_ 37AC curgoal_ 37AE curov_ 36C8 currow_ 37B0 curwp_ 37B6 devtabl_ 37B4 errno_ 0B10 execute_ 05B1 exit_ 28E0 fcbinit_ 2AE3 fclose_ 2AA1 fflush_ 37B2 ffp_ 0954 filecl_ 37BC filedev_ 07F7 fileop_ 2CE1 filerd_ 2EEF filewr_ 36C6 fillcol_ 093A flfree_ 2B6A flush__ 1756 forwchar 2737 free_ 05E2 getbuff_ 2979 getc_ 0ADC getkey_ 2DF8 getsect_ 0A47 getstrok 3504 index_ 09DC inword_ 0980 isinsert 09AE islower_ 0AAF kbdmclos 37D6 kbdmf_ 37D8 kbdmstat 37DA kbufp_ 10E5 kdelete_ 37C6 keytab_ 1107 kinsert_ 37DE ksize_ 37DC kused_ 0C1A lalloc_ 37C4 lastflag 0C82 lchange_ 12FB ldelete_ 14F7 ldelnewl 0FCB lfree_ 0D23 linsert_ 117A lnewline 0103 main_ 2609 malloc_ 1817 mlerase_ 1AFC mlputi_ 1ACC mlputs_ 18B3 mlreply_ 1A12 mlwrite_ 1833 mlyesno_ 26FB morecore 1DF5 movecurs 37E0 mpresf_ 3908 myovbase 031A myovinit 0977 noper2_ 066B open_ 37F8 overtab_ 03C7 ovloader 3912 ovreq2_ 3910 ovreq_ 3916 ovsub2_ 3914 ovsub_ 37E4 pat_ 336F prctyp 3918 pscreen_ 2A56 putc_ 3006 putsect_ 2C73 read_ 3526 rindex_ 287E rsvstk_ 2854 sbrk_ 2848 settop_ 37E2 sgarbf_ 34C8 strcat_ 3424 strcmp_ 345D strcpy_ 3482 strlen_ 34ED strncat_ 349B strncmp_ 34B1 strncpy_ 391A tabsize_ 391C termctrl 37C2 thisflag 393E ttcol_ 393C ttrow_ 33C2 unlink_ 1E46 update_ 1C96 updateli 3944 vscreen_ 3942 vtcol_ 1C68 vteeol_ 1B79 vtmove_ 1B95 vtputc_ 3940 vtrow_ 393A wheadp_ 2E7F write_ 3946 wstyle_ ^@ gotobol M-Y killbuf, TVI "PAGE ERA" M-_ lowerword ^B wordback M-* setmark "SHIFT-CLEAR" M-~ twiddle ^C forwpage M-! reposition ^X^B listbuf ^D forwdel M-b del word back ^X^C Hard quit. ^E gotoeol M-c capword ^X^F visit file ^F forwword M-f delfword ^X^J scroll down window ^G ctrlg M-g gotobob gotoline ^X^K scroll up window ^H backchar M-G gotoeob ^X^L lowercase region ^I tab M-I exec kbmac BACKTAB ^X^N change name ^J forw M-j upperc reg "SHIFT up" ^X^O deblank ^K backline M-L killreg "SHIFT PRINT" ^X^R fileread ^L forwchar M-P copyregion "PRINT" ^X^S filesave ^M inde M-Q quote "CHAR INS" ^X^V scroll down window ^N fsearch M-R vi kill "LINE DEL" ^X^W write file ^O openline M-T kill "LINE ERA" ^X^Z shrink current window ^P bsearch M-w word mode ^X= show cursor stats ^R backpage M-W Word mode ^X1 one window ^X2 split win ^U parameter M-Y killbuf "PAGE ERA" ^\ negative param ^V TVI DOWN ARR M-\ refresh ^Xb use buffer ^X prefix M-_ lowerword ^X( startmacro ^X) endmacro ^Y yank M-^ upperword ^Xz grow window ^Z swapmark"CLEAR" ^^ next buf "HOME" ^Xn nextwind ^Xp prevwind ^[ META prefix ^? backdel M-\ refresh # EMACS_MODES: tabstop=8 lnumb=0 lnowid=20 # EC edit command DC display control SC session control # UI extended user interface SI system interface CI command input # EE electric edit MAC macro PAD scratchpad # MODE changeable modes INFO read-only modes Block block 11 CI-Abort-Cancel 34 CI-Keyboard-Macro-Begin 35 CI-Keyboard-Macro-End 36 CI-Keyboard-Macro-Execute 58 DC-Discard-Other-Window 59 DC-Enlarge-Window 63 DC-Reposit-Top 64 DC-Scroll-Down 67 DC-Scroll-Up 72 DC-Shrink-Window 73 DC-Split-Window 79 EC-Arrow-Down 80 EC-Arrow-Left 81 EC-Arrow-Right 82 EC-Arrow-Up 91 EC-Back-Search-Simple 93 EC-CR-With-Indent 95 EC-Capitalize-Region 96 EC-Capitalize-Word 98 EC-Deblank 103 EC-Exchange-Local-Mark 106 EC-Execute-File 107 EC-Exit 111 EC-Find-File 129 EC-Forward-Search-Simple 142 EC-Goto-Beginning-Of-Line 144 EC-Goto-End-of-Line 145 EC-Goto-First-Buffer-Line 150 EC-Goto-Last-Buffer-Line 161 EC-Goto-Next-Page 166 EC-Goto-Next-Window 180 EC-Goto-Previous-Page 186 EC-Goto-Previous-Window 192 EC-GrabFrom-Stack 204 EC-Kill-Lines-Count 208 EC-Kill-Region 209 EC-Kill-to-EOL-emacs 211 EC-Kill-Char-Back 212 EC-Kill-Char-Forw 213 EC-Kill-Word-Back 214 EC-Kill-Word-Forw 219 EC-Lower-Case-Region 220 EC-Lower-Case-Word 221 EC-Match-Fence 224 EC-Open-Lines 229 EC-PickUp-Region 235 EC-Quote-One 236 EC-Read-File 238 EC-Redraw 240 EC-Rename-Buffer 244 EC-Save-File 245 EC-Self-Insert 255 EC-Set-Local-Mark 258 EC-Set-Word-Mode 263 EC-TAB 265 EC-Transpose-Chars 268 EC-Unset-Word-Mode 276 EC-Upper-Case-Region 277 EC-Upper-Case-Word 282 EC-Word-Back 283 EC-Word-Forw 286 EC-Write-File 487 SC-Discard-Buffer 494 SC-SwitchTo-Buffer 495 SC-SwitchTo-Next-Sequential-Buffer 528 UI-Buffer-Selection-Menu 543 UI-Give-Statistics 999 Undefined-Function H9d d p.ovbgn(5$MEMRY(5.ARG1(5.ARG2(5.ARG3(Q1.an3(J3.asave((.begin(a1.chln(Y1.cmn(1.dvn(1.eqn(1.false(1.gese(1.gtse(2.jmpe(1.lee(26.lnprm(2.lsrm(1.ltrm(Y2.mlrm(?3.move(1.nee(q2.nge({2.nte(2.ore(1.rme(2.rse(2.sbe(44.stlp(2.swt(n4.sylp(1.true(1.ude(3.uee(3.ufe(3.uge(3.ule(2.ume("3.ure(73.xre(b1.zsav(>6Argbuf_(6Argc__(66Argv__((CPM__(5Cbuffs_( Croot_(6NKEYTAB_(6NOVERTAB(6Stdbufs_(%ansibeep(%ansiclea(%ansieeol(E$ansimove(6ansiterm(backchar(badfd_r(d#bclear_((bdos__((bdoshl_(0bdoswr_("bfind_(6bheadp_((bios__((bioshl_(6blistp_(q3blkrd_(y3blkwr_(3blockmv_((boot___(6cclass_(T7chantab_(4clear__(*closall_(close__( conin__(conout_("cramline(crtbs_e(%ctlout_( ctrlg_(6curbp_(6curcol_(7curgoal_(7curov__(6currow_(7curwp_(7devtabl_(7errno__( execute_(exit_e_((fcbinit_(*fclose_(*fflush_(7ffp_h_(T filecl_(7filedev_(fileop_(,filerd_(.filewr_(6fillcol_(: flfree_(j+flush__(Vforwchar(7'free_ar(getbuff_(y)getc_f_( getkey_(-getsect_(G getstrok(5index_k( inword_( isinsert( islower_( kbdmclos(7kbdmf_s(7kbdmstat(7kbufp_t(kdelete_(7keytab_(kinsert_(7ksize__(7kused__( lalloc_(7lastflag( lchange_(ldelete_(ldelnewl(lfree_l(# linsert_(zlnewline(main_ne( &malloc_(mlerase_(mlputi_(mlputs_(mlreply_(mlwrite_(3mlyesno_(&morecore(movecurs(7mpresf_(9myovbase(myovinit(w noper2_(kopen__(7overtab_(ovloader(9ovreq2_(9ovreq_(9ovsub2_(9ovsub_(7pat__(o3prctyp(9pscreen_(V*putc_n_(0putsect_(s,read_t_(&5rindex_(~(rsvstk_(T(sbrk__(H(settop_(7sgarbf_(4strcat_($4strcmp_(]4strcpy_(4strlen_(4strncat_(4strncmp_(4strncpy_(9tabsize_(9termctrl(7thisflag(>9ttcol_g(<9ttrow_g(3unlink_(Fupdate_(updateli(D9vscreen_(B9vtcol__(hvteeol_(yvtmove_(vtputc_(@9vtrow_(:9wheadp_(.write_(F9wstyle_