Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!watmath!clyde!cbatt!ucbvax!ULKYVX.BITNET!RDROYA01 From: RDROYA01@ULKYVX.BITNET.UUCP Newsgroups: comp.sys.atari.st Subject: Uemail source (1 of 12) Message-ID: <8702040855.AA11056@ucbvax.Berkeley.EDU> Date: Tue, 3-Feb-87 23:59:00 EST Article-I.D.: ucbvax.8702040855.AA11056 Posted: Tue Feb 3 23:59:00 1987 Date-Received: Thu, 5-Feb-87 03:21:31 EST Sender: daemon@ucbvax.BERKELEY.EDU Organization: University of Louisville Lines: 660 # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # readme.mss # uemail.mss # This archive created: Tue Feb 3 19:13:50 1987 cat << \SHAR_EOF > readme.mss The following 11 files are the source code to uemail ST. I have had a number of requests for this source and decided to post it to the atari group all at once. I decided not to post it to net sources because the program has been made so ST specific that I doubt it would have much appeal for the mainframe crowd. This editor is based on the original D. G. Conroy version that I believe was written about 1978. That version was 27. This program was ported to the ST from a CP/M-68K version I made a year ago. The original has not been around for some years. One of my instructors found the source for me on an old disk he had in his office. All this is a round-about way of saying that the ancestry of this version is very different from that of most of the current microemaxen. I have tried to add some GNU type commands and to make a few of the standard commands work the way they do with Vax GNU, but this is not microGNU. It does have an aliasing feature and a command interface. I use it as a shell, and never see the desktop after startup. I can even connect to remote systems via the kermit section (which will be improved once my ordered copy of the kermit protocol manual arrives). I hope people find this code as educational as I have, and I would like to thank Mr. Conroy for writing such interesting and useful C. For better or worse I taught myself that language with his program as guide. Of course there are others whose code appears in this program. Most of them I do not know, or know only through the NET. Notable are Richard Stallman whose GNU makes teaching writing on the computer much saner than it was before, and Jwahar R. Bammi @ Case whose ST code has always been solid. SHAR_EOF cat << \SHAR_EOF > uemail.mss Uemail Uemail is an emacs-like full-screen editor for the Atari-ST computer equipped with a color or monochrome monitor. It supports all of the major commands offered by microEmacs version 30, plus some extensions that make its interface closer to that used by GNU_EMACS. Although smaller than 1ST_WORD and many GEM-based programs, uemail is a large program by TOS standards. It was ported from a two megabyte 68K system and scaled down to fit in the small memory of a 1040ST. It requires more than 128K to load. To support shell commands, it returns 256K to the operating system at startup. On the 68K system the shell command required only 12K of code and 128K of operating space and did not require loading a command processor to get at the operating system. But since the ST has no command control processor, you must load a shell program such as COMMAND.PRG or PCOMMAND.PRG to get at the file system. You may run any TOS based program from within the editor, but programs that require a GEM interface will crash the system. You will have to exit the editor entirely to run GEM programs as there is just not enough extra memory to run GEM programs. Running uemail from within a shell program diminishes the available text buffer space. The return TPA command (ESC-@) reports the amount of space used and the amount available. Long source code files (900 or more lines) are the biggest memory eaters. If uemail runs directly from the desktop, buffer space is rarely a problem even with a 360K ramdisk loaded, but running this program and trying to edit large files on a 520ST may be a problem if ramdisks or numerous desk accessories are in memory. Files consume approximately one and one-half times their physical size. Text files consume a little less, and because program code often has a number of blank lines for which space must be allocated, it consumes somewhat more memory in relation to its size. The main reason for the size of the program is the added kermit utility not usually found in a text editor, and the aliasing system for loading text files and shell programs. The disadvantage of tying these functions into the program and using up memory space is outwayed by the advantage gained by integration. The ability to transfer text directly into and out of an editor buffer saves time and programming effort. The integrated program also gives the programmer a relatively easy way to implement individual protocol schemes to communicate with remote systems since all of the readaux and sendaux functions are already defined. If the kermit section and the terminal section were to be separate from the editor, then loading those free standing programs into memory would require a larger shell space as each of those programs would be linked to its own copy of the run-time library. Finally, the additional features make the editor more of an all-purpose tool, the type of program that can be loaded and serve as a simple shell from which to carry out most tasks on the computer. Uemail is designed to work in tandem with GNU_EMACS on a remote computer. When the program is connected to the serial line, all of the function keys and the number pad keys send the same commands as they do from within uemail, and the defined keyboard macros (macros triggered by the accent grave key) are also sent across the line. This allows you to set up special function key definition files and macro definition files to use with a remote emacs. Macro files can be loaded into memory from within an editor buffer or while online using the terminal section. In addition to the direct connect terminal section, uemail has a connect mode which supports kermit protocol for 7-bit transfers between two computers. This ability allows the editor to work with text from a remote system and to transfer it back to that system when done. For remotes that do not support the kermit protocol there are log and transfer commands which use the ST's flow control (settable from within the terminal mode) to transfer text without dropping characters (provided that the remote supports one of the ST's handshaking protocols). Because the modem I have does not support RTS/CTS, I have not been able to determine if it works as well with an RTS/CTS protocol as it does with XON/XOFF. Uemail sets the baud rate while in connect mode. At the beginning of the connect session, the baud rate defaults to 1200 bps, but it can be reset to 300, 2400, 9600, or 19200 bps. When uemail exits from terminal mode, it saves the terminal screen. When it returns to terminal mode, it rewrites that screen placing the cursor at its previous position. You cannot set parity or stop bits from within the terminal section, if anyone finds this to be a problem, let me know, and I'll figure a way to get around it. However, you can always run a TOS-based modem program from within uemail that can set the additional parameters. The sample alias file shows how to define an xmodem program that will run when the CTRL-C command is given `xmodem' for a program name. Macro commands are a quick way to automate repetitive tasks, and they also may be used to send strings, such as dial commands or logon scripts, to a modem. The limitations of the execute macro command (CTLX-E) in many microemaxen are only one macro may be defined at a time, defining a new macro kills the old one, macros cannot be saved across editing sessions, and macros cannot be loaded from a disk file. Uemail overcomes these limitations while retaining the "flavor" of the original define and execute macro command. Any macro defined by the define macro command (CTLX-() may be assigned to a key on the keyboard using the getmacro command (CTLX-`) which will prompt for the key to bind. The current keyboard macro is copied into a safe place in memory, and a pointer to it is stored in a macro table (a dynamically allocated structure). From then on typing the accent grave (`) key followed by the key that you assigned to that macro will cause the appropriate macro to execute. Macros can then be saved to disk, using the `-CTRL-M command, for later loading, using the `-CTRL-L command. When the editor starts up, it attempts to load the file UEMAIL.MCR default macro file from the default drive and path. The off-line program EXTMAC reads a macro file and writes a C-code equivalent of each function to a file. This external program, which can be run using the shell command, replaces the old C-Mac buffer scheme in previous versions and, unlike the earlier built-in function, will create C-code for any defined macro. Macro files may also be loaded from the terminal mode using the ALT-L command. Macros are used in the terminal mode the same way as they are in an editor buffer (by typing a ` followed by the appropriate character). Macros are of two basic types: character strings and command strings. Character strings are words that have been typed to the screen while defining a macro. For example from within a buffer you can type the begin macro command, type "ATDT5551234," followed by the end macro command (CTLX-)), and the getmacro command (CTLX-`), binding this string to `5. Then from the terminal section you can type `5 to send the string to your modem. Command strings are macros which would normally cause uemail to execute a series of commands (such as CTRL-A CTRL-O to go to the beginning of the line and open a blank line above it). Command strings make the most sense when uemail is serving as a terminal connection to a remote Emacs editor, allowing you to define a set of macros that behave the same way in both editors. As of version 33 of uemail ST, the cc command is an off-line program which runs in the space uemail returns to the operating system. The sample start-up file (cc.ini) shows how to define an alias for CC.PRG which makes the new interface transparent. The CC.PRG will also run by itself to drive the Alcyon compiler. It accepts wildcards or multiple files on the command line, can compiler or simply assemble a file. (It goes directly to the assembler for any file with an `.S' file type.) It will link a group of files if the cc.ini file has the `dolink=1' command in it. It will compile the files first if you supply a command line. With no command line and the dolink option on, the program will skip compilation and go directly to the linker. It envokes the linker by passing it a command file whose first name is that defined in the cc.ini file as the `linkfile.' If the linker is successful, the program will attempt to relmod the resulting linker output. To make all of this work properly you must define the parts of your cc.ini program correctly. the source directory is where the compiler, assembler, and relmod expect to find their input files. The temp directory is where the assembler places its output. The program expects the linkfile to be on the source directory and assumes that the linkfile contains a complete link68 script. It also assumes that the linker output file will have the same filename as the linkfile name, that the extension will be 68K, and that it will be located on the source directory. Because the link68 program cannot handle filenames longer than 13 letters, including the path and drive, your filename plus source directory should be no more than 10 characters long. WARNING: it is not safe to batter the CTRL-C key while CC.PRG is running in the background as this will often send you back to the desktop (OK if you have saved your files). Instead if you find runaway errors while compiling, type CTRL-S first and wait for the program to stop; then type one CTRL-C. Future versions of uemail will incorpaorate a buffer in which to run all shell commands. That buffer will allow you to type a number of different halt commands to stop runaway background programs. It will also let you keep the program output. This will require operating system redirection and all sorts of stack manipulation, so don't expect it any time soon, but a version with this feature is currently running under CP/M-68K using the Alcyon compiler. One added ability the command buffer will give is being able to run SID from within the editor and, with a split screen, to read the source for a file currently being debugged. The CP/M version uses the key to suspend the background process and return to the editing buffer. That allows the background program to be reentered at anytime without having it reloaded. Using SID this way to debug a file for which the symbols table has remained intact, is very close to using the fancy symbolic debuggers on other systems. With two megs you can even load the assembly source code produced by the compiler and go line by line through SID. But these are features not yet available for the ST version. The aliasing feature mention above is implemented via the cc.ini file. When uemail starts up, it attempts to read the file from the current directory and drive. It attempts to read this file before any initialization takes palce; therefore, you can use aliases (provided the cc.ini file is on the correct drive and directory) on the startup line. The cc.ini file (example below) may contain any aliases you wish to use. And new files may be loaded from the disk (using CTLX CTRL-E) at any time. The function key and number pad definitions do not cause any additional space to be allocated. But all other aliases do use space (approximately 10 bytes plus the number of characters in the alias string and the definition per each alias). Aliases are freed from memory and new pointers are installed everytime the alias function sees a matching alias name, it does not check to see whether the aliases value is the same as the original, but simply reallocates space and frees the old value. This means that alias files need not contain every value that is needed. For example you might wish to redefine the number pad or the function keys but not change the paths. You can do this by creating an alias file listing just those keys you wish to redefine and loading that file with the CTLX-CTRL-E command. The alias file also controls the screen color with a color monitor; however the load alias command issued from an editing buffer does not automatically update the screen. The new colors will be installed if you issue the set global modes command and give it the word `color' as a mode name. The colors will also be installed when you return from a terminal session or from a background (shell) operation. The load command file command is also available from the modem section using the ALT-E key. In that case the colors are installed immediately. The following is a sample cc.ini file: /* cc.ini file for cc.prg and uemail.prg * the first ten are used by the cc or link commands. the aliases must * be spelled as they are here and must be in lower case. change the * path names to match your set-up. */ /* these are for the cc.prg which also reads this file */ source=e: /* C, lnk, and 68K files */ include=d:\stdlib.h\ /* headers */ temp=m: /* temporary files, o files, and final prg */ symb=c:\bin\ /* as68symb.dat */ bin=c:\bin\ /* compilers, assembler, linker, and loader */ syslib=c:\bin\ /* library directory */ linkfile=xemacs /* filename of link command file*/ float= /* flag for floating point -f, -e or nil*/ dolink=1 /* if 1, call linker after compiling file[s] */ delete=1 /* delete I, S, 68K files? 1==YES */ /* the next two are used by shell */ shell=c:\util\pcommand.prg /* shell program */ xmodem=c:\comm\bmodem.ttp /* xmodem program */ extmac=c:\uemail\extmac.ttp /* extract macros */ cc=c:\uemail\cc.prg /* compiler driver */ /* these are not used and if not needed, may be deleted */ home=c:\uemail\ /* where it all began */ root=c:\ /* boot directory */ assembly=d:\assembly.s\ /* assembly sources */ etc=c:\util\ /* utility programs */ comm=c:\comm\ /* communications */ arc=c:\util\arc.ttp /* arc cruncher */ vt100=c:\comm\vt100.tos /* small vt100 prog */ /* set up colors the way I like. aliases and color names must be lower * case. additional colors are grey, magenta, teal, green, yellow, and * white. cobalt is a deep blue. if colors are not aliased, you get * white on black as default. */ border=black /* color #0 */ desk=cobalt /* color #2 */ cursor=red /* color #1 */ letter=black /* color #3 */ /* function key bindings for uemail.ttp The F must be upper case */ F1=setmark /* sets the mark */ F2=listbuffers /* lists current buffers */ F3=filename /* change current filename */ F4=writeregion /* write text between point and mark to file */ F5=fileinsert /* insert file at point */ F6=fileread /* read file into current buffer*/ F7=filevisit /* visit (find) a file */ F8=filewrite /* write out buffer to named file */ F9=filesave /* save current buffer if changed */ F10=quit /* save all changed buffers and exit */ /* Number pad bindings for uemail.ttp. the N must be upper case as must * the word NENTER. */ N(=backword /* backward word */ N)=forwword /* forward word */ N/=grtw /* globally remove trailing whitespace */ N*=retversion /* return current version to message line */ N7=gotobol /* goto beginning of line */ N8=gotoeol /* goto end of line */ N9=rettpa /* return usage to message line */ N-=pageback /* back by one text page (60 lines default) */ N4=backsent /* goto beginning of sentence */ N5=forwsent /* goto end of sentence */ N6=unkncom /* unknown */ N+=pageforw /* forward by one text page */ N1=gotbop /* goto beginning of paragraph (blank line) */ N2=goteop /* goto end of paragraph (blank line) */ N3=unkncom /* unknown */ N.=forwdel /* delete character under cursor */ NENTER=indent /* newline and indent */ Each line must be formatted as above. The word before the equal sign is the `alias' name used by the program, and the line to the left of the equal sign is the actual path name assigned to the aliased variable. There can be no embedded blanks or tabs in a name or alias, but comments may appear on any line as long as there is at least one space or tab character between the end of the path and the beginning of the comment. No special comment characters are necessary although using standard comment markers like those above help to make the comments more readable. The order of definitions is unimportant, and lines that contain no `=' signs are ignored. The aliasing mechanism attempts to find aliases for any command file you type at the shell command (but not for the command line arguments). Typing `cc' after issuing the shell command (CTRL-C) and the filename at the command line prompt invokes the compiler driver CC.PRG. It will also expand `temp' to m:\ because it does not check to see is the aliased name makes sense in context. If the aliased name would not load, you will receive an error message on the message line. You also can use the aliases the usual way in the shell command. If the first character of the program name is a `~,' the function will attempt to expand the aliased path. Thus `~etc\arc.ttp' is the same as `arc' and `c:\util\arc.ttp.' The set path command and all the file commands also use the alias table. If at the command's prompt you type a line which begins with a `~', these commands look up the word after the ~ and test it against the known aliases. If the word match matches a known alias, the string associated with that alias is copied into the filename. Thus if "temp=c:\files\temp" is in the cc.ini file at startup, typing the read file command CTRL-X CTRL-R and asking for the file ~temp\test.i will read in the file c:\files\temp\test.i (note that the `\' character is necessary, and the `~' must be the first character on the line). Uemail also supports writers. In addition to the useful macro function, uemail provides sentence, paragraph, and page movement commands. It provides two punctuation movement commands, forward to next punctation and backward to previous puntuation, useful for moving to the next comma or quotation mark in a text. Uemail extends the usual microemacs on-screen editing features, adding an indent column with the ability to define an indent prefix. Unlike other versions of microemacs, uemail's fill paragraph command leaves the cursor inside the paragraph in the same spot where it was when the command was issued. There are line-based commands for formatting texts. The flushleft, flushright, center, transpose words, and globally delete trailing whitespace all deal with text appearance. The indent subsequent newline same as this lets you open a line underneath the present line with the same indentation without having to be at the end of the present line. The drop line and indent command works similarly but inserts the new line above the present line. Both of these functions are not only useful for formatting text, but also for indenting program code. Uemail provides a rudimentary interface for a spelling checker. If your spelling checker uses the standard spell correction mark (0x93), the program will search for that character in your file when you type the go spell command (CTLX-S), placing your cursor at the beginning of the word to correct. The program has a word count function which reports the average size of words in a buffer. This function reports the length of your buffer in letters and characters. It uses the letter total to determine averages. This leads to a more accurate average than methods which divide the total number of characters in a buffer by the total number of words. Uemail can print buffers with page numbers, two header lines, and single or double spacing. The page size is settable, and the internal code automatically sets up any Diablo/Xerox compatible printer for standard 12 pitch type. The program can print while editing (as long as there is keyboard activity), and if you try to exit while printing, uemail will ask whether you want to exit for sure. In order for the print buffers command to work properly, be sure to define a temp directory in your cc.ini file. Uemail allows you to set your colors at start up to any four of nine possible colors (black, white, grey, teal, red, green, yellow, magenta, and cobalt). Each of the four parts of the screen is attached to a color. You may use up to four color, defining them with lines in your cc.ini file (see example above). When you read a new set of colors, you update the colors on the screen by issuing the set global modes command (META-M) and choosing color as the new mode. If you are currently in the kermit mode, the colors are automatically updated when you load the file. The aliasing mechanism allows you to write short color files that contain only the information needed to set up the colors you want and to load them into memory as needed. One additonal command (CTLX-C) alllows you to switch your background to any color currently defined. The command is intelligent enough to prevent the screen from "dissappearing" if you choose to make the background the same as the letter color (background is the `desk'). For example, if your desk is cobalt and your letters are black, issuing the command and answering black for the new color will give you a black desk with blue letters and a blue border. A similar transposition occurs if you wish the background to be the color of the cursor. Unlike most microEmaxen, uemail follows the GNU_EMACS convention of writing all `dirty' buffers when exitting. If a normal exit is chosen (CTLX-CTRL-C) and no argument is given, the program asks the user whether individual modified files should be saved. The quick exit command (CTRL-Z) saves every modified buffer without asking. The ST is prone to BUS and address errors, uemail tries to protect the user from these by intercepting the vectors associated with these exceptions. When the code signals an error, the program gives you the opportunity to save your files before restoring the system and exiting. This can avoid a lot of frustration. The following list of commands is arranged according to category. The column marked KEY shows the keystrokes bound to the command. The column marked COMMAND gives the internal name of the command that uemail uses. And the DESCRIPTION gives a brief explanation of what the command does. In the chart, the ^ character in front of a letter means that letter is a control character; ESC is the escape key, and ` is the accent grave. Any ESC sequence that uses a simple alphabetic key as the second argument is reachable using the ALT key while typing the alpha key. For example both ESC-F and ALT-F move forward one word. The difference between the two options is that the ESC version requires typing two keys, while the ALT version requires one "shifted" keystroke. Some of the commands below react differently depending upon whether the function is passed a numeric argument. Numeric arguments are used most often to cause commands to repeat a set number of times. There are two ways to signify an argument to a function. Each method requires typing a repeat command before typing the function. The two repeat commands are CTRL-U and the ESC key followed by any digit or by the negative sign. CTRL-U is called the universal prefix and always defaults to four repeats. Typing CTRL-U repeatedly multiplies the repeat count. The count echos to the message line. Typing ESC followed by a number does essentially the same thing but allows you to choose the number directly. For example: ESC-2 followed by CTRL-K deletes two full lines forward, which is equivalent to deleting a line and the trailing newline. Some commands look for zero arguments to change their normal actions. For example: CTLX-D is the set path command; however, when it is prefaced with ESC-0 or CTRL-U-0, it returns the current default drive and path to the message line. The showtime command is similar. If it is called normally, without an argument, or if it is called with a zero or negative argument, it writes the current time to the message line. If it is called with a possitive argument less than 1000 (a special case), it writes the time into the document at the current position. The 1000 value is used by the kermit section to write to the message line. Since the kermit section must use a different message writing scheme from that used by the editor. Commands for Uemail =================== KEY (lower case OK) COMMAND DESCRIPTION -------------------------------------------------------------------------- MISCELLANEOUS UTILITIES ESC-~ clearflag(); /* Clear changed buffer flag */ ^X-~ or ^C shell(); /* run a child process or cc */ ^Q quote(); /* Insert literal */ ^G ctrlg(); /* Abort out of things */ ^X-^C quit(); /* Quit prompt to save files */ ^Z quickexit(); /* low keystroke exit and save */ ^X-= showcpos(); /* Show the cursor position */ ^X-W wc(); /* word and line count of buffer*/ ^X-* retversion(); /* version date */ ^X-M setmode(); /* set a mode for a buffer */ ^X-^T showtime(); /* tell the time or insert in buffer */ ESC-M sglmode(); /* set global mode */ ESC-X mdoncom(); /* do named command */ ESC-@ rettpa(); /* show available memory and usage */ ESC-^N enumerate(); /* start or incr. counter variable */ Lots-o-keys unkncom(); /* unknown command BEEP */ FILE OPERATIONS ^X-^E commfill(); /* Read a cc.ini command file */ ^X-I fileinsert(); /* Insert existing file at point*/ ^X-^R fileread(); /* Get a file, into existing buf*/ ^X-^V filevisit(); /* Get a file, new buffer */ ^X-^W filewrite(); /* Write a file */ ^X-^S filesave(); /* Save current file */ ^X-^F filename(); /* Change file name */ ^X-D setpath(); /* set path if arg=0 get path */ CURSOR MOVEMENT ^A gotobol(); /* Move to start of line or prev*/ ^E gotoeol(); /* Move to end of line or next */ ^B backchar(); /* Move backward by characters */ ^F forwchar(); /* Move forward by characters */ ^P backline(); /* Move backward by lines */ ^N forwline(); /* Move forward by lines */ ESC-V backpage(); /* Move backward by screens */ ^V forwpage(); /* Move forward by screens */ ESC-B or ESC-^B backword(); /* Backup by words */ ESC-F or ESC-^F forwword(); /* Advance by words */ ESC-N goteop(); /* goto end of paragraph */ ESC-P gotbop(); /* goto beginning of paragraph */ ^X-< btopunct(); /* move backward to last punctuation */ ^X-> ftopunct(); /* move forward to next punctuation */ ESC-A backsent(); /* backward to beginning of sentence */ ESC-E forwsent(); /* forward to end of sentence */ ESC-, or ESC-< gotobob(); /* Move to start of buffer */ ESC-. or ESC-> gotoeob(); /* Move to end of buffer */ ESC-G goline(); /* goto arg line in text */ ^@ or ESC-SP setmark(); /* Set mark */ ^X-^X swapmark(); /* Swap "." and mark */ DOCUMENT FORMATTING ^X-# setpage(); /* set page size to arg length */ ^X-! paginate(); /* insert '\f' every page */ ^X-+ pageforw(); /* move forward set page length */ ^X-- (dash) pageback(); /* move back set page length */ ^X-TAB print(); /* print buffer with heading */ ^X-F setfillcol(); /* Set fill column. */ ESC-Q fillpar(); /* fill paragraph to fill column*/ ^X-. setindcol(); /* Set indent column or prefix */ ^T twiddle(); /* Twiddle characters */ ESC-T twaddle(); /* transpaose two words in place*/ TAB tab(); /* Insert tab */ RETURN newline(); /* Insert CR-LF */ ^J indent(); /* Insert CR-LF, then indent */ ^O openline(); /* Open up a blank line */ ^X-^O deblank(); /* Delete blank lines */ ESC-O mdropln(); /* drop current line and move up*/ ESC-J mindnl(); /* indent subsequent NL same as this */ ESC-\ mdelind(); /* delete beginning line indentation */ ESC-^R mrflush(); /* flush right current line */ ESC-^C mcenter(); /* center current line */ ^X-\ grtw(); /* remove trailing white space */ ESC-^O clowsp(); /* close up intervening white space */ ESC-^P tglcase(); /* toggle case of letter at point */ BUFFERS AND WINDOWS ^X-^B listbuffers(); /* Display list of buffers */ ^X-B usebuffer(); /* Switch a window to a buffer */ ^X-K killbuffer(); /* Make a buffer go away. */ ESC-! reposition(); /* Reposition window */ ^L refresh(); /* Refresh the screen */ ^X-^N mvdnwind(); /* Scroll window down */ ^X-^P mvupwind(); /* Scroll window up */ ^X-N nextwind(); /* Move to the next window */ ^X-P or ^X-O prevwind(); /* Move to the previous window */ ^X-1 onlywind(); /* Make current window only one */ ^X-2 splitwind(); /* Split current window */ ^X-Z enlargewind(); /* Enlarge display window. */ ^X-^Z shrinkwind(); /* Shrink window. */ ^X-C paintbuffer(); /* change the backgound color */ DELETION AND REGIONS ESC-H markpar(); /* mark paragraph sets mark */ ^D forwdel(); /* Forward delete */ DEL backdel(); /* Backward delete */ ESC-TAB kill(); /* Kill line forward */ ^Y yank(); /* Yank back from killbuffer. */ ESC-U upperword(); /* Upper case word. */ ESC-L lowerword(); /* Lower case word. */ ^X-^L upperregion(); /* Upper case region. */ ^X-^U lowerregion(); /* Lower case region. */ ESC-C capword(); /* Initial capitalize word. */ ESC-D delfword(); /* Delete forward word. */ ESC-DEL delbword(); /* Delete backward word. */ ^K mdeleln(); /* delete entire line from beginning */ ESC-^K mdelwln(); /* delete entire line including NL */ ESC-K killsent(); /* kill sentence forward sets mark */ ^W killregion(); /* Kill region. */ ESC-W copyregion(); /* Copy region to kill buffer. */ ^X-R writereg(); /* write defined region to file */ SEARCHING ^S forwsearch(); /* Search forward */ ^R backsearch(); /* Search backwards */ ESC-R replace(); /* Search and replace */ `^R or ESC-^T backisearch(); /* Incremental search back */ `^S or ESC-^S forwisearch(); /* Incremental search forward */ ^X-S gospell(); /* Search for 0x93 (unix spell) */ Function Key, Cursor Pad, and Numeric pad bindings. The keycode associated with the primary EMACS binding for each of the rebound functions is sent over the serial line. This allows you to set up your bindings at the ST to match those you normally use with the EMACS on a remote computer. KEY FUNCTION =========================== F1 setmark() F2 listbuffers() F3 filename() F4 writeregion() F5 fileinsert() F6 fileread() F7 filevisit() F8 filewrite() F9 filesave() F10 quickexit() Number pad (bound to functions except when CapsLock is on) ( backword() ) forwword() / grtw() * retversion() 7 gotobol() 8 gotoeol() - pageback() 4 backsent() 5 forwsent() + pageforw() 1 gotbop() /* beginning of paragraph */ 2 goteop() /* end of paragraph */ 0 Control-X prefix forwdel() ENTER indent() [All of the other number pad keys are bound to unkncom() (the unknown command function), but those can be rebound to something useful through a command file.] [The cursor pad cannot be rebound. It would not be that difficult to add this feature to the source.] CURSORS what they look like they should do INSERT openline() UNDO yank() HELP kermit() showhelp() in terminal mode CLR refresh() KERMIT (and subcommands) ^_ or HELP kermit(); /* file transfer */ ________________ | [The following subcommands are supported. Only the first letter is | significant.] | send send a file (in a uemail buffer) to remote kermit | receive receive a file from remote | put send a file in server mode | get recieve in server mode (uemail prompts for remote name) | finish finish remote kermit server mode | bye finish server and logoff remote | transfer send a uemail buffer to remote appending EOF to end | emacs same as above but without EOF | log copy remote session into a uemail buffer (`^\ turns it off) | connect connect to the RS232 line in terminal mode | ^G abort a kermit session (get, put, rec, send, fin, or bye) | Use this if one of the kermit commands appears to "lock up" ================ | [Terminal mode commands.] | ALT-CTRL-B send break | ALT-CTRL-C run program or shell | ALT-B set baud rate (prompts for value) | ALT-C change background color | ALT-E load alias file and update color | ALT-L load macros file | ALT-O turn off handshaking | ALT-R use RTS/CTS handshaking | ALT-T show time on mode line | ALT-X use XON/XOFF handshaking | ALT-? show help information | HELP show help information | ALT-UNDO exit terminal mode (return to current uemail buffer) | ALT-any-other sends the character (i.e. NULL) ---------------- MACROS ====== ^X-( ctlxlp(); /* Begin macro */ ^X-) ctlxrp(); /* End macro */ ^X-E ctlxe(); /* Execute macro */ ________________ | The following commands let you bind a macro that was defined using | ^X( to any keyboard key. That macro can be executed using the accent | grave (putmacro) command. The macros can be saved to disk and reloaded | when needed. ---------------- ` (grave) putmacro(); /* print line macros in text */ ^X` getmacro(); /* bind current kbdm to key */ [The following macros are predefined and cannot be rebound.] `^G abort `^L load a file of previously defined macros `^M write currently defined macros to file `^R incremental search back `^S incremental search forward `^T show time on mode line `` insert an accent grave SHAR_EOF # End of shell archive exit 0 %NONAME-W-NOMSG, Message number 00000000