There are three sample configuration files included in this directory.
MYCNF.SMP is a simple example MYCNF.E.  EPMGCNF.SMP is the configuration
file used to build the .ex files shipped with the OS/2 2.x Enhanced Editor.
OS2TOOLS.CFG is the MYCNF.E used to build the .ex files included with the
EPM package as shipped internally to IBM, and used by EPM 6 (EPMBETA).

Note that in order to be as general as possible, many features are made
switchable at runtime in the shipped .ex files so that users who don't
want to recompile the macros needn't.  If you *do* recompile, then
the switchability will be lost unless you explicitly enable it.  For
example, line vs. stream mode:  people used to line based editors will
prefer line mode; people used to word processors will prefer stream mode,
and few people will want to dynamically change between the two paradigms.
So it makes more sense to configure it the way you prefer, and not waste
the overhead of run-time checks and extra code.

Also note that 5.51 users should recompile both EPM and EXTRA when changing
any configuration constants related to the menu choices, as the menus are
contained in EXTRA.EX but the commands used are (mostly) defined in
EPM.EX, so if the two files are not in synch, you might get "Unknown command".
EPM 6 users should not have EXTRA_EX set in their MYCNF.E, since EPM 6 no
longer has a 64k limit on *.ex files, and so there's no need to split the code.

A description of each file in E_MACROS is appended at the end of this file.

Answers to some common questions:

:QUESTION.
  While trying to recompile the macros, I got the error message:
     EX code size too large

:ANSWER.
  The current set of macros won't fit into a single .ex file, which is
  limited to 64k of code in EPM 5.51.  We've split EPM.EX into EPM.EX
  and EXTRA.EX. If you add to your MYCNF.E
     const
        EXTRA_EX = 1

  and recompile both EPM.E and EXTRA.E, then EXTRA.EX will automatically
  be linked in at run time.  (EXTRA.E includes a MYEXTRA.E if it exists,
  so if space is still tight you can move any DEFCs or DEFPROCs from
  MYSTUFF.E to MYEXTRA.E.  DEFLOADs, DEFSELECTs, DEFMODIFYs and key
  definitions should stay where they are.)

:QUESTION.
  I am writing some C source code in the EPM editor and am
  getting a bit tired of erasing EPM's C add-ons.  How can I
  turn this off?

:ANSWER.
  You can turn it on and off dynamically by entering the command
     EXPAND OFF
  on the EPM command line.  If you're using EPM (or the Enhanced Editor)
  as shipped, and don't want to recompile the macros, you can make this
  the default by doing the following:
     1.  Create a PROFILE.ERX in your EPMPATH (or PATH) containing:
         /* EPM profile */
         'expand off'
     2.  On the EPM command line, enter:  PROFILE ON
     3.  Select Options / Save Options.

  For the current EPM version 6.xx, replace steps 2 and 3 with:
     Bring up EPM's Settings dialog, select the Misc. page, select
     Rexx Profile so that it's checked, and close the Settings dialog.

  If you're compiling the macros, then you can make the syntax expansion
  start out turned off by adding to your MYCNF.E:
   const
      my_EXPAND_ON = 0  -- Start out off; default is on.

  or you can omit the support for any language completely by including
  one of:
   const
      C_SYNTAX_ASSIST = 0              -- Default for C is 1
      E_SYNTAX_ASSIST = 0              -- Default for E is 1
      P_SYNTAX_ASSIST = 0              -- Default for Pascal is 1
      REXX_SYNTAX_ASSIST = 0           -- Default for Rexx is 0

  or, if you don't have a MYKEYSET.E, you can omit support for all of
  them by including:
   const
      ALTERNATE_KEYSETS = 0            -- Default is 1

  Then recompile the macros, as described in the EPM User's Guide
  (enter VIEW EPMUSERS to see it).  Note that the syntax assist
  supports a number of different programming styles; if it's
  really the style that you object to rather than the fact that
  anything is added, enter the following command to see a list
  of configuration flags you can set to modify the style:
     view epmusers C_SYNTAX_ASSIST
  (or substitute the appropriate language).

:QUESTION.
  When I try WYSIWYG printing, I get no output or a blank page.

:ANSWER.
  Two things to check:
   - If you're printing to a LAN printer, your machine and the LAN server
     must be using exactly the same printer driver, or things might not
     work.  (I believe this is documented in the LAN pubs.)
   - WYSIWYG stands for "What You See Is What You Get".  If you have a
     white or light foreground color, it won't show up on the default
     background color.  Try selecting black on white.

:QUESTION.
  Why are buttons greyed in the print dialog?

:ANSWER.
  EPM prints to a queue for WYSIWYG printing, and to a device (e.g.,
  LPT1) when printing in draft mode.  If one of these is not defined
  for a printer, then the corresponding button will not be selectable.

:QUESTION.
  When I invoke EPM I get an icon in the Window Viewer, but when I
  select it nothing happens.  Any thoughts?

:ANSWER.
  It's the fault of the viewer.  They subclass the icon, and don't give
  us anything that a "nicely behaved" icon isn't supposed to get.

  You can configure the system so that all icons minimize to the desktop,
  or you can configure just EPM.

  If you open "OS/2 System", then open "System Setup", then open "Settings"
  you'll see a Window page that lets you specify whether minimized windows
  should appear on the desktop (as they do in OS/2 1.3), or in the
  "Minimized Window Viewer", or just be hidden.  This sets the default
  action for the system.  Some objects have a separate setting that can
  override the default.  If you open the Settings for the real program as
  found via the Drives object, you won't see this (no Window page on the
  Settings notebook), but if you create a Program object that points to
  EPM.EXE you will.

:QUESTION.
  How can I edit host files on other than the 'A' session?

:ANSWER.
  The default host interface (SAVELOAD.E) only accesses the first host
  session.  E3EMUL will let you access any host session.  Add the
  following to MYCNF.E and then recompile:
     const
        HOST_SUPPORT = 'EMUL'
        USING = 'CM'         -- (or 'IBM', or whatever.  See E3EMUL SCRIPT.)
        my_HOSTCOPY = 'AC'   -- (for example; the default is ALMCOPY)

  USING = 'CM' uses ALMCOPY.EXE (or the value of my_HOSTCOPY) as the file
  transfer command; USING = 'IBM' uses SEND/RECEIVE.  You must use the
  latter for MVS files.

  If you don't have room for E3EMUL, you could elect to have it linked in
  externally.  Add the following line to your MYCNF.E, then recompile
  both EPM and E3EMUL:
     LINK_HOST_SUPPORT = 1

:QUESTION.
  I am unable to edit any files on my H: drive.  Why is this?

:ANSWER.
  By default, H: is used to refer to the host system.  If you do not edit
  host files, then add the following to MYCNF.E:
     const
        HOST_SUPPORT = ''      -- Omit host support

  If you wish to be able to load and save host files directly from your E
  session, then you can change the drive letter used to refer to the host.
  If you use the standard SAVELOAD routines, then you can do this by adding
  the following to MYCNF.E:
     const
        HOSTDRIVE = 'V:'      -- Use V: to refer to VM files

  If you use the enhanced host support of E3EMUL, (HOST_SUPPORT = 'EMUL'
  in your MYCNF.E) then you can do this by adding the following to MYCNF.E:
     const
        my_HOSTDRIVE = 'V'      -- Use V: to refer to VM files

  Note:  For SAVELOAD, you set HOSTDRIVE to 'x:' (it needs the colon); for
  E3EMUL you set my_HOSTDRIVE to 'x' (it doesn't take the colon).

  If you use E3EMUL, instead of changing the host drive letter, you may
  choose to make the host logical terminal ID required, by adding to MYCNF.E:
     const
        HOST_LT_REQUIRED = 1

  This means that H: will refer to the local H drive on the workstation,
  and HA:, HB:, etc. will refer to the VM or MVS host.

:QUESTION.
  What is OK to place in MYCNF.E?

:ANSWER.
  MYCNF.E is a configuration file that is included by many .E files.
  Therefore, it should contain *nothing* other than CONST, SET and DEFINE
  statements.  If you placed executable code in MYCNF.E, at best you
  would be wasting space since the code would be duplicated in all your
  .ex files; at worst, you'd break various things depending on what code
  you included.

:QUESTION.
  I got a SYS3175.  Can you fix it?

:ANSWER.
  In order to track down the problem, we need at a minimum the values of
  the CSLIM, CS and IP (or CS:EIP) registers from the Trap display, the
  name of the module in error (e.g., ETKE551.DLL), and the date of your
  EPM.EXE and ETK*.DLLs.  If you have the current version of EPM, the
  VersionCheck command will give you the timestamp of when each module
  was built.  This is best, because there's no chance of error if the
  files had the date changed after they left our hands.

  If it's repeatable, please give the steps needed to reproduce it.
  If not, a general description of what you were doing immediately
  before the trap.

:QUESTION.
  I opened an EPM window from LaMail...

:ANSWER.
  No you didn't.  EPM and LaMail are two separate applications that are
  both built on top of the E Toolkit.  When you open an edit window from
  LaMail, it's a LaMail edit window.  You need not have EPM on your
  system to do this, only the E Toolkit (ETK*.DLL).

  This might seem pedantic, but using the correct terms avoids confusion
  and makes it easier for us to figure out what users are attempting to
  describe.

:QUESTION.
  How does EPM (or LaMail) find its .INI file, and how can I move it?

:ANSWER.
  EPM first looks in the OS2.INI for an EPM / EPMIniFile entry.  If found,
  this is used as the location of the EPM.INI file.  If no entry is found
  in OS2.INI, EPM will search the EPMPATH for the EPM.INI.  If it's still
  not found, EPM will ask the user where it can be found / should be
  created.

  (For LaMail, substitute LAM / LAMIniFile, LAM.INI, and LAMPATH.)

  OS/2 2.x contains an entry in the default OS2.INI for EPM / EPMIniFile
  pointing to \OS2, so this is where EPM will place its EPM.INI.  This
  was done so that new users of the OS/2 Enhanced Editor wouldn't be
  confused by the prompt asking where to put the .INI file.

  If you use a .INI file editor, such as JPOS2INI (from OS2TOOLS), to
  delete the entry from the OS2.INI (while EPM is not running), then you
  will be able to either move the EPM.INI to where you want it, or
  delete it if you want a new one to be created.

:QUESTION.
  How can I get the Ctrl+H feature working?

:ANSWER.
  If your system is set up correctly, placing the cursor on a word and
  pressing Ctrl+H, or pressing the Ctrl key while double-clicking MB1 on
  the word should bring up the help.

  You must have WANT_KEYWORD_HELP = 1 in your MYCNF.E if you recompiled the
  macros.  If you don't have KEYWORD_HELP_INDEX_FILE set in your MYCNF.E,
  then the default index file is epmkwhlp.ndx, which is searched for in
  the current directory, EPMPATH, DPATH, EPM.EXE's directory, and PATH (in
  that order).  If you have HELPNDX set in your environment, the value of
  this will be used in place of the hard-coded file name.  The value can
  either be a single file name or a list of names separated by plus signs.
  E.g.,
     set HELPNDX=epmkwhlp.ndx+epmtech.ndx+dde4.ndx

  epmkwhlp.ndx is the index file for the OS/2 API calls, and comes with
  the OS/2 2.x Developer's Toolkit.  dde4.ndx come with C Set/2.
  epmtech.ndx is part of the EPM package.

  Note that while EPM supports multiple files, the Toolkit's Kwikinf
  utility does not; if you use that, and wish to support more than one
  of the available .ndx files, you'll have to merge them into a single
  file.

:QUESTION.
  How come my redefinition of up, down, etc. has no effect, but it works
  for other keys?

:ANSWER.
  Do a Togglecontrol 26.  By default, the arrows are handled internally,
  for performance reasons - all that runtime logic for checking line or
  stream mode, basic or advanced marking, etc. slowed down the macro code
  too much.

  If you're trying to modify Ctrl+Up or Ctrl+Down, the reason is different:
  they're defined to be accelerators for "Push cursor" and "Pop cursor".
  Either turn off stack support (by removing WANT_STACK_CMDS from your
  MYCNF.E) or define your own accelerators, replacing the 1222 and 1223
  (defined in STDMENU.E, FEVSHMNU.E, or OVSHMENU.E).  Most accelerators
  are defined to execute the internally-defined key, but the DOKEY cmd
  does not currently support Ctrl+Up or Ctrl+Down.  This will be fixed
  in a future release.

:QUESTION.
  When I try to preview my text under EPM I get a Trap 00D (SYS3175) ???

:ANSWER.
  In config.sys you will find a line "RUN=...\EPW.EXE".  REM
  that out and put "DETACH ...\EPW.EXE" in startup.cmd and
  reboot (... is the path to EPW.EXE).  It is a bug in the
  EPW.EXE prog which is installed by CM/2 or DB/2.

:QUESTION.
  The help says to go to Options, Preferences, <something>, but my
  Options menu doesn't have a Preferences.  What's going on?

:ANSWER.  (For EPM 5.51)
  If you don't have configuration constants set so that at least one of the
  items on the Preferences menu besides Settings would be present, then we
  don't bother with a pullright, and just place Settings on the Options
  menu.  Take a look at OS2TOOLS,CFG to see how the shipped .ex files were
  configured, or EPMGCNF.SMP to see how the OS/2 2.x Enhanced Editor was
  configured.  The relevant menu items and configuration settings are:
    Advanced marking      WANT_CUA_MARKING = 'SWITCH'
    Stream editing        WANT_STREAM_MODE = 'SWITCH'
    Ring enabled          RING_OPTIONAL = 1
    Stack commands        WANT_STACK_CMDS = 'SWITCH'
    CUA accelerators      BLOCK_ACTIONBAR_ACCELERATORS = 'SWITCH'

  For additional details on any of these configuration constants, see the
  online users guide.  For example:  view epmusers WANT_CUA_MARKING

:ANSWER.  (For EPM 6)
  The macros were compiled to use a new menu style, which contains no
  Options menu.  You can find the selections from the Options / Preferences
  pull-right on the Misc page of the Settings dialog, and the selections
  from the Options / Frame Controls pull-right on the Window page of the
  Settings dialog.  If you recompile without STD_MENU_NAME in your MYCNF.E
  you'll get back the original menu structure.

:QUESTION.
  Whenever I am in draw mode, and I try to draw right to left,
  I get the following message, 'Call: unknown proc "ISDBCS"'.  Why?

:ANSWER.
  You recompiled the base macros (EPM.EX) without WANT_DBCS = 1 in your
  MYCNF.E, but didn't create a new DRAW.EX, so it still thinks there's
  DBCS support in the base .ex file.  If you recompile DRAW, everything
  should be fine.

:QUESTION.
  How can I get LEXAM.DLL and an appropriate dictionary?

:ANSWER.
  To get a copy of LEXAM.DLL and US.DCT, you can take it from the OS/2 TCP/IP
  product or the Developer's Connection CD-ROM.  For other dictionaries, you
  can download them in binary from a VM host if you have VM PROOF
  installed there (e.g., as part of PROFS or Office Vision).  Download the
  appropriate * LEXIS file to *.DCT.  The LEXAM.DLL must be in a directory
  in your LIBPATH, and the dictionary must be pointed to by the Dictionary
  entry in the Paths page of the EPM Settings dialog.

:QUESTION.
  EPM won't let me SAVE AS a file to the host.  Why is this?

:ANSWER.
  The Save As uses the standard OS/2 2.x file dialog, which knows nothing
  about host files.  Using Name and then Save gives the same result.

:QUESTION.
  EPM returns to my .CMD file before I'm done editing.  <or>
  My EPM program reference doesn't stay cross-hatched.  <or>
  Why can't I have different working directories in different
  edit windows?

:ANSWER.
  By default, when you start a new instance of EPM, it checks to see if
  there's already a running instance.  If there is, it passes off the
  command-line parameters to the running instance and immediately
  terminates.  This saves on system resources, by only having one process,
  but it confuses the WPS, which only knows that it started a program and
  the program it started, ended.  If you start EPM with the /M option
  (for Multiple processes), it won't do this - each /M invocation will
  start a new process, which will be more costly in terms of system
  resources, but which will keep the cross-hatching in synch, and will
  also ensure that control won't return until the edit session ends
  (often important when starting EPM from a .CMD file, or from NR/2).
  Finally, you must do this if you want different edit windows to have
  different working directories, as a single process can only have one
  working directory.

:QUESTION.
  When I open an EPM WPS edit object, I get one set of settings, when I
  start EPM from the OS/2 command line, I get a different set.  What's
  the story?

:ANSWER.
  The configuration for an EPM WPS edit object is saved by the WPS, and
  is unique for that edit object.  (You can copy the settings to another
  edit object by exporting them to a file from the first object's pop-up
  menu, and importing them into the second.)

  When EPM is started from the command line, or from a program reference,
  it uses the EPM.INI to load and save its settings from.  (See a previous
  answer for details on how EPM finds the EPM.INI.)

:QUESTION.
  You said to add something to a MY*.E file, but I can't find
  such a file in the distributed macros (EMACROS.FLS or EPMMAC.ZIP).

:ANSWER.
  We never ship a MY*.E file; that way there's no chance of overlaying
  one of your files.  If you don't already have a MY*.E, create one.
  (MYSTUFF.E, MYCNF.E, MYKEYS.E, MYKEYSET.E, or  MYMAIN.E)
  (If this is the first time you're compiling, you should create a
  MYCNF.E starting with OS2TOOLS.CFG as a base.  OS2TOOLS.CFG was used as
  the MYCNF.E used to build the *.EX files used for EPM 6, and internally
  for 5.51.  EPMGCNF.SMP was used as the MYCNF.E file used to build the
  *.ex files shipped with the OS/2 Enhanced Editor.)

:QUESTION.
  On OS/2 Warp, there are holes where my EPM ring buttons should be?

:ANSWER.
  Use the EPM that comes with Warp.  Both because you'll see the ring
  icons and because it's been tuned for Warp, and should load faster.
  (Actually, you should be using the latest EPM 6 instead of the old
  version 5.51, but that's not the topic of this answer...)

  Technical explanation:  In a previous release of OS/2 there was a bug
  in which owner-draw buttons were passed an invalid pointer when a
  system message hook was installed.  This made EPM trap when people ran
  apps that used a message hook.  As a work-around, we checked the
  selector of the pointer passed to us and ignored it if it wasn't the
  same as something else.  Warp is using the 32-bit GRE and so the
  selectors are now different.  Since the OS/2 bug was fixed, the "fix"
  for the non-appearing buttons was to only do the selector check for
  older versions of OS/2.

------------------------------------------------------------------
List of files included in E_MACROS:

ALL.E        - The ALL macro; displays all instances of a given string.
ASSIST.E     - The bracket-matching code used by Ctrl+left bracket.
BOOKMARK.E   - Bookmark support, Workframe support, & code to load and
               save EPM attributes as an enhanced attribute.
BOX.E        - The BOX macro; draw a box in various styles.
BUFF.E       - Test macros for the buffer() opcode; not actually used.
CALLREXX.E   - The Rexx macro interface code.
CHAROPS.E    - Support for character mark operations.
CKEYS.E      - C language syntax assist.
CKEYSEL.E    - (Not used by EPM.)
CLIPBRD.E    - Support for the clipboard and for copying marks between windows.
COLORS.E     - Constant definitions for color names.
DOSUTIL.E    - OS-specific code (DATE, TIME, DIR, etc.).
DRAW.E       - The DRAW macro; lets you draw figures with the cursor keys.
DRAWKEY.E    - F6 definition.
E.E          - The main file that includes most of the others.
E3EMUL.E     - Advanced host file editing support
EKEYS.E      - E macro language syntax assist.
EKEYSEL.E    - (Not used by EPM.)
ENGLISH.E    - Messages; included separately for NLS support.
EPM.E        - Front-end for E.E.
EPMDBCS.E    - DBCS support
EPMGCNF.SMP  - The MYCNF.E used to build the Enhanced Editor.
EPMLEX.E     - Spell-checking support.
EPMSHELL.E   - EPM Shell support.
EPM_EA.E     - Enhanced attribute support.
EXTRA.E      - Used to split EPM.EX in two.
GET.E        - The GET macro; get a copy of a file into the current file.
HELP.E       - Builds the stand-alone HELP.EX used by the help browser.
KWHELP.E     - Keyword help support (Ctrl+H or Ctrl+double-click MB1).
LINKCMDS.E   - Linking-related commands.
LOAD.E       - The default DEFLOAD (executed every time a file is loaded).
MAIN.E       - The default DEFMAIN (processes the command line arguments).
MAKETAGS.E   - Used to create a TAGS file (EPM 6.x only).
MARKFILT.E   - Procedures for filtering a block,line or character mark.
MATH.E       - MATHx, ADD, and MULT commands.
MATHLIB.E    - Support for MATH.E; separately linkable.
MENUHELP.H   - Help panel numbers; used by STDMENU.E
MODIFY.E     - The default DEFMODIFY (called when .modify status changes and
               for autosaving.
MOUSE.E      - Mouse support.
MYCNF.SMP    - A simple sample MYCNF.E.
MYSTUFF.SMP  - A sample MYSTUFF.E.
OS2TOOLS.CFG - The MYCNF.E used to build the .ex files distributed within IBM.
PKEYS.E      - P language syntax assist.
PKEYSEL.E    - (Not used by EPM.)
PUT.E        - The PUT macro; copy the marked area or current file into a
               new file, or append it to the end of an existing file.
READ.ME      - (This file.)
REXXKEYS.E   - Rexx language syntax assist.
RKEYSEL.E    - (Not used by EPM.)
SAVELOAD.E   - The default host file editing support.
SELECT.E     - The default DEFSELECT (called whenever the current file changes).
SLNOHOST.E   - Save / Load file support with no host support.
SMALL.E      - Used to compile a smaller .ex file; untested with the current EPM.
SORTDLL.E    - The SORT command that uses sorting code in a DLL; limited to
               sorting 64k (65,535 bytes) of data.
SORTE.E      - A SORT command that just uses macro code.  Slower, but no size
               limit.
SORTEPM.E    - The SORT command used by EPM 6, which has a built-in sort.
               Faster than either of the previous sorts, with no size limits.
STDCMDS.E    - Most of the macro-defined commands are defined here.
STDCNF.E     - Standard configuration file; sets defaults for options not
               set in MYCNF.E.
STDCONST.E   - Sets various constants.
STDCTRL.E    - Code for interacting with various PM and EPM controls.
STDKEYS.E    - Most of the keys are defined here.
STDMENU.E    - The standard EPM action bar is defined here.
STDPROCS.E   - Most of the standard macro procedures are defined here.
TAGS.E       - Adds TAGS support (EPM 6.x only).
USERAPP.SMP  - A sample user application, written for sharing with other users.
               It shows how to include the MYCNF.E to determine the user's
               defaults.

Note:  EPM 6.0x adds long lines support, extended GREP, tags support, user
configurable toolbar, pop-up menus, keyword highlighting, faster sort,
faster spell-check, multiple views, context menus, and lots more.  From
EPM, you can select Help / General Help / EPM Features to see further
details.
