0707070000020007431006440001460001440000010336450402643530300000500000000004Size430 0707070000020040771006440001460001440000010521660402643520500000500000000063NameThe Georgia Tech SE Screen Editor, from THE STORE! 0707070000020047601007550001460001440000010345010402643500700000700000000464Remove# Remove file for the Georgia Tech 'se' screen editor - Arnold Robbins echo Removing the "'se'" screen editor... if [ -d /usr/lib/se_h ] then rm -fr /usr/lib/se_h # nuke the help files fi rm -f /usr/man/1.se /usr/bin/se rm -f ${HOME}/Filecabinet/se.1 echo finished removing the "'se'" screen editor... 0707070000020040111007550001460001440000010337360402643515400001000000003016Install# --------------------------------------------------------------------- # Install script for Georgia Tech 'se' screen editor # 3/14/87 # Arnold Robbins # --------------------------------------------------------------------- #Let them know we've started echo "Installing `cat Name` \n" echo MNAME=`uuname -l` cat < /dev/null 2>&1 chmod +x ${BINDIR}/man chown bin ${BINDIR}/man chgrp bin ${BINDIR}/man fi ln 1.se ${MANDIR}/1.se ln se.1 ${HOME}/Filecabinet/se.1 message -i "A primitive man(1) command has been installed. man(1) is a shell script in $BINDIR. List it for more information.\n\nTouch to continue" echo "Installing the Georgia Tech 'se' screen editor..." ln se ${BINDIR}/se chown bin ${BINDIR}/se chgrp bin ${BINDIR}/se if message -c "The 'se' editor has on-line help available. These files take up about 72K bytes of disk space. Touch to install these files, to refrain from installing them." then echo Installing help files... mkdir /usr/lib/se_h ln se_h/* /usr/lib/se_h chown bin /usr/lib/se_h /usr/lib/se_h/* chgrp bin /usr/lib/se_h /usr/lib/se_h/* chmod 755 /usr/lib/se_h fi #--------------------------------------------------------------------- 0707070000020040711006440001460001440000010473510402643500700000600000001637Files./Size ./Name ./Remove ./Install ./Files ./1.se ./man ./MAKEcpio ./MAKEflop ./se.1 ./se ./se_h ./se_h/a ./se_h/abt ./se_h/ah ./se_h/arg2 ./se_h/args ./se_h/b ./se_h/bang ./se_h/bug ./se_h/c ./se_h/cc ./se_h/ccmisc ./se_h/chardel ./se_h/charins ./se_h/colon ./se_h/com ./se_h/comdir ./se_h/comsyn ./se_h/d ./se_h/detab.c ./se_h/dir ./se_h/e ./se_h/eh ./se_h/elp ./se_h/equal ./se_h/f ./se_h/g ./se_h/h ./se_h/i ./se_h/j ./se_h/k ./se_h/l ./se_h/list ./se_h/ln ./se_h/m ./se_h/motion ./se_h/n ./se_h/o ./se_h/o- ./se_h/oa ./se_h/oc ./se_h/od ./se_h/of ./se_h/og ./se_h/oh ./se_h/oi ./se_h/ok ./se_h/ol ./se_h/olm ./se_h/om ./se_h/os ./se_h/ot ./se_h/ou ./se_h/ov ./se_h/ow ./se_h/ox ./se_h/oy ./se_h/oz ./se_h/p ./se_h/pat ./se_h/patex ./se_h/q ./se_h/quote ./se_h/r ./se_h/rpt ./se_h/s ./se_h/scan ./se_h/serc ./se_h/shell ./se_h/specl ./se_h/t ./se_h/termchar ./se_h/tilde ./se_h/u ./se_h/v ./se_h/w ./se_h/x ./se_h/y ./se_h/z 07070700000200406410064400014600014400000103401204026435015000005000001473431.se SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) NNNNAAAAMMMMEEEE se - screen editor SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS sssseeee [ --------aaaaccccddddffffgggghhhhiiiikkkkllllmmmmssssttttuuuuvvvvwwwwxxxxyyyyzzzz ] [ file ... ] DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN _S_e is a screen oriented version of _e_d(1). It accepts the same commands with a few differences. _S_e must be run from a CRT terminal. It uses the _t_e_r_m_l_i_b(3) terminal operations library, which retrieves terminal capabilities from the ////eeeettttcccc////tttteeeerrrrmmmmccccaaaapppp database. For _s_e to function, all of the following must be true: 1. You must have the environment variable "TERM" set to the name of your terminal type. 2. The ////eeeettttcccc////tttteeeerrrrmmmmccccaaaapppp database must be accessible, and contain an entry for your terminal; or the "TERMCAP" environment variable must contain a description for your terminal. (See _t_e_r_m_l_i_b(3) for details.) 3. Your terminal must have the capability to do cursor motion. _S_e first clears the screen, draws in its margins, and executes the commands in the file ....////....sssseeeerrrrcccc, or failing that, $$$$HHHHOOOOMMMMEEEE////....sssseeeerrrrcccc, if either file exists. It then processes the command line, obeying the options given there, and begins reading your file (if you specified one). The screen it draws looks something like this. (The parenthesized numerals are not part of the screen layout, but are there to aid in the following discussion.) (1) (2) (3) AAAA |||| BBBB ||||####iiiinnnncccclllluuuuddddeeee <<<>>> CCCC |||| DDDD ****|||| rrrreeeeggggiiiisssstttteeeerrrr iiiinnnntttt iiii;;;; EEEE |||| .... ---->>>> |||| ffffoooorrrr ((((iiii ==== 1111;;;; iiii <<<<==== 11112222;;;; iiii++++++++)))) GGGG |||| ppppuuuuttttcccc ((((''''\\\\nnnn'''',,,, ssssttttddddeeeerrrrrrrr))));;;; $$$$ |||| ccccmmmmdddd>>>> ||||____ (4) 11111111::::33339999 mmmmyyyyffffiiiilllleeee ................................................................................................ (5) The display is divided into five parts: (1) the line number area, (2) the mark name area, (3) the text area, (4) the command line, and (5) the status line. The current line is indicated by the symbol "." in the line number area of the screen. In addition, a rocket ("---->>>>") is displayed to make Page 1 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) the current line more obvious. The current mark name of each line is shown in the markname area just to the left of the vertical bar. Other information, such as the number of lines read in, the name of the file, and the time of day, are displayed in the status line. The cursor is positioned at the beginning of the command line, showing you that _s_e awaits your command. You may now enter any of the standard _e_d commands and _s_e will perform them, while making sure that the current line is always displayed on the screen. You can set options to control the behavior of _s_e on the command line, simply by using a "-", followed by the option letter, and any parameters that the option may take. These options can also be set after invoking _s_e with the options command, "o", explained in detail in the section on commands. Here is a summary: opt = a | c | d[_d_i_r] | f | g | h | i[_a | _i_n_d_e_n_t] | k | l[_l_o_p] | lm[_c_o_l] | m | s[_f_i_l_e_t_y_p_e] | t[_t_a_b_s] | u[_c_h_a_r] | v[_c_o_l] | w[_c_o_l] | x | y[_k_e_y] | z | -[_l_n_r] There are only a few other things that you need know to successfully use _s_e: 1. If you make an error, _s_e automatically displays an error message in the status line. It also leaves your command line intact so that you may change it using in-line editing commands (see the "v" command). If you don't want to bother with changing the command, just hit DEL to erase the command. 2. The "p" command has a different meaning than in _e_d. When used with line numbers, it displays as many of the lines in the specified range as possible (always including the last line). When used without line numbers, "p" displays the previous page. 3. The ":" command positions a specified line at the top of the screen (e.g., "12:" positions the screen so that line 12 is at the top). If no line number is specified, ":" displays the next page. Keeping these few differences in mind, you will see that _s_e can perform all of the functions of _e_d, while giving the advantage of a "window" into the edit buffer. Below is a summary of line number expressions, regular expressions and commands. Where there is no difference between _s_e and _e_d no explanation is given. Page 2 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) LLLLiiiinnnneeee NNNNuuuummmmbbbbeeeerrrr EEEExxxxpppprrrreeeessssssssiiiioooonnnnssss _n _nth line. . current line. $ last line. ^ previous line. - previous line. capital letter _A _Ath line on the screen. _S_e has a number of features that take advantage of the window display to minimize keystrokes and speed editing. In the line number area of the screen, _s_e displays a capital letter for each line, but in "absolute line number" mode (controlled by the "oa" command; see the options command) _s_e displays the actual line number of each line. # number of the first line on the screen. /_r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n[/] next line with pattern. ?_r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n[?] previous line with pattern. >name number of the next line having the given markname (search wraps around, like //). " or "<". If ">" is specified, the default behavior is selected: the line following the deleted lines becomes the new current line. If "<" is specified, the line immediately preceding the deleted lines becomes the new current line. If neither is specified, the current value of _d_i_r is displayed in the status line. f selects Fortran oriented options. This is equivalent to specifying the "ot7 +3" option, and Page 7 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) "XTABS" is turned on (i.e. tabs are expanded). g controls the behavior of the "s" (substitute) command when it is under the control of a "g" (global) command. Initially, if a substitute inside a global command fails, _s_e will not continue with the rest of the lines which might succeed. If "og" is given, then the global substitute will continue, and lines which failed will not be affected. Successive "og" commands will toggle this behavior. An explanatory message is placed in the status line. h controls the use of hardware line insert/delete on terminals that have that capability. By default, line insert/delete will be used if available. It is occasionally useful to turn this option off when using the editor on a terminal which can't keep up, or if the communications lines may be scrambling the control characters. Each successive "oh" merely toggles a switch within the editor. An explanatory message is placed in the status line. i[ a | _i_n_d_e_n_t ] selects indent value for lines inserted with "a", "c" and "i" commands (initially 1). "a" selects auto-indent which sets the indent to the value which equals the indent of the previous line. If neither "a" nor _i_n_d_e_n_t are specified, the current indent value is displayed in the status line. k indicates whether the current contents of your edit buffer have been saved or not by printing either a "saved" or "not saved" message on your status line. l[_l_o_p] sets the line number display option. Under control of this option, _s_e continuously displays the value of one of three symbolic line numbers. _l_o_p may be ".", "#", or "$". If _l_o_p is omitted, the line number display is disabled. lm[_c_o_l] sets the left margin to _c_o_l which must be a positive integer. This option will shift your entire screen to the left, enabling you to see characters at the end of the line that were previously off the screen; the characters in columns 1 through _c_o_l - 1 will not be visible. You may continue editing in the normal fashion. Page 8 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) To reset your screen enter the command "olm 1". If _c_o_l is omitted, the current left margin column is displayed in the status line. m controls notification of the presence of existing mail and/or the arrival of new mail in the user's mail file. The mail file is taken from the "MAIL" variable in the user's environment. On startup, if the mail file is not empty, _s_e will remark, "You have mail." Then, if new mail arrives, _s_e will remark, "You have new mail," and ring the terminal's bell. The "m" option simply toggles a notification switch, so that the user can turn off this notification. The "om" command displays the current setting of the notify switch in the status line. s[d | data | as | s | c | h | n | nr | nroff | p | r | f] sets other options for case, tabs, etc., for data files, "d" or "data", assembly files, "as" or "s", C files, "c", include files, "h", nroff files, "n" or "nr" or "nroff", ratfor files, "r", pascal files, "p", and fortran files, "f". Options set for data and nroff files are "ow74" and "ot+4"; for assembly files "ot 17+8" and "XTABS" is turned on; for C, include, pascal and ratfor files "ow74", "ot+4" and "XTABS" is turned on; for fortran files "ot 7+3" and "XTABS" is turned on. If "XTABS" is turned on then tabs are expanded. If no argument is specified the options effected by this command revert to their default value. t[_t_a_b_s] sets tab stops according to _t_a_b_s. _T_a_b_s consists of a series of numbers indicating columns in which tab stops are to be set. If a number is preceded by a plus sign ("+"), it indicates that the number is an increment; stops are set at regular intervals separated by that many columns, beginning with the most recently specified absolute column number. If no such number precedes the first increment specification, the stops are set relative to column 1. By default, tab stops are set in every third column starting with column 1, corresponding to a _t_a_b_s specification of "+3". If _t_a_b_s is omitted, the current tab spacing is displayed in the status line. Examples ooootttt 1111 4444 7777 11110000 11113333 11116666 11119999 22222222 22225555 22228888 33331111 33334444 ............ ooootttt ++++3333 ooootttt 7777 ++++3333 Page 9 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) Once the tab stops are set, the control-i and control-e keys can be used to move the cursor from its current position forward or backward to the nearest stop, respectively. u[_c_h_r] Normally, _s_e displays a non-printing character (e.g. NEWLINE, TAB ...) as a blank. With this option, you can select the character that _s_e displays in place of unprintable characters. _C_h_r may be any printable character. If _c_h_r is omitted, _s_e displays the current replacement character on the status line. Non-printing characters (such as _s_e control characters), or any others for that matter, may be entered by hitting the ESC key followed immediately by the key to generate the desired character. Note, however, that the character you type is taken literally, exactly as it is generated by your terminal, so case conversion does not apply. v[_c_o_l] sets the default "overlay column". This is the column at which the cursor is initially positioned by the "v" command. _C_o_l must be a positive integer, or a dollar sign ($) to indicate the end of the line. If _c_o_l is omitted, the current overlay column is displayed in the status line. w[_c_o_l] sets the "warning threshold" to _c_o_l which must be a positive integer. Whenever the cursor is positioned at or beyond this column, the column number is displayed in the status line and the terminal's bell is sounded. If _c_o_l is omitted, the current warning threshold is displayed in the status line. The default warning threshold is 74, corresponding to the first column beyond the right edge of the screen on an 80 column crt. x toggles tab compression and expansion ("XTABS"). If XTABS is off, "ox" turns it on for subsequent "r", and "w", commands. Be aware that the "e" command checks the source option for files; use the "ex" command to force tab expansion. y[_k_e_y] allows you to edit encrypted files. "oy" followed by a key will cause the "e", "r", and "w" commands to encrypt and decrypt files using _c_r_y_p_t(1). "oy" by itself will toggle the current encryption setting. If there is no current key, _s_e will ask Page 10 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) you for one. Echoing is turned off while you type your key in, and _s_e asks you to type it in twice, just to be sure. If encryption is turned on, and you type a plain "oy", it will be turned off. Note that doing so causes _s_e to forget the value of the encryption key. Encryption in indicated by the message "ENCRYPT" in the status line. The key is _n_e_v_e_r shown on your screen. z suspends the editor (puts it in the background) and returns to the user's shell. (It has to be a shell that understands Berkeley job control, or else you'll be in trouble.) The editor will warn you if the edit buffer has not been saved. This is the _o_n_l_y way to suspend the editor; the editor uses control-z for its own purposes (see the section on control characters, below). If you normally run ////bbbbiiiinnnn////sssshhhh without job control, this command has no effect at all. On UNIX systems without the Berkeley job control mechanism, this option will be recognized, but will have no effect. Instead, an explanatory message will be placed in the status line. -[_l_n_r] splits the screen at the line specified by _l_n_r which must be a simple line number within the current window. All lines above _l_n_r remain frozen on the screen, the line specified by _l_n_r is replaced by a row of dashes, and the space below this row becomes the new window on the file. Further editing commands do not affect the lines displayed in the top part of the screen. If _l_n_r is omitted, the screen is restored to its full size. (.,.)p Print Prints all the lines in the given range. As much as possible of the range is displayed, always including the last line; if no range is given, the previous page is displayed. The current line pointer is left at the last line printed. q[!] Quit "q!", exit immediately, is the same as "Q" in _e_d. (.)r[x] [filename] Read If no line number is specified, the named file is read starting after current line (as opposed to _e_d where the file is read at the end of the edit buffer). "rx" causes tabs to be expanded in the lines read. Page 11 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) (.,.)s[/_r_e_g _e_x_p_r/_s_u_b[/][g][p]] Substitute If no pattern and replacement are specified after the "s", _s_e will behave as if you had typed "s//%/", i.e. for the saved search pattern, substitute the saved replacement pattern. To just delete a pattern, you may type "s/stuff", and _s_e will behave as if you had typed "s/stuff//". (.,.)t Copy ("To" is the _e_d mnemonic). u[d] Undo "u" undoes the effects of the previous command, on the _l_a_s_t _l_i_n_e affected (for instance a substitute command). "ud" undoes the last delete, i.e. it inserts the last deleted line after the current line. _S_e does not have a global undo capability. (.,.)v oVerlay - screen oriented editing Full screen editing with _s_e is accomplished through the use of control characters for editing functions. With screen oriented editing, control characters may be used to modify text anywhere in the buffer. A control-v may be used to quit overlay mode. A control-f may be used to restore the current line to its original state and terminate the command. Since _s_e supports such a large number of control functions, the mnemonic value of control character assignments has dwindled to almost zero. About the only thing mnemonic is that most symmetric functions have been assigned to opposing keys on the keyboard (e.g., forward and backward tab to control-i and control-e, forward and backward space to control-g and control-h, skip right and left to control-o and control-w, and so on). We feel pangs of conscience about this, but can find no more satisfactory alternative. If you feel the control character assignments are terrible and you can find a better way, you may change them by modifying the definitions in _s_e and recompiling. Except for a few special purpose ones, control characters can be used anywhere, even on the command line. (This is why erroneous commands are not erased - you may want to edit them.) Most of the functions work on a single line, but the cursor may be positioned anywhere in the buffer. Refer to the next section which describes each control character in detail. (1,$)w[+ | > | !] [filename] Write Write the portion of the buffer specified to the named file. If "+" or ">" is given, the portion of the buffer is appended to the file; otherwise the portion Page 12 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) of the buffer replaces the file. "w!", write immediately, is the same as "W" in _e_d. (1,$)x/_r_e_g _e_x_p_r/command eXclude on pattern (.,.)y[/from/to[/][p]] TranslYterate (sic) The range of characters specified by "from" is transliterated into the range of characters specified by "to". The last line on which something was transliterated is printed if the "p" option is used. The last line in the range becomes the new current line. As with the substitute and join commands, and pattern searches, the trailing delimiter is optional. _S_e saves both the "from" and "to" parts of the transliterate command: "y" is the same as "y//%/", i.e. transliterate the saved "from" range into the saved "to" range. The "%" is special only if it is the only character in the "to" part of the command. (.,.)zb_l_e_f_t[,_r_i_g_h_t][_c_h_a_r]_D_r_a_wBox A box is drawn on the given lines, in the given columns, using the given _c_h_a_r. This command can be used as an aid for preparing block diagrams, flowcharts, or tables. Line numbers are used to specify top and bottom row positions of the box. _L_e_f_t and _r_i_g_h_t specify left and right column positions of the box. If second line number is omitted, the box degenerates to a horizontal line. If right-hand column is omitted, the box degenerates to a vertical line. If _c_h_a_r is omitted, it defaults to blank, allowing erasure of a previously- drawn box. For example, "1,10zb15,25*" would draw a box 10 lines high and 11 columns across, using asterisks. The upper left corner of the box would be on line 1, column 15, and the lower right corner on line 10, column 25. (.)= Equals what line number? (1,$)~mcommand global exclude on markname Similar to the "x" prefix except that "command" is performed for all lines in the range that do not have the mark name "m". (1,$)'mcommand global on markname Similar to the "g" prefix except that "command" is performed for all lines in the range that have the mark name "m". (.): display next page Page 13 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) The next page of the buffer is displayed and the current line pointer is placed at the top of the window. none ![_U_N_I_X _c_o_m_m_a_n_d] escape to the shell The user's choice of shell is taken from the "SHELL" environment variable (if it exists), and is used to execute _U_N_I_X _c_o_m_m_a_n_d if it is present. Otherwise, an interactive shell is created. After an interactive shell exits, the screen is immediately redrawn. If a command was run, the results are left on the screen, and the user must type RETURN to redraw the editing window. This is how _v_i(1) behaves. If the first character of the _U_N_I_X _c_o_m_m_a_n_d is a `!', then the `!' is replaced with the text of the previous shell command. An unescaped `%' in the _U_N_I_X _c_o_m_m_a_n_d will be replaced with the current saved file name. If the shell command is expanded, _s_e will echo it first, and then execute it. This behavior is identical to the version of _e_d in UNIX System V. CCCCoooonnnnttttrrrroooollll CCCChhhhaaaarrrraaaacccctttteeeerrrrssss The set of control characters defined below can be used for correcting mistakes while typing regular editing commands, for correcting commands that have caused an error message to be displayed, for correcting lines typed in append mode, or for in-line editing using the "v" command. control-a Toggle insert mode. The status of the insertion indicator is inverted. Insert mode, when enabled, causes the characters you type to be inserted at the current cursor position in the line instead of overwriting the characters that were there previously. When insert mode is in effect, "INSERT" appears in the status line. control-b Scan right and erase. The current line is scanned from the current cursor position to the right margin until an occurrence of the next character typed is found. When the character is found, all characters from the current cursor position up to (but not including) the scanned character are deleted and the remainder of the line is moved to the left to close the gap. The cursor is left in the same column which is now occupied by the scanned character. If the line to the right of the cursor does not contain the character being sought, the terminal's bell is sounded. _S_e remembers the last character that was scanned using this or any of the other scanning keys; if control-b is hit twice in a row, this remembered character is used instead of a Page 14 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) literal control-b. control-c Insert blank. The characters at and to the right of the current cursor position are moved to the right one column and a blank is inserted to fill the gap. control-d Cursor up. The effect of this key depends on _s_e's current mode. When in command mode, the current line pointer is moved to the previous line without affecting the contents of the command line. If the current line pointer is at line 1, the last line in the file becomes the new current line. In overlay mode (viz. the "v" command), the cursor is moved up one line while remaining in the same column. In append mode, this key is ignored. control-e Tab left. The cursor is moved to the nearest tab stop to the left of its current position. control-f "Funny" return. The effect of this key depends on the editor's current mode. In command mode, the current command line is entered as-is, but is not erased upon completion of the command; in append mode, the current line is duplicated; in overlay mode (viz. the "v" command), the current line is restored to its original state and command mode is reentered (except if under control of a global prefix). control-g Cursor right. The cursor is moved one column to the right. control-h Cursor left. The cursor is moved one column to the left. Note that this _d_o_e_s _n_o_t erase any characters; it simply moves the cursor. control-i Tab right. The cursor is moved to the next tab stop to the right of its current position. Again, no characters are erased. control-k Cursor down. As with the control-d key, this key's effect depends on the current editing mode. In command mode, the current line pointer is moved to the next line without changing the contents of the command line. If the current line pointer is at the last line in the Page 15 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) file, line 1 becomes the new current line. In overlay mode (viz. the "v" command), the cursor is moved down one line while remaining in the same column. In append mode, control-k has no effect. control-l Scan left. The cursor is positioned according to the character typed immediately after the control-l. In effect, the current line is scanned, starting from the current cursor position and moving left, for the first occurrence of this character. If none is found before the beginning of the line is reached, the scan resumes with the last character in the line. If the line does not contain the character being looked for, the message "NOT FOUND" is printed in the status line. _S_e remembers the last character that was scanned for using this key; if the control-l is hit twice in a row, this remembered character is searched for instead of a literal control-l. Apart from this, however, the character typed after control-l is taken literally, so _s_e's case conversion feature does not apply. control-m Kill right and terminate; identical to the NEWLINE key described below. control-n Scan left and erase. The current line is scanned from the current cursor position to the left margin until an occurrence of the next character typed is found. Then that character and all characters to its right up to (but not including) the character under the cursor are erased. The remainder of the line, as well as the cursor are moved to the left to close the gap. If the line to the left of the cursor does not contain the character being sought, the terminal's bell is sounded. If control-n is hit twice in a row, the last character scanned for is used instead of a literal control-n. control-o Skip right. The cursor is moved to the first position beyond the current end of line. control-p Interrupt. If executing any command except "a", "c", "i" or "v", _s_e aborts the command and reenters command mode. The command line is not erased. This is the only way to interrupt the editor. _S_e ignores the SIGQUIT signal (see _s_i_g_n_a_l(2)); in fact it disables generating quits from the terminal. The editor uses ASCII FS (control-\) for its own purposes, and changes the terminal driver to make control-p be the interrupt Page 16 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) character. control-] Fix screen. The screen is reconstructed from _s_e's internal representation of the screen. control-r Erase right. The character at the current cursor position is erased and all characters to its right are moved left one position. control-j Scan right. This key is identical to the control-l key described above, except that the scan proceeds to the right from the current cursor position. control-t Kill right. The character at the current cursor position and all those to its right are erased. control-u Erase left. The character to the left of the current cursor position is deleted and all characters to its right are moved to the left to fill the gap. The cursor is also moved left one column, leaving it over the same character. control-v Skip right and terminate. The cursor is moved to the current end of line and the line is terminated. control-w Skip left. The cursor is positioned at column 1. control-x Insert tab. The character under the cursor is moved right to the next tab stop; the gap is filled with blanks. The cursor is not moved. control-y Kill left. All characters to the left of the cursor are erased; those at and to the right of the cursor are moved to the left to fill the void. The cursor is left in column 1. control-z Toggle case conversion mode. The status of the case conversion indicator is inverted; if case inversion was on, it is turned off, and vice versa. Case inversion, when in effect, causes all upper case letters to be converted to lower case, and all lower case letters to be converted to upper case (just like the alpha-lock Page 17 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) key on some terminals). You can type control-z at any time to toggle the case conversion mode. When case inversion is in effect, _s_e displays the word "CASE" in the status line. Note that _s_e continues to recognize alphabetic line numbers in upper case only, in contrast to the "case inversion" option (see the description of options under the option command). control-_ (US) Insert newline. A newline character is inserted before the current cursor position, and the cursor is moved one position to the right. The newline is displayed according to the current non-printing replacement character (see the "u" option). control-\ (FS) Tab left and erase. Characters are erased starting with the character at the nearest tab stop to the left of the cursor up to but not including the character under the cursor. The rest of the line, including the cursor, is moved to the left to close the gap. Use control-p to interrupt the editor. control-^ (control-~, RS) Tab right and erase. Characters are erased starting with the character under the cursor up to but not including the character at the nearest tab stop to the right of the cursor. The rest of the line is then shifted to the left to close the gap. NEWLINE Kill right and terminate. The characters at and to the right of the current cursor position are deleted, and the line is terminated. DEL Kill all. The entire line is erased, along with any error message that appears in the status line. ESC Escape. The ESC key provides a means for entering _s_e's control characters literally as text into the file. In fact, any character that can be generated from the keyboard is taken literally when it immediately follows the ESC key. If the character is non-printing (as are all of _s_e's control characters), it appears on the screen as the current non-printing replacement character (normally a blank - see the options command "ou"). WWWWiiiinnnnddddoooowwwwiiiinnnngggg SSSSyyyysssstttteeeemmmmssss On 4.3 BSD, and on the AT&T Unix/PC or 3B1, _s_e notices when its current window changes size or is repositioned, and Page 18 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) adjusts the screen image accordingly. FFFFIIIILLLLEEEESSSS $$$$HHHHOOOOMMMMEEEE////....sssseeeerrrrcccc _s_e initialization file. ////uuuussssrrrr////ttttmmmmpppp////_p_r_o_c_e_s_s _i_d...._s_e_q_u_e_n_c_e__n_u_m_b_e_r for scratch file. ....////sssseeee....hhhhaaaannnngggguuuupppp where _s_e dumps its buffer if it catches a hang-up signal. ////uuuussssrrrr////llllooooccccaaaallll////lllliiiibbbb////sssseeee____hhhh////**** help scripts for the "h" command. DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS Self explanatory diagnostics appear in the status line. CCCCAAAAVVVVEEEEAAAATTTTSSSS _S_e will _n_e_v_e_r dump its buffer into an encrypted file when it encounters a hang-up, even if encryption was turned on at the time. SSSSEEEEEEEE AAAALLLLSSSSOOOO _S_o_f_t_w_a_r_e _T_o_o_l_s, _S_o_f_t_w_a_r_e _T_o_o_l_s _i_n _P_a_s_c_a_l, _S_o_f_t_w_a_r_e _T_o_o_l_s _S_u_b_s_y_s_t_e_m _U_s_e_r'_s _G_u_i_d_e, _e_d(1), _c_r_y_p_t(1), _k_s_h(1), _s_c_r_i_p_t_s_e(1), _s_h(1), _v_i(1), _s_i_g_n_a_l(2), _t_e_r_m_l_i_b(3), _t_e_r_m_i_o(7), _e_n_v_i_r_o_n(5), _t_e_r_m_c_a_p(5) BBBBUUUUGGGGSSSS Can only be run from a script if the script is first passed through _s_c_r_i_p_t_s_e(1). Tabs could be handled better. This is because _s_e was originally written for Prime computers. Does not check whether or not it has been put into the background (this is to allow _s_e to be used with the USENET news software, which does a poor job of signal handling for child processes). Occasionally flakes out the screen when doing line inserts and deletes, due to problems within the _t_e_r_m_l_i_b(3) package in putting out the right number of padding characters. Type a control-] to redraw the screen. The auto-indent feature does not recognize a line consisting of just blanks and then a "." to terminate input, when the "." is not in the same position as the first non-blank character of the previous line. Page 19 (printed 3/12/87) SSSSEEEE((((1111)))) UUUUNNNNIIIIXXXX 5555....0000 ((((llllooooccccaaaallll)))) SSSSEEEE((((1111)))) There is no global undo capability. The help screens could use a rewrite. AAAAUUUUTTTTHHHHOOOORRRRSSSS _S_e started out as the version of _e_d that came with the book "Software Tools," by Kernighan and Plauger, which was written in Ratfor. On the Pr1me computers at the School of Information and Computer Science at Georgia Tech, Dan Forsyth, Perry Flinn, and Alan Akin added all the enhancements suggested in the exercises in the book, and some more of their own. Jack Waugh made extensive modifications to turn the line editor into a screen editor; further work was done by Dan Forsyth. All of this was in an improved Georgia Tech version of Ratfor. Later, Dan Forsyth, then (and now) at Medical Systems Development Corporation, converted the Ratfor version into C, for Berkeley Unix (4.1 BSD). At Georgia Tech, Arnold Robbins took the C version and added many new features and improvements, the most important of which was termlib support and System V support. The existing help screens were edited and completed at that time, as well. This was finished in early 1985. Arnold Robbins is now at ...!emory!arnold, and will make every reasonable attempt to answer any questions anyone may have about _s_e, but in no way promises to support or enhance it. Page 20 (printed 3/12/87) 0707070000020040751007750001460001440000010423510402643501500000400000000616manif [ $# -eq 1 ] then if [ -s /usr/man/1.$1 ] then cat /usr/man/1.$1 exit 0 else echo "$0: cannot find /usr/man/1.$1" >&2 exit 1 fi fi echo "Usage: $0 command_name Only one command name may be specified. This is not a full implementation of the man command as this machine does not have many manual pages. For a list of manual pages available, list the /usr/man directory" >&2 exit 2 0707070000020041001007550001460001440000010423520402643501500001100000000033MAKEcpiocpio -ocBv < Files > SE+IN 0707070000020041101007550001460001440000010423530402643501500001100000000055MAKEflopcpio -ocBv < Files > /dev/rfp021 dismount -f 0707070000020041271006440001460001440000010423540402643502300000500000122006se.1.\" .\" $Header: se.m4,v 1.6 86/11/12 11:34:49 arnold Exp $ .\" .\" $Log: se.m4,v $ .\" Revision 1.6 86/11/12 11:34:49 arnold .\" Fixed use of BSD. Changed discussion of windows. ADR. .\" .\" Revision 1.5 86/09/19 12:14:12 arnold .\" Typo fix. .\" .\" Revision 1.4 86/07/17 17:52:34 arnold .\" Added discussion of windowing systems, and AUTHORS section. .\" .\" Revision 1.3 86/07/11 15:17:50 osadr .\" Removal of Georgia Tech specific items, and some cleaning up. .\" .\" Revision 1.2 86/05/27 17:50:37 osadr .\" Fix to quote an m4 keyword which was getting deleted. .\" .\" Revision 1.1 86/05/06 13:41:04 osadr .\" Initial revision .\" .\" .\" .ie t \{ .de CW .vs 10.5p .ta 16m/3u 32m/3u 48m/3u 64m/3u 80m/3u 96m/3u .nf .ft CW .cs CW 18 .. \} .el \{ .de CW .nf .ft B .. \} .ie t \{ .de CN .ta 0.5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i .vs .fi .cs CW .ft .. \} .el \{ .de CN .fi .ft .. \} .if n .ds lq "" .if n .ds rq "" .if t .ds lq `` .if t .ds rq '' .TH SE 1 local .SH NAME se \- screen editor .SH SYNOPSIS .B se [ .B \-\-acdfghiklmstuvwxyz ] [ file ... ] .SH DESCRIPTION .I Se is a screen oriented version of .IR ed (1). It accepts the same commands with a few differences. .PP .I Se must be run from a CRT terminal. It uses the .IR termlib (3) terminal operations library, which retrieves terminal capabilities from the .B /etc/termcap database. For .I se to function, all of the following must be true: .IP 1. You must have the environment variable \*(lqTERM\*(rq set to the name of your terminal type. .IP 2. The .B /etc/termcap database must be accessible, and contain an entry for your terminal; or the \*(lqTERMCAP\*(rq environment variable must contain a description for your terminal. (See .IR termlib (3) for details.) .IP 3. Your terminal must have the capability to do cursor motion. .PP .I Se first clears the screen, draws in its margins, and executes the commands in the file .BR ./.serc , or failing that, .BR $HOME/.serc , if either file exists. It then processes the command line, obeying the options given there, and begins reading your file (if you specified one). The screen it draws looks something like this. (The parenthesized numerals are not part of the screen layout, but are there to aid in the following discussion.) .PP .CW \fR(1) (2) (3)\fP A | B |#include C | D *| register int i; E | . -> | for (i = 1; i <= 12; i++) G | putc ('\en', stderr); $ | cmd> |_ \fR(4)\fP 11:39 myfile ........................ \fR(5)\fP .CN .PP The display is divided into five parts: (1) the line number area, (2) the mark name area, (3) the text area, (4) the command line, and (5) the status line. The current line is indicated by the symbol \*(lq.\*(rq in the line number area of the screen. In addition, a rocket .if n (\*(lq\fB->\fP\*(rq) .if t (\*(lq\f(CW->\fP\*(rq) is displayed to make the current line more obvious. The current mark name of each line is shown in the markname area just to the left of the vertical bar. Other information, such as the number of lines read in, the name of the file, and the time of day, are displayed in the status line. .PP The cursor is positioned at the beginning of the command line, showing you that .I se awaits your command. You may now enter any of the standard .I ed commands and .I se will perform them, while making sure that the current line is always displayed on the screen. .PP You can set options to control the behavior of .I se on the command line, simply by using a \*(lq\-\*(rq, followed by the option letter, and any parameters that the option may take. These options can also be set after invoking .I se with the options command, \*(lqo\*(rq, explained in detail in the section on commands. Here is a summary: .sp .nf opt = a | c | d[\fIdir\fP] | f | g | h | i[\fIa\fP | \fIindent\fP] | k | l[\fIlop\fP] | lm[\fIcol\fP] | m | s[\fIfiletype\fP] | t[\fItabs\fP] | u[\fIchar\fP] | v[\fIcol\fP] | w[\fIcol\fP] | x | y[\fIkey\fP] | z | -[\fIlnr\fP] .fi .sp There are only a few other things that you need know to successfully use .IR se : .IP 1. If you make an error, .I se automatically displays an error message in the status line. It also leaves your command line intact so that you may change it using in-line editing commands (see the \*(lqv\*(rq command). If you don't want to bother with changing the command, just hit .SM DEL to erase the command. .IP 2. The \*(lqp\*(rq command has a different meaning than in .IR ed . When used with line numbers, it displays as many of the lines in the specified range as possible (always including the last line). When used without line numbers, \*(lqp\*(rq displays the previous page. .IP 3. The \*(lq:\*(rq command positions a specified line at the top of the screen (e.g., \*(lq12:\*(rq positions the screen so that line 12 is at the top). If no line number is specified, \*(lq:\*(rq displays the next page. .PP Keeping these few differences in mind, you will see that .I se can perform all of the functions of .IR ed , while giving the advantage of a \*(lqwindow\*(rq into the edit buffer. .PP Below is a summary of line number expressions, regular expressions and commands. Where there is no difference between .IR se " and " ed no explanation is given. .SS "Line Number Expressions" .PP .TP .I n .IR n th line. .TP \&. current line. .TP $ last line. .TP ^ previous line. .TP \- previous line. .TP .RI "capital letter " A .IR A th line on the screen. .I Se has a number of features that take advantage of the window display to minimize keystrokes and speed editing. In the line number area of the screen, .I se displays a capital letter for each line, but in \*(lqabsolute line number\*(rq mode (controlled by the \*(lqoa\*(rq command; see the options command) .I se displays the actual line number of each line. .TP # number of the first line on the screen. .TP .RI / "regular expression" [/] next line with pattern. .TP .RI ? "regular expression" [?] previous line with pattern. .TP >name number of the next line having the given markname (search wraps around, like //). .TP \*(rq or \*(lq<\*(rq. If \*(lq>\*(rq is specified, the default behavior is selected: the line following the deleted lines becomes the new current line. If \*(lq<\*(rq is specified, the line immediately preceding the deleted lines becomes the new current line. If neither is specified, the current value of .I dir is displayed in the status line. .TP f selects Fortran oriented options. This is equivalent to specifying the \*(lqot7 +3\*(rq option, and \*(lqXTABS\*(rq is turned on (i.e. tabs are expanded). .TP g controls the behavior of the \*(lqs\*(rq (substitute) command when it is under the control of a \*(lqg\*(rq (global) command. Initially, if a substitute inside a global command fails, .I se will not continue with the rest of the lines which might succeed. If \*(lqog\*(rq is given, then the global substitute will continue, and lines which failed will not be affected. Successive \*(lqog\*(rq commands will toggle this behavior. An explanatory message is placed in the status line. .TP h controls the use of hardware line insert/delete on terminals that have that capability. By default, line insert/delete will be used if available. It is occasionally useful to turn this option off when using the editor on a terminal which can't keep up, or if the communications lines may be scrambling the control characters. Each successive \*(lqoh\*(rq merely toggles a switch within the editor. An explanatory message is placed in the status line. .TP .RI "i\^[ a | " indent " ]" selects indent value for lines inserted with \*(lqa\*(rq, \*(lqc\*(rq and \*(lqi\*(rq commands (initially 1). \*(lqa\*(rq selects auto-indent which sets the indent to the value which equals the indent of the previous line. If neither \*(lqa\*(rq nor .I indent are specified, the current indent value is displayed in the status line. .TP k indicates whether the current contents of your edit buffer have been saved or not by printing either a \*(lqsaved\*(rq or \*(lqnot saved\*(rq message on your status line. .TP .RI l\^[ lop ] sets the line number display option. Under control of this option, .I se continuously displays the value of one of three symbolic line numbers. .I lop may be \*(lq.\*(rq, \*(lq#\*(rq, or \*(lq$\*(rq. If .I lop is omitted, the line number display is disabled. .TP .RI lm\^[ col ] sets the left margin to .I col which must be a positive integer. This option will shift your entire screen to the left, enabling you to see characters at the end of the line that were previously off the screen; the characters in columns 1 through .I col \- 1 will not be visible. You may continue editing in the normal fashion. To reset your screen enter the command \*(lqolm 1\*(rq. If .I col is omitted, the current left margin column is displayed in the status line. .TP m controls notification of the presence of existing mail and/or the arrival of new mail in the user's mail file. The mail file is taken from the \*(lqMAIL\*(rq variable in the user's environment. On startup, if the mail file is not empty, .I se will remark, \*(lqYou have mail.\*(rq Then, if new mail arrives, .I se will remark, \*(lqYou have new mail,\*(rq and ring the terminal's bell. The \*(lqm\*(rq option simply toggles a notification switch, so that the user can turn off this notification. The \*(lqom\*(rq command displays the current setting of the notify switch in the status line. .TP s\^[d | data | as | s | c | h | n | nr | nroff | p | r | f] sets other options for case, tabs, etc., for data files, \*(lqd\*(rq or \*(lqdata\*(rq, assembly files, \*(lqas\*(rq or \*(lqs\*(rq, C files, \*(lqc\*(rq, include files, \*(lqh\*(rq, nroff files, \*(lqn\*(rq or \*(lqnr\*(rq or \*(lqnroff\*(rq, ratfor files, \*(lqr\*(rq, pascal files, \*(lqp\*(rq, and fortran files, \*(lqf\*(rq. Options set for data and nroff files are \*(lqow74\*(rq and \*(lqot+4\*(rq; for assembly files \*(lqot 17+8\*(rq and \*(lqXTABS\*(rq is turned on; for C, include, pascal and ratfor files \*(lqow74\*(rq, \*(lqot+4\*(rq and \*(lqXTABS\*(rq is turned on; for fortran files \*(lqot 7+3\*(rq and \*(lqXTABS\*(rq is turned on. If \*(lqXTABS\*(rq is turned on then tabs are expanded. If no argument is specified the options effected by this command revert to their default value. .TP .RI t\^[ tabs ] sets tab stops according to .IR tabs . .I Tabs consists of a series of numbers indicating columns in which tab stops are to be set. If a number is preceded by a plus sign (\*(lq+\*(rq), it indicates that the number is an increment; stops are set at regular intervals separated by that many columns, beginning with the most recently specified absolute column number. If no such number precedes the first increment specification, the stops are set relative to column 1. By default, tab stops are set in every third column starting with column 1, corresponding to a .I tabs specification of \*(lq+3\*(rq. If .I tabs is omitted, the current tab spacing is displayed in the status line. Examples .sp .CW ot 1 4 7 10 13 16 19 22 25 28 31 34 ... ot +3 ot 7 +3 .CN .sp Once the tab stops are set, the control-i and control-e keys can be used to move the cursor from its current position forward or backward to the nearest stop, respectively. .TP .RI u\^[ chr ] Normally, .I se displays a non-printing character (e.g. \s-1NEWLINE\s+1, \s-1TAB\s+1 ...) as a blank. With this option, you can select the character that .I se displays in place of unprintable characters. .I Chr may be any printable character. If .I chr is omitted, .I se displays the current replacement character on the status line. Non-printing characters (such as .I se control characters), or any others for that matter, may be entered by hitting the .SM ESC key followed immediately by the key to generate the desired character. Note, however, that the character you type is taken literally, exactly as it is generated by your terminal, so case conversion does not apply. .TP .RI v\^[ col ] sets the default \*(lqoverlay column\*(rq. This is the column at which the cursor is initially positioned by the \*(lqv\*(rq command. .I Col must be a positive integer, or a dollar sign ($) to indicate the end of the line. If .I col is omitted, the current overlay column is displayed in the status line. .TP .RI w\^[ col ] sets the \*(lqwarning threshold\*(rq to .I col which must be a positive integer. Whenever the cursor is positioned at or beyond this column, the column number is displayed in the status line and the terminal's bell is sounded. If .I col is omitted, the current warning threshold is displayed in the status line. The default warning threshold is 74, corresponding to the first column beyond the right edge of the screen on an 80 column crt. .TP x toggles tab compression and expansion (\*(lqXTABS\*(rq). If XTABS is off, \*(lqox\*(rq turns it on for subsequent \*(lqr\*(rq, and \*(lqw\*(rq, commands. Be aware that the \*(lqe\*(rq command checks the source option for files; use the \*(lqex\*(rq command to force tab expansion. .TP .RI y\^[ key ] allows you to edit encrypted files. \*(lqoy\*(rq followed by a key will cause the \*(lqe\*(rq, \*(lqr\*(rq, and \*(lqw\*(rq commands to encrypt and decrypt files using .IR crypt (1). \*(lqoy\*(rq by itself will toggle the current encryption setting. If there is no current key, .I se will ask you for one. Echoing is turned off while you type your key in, and .I se asks you to type it in twice, just to be sure. If encryption is turned on, and you type a plain \*(lqoy\*(rq, it will be turned off. Note that doing so causes .I se to forget the value of the encryption key. Encryption in indicated by the message \*(lqENCRYPT\*(rq in the status line. The key is .I never shown on your screen. .TP z suspends the editor (puts it in the background) and returns to the user's shell. (It has to be a shell that understands Berkeley job control, or else you'll be in trouble.) The editor will warn you if the edit buffer has not been saved. This is the .I only way to suspend the editor; the editor uses control-z for its own purposes (see the section on control characters, below). If you normally run .B /bin/sh without job control, this command has no effect at all. .sp On .SM UNIX systems without the Berkeley job control mechanism, this option will be recognized, but will have no effect. Instead, an explanatory message will be placed in the status line. .TP .RI \-[ lnr ] splits the screen at the line specified by .I lnr which must be a simple line number within the current window. All lines above .I lnr remain frozen on the screen, the line specified by .I lnr is replaced by a row of dashes, and the space below this row becomes the new window on the file. Further editing commands do not affect the lines displayed in the top part of the screen. If .I lnr is omitted, the screen is restored to its full size. .RE .TP (.,.)\^p Print Prints all the lines in the given range. As much as possible of the range is displayed, always including the last line; if no range is given, the previous page is displayed. The current line pointer is left at the last line printed. .TP q\^[!] Quit \*(lqq!\*(rq, exit immediately, is the same as \*(lqQ\*(rq in .IR ed . .TP (.)r\^[x] [filename] Read If no line number is specified, the named file is read starting after current line (as opposed to .I ed where the file is read at the end of the edit buffer). \*(lqrx\*(rq causes tabs to be expanded in the lines read. .TP .RI "(.,.)\^s\^[\^/" "reg expr" / sub "\^[/]\^[g]\^[p]] Substitute" If no pattern and replacement are specified after the \*(lqs\*(rq, .I se will behave as if you had typed \*(lqs//%/\*(rq, i.e. for the saved search pattern, substitute the saved replacement pattern. To just delete a pattern, you may type \*(lqs/stuff\*(rq, and .I se will behave as if you had typed \*(lqs/stuff//\*(rq. .TP (.,.)t Copy (\*(lqTo\*(rq is the .I ed mnemonic). .TP u\^[d] Undo \*(lqu\*(rq undoes the effects of the previous command, on the .I last line affected (for instance a substitute command). \*(lqud\*(rq undoes the last delete, i.e. it inserts the last deleted line after the current line. .I Se does not have a global undo capability. .TP (.,.)\^v oVerlay \(em screen oriented editing Full screen editing with .I se is accomplished through the use of control characters for editing functions. With screen oriented editing, control characters may be used to modify text anywhere in the buffer. A control-v may be used to quit overlay mode. A control-f may be used to restore the current line to its original state and terminate the command. Since .I se supports such a large number of control functions, the mnemonic value of control character assignments has dwindled to almost zero. About the only thing mnemonic is that most symmetric functions have been assigned to opposing keys on the keyboard (e.g., forward and backward tab to control-i and control-e, forward and backward space to control-g and control-h, skip right and left to control-o and control-w, and so on). We feel pangs of conscience about this, but can find no more satisfactory alternative. If you feel the control character assignments are terrible and you can find a better way, you may change them by modifying the definitions in .I se and recompiling. .sp Except for a few special purpose ones, control characters can be used anywhere, even on the command line. (This is why erroneous commands are not erased \(em you may want to edit them.) Most of the functions work on a single line, but the cursor may be positioned anywhere in the buffer. Refer to the next section which describes each control character in detail. .TP (1,$)\^w\^[+ | > | !] [filename] Write Write the portion of the buffer specified to the named file. If \*(lq+\*(rq or \*(lq>\*(rq is given, the portion of the buffer is appended to the file; otherwise the portion of the buffer replaces the file. \*(lqw!\*(rq, write immediately, is the same as \*(lqW\*(rq in .IR ed . .TP .RI "(1,$)\^x\^/" "reg expr" "/command eXclude on pattern" .TP (.,.)\^y\^[\^/from/to\^[/]\^[p]] TranslYterate (sic) The range of characters specified by \*(lqfrom\*(rq is transliterated into the range of characters specified by \*(lqto\*(rq. The last line on which something was transliterated is printed if the \*(lqp\*(rq option is used. The last line in the range becomes the new current line. As with the substitute and join commands, and pattern searches, the trailing delimiter is optional. .I Se saves both the \*(lqfrom\*(rq and \*(lqto\*(rq parts of the transliterate command: \*(lqy\*(rq is the same as \*(lqy//%/\*(rq, i.e. transliterate the saved \*(lqfrom\*(rq range into the saved \*(lqto\*(rq range. The \*(lq%\*(rq is special only if it is the only character in the \*(lqto\*(rq part of the command. .TP .RI (.,.)\^zb\^\fIleft\fP\^[,\fIright\fP]\^[\fIchar\fP] Draw Box A box is drawn on the given lines, in the given columns, using the given .IR char . This command can be used as an aid for preparing block diagrams, flowcharts, or tables. .sp Line numbers are used to specify top and bottom row positions of the box. .IR Left " and " right specify left and right column positions of the box. If second line number is omitted, the box degenerates to a horizontal line. If right-hand column is omitted, the box degenerates to a vertical line. If .I char is omitted, it defaults to blank, allowing erasure of a previously-drawn box. .sp For example, \*(lq1,10zb15,25*\*(rq would draw a box 10 lines high and 11 columns across, using asterisks. The upper left corner of the box would be on line 1, column 15, and the lower right corner on line 10, column 25. .TP (.)\^= Equals what line number? .TP (1,$)\^~m\^command global exclude on markname Similar to the \*(lqx\*(rq prefix except that \*(lqcommand\*(rq is performed for all lines in the range that do not have the mark name \*(lqm\*(rq. .TP (1,$)\^'m\^command global on markname Similar to the \*(lqg\*(rq prefix except that \*(lqcommand\*(rq is performed for all lines in the range that have the mark name \*(lqm\*(rq. .TP (.)\^: display next page The next page of the buffer is displayed and the current line pointer is placed at the top of the window. .TP .RI "none ![" "\s-1UNIX\s+1 command" "] escape to the shell" The user's choice of shell is taken from the \*(lqSHELL\*(rq environment variable (if it exists), and is used to execute .I "\s-1UNIX\s+1 command" if it is present. Otherwise, an interactive shell is created. After an interactive shell exits, the screen is immediately redrawn. If a command was run, the results are left on the screen, and the user must type .SM RETURN to redraw the editing window. This is how .IR vi (1) behaves. If the first character of the .I "\s-1UNIX\s+1 command" is a `!', then the `!' is replaced with the text of the previous shell command. An unescaped `%' in the .I "\s-1UNIX\s+1 command" will be replaced with the current saved file name. If the shell command is expanded, .I se will echo it first, and then execute it. This behavior is identical to the version of .I ed in .SM UNIX System V. .SS Control Characters .PP The set of control characters defined below can be used for correcting mistakes while typing regular editing commands, for correcting commands that have caused an error message to be displayed, for correcting lines typed in append mode, or for in-line editing using the \*(lqv\*(rq command. .TP control-a Toggle insert mode. The status of the insertion indicator is inverted. Insert mode, when enabled, causes the characters you type to be inserted at the current cursor position in the line instead of overwriting the characters that were there previously. When insert mode is in effect, \*(lqINSERT\*(rq appears in the status line. .TP control-b Scan right and erase. The current line is scanned from the current cursor position to the right margin until an occurrence of the next character typed is found. When the character is found, all characters from the current cursor position up to (but not including) the scanned character are deleted and the remainder of the line is moved to the left to close the gap. The cursor is left in the same column which is now occupied by the scanned character. If the line to the right of the cursor does not contain the character being sought, the terminal's bell is sounded. .I Se remembers the last character that was scanned using this or any of the other scanning keys; if control-b is hit twice in a row, this remembered character is used instead of a literal control-b. .TP control-c Insert blank. The characters at and to the right of the current cursor position are moved to the right one column and a blank is inserted to fill the gap. .TP control-d Cursor up. The effect of this key depends on .IR se 's current mode. When in command mode, the current line pointer is moved to the previous line without affecting the contents of the command line. If the current line pointer is at line 1, the last line in the file becomes the new current line. In overlay mode (viz. the \*(lqv\*(rq command), the cursor is moved up one line while remaining in the same column. In append mode, this key is ignored. .TP control-e Tab left. The cursor is moved to the nearest tab stop to the left of its current position. .TP control-f \*(lqFunny\*(rq return. The effect of this key depends on the editor's current mode. In command mode, the current command line is entered as\-is, but is not erased upon completion of the command; in append mode, the current line is duplicated; in overlay mode (viz. the \*(lqv\*(rq command), the current line is restored to its original state and command mode is reentered (except if under control of a global prefix). .TP control-g Cursor right. The cursor is moved one column to the right. .TP control-h Cursor left. The cursor is moved one column to the left. Note that this .I does not erase any characters; it simply moves the cursor. .TP control-i Tab right. The cursor is moved to the next tab stop to the right of its current position. Again, no characters are erased. .TP control-k Cursor down. As with the control-d key, this key's effect depends on the current editing mode. In command mode, the current line pointer is moved to the next line without changing the contents of the command line. If the current line pointer is at the last line in the file, line 1 becomes the new current line. In overlay mode (viz. the \*(lqv\*(rq command), the cursor is moved down one line while remaining in the same column. In append mode, control-k has no effect. .TP control-l Scan left. The cursor is positioned according to the character typed immediately after the control-l. In effect, the current line is scanned, starting from the current cursor position and moving left, for the first occurrence of this character. If none is found before the beginning of the line is reached, the scan resumes with the last character in the line. If the line does not contain the character being looked for, the message \*(lqNOT FOUND\*(rq is printed in the status line. .I Se remembers the last character that was scanned for using this key; if the control-l is hit twice in a row, this remembered character is searched for instead of a literal control-l. Apart from this, however, the character typed after control-l is taken literally, so .IR se 's case conversion feature does not apply. .TP control-m Kill right and terminate; identical to the .SM NEWLINE key described below. .TP control-n Scan left and erase. The current line is scanned from the current cursor position to the left margin until an occurrence of the next character typed is found. Then that character and all characters to its right up to (but not including) the character under the cursor are erased. The remainder of the line, as well as the cursor are moved to the left to close the gap. If the line to the left of the cursor does not contain the character being sought, the terminal's bell is sounded. If control-n is hit twice in a row, the last character scanned for is used instead of a literal control-n. .TP control-o Skip right. The cursor is moved to the first position beyond the current end of line. .TP control-p Interrupt. If executing any command except \*(lqa\*(rq, \*(lqc\*(rq, \*(lqi\*(rq or \*(lqv\*(rq, .I se aborts the command and reenters command mode. The command line is not erased. This is the only way to interrupt the editor. .I Se ignores the .SM SIGQUIT signal (see .IR signal (2)); in fact it disables generating quits from the terminal. The editor uses .SM "ASCII FS" (control-\e) for its own purposes, and changes the terminal driver to make control-p be the interrupt character. .TP control-] Fix screen. The screen is reconstructed from .IR se 's internal representation of the screen. .TP control-r Erase right. The character at the current cursor position is erased and all characters to its right are moved left one position. .TP control-j Scan right. This key is identical to the control-l key described above, except that the scan proceeds to the right from the current cursor position. .TP control-t Kill right. The character at the current cursor position and all those to its right are erased. .TP control-u Erase left. The character to the left of the current cursor position is deleted and all characters to its right are moved to the left to fill the gap. The cursor is also moved left one column, leaving it over the same character. .TP control-v Skip right and terminate. The cursor is moved to the current end of line and the line is terminated. .TP control-w Skip left. The cursor is positioned at column 1. .TP control-x Insert tab. The character under the cursor is moved right to the next tab stop; the gap is filled with blanks. The cursor is not moved. .TP control-y Kill left. All characters to the left of the cursor are erased; those at and to the right of the cursor are moved to the left to fill the void. The cursor is left in column 1. .TP control-z Toggle case conversion mode. The status of the case conversion indicator is inverted; if case inversion was on, it is turned off, and vice versa. Case inversion, when in effect, causes all upper case letters to be converted to lower case, and all lower case letters to be converted to upper case (just like the alpha-lock key on some terminals). You can type control-z at any time to toggle the case conversion mode. When case inversion is in effect, .I se displays the word \*(lqCASE\*(rq in the status line. Note that .I se continues to recognize alphabetic line numbers in upper case only, in contrast to the \*(lqcase inversion\*(rq option (see the description of options under the option command). .TP control-_ (\s-1US\s+1) Insert newline. A newline character is inserted before the current cursor position, and the cursor is moved one position to the right. The newline is displayed according to the current non-printing replacement character (see the \*(lqu\*(rq option). .TP control-\e (\s-1FS\s+1) Tab left and erase. Characters are erased starting with the character at the nearest tab stop to the left of the cursor up to but not including the character under the cursor. The rest of the line, including the cursor, is moved to the left to close the gap. .sp Use control-p to interrupt the editor. .TP control-^ (control-~, \s-1RS\s+1) Tab right and erase. Characters are erased starting with the character under the cursor up to but not including the character at the nearest tab stop to the right of the cursor. The rest of the line is then shifted to the left to close the gap. .TP .SM NEWLINE Kill right and terminate. The characters at and to the right of the current cursor position are deleted, and the line is terminated. .TP .SM DEL Kill all. The entire line is erased, along with any error message that appears in the status line. .TP .SM ESC Escape. The .SM ESC key provides a means for entering .IR se 's control characters literally as text into the file. In fact, any character that can be generated from the keyboard is taken literally when it immediately follows the .SM ESC key. If the character is non-printing (as are all of .IR se 's control characters), it appears on the screen as the current non-printing replacement character (normally a blank \(em see the options command \*(lqou\*(rq). .SS Windowing Systems On 4.3 BSD, and on the AT&T Unix/PC or 3B1, .I se notices when its current window changes size or is repositioned, and adjusts the screen image accordingly. .SH FILES .TP .B $HOME/.serc .I se initialization file. .TP .BI /usr/tmp/ "process id" . sequence_number for scratch file. .TP .B ./se.hangup where .I se dumps its buffer if it catches a hang-up signal. .TP .B /usr/local/lib/se_h/* help scripts for the \*(lqh\*(rq command. .SH DIAGNOSTICS Self explanatory diagnostics appear in the status line. .SH CAVEATS .I Se will .I never dump its buffer into an encrypted file when it encounters a hang-up, even if encryption was turned on at the time. .SH SEE ALSO .I Software Tools, .I Software Tools in Pascal, .I Software Tools Subsystem User's Guide, .IR ed (1), .IR crypt (1), .IR ksh (1), .IR scriptse (1), .IR sh (1), .IR vi (1), .IR signal (2), .IR termlib (3), .IR termio (7), .IR environ (5), .IR termcap (5) .SH BUGS Can only be run from a script if the script is first passed through .IR scriptse (1). .PP Tabs could be handled better. This is because .I se was originally written for Prime computers. .PP Does not check whether or not it has been put into the background (this is to allow .I se to be used with the .SM USENET news software, which does a poor job of signal handling for child processes). .PP Occasionally flakes out the screen when doing line inserts and deletes, due to problems within the .IR termlib (3) package in putting out the right number of padding characters. Type a control-] to redraw the screen. .PP The auto\-indent feature does not recognize a line consisting of just blanks and then a \*(lq.\*(rq to terminate input, when the \*(lq.\*(rq is not in the same position as the first non-blank character of the previous line. .PP There is no global undo capability. .PP The help screens could use a rewrite. .SH AUTHORS .I Se started out as the version of .I ed that came with the book \*(lqSoftware Tools,\*(rq by Kernighan and Plauger, which was written in Ratfor. On the Pr1me computers at the School of Information and Computer Science at Georgia Tech, Dan Forsyth, Perry Flinn, and Alan Akin added all the enhancements suggested in the exercises in the book, and some more of their own. Jack Waugh made extensive modifications to turn the line editor into a screen editor; further work was done by Dan Forsyth. All of this was in an improved Georgia Tech version of Ratfor. .PP Later, Dan Forsyth, then (and now) at Medical Systems Development Corporation, converted the Ratfor version into C, for Berkeley Unix (4.1 BSD). At Georgia Tech, Arnold Robbins took the C version and added many new features and improvements, the most important of which was termlib support and System V support. The existing help screens were edited and completed at that time, as well. This was finished in early 1985. .PP Arnold Robbins is now at ...!emory!arnold, and will make every reasonable attempt to answer any questions anyone may have about .IR se , but in no way promises to support or enhance it. 0707070000020041361007550001460001440000010533660402643527100000300000145274seR W¹ §”¼¹H .text§” .data ¼¬@.bss ¼ ¼¹H€.lib Ø Ø/< ØN¹1X OQ.˜/HJ˜fÿü/H#È0N¹^ô/N¹1x0<N@NVûÐ nrý N¹`JJ€fv . "n1H€HÀr rp°bdÐ@0; NûJüq ÖTTTTTTTTTTTTTTTTTTTTTTZTTTTTTTTTTTTTTTTTTTTTTTT  TTlTTTâTÚò ² ºTÀ~´ r : j^ œ 6¤ ŒTâìTTTTTTâTÚò ² ºTÀ~´ r : j^ œ 6¤ ŒTâì . R€"n 1 g . R€ 1:f8.¹ ( /9 ( N¹L,XO . R€"n 1 f.¹ (¤/9 (¨N¹ˆòXON¹…ø . R€"nAñ.ˆ/9 (¤N¹)DXO"n"€` Ð . R€"n 1 f ¼.¹ ( /9 ( N¹L,XO.¹ (¤N¹…Ì` Ž.¹ ( /9 ( N¹L,XO . R€"n 1 f p.®N¹0î` b.¹ ( /9 ( N¹L,XOJ¹ (¨o î . R€"n 1 g . R€ 1:f " . R€"n 1 f.¹ (¤/9 (¤N¹ˆòXON¹…ø 9 (¬°¹ (¨m 9 (¨#À (¬ . R€"n 1 f.¹ (¤/9 (¨N¹ˆ8XO . R€"nAñ.ˆ/9 (¤N¹)DXO"n"€ nrý²g †-y ( ûö.ˆ/9 (¤/9 (¨N¹-¼PO .ûö"9 (¤’¹ (¨R#À ( ` J.®Hnûò . R€//.N¹K\Oï rþ°f $.¹ ( /9 ( N¹L,XO.®/9 (¤/9 (¨N¹-¼POrþ°f ðJ9 8f æ.¹ ( N¹mêJ€g Ô.¹ ( N¹mê#À ( ` ¾.¹ ( /9 ( N¹L,XOJ¹ (¨o J . R€"n 1 g . R€ 1:f ~ . R€"n 1 f.¹ (¤/9 (¨N¹ˆòXON¹…ø . R€"nAñ.ˆ/9 (¤N¹nXO/N¹)DXO"n"€` R® .®HnûöHn /.N¹E.Oï rÿ°f nrý nrþ²f è.ˆHnûò/. /.N¹K\Oï rþ°f È.¹ ( /9 ( N¹L,XO.®ûöN¹0:"n"€`  R® .®HnûöHn /.N¹E.Oï rÿ°f nrý nrþ²f h.ˆHnûò/. /.N¹K\Oï rþ°f H.¹ ( /9 ( N¹L,XO.®ûöN¹-"n"€` R® . "n 1 f^"n¼/ . R€"n¼/ . T€"n¼% . V€"n¼/ . X€"n¼  . Z€"nB1`¼p-@ûÖ . R€-@ûÚ`F"n 1\f .ûÚR€1"nÓî °fR®ûÚ` .ûÚ"n1Óî °fB®ûÖ`R®ûÚ .ûÚ"n 1 fÿªJ®ûÖgR`R®ûÚ .ûÚ"nJ1fîS®ûÚ . "n1ÓîûÚ€R®ûÚ nÑîûÚ¼ R®ûÚ nÑîûÚBü Hn /.N¹ZPOrþ°fÔHnûúHnüHn /.N¹N†Oïrþ°f².®Hnûò . R€//.N¹K\Oï rþ°fŒ.¹ ( /9 ( N¹L,XO.®/.ûúHnüN¹3¼PO"n"€`ZR® . "n 1 f^"n¼/ . R€"n¼/ . T€"n¼% . V€"n¼/ . X€"n¼  . Z€"nB1`¼p-@ûÖ . R€-@ûÚ`F"n 1\f .ûÚR€1"nÓî °fR®ûÚ` .ûÚ"n1Óî °fB®ûÖ`R®ûÚ .ûÚ"n 1 fÿªJ®ûÖgR`R®ûÚ .ûÚ"nJ1fîS®ûÚ . "n1ÓîûÚ€R®ûÚ nÑîûÚ¼ R®ûÚ nÑîûÚBü HnûâHx/< 8Hn /.N¹M¬Oïrþ°fþ.¼HnüHn /.N¹WOï rþ°fÚ.®Hnûò . R€//.N¹K\Oï rþ°f´.¹ ( /9 ( N¹L,XO.®ûâHnüNºÂXO"n"€`ˆR® .¼HnüHn /.N¹S Oï rþ°f`.®Hnûò . R€//.N¹K\Oï rþ°f:.¹ ( /9 ( N¹nXO/N¹L,XOHnüN¹.–XO"n"€`R® .¹ ( /9 ( N¹L,XO.®HnûîHn /.pd/pD/N¹KOïrþ°fÄ.®Hnûò/. /.N¹K\Oï rþ°f¢.®/.ûîNºXXO"n"€`ŠR® J¹ (°f¬.®pe/Hn /.N¹KºOï rþ°fZ.®HnûÞHn /.pX/px/N¹KOïrþ°f0Hnþ . S€//.N¹LLOï rþ°f‚HnþNºXO.€/< öN¹1XOp.€/< öN¹‚ÈXON¹iÔN¹n¾HnþN¹9@XO.®ûÞHnþB§Nº^PO"n"€B¹ (¬p°¹ (´m 9 (´#À ( B¹ ö`Ž nrý `‚J¹ (°f¨Hnþ/. /.N¹LLOï rþ°fZHnþNºRXO.€/< öN¹1XOp.€/< ö` R® .®HnûÞHn /.pX/px/N¹KOïrþ°fHnþ . S€//.N¹LLOï rþ°fâ.¹ ( /9 ( N¹L,XO.®ûÞHnþ/9 (¤Nº^PO"n"€`°R® B®ûîB®ûêHnûæHnûîHn /.p+/p>/N¹KOï-@ûæJ®ûîf$HnûæHnûêHn /.p!//N¹KOï-@ûæHnûæHnûÞHn /.pX/px/N¹KOï-@ûæHnþ . S€//.N¹LLOï rþ°f .¹ (´p/N¹L,XO.®ûÞ/.ûê/.ûîHnþ/9 (¤/9 (¨Nº¢Oï`Ì . R€"n 1 f¾.¹ (¸p/N¹L,XO.¹ (¤/9 (¨`` 9 (´"9 (¼’¹ (ÀÒ¹ (¸°m 9 (¼¹ (Àй (¸.€p/N¹L,XOJ¹ (¨np`„ . R€"n 1 f>#ù (¤ (¸#ù (¤ ( #ù (¤ (¬`R® p .€HnûÿHn /.N¹M^Oï rý°gö . "n 1 fä.®.ûÿH€HÀ/N¹5îXO`ÊR® p .€HnûÿHn /.N¹M^Oï rý°g¤ . "n 1 f’.¹ ( /9 ( N¹L,XO.ûÿH€HÀ.€Nº:"n"€`f.¹ ( N¹mê-@ûö.€/N¹L,XO.¹ (¤/9 (¤Nº¨XO`. . R€"n 1 f p.€N¹^Ö/N¹‚ÈXO nrþ`vJ¹ (°fHn /.Nº\`âp #À ú`ÞR® J¹ (°g p #À ú`Æ.®pq/Hn /.N¹KºOï rþ°f¤ . "n 1 f nrÿ `ˆ nrý `|R® J¹ (°f.®Hn /.Nº¨PO`Zp #À ú`NR® . "n1H€HÀ @Bg @bfH.¹ ( /9 ( N¹L,XOR® Hn /.N¹6¨PO"n"€ nrþ²fB¹  n N^Nup`ÿR® .¹ ( /9 ( N¹L,XOHn /.N¹9š`°NVûô`R n "n 1 gì n "n 1 f.¼ :/< °HnþN¹1¨PO`@ n"n ÑÑ.ˆ/< :/< ·HnþN¹1¨Oï HnþN¹1 XO-@ûüS€CîþB1B®ûü`@Cîþ1H€HÀ"|0 1g" .ûüCîþ1H€HÀ.€N¹1†CîþÓîûü€R®ûü .ûüCîþJ1f² nrþ .¼ ½HnþN¹1RXO @-Hûøf nrý p#À úN^Nu.®ûøN¹q¸.®ûøN¹1F`æNVÿäHîÿü n Rpý-@ÿè n "n1H€HÀr-rM°b üÐ@0; NûJüNÌ ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì( ìVÊ ìœøL ìZÖ 0 ì ì ì ì ì.ÊvD z Ê  ì ì ì ì ì ì( ìVÊ ìœøL ìZÖ 0 ì ì ì ì ì.ÊvD z Ê  n R€"n 1 f Bpþ-@ÿèJ¹ $fp`p#À $p°¹ $f .€/< ¿`Zp.€/< âN¹‚ÈXO`ü n R€"n 1 fæpþ-@ÿèJ¹ (Äfp`p#À (Äp°¹ (Äf.€/< N¹‚È`äp.€/< N¹‚ÈXO`š n R€"n 1 f„pþ-@ÿèp°¹ öf .€/< *`°p.€/< 4N¹‚ÈXO`T n R€"n 1 f>pþ-@ÿèp.€/< :`ÿr n R n "n 1 fp.€/< 8` n"n ÑÑ.ˆN¹[l-@ÿèpþ°®ÿèf n"n ÑÑ.ˆ/< 8N¹1XO`È.¼ [/< 8N¹1XO`° n R n "n 1 fpþ-@ÿè`N.® /.N¹g 9 (¸°¹ (´m 9 (´#À ( ` pý°®ÿðg n "n 1 fô .ÿô¹ (¸R€Ð¹ (À°¹ (Ðmÿ.p#À ú`Ì n R€"n 1 f¶J¹  fp`p#À  `¬ n R€"n 1 f@pþ-@ÿèJ¹ (Ôfp`p#À (ÔpA°¹ (Øf pa#À (Øpz` pA#À (ØpZ#À (Üp.€J¹ (Ôg | _` | dHP`ür n R€"n 1 f*J9 8f p.€/< e` p.€/< gN¹‚ÈXO`ú n T€"n 1 gp`l n R€"n 1>fpþ-@ÿèB9 8`® n R€"n 1<fpþ-@ÿèPù 8`Šp#À ú`~ n R n "n 1 f J¹ fp.€/< i`ÿZ.¹ `ø n "n 1$f R€"n 1 f B¹ `(.® /.N¹g|pJ#À (È.¼ â`4pH#À (È.¼ å/< 8N¹1XOp#À ¼`pJ#À (È.¼ ê/< 8N¹1XO.¼ 8N¹[lp.€p°¹ (Ôf | ñ`pH#À (È.¼ í`À | öHPN¹‚ÈXOp .€p°¹ ¼f | ÷` | ýHPN¹‚ÈXOpþ`þòNVýÔpý-@ýÞJ¹ (¨n p#À ú`p 9 (¬°¹ (¨o #ù (¨ (¬.®N¹1 S€-@ýæ.¼ 8N¹1 S€°®ýænp°® fp-@ýú`B®ýú-y (¨ýê`N¹`JJ€gpýN^Nu.®ýêN¹kH-@ýÚB®ýîB®ýò`L"| (ä 1 g*J®ýömJ®ýæm .ýö"n`J®ýöl .ýò"| (ä1CîþÓîýî€R®ýîR®ýò .ýò"| (äJ1gÜ"| (ä 1 gÌ.®ýæ/. .ýò1H€HÀ//< 8N¹fêOï -@ýöp°®ýúf† .ýö°®ýæmzJ®ýæmr .ýæ"n1CîþÓîýî€R®ýî`N .ýò"| (äJ1gD"| (ä 1 g6.®ýæ/. .ýò1H€HÀ//< 8N¹fêOï -@ýö°®ýæmR®ýò`¬ .ýò"| (äJ1fþÊ .ýò"| (ä 1 f .ýîCîþ¼ R®ýî .ýîCîþB1 nýÚ(@ýÿHnýâ/.ýê/.ýêN¹-¼Oï HnþN¹k¶XO-@ýÞpý°®ýÞgD.¹ ( N¹pZ-@ýÚ @.ýÿ(€ƒ(pþ-@ýÞp#À öR®ýê .ýê°¹ (¤oýð .ýÞ`ýôNVÿè n rý J®f J¹ (¨np` J¹ *äf p#À ú`Ì 9 (¨°¹ (¤op`ä 9 (¤°¹ (´op`Ò n rþ #ù (¤ ( .¹ (¤Hxÿ 9 *ä€ (àæ€/N¹p€PO.¹ *è/9 (¤N¹‹öXO-y *èÿìB¹ *èB¹ *ä .ÿìѹ (´J®f.® /9 (¤/9 (¨N¹-¼PO .ÿìѹ (  9 (¬°¹ (¨o #ù (¨ (¬ n N^NuNVýäHî<ÿìvýJ®np`º.®Nº-@p°®f,J¹ 4g .¼ þ`f.¼ /.N¹1RXO-@ÿè`r.¼ ö/.N¹1XOJ€g&p°®gpw°¹ gB—/.N¹1 XOrÿ°fFJ¹ 4g.¼ /.Nº¤XO-@ÿè`.¼ /.N¹1RXO-@ÿèJ®ÿèf p#À ú`Zp!#À úpw#À `Fvþp.€/< N¹‚ÈXO.®N¹pZ$@$.`ÌN¹`JJ€g pýLî<ÿìN^Nu.ŠN¹kpJ¹ ¼fJ®f.®ÿè/< (ä`dx`R„ | (ä 0 Hgðz` Aîýè¼ XR… jD€æˆD€`戺€mâAîýèB0X.®ÿèHnýèN¹1ÌXO.®ÿè çˆ"| (äAñHPN¹1ÌXO 9 (´çˆ"| (àAñµÈdAê` y (à$HR‚´® oÿ0J¹ 4g .®ÿèNº6` .®ÿèN¹1FN¹1’ ®.€N¹…Ìp°®f S€°¹ (´fB¹ ö `þìNVýèHîÿð$nx&$`Ô R€ 2$fR‚ Rƒ"| À²(`° Rƒ"| ÀAñ"R‚²`˜ 2$(g Rƒ"| ÀAñ"R‚²`vR‚x` R„CîýðAñ"R‚² 2/(gJ2(fÞAîýðB0HHnýðN¹1¬XO @-Hýìg&x nýìJ0Hg$ Rƒ"| ÀAñ"nýì±HR„`Ü 2/(fR‚J2(g 2\(fÿ\`ÿ | ÀB08 LîÿðN^NuNVýøJ¹ 4f(‘È N^NuNºÜJ9 8f.¼ /<0¸N¹1¢XOJ9 8gØ n H€HÀ @agn @rg@ @wf².®/< 8/< ;HnþN¹1¨Oï .¼ IHnþN¹1XO-@ýü @`ÿ|.®/< 8/< +HnþN¹1¨Oï .¼ 9`Ä.®/< 8/< KHnþN¹1¨Oï .¼ Z`žNVÿü.®N¹1–N^NuNVÿüN¹“¤N¹hBN¹™¢.¼ \N¹1Ü.€/< 8N¹1XO.¼ sN¹1Ü.€/< 8N¹1XOJ€gB9 8.¼ {/<0¸N¹1¢XOJ9 8g¢N¹™vN¹…$N^NuNqNVýÜHîÿü#î (  n :fAè.ˆN¹k¶-@ýö`N 9 ( ¹ (¸Ð¹ (ÀR€#À (ÐB.ýüJ¹ nJ®n 9 S€lp` 9 S€-@ýò`*.®N¹kH-@ýâB®ýò`R®ýò .ýò"| (ä 1 gê-nýòýêp-@ýö`^N¹—tJ€fˆ 9 (а¹ (¼oN 9 (ÀR€#À (Ð.¹ (À/9 (¼N¹e,XO.¹ ( /9 ( N¹ˆòXO 9 (¬°¹ (¸o #ù (¸ (¬.¹ (ÐN¹ql 9 (а¹ (¼ltR€.€N¹ql`f 9 (а¹ (¼o2S¹ (Ðp.€/9 (ÀN¹–ŒXOp.€/9 (ÐN¹• XOR¹ (¸`$p.€/9 (¼N¹–ŒXOp.€/9 (ÐN¹• XO.¼ ÎN¹„þHnýûHnýò/9 HnýüN¹sÆOï .ýûgÜ . ýûgÔ . ýûgÌB®ýæ ..ýüf . ýýf J.ýþfp-@ýæB®ýî`R®ýî .ýî°®ýêl Cîýü 1 gæ .ýî°®ýêf4 .ýêCîýü 1.f$R€Cîýü 1 f .ýêT€CîýüJ1fp-@ýæJ®ýæg6N¹—tJ€g$p.€/9 (ÐN¹–ŒXOp.€/9 (¼N¹• XOpþ-@ýö`$HnýüN¹k¶XOrý°f-Aýö` .¼ ÓN¹„þR¹ (Ð .ýûg:J¹ o 9 S€-@ýò`B®ýò`R®ýò .ýòCîýü 1 gì-nýòýêB.ýüp°®ýögýœ 9 (¼R€#À (ÐN¹—tJ€gL#ù (¸ *ìB®ýî`0 9 *ìЮýî°¹ (´n .ýî`pÿ$ .ýîåˆ"| *ð#‚R®ýî .ýî°¹ .mÄJ¹ ( fJ¹ (´op#À (  9 (¬°®o#î (¬N¹hB .ýöLîÿüN^NuNVÿèHîÿðpý-@ÿìJ¹ (¨n p#À ú`Œpþ-@ÿì#î ( .¹ (¨N¹pZ(@$9 (¨`B.ŒN¹kp.¼ (äN¹k¶rý°g N¹`JJ€gpý-@ÿì` 9 (¨°®lPL`IìR‚´¹ (¤o¶ 9 (¬".R°m .R€#À (¬ .ÿìLîÿðN^NuNVÿèJ®n nrý p#À ú`´ 9 (¬°®o#î (¬.¼ÿ/. /.N¹p€PO . ®R€‘¹ (´.®N¹n#À (  9 *èѹ . . ®R€#À *è < ". ’®Rçˆ"| (àAñ#È *ä nrþ . ®R€.€/.N¹ŠâXOp#À ö n N^NuNVýèHîÿðpþ-@ýìJ¹ (¨np`¼.®N¹1 R€(&9 (¨.ƒN¹pZ$@.ŠN¹kpp0*.€Hnýð/< (äN¹g¤PO0*t4`Ò¶¹ (¤nÎN¹`JJ€f` U€Cîýð 1 fS‚ 9 (´çˆ"| (àAñµÈdAê` y (à$H.ŠN¹kp ЄS€r2*ÐS€ €cp #À úpýLîÿðN^Nu.„ S€CîýðAñHP/.N¹g¤PO S€Ô€p0*.€ S€CîýðAñHP/< (äN¹g¤POp0*S€Ô€Rƒ`ÿ,#ù (¤ ( HnýðN¹k¶XO-@ýìpþ°®ýìfHnýì/9 (¤/9 (¨Nºý²Oï -@ýìR¹ (  9 (¬°¹ ( o #ù (  (¬ .ýì`ÿ>NVÿäJ¹ (¨np` 9 (¨°®n .°¹ (¤np #À úpýN^Nu.®/9 (¤/9 (¨N¹p€PO .°¹ (¨n 9 (¤¹ (¨R€Ð®#À ( p#À ö 9 (¨°®m ."9 (¬²€l ` 9 (¨°®m .#À (¬pþ`ÿ€NVýä nrþ J¹ (¨f8B¹ ( .¼ ÌN¹k¶"n"€ nrý²gRp#À (¬#À (¨R¹ (¤-y (¨ýò .ýò°¹ (¤n#À (  9 S€-@ýö.¹ ( /9 ( N¹ˆòXON¹…ø 9 ( ¹ (¸Ð¹ (À#À (Ð.¹ ( N¹kH-@ýê @r2(-Aýú "| (â 1 fS®ýúJ®ýöl .ýúS€-@ýö` .ýú"| (ã¼ R®ýú .ýúS€°®ýömà .ýú"| (ã¼  .ýú"| (äB1 .ýúR€.€Hnþ/ N¹g¤POHnýÿHnýö/9 /< (äN¹sÆOï .ýÿf* 9 (¬°¹ ( o #ù (  (¬ 9 (¼R€#À (ÐN^NuHnþ/< (äN¹1POJ€g„ nýê(@ýþ.®/9 ( /9 ( NºûPO-y ( ýî nrþ²f.¼ (äN¹k¶"n"€ nrý²gÿ‚.®ýîN¹mê.€N¹pZ-@ýê @.ýþ(€ƒ(` 9 (¬°¹ ( o #ù (  (¬.ýÿH€HÀ @g" @ gR @ fP 9 ( °¹ (´l&R¹ ( `:p°¹ ( l‘¹ ( `(#ù (´ ( `p°¹ (´m 9 (´#À ( `B®ýö .ýÿgýÄ . ýÿgýº . ýÿgý°R®ýò`ýˆNVý€Hî<ÿìJ¹ $g J®gpþ`pý-@ýÖJ¹ (¨np#À úpýLî<ÿìN^Nu$9 (¨´¹ (¤nÐN¹`JJ€fÄB®ýæB®ýÚ.‚N¹kH$@zÿx`..¼HnýæHnýì | (ä0HH€HÀ/N¹¦ˆOï -@ýâR„ | (äJ0Hgºv`" åˆCîý®#¼ÿÿÿÿ åˆCîý†#¼ÿÿÿÿRƒp ¶€oØp°® gJ®ýÚf$HnýŠHný²/< ö//< (äN¹›ZOï&`vÿpÿ¶€o>ºƒg:p-@ýÚ-Dý®-Cý†.¼HnýæHnýì/.Hný†Hný®/< (äN¹£¬Oï*pÿ¶€gÿ¶„gÿ(`ÿR`8 n "n 1 f| ýæ` n "R npýæ n "n 1 g p#À ú`(J¹ (¨np`ê#ù (¨ ( `H.€N¹kH$@0*z:.…Hnýè/< (äN¹g¤PO U€Cîýè 1 f S€(` S€Cîýè¼ R„`(¸ƒoè S€Cîýè¼ AîýèB0H 9 ( °¹ (¨g°¹ (¤f(` S€Cîýè®ýæR„¸ƒoì` S€Cîýè®ýæ S€Cîýè®ýæ.¼ (äHnýèN¹1XOJ€gr*@ýçHnÿè/9 ( /9 ( NºõxOï rý°gHnýèN¹k¶XOrý°f pýLî<ÿìN^Nu.¹ ( N¹pZ$@.ýç*€*p#À öR¹ (  9 ( °¹ (¤oþ¬#ù (¨ (  9 (¬°¹ ( o #ù (  (¬.¹ ( /9 ( N¹ˆòXON¹…øpþ`ÿxR n "n 1 gì.® /.N¹gB®ýÔ` .ýØR®ýØCîýÜAñ"| öÓîýÔ‘R®ýÔ .ýÔ"| öJ1fÐp-@ýÐ` .ýØR®ýØCîýÜAñ"nÓîÿì‘R®ÿì .ÿì"nJ1fÿ0 .ýØS€CîýÜ 1 fS®ýØ .ýØCîýÜB1HnýÜ/< ÎN¹1PON¹™¢N¹‘p.€/< p/N¹1ÚPON¹1Š-@ÿüpÿ°®ÿüfN¹™vN¹¾p&#À úpýN^NuJ®ÿüfxB—p/N¹1nXOB—p/N¹1nXOJ®ÿègB—/.ÿà/.ÿäN¹1TPO`6J®ýÐgHnýÜ/< N¹1œPOB—HnýÜ/< /.ÿà/.ÿäN¹1TOïp.€N¹1~.¼p/N¹1nXO-@ÿð.¼p/N¹1nXO-@ÿôHnÿøN¹1ÔXO°®ÿüfî.®ÿðp/N¹1nXO-@ÿð.®ÿôp/N¹1nXO-@ÿôp.€/< p/N¹1ÚPO 9 .S€#À .B¹ . .ÿøà€gN¹™vN¹¾p%`þÎJ®ÿèfH.¼ !N¹1œS¹0œm y0 R¹0 @ÿHÀ` .¼0œN¹1’-@ýÌr °gpÿ°®ýÌfÄN¹™vN¹¾N¹…$`p.€/< ;N¹‚ÈXOpþ`þ\NVýèN¹ˆ Nºfpþ-@ÿø`¦åˆ"n .±HnýðN¹1XO.¹ (Ìp//9 .$HnýðN¹XOï .-ýðf>HnýðN¹1 XOR€-@ÿôS€Cîýð¼  .ÿôCîýðB1B®ÿôHnÿôHnýðN¹&`HnýðN¹9@XOB—Hnýð/9 (´N¹ZPO-@ÿøR¹ .$pþ°®ÿøf 9 .$°®mÿHpý°®ÿøfp'°¹ úfN¹`ÊN¹b:`p°¹ (´m 9 (´#À ( B¹ öp#À (¬N¹…øpý°®ÿøgB.ýðB®ÿðN¹`J ¹è .o$ 9 (´Ð¹ *è.¹ .N¹1ªr°nN¹j N¹a` 9 (¼R€#À (Ð.¼ ’N¹„þHnýïHnÿðB§HnýðN¹sÆOïp.€/< —N¹‚ÈXO`’.ýïH€HÀ @g @ fJ 9 ( °¹ (´l&R¹ ( `4p°¹ ( l‘¹ ( `"#ù (´ ( `p°¹ (´m 9 (´#À ( .¹ ( /9 ( N¹ˆòXON¹…øHnýïHnÿðB§HnýðN¹sÆOï .ýïgÿh . ýïgÿ^ . ýïgÿT.¼ ˜N¹„þ-y ( ÿüp#À úB®ÿôHnÿøHnÿôHnýðNºàOï rþ°fRHnÿøHnÿôHnýðNºlOï rþ°fHnÿøHnÿüHnÿôHnýðNºÞ`pý°®ÿøgHnÿøB§/.ÿôHnýðN¹g"n 1<fp-RÿðR’9 „H€HÀ.€/< „HR/.NºÔOï rý°f-Aÿì`8.Š/.N¹gf.‹B§`.‹pÿ/NºÈXO-@ÿìS’`: "n1H€HÀ"|0 1fÿ¨ "n 1#f&¹ (¸`pÿ-@ÿìpþ°®ÿìfR’(®ÿì .ÿìLîÿôN^NuNVÿäHîÿô$n &n(npÿ-@ÿìB“.ŒHSHR/.NºýOï rþ°fŒ-AÿìB.ÿë`R’ "n 1 gð "n 1-g "n 1+f "nqÿëR’.ŒHnÿðHR/.Nºü°Oï rþ°f .-ÿëf .ÿð‘“` .ÿðÑ“pÿ°”f J.ÿëgpý(€pþ°”gÿ|J“m °¹ (´o pý(€p#À úpý°”f-@ÿì`(®ÿì .ÿìLîÿôN^NuNVÿäHîÿð nrþ pÿ-@ÿì-@ÿè n "n 1gg "n 1Gf¶ n V€"n1 R€"n1°f” n T€ 1^g n T€"n 1$fn n X€"n 1mg X€"n 1MfH n Z€"n 10f4 \€"n 1 f$p#À †.€/< ™N¹‚ÈXOpþLîÿðN^Nu n "n 1'g "n 1~fL n "n 1'fp-@ÿè`B®ÿè n R9 „H€HÀ.€/< „/. /.NºäOï "n"€ nrþ²f| n "n 1gg "n 1Gfp-@ÿì n "n 1xg "n 1XfB®ÿìpÿ°®ÿìg( n R.® /.Nº$XOrý°f n ` n R nrþ²fpÿ°®ÿìf°®ÿèf nrÿ ` nrþ²f.¹ (´p/NºèXO nrþ²f\p.€/< žN¹‚ÈXO$y (àt`,ª 9 (´çˆ"| (àAñµÈdAê` y (à$HR‚´¹ (¨mÌ´¹ (¤nèN¹`JJ€g nrý `ìvpÿ°®ÿèg.p°®ÿèf*°9 „gJ®ÿèf<*°9 „g,pÿ°®ÿìg".ŠN¹kp.¼ ö/< (äN¹›XO°®ÿìfv gê`ª 9 (´çˆ"| (àAñµÈdAê` y (à$HR‚`ÿ>ª 9 (´çˆ"| (àAñµÈdAê` y (à$HR‚´¹ (´oÌp.€/< £N¹‚ÈXO n `ýZNVÿðHî ÿôJ¹ †g|.¹ (´p/N¹qXO#ù (´ ( B¹ †p#À ö°¹ (¬lp` 9 (¬#À (¬p.€/< ¤N¹‚ÈXO.¹ ( /9 ( N¹ˆòXON¹…øpþLî ÿôN^Nu nrþ n $$y (àvRƒ 9 (´çˆ"| (àAñµÈdAê` y (à$H*gVª#à (  n ƒ n ‚.®/. /.NºöÎPOrþ°f.®p/ n //.N¹ I "n1 .ÿøS€1°f$ .ÿøU€"n 1\f .ÿøW€ 1\gT®ÿø n "n1Óîÿø€R®ÿø nÑîÿø¼ R®ÿø nÑîÿøBü `Ì .ÿø"n "R°m: I "n1Óîÿø²f$ .ÿøS€"n 1\f’ .ÿøU€ 1\g‚T®ÿø n "n1Óîÿø€R®ÿø nÑîÿø¼ R®ÿø nÑîÿøBü `@ .ÿø"n 1gg"n 1Gf’S®ÿø .ÿø"n "R°m: I "n1Óîÿø²f$ .ÿøS€"n 1\fä .ÿøU€ 1\gÔT®ÿø n "n1Óîÿø€R®ÿø nÑîÿø¼ R®ÿø nÑîÿøBü `’ n "n1Óîÿø²f: n "n1Óîÿø²f` .ÿøS€"n 1\fL .ÿøU€ 1\g>R®ÿø n "n1Óîÿø€R®ÿø nÑîÿø¼ R®ÿø nÑîÿøBü .® n "n1H€HÀ/ R€//.N¹¢^Oï "n "€rý°f `ûú.®/< ŠN¹1XO n R€"n 1gg R€"n 1Gf n R nr ` nBp#À úpþ`û NVÿì n -Pÿúp#À ú .ÿú"nqÿÿ . ÿÿf."n¼/R®ÿú nÑîÿú¼ R®ÿú nÑîÿú¼/`b .pÿÿg .PÿÿfŒ .ÿúR€"n 1 fx .ÿú¼/R®ÿú nÑîÿú¼ R®ÿú nÑîÿú¼/R®ÿú nÑîÿú®ÿÿR®ÿú nÑîÿú¼ R®ÿú nÑîÿúB n -Pÿú .ÿú"nqÿÿü  .ÿúR€"n 1 f nBp`Ú .ÿúR€-@ÿö`R®ÿö .ÿö"n 1 fìS®ÿö .ÿö"n 1pg"n 1PfzS®ÿö .ÿö"n1°.ÿÿf& .ÿöS€ 1\f¾ .ÿöU€"n 1\f`¨T®ÿö .ÿö"n®ÿÿR®ÿö nÑîÿö¼ R®ÿö nÑîÿöBü `l .ÿö"n1°.ÿÿf .ÿöS€ 1\fJ .ÿöU€"n 1\g8R®ÿö .ÿö"n®ÿÿR®ÿö nÑîÿö¼ R®ÿö nÑîÿöBü  .ÿúR€-@ÿö`8 .ÿö 1 g .ÿö"nJ1f . ÿÿf6`&Hnÿö/.N¹¦´POR®ÿö .ÿö"n1°.ÿÿf¶ .ÿö®ÿú°®opýN^NuB®ÿò`( .ÿú°®ÿöl$Hnÿú/.N¹¦´PO"nÓîÿò€R®ÿòR®ÿú`Ò .ÿò"nB1 n ®ÿúp#À úpþ`ÿ¨NVÿø`R n "n 1 gìB®ÿü`0 .ÿü".S°l n "n1"nÓîÿü€R®ÿü n R n "n 1 g "n 1 g n J1fÿ¤ .ÿü"nB1 .ÿüN^NuNVÿø n ¹ (  n .N¹pZ-@ÿü.®Hnÿü/. N¹i&PO nÿü(°9 „fpþN^Nu n °¹ ( g N¹`JJ€gºp#À úgp #À úpý`ÎNVÿìHîÿüp#À ú n "nJ1g¶ n R€"n 1%f  "n1 n T€1°g n T€"n 1 fp.¼ Š/.N¹1XO n T n "n 1 f8 U€"n1 n ‚ n R€"n¼  n T€"nB1ü `( n -Pÿð`R®ÿð .ÿð"nJ1fîU®ÿð .ÿð"n °‘f> I "n1 R€"n‚ n T€"n¼  n V€"nB1` .ÿð"n 1pg"n 1Pf’S®ÿð .ÿð"n "R°m: I "n1Óîÿð²f$ .ÿðS€"n 1\fÊ .ÿðU€ 1\gºT®ÿð n "n1Óîÿð€R®ÿð nÑîÿð¼ R®ÿð nÑîÿðBü `x n "n1Óîÿð²f .ÿðS€"n 1\fL .ÿðU€ 1\g>R®ÿð n "n1Óîÿð€R®ÿð nÑîÿð¼ R®ÿð nÑîÿðBü B®ÿô n R€-@ÿø.®Hnÿô/.Hnÿø/. "n1H€HÀ/N¹¤XOï n "n1Óîÿø²f.®Hnÿô/.B§N¹¦ˆOï J€f pýLîÿüN^Nu.®/< ŠN¹1XO n ®ÿøp#À úpþ`ÐNVÿøHîÿü n "nJ1g n R€"nJ1frý `\ n "n1 R€"n1°f n R`4.¼ ö n "n1H€HÀ/ R€//.N¹žOï "n "€J9 öfp#À úpýLîÿüN^Nu n rý²fB9 öp#À ú `Úpþ`ÖNVÿø n ¹ (  n .N¹pZ-@ÿü.®Hnÿü/. N¹i&PO.®ÿüN¹kp.¼ ö/< (äN¹›XOr°fpþN^Nu n °¹ ( g N¹`JJ€gªp°¹ úfp#À úpý`ÎNVÿàB®ÿü` .ÿüåˆ"| .(B±R®ÿü ®ÿümâpþ-@ÿäB®ÿðp-@ÿìB®ÿü`R®ÿü .ÿü"n 1 gì .ÿü"nJ1g¢"n 1 g” .ÿü 1+f R®ÿüp-@ÿè`B®ÿèHnÿü/.N¹gXON¹‘N¹™¢N^NuNVÿüN¹™¢.® /< P/<0¸N¹1¢POB—p/N¹1nXOJ®gp.€N¹1/N¹1ÆXON^Nup.€N¹1x`ðNVÿøp#À .$.¼ TN¹1¬.€N¹˜frý°fNºN¹n¾N¹•B®ÿü`"| Õ<¼ R®ÿü .ÿü°¹ (Ìmä .ÿü"| ÕNº dXOpý°®ÿìg .ÿüR®ÿü"n®ÿß .ÿø°®ÿül-nÿüÿø . ÿßfÚ n¼ `Î .ÿø"nB1pý°®ÿìfp.€/< v/N¹gÐPO`pý°®ÿðfp.€/< xNº àXO-nÿìÿðpþ-@ÿì .ÿà°®ÿüo-nÿüÿà`$ .ÿà".ÿü’¹ (ÌP°l .ÿü¹ (ÌP€-@ÿà .ÿà°® fp.€/9 (Ðp|` .ÿà°® op.€/9 (Ðp`Þ 9 (ÌS€.€p//9 (Ð nÑîÿàHPNº ºOï .ÿü"9 (ÈS°f$ .ÿô"9 (ÈS°lp.€/< y/N¹gÐPO .ÿü"9 (ÈS°mp.€ .ÿüR€//< {Nº nPO` .ÿô"9 (ÈS°mp.€/< €Nº ªXO .ÿü^€®ÿà.€/9 (ÐN¹“ÒXO-nÿüÿôNº@@ÿßH€HÀS€r~°b°Ð@0; NûJüD¦šš‚þœLšL”.Þ  ´ &ŠŒD„PýrʘîÞýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrýrŠ.®HnÿøHnÿüHnÿì .ÿüS€`‚Hnÿì/.ÿüp/Nº@Oï -@ÿäpý°®ÿìgØ-nÿäÿü`ÎB®ÿü`ÆHnÿì/./.ÿø/.ÿüp/.ÿßH€HÀ/NºOï-@ÿèpý°®ÿìg’-nÿèÿü`ˆ.®HnÿøHnÿüHnÿì .ÿüS€/NºOïpý°®ÿìg^.®HnÿøHnÿì/.ÿüp`vHnÿì/.ÿüp/NºŽOï -@ÿäpý°®ÿìg&-nÿäÿü.®HnÿøHnÿì/.ÿü .ÿô®ÿä`2B®ÿü.®HnÿøHnÿì/.ÿü/.ÿôNºº`ªHnÿì/./.ÿø/.ÿüB§.ÿßH€HÀ/NºNºXO Lî ÿøN^NuNVÿü . Ю"n°‘o nrý p.€/< >NºXXON^NuJ®oö . Ю"nAñ.ˆ IÑî HPN¹1XO n".“`ÈNVÿäHî <ÿè$.$n &.&n Ђ €ÿm" nrý p.€/< >NºâXOLî <ÿèN^Nu( Ђ*` ³HXS„S…¸ƒlòÕ’`ÚNVÿèHî<ÿì$.$n &n(n*nJ‚m ‚ÿmpý$€p.€/< >Nº~XOLî<ÿìN^Nu&‚ °“lî¼ R”`ðNVýðHî ÿô$n$. &..‚HR/< ¢HnýôN¹1¨Oï .ƒHnýôNº(XOLî ÿôN^NuNVÿìHî<ÿð. &. (.  m m9  `H€HÀJƒmj¶¹ .lbJ„m^¸¹ (ÌlV.¼È N¹1ž"| 80Añ0H°g6.„/N¹“ÒXO.¼È N¹1ž"| 80Añ…HH€HÀ.€N¹“ 1LîÿüN^Nu <À`îR‚`¬NVÿü.® HxT/.N¹1ÀPOJ€lpÿN^NuJ¹ 2fp#À 2 n 0(@3À0p`ÖNVÿü n| n|ÿ n| n| nPþ? nh nhÿpN^NuNVÿü.® HxT/.N¹1ÀPOJ€lpÿN^Nup`øNqNVÿÌHîÿô$n&n (J`,HnÿÐHnÿÐHS Š/HRNº OïJ€m pLîÿôN^NuRLJfÐp`ìNVÿìHîÿü nÑî -Hÿô$n`Ü *frRJ-nÿôÿø nÿøJg.ŠHnÿø/.NºÆPOJ€fä.ŠNºàÕÀ`(.®/.HR ®//.Nºÿ”Oï-@ÿðlS®ÿø nÿø±îÿôdÎ nÑîÿð-Hÿô`j (f*H€HÀåˆ"n` )f*H€HÀåˆ"nAñ".ÿô’® ` .ŠHnÿô/.Nº,POJ€f pÿLîÿüN^Nu.ŠNº:ÕÀJfÿ" .ÿô®`ÞNVÿðHî ÿô n $PvJgÌtÿ nH€HÀ @[g(nL @$g @.f’  g–`x  fŠ`v nAè.ˆH€HÀ/NºˆXOr°ff$`` @^gB @ag, @nf@  gF nAè.ˆH€HÀ/NºJXOJ€f*t`&"n°)ft`µîft` .¼ ˆN¹_jJ‚m n Õv Lî ÿôN^NuNVÿðHî ÿô. $n H€HÀGò`´f pLî ÿôN^NuSK·Êbêp`ìNVÿøHîÿü$nH€HÀ @.gNn @$gD @(g: @)g4 @*g2`4 @[g @^g$ @ag @nf*H€HÀT€LîÿüN^Nup`òp`î.¼ ¡N¹_j`àNVÿ¸p-@ÿê-@ÿòpÿ-@ÿâ-@ÿæ-n ÿú .ÿú"n1°.gÆ .ÿúJ1gº-nÿêÿî .ÿú"n 1.f.¼€Hnÿê/.p.`& .ÿú"n 1^f°® f.¼€Hnÿê/.p^/`V .ÿú"n 1$f"R€"n1°.f.¼€Hnÿê/.p$`È .ÿú"n 1[f$Hnÿê/.Hnÿú/ Nº"Oïrý°f² N^Nu .ÿú"n 1*fx°® op-nÿòÿî .ÿî"n 1^gÎ"n 1$gÀ .ÿî 1*g² .ÿî"n 1(g "n 1)f`HnÿòHnÿê/.NºjOï `$Hnÿú/.NºšPOJ€g¨p°®ÿâoZR®ÿâR®ÿæ .ÿæåˆCîÿ¾#®ÿâ.¼€Hnÿê/.p(/Nº¼Oï -@ÿö.¼€Hnÿê/./.ÿâNºžOï -@ÿö`® .ÿú"n1°.fÞ.¼€Hnÿê/.B§NºjOï J€gÀpÿ°®ÿæf¶ .ÿú`þ¼Hnÿú/.NºPOJ€gdpÿ°®ÿælZ.¼€Hnÿê/.p)/NºOï -@ÿö.¼€Hnÿê/. .ÿæåˆCîÿ¾/1NºòOï -@ÿöS®ÿæ-nÿîÿòR®ÿú`ýp.¼€Hnÿê/.pa/NºÂOï -@ÿöHnÿú/.NºÚPO@ÿÿ fpý`þ .¼€Hnÿê/..ÿÿH€HÀ`ýˆNVÿô n R n "n 1^f&.¼€/./.pn/NºPOï -@ÿü n R`.¼€/./.p[/Nº*Oï -@ÿü n-Pÿø.¼€//.B§NºOï -@ÿü.¼€/././. /.p]/Nº²Oï n(.ÿûS"nÓîÿø€ n "n 1]fpþN^Nupý`øNVÿð n S€-@ÿü`6R€-@ÿø.¼€Hnÿø/. .ÿü"n1H€HÀ/NºlOï -@ÿôS®ÿü .ÿü"n°‘l¾ n R.¼€/./.p*/Nº8Oï -@ÿôN^NuNVÿðB®ÿø-n ÿü`æ .ÿü"n 1&f2.¼€Hnÿø/.Hx€NºôOï -@ÿô.¼€Hnÿø/.B§`” .ÿü"n 1\fdR€"n1H€HÀ"|0 1gFR®ÿü.¼€Hnÿø/.Hx€NºOï -@ÿô.¼€Hnÿø/. .ÿü"n1H€HÀr0`.¼€Hnÿø/.Hnÿü/.NºvPO/NºBOï -@ÿôR®ÿü .ÿü"n1°.g .ÿüJ1fÿ .ÿü"n1°.f.¼€Hnÿø/.B§NºòOï J€fpýN^Nu .ÿü`öNVÿàHî ÿì$n(n&nt`€p4( €€fNR‚4(H€HÀ-@ÿäåˆ"n &1`".® /.HS28H€HÀ/Nº‚Oï -@ÿèRƒ .ÿäåˆ"n¶±mÎ` .® /.HS4(H€HÀ/NºNOï -@ÿèR‚J4(fÿ|Lî ÿìN^NuNVÿø`$ n  1\f.®/./././. Nº0PO`, n "n 1-g,.®/./. "n 1H€HÀ/NºÎOï -@ÿü`¶ nJo n R€"n J1g R€"n 1°. gð n S€"n1H€HÀ"|0 1g.®/./././. /< D`< n S€"n1H€HÀ"|0 1gN.®/./././. /< PNº„Oï nR n "n 1°. g "n J1fþ¾N^Nu n S€"n1H€HÀ"|0 1g.®/./././. /< l`ÿŽ.®/./.p-`þ¾NVÿð nR nS.®/. Nº XO.€/.N¹e†XO-@ÿô n "n1H€HÀ.€/.N¹e†XO-@ÿø`*.®/./."n1H€HÀ/NºOï -@ÿüR®ÿø .ÿø°®ÿôoÌN^NuNVÿü n °®mpN^Nu n"R n ® p`æNVÿü n "n 1\fL n R€"nJ1fp\N^Nu n R "n 1nfp `ä n "n 1tfp `Î n "n1H€HÀ`ºNVÿü n "n 1\f R€"n 1(f n RpN^Nup`øNVÿü n "n 1\f R€"n 1)f n RpN^Nup`øNq$Header: docmd1.c,v 1.3 86/07/17 17:19:37 arnold Exp $/usr/lib/se_h À Á Ä Æ È Í Ï Ñ Ó Ö Ü Þ à%s/elp%s/%srfailed global substitutes continuefailed global substitutes stopno line insert/deleteline insert/deletenot savedsavedprocess suspension not available+4CASE><$fautonotify onnotify offXTABSEmpty keys are not allowed. ENCRYPTrrreadingascddatafhnnrnroffprs+417+8+87+3CASEXTABSaawwwritingThe key must be non-empty! crypt %s < %srcrypt %s > %swcrypt %s >> %swEnter encryption key: Again: didn't work. try again. $Header: docmd2.c,v 1.3 86/07/17 17:20:29 arnold Exp $ apd>SHELL/bin/sh/bin/shshunknown shell, using %ssh/bin/shsh %s -c type return to continue: Not implemented yet$Header: edit.c,v 1.3 86/07/11 15:11:34 osadr Exp $ unknowncmd>GLOBGLOB$HOME/.serc./.sercrr$Header: main.c,v 1.4 86/10/07 14:50:17 arnold Exp $  Ö%s TERMin initialize: can't happense.hangupMAILYou have mailYou have new mailLine numbers in backward orderNo saved pattern -- sorryBad syntax in patternBad syntax in string parameterBad syntax in substitution stringFile is not readableGarbage after your commandBad syntax in file nameBad tabstop syntaxCan't move a group into itselfNo line has that mark nameResultant line too long to handleNo error to reportNo lines in limboExpected '<', '>', or nothing after 'od'Line number out of rangeCan't recognize optionNo line contains that patternBuffer hasn't been savedNo command recognizedYou interrupted meLast line number beyond end of fileFile is not writeableNo room for any more lines!No match for patternNo saved filenameBad syntax in character listNo saved character list -- sorryUnreasonable valueNo help availableLine numbers not allowedFile already existsImproper column number specificationUnknown source languageLines were truncatedType control-q to rebuild screenCan't fork --- get help!No saved replacement --- sorryNo saved shell command --- sorry?Usage: se%s%s [ --acdfghiklmstuvwxyz ] [ file ... ]$Header: misc.c,v 1.1 86/05/06 13:37:51 osadr Exp $$Header: scratch.c,v 1.2 86/07/17 17:21:38 arnold Exp $collecting garbage%s/usr/tmp/se%d.%dcan't create scratch fileFatal scratch file read errorFatal scratch file seek errorFatal scratch file write error$Header: screen.c,v 1.3 86/07/17 17:22:19 arnold Exp $ M O R E T O C O M E MARGINEnter o- to restore displayline $ = # = col INSERTCASEWHA?col NOCHAR%s%d%d. ->1$%dgone%02d:%02d$Header: term.c,v 1.8 87/02/03 14:32:32 arnold Exp $ ^ "ô a "ø d "ü g # j # m # p # s # v # y #vsvetitecmcedlalclpcamse: couldn't open termcap file.se: no termcap entry for %s terminals.licoin setcaps: can't happen. window repositionedwindow size changese: terminal type not availablein set_term: can't happen.se: could not find terminal in system databasese: terminal does not have cursor motion.se: could not determine number of rowsse: could not determine number of columns$Header: changetty.c,v 1.2 86/07/11 15:23:06 osadr Exp $2K n†–È,<X x° ´ ð ` àÀ À%€couldn't get TTY info from system. get help! $Header: pat.c,v 1.2 86/07/11 15:24:44 osadr Exp $0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZin omatch: can't happen.in patsiz: can't happen.0707070000020041370407550001460001440000020544660402643505200000500000000000se_h0707070000020041401006440001460001440000010533370402643503400000700000001431se_h/a a -- Append command default range syntax . a "a" is for appending new lines of text after a given line. If no line number is typed before the "a", text will be appended after the current line. The last line appended becomes the current line. To signal the end of the appended text, you type a "." on a line by itself. Control characters "f", "v", "l", and "k" work differently for "a" command than for "v". "a:" works as a one line append (i.e. anything following the colon is appended after the current line). To return to the command directory, type "hcomdir." See also: "hcc" (control characters) and "hc" (change). 0707070000020041501006440001460001440000010530460402643503400001100000001127se_h/abt Abort character CTRL-F ("Funny Return") character is used to abort a "v" command before all the specified lines have been modified. Typing it causes the current line to be restored to its state of before the "v" command was begun, and causes a return to the editor's command level. Type "hv" for a description of the "v" command. Type "hrpt" for CTRL-F's meaning if in append or command mode. Type "htermchar" for info about other termination characters. 0707070000020041531006440001460001440000010534210402643503400001000000000216se_h/ah If you're running Berkeley Unix, and you're bored Type the following command for something enjoyable: !rogue 0707070000020042761006440001460001440000010531130402643503400001200000001625se_h/arg2 Arguments (cont) Once the terminal type is established, the remaining arg- uments are interpreted thus: if the argument begins with a "-", the rest of it is interpreted as though it appeared after the "o" in an option command. For example, an argument of "-w10" acts as a command "ow10". On the other hand, if the argument does not begin with "-", it is interpreted as a file name (path- name). The named file is read into the edit buffer, and its name becomes the remembered file name. If more than one file is named, the edit buffer will contain the contents of all the files. If an error is encountered while interpreting arguments (file not found, illegal option), the remainder will be ignored. For invoking command syntax, type "hargs". 0707070000020042771006440001460001440000010540460402643503400001200000000651se_h/args Argument Handling The syntax for 'se's invoking command is usually given as se {-