(Change history is at the bottom.)

EPM 6.00 is the first 32-bit version of the EPM editor.

This version of EPM includes support for lines longer than 255
characters.  Lines up to 1600 characters are directly supported.
Lines longer than that will be displayed as multiple lines, but
will be put back together when saving the file.  Note that there
are a maximum of 15,000 pixels per line that can be handled.  Any
lines that require more pixels to display will not be able to be
scrolled to the end.  Macro programmers:  Internal strings can also
be up to 1600 characters long.  There is a pre-defined constant set
by ETPM, MAXCOL, that can be used to determine the longest possible
string.  It can be determined dynamically by entering the command:
  ma 1 99999 1
and then querying the margins.  The right margin will be set to 1 less
than MAXCOL.

     EPM Workplace Shell Object support

Note:  This is necessary only if you wish to use the WPS Edit Object.
You need not do this if you prefer to start EPM from the command line
or from a WPS program reference.  In fact, it is recommended that you
do not use the WPS Edit Object, unless you have a need to have multiple
associations set to Edit Objects with distinct configurations.

To install the EPM Workplace Shell Object:

1. Put EPM.EXE and ALL *.EX FILES in a directory on your PATH.
   Make sure that latest version is first on your path if you have
   another version of EPM on your system.
2. Put all DLLS in a directory on your LIBPATH.
   Make sure these are also the first EPM DLLs on your LIBPATH.
3. Run EPMINST.  This replaces the following:
     Execute the following command using REGCLASS.EXE, and substituting the
     correct path to EPM.DLL:
     REGCLASS reg    Epm d:\dll\epm.dll
     REGCLASS create Epm <desktop object name>
        e.g.,  REGCLASS create Epm "EPM Object"

To uninstall the EPM WPS Object
1. delete all EPM WPS objects
2. Run EPMINST.  This replaces the following:
     execute:
      REGCLASS dereg Epm

You must uninstall the EPM WPS Object in order to replace either of
EPM.DLL or ETKR6nn.DLL.

Note:
  Multiple EPM WPS Objects can be created, each with their own configurations.
  Edit windows started from a WPS Object use the settings of that object.
  Changes made to the settings of that object will be reflected in all edit
  windows that were opened from that object.  Instances of EPM started from
  the OS/2 command-line or from a standard program object will use the
  configuration saved in the EPM.INI, not the configuration saved by any of
  WPS Objects.

Note for Warp2 beta users:
  Under the Warp2 Beta, the Workplace Shell locks the DLLs even after they
  are deregistered.  Therefore, it is recommended that you place the EPM DLLs
  in a separate directory in your LIBPATH.  When you need to upgrade to a new
  version, after uninstalling the EPM WPS Object (as described above), edit
  your config.sys and remove the EPM directory from your LIBPATH, then reboot.
  You will now be able to replace the EPM DLLs.  (Then, update your CONFIG.SYS
  and reboot again.  Or, avoid the extra reboot by swapping between an
  EPMDLL1 and EPMDLL2 directory.)

        EPM Keyword Highlighting support

Keyword files are included for C, E, HTML, IPF, Java, Perl, Rexx, RC files,
TeX, LaTeX, and Script.

To turn on keyword highlighting for a C file, enter the command:
   toggle_parse 1 epmkwds.c
For the other file types, substitute epmkwds.e, epmkwds.cmd, epmkwds.rc,
epmkwds.tex or epmkwds.scr, as appropriate.  In addition, there is
a KwdHilit entry on the toolbar buffet which you can drag to the copy of
your toolbar in the buffet dialog to make it easier to toggle keyword
highlighting on and off.

You can edit the epmkwds files to add and delete strings and to change
the highlighting.  The distributed files were created for people using
black on white text colors, and may look strange with a different
scheme.  EPMWKDS.C contains the current documentation.

If you like this, and want it turned on automatically, you can add to
your MYCNF.E any of the following, and then recompile the macros.

const
   C_KEYWORD_HIGHLIGHTING = 1
   E_KEYWORD_HIGHLIGHTING = 1
   REXX_KEYWORD_HIGHLIGHTING = 1
   RC_KEYWORD_HIGHLIGHTING = 1
   SCRIPT_KEYWORD_HIGHLIGHTING = 1

As the comments in EPMKWDS.C indicate, the file is huge because the
entire OS/2 2.1 toolkit is included.  Removing parts you don't need
highlighted will speed up performance.

           Programmer's Toolbar

A sample toolbar for programmers is included as PRGRMRS.BAR.  It can
be loaded by bringing up the Settings dialog, going to the Toolbar
page, selecting Import, and entering the name of the toolbar.  This
toolbar contains 3 sections.  The first section contains a few items
from the standard toolbar, and a new button for toggling keyword
highlighting on or off.  Keyword highlighting is available for the
programming and markup languages described above.

The second section contains buttons for running a make in a an EPM shell
window.  In order to use it, you must edit the Build item and add the
required parameters:
  a key name for the project,
  a path in which to start the build,
  a command to start the build.

The "key name" is required in order to allow you to add a number of
Build buttons, each for a different project, and be able to share
the other buttons in this group with all the Build buttons.  An
example might be if you wanted to build the "Hello World" sample
program from IBM's Cset++ compiler, and decided to use a key name
of Hello.  The parameters for Build would be:
  hello  h:\ibmcpp\samples\compiler\sample02  nmake all -f make02d

After running a Build, in the unlikely event that you had any errors,
you can place the cursor on a warning or error line in the output and
press the View button.  This will parse the errors, load the source file,
insert bookmarks for each error, and go to the line containing the error
over which you were positioned.

The CurrErr button will redisplay the error message associated with the
current line.  The NextErr and PrevErr buttons will go to the point of
the next and previous error, and display the associated error message.

The next group of buttons is related to the use of Tags files, and
reproduces the selections available on the Tags pull-right of the Search
menu.  See the online help for those menu items for more details.

           Tiny Toolbar

For those who like the toolbar but begrudge the amount of screen space taken
up, we've included TinyTool.Bar.  This can be loaded as described for the
programmer's toolbar in the previous section.  Thanks to Toby Thurston, who
provided the bitmaps and the layout for the toolbar in his TT.BAR package,
and gave us permission to include them in EPM.

     Configuration

There's a new Settings dialog, which includes some stuff that was previously
on the Options menu, and other stuff which is new.  Take a look at all the
pages.

     New Menu

There's also a new menu layout.  Please try it for a while; if you decide you
prefer the old one, just recompile the macros.  The shipped .ex files used
OS2TOOLS.SMP as a MYCNF.E; the line:
   STD_MENU_NAME = 'fevshmnu.e'
is the one that caused this new menu style to be used.

     Toolbar  Note

The format of the toolbar has changed internally; saved toolbars now include
a header which includes a version number.  To maintain upwards compatability,
if there is no header, the old format will be assumed.  You should convert all
your custom toolbars to the new format.  A future release will drop support for
the old format.  [This has since transpired; the following paragraph no longer
applies.]

To convert a toolbar listed in the Toolbars page of the Settings notebook,
select it, make it current, close the dialog, then select Save As from the
Toolbar's context menu.  To convert a toolbar that exists only on disk, first
import it from the Toolbars page of the Settings notebook, convert it as
described above, then export it from the Toolbars page.

     Change History

1994/11/07  This release fixes the slow startup when the toolbar is on, and
            a few DBCS problems.
1994/11/22  Various bug fixes, optimizations, and a new toolbar DLL.  Also,
            a version built with all compiler optimizations enabled is included.
            Use with caution!  Traps or errors in saved files are possible due
            to optimizer bugs.  After a few hours use, it seems stable, but use
            at your own risk.

1994/12/13  Various bug fixes & optimizations.

     New built-in functions:  filecompare, validatefileid

     New built-in operators:  bitand, bitor, bitxor, bitcomp.  Like the math
     operators, these will be evaluated at compile time if both operands are
     known, for no run-time overhead.

     New search / change option, W, for word searches.  Search dialog updated
     to add EGREP and Word options.

     New EPMCOMP macro: like E3COMP, but uses filecompare() for incredible speedup.

     Compiler optimizations used - no more separate EPM6OPT.FLS.

     CKEYS, EKEYS, PKEYS, REXXKEYS, STDCTRL.E, GET.E, CLIPBRD.E, STDCMDS.E:
        updated to use the bit... operators instead of more complicated code.

     Tags dialog now has a Refresh button.

     The Shell window now keeps track of the last command entered.  If Enter is
     pressed next to a command prompt without a command having been typed, the
     "Write to shell" entrybox will be presented, pre-filled with the last command
     written.  A List... button is available that will present a listbox containing
     all commands written to that shell.

     Dynamic spell-checking will now do a WinAlarm rather than a DosBeep on a
     misspelled word, so that users with Multimedia Extensions can get their
     preferred chirps (and hearing-impaired users can have the screen flash, etc.).

     EntryBox can now be passed ES_ flags - most useful for specifying ES_UNREADABLE
     for entering a password.  See example in STDCTRL.E.

     New INCLUDE_STANDARD_CONTEXT_MENU config constant for those who want to omit the
     standard context menu definitions.

1994/12/21  Various internal speedups.  Bug in pos() fixed.  Tags file name dialog's
     entry field expanded.  Settings dialog has a "Dropping file" entry on the
     Window page, which lets you specify if a text file dropped in the edit window
     should be edited or imported into the current file.  (A file dropped on the
     title bar will always be edited, and text dropped anywhere will always be
     imported.)

1995/01/06  File loading speedup.  Word tab in entry fields.  Listbox() fixed to allow
     other than the first line to be initially selected.  Clicking both mouse buttons
     activates the List ring dialog (if more than one file is loaded).  If the Shell
     command is given a parameter, it will write it to the newly-created shell window.

1995/01/12  Tabs support changed to not expand a single tab stop when entered.
     This does away with the limit of 20 tab stops when you want them to be
     evenly spaced.  New do_array subop that acts like 3, but doesn't give an
     error message if the index is not found.  Instead, it returns the value of
     the array's .userstring.  See the updated EPMTECH.INF for an example of its
     usefulness.  Added the /k option for the Change command, to match the case of
     the replacement string to that of the search string.  See the online help for
     details.  Fixed so quitting last edit window returns to window from which we
     were started.  Drag no longer grabs focus.  Dragging text within an edit window
     to move it now does a real move, rather than a copy & delete.  (The latter gave
     incorrect results when moving text to the right.)  Added the following to EGREP:
        \c - positions the cursor after a match.
        :i - matches an integer
        :h - matches a hex number
        :q - matches a quoted string
        :r - matches a Rexx variable
        @  - minimally-matching equivalent of *
        #  - minimally-matching equivalent of +
        ~  - negation; fails if the following string or expression is found.
      See the online help for details.

      Updated Tags support to handle Rexx and Modula programs.  Added Alt+F12
      as "Next View" key.  Added a '~' option to the Locate command, to find a
      line *not* containing a given string.

1995/03/02  Hopefully, all WPS edit object bugs fixed.  Also, "Default View"
      selection added to Window / Start Options configuration page.

1995/03/03  Bug in SetProfile() fixed.  Selecting Add in WPS Edit Object's
      config now parses off the first directory in the EPMPATH properly.

1995/03/06  WPS edit objects opened via associations now use the right
      config.  EPM can be started from a DOS session.  Tiny icons added
      as built-ins.

1995/03/16  Status and message lines have a 3-D frame.  New Edit /K sub-options:
      /K and /K1 lock against others writing file; /K2 will lock against others
      reading *or* writing, and /K0 will not open the file if someone else has
      it locked against writing.  Peek32 & poke32 changed to take an offset
      field.  Added an opcode to do a binary search of a file.  Enhanced the
      Search dialog.  Don't move the cursor if a click gives focus to the edit
      window (see the CLICK_ONLY_GIVES_FOCUS configuration constant).  Enhanced
      the DYNASPELL_BEEP setting so that you can tell it to just beep instead of
      issuing a WinAlarm.  Proofword fix so won't skip the word immediately
      following a GML tag.  Edit Object can restore the built-in toolbar.
      WANT_TINY_ICONS config. constant to make the built-in toolbar use the
      tiny icons.  Added shl and shr opcodes, which work like C's << and >>.
      Edit window takes focus if a file is dropped on it.  Added Edit /R
      option to load a single file in read-only mode, and a readonly command
      which acts like the browse command, but only for the current file.

1995/10/01  If a file is edited in read-only mode, "Read-only" will display on
      the status line.  An 'R' may be appended to any of the /K options to
      indicate that if the lock fails, another attempt should be made to open
      the file, without locking, but in read-only mode.  A new Edit /R
      sub-option:  /R? means that the file should be set read-only if the
      read-only, hidden, or system flags are set on disk.  /RO is a synonym
      for /R; this can be used from the OS/2 command line to distinguish the
      Edit command's read-only option from the EPM.EXE load-in-same-ring
      option.  There's a new .fileinfo field which contains a copy of the
      FILESTATUS4 structure returned from the DosQueryFileInfo call.  (See
      the OS/2 toolkit for details of this structure.)  This can be used,
      among other things, to determine if the copy of the file on disk has
      been updated since the file was loaded.  QPRINT command enhanced to
      allow passing a queue name, and to allow telling the dialog to start
      printing immediately rather than waiting for the user to press Print.
      Syntax assist for Java added, and keyword highlighting for Java, Perl
      and HTML added.

1995/10/11  Fixed bug causing shell window to trap in previous release.

1995/10/18  Fixed "Tab key inserts tab character" in Settings dialog not
      getting checked.

1995/11/26  Fixed Proof to accept something like {\bf in a .TeX file.

1996/01/25  Added accelerators for SwapPos, PushMark, PopMark, and SwapMark.
      Note that the mnemonic I chose for swapping is '=', and the xxxMark
      operations have the same accelerators as the xxxPos ones, except that
      the Shift key was added, so the accelerator for SwapMark, although
      listed on the menu as Ctrl+Sh+'=', actually had to be defined as
      Ctrl+Sh+'+' because the shift '+' is the shifted character on the
      '=' key, on the U.S. keyboard.  I also defined Ctrl+Sh+'=', so if the
      '=' key is in a shifted position on some other keyboards, this will
      continue to work.  If it's unshifted, but with a different character
      in the Shift position, this will fail.

1996/01/26  Fixed Rexx support so that strings containing nulls can be
      returned.  Noticed this when testing 'extract /fileinfo', but the
      same problem existed if the text of the file contained nulls and
      the user did 'extract /getline'.

1996/02/01  Added bitmaps for LoadGroup & SaveGroup, based on ones created
      by Ken Arway.  Also reused tagsfn.bmp for the tags dialog button in
      the Toolbar Buffet.  This is because a user pointed out it wasn't
      possible to drag items from the buffet which didn't have bitmaps.

1996/03/02  Fixed drag&drop so a drop onto a minimized edit window would
      restore the window, and otherwise be treated like a drop on the title
      bar, not like a drop on the edit client.  Enhanced drag&drop so if
      a command DRGDRPTYP_drop_type exists for a drop of an object with type
      "Drop Type", that command will be executed.  That check is done before
      the check does a command DRAGDROP_ext for a file named filename.ext.

1996/04/01  Increased number of highlighted objects per line from 20 to 50,
      for keyword highlighting.  Added ability to specify a space as the
      end string for a keyword highlighting delimiter.  (Specify "<space>",
      without the quotes.)  Added a /NU option to the Edit command, to allow
      editing a file without the overhead of supporting undo.  Increased
      version to 6.03b, so macros can distinguish if this ability is present.
      Fixed bug in dynamic spell-checking where pressing the space bar while
      in insert mode would check the word *before* the space was inserted if
      the space was intended to break apart 2 words.  Enhanced mouse support
      so clipboard can be used more easily while "mousing" - Ctrl+MB1 in
      a marked area will copy the mark to the clipboard; Ctrl+Shift+MB1 will
      perform a Cut operation; Alt+MB1 will perform a default paste (like
      a character mark unless DEFAULT_PASTE is set otherwise in MYCNF.E);
      Alt+Shift+MB1 will perform an alternate paste (like a character mark
      if DEFAULT_PASTE is set to Paste Lines, or like a line mark otherwise).

1996/04/10  Updated keyword highlighting so it would look for the longest
      matching substring when finding Special's.  Added keyword highlighting
      support for Makefiles (kindly contributed by Michael Cadek).

1996/04/30  Enhanced GROUPS.E so loadgroup could offer a list of saved groups,
      and let one delete a saved group.
