home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / YADME10.LHA / YADME10 / dme.doc < prev    next >
Encoding:
Text File  |  1994-10-19  |  39.4 KB  |  911 lines

  1.  
  2.              YADME V1.0 released Oct. 1994 by Karl Lukas
  3.  
  4. =======================================================================
  5.  
  6. This file contains the original docs for DME which are still valid. The
  7. new commands are described in the `History' file.
  8.  
  9. =======================================================================
  10.  
  11. dme/dme                                                         dme/dme
  12.  
  13. DME.DOC                 DME version 1.45                 Matthew Dillon
  14.                            July 1991
  15.  
  16. DME, (C)Copyright 1987-90, Matthew Dillon.  All Rights Reserved.
  17. This software may be distributed for non-profit only.  This software is
  18. FREEWARE, not shareware.
  19.  
  20.     Matthew Dillon
  21.     891 Regal Rd
  22.     Berkeley, Ca. 94708
  23.     USA
  24.  
  25.  
  26.     Source is avalable:
  27.  
  28.         (1) By regular mail (send a disk)
  29.         (2) By Electronic mail:
  30.             INTERNET:   uunet.uu.net!overload!dillon        OR
  31.                         dillon@overload.Berkeley.CA.US
  32.  
  33.     Donations welcome but not solicited (I ain't a starving artist).
  34.  
  35.     icon by Bryce Nesbitt
  36.  
  37.     text markers and the text-block stack by Kevin Seghetti (some of the new
  38.     commands for 1.30).
  39.  
  40.     AREXX interface (Bill Hawes' ARexx REXX language interpreter) ported
  41.     by Kim DeVaughn
  42.  
  43.     1.42 additions by Markys Wenzel
  44.  
  45. ---------------------------------------------------------------------------
  46.  
  47. 0   Installation
  48. I   Overview
  49. II  Keymapping          key and mouse mapping
  50. III Command Sequences   DME commands
  51. IV  File Particulars    notes on loading and saving files,
  52. V   Workbench Support
  53. VI  Revision Summary    revision numbering, changes made, etc...
  54. VII Compiling           compiling instructions
  55.  
  56.                                     0
  57.                                INSTALLATION
  58.  
  59. The NULL: device must be mounted to be able to use the EXECUTE command.
  60. This is so EXECUTE works even if the console window goes away.  Otherwise,
  61. simply put DME in an accessable location (usually C:).  Put the dme.icon
  62. file in the same directory as DME if you want to access the application
  63. from the workbench (dme.icon is not needed if accessed from a CLI or shell).
  64.  
  65. People appear to have problems using the EXECUTE command when DME is run
  66. from the workbench.  I have no solution yet.
  67.  
  68. CONFIGURATION of default window placement, pen selection, and most editor
  69. modes (insert/overwrite, margin, etc...) is accomplished by bringing up
  70. DME, setting it up how you like, then selecting the SAVECONFIG menu
  71. option (saves to s:dme.config).
  72.  
  73.  
  74.                                     I
  75.                                  OVERVIEW
  76.  
  77. See REVISIONS section for revisions.  DME is an editor designed mainly for
  78. programmers.  Although it is not a word processor, it does include many
  79. word processing features such as Word-Wrap and automatic paragraph
  80. formatting.  Here is a quick 'features' list:
  81.  
  82.         -control language based on a rich command set accessed manually
  83.          or via arbitrary mapping of keys.  (Every key may be mapped to 128
  84.          different things via qualifier and mouse keys)
  85.  
  86.         -General variables, reference macros as variables, ENV: enviroment
  87.          variables (1.30C and beyond).
  88.  
  89.         -fast visual response (it scrolls quickly)... even faster when
  90.          BlitzFonts or similar text speedup utilities are installed.
  91.  
  92.         -title-line statistics showing your current position in the file,
  93.          file name, whether the file has been modified or not, etc...
  94.  
  95.         -Multiple Windows, ability to iconify windows
  96.  
  97.         -Word Wrap and automatic paragraph formatting.
  98.  
  99.         -ability to map any KEY or MOUSE BUTTON combination.
  100.  
  101.         -Proportional gadget in right border (TJM)
  102.  
  103.         -Attempts to have only one editor running at a time (TJM)
  104.  
  105. DME has been designed to allow easy expansion, and I intend to make many
  106. future improvments.  It has not been designed for user friendliness, but is
  107. straight forward if you read this document [care]fully.
  108.  
  109. AS OF 1.40 and until further notice DME no longer takes command line
  110. arguments other than file arguments, or workbench based window arguments.
  111. DME used to take arguments to specify window dimensions.  Use the saveconfig
  112. command to setup default window parameters.
  113.  
  114. Actually (TJM) it does still take command line options, but only the following:
  115.     -i - iconify (not thoroughly tested for original dme invocation, but seems
  116.          to work fine for subsequent (non-original) dme invocations)
  117.  
  118.     -n - force DME to create a new instance of itself, along with a new DME
  119.          port ("DME1", "DME2", etc. except 1st one: "DME")
  120.  
  121. The 1.40-41 Version is an experimental intermediate version, documentation may
  122. not be up to date.
  123.  
  124. Normally, DME will automatically SOURCE two script files, S:.EDRC, and the
  125. .EDRC in your current directory. These files do not have to exist.  These
  126. script files usually contain mappings and do things (for example, turn on
  127. savetabs).
  128.  
  129.  
  130.                                     II
  131.                                  KEYMAPPING
  132.  
  133. MOUSE BUTTONS:
  134.  
  135.     The mouse buttons and combinations thereof may now be mapped.  The
  136.     default mappings for the mouse buttons are as follows:
  137.  
  138.     Left-button:    Move cursor to current mouse position
  139.     Right-button:   Iconify window
  140.     Left-button held down while moving mouse tracks the cursor
  141.  
  142.     The iconification features:
  143.         -Remembers original window size and placement
  144.         -Remembers placement of iconified window when you re-iconify later.
  145.  
  146.     Currently, you will crash the machine if you run out of memory and DME
  147.     is unable to open the icon window or original window, so be careful.
  148.  
  149.     see below for mapping the mouse buttons and mouse movement.
  150.  
  151.  
  152. KEYBOARD:
  153.  
  154. The rest of the Functional interface for DME is based on key/mouse/menu
  155. mappings and a rich command set.  Unlike other text editors, any
  156. non-qualifier key in DME may be defined to have any meaning whatsoever.  It
  157. just so happens that the default keymappings assign such things as the
  158. (return) key to the RETURN function, the (up) key to the UP function,
  159. etc...  Keys are named by their keycap labels with the following
  160. exceptions:
  161.  
  162.     the name for Back-Space is  BS
  163.     the name for numeric keypad keys are prepended with an NK, except for
  164.     the Enter key which is named 'ENTER'.
  165.     The four cursor control keys are labeled UP, DOWN, LEFT, and RIGHT
  166.     The three mouse buttons are labeled RMB, MMB, and LMB.
  167.  
  168. NOTES:
  169.        You must type commands in lower-case, except for text, which can be
  170.        either lower or upper case, and for upper-case alpha keys when
  171.        specifying keymaps (i.e.  A and s-a are the same key).  The
  172.        exception is the AMIGA qualifier key, which uses 'A' instead of
  173.        'a'(Alt).
  174.  
  175.        Each key may be qualified with any combination of CTRL, ALT, SHIFT,
  176.        AMIGA, or any of the MOUSE buttons.  With 6 qualifiers (7 if your
  177.        mouse has a middle button), you can assign up to 64 (128) different
  178.        maps to each physical key on the keyboard.
  179.  
  180.        The CAPS-LOCK, when lit, is equivalent to SHIFT only for Alpha keys.
  181.  
  182.        The AMIGA-ALT (aA) combination isn't very usable since Intuition
  183.        uses the sequence to duplicate a Mouse SELECT.  Other AMIGA
  184.        sequences are used by intuition for mouse movement and other things.
  185.        Some other qualifier combinations may not be usable due to other
  186.        special sequences.
  187.  
  188.        Some keys must be mapped by their lower-case keycap.  That is, to
  189.        map the '>' key (USA keyboard), you specify shift dot (s-.)
  190.  
  191.  
  192.     ***EXAMPLES:***
  193.  
  194.     tab tab
  195.     a-a ALT a
  196.     A-a AMIGA a
  197.     sA-a        SHIFT AMIGA a
  198.     s-tab       SHIFT tab
  199.     c-tab       CTRL tab
  200.     ac-?        ALT-CTRL ?
  201.     s-f5        SHIFT F5
  202.     nk0 Numeric Keypad 0
  203.     cs-nk0      CTRL SHIFT Numeric Keypad 0
  204.     L-lmb       Left Mouse button pressed
  205.     L-mmove     Mouse moved while left mouse button held down
  206.     LR-lmb      left mouse button hit while right mouse button held down
  207.     s-.         shift . ('>' for USA keyboards)
  208.  
  209.     ***************
  210.  
  211. MAPPING MOUSE BUTTONS
  212.  
  213.     Mouse buttons serve both as QUALIFIERS and as KEYS.  Thus, you can map
  214.     both normal keystrokes which require a mouse button to be held down:
  215.  
  216.         map L-a ((left button and an a))
  217.  
  218.     as well as the mouse keys themselves:
  219.  
  220.         map L-lmb   ((left mouse key))
  221.  
  222.     note that you had to specify the left mouse button down qualifier L as
  223.     well as the left mouse button LMB.  <TJM:> If you don't specify the
  224.     L- qualifier, then you will be mapping the mouse-up event.  Otherwise,
  225.     you are mapping the mouse-down event.  Be careful when mapping the mouse-up
  226.     event, because you will get this event when the proportional gadget is
  227.     moved, too.
  228.  
  229.     If you map the left mouse button, and also map a sequence such as left
  230.     mouse button + a:
  231.  
  232.         map L-lmb   tomouse
  233.         map L-a     ((hello))
  234.  
  235.     Note that the first mapping will always get executed even if you
  236.     intended L-a (that is, BOTH mappings would get executed).  In order
  237.     to avoid confusion you might want to UNMAP the system default mapping
  238.     for the right mouse button (mapped to ICONIFY) if you wish to apply
  239.     combinations to the right mouse button.
  240.  
  241.     MOUSE MOVEMENT is mapped with one or more mouse qualifiers (L, R, M),
  242.     plus 'MMOVE' for the key.  That is:
  243.  
  244.         map LR-mmove ((moving the mouse with both buttons held down))
  245.  
  246.     Or how bout capping the characters under the mouse while moving the
  247.     mouse?
  248.  
  249.         map LR-mmove (tomouse if cl (tlate -32))
  250.  
  251.  
  252. DEFAULT KEYMAPPINGS:
  253.  
  254.     All Printable Ascii keys mapped to their ascii equivalent. BS, DEL, UP,
  255.     DOWN, LEFT, RIGHT, TAB, S-TAB, and ENTER are mapped properly.  These are
  256.     the default system keymappings.
  257.  
  258.  
  259.     map (a-c)       (bcopy)
  260.     map (a-d)       (bdelete)
  261.     map (a-down)    (scrolldown)
  262.     map (a-l)       (while cu (tlate +32 right))
  263.     map (a-m)       (bmove)
  264.     map (a-r)       (nextr)
  265.     map (a-s)       (bsource)
  266.     map (a-u)       (while cl (tlate -32 right))
  267.     map (a-up)      (scrollup)
  268.     map (bs)        (bs)
  269.     map (c-/)       (escimm (find ))
  270.     map (c-])       (ref)
  271.     map (c-[)       (ctags)
  272.     map (c-1)       (goto block)
  273.     map (c-b)       (block)
  274.     map (c-c)       ()
  275.     map (c-del)     (remeol)
  276.     map (c-down)    (pagedown)
  277.     map (c-esc)     (recall)
  278.     map (c-f)       (reformat)
  279.     map (c-g)       (escimm (goto ))
  280.     map (c-i)       (insertmode on)
  281.     map (c-j)       (join)
  282.     map (c-l)       (wleft)
  283.     map (c-n)       (next)
  284.     map (c-o)       (insertmode off)
  285.     map (c-p)       (prev)
  286.     map (c-q)       (quit)
  287.     map (c-r)       (wright)
  288.     map (c-s)       (split first down)
  289.     map (c-u)       (unblock)
  290.     map (c-up)      (pageup)
  291.     map (c-w)       (wordwrap toggle)
  292.     map (del)       (del)
  293.     map (down)      (down)
  294.     map (enter)     (return)
  295.     map (esc)       (esc)
  296.     map (f1)        (escimm (insfile ))
  297.     map (f10)       (saveold quit)
  298.     map (f2)        (escimm (newfile ))
  299.     map (f3)        (escimm (newwindow newfile ))
  300.     map (f6)        (saveold iconify)
  301.     map (f7)        (escimm (bsave ))
  302.     map (f8)        (saveold escimm (newfile ))
  303.     map (f9)        (saveold)
  304.     map (L-lmb)     (tomouse)
  305.     map (L-mmo)     (tomouse)
  306.     map (left)      (left)
  307.     map (R-rmb)     (iconify)
  308.     map (return)    (ifelse b (return) (return insline) up firstnb down)
  309.     map (right)     (right)
  310.     map (s- )       (( ))
  311.     map (s-del)     (deline)
  312.     map (s-down)    (bottom)
  313.     map (s-left)    (first)
  314.     map (s-right)   (last)
  315.     map (s-tab)     (backtab)
  316.     map (s-up)      (top)
  317.     map (sa-s)      (unblock block block bsource)
  318.     map (tab)       (tab)
  319.     map (up)        (up)
  320.  
  321.  
  322.  
  323.                                     III
  324.                              COMMAND SEQUENCES
  325.  
  326. DME has a rich command set which allows you to embed commands within
  327. commands, or specify multiple commands in a row.  A command consists of a
  328. KEYWORD followed by a FIXED number of arguments (0, 1, 2...).  The argument
  329. delimeter in DME is a SPACE.  Therefore, to embed strings containing spaces
  330. as a single argument, you must surround the string with (string)
  331. (backsinglequote-string-singlequote).  TEXT to be written as if typed is
  332. also specified via a string in backquote-quotes.  For example:
  333. ALSO 1-CHAR:  )c or 'c
  334.  
  335.     right right (hello) right right (hello) enter down
  336.     map f4 (right right) map f5 (left left)
  337.     map f4 ((hello))
  338.  
  339. Reiterating (because this is important!)... If a command expects ONE
  340. argument, then it really does expect a single argument, and any remaining
  341. arguments are thought to be the next command... so:
  342.  
  343.     map f4 right
  344.                                     -right is only one word, so no need
  345.                                      for ().
  346.     map f4 (right right)
  347.                                     -we want to map f4 to two rights... we
  348.                                      need the () or the second right will
  349.                                      not be part of the map.
  350.  
  351.     map c-del (repeat cright del)
  352.                                     -this is already implimented as REMEOL,
  353.                                      but shown here for clarity.
  354.  
  355. Some arguments will eventually be fed through the command interpreter more
  356. than once.  The MAP command is a good example.  When you execute a MAP
  357. command, the first run through the command interpreter installs the map
  358. string minus a set of quotes.  So, if you want to specify text, you must
  359. enclose the text in two sets of ((text)) because the map string gets passed
  360. through the command interpreter again when you hit the mapped key.  Here
  361. are some more complex examples:
  362.  
  363.     map f4 (right right (hello) left left)      *RIGHT*
  364.     map f4 right right hello left left          *WRONG*
  365.  
  366.     map f4 (map f4 ((hello)))
  367.                                     -the first time you hit F4, it's command
  368.                                      is to re-map itself to the TEXT (hello).
  369.                                      (gads!).
  370.  
  371.     map c-i (repeat tr (( )))
  372.                                     -example of how to embed a space in a
  373.                                      map and repeat (goes through command
  374.                                      interpreter three times!).
  375.  
  376.  
  377. An easy way to fool around executing commands or making maps is either to
  378. use the ESC key (which enters command mode), or  a-S (alt-shift-s), which
  379. EXECUTES the current DME line that the cursor is on.... so you can use DME
  380. to edit and test your new keymappings.
  381.  
  382.  
  383.                                 STRING VARIABLES
  384.  
  385.     String variables are replaced with their contents.  Three specification
  386.     forms are allowed:
  387.  
  388.     $varname        - varname can only consist of a-z,A-Z,0-9,-,_
  389.     $(varname)      - anything not containing a '(' or ')'
  390.     $`varname'      - anything not containing a '`' or '''
  391.  
  392.     Several special variables exist:
  393.  
  394.         filename    - the current filename
  395.         scanf       - the current scanf'd string (see SCANF below)
  396.         lineno      - the current cursor line number (1 .. N)
  397.         colno       - the current cursor column number (1 .. N)
  398.         modified    - modified flag (1 or 0)
  399.         margin      - the current margin (1 .. N)
  400.         currentline - the entire line on which the cursor sits
  401.         fpath       - path part of current file name (fully qualified under 2.0 - TJM)
  402.         fname       - current filename without fpath part
  403.         rexxport    - this dme invocation's rexx port name (TJM)
  404.  
  405.     Other variables cause a search of three variable domains to find the
  406.     contents.  For example, if you give  $DMEFONT:
  407.  
  408.         (1) An Internal variable named DMEFONT is searched for.  Internal
  409.             variables are case sensitive.  (see SET, UNSET)
  410.  
  411.         (2) An Enviroment variable name DMEFONT is searched for.  Enviroment
  412.             variables are NOT case sensitive.  (see SETENV, UNSETENV).  The
  413.             1.3 ENV: is used.
  414.  
  415.         (3) A DME keymap or menu definition named DMEFONT is searched for.
  416.             This allows you to say something like $sa-tab to insert the
  417.             contents of the shift-alt-tab keymap.   (see MAP, UNMAP, and
  418.             MENU oriented commands).
  419.  
  420.     The reason for the other two forms of variable specifiction is to allow
  421.     one to access strangely named variables (with puncuation and other crap).
  422.  
  423.     SPECIAL NOTE:  What is wrong with this command?
  424.  
  425.         repeat 100 (first ($myvar))
  426.  
  427.     What is wrong is that $myvar is evaluated BEFORE the repeat is
  428.     executed.  myvar might contain characters that would confuse the
  429.     command specification when.  That is, if myvar contained a '(' you
  430.     could get something like:   repeat 100 (fist ((())  which is obviously
  431.     incorrect.  By using \ you can cause $myvar to be evaluated at
  432.     loop-execution time rather than before:
  433.  
  434.         repeat 100 (first (\$myvar))
  435.  
  436.     These kinds of problems can also occur when you do keymaps... you
  437.     probably do not want to evaluate the variable at keymap-entry time,
  438.     but rather would want the variable evaluated at keymap-execution time.
  439.  
  440.     On the otherhand, this is perfectly allowable:
  441.  
  442.         set x (tlate +1)
  443.         repeat 100 ($x)
  444.  
  445.     Which executes the command (tlate +1) 100 times... By NOT surrounding
  446.     the variable with parens (depends on the situation), the variable is
  447.     executed rather than inserted as text.
  448.  
  449.  
  450.                            SPECIAL CHARACTERS
  451.  
  452.     ^ is used to introduce a control character.  For example, ^c would
  453.     embed a control-c.  You cannot embed c-@ (ascii code 0).
  454.  
  455.     backslash \ is used to override special meanings.  The next character
  456.     is overriden.
  457.  
  458.     map c-a ((^l))      -map control a to produce a control l
  459.     map c-a ((\\\^l))   -map control a to produce a "^l".  The first
  460.                          \ overides the second, and the third overides
  461.                          the ^.
  462.  
  463. COMMAND LIST:
  464.  
  465.     (text)          -enter text as if typed.
  466.     key             -execute a keymap as a macro (example:  c-a)
  467.     header-item     -execute a menu item as a macro (example: Project-Save)
  468.                      (case independant)
  469.     ADDPATH path    -Add the specified symbolic directory to DME's special
  470.                      search path (see REF and CTAGS).
  471.     APPENDSAVE name -append current text to a file
  472.     ARPINSFILE      -INSFILE filerequestor, only if ARP.LIBRARY installed
  473.     ARPLOAD         -NEWFILE filerequestor, only if ARP.LIBRARY installed
  474.     ARPSAVE         -SAVEAS  filerequestor, only if ARP.LIBRARY installed
  475.     ASLFONT         -\
  476.     ASLINSFILE      - \/obvious...
  477.     ASLLOAD         - /
  478.     ASLSAVE         -/
  479.     BACK            -same as BS
  480.     BACKTAB         -backward tab
  481.     BAPPENDSAVE name-append the block to a file
  482.     BCOPY           -copy block before cursor line
  483.     BDELETE         -delete the block
  484.     BGPEN pen       -set background pen
  485.     BLOCK           -Set start or end of block
  486.     BMOVE           -move block before cursor line
  487.     BOTTOM          -Move to Bottom of File
  488.     BS              -backspace, (delete char to left of cursor)
  489.     BSAVE file      -save the block to a file
  490.     BSOURCE         -source current text block as if it were a script file
  491.     CD name         - change default directory
  492.     CHFILENAME name -change the name of the working file
  493.     COL offset      - adjust column # by offset
  494.     CTAGS           -search for the tag under the cursor (see below)
  495.     DEL             -delete, (deletes char under cursor)
  496.     DELINE          -delete line
  497.     DOWN            -cursor down
  498.     DOWNADD         -cursor down.  If at bottom of text, add a line.
  499.     ESC             -toggle manual command entry mode
  500.     ESCIMM arg      -go into command entry mode prompting with a
  501.                      predefined string.
  502.     EXECUTE comm    -Execute a CLI command
  503.     FGPEN pen       -Set foreground pen
  504.     FIND string     -SET the search pattern and do a NEXT
  505.     FINDFILE fname  -Attempt to make window/buffer with file name 'fname' current
  506.     FINDR s1 s2     -Set find and replace patterns and do one find/rep.
  507.     FINDSTR string  -SET the search string pattern
  508.     FIRST           -move to column 1
  509.     FIRSTNB         -Move to first non-blank in line.
  510.     GETVAL rest     -preprocess rest of line & return in RESULT (rexx only) (TJM+MMW)
  511.     GOTO BLOCK      -Goto the beginning of the marked block.
  512.     GOTO START      -same as GOTO BLOCK.  undefined if no block
  513.     GOTO END        -goes to the END of the marked block.  undef. if no blk.
  514.     GOTO [+/-]N     -Goto an absolute or relative line number
  515.     HGPEN pen       -set highlight pen
  516.     ICONIFY         -iconify the window
  517.     IF cnd act      -IF/WHILE/IFELSE.. SEE BELOW
  518.     IFELSE cnd ifact elseact
  519.     IGNORECASE what -set case ignore for seaches.  what = on, off, or toggle
  520.     INSERTMODE what -set INSERTMODE.  what = on, off, or toggle
  521.     INSFILE name    -insert a file into the current text.
  522.     INSLINE         -insert line
  523.     JOIN            -join next line to line at cursor
  524.     JUSTIFY how     -simple text justification.  Currently only 'full'
  525.                      justification supported (justify full).
  526.     LAST            -move one beyond the last non-space in a line.
  527.     LEFT            -cursor left
  528.     MAP key map     -map a key to a keymap
  529.     MARGIN N        -set WordWrap and paragraph formatting margin
  530.                      (related to WORDWRAP and REFORMAT)
  531.     MENUADD hdr item cmd    -add menu item
  532.     MENUDEL hdr item        -delete menu item
  533.     MENUDELHDR hdr          -delete menu header
  534.     MENUCLEAR               -delete entire menu
  535.     MENUON                  -enable menus  (multiple calls are stacked)
  536.     MENUOFF                 -disable menus (multiple calls are stacked)
  537.     MODIFIED on/off/toggle
  538.                     -set modified flag manually
  539.  
  540.     NEWFILE name    -replace current text with new file
  541.     NEWWINDOW       -open new window using default window parameters
  542.     NEXT            -find next occurance of search pattern
  543.     NEXTR           -find next occurance and replace
  544.     NULL            -no operation
  545.     OPENWINDOW geo  -open new window using specified geometry.  Geometry is
  546.                      specified as:  +/-leftedge+/-topedge+/-width+/-height,
  547.                      where negative numbers denote values relative to the
  548.                      width or height of the screen.  For example, the
  549.                      following opens a nearly full-screen window leaving
  550.                      10 pixels above, below, to the left, and to the right:
  551.  
  552.                         openwindow +10+10-10-10
  553.  
  554.                      The following opens a window in the upper right hand
  555.                      corner of width 320 and height 100.
  556.  
  557.                         openwindow  -320+0+320+100
  558.                         openwindow  -320+0-0+100        (same thing)
  559.                         openwindow  -320-100-0-0        (lower rght hand corner)
  560.  
  561.     PAGEDOWN        -pagedown a partial page (see PAGESET)
  562.     PAGESET n       -n PERCENT (0 to 100). page step size relative to the
  563.                      current number of rows in the window.
  564.     PAGEUP          -pageup a partial page (see PAGESET)
  565.     PING n          -set a text marker (0-9).
  566.     PONG n          -move to a previously set text marker (0-9)
  567.     PREV            -find previous occurance of search pattern
  568.     PREVR           -find previous occurance and replace
  569.     PUSHMARK        -push the currently marked block onto a stack and
  570.                      unhighlight the block
  571.     POPMARK         -pop the block stack and highlight the popped block
  572.     PURGEMARK       -clear the mark stack
  573.     QUIT            -quit
  574.     RECALL          -recall most recently entered command.  Must be used
  575.                      from a keymap (c-esc).
  576.     REF             -reference string under cursor (see below)
  577.     REFORMAT        -reformat paragraph using the margin.
  578.     REMEOL          -Remove text under and beyond the cursor.
  579.     REMPATH wild    -Remove one or more symbolic directorys from DME's
  580.                      special path... a */? wildcard is acceptable.
  581.     REQFONT         -\
  582.     REQINSFILE      - \/obvious...
  583.     REQLOAD         - /
  584.     REQSAVE         -/
  585.     REPEAT cnt comm -SEE BELOW
  586.     REPSTR string   -SET the replace string pattern
  587.     RESETTOGGLE N   -clear toggle array entry N(0..31)
  588.     RESIZE cols rows-Resize current window. E.G:  (resize 70 23)
  589.     RETURN          -same as (FIRST DOWNADD)
  590.     RIGHT           -cursor right
  591.     RX              -ARexx macro, no args   (RX macname)            (async - TJM)
  592.     RX1             -ARexx macro, one arg   (RX1 macname arg1)      (async - TJM)
  593.     RX2             -ARexx macro, two args  (RX2 macname arg1 arg2) (async - TJM)
  594.     RXBLOCK         -block all intuition messages (REXX only - TJM)
  595.     RXUNBLOCK       -unblock RXBLOCK (no nesting) (REXX only - TJM)
  596.     SAVEAS file     -save current text under a different name (title
  597.                      line name does not change)
  598.     SAVECONFIG      -save current editor configuration to s:dme.config
  599.     SAVEMAP file    -save user keymappings
  600.     SAVEOLD         -save current text under current name
  601.     SAVESMAP file   -save all keymappings, including system keymaps
  602.     SAVETABS on/off -Optimize file saves by crunching spaces to tabs.
  603.                      The default is OFF.
  604.     SCANF ctlstr    -scan the string at the current text position (C scanf)
  605.                      example:   (scanf %s)          SEE BELOW
  606.     SCREENBOTTOM    -Move cursor to the bottom of the screen.
  607.     SCREENTOP       -Move cursor to the top of the screen
  608.     SCROLLUP        -Scroll up without moving cursor
  609.     SCROLLDOWN      -Scroll down without moving cursor
  610.  
  611.     SET var str     -create/modify an internal variable (access w/ $)
  612.     SETENV var str  -create/modify an enviroment variable (1.3 ENV:)
  613.     SETFONT font sz -Set the window's font.  ex:   (setfont topaz.font 11)
  614.  
  615.     SETPARCOL col   -Set the LEFT margin for word wrap mode paragraphing &
  616.                      reformat.  MUST be less than MARGIN.
  617.  
  618.     SETTOGGLE N     -set toggle array entry N  (0..255)
  619.     SOURCE file     -source a script file. '#' in first column for comment
  620.     SPLIT           -Split line at cursor
  621.     SWAPMARK        -PUSHMARK, swap top two marks on stack, POPMARK
  622.     TAB             -forward tab
  623.     TABSTOP N       -Set tab stops every N.  does not effect text load
  624.     TITLE (title)   -set window title manually
  625.     TLATE [+/-]N    -translate character by +N or -N, or set character
  626.                      to exactly N if no + or -. (e.g. TLATE +65 TLATE 3)
  627.     TOGGLE N        -flip toggle array entry N (0..255)  (See IF)
  628.     TOMOUSE         -moves cursor to mouse position
  629.     TOP             -Move to Top of File
  630.     TPEN pen        -set pen for title bar rendering
  631.     UNBLOCK         -clear the block markers for the current window
  632.     UNDELINE        -insert most recently deleted line (only last line saved)
  633.     UNDO            -undo current line (must be mapped to a key to work)
  634.     UNJUSTIFY       -removes extra spaces in a line
  635.     UNMAP key       -unmap a key
  636.     UP              -cursor up
  637.     UNSET var       -delete an internal variable
  638.     UNSETENV var    -delete an enviroment variable
  639.     WHILE cnd act   -(see below)
  640.     WLEFT           -move to beginning of previous word.  If in the
  641.                      middle of a word, move to beginning of current word.
  642.     WORDWRAP on/off/toggle
  643.                     -Word Wrap mode (related to MARGIN)
  644.     WRIGHT          -move to beginning of next word
  645.  
  646.  
  647.         -------------------------------------------------------------
  648.     -------------    More Info on Complicated Commands  -----------------
  649.         -------------------------------------------------------------
  650.  
  651.     MENUOFF/ON      -This command will enable/disable menus.  Users
  652.                      who have a whole bunch of MENUADD commands in
  653.                      their .EDRC should note that disabling menus at
  654.                      the beginning will speed up the MENUADD commands.
  655.                      Then reenable menus at the end.  These calls are
  656.                      stackable in that if you call MENUOFF, say, twice,
  657.                      it will take two MENUON commands to restore
  658.                      menus.  The reverse is not true.
  659.  
  660.     CTAGS   (c-[)   -(1.30B and beyond) Compatible with Aztec's CTAGS
  661.                      program.  This command searches for the subroutine
  662.                      name under the cursor in the associated tags file
  663.                      ("tags" in the directory holding the file currently
  664.                      being edited).  Also, the file "tags" in directories
  665.                      specified by the special DME path (see ADDPATH and
  666.                      REMPATH) will be searched.
  667.  
  668.                      If the tag is found, it loads the file the subroutine
  669.                      resides in if neccesary, then WindowToFront()'s the
  670.                      window, ActivateWindow()s it, and GOTO's the line
  671.                      where the subroutine starts.  The search within the
  672.                      source file is anchored to the left column.  If the
  673.                      file is already loaded, it is not reloaded.
  674.  
  675.                      This enables a programmer to quickly trace subroutines
  676.                      over an arbitrary number of files.
  677.  
  678.                      The tags file contains one or more lines of the following
  679.                      format:
  680.  
  681.                      subroutine-name file-name /^search-pattern
  682.                      (that's a slash and a carrot, then the pattern)
  683.  
  684.                      -- EXAMPLE of 'TAGS' file:
  685.                      setpen cmd1.c /^setpen(
  686.                      do_up cmd1.c /^do_up(
  687.                      --
  688.  
  689.                     SPECIAL NOTE:  CTAGS will work even if you are not in
  690.                     the directory containing the file.  You can thus place
  691.                     a tags file in the directory containing the files it
  692.                     references, and the filenames WITHIN the tags file need
  693.                     not be a full path.
  694.  
  695.     REF     (c-])   -(1.28d and beyond).  This is a very powerful new
  696.                      command that allows you to bring up a reference to
  697.                      a keyword with a single keystroke.  This is useful for
  698.                      programmers who have on-line documentation or fully
  699.                      commented include files.  DME opens a window just big
  700.                      enough to fit the reference.
  701.  
  702.                      NOTE:  The new CTAGS command may be more suited to
  703.                      your application.
  704.  
  705.                      The reference keyword is the alpha-numeric string
  706.                      currently under the cursor.  REF will search the
  707.                      file DME.REFS in the directories listed by the
  708.                      special DME path (see ADDPATH and REMPATH).  The
  709.                      file must be built by the user and each line has the
  710.                      following format:
  711.  
  712.                      (keyword) (nolines/endstring) (file) (searchstr/##seekpos)
  713.  
  714.                      Surrounding the keywords with `' or () is optional if
  715.                      the keyword does not contain spaces.
  716.  
  717.                         keyword     -keyword under cursor
  718.                         nolines/ends-either a number (the number of lines
  719.                                      in the reference) or a string denoting
  720.                                      the end of the reference when found.
  721.                         file        -the file containing the reference
  722.                                      material
  723.                         searchstr/##-search string in file that indicates
  724.                                      the beginning of the reference, or
  725.                                      two hashes (##) and the seek position
  726.                                      in decimal (like ##2343).  The latter
  727.                                      method is used mainly for reference-
  728.                                      generator programs.
  729.  
  730.                      Upon finding a successful keyword match the specified
  731.                      file is openned and the seach string searched for.  If
  732.                      a seek position was specified no search is made and a
  733.                      seek is made to the beginning of the reference.  If
  734.                      found, the indicated number of lines (if a number
  735.                      is specified for <nolines/ends>) or until a match with
  736.                      the endstring (if a string was specified) will be
  737.                      placed in a temporary file and a new DME window
  738.                      brought up. The temporary file is then deleted.
  739.  
  740.                      When looking for matches, the compare is anchored at
  741.                      the beginning of each line in the file.  Thus, any
  742.                      spaces in front of the string in the file must be
  743.                      duplicated.
  744.  
  745.                      T: must be assigned to a temporary directory, usually
  746.                      RAM:   See the included example DME.REFS file.  The
  747.                      most common things referenced are the autodocs and
  748.                      commented include files.
  749.  
  750.                      Some modification of the included DME.REFS.* files may
  751.                      be required due to differences in include file and
  752.                      autodoc format.
  753.  
  754.     SCANF ctlstr    -This is equivalent to the C scanf() function with the
  755.                      restriction that only one conversion is allowed, that
  756.                      conversion being a string.  Thus:
  757.  
  758.                      scanf %s       will place the string under the
  759.                                     cursor in the variable $scanf
  760.  
  761.                      scanf %4s      The first four chars of the string.
  762.  
  763.                      scanf %[0123456789]
  764.                                     will scan the string while it contains
  765.                                     specified chars (e.g. scan a number)
  766.  
  767.                      scanf %[~,]    will scan the string until it finds
  768.                                     a ','.
  769.  
  770.                     The variable $scanf may be used as an argument in any
  771.                     command.  Example:  (insfile $scanf).
  772.  
  773.                     NOTE:  If using $scanf in a macro, you probably want
  774.                     to precede it with a \ to prevent it from being
  775.                     evaluated at macro-creation time.
  776.  
  777.  
  778.     REPEAT N arg    -Repeat (arg) N times.  Apart from being a number, N
  779.                      can also be one of:
  780.  
  781.                         line    Current line # (lines begin at 1)
  782.                         lbot    #lines to the bottom, including current line
  783.                         cleft   column # (cols begin at 0)
  784.                         cright  #chars to eol, including current char under cursor
  785.                         tr      #char positions to next tab
  786.                         tl      #char positions to next back tab
  787.  
  788.                     Certain commands can abort a REPEAT loop.
  789.                     Specifically, any FIND[R], NEXT[R], or PREV[R] in which
  790.                     the search string is NOT found will abort a REPEAT.
  791.                     Most operations which can go out of bounds, such as
  792.                     UP, LEFT, RIGHT, DOWN, also abort a repeat.
  793.  
  794.                     Specifying -1 as N causes REPEAT to go on forever
  795.                     (well, actually, 0xFFFFFFFF times) or until an abort.
  796.  
  797.     IF [!]condition arg
  798.     WHILE [!]condition arg
  799.     IFELSE [!]condition arg else arg
  800.  
  801.             If the specified condition is true, execute the argument.  For
  802.             WHILE, the argument is executed until the condition is false
  803.             (be careful!).
  804.  
  805.             the optional '!' inverts the logic.
  806.  
  807.             Conditions:
  808.  
  809.  
  810.             #       if toggle entry # is SET.  there are 256 toggles (0..255)
  811.             t       if On line 1
  812.             b       if On last line
  813.             l       if At column 0
  814.             r       if At end of line (spaces below and beyond)
  815.             m       if Text has been modified
  816.             i       if in insert mode
  817.             x[<=>]# if column position (starts at 1) is (any OR combo of
  818.                     <, =, or >) than some number.  Example:   x<=20
  819.             y[<=>]# if Line number (starts at 1) is (same as for x)
  820.             cl      character under cursor is lower case alpha
  821.             cu      character under cursor is upper case alpha
  822.             ca      character under cursor is alpha-numeric
  823.             cn      character under cursor is numeric
  824.             c[<=>]# character under cursor is ascii code # (# in decimal)
  825.                     optional conditionals as in 'x' and 'y'.
  826.             cb      cursor within a block
  827.             e       in cmdline mode
  828.  
  829.         Example: simulating an insert mode toggle: ALT-i (not CTL-i)
  830.  
  831.     map a-i (ifelse 0 (toggle 0 insertmode OFF) (toggle 0 insertmode ON))
  832.  
  833.         Example: while lower case, map to upper case and move right.
  834.  
  835.     map c-U (while cl (tlate -32 right))
  836.  
  837.         Example: Search/Replace all of text.
  838.  
  839.     map c-R (escimm (findstr ) escimm (repstr ) repeat -1 nextr)
  840.  
  841.      if c<32 ((char under cursor is smaller than 32))
  842.      if c<>32 ((char under cursor is not equal to 32))
  843.      while !b down
  844.  
  845.  
  846.                                     IV
  847.                              FILE PARTICULARS
  848.  
  849. No Matter what you set internal tabs to, tabs in disk files will be 8.
  850. This allows you to use your favorite tabs stops (mine are 4) and still
  851. have your disk files compatible with TYPE, a printer, etc...  DME by
  852. default doesn't bother to optimize when writing out files and simply uses
  853. spaces. If you (SAVETABS on) before saving (or in your S:.EDRC, etc...),
  854. DME will attempt to optimize the file by placing TABS in appropriate
  855. places.  DME will not place any TABS after the first single, back, or
  856. double quote is encountered in a line.  If this does not cover every
  857. situation in your particular application that you want to be *sure* no tabs
  858. will occur in sensitive sections, then you should not use (SAVETABS on).
  859.  
  860. It should be noted that since DME removes spaces at the end of the line,
  861. editing UUENCODED ascii files will not work for uuencoded lines which end
  862. with a space.  The nominal fix is to add an extra character after each
  863. uuencoded line (anything) in the proper column, which is ignored by the
  864. UUDECODE program.
  865.  
  866. The command to save the current document under the default name is SAVEOLD,
  867. *not* SAVE.  SAVE is not a valid command.  This is to prevent people who
  868. have not read the documentation from assuming 'save' takes an argument (and
  869. screwing up their work).  SAVEOLD does NOT take an argument, SAVEAS does.
  870.  
  871. SAVEOLD/SAVEAS do not automatically backup the destination file.  If you
  872. are working in an enviroment where you are worried about ensuring a viable
  873. copy can be recovered if your Amiga crashes in the middle of the save, you
  874. can write a macro to save the file into two places.  Usually, people backup
  875. their working disks so this is not neccesary.
  876.  
  877. Workbench Support:  If DME is run from the workbench, it will automatically
  878. construct an icon file when you save a document.  If run from a CLI, no
  879. icon file is generated.
  880.  
  881.                                     V
  882.                               WORKBENCH SUPPORT
  883.  
  884. DME V1.26 and beyond support the workbench in the following way:  (1) you
  885. can click on the DME icon to bring up DME with the file "unnamed".  (2) you
  886. can select one or more standard ascii documents which have DME as the
  887. default tool.  If DME has no knowlege of a text icon, it uses its own.
  888. Command line arguments are passed to DME via the tooltypes entries for
  889. DME's application icon or via individual document icons.  The following
  890. format is used:  (This is a hack, no?)
  891.  
  892.     ****** WARNING, 1.40-41, most workbench options do not work.
  893.  
  894.     ARG=flag
  895.  
  896.     See the OVERVIEW section for allowed flags.  Only one argument per line
  897.     is allowed (sorry).  The tooltypes for the application icon are
  898.     processed first, then the tooltypes for each document icon are
  899.     processed before each file is loaded.
  900.  
  901.     ARG= -t10
  902.     ARG= -l10
  903.  
  904.  
  905.                                     VII
  906.                                 COMPILING
  907.  
  908. DME now compiles under either Manx C or Lattice C (V5.02 and beyond).
  909. dres.library is no longer required.
  910.  
  911.