Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!rutgers!s.cc.purdue.edu!doc From: dillon%cory.berkeley.edu@berkeley.edu (Matt Dillon) Newsgroups: comp.sources.amiga Subject: DME V1.27 (documentation) Message-ID: <382@s.cc.purdue.edu> Date: Wed, 1-Jul-87 08:31:59 EDT Article-I.D.: s.382 Posted: Wed Jul 1 08:31:59 1987 Date-Received: Thu, 2-Jul-87 03:50:01 EDT Reply-To: doc@s.cc.purdue.edu (Craig Norborg) Distribution: world Organization: Purdue University Computing Center Lines: 696 Approved: doc@s.cc.purdue.edu Here is the documetation for DME, which can be found both in comp.binaries.amiga and comp.sources.amiga... Enjoy! Doc # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # Xshar: Extended Shell Archiver. # This archive created: Wed Jul 1 07:28:18 1987 # By: Craig Norborg (Purdue University Computing Center) # Run the following text with /bin/sh to create: # TODO # dme.doc cat << \SHAR_EOF > TODO ni = not implemented yet STATUS ITEM DONE TLATE bug when tlate'ing char at end of line (major bug fixed) ni ascii-numeric variable support ni command line variable expansion. ni exception handling (abort if, repeat, keymap, etc..... trap vector?) DONE workbench support DONE mouse keymaps ni kill/string buffer ni position marking ni character oriented blocks ni highlight blocks ni block move across windows ni stackable search/replace strings DONE move to end of block (GOTO END) ni cancel all user keymaps NO paren instead of `'? NO clipboard support ni anchored search as opposed to normal search DONE toggle max should be larger (NOW 256) DONE Execute ni keyboard repeat buffering too many repeats. SORTA help! key... now semi implemented ni provision to show mapping for a single key DONE default icon (not fantastic, though) DONE close gadget should sync text first. DONE (I think). each keypress when window iconified caused loss of 280 bytes memory.. reclaimed when the window is iconified/de-iconified, but things start slowing down after a while. DONE child windows should inherit tab stops, insert mode, word wrap mode ni slave the editor to a shell. ni change directory ni GETTSTRING ni menu add DONE window resize ni break key (currently must BREAK from a CLI) SHAR_EOF cat << \SHAR_EOF > dme.doc DOC.TXT DME V1.27 (C)CopyRight 1987, Matthew Dillon. All Rights Reserved. This software may be distributed for non-profit only. This software is NOT shareware. Matthew Dillon contribute if you wish. 891 Regal Rd Berkeley, Ca. 94708 Source is available on request or by anonymous FTP. Source requests can ONLY be made via electronic mail to the following address: USENET ...!ihnp4!ucbvax!dillon ARPANET dillon@ucbvax.berkeley.edu --------------------------------------------------------------------------- I Overview II Keymapping key and mouse mapping III Command Sequences DME commands IV File Particulars notes on loading and saving files V Workbench Support VI Revision Summary revision numbering, changes made, etc... VII Compiling compiling instructions I OVERVIEW See REVISIONS section for revisions. DME is a WYSIWYG editor designed mainly for programmers. Although it is not a word processor, it does include many word processing features such as Word-Wrap and automatic paragraph formatting. Here is a quick 'features' list: -control language based on a rich command set accessed manually or via arbitrary mapping of keys. (Every key may be mapped to 16 different things) -fast visual response (it scrolls quickly) -title-line statistics showing your current position in the file, file name, whether the file has been modified or not, etc... -Multiple Windows, ability to iconify windows -Word Wrap and automatic paragraph formatting. -ability to map any KEY or MOUSE BUTTON combination. DME has been designed to allow easy expansion, and I intend to make many future improvments. It has not been designed for user friendliness, but is straight forward if you read this document fully. DME can take any number of arguments. Any argument without a '-' in front of it is considered to be a file. Normally, DME will automatically SOURCE two script file, S:.EDRC, and the .EDRC in your current directory. These files do not have to exist. These script files usually contain mappings and do things like turn on word wrap and set the right margin. FLAGS: -ffilename -source this script file instead of .EDRC -b -normally when multiple files are specified, DME opens them with small windows. This opens them with normal sized windows. -tN -Open the window on scan line N -lN -Open the window offset N scan columns -wN -Make the window N pixels wide -hN -Make the window N pixels high II KEYMAPPING MOUSE BUTTONS: The mouse buttons and combinations thereof may now be mapped. The default mappings for the mouse buttons are as follows: Left-button: Move cursor to current mouse position Right-button: Iconify window Left-button held down while moving mouse tracks the cursor The iconification features: -Remembers original window size and placement -Remembers placement of iconified window when you re-iconify later. Currently, you will crash the machine if you run out of memory and DME is unable to open the icon window or original window, so be careful. see below for mapping the mouse buttons and mouse movement. KEYBOARD: The rest of the Functional interface for DME is based on key/mouse mappings and a rich command set. Unlike other text editors, any non-qualifier key in DME may have any meaning whatsoever. It just so happens that the default keymappings assign such things as the `return' key to the RETURN function, the `up' key to the UP function, etc... Keys are named by their keycap labels with the following exceptions: the name for Back-Space is BS the name for numeric keypad keys are prepended with an NK, except for the Enter key which is named 'ENTER'. The four cursor control keys are labeled UP, DOWN, LEFT, and RIGHT The three mouse buttons are labeled RMB, MMB, and LMB. *NOTE* the normal Amiga mouse has only two buttons, the Left and the Right mouse buttons (LMB, RMB). A properly installed three-button mouse is also supported. *NOTE* You must type commands in lower-case, except for text, which can be either lower or upper case, and for upper-case alpha keys when specifying keymaps (i.e. A and s-a are the same key). The exception is the AMIGA qualifier key, which uses 'A' instead of 'a'(Alt). Each key may be qualified with any combination of CTRL, ALT, SHIFT, AMIGA, or any of the MOUSE buttons. With 6 qualifiers (7 if your mouse has a middle button), you can assign up to 64 (128) different maps to each physical key on the keyboard. NOTE: The CAPS-LOCK, when lit, is equivalent to SHIFT only for Alpha keys. NOTE: The AMIGA-ALT (aA) combination isn't very usable since Intuition uses the sequence to duplicate a Mouse SELECT. Other AMIGA sequences are used by intuition for mouse movement and other things. Some other qualifier combinations may not be usable due to other special sequences. ***EXAMPLES:*** tab tab a-a ALT a A-a AMIGA a sA-a SHIFT AMIGA a s-tab SHIFT tab c-tab CTRL tab ac-? ALT-CTRL ? s-f5 SHIFT F5 nk0 Numeric Keypad 0 cs-nk0 CTRL SHIFT Numeric Keypad 0 L-lmb Left Mouse button pressed L-mmove Mouse moved while left mouse button held down LR-lmb left mouse button hit while right mouse button held down *************** MAPPING MOUSE BUTTONS Mouse buttons serve both as QUALIFIERS and as KEYS. Thus, you can map both normal keystrokes which require a mouse button to be held down: map L-a ``left button and an a'' as well as the mouse keys themselves: map L-lmb ``left mouse key'' note that you had to specify the left mouse button down qualifier L as well as the left mouse button LMB. If you map the left mouse button, and also map a sequence such as left mouse button + a: map L-lmb tomouse map L-a ``hello'' Note that the first mapping will always get executed even if you intended L-a (that is, BOTH mappings would get executed). In order to avoid confusion you might want to UNMAP the system default mapping for the right mouse button (mapped to ICONIFY) if you wish to apply combinations to the right mouse button. MOUSE MOVEMENT is mapped with one or more mouse qualifiers (L, R, M), plus 'MMOVE' for the key. That is: map LR-mmove ``moving the mouse with both buttons held down'' DEFAULT KEYMAP: All Printable Ascii keys mapped to their ascii equivalent BS, DEL, UP, DOWN, LEFT, RIGHT, TAB, S-TAB, ENTER mapped properly `s- ' Shift Space is Mapped to space backspace Back Space tab Tab s-tab Back tab enter the RETURN command return `return insline up firstnb down' esc Escape into command mode del Delete character s-del Delete line c-del Remove to end of line up cursor up down cursor down left cursor left right cursor right s-up top of text s-down bottom of text s-left first column s-right last column (one past the last non-blank on a line) c-up page up c-down page down c-q Quit c-w TOGGLE WORD WRAP MODE f1 Prompts for file to insert f2 Prompts for new file to replace current text with f3 Prompts for new file to place into new window f7 Prompts for filename to save marked block to f8 Saves current text and then does an 'f2' f9 Saves current text, but does not quit f10 Saves current text and quits. c-r Word Right c-l Word Left c-i insert mode on c-o insert mode off c-/ Prompts for search pattern c-p search previous occurance c-n search next occurance c-s `split first down' ... fancy split line c-u Unblock a block c-b Mark start/end of a block a-s SOURCE a block of text as if it were a script file sa-s SOURCE the current line of text as if it were a script file a-d delete block a-c copy block a-m move block c-f reformat paragraph c-g Prompts for line to GOTO to. c-j join next line to this line. L-lmb move cursor to mouse position (tomouse) L-mmove move cursor to mouse position (tomouse) R-rmb iconify window help `newwindow newfile s:DME.DOC escimm `find '' III COMMAND SEQUENCES DME has a rich command set which allows you to embed commands within commands, or specify multiple commands in a row. A command consists of a KEYWORD followed by a FIXED number of arguments (0, 1, 2...). The argument delimeter in DME is a SPACE. Therefore, to embed strings containing spaces as a single argument, you must surround the string with `string' (backquote-string-quote). TEXT to be written as if typed is also specified via a string in backquote-quotes. For example: right right `hello' right right `hello' enter down map f4 `right right' map f5 `left left' map f4 ``hello'' Reiterating (because this is important!)... If a command expects ONE argument, then it really does expect a single argument, and any remaining arguments are thought to be the next command... so: map f4 right -right is only one word, so no need for `'. map f4 `right right' -we want to map f4 to two rights... we need the `' or the second right will not be part of the map. map c-del `repeat cright del' -this is already implimented as REMEOL, but shown here for clarity. Some arguments will eventually be fed through the command interpreter more than once. The MAP command is a good example. When you execute a MAP command, the first run through the command interpreter installs the map string minus a set of quotes. So, if you want to specify text, you must enclose the text in two sets of ``text'' because the map string gets passed through the command interpreter again when you hit the mapped key. Here are some more complex examples: map f4 `right right `hello' left left' *RIGHT* map f4 right right hello left left *WRONG* map f4 `map f4 ``hello''' -the first time you hit F4, it's command is to re-map itself to the TEXT `hello'. (gads!). map c-i `repeat tr `` ''' -example of how to embed a space in a map and repeat (goes through command interpreter three times!). An easy way to fool around executing commands or making maps is either to use the ESC key (which enters command mode), or a-S (alt-shift-s), which EXECUTES the current DME line that the cursor is on.... so you can use DME to edit and test your new keymappings. !!!!!!!!!! NOTE NOTE NOTE NOTE NOTE !!!!!!!!!!!!!! You must type commands in LOWER case. They are in upper case here for visibility. COMMAND LIST `text' -enter text as if typed. key -execute a keymap as a macro (example: c-a) BACK -same as BS BACKTAB -backward tab BCOPY -copy block before cursor line BDELETE -delete the block BLOCK -Set start or end of block BMOVE -move block before cursor line BOTTOM -Move to Bottom of File BS -backspace, (delete char to left of cursor) BSAVE file -save the block to a file BSOURCE -source current text block as if it were a script file DEL -delete, (deletes char under cursor) DELINE -delete line DOWN -cursor down DOWNADD -cursor down. If at bottom of text, add a line. ESC -toggle manual command entry mode ESCIMM arg -go into command entry mode prompting with a predefined string. EXECUTE comm -Execute a CLI command FIND string -SET the search pattern and do a NEXT FINDR s1 s2 -Set find and replace patterns and do one find/rep. FINDSTR string -SET the search string pattern FIRST -move to column 1 FIRSTNB -Move to first non-blank in line. GOTO BLOCK -Goto the beginning of the marked block. GOTO START -same as GOTO BLOCK. undefined if no block GOTO END -goes to the END of the marked block. undef. if no blk. GOTO [+/-]N -Goto an absolute or relative line number HEIGHT N -set height in pixels for any new window ICONIFY -iconify the window IF cnd act -IF/WHILE/IFELSE.. SEE BELOW IFELSE cnd ifact elseact INSERTMODE what -set INSERTMODE. what = on, off, or toggle INSFILE name -insert a file into the current text. INSLINE -insert line JOIN -join next line to line at cursor LAST -move one beyond the last non-space in a line. LEFT -cursor left LEFTEDGE N -set leftedge in pixels for any new window MAP key map -map a key to a keymap MARGIN N -set WordWrap and paragraph formatting margin (related to WORDWRAP and REFORMAT) NEWFILE name -replace current text with new file NEWWINDOW -open newwindow NEXT -find next occurance of search pattern NEXTR -find next occurance and replace PAGEDOWN -pagedown a partial page (see PAGESET) PAGESET n -n PERCENT (0 to 100). page step size relative to the current number of rows in the window. PAGEUP -pageup a partial page (see PAGESET) PREV -find previous occurance of search pattern PREVR -find previous occurance and replace QUIT -quit REFORMAT -reformat paragraph using the margin. REMEOL -Remove text under and beyond the cursor. REPEAT cnt comm -SEE BELOW REPSTR string -SET the replace string pattern RESETTOGGLE N -clear toggle array entry N(0..31) RESIZE cols rows-Resize current window. E.G: `resize 70 23' RETURN -same as `FIRST DOWNADD' RIGHT -cursor right SAVEAS file -save current text under a different name (title line name does not change) SAVEMAP file -save user keymappings SAVEOLD -save current text under current name SAVESMAP file -save all keymappings, including system keymaps SAVETABS on/off -Optimize file saves by crunching spaces to tabs. The default is OFF. SCREENBOTTOM -Move cursor to the bottom of the screen. SCREENTOP -Move cursor to the top of the screen SETTOGGLE N -set toggle array entry N (0..255) SOURCE file -source a script file SPLIT -Split line at cursor TAB -forward tab TABSTOP N -Set tab stops every N. does not effect text load TLATE [+/-]N -translate character by +N or -N, or set character to exactly N if no + or -. (e.g. TLATE +65 TLATE 3) TOGGLE N -flip toggle array entry N (0..255) (See IF) TOMOUSE -moves cursor to mouse position TOP -Move to Top of File TOPEDGE N -set topedge in pixels for any new window UNBLOCK -clear the block markers for the current window UNMAP key -unmap a key UP -cursor up WHILE cnd act -(see below) WIDTH N -set width in pixels for any new window WLEFT -move to beginning of previous word. If in the middle of a word, move to beginning of current word. WORDWRAP on/off/toggle -Word Wrap mode (related to MARGIN) WRIGHT -move to beginning of next word ------------------------------------------------------------------- Command which cause a command line to abort (e.g. in repeat, while): FIND[R]/NEXT[R]/PREV[R] when the string is not found. NEXT stops at the end of the file, PREV stops at the beginning. DOWN,LEFT,RIGHT,UP when the operation cannot be done. ------------------------------------------------------------------- REPEAT N arg -Repeat `arg' N times. Apart from being a number, N can also be one of: line Current line # (lines begin at 1) lbot #lines to the bottom, including current line cleft column # (cols begin at 0) cright #chars to eol, including current char under cursor tr #char positions to next tab tl #char positions to next back tab Certain commands can abort a REPEAT loop. Specifically, any FIND[R], NEXT[R], or PREV[R] in which the search string is NOT found will abort a REPEAT. Most operations which can go out of bounds, such as UP, LEFT, RIGHT, DOWN, also abort a repeat. Specifying -1 as N causes REPEAT to go on forever (well, actually, 0xFFFFFFFF times) or until an abort. To abort an accidentel infinite loop, you must use the CLI BREAK command. IF [!]condition arg WHILE [!]condition arg IFELSE [!]condition arg else arg If the specified condition is true, execute the argument. For WHILE, the argument is executed until the condition is false (be careful!). the optional '!' inverts the logic. Conditions: # if toggle entry # is SET. there are 256 toggles (0..255) t if On line 1 b if On last line l if At column 0 r if At end of line (spaces below and beyond) m if Text has been modified i if in insert mode x[<=>]# if column position (starts at 1) is (any OR combo of <, =, or >) than some number. Example: x<=20 y[<=>]# if Line number (starts at 1) is (same as for x) cl character under cursor is lower case alpha cu character under cursor is upper case alpha ca character under cursor is alpha-numeric cn character under cursor is numeric c[<=>]# character under cursor is ascii code # (# in decimal) optional conditionals as in 'x' and 'y'. cb cursor within a block Example: simulating an insert mode toggle: ALT-i (not CTL-i) map a-i `ifelse 0 `toggle 0 insertmode OFF' `toggle 0 insertmode ON'' Example: while lower case, map to upper case and move right. map c-U `while cl `tlate -32 right'' if c<32 ``char under cursor is smaller than 32'' if c<>32 ``char under cursor is not equal to 32'' while !b down WARNING: It is possible to get into infinite loops with REPEAT and WHILE. Currently, BREAK is *not* handled by the open window, but by whatever executed DME. That is, you must either Ctl-C from your CLI, or send a BREAK to the DME process. I hope to fix this soon. IV FILE PARTICULARS No Matter what you set internal tabs to, tabs in disk files will be 8. This allows you to use your favorite tabs stops (mine are 4) and still have your disk files compatible with TYPE, a printer, etc... DME by default doesn't bother to optimize when writing out files and simply uses spaces. If you `SAVETABS on' before saving (or in your S:.EDRC, etc...), DME will attempt to optimize the file by placing TABS in appropriate places. DME will not place any TABS after the first single, back, or double quote is encountered in a line. If this does not cover every situation in your particular application that you want to be *sure* no tabs will occur in sensitive sections, then you should not use `SAVETABS on'. It should be noted that since DME removes spaces at the end of the line, editing UUENCODED ascii files will not work for uuencoded lines which end with a space. The nominal fix is to add an extra character after each uuencoded line (anything), which is ignored by the UUDECODE program. The command to save the current document under the default name is SAVEOLD, *not* SAVE. SAVE is not a valid command. This is to prevent people who have not read the documentation from assuming 'save' takes an argument (and screwing up their work). SAVEOLD does NOT take an argument, SAVEAS does. SAVEOLD/SAVEAS does not automatically backup the destination file. If you are working in an enviroment where you are worried about ensuring a viable copy can be recovered if your Amiga crashes in the middle of the save, you can write a macro to save the file into two places. Usually, people backup their working disks so this is not neccesary. Workbench Support: If DME is run from the workbench, it will automatically construct an icon file when you save a document. If run from a CLI, no icon file is generated. V WORKBENCH SUPPORT DME V1.26 and beyond support the workbench in the following way: (1) you can click on the DME icon to bring up DME with ram:unnamed. (2) you can select one or more standard ascii documents which have DME as the default tool. If DME has no knowlege of a text icon, it uses its own. Command line arguments are passed to DME via the tooltypes entries for DME's application icon or via individual document icons. The following format is used: ARG=flag See the OVERVIEW section for allowed flags. Only one argument per line is allowed (sorry). The tooltypes for the application icon are processed first, then the tooltypes for each document icon are processed before each file is loaded. ARG= -t10 ARG= -l10 VI REVISION SUMMARY V1.27 RELEASE -macros run about 20% faster due to hashing of the command table -Maximum # of toggles raised to 256 (see IF/WHILE) -small fixes to the code (nothing major) -child windows inherit tab stops, insert mode, and wordwrap mode -MOUSE BUTTONS AND MOVEMENT CAN NOW BE MAPPED -New Commands: ICONIFY (used to be hardwired. Is now a command) -Extended Commands: GOTO (GOTO END) V1.26 Beta, minimal Release -Workbench support -New Command: EXECUTE V1.25 RELEASE -BSAVE does NOT UNBLOCK after saving (switch in functionality yet again) -various bugs fixed (IF, tabs on file save) -New Commands: MARGIN, REFORMAT, WORDWRAP, RESIZE, TOPEDGE, LEFTEDGE, WIDTH, HEIGHT -Command line options added for setting the window size and an optional specified script file (when specified, local .EDRC not sourced). -Enhanced Commands: IF ..more control with conditions, addition of a couple more specifications. JOIN .. functionality slightly changed -keymaps may now be used as macros in other commands. (macros) -New keymaps added to the default set. -Mouse movement cleaned up a little. V1.24 Internal V1.23 RELEASE -S:.EDRC now sourced instead of C:.EDRC -User keymappings now work in COMMAND mode (when you hit ESC). -You can now map the Amiga keys ('A' for Amiga, since 'a' is alt). -Enhanced Commands: IF/IFELSE/WHILE (optional '!' in front of cond) new condition 'cb' 'character in selected block' GOTO (can now say `goto block') -NewCommands: PAGESET SAVETABS -Writing TABS (always 8) out to disk to save space now supported. V1.22 RELEASE (BUF FIXES FROM 1.20) -'newfile' fixed V1.21 RELEASE (BUG FIXES FROM 1.20) -iconify and window handling fixed -left mouse button now tracks the mouse. V1.20 RELEASE -bug fixes: bsave now unmarks the block, bdelete now sets 'modified' flag. (other small fixes). -enhancements: overwrite mode status indicator, find, find-replace now completely implemented (yahhoo!!!) -changed commands: FIND NEXT PREV: no longer loop back to the top of file or top->bottom in the case of PREV. DELINE will now delete text on the line if there is only one line of text. -enhanced commands: GOTO REPEAT -new commands: SAVEMAP SAVESMAP TOGGLE SETTOGGLE RESETTOGGLE TLATE IF IFELSE WHILE BSOURCE FINDSTR REPSTR FINDR NEXTR PREVR NEWWINDOW -new keymappings: (see a-s, a-S, f3) -window iconification with mouse menu button. V1.12 RELEASE -cursor is now pen #3 rather than #1. -changeover to AZTEC C, smaller executable. -now maps shift space to a space. -new commands: REMEOL, WLEFT, WRIGHT -display bug fixes (SPLIT) -FIND/PREV/NEXT will now abort a REPEAT if string not found. V1.11 RELEASE NOTES -Bug fixes (mainly graphical mistakes). -User keymappings are disabled in command mode (so you can unmap single ascii characters you may have mapped). -Illegal key combinations no longer give garbage (e.g. ALT-CURSOR-DOWN) you can, of course, still map them to anything you wish. -Save now checks for error conditions on write. -Uses Default Console Keymap (i.e. no longer assumes USA)... but there *is* some stangeness. V1.00 RELEASE NOTES -has find, but no replace function -marked blocks are not highlighted -assumes USA keyboard (fixed 1.11) -disk files written out use spaces instead of tabs&spaces -No scroll bar yet. VII COMPILING DME now compiles only under AZTEC. You must compile with the 32 bit int option, but may use the small code/data model. You must use V3.00 or above of MY.LIB (MY[L]32.LIB, dated no sooner than MARCH 1987). I use a precompiled symbol file containing ALL the amiga includes (but not any aztec standard includes). Look at the MAKEFILE for further information SHAR_EOF