|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ T r ┃
Length: 20974 (0x51ee) Types: TextFile Names: »readme«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─ ⟦this⟧ »EUUGD11/euug-87hel/sec1/uEmacs/readme«
MicroEMACS 3.8b Release Notes ********************************************************************** (C)opyright 1987 by Daniel M. Lawrence MicroEMACS 3.8 can be copied and distributed freely for any non-commercial purposes. MicroEMACS 3.8 can only be incorporated into commercial software with the permission of the current author. ( Notice the copyright.....a number of large companies decided to use MicroEMACS 3.7 and 3.7i as the shell of their products, and several of the ones I contacted were not even courteos enough to send me their product for my personal use. I am not out to make a fortune on this, but a little common courtesy would be appreciated.) ********************************************************************** It has been quite a while since the last realease and there are a large number of new features and enhancements to old features. There is now a full extension language and there is also support nearly completed for a number of newer 68000 machines. The edit history at the beginning of the MAIN.C file details the changes. MicroEMACS 3.8 is availible in a couple of different ways. First, it is availible via my bulletin board system..... The Programmer's Room FIDO 201/2 (317) 742-5533 24 hours 300/1200 baud Also it should be online on the following BBS's: The Starship Trooper Fido 201/1 (317) 423-2281 2400 Avatar Fido 201/4 (317) 497-1970 1200 There it is arranged as three MSDOS .ARC files, EMACSDOC.ARC which contains the documentation and command files, EMACSSRC.ARC which contains the sources and the UNIX Makefile, and EMACSEXE.EXE which contains the MSDOS executables. Also all the various executables are availibile individualy. EMACSDOC.ARC includes the files: README This file EMACS.RC Standard startup file ME110.RC HP110 startup file ME150.RC HP150 startup file EMACS.HLP Online help file EMACS.KEY Cammond wallchart EMACS.TUT Online tutorial EMACS.MSS Emacs Introduction document EMACS1.MSS Emacs Reference guide IBMFN.LST IBM-PC function list MAGIC.DOC Regular partern matching bulletin AZMAP.CMD Translate .SYM files to .MAP BDATA.CMD BASIS Data statement builder MENU.CMD Sample Menu system MENU1 datafile for menu syste EMACSSRC.ARC includes the files: ANSI.C ANSI screen driver BASIC.C basic cursor movement BIND.C key binding commands BUFFER.C buffer manipulation commands CRYPT.C encryption functions DG10.C Data General 10 screen driver DISPLAY.C main display driver EBIND.H binding list EDEF.H global variable declarations EFUNC.H function name list EGAPC.C EGA screen driver EPATH.H default path settings ESEARCH.H search global declarations ESTRUCT.H configuration and structure definitions EVAL.C expresion evaluator EVAR.H EMACS macro variable declarations EXEC.C macro execution functions FILE.C user file functions FILEIO.C low level file I/O driver HP110.C HP110 screen driver HP150.C HP150(A or C) screen driver IBMPC.C IBM-PC CGA and MONOCHROME driver INPUT.C low level user input driver ISEARCH.C incremental search functions LINE.C text line manipulation functions LOCK.C file locking functions MAIN.C argument parsing and command loop RANDOM.C other random user functions REGION.C region cut & paste functions SEARCH.C search and replace functions SPAWN.C OS interface driver ST520.C ATARI ST1040 screen driver [not verified] TCAP.C Termcap screen driver TERMIO.C low level I/O driver TIPC.C TI-PC screen driver VMSVT.C VMS screen driver VT52.C VT52 screen driver WINDOW.C window manipulation functions WORD.C word manipulation functions EMACSEXE.ARC includes the files: MEIBM.EXE IBM-PC CGA and MONO version MEEGA.EXE IBM-PC EGA version MEANSI.EXE MSDOS ANSI graphics version ME110.EXE HP110 portable version ME150.EX HP150 version Also MicroEMACS should be availible from USENET via the mod.sources notegroup, or its archives. A number of sites also make MicroEMACS availible via FTP. Watch USENET news for info on these. MicroSCRIBE 1.0, which I had hoped to have ready by now, is only about half written. MicroEMACS took up more of my time in updates then I had expected, however having this fairly advanced, and hopefully fairly stable version, I can get back to getting MicroSCRIBE written. Also in the works for a later release is a spell checker (called MicroSPELL rather predictably) and sometime next year, a integrated thesaurus program. A more customized MicroEMACS for the Macintosh, the Amiga and the 1040ST will probably become availible in the next couple of months. Support for the mouse, standard file boxes, pull down menus and different resolutions will be included. If you can be of help in getting this ready, please contact me. As before, I will continue to support these programs, and encourage everyone to spread them around as much as they can. If you make what you think are changes that are usefull to many, send me the updates, and as time permits, I will encorporate the ones I understand, and agree with into the master sources. Being overswamped with mailers, I have discontinued my mailing offer, but if you have a special problem getting hold of MicroEMACS, contact me and we can work something out for you. USmail: Daniel Lawrence 617 New York St Lafayette, IN 47901 UUCP: ihnp4!pur-ee!pur-phy!duncan!lawrence or ihnp4!itivax!duncan!lawrence ARPA: nwd@j.cc.purdue.edu FIDO: The Programmer's Room 201/2 (317) 742-5533 ATT: (317) 742-5153 New Features ============ *** Path Searching If the OS of the operating system MicroEMACS is running under has environmental variables, MicroEMACS will read in the PATH variable as a list of directories in which to look for its startup and help files, in place of the list in the epath.h file. *** Bindable Prefixes All the prefix keys can now be rebound. This includes: meta-prefix <ESC> ctlx-prefix ^X universal-argument ^U quote-character ^Q *** HP150 function keys can now both be labeled and bound. *** New Help Function The APROPOS (M-A) function prompts for a string, and then prepares a list of all named functions that contain the string. This is usefull for finding all comands that deal with one topic. *** File Encryption Text files can now be encrypted (and decrypted <very useful>). The encryption method (written by Dana Hoggat) results in ALL legal printing characters, leaving files suitable for mailing and moving around between systems. The -k <encryption key> command line switch places the first file into the edit buffer using the named key. CRYPT is a mode which can be set on any buffer, and set-encryption-key (M-E) sets the encryption key of the current buffer. If you attempt to write out a buffer in crypt mode without specifying the key, MicroEMACS will automatically prompt you for it. *** Keyboard Macros rewritten The code for processing keyboard macros now records the responses to all prompts as well as just the command keystrokes. *** Restrictive Mode The -r command line switch prevents EMACS from executing many of its commands which would allow you to break out of it, or edit files other then the ones named on the command line. This is usefull for products that need to restrict access to the OS from inside the editor (for example, BBS systems). *** Word wrap made more flexible When emacs determined it is time to word wrap (when in wrap mode) it calls the function which is bound to the illegal keystroke, M-FNW. This keystroke is normally bound to wrap-word (M-FNW), but can be rebound by the user so EMACS can do different things at wrap time (like auto indention in different languages). *** Fence Matching The goto-matching-fence (M-^F) command jumps the cursor to the matching fence, or beeps if there is none. *** Dynamic Screen Re-sizing The size that EMACS uses for editing can be changed with the change-screen-size (M-^S) and change-screen-width (M-^T) commands. These can then be usefull in integrating EMACS on window based machines. *** IBMPC drivers combined... The IBM-PC CGA and MONOCHROME drivers have been combined into one driver which will look up the graphics adapter type at startup and adjust accordingly. *** EXTENTION LANGUAGE MicroEMACS is now equipped with a fully functional extention language in which to write macros. These macros can be saved, recalled and bound to keystrokes, thus allowing a high degree of customization. What follows is an exerpt from what will become the new MicroEMACS reference manual. Chapter x: MicroEMACS Macros Macros are programs that are used to customize the editor and to perform complicated editing tasks. They may be stored in files or buffers and may be executed using an appropriate command, or bound to a particular keystroke. Portions of the standard start-up file are impliment via macros, as well as the example menu system. The execute-macro-<n> editor commands cause the macros, numbered from 1 to 40, to be executed. Macros are stored by executing files that contain the store-macro command. There are many different aspects to the macro langage within MicroEMACS. Editor commands are the various commands that manipulate text, buffers, windows, etc, within the editor. Directives are commands which control what lines get executed within a macro. Also there are various types of variables. Environmental variables both control and report on different aspects of the editor. User variables hold string values which may be changed and inspected. Buffer variables allow text to be placed into variables. Interactive variable allow the program to prompt the user for information. Functions can be used to manipulate all these variables. x.00 Variables Variables in MicroEMACS can be used to return values within expressions, as repeat counts to editing commands, or as text to be inserted into buffers and messages. The value of these variables is set using the set (^X-A) command. For example, to set the current fill column to 64 characters, the following macro line would be used: set $fillcol 64 or to have the contents of %NAME inserted at the point in the current buffer, the command to use would be: insert-string %name x.01 Environmental Variables "What good is a quote if you can't change it?" These variables are used to change different aspects of the way the editor works. Also they will return the current settings if used as part of an expresion. All environmental variable names begin with a dollar sign ($). $fillcol Current fill column $pagelen Number of screen lines used currently $curwidth Number of columns used currently $curcol Current column of point in current buffer $curline Current line of point in current buffer $flicker Flicker Flag set to TRUE if IBM CGA set to FALSE for most others $cbufname Name of the current buffer $cfname File name of the current buffer $sres Current screen resolution (CGA or MONO on the IBM-PC driver... EGA on the EGA driver LOW MEDIUM or HIGH on the Atari ST1040 NORMAL on all others) $debug Flag to trigger macro debugging (try it... you'll like it!) $status return status of the success of the last command (TRUE or FALSE) usually used with !force Obviously, many more of these variables will be availible in future releases of MicroEMACS. (Yes, send a vote for your favorite new environmental variables today). x.02 User variables User variables allow you, the user, to store strings and manipulate them. These strings can be pieces of text, numbers (in text form), or the logical values TRUE and FALSE. These variables can be combined, tested, inserted into buffers, and otherwise used to control the way your macros execute. At the moment, up to 100 user variables may be in use in one editing session. All users variable names must begin with a percent sign (%) and may contain any printing characters. Only the first 10 characters are significant (ie differences beyond the tenth character are ignored). Most operators will truncate strings to a length of 128 characters. x.03 Buffer Variables Buffer variables are special in that they can only be queried and cannot be set. What buffer variables are is a way to take text from a buffer and place it in a variable. For example, if I have a buffer by the name of RIGEL2, and it contains the text: Richmond Lafayette <*>Bloomington (where <*> is the current point) Indianapolis Gary =* MicroEMACS 3.8 (WRAP) == rigel2 == File: /data/rigel2.txt ===== and within a command I reference #rigel2, like: insert-string #rigel2 MicroEMACS would start at the current point in the RIGEL2 buffer and grab all the text up to the end of that line and pass that back. Then it would advance the point to the beginning of the next line. Thus, after our last command executes, the string "Bloomington" gets inserted into the current buffer, and the buffer RIGEL2 now looks like this: Richmond Lafayette Bloomington <*>Indianapolis (where <*> is the current point) Gary =* MicroEMACS 3.8 (WRAP) == rigel2 == File: /data/rigel2.txt ===== as you have probably noticed, a buffer variable consists of the buffer name, preceded by a pound sign (#). x.04 Interactive variables Interactive variables are actually a method to prompt the user for a string. This is done by using an at sign (@) followed either with a quoted string, or a variable containing a string. The string is the placed on the bottom line, and the editor waits for the user to type in a string. Then the string typed in by the users is returned as the value of the interactive variable. For example: set %quest "What file? " find-file @%quest will ask the user for a file name, and then attempt to find it. x.10 Functions Functions can be used to manipulate variables in various ways. Functions can have one, two, or three arguments. These arguments will always be placed after the function on the current command line. For example, if we wanted to increase the current fill column by two, using emacs's set (^X-A) command, we would write: set $fillcol &add $fillcol 2 \ \ \ \ \____second operand \ \ \ \________first operand \ \ \_____________function to execute \ \__________________variable to set \_______________________set (^X-A) command Function names always begin with the ampresand (&) character, and are only significant to the first three characters after the ampresand. Functions will normal expect one of three types of arguments, and will automatically convert types when needed. <num> an ascii string of digits which is interpeted as a numeric value. Any string which does not start with a digit or a minus sign (-) will be considered zero. <str> An arbitrary string of characters. At the moment, strings are limited to 128 characters in length. <log> A logical value consisting of the string "TRUE" or "FALSE". Numeric strings will also evaluate to "FALSE" if they are equal to zero, and "TRUE" if they are non-zero. Arbitrary text strings will have the value of "FALSE". A list of the currently availible functions follows: (Once again, send in those votes on what kind of functions you would like to see added!) Numeric Functions: (returns <num>) &ADD <num> <num> Add two numbers &SUB <num> <num> Subtract the second number from the first &TIMes <num> <num> Multiply two numbers &DIVide <num> <num> Divide the first number by the second giving an integer result &MOD <num> <num> Return the reminder of dividing the first number by the second &NEGate <neg> Multiply the arg by -1 String manipulation functions: (returns <str>) &CAT <str> <str> Concatinate the two strings to form one &LEFt <str> <num> return the <num> leftmost characters from <str> &RIGht <str> <num> return the <num> rightmost characters from <str> &MID <str> <num1> <num2> Starting from <num1> position in <str>, return <num2> characters. Logical Testing functions: (returns <log>) &NOT <log> Return the opposite logical value &EQUal <num> <num> If <num> and <num> are numerically equal, return TRUE &LESs <num1> <num2> If <num1> is less than <num2>, return TRUE. &GREater <num1> <num2> If <num1> is greater than, or equal to <num2>, return TRUE. &SEQual <str1> <str2> If the two strings are the same, return TRUE. &SLEss <str1> <str2> If <str1> is less alphabetically than <str2>, return TRUE. &SGReater <str1> <str2> If <str1> is alphabetically greater than or equal to <str2>, return TRUE. Special Functions: &INDirect <str> Evaluate <str> as a variable. This last function deserves more explaination. The &IND function evaluates its argument, takes the resulting string, and then uses it as a variable name. For example, given the following code sequence: ; set up reference table set %one "elephant" set %two "giraffe" set %three "donkey" set %index "two" insert-string &ind %index the string "giraffe" would have been inserted at the point in the current buffer. This indirection can be safely nested up to about 10 levels. x.20 Directives Directives are commands which only operate within an executing macro, ie they do not make sense as a single command. As such, they cannot be called up singly or bound to keystroke. Used within macros, they control what lines are executed and in what order. Directives always start with the exlaimation mark (!) character and must be the first thing placed on a line. Directives executed singly (via the execute-command-line command) interactively will be ignored. x.21 !ENDM Directive This directive is used to terminate a macro being stored. For example, if a file is being executed contains the text: ; Read in a file in view mode, and make the window red 26 store-macro find-file @"File to view: " add-mode "view" add-mode "red" !endm write-message "[Consult macro has been loaded]" only the lines between the store-macro command and the !ENDM directive are stored in macro 26. x.22 !FORCE Directive When MicroEMACS executes a macro, if any command fails, the macro is terminated at that point. If a line is preceeded by a !FORCE directive, execution continues weather the command succeeds or not. For example: ; Merge the top two windows save-window ;remember what window we are at 1 next-window ;go to the top window delete-window ;merge it with the second window !force restore-window ;This will continue irregardless add-mode "red" x.23 !IF, !ELSE, and !ENDIF Directives This directive allows statements only to be executed if a condition specified in the directive is met. Every line following the !IF directive, until the first !ELSE or !ENDIF directive, is only executed if the expresion following the !IF directive evaluates to a TRUE value. For example, the following macro segment creates the portion of a text file automatically. (yes believe me, this will be easier to understand then that last explaination....) !if &sequal %curplace "timespace vortex" insert-string "First, rematerialize~n" !endif !if &sequal %planet "earth" ;If we have landed on earth... !if &sequal %time "late 20th century" ;and we are then write-message "Contact U.N.I.T." !else insert-string "Investigate the situation....~n" insert-string "(SAY 'stay here Sara')~n" !endif !else set %conditions @"Atmosphere conditions outside? " !if &sequal %conditions "safe" insert-string &cat "Go outside......" "~n" insert-string "lock the door~n" !else insert-string "Dematerialize..try somewhen else" newline !endif !endif x.24 !GOTO Directive Flow can be controlled within a MicroEMACS macro using the !GOTO directive. It takes as an argument a label. A label consists of a line starting with an asterick (*) and then an alphanumeric label. Only labels in the currently executing macro can be jumped to, and trying to jump to a non-existing label terminates execution of a macro. For example.. ;Create a block of DATA statements for a BASIC program insert-string "1000 DATA " set %linenum 1000 *nxtin update-screen ;make sure we see the changes set %data @"Next number: " !if &equal %data 0 !goto finish !endif !if &greater $curcol 60 2 delete-previous-character newline set %linenum &add %linenum 10 insert-string &cat %linenum " DATA " !endif insert-string &cat %data ", " !goto nxtin *finish 2 delete-previous-character newline x.25 !RETURN Directive The !RETURN Directive causes the current macro to exit, either returning to the caller (if any) or to interactive mode. For example: ; Check the monitor type and set %mtyp !if &sres "CGA" set %mtyp 1 !return !else set %mtyp 2 !endif insert-string "You are on a MONOCHROME machine!~n" <<<END OF MANUAL EXCERPT>>>