home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 100-199 / ff153.lzh / Dme / docs / dme.doc < prev   
Text File  |  1987-06-15  |  39KB  |  897 lines

  1.  
  2. DME.DOC                 DME version 1.30                Matthew Dillon
  3.                           21 May 1988
  4.  
  5. DME V1.30  (C)CopyRight 1987, Matthew Dillon.  All Rights Reserved.
  6. This software may be distributed for non-profit only.  This software is
  7. FREEWARE, not shareware.
  8.  
  9.     Matthew Dillon
  10.     891 Regal Rd
  11.     Berkeley, California  94708
  12.     USA
  13.  
  14.     Source is avalable:
  15.  
  16.         (1) By anonymous FTP to UCBVAX.BERKELEY.EDU (ARPANET)
  17.         (2) By regular mail (send a disk)
  18.         (3) By Electronic mail:
  19.             ARPANET:    dillon@ucbvax.berkeley.edu
  20.             USENET:     ...!ihnp4!ucbvax!dillon
  21.             (may take a while for me to respond)
  22.  
  23.  
  24.     Donations welcome but not solicited (I ain't a starving artist).
  25.  
  26.     icon by Bryce Nesbitt
  27.  
  28.     text markers and the text-block stack by Kevin Seghetti (some of the new
  29.     commands for 1.30).
  30.  
  31.     AREXX interface (Bill Hawes' ARexx REXX language interpreter) ported
  32.     by Kim DeVaughn
  33.  
  34.  
  35. ---------------------------------------------------------------------------
  36.  
  37. I   Overview
  38. II  Keymapping          key and mouse mapping
  39. III Command Sequences   DME commands
  40. IV  File Particulars    notes on loading and saving files,
  41. V   Workbench Support
  42. VI  Revision Summary    revision numbering, changes made, etc...
  43. VII Compiling           compiling instructions
  44.  
  45.                                     I
  46.                                  OVERVIEW
  47.  
  48. See REVISIONS section for revisions.  DME is an editor designed mainly for
  49. programmers.  Although it is not a word processor, it does include many
  50. word processing features such as Word-Wrap and automatic paragraph
  51. formatting.  Here is a quick 'features' list:
  52.  
  53.         -control language based on a rich command set accessed manually
  54.          or via arbitrary mapping of keys.  (Every key may be mapped to 128
  55.          different things via qualifier and mouse keys)
  56.  
  57.         -fast visual response (it scrolls quickly)... even faster when
  58.          BlitzFonts or similar text speedup utilities are installed.
  59.  
  60.         -title-line statistics showing your current position in the file,
  61.          file name, whether the file has been modified or not, etc...
  62.  
  63.         -Multiple Windows, ability to iconify windows
  64.  
  65.         -Word Wrap and automatic paragraph formatting.
  66.  
  67.         -ability to map any KEY or MOUSE BUTTON combination.
  68.  
  69. DME has been designed to allow easy expansion, and I intend to make many
  70. future improvments.  It has not been designed for user friendliness, but is
  71. straight forward if you read this document [care]fully.
  72.  
  73. DME can take any number of arguments.  Any argument without a '-' in front
  74. of it is considered to be a file.   Normally, DME will automatically SOURCE
  75. two script files, S:.EDRC, and the .EDRC in your current directory. These
  76. files do not have to exist.  These script files usually contain mappings
  77. and do things (for example, turn on savetabs).
  78.  
  79.     FLAGS:
  80.             -ffilename      -source this script file instead of .EDRC
  81.  
  82.             -b              -normally when multiple files are specified,
  83.                              DME opens them with small windows.  This opens
  84.                              them with normal sized windows.
  85.  
  86.             -tN     -Open the window on scan line N
  87.             -lN     -Open the window offset N scan columns
  88.             -wN     -Make the window N pixels wide
  89.             -hN     -Make the window N pixels high
  90.  
  91.  
  92.  
  93.                                     II
  94.                                  KEYMAPPING
  95.  
  96. MOUSE BUTTONS:
  97.  
  98.     The mouse buttons and combinations thereof may now be mapped.  The
  99.     default mappings for the mouse buttons are as follows:
  100.  
  101.     Left-button:    Move cursor to current mouse position
  102.     Right-button:   Iconify window
  103.     Left-button held down while moving mouse tracks the cursor
  104.  
  105.     The iconification features:
  106.         -Remembers original window size and placement
  107.         -Remembers placement of iconified window when you re-iconify later.
  108.  
  109.     Currently, you will crash the machine if you run out of memory and DME
  110.     is unable to open the icon window or original window, so be careful.
  111.  
  112.     see below for mapping the mouse buttons and mouse movement.
  113.  
  114.  
  115. KEYBOARD:
  116.  
  117. The rest of the Functional interface for DME is based on key/mouse mappings
  118. and a rich command set.  Unlike other text editors, any non-qualifier key
  119. in DME may have any meaning whatsoever.  It just so happens that the
  120. default keymappings assign such things as the (return) key to the RETURN
  121. function, the (up) key to the UP function, etc...  Keys are named by their
  122. keycap labels with the following exceptions:
  123.  
  124.     the name for Back-Space is  BS
  125.     the name for numeric keypad keys are prepended with an NK, except for
  126.     the Enter key which is named 'ENTER'.
  127.     The four cursor control keys are labeled UP, DOWN, LEFT, and RIGHT
  128.     The three mouse buttons are labeled RMB, MMB, and LMB.
  129.  
  130. NOTES:
  131.        The normal Amiga mouse has only two buttons, the Left and the Right
  132.        mouse buttons (LMB, RMB).  A properly installed three-button mouse
  133.        is also supported.
  134.  
  135.        You must type commands in lower-case, except for text, which can be
  136.        either lower or upper case, and for upper-case alpha keys when
  137.        specifying keymaps (i.e.  A and s-a are the same key).  The
  138.        exception is the AMIGA qualifier key, which uses 'A' instead of
  139.        'a'(Alt).
  140.  
  141.        Each key may be qualified with any combination of CTRL, ALT, SHIFT,
  142.        AMIGA, or any of the MOUSE buttons.  With 6 qualifiers (7 if your
  143.        mouse has a middle button), you can assign up to 64 (128) different
  144.        maps to each physical key on the keyboard.
  145.  
  146.        The CAPS-LOCK, when lit, is equivalent to SHIFT only for Alpha keys.
  147.  
  148.        The AMIGA-ALT (aA) combination isn't very usable since Intuition
  149.        uses the sequence to duplicate a Mouse SELECT.  Other AMIGA
  150.        sequences are used by intuition for mouse movement and other things.
  151.        Some other qualifier combinations may not be usable due to other
  152.        special sequences.
  153.  
  154.        Some keys must be mapped by their lower-case keycap.  That is, to
  155.        map the '>' key (USA keyboard), you specify shift dot (s-.)
  156.  
  157.  
  158.     ***EXAMPLES:***
  159.  
  160.     tab tab
  161.     a-a ALT a
  162.     A-a AMIGA a
  163.     sA-a        SHIFT AMIGA a
  164.     s-tab       SHIFT tab
  165.     c-tab       CTRL tab
  166.     ac-?        ALT-CTRL ?
  167.     s-f5        SHIFT F5
  168.     nk0 Numeric Keypad 0
  169.     cs-nk0      CTRL SHIFT Numeric Keypad 0
  170.     L-lmb       Left Mouse button pressed
  171.     L-mmove     Mouse moved while left mouse button held down
  172.     LR-lmb      left mouse button hit while right mouse button held down
  173.     s-.         shift . ('>' for USA keyboards)
  174.  
  175.     ***************
  176.  
  177. MAPPING MOUSE BUTTONS
  178.  
  179.     Mouse buttons serve both as QUALIFIERS and as KEYS.  Thus, you can map
  180.     both normal keystrokes which require a mouse button to be held down:
  181.  
  182.         map L-a ((left button and an a))
  183.  
  184.     as well as the mouse keys themselves:
  185.  
  186.         map L-lmb   ((left mouse key))
  187.  
  188.     note that you had to specify the left mouse button down qualifier L as
  189.     well as the left mouse button LMB.
  190.  
  191.     If you map the left mouse button, and also map a sequence such as left
  192.     mouse button + a:
  193.  
  194.         map L-lmb   tomouse
  195.         map L-a     ((hello))
  196.  
  197.     Note that the first mapping will always get executed even if you
  198.     intended L-a (that is, BOTH mappings would get executed).  In order
  199.     to avoid confusion you might want to UNMAP the system default mapping
  200.     for the right mouse button (mapped to ICONIFY) if you wish to apply
  201.     combinations to the right mouse button.
  202.  
  203.     MOUSE MOVEMENT is mapped with one or more mouse qualifiers (L, R, M),
  204.     plus 'MMOVE' for the key.  That is:
  205.  
  206.         map LR-mmove ((moving the mouse with both buttons held down))
  207.  
  208.     Or how bout capping the characters under the mouse while moving the
  209.     mouse?
  210.  
  211.         map LR-mmove (tomouse if cl (tlate -32))
  212.  
  213.  
  214.  
  215. DEFAULT KEYMAPPINGS:
  216.  
  217.     All Printable Ascii keys mapped to their ascii equivalent. BS, DEL, UP,
  218.     DOWN, LEFT, RIGHT, TAB, S-TAB, and ENTER are mapped properly.  These are
  219.     the default system keymappings.
  220.  
  221.  
  222.     map (a-c)       (bcopy)
  223.     map (a-d)       (bdelete)
  224.     map (a-down)    (scrolldown)
  225.     map (a-l)       (while cu (tlate +32 right))
  226.     map (a-m)       (bmove)
  227.     map (a-r)       (nextr)
  228.     map (a-s)       (bsource)
  229.     map (a-u)       (while cl (tlate -32 right))
  230.     map (a-up)      (scrollup)
  231.     map (bs)        (bs)
  232.     map (c-/)       (escimm (find ))
  233.     map (c-])       (ref)
  234.     map (c-1)       (goto block)
  235.     map (c-b)       (block)
  236.     map (c-c)       ()
  237.     map (c-del)     (remeol)
  238.     map (c-down)    (pagedown)
  239.     map (c-esc)     (recall)
  240.     map (c-f)       (reformat)
  241.     map (c-g)       (escimm (goto ))
  242.     map (c-i)       (insertmode on)
  243.     map (c-j)       (join)
  244.     map (c-l)       (wleft)
  245.     map (c-n)       (next)
  246.     map (c-o)       (insertmode off)
  247.     map (c-p)       (prev)
  248.     map (c-q)       (quit)
  249.     map (c-r)       (wright)
  250.     map (c-s)       (split first down)
  251.     map (c-u)       (unblock)
  252.     map (c-up)      (pageup)
  253.     map (c-w)       (wordwrap toggle)
  254.     map (del)       (del)
  255.     map (down)      (down)
  256.     map (enter)     (return)
  257.     map (esc)       (esc)
  258.     map (f1)        (escimm (insfile ))
  259.     map (f10)       (saveold quit)
  260.     map (f2)        (escimm (newfile ))
  261.     map (f3)        (escimm (newwindow newfile ))
  262.     map (f6)        (saveold iconify)
  263.     map (f7)        (escimm (bsave ))
  264.     map (f8)        (saveold escimm (newfile ))
  265.     map (f9)        (saveold)
  266.     map (L-lmb)     (tomouse)
  267.     map (L-mmo)     (tomouse)
  268.     map (left)      (left)
  269.     map (R-rmb)     (iconify)
  270.     map (return)    (return insline up firstnb down)
  271.     map (right)     (right)
  272.     map (s- )       (( ))
  273.     map (s-del)     (deline)
  274.     map (s-down)    (bottom)
  275.     map (s-left)    (first)
  276.     map (s-right)   (last)
  277.     map (s-tab)     (backtab)
  278.     map (s-up)      (top)
  279.     map (sa-s)      (unblock block block bsource)
  280.     map (tab)       (tab)
  281.     map (up)        (up)
  282.  
  283.  
  284.  
  285.                                     III
  286.                              COMMAND SEQUENCES
  287.  
  288. DME has a rich command set which allows you to embed commands within
  289. commands, or specify multiple commands in a row.  A command consists of a
  290. KEYWORD followed by a FIXED number of arguments (0, 1, 2...).  The argument
  291. delimeter in DME is a SPACE.  Therefore, to embed strings containing spaces
  292. as a single argument, you must surround the string with (string)
  293. (backsinglequote-string-singlequote).  TEXT to be written as if typed is
  294. also specified via a string in backquote-quotes.  For example:
  295.  
  296.     right right (hello) right right (hello) enter down
  297.     map f4 (right right) map f5 (left left)
  298.     map f4 ((hello))
  299.  
  300. Reiterating (because this is important!)... If a command expects ONE
  301. argument, then it really does expect a single argument, and any remaining
  302. arguments are thought to be the next command... so:
  303.  
  304.     map f4 right
  305.                                     -right is only one word, so no need
  306.                                      for ().
  307.     map f4 (right right)
  308.                                     -we want to map f4 to two rights... we
  309.                                      need the () or the second right will
  310.                                      not be part of the map.
  311.  
  312.     map c-del (repeat cright del)
  313.                                     -this is already implimented as REMEOL,
  314.                                      but shown here for clarity.
  315.  
  316. Some arguments will eventually be fed through the command interpreter more
  317. than once.  The MAP command is a good example.  When you execute a MAP
  318. command, the first run through the command interpreter installs the map
  319. string minus a set of quotes.  So, if you want to specify text, you must
  320. enclose the text in two sets of ((text)) because the map string gets passed
  321. through the command interpreter again when you hit the mapped key.  Here
  322. are some more complex examples:
  323.  
  324.     map f4 (right right (hello) left left)      *RIGHT*
  325.     map f4 right right hello left left          *WRONG*
  326.  
  327.     map f4 (map f4 ((hello)))
  328.                                     -the first time you hit F4, it's command
  329.                                      is to re-map itself to the TEXT (hello).
  330.                                      (gads!).
  331.  
  332.     map c-i (repeat tr (( )))
  333.                                     -example of how to embed a space in a
  334.                                      map and repeat (goes through command
  335.                                      interpreter three times!).
  336.  
  337.  
  338. An easy way to fool around executing commands or making maps is either to
  339. use the ESC key (which enters command mode), or  a-S (alt-shift-s), which
  340. EXECUTES the current DME line that the cursor is on.... so you can use DME
  341. to edit and test your new keymappings.
  342.  
  343. STRING VARIABLES may be embedded in commands.  $scanf embeds the current
  344. scanf'd string (see SCANF below), and $filename embeds the current filename
  345. string.  Also, ^ is used to initiate a control-character.  For instance,
  346. ^l stands for control-l (embed a control l).  backslash \ is used to
  347. override special meanings.  The next character is overriden.
  348.  
  349.     map c-a ((^l))      -map control a to produce a control l
  350.     map c-a ((\\\^l))   -map control a to produce a "^l".  The first
  351.                          \ overides the second, and the third overides
  352.                          the ^.
  353.  
  354.     COMMAND LIST
  355.  
  356.     (text)          -enter text as if typed.
  357.     key             -execute a keymap as a macro (example:  c-a)
  358.     header-item     -execute a menu item as a macro (example: Project-Save)
  359.                      (case independant)
  360.     ARPLOAD         -NEWFILE filerequestor only if ARP.LIBRARY installed
  361.     ARPSAVE         -SAVEAS  filerequestor only if ARP.LIBRARY installed
  362.     BACK            -same as BS
  363.     BACKTAB         -backward tab
  364.     BCOPY           -copy block before cursor line
  365.     BDELETE         -delete the block
  366.     BLOCK           -Set start or end of block
  367.     BMOVE           -move block before cursor line
  368.     BOTTOM          -Move to Bottom of File
  369.     BS              -backspace, (delete char to left of cursor)
  370.     BSAVE file      -save the block to a file
  371.     BSOURCE         -source current text block as if it were a script file
  372.     CHFILENAME name -change the name of the working file
  373.     DEL             -delete, (deletes char under cursor)
  374.     DELINE          -delete line
  375.     DOWN            -cursor down
  376.     DOWNADD         -cursor down.  If at bottom of text, add a line.
  377.     ESC             -toggle manual command entry mode
  378.     ESCIMM arg      -go into command entry mode prompting with a
  379.                      predefined string.
  380.     EXECUTE comm    -Execute a CLI command
  381.     FIND string     -SET the search pattern and do a NEXT
  382.     FINDR s1 s2     -Set find and replace patterns and do one find/rep.
  383.     FINDSTR string  -SET the search string pattern
  384.     FIRST           -move to column 1
  385.     FIRSTNB         -Move to first non-blank in line.
  386.     GOTO BLOCK      -Goto the beginning of the marked block.
  387.     GOTO START      -same as GOTO BLOCK.  undefined if no block
  388.     GOTO END        -goes to the END of the marked block.  undef. if no blk.
  389.     GOTO [+/-]N     -Goto an absolute or relative line number
  390.     HEIGHT N        -set height in PIXELS for any new windows
  391.     ICONIFY         -iconify the window
  392.     IF cnd act      -IF/WHILE/IFELSE.. SEE BELOW
  393.     IFELSE cnd ifact elseact
  394.     IGNORECASE what -set case ignore for seaches.  what = on, off, or toggle
  395.     INSERTMODE what -set INSERTMODE.  what = on, off, or toggle
  396.     INSFILE name    -insert a file into the current text.
  397.     INSLINE         -insert line
  398.     JOIN            -join next line to line at cursor
  399.     LAST            -move one beyond the last non-space in a line.
  400.     LEFT            -cursor left
  401.     LEFTEDGE N      -set leftedge on the screen in PIXELS for any new window
  402.     MAP key map     -map a key to a keymap
  403.     MARGIN N        -set WordWrap and paragraph formatting margin
  404.                      (related to WORDWRAP and REFORMAT)
  405.     MENUADD hdr item cmd    -add menu item
  406.     MENUDEL hdr item        -delete menu item
  407.     MENUDELHDR hdr          -delete menu header
  408.     MENUCLEAR               -delete entire menu
  409.     MENUON                  -enable menus  (multiple calls are stacked)
  410.     MENUOFF                 -disable menus (multiple calls are stacked)
  411.     NEWFILE name    -replace current text with new file
  412.     NEWWINDOW       -open newwindow
  413.     NEXT            -find next occurance of search pattern
  414.     NEXTR           -find next occurance and replace
  415.     PAGEDOWN        -pagedown a partial page (see PAGESET)
  416.     PAGESET n       -n PERCENT (0 to 100). page step size relative to the
  417.                      current number of rows in the window.
  418.     PAGEUP          -pageup a partial page (see PAGESET)
  419.     PING n          -set a text marker (0-9).
  420.     PONG n          -move to a previously set text marker (0-9)
  421.     PREV            -find previous occurance of search pattern
  422.     PREVR           -find previous occurance and replace
  423.     PUSHMARK        -push the currently marked block onto a stack and
  424.                      unhighlight the block
  425.     POPMARK         -pop the block stack and highlight the popped block
  426.     SWAPMARK        -PUSHMARK, swap top two marks on stack, POPMARK
  427.     PURGEMARK       -clear the mark stack
  428.     QUIT            -quit
  429.     RECALL          -recall most recently entered command.  Must be used
  430.                      from a keymap (c-esc).
  431.     REF             -reference string under cursor (see below)
  432.     REFORMAT        -reformat paragraph using the margin.
  433.     REMEOL          -Remove text under and beyond the cursor.
  434.     REPEAT cnt comm -SEE BELOW
  435.     REPSTR string   -SET the replace string pattern
  436.     RESETTOGGLE N   -clear toggle array entry N(0..31)
  437.     RESIZE cols rows-Resize current window. E.G:  (resize 70 23)
  438.     RETURN          -same as (FIRST DOWNADD)
  439.     RIGHT           -cursor right
  440.     RX              -ARexx macro, no args   (RX macname)
  441.     RX1             -ARexx macro, one arg   (RX1 macname arg1)
  442.     RX2             -ARexx macro, two args  (RX2 macname arg1 arg2)
  443.     SAVEAS file     -save current text under a different name (title
  444.                      line name does not change)
  445.     SAVEMAP file    -save user keymappings
  446.     SAVEOLD         -save current text under current name
  447.     SAVESMAP file   -save all keymappings, including system keymaps
  448.     SAVETABS on/off -Optimize file saves by crunching spaces to tabs.
  449.                      The default is OFF.
  450.     SCANF ctlstr    -scan the string at the current text position (C scanf)
  451.                      example:   (scanf %s)          SEE BELOW
  452.     SCREENBOTTOM    -Move cursor to the bottom of the screen.
  453.     SCREENTOP       -Move cursor to the top of the screen
  454.     SCROLLUP        -Scroll up without moving cursor
  455.     SCROLLDOWN      -Scroll down without moving cursor
  456.     SETFONT font sz -Set the window's font.  ex:   (setfont topaz.font 11)
  457.     SETTOGGLE N     -set toggle array entry N  (0..255)
  458.     SOURCE file     -source a script file. '#' in first column for comment
  459.     SPLIT           -Split line at cursor
  460.     TAB             -forward tab
  461.     TABSTOP N       -Set tab stops every N.  does not effect text load
  462.     TLATE [+/-]N    -translate character by +N or -N, or set character
  463.                      to exactly N if no + or -. (e.g. TLATE +65 TLATE 3)
  464.     TOGGLE N        -flip toggle array entry N (0..255)  (See IF)
  465.     TOMOUSE         -moves cursor to mouse position
  466.     TOP             -Move to Top of File
  467.     TOPEDGE N       -set topedge in the screen in PIXELS for any new window
  468.     UNBLOCK         -clear the block markers for the current window
  469.     UNMAP key       -unmap a key
  470.     UP              -cursor up
  471.     WHILE cnd act   -(see below)
  472.     WIDTH N         -set width in PIXELS for any new window
  473.     WLEFT           -move to beginning of previous word.  If in the
  474.                      middle of a word, move to beginning of current word.
  475.     WORDWRAP on/off/toggle
  476.                     -Word Wrap mode (related to MARGIN)
  477.     WRIGHT          -move to beginning of next word
  478.  
  479.  
  480.  
  481.     -------------    More Info on Complicated Commands  -----------------
  482.  
  483.     MENUOFF/ON      -This command will enable/disable menus.  Users
  484.                      who have a whole bunch of MENUADD commands in
  485.                      their .EDRC should note that disabling menus at
  486.                      the beginning will speed up the MENUADD commands.
  487.                      Then reenable menus at the end.  These calls are
  488.                      stackable in that if you call MENUOFF, say, twice,
  489.                      it will take two MENUON commands to restore
  490.                      menus.  The reverse is not true.
  491.  
  492.     REF     (c-])   -(1.28d and beyond).  This is a very powerful new
  493.                      command that allows you to bring up a reference to
  494.                      a keyword with a single keystroke.  This is useful for
  495.                      programmers who have on-line documentation or fully
  496.                      commented include files.  DME opens a window just big
  497.                      enough to fit the reference.
  498.  
  499.                      The reference keyword is the alpha-numeric string
  500.                      currently under the cursor.  REF will attempt to find
  501.                      a match in the file DME.REFS, S:DME.REFS,
  502.                      DF0:S/DME.REFS ... DF3:S/DME.REFS.  This file must be
  503.                      built by the user.  Each line has the following format:
  504.  
  505.                      (keyword) (#lines) (file) (search string in file)
  506.                                             OR
  507.                      (keyword) (endstring) (file) (search string in file)
  508.  
  509.                      Surrounding the keywords with `' or () is optional if
  510.                      the keyword does not contain spaces.
  511.  
  512.                         keyword     -keyword under cursor
  513.                         #lines      -number of lines to include from
  514.                                      specified file (just a number)
  515.                         file        -the file containing the reference
  516.                                      material
  517.                         searchstr   -search string in file that indicates
  518.                                      the beginning of the reference
  519.                         endstring   -alternately, the #lines can be a string,
  520.                                      in which case a match indicates the end
  521.                                      of the reference in the file.
  522.  
  523.                      Upon finding a successful keyword match the specified
  524.                      file is openned and the seach string searched for.  If
  525.                      found, the indicated number of lines (or until a match
  526.                      with the endstring) is placed in a temporary file and
  527.                      a new DME window brought up.  The temporary file is
  528.                      then deleted.
  529.  
  530.                      When looking for matches, the compare is anchored at
  531.                      the beginning of each line in the file.  Thus, any
  532.                      spaces in front of the string in the file must be
  533.                      duplicated.
  534.  
  535.                      T: must be assigned to a temporary directory, usually
  536.                      RAM:   See the included example DME.REFS file.  The
  537.                      most common things referenced are the autodocs and
  538.                      commented include files.
  539.  
  540.                      Some modification of the included DME.REFS.* files may
  541.                      be required due to differences in include file and
  542.                      autodoc format.
  543.  
  544.                      NOTE!  Since DME searches DF0:..DF3: and other standard
  545.                      places automatically for the reference file, one
  546.                      usually bundles the reference file in the S directory
  547.                      of the floppy containing the reference material, making
  548.                      for clean bookeeping.
  549.  
  550.     SCANF ctlstr    -This is equivalent to the C scanf() function with the
  551.                      restriction that only one conversion is allowed, that
  552.                      conversion being a string.  Thus:
  553.  
  554.                      scanf %s       will place the string under the
  555.                                     cursor in the variable $scanf
  556.  
  557.                      scanf %4s      The first four chars of the string.
  558.  
  559.                      scanf %[0123456789]
  560.                                     will scan the string while it contains
  561.                                     specified chars (e.g. scan a number)
  562.  
  563.                      scanf %[~,]    will scan the string until it finds
  564.                                     a ','.
  565.  
  566.                     The variable $scanf may be used as an argument in any
  567.                     command.  Example:  (insfile $scanf)
  568.  
  569.  
  570.     REPEAT N arg    -Repeat (arg) N times.  Apart from being a number, N
  571.                      can also be one of:
  572.  
  573.                         line    Current line # (lines begin at 1)
  574.                         lbot    #lines to the bottom, including current line
  575.                         cleft   column # (cols begin at 0)
  576.                         cright  #chars to eol, including current char under cursor
  577.                         tr      #char positions to next tab
  578.                         tl      #char positions to next back tab
  579.  
  580.                     Certain commands can abort a REPEAT loop.
  581.                     Specifically, any FIND[R], NEXT[R], or PREV[R] in which
  582.                     the search string is NOT found will abort a REPEAT.
  583.                     Most operations which can go out of bounds, such as
  584.                     UP, LEFT, RIGHT, DOWN, also abort a repeat.
  585.  
  586.                     Specifying -1 as N causes REPEAT to go on forever
  587.                     (well, actually, 0xFFFFFFFF times) or until an abort.
  588.  
  589.     IF [!]condition arg
  590.     WHILE [!]condition arg
  591.     IFELSE [!]condition arg else arg
  592.  
  593.             If the specified condition is true, execute the argument.  For
  594.             WHILE, the argument is executed until the condition is false
  595.             (be careful!).
  596.  
  597.             the optional '!' inverts the logic.
  598.  
  599.             Conditions:
  600.  
  601.  
  602.             #       if toggle entry # is SET.  there are 256 toggles (0..255)
  603.             t       if On line 1
  604.             b       if On last line
  605.             l       if At column 0
  606.             r       if At end of line (spaces below and beyond)
  607.             m       if Text has been modified
  608.             i       if in insert mode
  609.             x[<=>]# if column position (starts at 1) is (any OR combo of
  610.                     <, =, or >) than some number.  Example:   x<=20
  611.             y[<=>]# if Line number (starts at 1) is (same as for x)
  612.             cl      character under cursor is lower case alpha
  613.             cu      character under cursor is upper case alpha
  614.             ca      character under cursor is alpha-numeric
  615.             cn      character under cursor is numeric
  616.             c[<=>]# character under cursor is ascii code # (# in decimal)
  617.                     optional conditionals as in 'x' and 'y'.
  618.             cb      cursor within a block
  619.  
  620.         Example: simulating an insert mode toggle: ALT-i (not CTL-i)
  621.  
  622.     map a-i (ifelse 0 (toggle 0 insertmode OFF) (toggle 0 insertmode ON))
  623.  
  624.         Example: while lower case, map to upper case and move right.
  625.  
  626.     map c-U (while cl (tlate -32 right))
  627.  
  628.         Example: Search/Replace all of text.
  629.  
  630.     map c-R (escimm (findstr ) escimm (repstr ) repeat -1 nextr)
  631.  
  632.      if c<32 ((char under cursor is smaller than 32))
  633.      if c<>32 ((char under cursor is not equal to 32))
  634.      while !b down
  635.  
  636.  
  637.                                     IV
  638.                              FILE PARTICULARS
  639.  
  640. No Matter what you set internal tabs to, tabs in disk files will be 8.
  641. This allows you to use your favorite tabs stops (mine are 4) and still
  642. have your disk files compatible with TYPE, a printer, etc...  DME by
  643. default doesn't bother to optimize when writing out files and simply uses
  644. spaces. If you (SAVETABS on) before saving (or in your S:.EDRC, etc...),
  645. DME will attempt to optimize the file by placing TABS in appropriate
  646. places.  DME will not place any TABS after the first single, back, or
  647. double quote is encountered in a line.  If this does not cover every
  648. situation in your particular application that you want to be *sure* no tabs
  649. will occur in sensitive sections, then you should not use (SAVETABS on).
  650.  
  651. It should be noted that since DME removes spaces at the end of the line,
  652. editing UUENCODED ascii files will not work for uuencoded lines which end
  653. with a space.  The nominal fix is to add an extra character after each
  654. uuencoded line (anything) in the proper column, which is ignored by the
  655. UUDECODE program.
  656.  
  657. The command to save the current document under the default name is SAVEOLD,
  658. *not* SAVE.  SAVE is not a valid command.  This is to prevent people who
  659. have not read the documentation from assuming 'save' takes an argument (and
  660. screwing up their work).  SAVEOLD does NOT take an argument, SAVEAS does.
  661.  
  662. SAVEOLD/SAVEAS do not automatically backup the destination file.  If you
  663. are working in an enviroment where you are worried about ensuring a viable
  664. copy can be recovered if your Amiga crashes in the middle of the save, you
  665. can write a macro to save the file into two places.  Usually, people backup
  666. their working disks so this is not neccesary.
  667.  
  668. Workbench Support:  If DME is run from the workbench, it will automatically
  669. construct an icon file when you save a document.  If run from a CLI, no
  670. icon file is generated.
  671.  
  672.                                     V
  673.                               WORKBENCH SUPPORT
  674.  
  675. DME V1.26 and beyond support the workbench in the following way:  (1) you
  676. can click on the DME icon to bring up DME with the file "unnamed".  (2) you
  677. can select one or more standard ascii documents which have DME as the
  678. default tool.  If DME has no knowlege of a text icon, it uses its own.
  679. Command line arguments are passed to DME via the tooltypes entries for
  680. DME's application icon or via individual document icons.  The following
  681. format is used:  (This is a hack, no?)
  682.  
  683.     ARG=flag
  684.  
  685.     See the OVERVIEW section for allowed flags.  Only one argument per line
  686.     is allowed (sorry).  The tooltypes for the application icon are
  687.     processed first, then the tooltypes for each document icon are
  688.     processed before each file is loaded.
  689.  
  690.     ARG= -t10
  691.     ARG= -l10
  692.  
  693.                                     VI
  694.                               REVISION SUMMARY
  695.  
  696. V1.30   RELEASE
  697.     -a couple small bugs fixed
  698.     -fixed text bug that sometimes overwrites the right border
  699.     -added new commands
  700.         SETFONT     (for all of text, static fonts only)
  701.         IGNORECASE  (for searches)
  702.     -added new commands (AREXX support, Kim DeVaughn)
  703.         RX, RX1, RX2
  704.     -added new commands (by Kevin Speghetti)
  705.         PUSHMARK, POPMARK, SWAPMARK, PURGEMARK      block marker stack
  706.         PING, PONG                                  text markers (0-9)
  707.  
  708.         Note: block marks on the stack, ping and pong, do not track text
  709.         changes (bug).
  710.  
  711.     -Many commands will now work while the text window is iconified
  712.      without having to uniconify it.
  713.  
  714. V1.29E
  715.     -Fixed low memory bug in do_bomve() again.
  716.     -Fixed arp file requestor problems.
  717.     -added ARPINSFILE command.
  718. V1.29D
  719.     -Fixed low memory bug in do_bmove()...
  720. V1.29C
  721.     -highlighted icon window if file modified
  722. V1.29B
  723.     -INLINE FILENAME:
  724.      added $filename variable.  $scanf and $filename can now be embedded
  725.      anywhere on the command line.
  726.     - ^x added (control-character), so you do not have to embed actual
  727.      control characters in your macros.
  728.     - \ overide added (\^x) produces "^x" instead of control-x, etc...
  729.  
  730. V1.29  RELEASE
  731.  
  732.     -Foreign keyboards supported better.
  733.     -Iconify window is activated rather than not activated.
  734.     -can keymap keys which normally produce nothing.
  735.     -blocks are displayed in a different color
  736.     -can now move/copy across windows
  737.     -can now resize window while file loading
  738.     -new commands ARPLOAD ARPSAVE   (uses ARP filerequestor if arp.library)
  739.      MENUADD MENUDEL MENUDELHDR MENUCLEAR MENUOFF MENUON
  740.  
  741.     minor bugs fixed, major remodeling of the source (this is what I
  742.     use my vacation for!)
  743.  
  744.     menus:  the right mouse button may be mapped only if there is no
  745.     menu, Else is used as the menu selector.  NOTE! It is much faster
  746.     to surround a set of MENUADD commands in a source file with
  747.     MENUOFF at the beginning and MENUON at the end.  You can also specify
  748.     menu items as macros in other commands (example: project-save)
  749.  
  750. V1.28h SMALL RELEASE    references work better
  751.  
  752. V1.28g SMALL RELEASE    Fixed NK0 bug in 1.28f plus keymap problems in 1.28f
  753.  
  754. V1.28f RELEASE
  755.     Fixed macro bug created in 1.28e... could not specify macros on the
  756.     command line.
  757.  
  758. V1.28e INTERNAL/BETA
  759.     New Commands:   REF     (c-])   -cross reference the word under the
  760.                                      cursor and bring up a new window
  761.                                      containing a description for that
  762.                                      word.  See docs above.
  763.  
  764.     -The keymapping has been fixed and should now work on any foreign
  765.      keyboard.
  766.     -MAJOR ADDITION:  () may be used instead of `' to enclose commands.
  767.      One can enclose the other ... that is, to get the "'" character you
  768.      can say (this is a charlie's day).
  769.  
  770. V1.28c RELEASE
  771.     New Commands:   CHFILENAME      -change default filename for a window
  772.                     RECALL  (c-esc) -recall command line (e.g. you make a
  773.                                      mistake).  Must be used from a keymap,
  774.                                      default is c-esc.
  775.  
  776.                     SCANF           -C scanf (single string only).  Extract
  777.                                      strings from the text for use in any
  778.                                      arbitrary command.
  779.  
  780.     Command Parser: $scanf          -as an argument by itself is recognized
  781.                                      to be the extracted string from scanf.
  782.                                      Currently, the variable name (after
  783.                                      the dollar) can be anything since only
  784.                                      one variable exists, but use '$scanf'
  785.                                      for future compatibility.
  786.  
  787.     -Many Bug fixes (mainly benign bugs)
  788.     -^C (CONTROL C) now recognized when typed in a window.  c-c is mapped
  789.      to () = no action.
  790.     -Please look at the revised default keymappings listed in these docs.
  791.  
  792.  
  793. V1.28 LIMITED RELEASE
  794.     New Commands :  SCROLLUP    (a-up)
  795.                     SCROLLDOWN  (a-down)
  796.     Modified Cmds:  ESCIMM
  797.         The execution of commands specified by an ESCIMM is blocked until
  798.         the user hits return on the ESCIMM command line.
  799.  
  800.                     BCOPY
  801.         No longer unblocks the block.
  802.  
  803.     -Title bar status line no longer blinks when it changes
  804.     -Key releases no longer effect operation
  805. V1.27 RELEASE
  806.     -macros run about 20% faster due to hashing of the command table
  807.     -Maximum # of toggles raised to 256 (see IF/WHILE)
  808.     -small fixes to the code (nothing major)
  809.     -child windows inherit tab stops, insert mode, and wordwrap mode
  810.     -MOUSE BUTTONS AND MOVEMENT CAN NOW BE MAPPED
  811.     -New Commands: ICONIFY      (used to be hardwired.  Is now a command)
  812.     -Extended Commands: GOTO    (GOTO END of block)
  813. V1.26 Beta, minimal Release
  814.     -Workbench support
  815.     -New Command:   EXECUTE
  816. V1.25 RELEASE
  817.     -BSAVE does NOT UNBLOCK after saving (switch in functionality yet again)
  818.     -various bugs fixed (IF, tabs on file save)
  819.     -New Commands: MARGIN, REFORMAT, WORDWRAP, RESIZE,
  820.                    TOPEDGE, LEFTEDGE, WIDTH, HEIGHT
  821.     -Command line options added for setting the window size and an optional
  822.      specified script file (when specified, local .EDRC not sourced).
  823.  
  824.     -Enhanced Commands: IF  ..more control with conditions, addition of
  825.                               a couple more specifications.
  826.                        JOIN .. functionality slightly changed
  827.     -keymaps may now be used as macros in other commands. (macros)
  828.     -New keymaps added to the default set.
  829.     -Mouse movement cleaned up a little.
  830.  
  831. V1.24 Internal
  832.  
  833. V1.23 RELEASE
  834.     -S:.EDRC now sourced instead of C:.EDRC
  835.     -User keymappings now work in COMMAND mode (when you hit ESC).
  836.     -You can now map the Amiga keys ('A' for Amiga, since 'a' is alt).
  837.     -Enhanced Commands: IF/IFELSE/WHILE (optional '!' in front of cond)
  838.                         new condition 'cb' 'character is in selected block'
  839.                         GOTO block  (goto beginning of block)
  840.     -NewCommands:    PAGESET SAVETABS
  841.     -Writing TABS (always 8) out to disk to save space now supported.
  842.  
  843. V1.22 RELEASE (BUF FIXES FROM 1.20)
  844.     -'newfile' fixed
  845. V1.21 RELEASE (BUG FIXES FROM 1.20)
  846.     -iconify and window handling fixed
  847.     -left mouse button now tracks the mouse.
  848. V1.20 RELEASE
  849.     -bug fixes: bsave now unmarks the block, bdelete now sets 'modified' flag.
  850.             (other small fixes).
  851.     -enhancements: overwrite mode status indicator, find, find-replace now
  852.             completely implemented (yahhoo!!!)
  853.     -changed commands:  FIND NEXT PREV: no longer loop back to the top of
  854.             file or top->bottom in the case of PREV.  DELINE will now delete
  855.             text on the line if there is only one line of text.
  856.     -enhanced commands: GOTO REPEAT
  857.     -new commands: SAVEMAP SAVESMAP TOGGLE SETTOGGLE RESETTOGGLE TLATE
  858.                    IF IFELSE WHILE BSOURCE
  859.                    FINDSTR REPSTR FINDR NEXTR PREVR
  860.                    NEWWINDOW
  861.     -new keymappings: (see a-s, a-S, f3)
  862.     -window iconification with mouse menu button.
  863.  
  864.  
  865. V1.12 RELEASE
  866.     -cursor is now pen #3 rather than #1.
  867.     -changeover to AZTEC C, smaller executable.
  868.     -now maps shift space to a space.
  869.     -new commands: REMEOL, WLEFT, WRIGHT
  870.     -display bug fixes (SPLIT)
  871.     -FIND/PREV/NEXT will now abort a REPEAT if string not found.
  872.  
  873. V1.11 RELEASE NOTES
  874.     -Bug fixes (mainly graphical mistakes).
  875.     -User keymappings are disabled in command mode (so you can unmap
  876.       single ascii characters you may have mapped).
  877.     -Illegal key combinations no longer give garbage (e.g. ALT-CURSOR-DOWN)
  878.       you can, of course, still map them to anything you wish.
  879.     -Save now checks for error conditions on write.
  880.     -Uses Default Console Keymap (i.e. no longer assumes USA)... but there
  881.       *is* some stangeness.
  882.  
  883. V1.00 RELEASE NOTES
  884.     -has find, but no replace function
  885.     -assumes USA keyboard                   (fixed 1.11)
  886.     -disk files written out use spaces instead of tabs&spaces
  887.  
  888.  
  889.                                     VII
  890.                                 COMPILING
  891.  
  892. DME compiles only under AZTEC.  You must compile with the 32 bit int
  893. option, but may use the small code/data model.  A support lib which I have
  894. created (SUP32.LIB) is also required.  I use a precompiled symbol file
  895. containing ALL the AMIGA includes (but not any Aztec standard includes).
  896.  
  897.