   Welcome to FeelX 1.1a  1/1 

  FeelX 1.1a
 
  FeelX 1.1a is a small productivity tool for OS/2 that simulates some well
  known X-Window features. Some of the features include Sliding focus (two
  modes) , graphical kill , usage of 3rd mouse button , a lot of additional
  menus (e.g. VIO shells, desktop, corners) , one (or more) actionbar(s) for
  your desktop , hotkeys , program lauching , quick marking in VIO shells , hide
  of mouse pointer. FeelX can be integrated into the WPS or it may be used as a
  WPS replacement (it is not recommended to use FeelX as a WPS replacement
  because the WPS is great).
 
  FeelX is easy to enhance and to configurate. It can be programmed by a small
  description languages. An interface to DLL's is available (You can use the
  file api\testdll.c as a program template and do not need much programming
  experience to integrate your own ideas).
 
  Before you you have a look at FeelX by starting feelx.exe ...   ... you might
  be interested in one of the following topics:
 
  o Have a look at FeelX
 
  o Installing FeelX
 
  o Configuring FeelX
 
  Have fun  

   Copyright and more  2/1+

  This chapter contains the information about the copyright.

   Copyright  3/2 

  FeelX is (c) 1993, 1994 by Felix von Normann.
  All tools supplied with FeelX are (c) 1993, 1994 by Felix von Normann.
 
   Disclaimer  4/2 

  Since this program is free, it is supplied with no warranty, either expressed
  or implied. I am not resposible for any damage caused directly or indirectly
  by FeelX or any of the tools. I did my best to avoid errors and bugs, but I do
  not claim to have an error free program. All software is supplied AS IS. You
  may use these programs only at your own risk.  

   $$$?  5/2 

   If you like the program, do you have to pay for it? NO. This program is free
  for personal usage. I believe that tools that make your life with the computer
  easier should be as cheap as possible. (... this does not imply that all my
  programs will be free forever...)
 
   If you distribute shareware or PD, you may sell this program on diskette or
  CD. I hope you have a fair price (!). Never change the contents of the
  ZIP-archiv!
 
   For version 1.0 I wrote:
  Ŀ
  If you are the boss of a software company and responsibile  
  for those terrible high prices for OS/2 software, you must  
  license this program. You will get a registered version of  
  this program for just $399! As a registered user you will   
  get any bug-fix (OOPS, upgrade) for just $49. (In           
  Deutschland schon ab 998 DM erhltlich, dafr sind die      
  Diskettenlabel bersetzt.)                                  
  
 
  No one has paid any money now... I'm not sure whether this is because no
  bosses use this program ("Well, we're serious men and don't use toy tools like
  this one") or because they don't think their software is expensive ("400$ for
  a text processor is very, very cheap!"). As a consequence I reduce all prices
  to 395$ (incl. shipping!) and 48$ for updates. (Diese Preissenkung gilt nicht
  fr Deutschland - Preissenkungen fr Software gelten nie fr Deutschland ...).
  In addition to the group of people mentioned above the regristration now
  includes all those people that sell one program for DOS, Windows and OS/2
  where the OS/2 version is the most expensive.
 
   All others may use this program free. But: This program is Freeware, not
  Public Domain. You are not allowed to sell it (except in the sense of
  Freeware/Shareware). It has still my copyright. (This includes all parts of
  the program including the description language Fool :-)  )
 
  I am very interested in your comments. Please tell me if you have any ideas
  for a future release, if you like or don't like parts of the program. I
  learned a lot from the comments about v1.0
 
  Please send a postcard, letter or e-mail to  
  Ŀ
   Felix von Normann              
   Innstr.82                      
   94036 Passau                   
   Germany                        
   normann@kirk.fmi.uni-passau.de 
  
 
  Thanks a lot!!!

   Dedications  6/2 

  Ŀ
  This software is dedicated to my
  monitor, which died at work due 
  to long, long hours on          
  programming FeelX.              
  
 
   First steps & Installing FeelX  7/1+

  Read this chapter to get informations about how FeelX has to be installed.

   Quick Start: Trying out FeelX  8/2 

  If you are a user of FeelX v1.0 or v1.1 you must first remove FeelX from your
  Start-up folder (or startup.cmd) and reboot. FeelX does not work if parts of
  FeelX v1.0 or v.1.1 are still in memory. It is also necessary uninstall the
  previous version from the WPS. Because it may happen that the DLL is not freed
  (I think that's not my fault), reboot is absolutly necessary.
 
  Make the FeelX directory the current directory.
 
  Start FeelX by typing: feelx. Or - if FeelX is in your PATH click here to
  start FeelX.
 
  Now move your mouse around. You'll see that every window where is mouse points
  to is active. Try to click with the right mouse button on a shell or the title
  bar of a program. A menu pops up. You can freely configure these menus. Try to
  move a window with the right mouse button (OS/2 2.1 only). Try to mark a text
  in a shell by pressing the left button, move the mouse while the button is
  pressed. Copy the text into the clipboard by releasing the button. Paste a
  text from the clipboard by a double-click with the left mouse-button. If you
  don't like this feature you can simply configure it.
 
  If you like the program consider if you want to install FeelX permanently. It
  is very recommended to install a WPS object too.

   Installing FeelX  9/2 

  Topics:
  Overview
  Uninstall v1.0
  Uninstall v1.1
  Install v1.1
  Install (create) the WPS object
  Start FeelX from the WPS
  FeelX as a WPS replacement
  Delete unnecessary Files
   
   Overview.  10/2 

  To install FeelX please follow these steps
  (in these order - or unpredictable results will occur).
 
  Ŀ
      Uninstall FeelX v1.0     
      Uninstall FeelX v1.1     
       (if you are a user      
         of v1.0/v.1.1)        
  
  ͻ
       Install FeelX v1.1a      
  ͼ
  ͻ
   Install the WPS object      
   (optional - but recommended 
  ͼ
  ͻ
    autostart FeelX            
     - from the WPS            
     - as a WPS replacement    
  ͼ
  ͻ
    delete unnecessary files   
  ͼ
 
  I got a lot of critics for my installation program in the last version. The
  problem was that many people expected the program to do something that it was
  not able to do.
 
  As a consequence I decided either to make the installation very rudimentary to
  avoid misunderstandings or to create a automatic PM driven install-program.
 
  Unfortunately I don't have enough time now to create a real installation
  program. (Corrupted config.sys files are not very funny). If there is any need
  for a next release I'll try to work on an easier-to-use installation procedure
  now. I'm really sorry about that but installing FeelX isn't the difficult!

   Uninstall FeelX v1.0.  11/2 

  Do NOT use this uninstallation procedure for any other FeelX version than
  1.0!!!
 
   1. run uninst10 to unreplace the mouse object (Do NOT delete the mouse
      object!)
 
   2. remove feelx (and popuppm) from your start-up folder
 
   3. reboot (!!!!)
 
   4. save old version to diskettes (?)
 
   5. delete old v1.0 files
 
  You MUST delete all FeelX v1.0 files. Both versions are completly
  incompatibel!  

   Uninstall FeelX v1.1.  12/2 

  Do NOT use this uninstallation procedure for any other FeelX version than
  1.1/1.1a!!!
 
   1. Delete the FeelX object by moving it into the shredder
 
   2. run uninstal to unregister the DLL. (If you do not follow this step you
      cannot delete the DLL)
 
   3. remove feelx from your start-up folder (if there).
 
   4. reboot (!!!!)
 
   5. save old version to diskettes (?)
 
   6. delete old v1.1 files
 
  Do not mix FeelX v1.1 and FeelX 1.1a files.  

   How to install FeelX v1.1a.  13/2 

   1. Copy all files into the FeelX directory. (If you are a programmer you can
      also copy the API-Subdirectory - but this is not necessary)
 
   2. Edit your config.sys:
    
     o Add the FeelX path to the PATH variable
    
     o Add the FeelX path to the LIBPATH variable
    
     o Add the FeelX path to the BOOKSHELF variable
 
  If you have a 486 or Pentium, rename feelx586.dll to feelxdll.dll. Don't
  delete feelxdll.dll, because the Pentium-DLL as not been tested very much.

   Creating a WPS object.  14/2 

   1. Make sure that you have done all steps before.
 
   2. Start FeelX.
 
   3. start instwps and follow the instructions
 
  In opposite to the previous version of FeelX this version does not overload
  the mouse object. Instead a new object is created in the desktop. You can move
  it to a nice place on the desktop or "hide" in any folder (e.g. the system
  configuration folder).

   Start FeelX from the WPS.  15/2 

  Note: If may be sufficient to have the WPS object of FeelX installed and
  started. The Workplace shell restarts all objects that are not closed on last
  shutdown. This depends on config.sys file. If your system restarts the FeelX
  object (just reboot to see) you don't need to follow the installation below.
 
  Create a shadow of the FeelX object and move it into the startup folder:
 
   1. open the start-up folder (you'll find it in the OS/2 system folder).
 
   2. start wpopen
 
   3. look for the feelx.exe icon
 
   4. press Ctrl-Shift
 
   5.      "grab" the FeelX object with the right mouse button
 
   6.      move the object (its shadow!) into the startup folder
 
   7. Release Ctrl-Shift
 
  You can also create a shadow of the previously created WPS object in the
  startup folder. This has the (dis)advantage that FeelX will be listed in your
  window list.
 
  Per default FeelX loads feelx.go. You can also specify any other filename for
  a valid description file.

   Using FeelX as a WPS replacement.  16/2 

  Edit your config.sys:
 
  SET RUNWORKPLACE=c:\FEELX\FEELX.EXE
 
  Of course you must take the path of your FeelX directory
 
  FeelX will be started with the file nowps.go. There is no way to change this
  name.
 
  You can also use a shell as a replacement of the WPS and start FeelX from the
  file startup.cmd.

   Deleting unnecessary files.  17/2 

  If FeelX takes too much space on your hard drive consider deleting the
  following files.
 
   1. readme, changes, ...
 
   2. the subdirectory API
 
   3. all unneeded tools (they are explained in this documentation)
 
   4. this documentation
 
   5. feelxpix.dll
 
  The minimal set of files is:
 
  o FeelX.exe and FeelXDLL.dll
 
  o WPFeelX.dll if you installed the WPS object
 
  o FeelX.go (nowps.go) and toolbox.inc if you need menus, etc.
 
   Is FeelX too large?  18/2 

   I dont't think so.  19/2 

  There were some people asking if there is a tiny version of FeelX available.
 
  I'm not sure whether there is a real need for it. I tried hard to make the
  program smaller and tighter. Functions are grouped into segments to optimize
  loading of code.
 
  As far as I know OS/2 is smart enough to load only those parts of the program
  that are needed. If OS/2 runs out of memory unneeded code is deleted.
 
  I admit that FeelX currently needs a lot of memory when starting. FeelX is not
  intended to be used on 4 MB - machines. All data that is not referenced should
  be swapped out when OS/2 runs out out memory. It is swapped in again, when it
  is referenced (e.g. by selecting a menu item).
 
  If you're sure that you will never need menus delete the feelx.go file. Then
  FeelX takes about that space that a tiny version would consume.
 
  Another question is, if FeelX is too slow. If takes some time when FeelX is
  loaded until all data structures are initialized. This is done by a second
  thread so the system does not halt while parsing the feelx.go file.
 
  This is a "start-up-problem" only. The run-time-performance is not affected,
  no matter how complex your feelx.go file is.
 
  I'm sure many users are very angry about the bitmaps in my dialogs because:
 
  o They (the bitmaps ;-) ) are ugly
 
  o Serious people don't like kidding
 
  o They waste file space
 
  If don't like my pictures (ooooh...) you can simply delete the file
  feelxpix.dll. The functionality of the program does not decrease.
 
  If you just want to turn off Minnie on program-start you don't need to delete
  feelxpix.dll. Just type: fxopt minnie:off save

   Uninstalling FeelX  20/2 

  If you don't like FeelX you can simply uninstall FeelX:
 
   1. delete all (FeelX-)shadows from your startup folder
 
   2. restore your config.sys file
 
   3. delete the FeelX object
 
   4. start uninstal
 
   5. reboot (!!!)
 
   6. delete all files from your FeelX directory
   
   Using FeelX  21/1+

  This chapter describes how to use FeelX and points out the differences between
  Standard OS/2 and FeelX.

   Using the mouse  22/2+

  The main difference between Standard-OS/2 and FeelX is the mouse behaviour.  

   Sliding focus  23/3 

  With standard OS/2 the active window must be on the top of the desktop. It is
  impossible to type in something to a window that is only partial visible.
 
  Example:
 
  In the above sample screen shot you cannot type directly into the blue window.
  You must move the mouse on it and then explicitly click on window. This brings
  the blue window into the front (and therefore main parts of the white window
  are not visible any longer).
 
  With FeelX (assuming you have turned the sliding focus feature on - which is
  the default) you just move the mouse on the blue window. The window is still
  in the background but you can type in your text there. The white window is
  still fully visible.
 
  To bring the window into the front simply click somewhere on its contents.
 
  As long as you press Ctrl this feature is off while moving the mouse.
 
  You have a lot of options to change the way FeelX is working. You can specify
  wether you want to activate windows only or you want to activate pushbuttons,
  entry field...
 
  Per default FeelX is off when the window list is active. This feature can be
  turned off.
 
  You can decide wether the menus should disappear when the mouse mouse (more
  similar to real X) or not.
 
  All features are difficult to explain. Just install the WPS-object and change
  all parameters live  

   Let the mouse pointer disappear  24/3 

  Did you ever had the problem that the mouse pointer hides an important part of
  the window?
 
  The mouse pointer is so small - but according to Murphy's law it is always in
  the way. With FeelX you can hide the mouse pointer after a specific amount of
  time.
 
  Use FxOpt.exe or the WPS-Object to set a pointer timeout value. Per default
  this option is off. Assume you chose 10 seconds. If you do not move the mouse
  for 10 seconds the mouse pointer disappears. It will become visible as soon as
  you move the mouse again.
 
  The mouse pointer will not disappear when you press one of its buttons. So you
  can still work (e.g. Drag&Drop) as precise as before.
 
  If you ever have the problem that the mouse pointer is hidden and does not
  become visible again, just load the system editor e.exe. This brings the
  pointer back.  

   Changing the Z-Order of windows  25/3 

  If you have a 3-button mouse (& driver) you can change the z-order of a window
  by pressing the 3rd mouse button (the middle one for OS/2 2.1) on a title bar.
  If it is partly invisible FeelX brings it to the front otherwise FeelX pushes
  it back.

   Positioning windows  26/3 

  The following picture is the upper left part of a window:
 
  Imagine that the system menu is divided into 4 quadrants: If you click with
  the right mouse button on the upper left corner of the system menu the whole
  window will be pushed to the upper left corner of the desktop.
 
  If you click with the 3rd button anywhere on the system menu the whole window
  will be centered.

   Displaying WPS-Settings  27/3 

  To display the Settings of a Workplace Shell object double-click on the object
  with the 3rd mouse button.
 
  This function only simulates keystrokes. It will open that view that first
  appears in the open section. I don't know any WPS program where this is not
  the Settings view.

   Moving a window with it's contents  28/3 

  With OS/2 2.1 and FeelX you can move the window with it's contents (not just
  the frame). This is done by moving it with the right mouse button. You can
  also move a window by grabbing it at it's frame. This can be useful if a
  window does not have a titlebar.
 
  If you press the left Ctrl key the window is not brought into the front before
  starting to move.
 
  Currently you cannot move Message boxes and dialog boxes!

   Using seamless windows  29/3 

  FeelX does not work with seamless windows programs and turns itself off when
  the mouse pointer is on a seamless window program.
 
  Because of a technical restriction it is necessary to pop up a seamless window
  program when it becomes active.
 
  You don't have a FeelX menu with a seamless window program.
 
  If you minimize a seamless window to the desktop you cannot you cannot access
  its menu (thanks Sven, I didn't notice that). Press Ctrl while moving the
  mouse on the cursor

   Using the Keybord  30/2+

  This chapter describes the differences between Standard OS/2 and FeeX.

   Changing the Z-Order of windows  31/3 

  With the standard description file (feelx.go) Ctrl-Shift-PgUp pops up a window
  while Ctrl-Shift-PgDn pushes it into the background. As opposite to FeelX v1.0
  this now works for shells too.

   About hotkeys  32/3 

  Some FeelX functions allow you to assign a hotkey. You can use this hotkey by
  pressing it together with Ctrl and Shift. This does currently work only for
  the PM sessions. You cannot use a hotkey in a fullscreen (DOS or OS/2) session
  (now).
 
  For version 1.1a you can change this default hotkey combination to any
  Ctrl-Shift-Alt combination with the WPS object or fxopt hflags:[csa]
 
  There is a way to activate hotkeys from Fullscreen sessions also. This feature
  is not default and it is recommended not to use it when FeelX is a WPS
  replacement.

   Quick marking in shells  33/2 

  FeelX supports an easy way of marking in a shell (=text window, =VIO-shell)
 
  To cut and paste a text with standard OS/2 you must select mark in the system
  menu. Then mark the text and select copy. For pasting you must select insert.
 
  With FeelX just press the left button (and hold it) and start to move the
  mouse. The text will be marked. It is copied to the clipboard as soon as you
  release the mouse button. For pasting double-click with the left button.
  You'll see that it's very easy (and much easier than in FeelX v1.0).
 
  If your program uses mouse button 1 there might occur problems of course.
  There is a high degree of configurability. You can select any of the 3 mouse
  buttons with any shift combination. If you select a shift combination you must
  press exactly this combination.
 
  You can define different button/shift combinations for cut and for paste.
 
  There is one additional feature called alternate marking. Assume you want to
  cut & paste with button 1 and no shift modifier because you're using 98% OS/2
  programs that do not need mouse button1. But you have exactly one Dos
  application that needs button1. Sometimes you (must) use this Dos application
  and you want use the cut & paste feature there too. Without the alternate
  marking feature you would be forced either to select an uncomfortable global
  setting (e.g. button 1 and Ctrl-key) or you must change the combination every
  time the Dos program is started.
 
  With FeelX you have the ability to specify a second cut & paste combination.
  (This is per default button 1 and shift). When the Dos-Session is started you
  can mark this session as such a alternate cut & paste session by selecting Alt
  Cut&Paste from your FeelX menu (single
  click-right-mouse-button-titlebar-menu). Now you can mark text and paste text
  with the alternative second combination (i.e. with shift). All other window
  still have the primary combination (i.e. button 1 without shift).
 
  You can automate this by starting fxopt altcutpaste:on. This can be done from
  a batch file. You can start FxOpt from any OS/2 an Dos(!) session.
 
  Per default FeelX deletes the CR/LF at the end of a string. You can switch off
  this feature with the WPS object and FxOpt.
 
  Don't worry if you accidently move your mouse while pressing mouse button 1.
  You must mark the text for at least 1/3 second or it will not be copied into
  the clipboard. This prevents the clipboard from unintended deletion.
 
  This text might be a little confusing, but in realitiy cut & paste is very
  easy when using FeelX.

   Using the standard configuration  34/2 

  Topics:
 
  Overview
  FeelX
  Shell
  Desktop
  Actionbar
  Hotkeys
   
   Overview.  35/2 

  The following menus are currently defined:
  Ŀ
  FeelX     Click with the 2nd (right) mouse botton 
            on a title bar                          
  Ĵ
  Shell     Click with the 2nd (right) mouse button 
            on a shell.                             
  Ĵ
  Desktop   Click with the left mouse button on the 
            desktop or double-click with the 3rd    
            (middle) mouse button on the desktop.   
  Ĵ
  Actionbar Make the actionbar visible with the     
            desktop menu or modify the feelx.go file
            to have it visible from the beginning.  
  Ĵ
  Hotkeys   Hotkeys are key combinations with       
            Ctrl-Shift                              
  
   
   Hotkeys.  36/2 

  There are currently only two Hotkeys defined: Ctrl-Shift-PgUp moves the active
  window into the foreground, Ctrl-Shift-PgDn moves it into the background.

   FeelX  37/2 

  You can activate this menu by clicking with (right) mouse button 2 on a
  titlebar.
 
  The FeelX entry allows you to turn on and of the Sliding focus and Cut & Paste
  for Shells. This is a global action.
 
  The second entry allows you to switch to the alternate Cut & Paste keys. This
  is valid only for the associated window.
 
  The window menu allows you to change the Z-order of a window. Per defult the
  window is brought to the background. You may also specify a submenu item to
  move the whole program (not just the window) into the background or into the
  foreground.
 
  The Add menu item adds this window to the quick switch list.
 
  In the default settings file the quick switch list is only displayed, when it
  is not empty.
 
  Use Shell to start a new OS/2 shell. Attention: This process is started as a
  child process. Therefore it will be killed without warning when FeelX is
  terminating.
 
  Redraw may be useful when a program has a bug and does not redraw itself. (The
  window displays only garbage).
 
  Always top should be used with care! You should use this function rarely. It
  forces a window to be displayed at the top. Other windows cannot overlap this
  one.
 
  Hotkey is an interesting feature. When you choose this item the Hotkey dialog
  appears. You can now type in any character (e.g. k). Ctrl-Shift-k would then
  pop up the window, no matter whether it is minimized, hidden or in the
  background.
 
   Test It!  38/2 

  Test If FeelX is already running (and in the path) click here to to show the
  menu!
 
  (End the menu with ESC)

   Screen Shot  39/2 

   Shell  40/2 

  Description
 
  To display the shell menu click with the right mouse button on a shell.
 
  cd .. and dir simulate key entrys.
 
  Font allows you to switch to a small or the default font. Default is the small
  font.
 
  With open folder a WPS folder of the current path is opened.
 
  Exit is a quick way to leave a shell. For OS/2 2.1 the shell is not left
  immediatly. The system waits until all child processes are closed.

   Test It!  41/2 

  Test If FeelX is already running (and in the path) click here to to show the
  menu!
 
  (End the menu with ESC)

   Screen Shot  42/2 

   Desktop  43/2 

  Description
 
  To get the Desktop menu double-click with the left mouse button on the
  desktop. (You may also click with the middle mouse button on the desktop if
  you have a 3-button-mouse-(driver)).
 
  Per default FeelX defines an actionbar for the WPS. This is hidden on
  start-up. Display this actionbar with the first menu item.
 
  The Config menu lets you change different aspects of FeelX. An interessting
  one maybe change opt. Copy a string into a clipboard that is recognized by
  fxopt. E.g. off or pdbflags:on When you select change opt. Fxopt is started
  with the clipboard as the parameter. This allows you to control FeelX via Cut
  & Paste.
 
  Shell simply opens a shell.
 
  Tools is a Tools menu containing the clipboard, Calculator, Clock, and Font
  and Color Palette. These are all OS/2 tools. In addition it provides PM-Kill
  for visual killing of programs, wo (a fault-tolerant search for programs) and
  ReXX. ReXX uses the Clipboard as the entry, interprets it as a ReXX string and
  displays the output (result) in a PM viewer.
 
  Help contains Help about FeelX. The second point uses the clipboard as the
  entry. Thsi maybe useful when programming FeelX. Mark the keyword (e.g.
  pmkill) and select Help/FeelX Help about pmkill. The docs appear.

   Test It!  44/2 

  Test If FeelX is already running (and in the path) click here to to show the
  menu!
 
  (End the menu with ESC)

   Screen Shot  45/2 

   Actionbar  46/2 

  Description
 
  The standard Actionbar is similar to the Desktop. The Actionbar is initially
  hidden. You can make it visible by activating the Desktop menu and choosing
  hide actionbar.

   Test It!  47/2 

  Test If FeelX is already running (and in the path) click here to to show the
  default Actionbar!

   Screen Shot  48/2 

   Configuring FeelX  49/1+

  This chapter explains how to configure FeelX.  

   About configuration  50/2 

  The aim of a configuration is to adapt the look and feel of FeelX to one's own
  preferences.
 
  Therefore configuration is implict and naturally divided into two parts:
 
   1. The "Look": The menu structure. This is done by programming FeelX. Change
      the FeelX.go file.
 
   2. The "Feel": This is the way how to mark in a shell, whether sliding focus
      is on or off. This is done by Fxopt or the WPS object
 
   Using FxOpt  51/2 

  Fxopt can be used to configure FeelX if you did not install the WPS object. It
  can also be used to configure FeelX from a batch file or to change parameters
  from a batch file.
 
  Start fxopt without parameters to query and list the current settings.
 
  Start fxopt -? to display all supported parameters of fxopt.
 
  Now configure FeelX while FeelX is running. E.g you can start fxopt mark:2
 
  If you are satisfied with the settings save the options to the os2.ini by
  starting feelx save. The next time FeelX is loaded it will start with these
  parameters.
 
  See fxopt.exe in the additional program section.  

   Using the WPS object  52/2+

  If you install the FeelX-object you'll get a new object on the desktop of your
  workplace shell. Double-click on the object to start FeelX (FeelX must be in
  the path then!). Open the Settings (Open/Settings or double-click with button
  three) to get the notebook where you can easily change the configuration.
 
  Please note the FeelX and the Workplace-Shell are two completly different
  processes. You can modify a running FeelX without having it started per
  double-click. When FeelX crashes the Workplace-Shell is still stable and
  vice-versa.
 
  If you are not sure wether to start it per double-click directly: When the WPS
  object is open it adds itself into the windowlist. This is not true when the
  program is started directly.
 
  The WPS object has one additional feature that is difficult to notice. As long
  as FeelX does not have a "real" GUI it is programmed via a small description
  language. If you want to start WPS objects, you can do that. You need a handle
  fow that object. As far as I know it is not possible to get that handle from
  any other the the WPS process (or any DLL that runs in its contents).
  Therefore it is difficult for FeelX.exe to get the right handle. But the WPS
  object is a real WPS application.
 
  The solution is: Drop your WPS object over the FeelX object. It seems that
  nothing happens, but this isn't true. The handle of the object is written in
  the clipboard. Edit your Feelx.go file and and the line e.g. ...:object [
  entry="...", handle=xxxx ] where xxx is the contents of the clipboard.
 
  Try to go deeper in the description language. In this way (I don't think it's
  a good way, but it's practical) you start objects menu or even per hotkey.

   Page 1  53/3 

  Sliding focus: The feature that every window where the mouse points to is
  active.
 
  activate all controls: If turned on - even scrollbars and pushbuttons receive
  the focus. I prefer this setting (therefore it's the default). If you have
  problems with flickering windows turn this feature off.
 
  static menus If this is on, the pull-down menus do not disappear when the
  mouse moves over the title bar. If this control is off the program behaves the
  same way than FeelX v1.0 and much more similar to X.
 
  pop up menu: This is one of the rarely used 3-state-buttons. With a checkmark,
  windows are always brought into the front when you move the mouse pointer on
  them. When the control is dark windows pop up when you press shift while
  moving the mouse pointer. Turning this feature off means not to pop up windows
  because of moving the mouse pointer.

   Page 2  54/3 

  quick marking in VIO shells: Turn cut & paste in VIO shells on or off.
 
  strip CR/LF:Use this feature to cut of CR/LF which is normally added by OS/2
  when you mark in a OS/2 shell.
 
  hide mouse pointer: Use this feature to hide the mouse pointer after a
  specific time when the mouse is not used. Also specify a time-out value in
  seconds.

   Page 3  55/3 

  persistent window list: Turn FeelX off when the window list ist active.
 
  show Minnie on start-up: Use this control to disable the image of Minnie when
  the program is started.
 
  pop up folder: When off you cannot bring a folder into the foreground when you
  click on its contents

   Page 4  56/3 

  Mark button: Specify a marking button.
 
  Mark shift flags: Specify  marking shift flags.
 
  alternate mark shift flags: Specify an alternate shift combination.
 
  Refer to marking in shells for more information.

   Page 5  57/3 

  Paste button: Specify a paste button. You can also specify whether pasting is
  done on single-click or double-click.
 
  Paste shift flags: Specify paste shift flags.
 
  alternate paste shift flags: Specify an alternate shift combination.
 
  Refer to marking in shells for more information.

   Page 6  58/3 

  Hotkey combination: Specifiy any combination of shift flags that may work a
  hotkey combination.
 
  Fullscreen hotkeys: If this checkbox is on an FeelX is restarted you can use
  hotkeys from a Fullscreen session also. Do not use this option if FeelX is
  used as a WPS replacement or if you don't want FeelX to operate with a lot of
  threads.

   Programming FeelX  59/1+

  You can use a simple programming language (called Fool) to define menus or
  actions bound to the Shell menu, the FeelX menu, Hotkeys, ...  FeelX loads the
  file feelx.go (as a WPS replacement: nowps.go). Place your fool statements in
  there. Both files share the file toolbox.inc which is included at the top of
  feelx.go/nowps.go.  

   Overview  60/2 

  You can program FeelX by using a simple small programming language called
  Fool. Fool stands for "FeelX object oriented language" (And don't think that
  this name is meant ironical considering all those OO PL, UI, word processors,
  graphic programs etc.)  
 
  Since everybody is self-conscious by his own experience, this language is
  bound to my point of view about programming languages. It is not a general
  purpose but specialized description language that is not object oriented but
  has some OO components (I believe). It inherits some of the PM's event driven
  structure. I myself think it offers a natural way to express e.g. the
  structure of menus. Others say it is an unlogical and ugly language that is
  very foolish. Well, they might like the name "Fool"...  
 
  You don't need any programming experience to use this language. Even though
  the language is (relativly) easy to use I admit it is not comparable to a GUI
  for defining menus and actions. I do have a concret vision about a GUI for
  FeelX and it does not have any similarity with the WPS way of defining menus
  and actions. I simply do not have the time to implement and test it at the
  moment. I don't want to make any promises, but I hope Visual Fool will be
  available someday...  

   Understanding Fool  61/2 

  Introduction
 
  You need to program Fool when you want to change the menu structure or want to
  associate one of the FeelX entry points with an action. For example you might
  want to have a menu when the user clicks with the right button on a Shell. The
  popup menu can look like this:  
 
  Fool= a world of objects
 
  Before we start to define a menu have a look at a Fool program. Programming
  Fool means to define new objects by using other objects. Therefore a Fools
  program means to define a lot of objects. When FeelX is loaded and has read
  your Fool program there is a (smaller or larger) pool of ofjects in memory:
                     ͻ
                      Pool of Objects  
                     ͹
                     Ŀ Ŀ
                     Shell otherObj
                      ٺ
                     ĿĿ  
                     MenuLLMenuLR  
                       
                     ͼ
   
  Help! A click on the Shell
 
  What if the user presses the right button on a shell? It is the job of FeelX
  (in fact its Dll) to notice this. Then FeelX tries to find an object with a
  specific name in the object pool. The name of the object is defined by the
  feelx.exe. There a currently 11 actions FeelX understands and 11 object names
  that FeelX tries to find when such an action takes place. For example if a
  user presses the right button on a shell FeelX looks for an object called
  Shell. This looks like the following:
                     ͻ
                      Pool of Objects  
                     ͹
  Ŀ            Ŀ Ŀ
  Click       ĴShell otherObj
              ٺ
         ĿĿ  
     FeelX looks for MenuLLMenuLR  
     object Shell      
                     ͼ
  Please note the the object name is a logical name. It will never appear in any
  menu. It is an unique case-sensitive name for each object that references the
  object in the pool. From a theoretical point of view there is a difference
  between an object and its name. In this small text object is used even if
  object name is meant.  
 
  Making an object alive
 
  If there is no object with the specific name nothing happens and the action is
  simply ignored. What happens if the user defined an object called e.g. Shell?
  We need a more detailed view of the object pool now. Each object is like a
  form where specific data e.g. its name is written down. This may look like the
  followinf:
   ͻ
    Pool of Objects           
   ͹
     Ŀ         
      Shell        Ŀ       
     Ĵ        
      Type:ĿĴ       
      menu               
     ٳ        
      Attributes:        
      attrib1=...        
      attrib2=...        
      ٳ        
             
             
   ͼ
  FeelX first looks at the type. This is a menu. Therefore a menu will popup as
  soon as the user clicks on a shell. In addition there are some attributes
  described for this object. Attributes for a menu describe which menu items
  this menu should hold.  

   Defining objects  62/2 

  An object definition has the form:
  object:=type [attributes]
  where object is the name of an object, type is a (pre- or user-) defined type
  and attributes is a (optional list of attributes that are valid for a specific
  type). It is important that object starts on a new line and object, := and
  type are in the same line.  
 
  An attribute is specified by: attrib=dat. To define more than one attribute,
  separate them by comma or start each attribute definition on a new line. You
  can omit the attribute name attrib Then the order of the attributes is
  relevant. See the chapter about predefined types for more information. The
  first column in the attribute section specifies where an attribute must be
  defined so the name can be omitted.
 
  Example:The following definitions are equivalent:
  hello := msgbox [ text="hello, world", headline="hello" ]
  hello := msgbox [ headline="hello", text="hello, world" ]
  hello := msgbox [ ,"hello, world","hello" ]
  hello := msgbox [ headline="hello, world",,"hello" ]
  hello := msgbox [ text="hello, world"
                         headline="hello" ]
  (To avoid errors and increase readibility the last form is recommended.)
 
  All above examples define an object with the (logical) name hello. You can use
  an object as a type too. This means replace all attribute definitions with the
  new ones. E.g. the following two definitions are equivalent :
  bighello := hello [ headline="HELLO" ]
  bighello := msgbox [ headline="HELLO", text="hello, world" ]
 
  You may also redefine an object in the following way:
  hello := hello [ headline="HELLO" ]
  Now hello is the same as bighello.
 
  There are two reasons why it is important to define objects:
 
   1. If you define an object that acts as an entry point (e.g Shell or MenuLL)
      you associate a basic PM action with the object action.
 
   2. There are some type (e.g. menu) that allow to reference to other objects
      which should be explained more detailed now.
 
  Assume yuo want to define the following menu for a Shell:
 
  First you must define the entry point object:
  Shell := menu [ items=obj_dir;obj_unzip;obj_font;obj_exit;obj_help;obj_search
  ]
  The object Shell has now one attribute (the long string). Each item is
  interpreted as the reference to another object. obj_dir is an object that may
  be defined somewhere in your file e.g. as: obj_dir:=keyin [ string="dir\n" ].
  It is not necessary that this object is defined before Shell. If it is never
  defined, it will simply not appear in your menu.
 
  Each object has a default name. Most times you want your menus to have other
  menu entry to be the default. It is important that the menu does not know
  anything about names. Instead before the menu pops up it asks each of its
  objects for its name. So the definition of obj_dir would better be:
  obj_dir:=keyin [ entry="~dir", string="dir\n" ]. Now the menu entry has the
  name dir with an underlined d (see sample above). The ~ is a PM notation for
  an accelerator key for a menu.
 
  Please note that Shell is now an object like any other object. So it may
  appear itself in a menu. E.g: MenuLL:= menu [ items=obj_1;Shell;obj_2 ]. If a
  menu is part of another menu it is recommended to define the entry-attribute.
 
  This way of defining objects would require a lot of text and long description
  files. So you can define a new object (without a name) in the attribute
  definition. Example: Shell := menu [ items = keyin [ string = "entry" ] ; /*
  ... */ ] This is called an anonymous object.
 
  Since each type is also an object you can refer to existing types as objects.
  Example: menu [ items = qlist;pmkill ]. This example uses a reference to the
  predefined object (type)s qlist and pmkill.  

   Remark on the language  63/2 

  The object definition has the form:
  object : type [ attrib=data]
 
  Notes:
 
  o object, type, data are case sensitive.
 
  o attrib is not case sensitive and fault-tolerant. E.g. Etry would result in
    entry.
 
  o The := must must in the same line like object
 
  o Reserved characters ( : := , ; . [ ] " ' ^ < >) must be enclosed with ".."
    or '...' e.g. name="program.exe". Although this is required only for
    reserved chars it is recommended to enclose all data
 
  o Comments must be enclosed with /* */ or (* *). They cannot be nested.
 
  o A comment of the form // ends with the line.
 
  o You can terminate an object definition with a period and omit comment
    embracing with /* */. This is not recommended.
 
  o To include a file write: ^filename.ext
 
  o The above directive is not allowed in an object definition.
 
  o You can reference to objects that are defined later in the text.
 
  o When redefining objects, all new attributes replace the old ones. An
    exception is the attribute item (or items) where the data is appended to the
    old item-attribute.
   
   Reference - Entry points  64/2 

  There are currently the following entry points defined:
  MenuLL: The mouse is in the lower left corner.
  MenuLR: The mouse is in the lower right corner.
  MenuUL: The mouse is in the upper left corner.
  MenuUR: The mouse is in the upper right corner.
  FeelX: The FeelX context menu (right-button-click on a title bar).
  Shell: The shell context menu (right-button-click on the shell).
  Shell3: The shell context menu (middle-button-click on the shell).
  Hotkeys: This reference/object is called whenever a hotkey is pressed.
  Startup: This reference/object is called once on startup.
  B1Desktop: A double-click with the left mouse button on the desktop.
  B2Desktop: A double-click with the right mouse button on the desktop.
  This does not work as long as the WPS is active!!
  B3Desktop: A click with the middle mouse button on the desktop.
   
  Whenever you define a reference/object in your source file the event (click,
  corner, ...) is associated with an action. Except for the Hotkeys a menu is
  most commonly used. But please note that you don't need to to so.  

   Reference - functions  65/2+

  The chapter describes the built-in functions of feelx  

   actionbar  66/3 

  Function: actionbar
 
  Description: This function shows an actionbar at the top (or bottom) of the
  Desktop.
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o actionbar [ enytry="Action", pos="bottom", item=a;b;c ]
 
  Notes:
 
  o "Executing" an actionbar means to show the associated desktop window. If you
    want to have an actionbar from the beginning the right place for this
    function is Startup. You can also show the actionbar as the result of a menu
    action. You simply have to add this function to a menu.
 
  o You can (currently) have up to 10 different actionbars. (E.g. place them in
    a menu as different items).
 
  o (Currently) There is a limitation with submenus of an actionbar. You should
    not reference them directly or indirectly. Always use anonymous
    references/objects.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        Actionbar 
  Ĵ
    2 pos         top            place the actionbar at the toptop       
  Ĵ
                  bottom         place the actionbar at the              
                                 bottom                                  
  Ĵ
    3 item        [ref1;ref2]    see ( menu)                             
  
 
  See also: menu, hideactionbar, moveactionbar  

   addmenu  67/3 

  Function: addmenu
 
  Description: Add a menu entry to the quick switch window list
 
  Location: FeelX, Shell
 
  Portability: high
 
  Examples:
 
  o addmenu [entry="add to menu"]
 
  Notes:
 
  o It is currently not supported to delete items from the Quick switch list.
    Instead they are removed when the window is closed.
 
  o The name of the window appears in the switch list. This entry will not
    change even if the window title changes. This is intended because it makes
    it easier to organize the quick switch list. As opposite to the "real"
    window list you can have a list without "just" Command Shell items.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry                  
  
 
  See also: qswitch  

   altcutpaste  68/3 

  Function: altcutpaste
 
  Description: Toggle cut and paste to and alternate Shift combination. The
  standard way to cut and paste may not be useful for every program. Assume you
  use cut and paste with button x and without any Shift combination. But you
  have exactly one program where you need button x. Define the alternate shift
  combination (perhaps with shift) by using fxopt.exe or the WPS object. After
  you start the program mark the shell with this function. You will see that you
  can mark with shift only in this shell. All other shells allow marking without
  shift.
 
  Location: Shell, FeelX
 
  Portability: high
 
  Examples:
 
  o altcutpaste[]
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        Alt       
                                                               Cut&Paste 
  
   
   chain  69/3 

  Function: chain
 
  Description: This function lets you activate a series of functions
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o chain [ Special_actionbar;hideactionbar ] Switch to a special actionbar but
    let it be invisible
 
  o chain [ addmenu;winhotkey ] Put the window into the quick switch list and
    assign a hotkey
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        unnnamed  
                                                               chain     
  Ĵ
    2 items       [ref1;ref2]    This list of                            
                                 references/objects (see menu)           
  Ĵ
    4 update      true           update the window handle (e.g.          
                                 use clock;top)                          
  Ĵ
                  false          do not update the window      false     
                                 handle                                  
  Ĵ
    5 delay       [time]         Time to wait in ms between two0         
                                 chain actions                           
  
 
  See also: menu  

   child  70/3 

  Function: child
 
  Description: Break the parent/child connection of windows to be able to move
  child windows across the whole desktop.
 
  Location: FeelX
 
  Portability: high
 
  Examples:
 
  o child []
 
  Notes:
 
  This is not intended to be used by the presentation manager. Some programs
  might crash. Be careful!
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        Take child
  
 
   dll  71/3 

  Function: dll
 
  Description: Starts a DLL-function with some informational parameters
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o dll [ fun=test, dll=testdll ]Start the function test which ist placed in the
    DLL testdll.
 
  o dll [ entry="hello", fun=hello, dll=hellopm, thread=true ]Start the function
    hello which ist placed in the DLL hellopm. Start the function from a
    separate thread.
 
  Advanced examples:
 
  o dll [ entry="Tool", fun=tool, dll=tool, parameter1="abc", parameter2="123" ]
    Start the function tool in the dll tool. The function can use the parameters
    parameter1 and parameter2.
 
  Notes:
 
  o This function is not intended to be used by the novice user. It offers the
    possibility to integrate your tool seamlessly into FeelX. See advanced
    topics for more information. If you make this DLL available to other users
    please make the usage of the DLL as easy as possible (the user can use
    subclassing).
 
  o The (main execution) function has the type (C Set/2 Notation): void _System
    function(int x, int y, HWND hwnd, HWND frame, int argc, char *args[] char
    *vals[]) where the parameters do have the following meaning:
    
     - x and y are screen-coordinates where the action was called
    
     - hwnd is the associated window (this can be the active window [Hotkeys] or
       a VIO-client(shield) [Shell], a titlebar [FeelX] or the desktop)
    
     - frame is the frame window of hwnd
    
     - argc ist the number of paramters including fun, dll, thread and all other
       specified attributes
    
     - args and vals are arrays similar to the main function of a C-program.
       args[i] contains the i.th attribute and vals[i] is the associated
       paramter. This allows the DLL to parse the parameters before doing some
       action
 
  o You can optionally specify a menu text function with the attribute entryfun.
    This function has the type void _System function(char *buffer). Where buffer
    is the place where you can put the string that is displayed instead of the
    attribute entry. PLEASE NOTE: This buffer has currently only 40 Bytes. Using
    longer strings result in a crash.
 
  o You can optionally specify a menu manipulator function with the attribute
    menufun. This function has the type void _System (HWND menu, int id) where
    menu is the menu handle and id is the id of the menu item. This function can
    be used to disable or check a menuitem.
 
  o Currrently FeelX does not support growing stacks. Please do not waste stack
    space.
 
  o Since the DLL runs in the same process then FeelX it may obviously crash the
    whole program.
 
  o The DLL is started during the FeelX message processing. Therefore you should
    specify thread=true if your function needs too much time to work. The
    PM-rule says: no message should work more than 0.1 seconds without a second
    thread. But since this function is not called very often - only if the user
    selected it - 1 to 2 seconds (on a slow system) may be justified.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        DLL       
  Ĵ
    2 dll         [text string]  Name DLL                                
  Ĵ
    3 fun         [text string]  Name function (for C++ the              
                                 unmangled name!)                        
  Ĵ
    4 thread      true           Start the function from a               
                                 separate thread                         
  Ĵ
                  false          Start the function syncron    false     
  Ĵ
    5 menufun     [text string]  DLL function that manipulates [do       
                                 the menu item (e.g. to disablenothing]  
                                 or to check it)                         
  Ĵ
    6 entryfun    [text string]  DLL function that manipulates [entry]   
                                 the menu entry text                     
  
 
  See also: program  

   feelx  72/3 

  Function: feelx
 
  Description: Use this function to toggle the status of sliding focus, quick
  VIO marking, hideing of he mouse pointer
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o feelx [ entry="Sliding Focus", focus=true ]  Use this statement to toggle
    only the status of the sliding focus.
 
  o feelx [ entry="hide & mark", hide=true, cutpaste=true ]  This statement
    toggles the state of the hide and the cut&paste feature.
 
  Notes:
 
  o The menu item will be checked if the states of all chosen features is on.
 
  o If menu item is checked all chosen features will be turned off when the user
    clicks on the menu item. Otherwise all items are turned on.
 
  o Currently other features cannot be controlled through a menu. If you want to
    change other values (e.g the timeout-time of the hide-feature or the cut or
    paste button) use either the fxopt program and program or write a small DLL
    using the FeelX API and use dll.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        FeelX     
  Ĵ
    2 focus       true           Toggle Sliding focus status             
  Ĵ
                  false          Do not change sliding focus   false     
                                 status                                  
  Ĵ
    3 cutpaste    true           Change Cut&Paste feature                
  Ĵ
                  false          Do not change Cut&Paste       false     
                                 feature                                 
  Ĵ
    4 hide        true           Toggle hide feature status              
  Ĵ
                  false          Do not change hide feature    false     
                                 status                                  
  
 
   font  73/3 

  Function: font
 
  Description: Changes the font of a VIO shell.
 
  Location: Shell
 
  Portability: Dependends on the entries in the font dialog of the VIO shell.
  Those entries (as far as I know) may vary on different systems (but mostly
  they don't).
 
  Examples:
 
  o font [ font="1", entry="small font" ] Changes the font size to 1
 
  o font [ 4 ] Changes the font to font size 4
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 font        [numeric value]No. of font in the font list  5         
                                 box of the font dialog.                 
  Ĵ
    2 entry       [text string]  Name of the menu entry        change    
                                                               font      
  
   
   hideactionbar  74/3 

  Function: hideactionbar
 
  Description: Hides the currently active actionbar
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o hideactionbar [ entry="fly away" ]
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        hide      
                                                               actionbar 
  
 
  See also: actionbar, moveactionbar  

   hotkey  75/3 

  Function: hotkey
 
  Description: Assigns a function to a hotkey. Specify any Hotkey from a-z and
  1-9, a special char or f1-f12. The associated action is executed when pressing
  Ctrl-Shift and the hotkey.
 
  Location: Hotkeys
 
  Portability:
 
  o a-z, 0-9, f1-f12 are high portable since they appear on all (most?)
    keyboards. Special functions (e.g #,+,,) are not portable. The might not
    be on other keyboards.
 
  o There might be a hardware limitation of the keyboard. Some keyboards do not
    support all Ctrl-Shift combinations. But I think there will not be any
    problems.
 
  Examples:
 
  o hotkey [ a=winlist ] Displays the windowlist when pressing Ctrl-Shift-A
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
      [any char or[function,     assign function to the hotkey           
      f1-f12]     reference                                              
                  (other object)]                                        
  
 
  See also: winhotkey  

   keyin  76/3 

  Function: keyin
 
  Description: Simulate a keyboard input
 
  Location: FeelX, Shell, Hotkeys (Shells only)
 
  Portability: high
 
  Examples:
 
  o keyin [ string="dir\n", entry="~dir" ]  Simulate dir and enter. In a menu
    the menu entry will be dir
 
  o keyin [ string="%d.%m.19%y" ]  Simulate typing the current date with the
    format DD.MM.YYYY
 
  o keyin [ string="type %c", entry="type %c", maxsize=25 ]  Type in "type"
    followed by the contents of the clipboard (if there is text). Make sure that
    the menu entry does not exceed 25 characters.
 
  Notes:
 
  o You can assign this function to a hotkey. It does not work for PM programs
    and full screen sessions but it works fine with windowed shells. You can
    even minimize a shell to the desktop, move the mouse pointer on the icon and
    press the hotkey. The shell receives the input even if it is minized.  
 
  o For DOS-Shells the clipboard is used to keyin a string. Therefore the
    clipboard data is destroyed after the keyin.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 string      [text string]  Simulate keyin of data        Nothing   
  Ĵ
    2 entry       [text string]  Name of the menu entry        the string
                                                               text      
  Ĵ
    3 maxsize     [numeric value]Max. no of characters in the  20        
                                 menu entry                              
  
 
  Special characters (Escape sequences):
 
  The text specified for the attribute string can contain the following escape
  sequences:
 
  \\   \\
  \n   Enter (new line)
  \t   Tab
  \e   Escape
  \c   Ctrl-Break
 
  %%   %
  %c   Clipboard contents
  %d   Day
  %m   Month
  %y   Year
  %h   Hour
  %n   Minute
  %s   Second
   
   kill  77/3 

  Function: kill
 
  Description: Kill a shell or a program
 
  Location: Shell, FeelX, Hotkeys (be careful!)
 
  Portability: high
 
  Examples:
 
  o kill [entry="kill", killchild=true]
 
  Notes:
 
  There might be a different behaviour on various OS/2 versions. On some systems
  (2.0) kill terminates the process even if a child is running. On others (2.1)
  the parent waits for the child to terminate before it can be killed.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        kill      
  Ĵ
    2 killchild   true           Kill all childs before killing          
                                 the specified window                    
  Ĵ
                  false          Kill only the specified       false     
                                 window.                                 
  
 
  See also: pmkill  

   menu  78/3 

  Function: menu
 
  Description: Displays a menu (a popup menu or a submenu)
 
  Location: Everywhere (in fact this is the entry point function)
 
  Portability: high
 
  Examples:
 
  o menu [entry="submenu", items=a;b;c;-;d ] This statement shows a menu (either
    a popup menu or a submenu with the name "submenu") It has four items a,b,c,d
    wich are references (objects) to other functions. There will be a separator
    between c and d.
 
  o menu [ entry="submenu", item=a, item=b;c;-, items=d ] This is exactly the
    samse.
 
  o menu [ entry="...", items=feelx;altcutpaste ] A menu with 2 menuitems. They
    are the predefined references/objects feelx and altcutpaste.
 
  o menu [ items=keyin ["dir"];keyin ["cd.."] ] A menu with two locale
    definitions of another references (anonymous object). They simulate typing
    in dir and cd ..
 
  o menu [ item=menu [ item=menu [ item=keyin [""] ] ] ] A senseless menu with
    three submenus.
 
  o menu [ entry="menuexample", items=a;*b;c;d ] If this is a popup menu the
    mouse pointer will point to the default item b. If this is a submenu b is
    the default item. If the user chooses menuexample in the top level menu b is
    executed without showing the submenu a,b,c,d.
 
  Notes:
 
  o This function is the most important. For most entry points (FeelX, Shell,
    ...) you do not want to have an immediate action. Most times you want to
    have a popup menu with a list of actions. Use this function to have a popup
    menu.
 
  o Please note: There is no qualitative difference between a menu and a
    submenu. Wenn a menu is "executed" a popup menu appears. When it is
    referenced by an other menu (item=...) it's a submenu. One and the same menu
    can appear as a menu and a submenu
 
  o You can associate menus with hotkeys too.
 
  o Popup menus look better and are easier to use when they have a default item.
    So it is recommended to declare a default item (with an asterix) for top
    level menus.
 
  o If the default of a menu is the default of a menu then choosing the default
    of the toplevel menu will not show the default of the last menu but popup
    the 3rd menu. This is (an hopfully acceptable) limitation due to the
    internal structure of FeelX.
 
  o Please note that the name of the menuitem does not appear in the menu
    description. This is part of the reference/object definition. Before the
    menu appears, all submenu items are "asked" for their menu entry.
 
  o Currently circular menu definitions (eg. FeelX:=menu [ item=FeelX ]) are not
    detected and result in a crash of the program. This is no limitation since
    such definitions are senseless.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu if it appearsunnamed   
                                 as a submenu                  menu      
  Ĵ
    1 item (or    [ref1;ref2;ref3refx are references/objects             
      items)                     that are defined somewhere in           
                                 the definition file.                    
                                 Undefinded references appear            
                                 as a separator. There may be a          
                                 new definition of a                     
                                 reference/object instead of             
                                 refx                                    
  
 
  See also: actionbar, chain  

   minimize  79/3 

  Function: minimize
 
  Description: Changes the mouse pointer to  Whenever you move with the mouse
  pointer on a window and press button 1 it will be minimized. You can end this
  mode by clicking on the desktop, the FeelX actionbar or by pressing mouse
  button 2.
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o minimize [ entry="minimize" ]
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        PM -      
                                                               Minimize  
  
 
  See also: pmkill  

   moveactionbar  80/3 

  Function: moveactionbar
 
  Description: Move the active actionbar to top or bottom (depending on where it
  is now).
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o actionbar[]
 
  See also: actionbar, hideactionbar

   msgbox  81/3 

  Function: msgbox
 
  Description: Display a message box with a specific text
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o msgbox ["Hello", "Hello, world"] This displays a message box with the text
    'hello, world'
 
  o msgbox [ entry="~Oops", text="This function is not supported",
    headline="UUUUhh"] A similar message box
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        message   
                                                               box       
  Ĵ
    2 text        [text string]  The text of the message box             
  Ĵ
    3 headline    [text string]  The headline of the message             
                                 box                                     
  
   
   mwinlist  82/3 

  Function: mwinlist
 
  Description: The function "mwinlist" (stands for menu-window-list) displays
  the windowlist in form of a menu. All important (see below) programs are
  listed in this menu. Each menu item (alias program) has its own submenu. These
  items are listed below:
 
   1. Switch to: This menu item switches to the chose session
 
   2. Close: Use this item to close a session. Before the process is killed a
      message box appears and you are asked if you really want to quit.
 
   3. Minimize: Minimize the session with this item
 
   4. Maximize: Maximize the session with this item
 
   5. Hide: Hide makes a program invisible
 
   6. Show: Show a previously hidden program
 
   7. Hotkey: Assign a hotkey to this session. This is similar to hotkey and
      winhotkey Press Ctrl-Shift + the chosen hotkey to switch to the specified
      session
 
  Location: Everywhere, but currently requires to be a submenu item!
 
  Portability: high
 
  Examples:
 
  o mwinlist [ entry="Task switcher" ] This is a simple window list very similar
    to the real window list
 
  o mwinlist [ entry="Special Task switcher", all=true,
    items="pulse.exe";"Special Tool" ] This statement shows a menu with all
    sessions including those that do not appear in the window list. The list
    does not contain programs with the title pulse.exe or Special Tool.
 
  Advanced examples:
 
  o Hotkeys := hotkey [ /* ... */ esc=mwinlist [ items="OS/2-Shell "] ]
  Now Ctrl-Shift-Esc displays a special window list as a menu. No program with
  the name OS/2 Shell will apear.
 
  Notes:
 
  FeelX itself and the WPS will never appear in this list
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        FeelX     
                                                               winlist   
  Ĵ
    2 all         true           Display all sessions                    
  Ĵ
                  false          Display only those sessions   false     
                                 that have an entry in the               
                                 window list.                            
  Ĵ
    3 items       name1;name2    list of names of programs that          
                                 should not appear in the                
                                 windowlist                              
  
 
  See also: winlist  

   object  83/3 

  Function:object
 
  Description: Opens a WPS object
 
  Location: Everywhere
 
  Portability:
 
  o The object attribute is for standard objects very portable.
 
  o The handle attribute may differ between maschines. It is persistent during
    IPL.
 
  Examples:
 
  o object [ entry="Configure", object="WP_CONFIG" ] This opens the System
    configuration folder (works on all systems).
 
  o object [ entry="MyObject", object="20943" ] Opens an object with the
    internal handle 20943. This is not the name. This is not portable.
 
  Notes:
 
  o There are tools that can assign all objects a specific name. You can use
    this name in the attribute object. This may be useful if you want to have
    the same installation on different machines. The object handle differs even
    if the installation looks the same on 2 machines.
 
  o After reinstall of OS/2 or a complete back-up the object handle might be
    invalid.
 
  o You can use the FeelX object to get handle. Drag a specific object over the
    FeelX object. Then the decimal handle is in the clipboard and you can easily
    integrate it into your program e.g. by using the quick marking feature of
    FeelX.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        Object    
  Ĵ
    2 object      [text string]  The object's internal name              
                                 (This is not                            
  Ĵ
    3 handle      [decimal       The object handle. This is an           
                  number]        internal handle of the object.          
                                 It's almost impossible to get           
                                 this handle without any                 
                                 WPS-Tool. If you specify this           
                                 attribute the object attribute          
                                 will be ignored.                        
  Ĵ
    4 open        DEFAULT        Open the default view of the  DEFAULT   
                                 object (same as double-click            
                                 on the object).                         
  Ĵ
                  SETTINGS       Open the settings view of the           
                                 object                                  
  
 
  Predefined object names:
  Ŀ
  <WP_DESKTOP>   the Desktop                             
  Ĵ
  <WP_OS2SYS>    the System Folder                       
  Ĵ
  <WP_TEMPS>     the Template Folder                     
  Ĵ
  <WP_CONFIG>    the system setup folder                 
  Ĵ
  <WP_START>     the startup folder                      
  Ĵ
  <WP_INFO>      the information folder                  
  Ĵ
  <WP_DRIVES>    the drives folder                       
  
 
  Other common available names:
  Ŀ
  <WP_CLIPV>     the clipboard                           
  Ĵ
  <WP_CLOCK>     the system clock                        
  Ĵ
  <WP_CLRPAL>    the color palette object                
  Ĵ
  <WP_CNTRY>     country information                     
  Ĵ
  <WP_DALARM>    Productivity - alarm                    
  Ĵ
  <WP_DBASE>     Productivity - database                 
  Ĵ
  <WP_DCALC>     Calculator                              
  Ĵ
  <WP_GAMES>     Games Folder                            
  Ĵ
  <WP_GLOSS>     Glossary                                
  Ĵ
  <WP_ICON>      Iconeditor                              
  Ĵ
  <WP_KEYB>      Keyboard                                
  Ĵ
  <WP_MOUSE>     Mouse (FeelX)                           
  Ĵ
  <WP_NETWORK>   Network object                          
  Ĵ
  <WP_PULSE>     Puls                                    
  Ĵ
  <WP_RVRSI>     Reversi                                 
  Ĵ
  <WP_SCHPAL>    Screen Palette                          
  Ĵ
  <WP_SPOOL>     Spooler                                 
  Ĵ
  <WP_SPREAD>    Productivity - Spreadsheet              
  Ĵ
  <WP_SYSED>     System editor                           
  Ĵ
  <WP_STICKY>    Sticky pad                              
  
 
   pmkill  84/3 

  Function: pmkill
 
  Description: When this function is selected the mouse pointer changes to a
  skull. When you move the mouse pointer (the skull) on a program the skull
  looks like this: You can kill (abnormally terminate) the program by pressing
  mouse button 1. End this killing mode by moving the mouse pointer on the
  desktop or the FeelX actionbar and press button 1. The skull looks like this: 
  when it is not dangerous to press button1. You may also press button 2 to
  leave the killing mode.
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o pmkill []
 
  Notes:
 
  Use this function with care! This function will kill a process without asking
  for permission1
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        PM - Kill 
  
 
  See also: kill, minimize  

   program  85/3 

  Function: program
 
  Description: start a program
 
  Location: Everywhere
 
  Portability: The program must exist on other PC to be portable.
 
  Examples:
 
  o program [entry="help", name="view.exe", parameters="pmref &"] The menu item
    has the name help. When you click on this item the program view is started.
    The first parameter is pmref. The second is the contents of the clipboard.
 
  o program [entry="search", parameters="/K dir c:\[Please enter a file name]
    /s", type=os2win, window=noclose ]. When this function is executed, FeelX
    asks for a parameter (the text is Please enter ..). Then an OS/2 shell
    (type=os2win) is started. Assume you entered config.sys as a parameter. The
    shell gets the parameter /K dir c:\config.sys /s. Now the whole Harddrive c:
    is scanned. When the computation is ready the window is not closed
    (window=noclose).
 
  o program [ entry="game.exe", parameters="shoot 'em down", dos_high=on,
    hw_timer=on ]. This function starts a game (a dos program) with a specific
    parameter string. Load Dos high to get as much memory as possible. The
    Hardware timer is on.
 
  Notes:
 
  o When using DOS programs it might happen that the path is incorrect. Create
    an autoexec.bat file and set attribute dos_autoexec=...
 
  o The PM-Viewer is not intended to be used for large output. Use it if you
    have to display just a few lines.
 
  o If the program is not in the path you can use the path-attribute to set its
    current directory to it's own path. But - YOU MUST STILL SPECIFY THE FULL
    PATH IN THE NAME ATTRIBUTE!!!
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        [name]    
  Ĵ
    2 name        [text string]  Name of the program or nothing          
                                 for a shell                             
  Ĵ
    3 parameters  [text string]  An optional parameter                   
  Ĵ
    4 path        [text string]  An optional path                        
  Ĵ
    5 title       [text string]  An optional title if the      [name]    
                                 program is windowed                     
  Ĵ
    6 type        os2win, os2fs, program type. Optinal for OS/2[name]    
                  doswin,dosfs,  and DOS programs. Obligatory            
                  windoze31,     for Windows programs and                
                  windoze31seamleshells.                                 
  Ĵ
    7 cx          [numeric value]witdth of window                        
  Ĵ
    8 cy          [numeric value]height of window                        
  Ĵ
    9 x           [numeric value]x position                              
  Ĵ
   10 y           [numeric value]y position                              
  Ĵ
   12 priority    [??]           not used                      [name]    
  Ĵ
   13 window      default        start program as default type default   
  Ĵ
                  minimized      start program minimized                 
  Ĵ
                  maximized      start program maximized                 
  Ĵ
                  noclose        don't close the command shell           
                                 after finishing                         
  Ĵ
                  invisible      start program invisible                 
  Ĵ
                  clipboard      put the program output into             
                                 the clipboard                           
  Ĵ
                  pm             Display a small (and very,              
                                 very easy) PM-Viewer with the           
                                 output of the program                   
  Ĵ
   14 child       true           start as a child              true      
                                 session/process (Advantage:             
                                 Pops window to the front                
                                 Disadvantage: All child                 
                                 programs are killed when FeelX          
                                 terminates)                             
  Ĵ
                  false          Do not start the program as a           
                                 child session / process                 
  Ĵ
   15 sync        true           Start the program synchron.             
                                 (Wait for the program. By               
                                 careful! This might hang the            
                                 PM)                                     
  Ĵ
      false       Start the                                    false     
                  program                                                
                  asynchron.                                             
  Ĵ
   16 maxsize     [numeric value]No of characters that can be  20        
                                 displayed in a menu                     
  Ĵ
   17 feelxpath   true           Default path is FeelX-path              
  Ĵ
                  false                                        false     
  
   
   qswitch  86/3 

  Function: qswitch
 
  Description: This displays the quick switch list as a submenu
 
  Location: Everywhere except Hotkeys
 
  Portability: high
 
  Examples:
 
  o qswitch [hide=true] This statement displays the quick switch list only if
    there are items available
 
  Notes:
 
  o refer to addmenu
 
  o For the actionbar the qswitch is not automatically enabled. If there are
    items available click on the menu entry. This will enable the entry.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry                  
  Ĵ
    2 hide        true           Do not display the menu entry           
                                 for the quick switch list               
  Ĵ
                  false          Diplay the qswitch item       false     
                                 disabled if no items are                
                                 available                               
  
 
  See also: addmenu

   quit  87/3 

  Function: quit
 
  Description: Terminates FeelX
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o quit[entry="~quit"] Terminates FeelX
 
  Notes:
 
  When you use FeelX as a program launcher all child processes of FeelX also
  terminate. (cf. program)
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        exit FeelX
  
   
   recordmacro  88/3 

  Function: recordmacro
 
  Description: A very, very simple (and still incorrect) macro recorder. Maybe
  it was not a good idea to document this feature?! Use (if you use it) this
  function as an entry point for a HOTKEY. When you press the hotkey your
  speaker beeps and you can start to type in something or move the mouse. All
  events are recorded. When you are ready press F5. This will stop recording.
  The hotkey dialog pops up. You can now assign a hotkey to the previously
  recorded sequence (similar to hotkey and mwinlist). You can playback the
  sequence with this hotkey.
 
  Location: Hotkeys
 
  Portability: high
 
  Examples:
 
  o recordmacro[]
 
  Notes:
 
  o There are still some problems left. For example starting a program during
    record crashes in the FeelX-DLL. (From my experience the worst case is that
    application and FeelX both crash or the PM hangs - no traps). BE WARNED:
    Never use this feature with unsaved data!!!!!!
 
  o Never put this feature into a menu.
 
  o Never forget to end your recording ...
 
  o Before pressing the hotkey a second time, you must release all keys.
 
  o The mouse is recorded too. Therefore it might happen that the mouse moves
    during playback
 
  o All FeelX features are turned off during recording
 
  o Message and dialog boxes do not work because of incorrect timing on playback
   
  o The recording is application dependent. Playing back mouse movement in other
    active windows may cause incorrect results.
 
  o This feature may be useful for a small amout of key strokes or mouse events.
    For best results use it in one application only, use the keyboard as often
    as possible and do not use dialog boxes.
 
  o Don't blame me if your application crashed. I've warned you. If you still
    want to try this feature, record some painting in the icon editor. It's
    magic ...
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        record    
                                                               macro     
  
 
   redraw  89/3 

  Function: redraw
 
  Description: Forces a window to redraw itself. Sometimes it might happen, that
  a window displays only "garbage". Use this function to redraw the window.
 
  Location: FeelX, Hotkeys
 
  Portability: high
 
  Examples:
 
  o redraw[]
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        Redraw    
  
 
   shutdown  90/3 

  Function: shutdown
 
  Description: This shuts down the system
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o shutdown [ items="load.exe" ]
 
  Notes:
 
  o shutdown does perform the following steps:
    
      1. Kill all programs that are listed in the item attribute
    
      2. Kill all shells that do not run a child process
    
      3. Call regular Shutdown.
 
  o When you must abort shutdown during step 3 (regular shutdown) it is
    recommended to save all work and try again to shutdown (instead of going on
    to do some work for lots of hours...).
 
  o If OS/2 does not get ready with Shutdown press Ctrl-Alt-Del.
 
  o Dos programs cannot be killed (now).
 
  o It is highly recommended not to call this function directly. Use shutdowndlg
    instead. Note that this is not necessary. If you want to tease someone add
    the line MenuLL:=shutdown in his feelx.go file. The system now shuts down as
    soon as the mouse ptr moves to the lower left corner.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        Shutdown  
  Ĵ
    2 item / items[string1;stringList of filenames (without              
                                 pathname but with .exe)                 
  Ĵ
    2 killshells  true/fals      Kill empty shells             true      
  
 
  See also: shutdowndlg    

   shutdowndlg  91/3 

  Function: shutdowndlg
 
  Description: Performs a shutdown dialog (only the dialog! Not the shutdown
  itself.)
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o shutdowndlg [ onexit=shutdown ] This examples shows a Dialog box and asks
    for shutdown. If the user chooses yes, FeelX calls the object shutdown which
    is predefined and does the shutdown.
 
  o shutdowndlg [ onexit=myexit ] Very similar but calls myexit instead. myexit
    should call shutdown somewhere.
 
  o shutdowndlg [ onexit=chain [ items=SaveInis;shutdown ] ] This sample is more
    complicated. If the user wants to shutdown the reference SaveInis is called.
    This might be a program [ /* ... */ ] reference. Then the shutdown reference
    is called.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        Shutdown  
  Ĵ
    2 onshutdown  [reference]    Reference to an object that             
                                 should be called when the user          
                                 does not cancel the shutdown.           
  
 
  See also: shutdown  

   switchto  92/3 

  Function: switchto
 
  Description: switches to a specific application
 
  Location: Everywhere. Hotkeys are most useful.
 
  Portability: high
 
  Examples:
 
  o switchto [ name="viewdoc.exe" ]
 
  Notes:
 
  o Use must specify the program name. This may differ from the name listed in
    the window list.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry                  
  Ĵ
    2 name        [text string]  program                                 
  
     
   top  93/3 

  Function: top
 
  Description: This marks a window to stay always on top
 
  Location: FeelX
 
  Portability: high
 
  Notes:
 
  o Use this function with care!!
 
  o Currently there is a limit of 10 windows to be at the front
 
  o You can turn this feature on or off
 
  o A window that is closed is deleted from the list
 
  o A newly created window may overlay the marked windows. Just click
  on the new window to correct the order.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        always top
  
   
   winlist  94/3 

  Function: winlist
 
  Description: Display the OS/2-PM window list
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o winlist [entry="windowlist"]
 
  Advanced examples:
 
  o MenuLR:=winlist The window list pops up if you move the mouse ptr into the
    lower right corner.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        window    
                                                               list      
  
 
  See also: mwinlist  

   winhotkey  95/3 

  Function: winhotkey
 
  Description: Assigns a hotkey to running window. When this function is
  executed a dialogbox pops up where you are asked for a hotkey. Press any key
  (or type f1-f12) whithout any shift key. As soon as you press
  Ctrl-Shift+[hotkey] the window will be brought to the front.
 
  Location: FeelX
 
  Portability: high
 
  Examples:
 
  o winhotkey [entry="assign hotkey"]
 
  Notes:
 
   1. If you specify an existing hotkey, this one is simply overridden.
 
   2. The hotkey will not be saved for the next boot time.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        Hotkey    
  
 
  See also: hotkey

   zorder  96/3 

  Function:
 
  Description: This function changes the Z-Order of a window or its process
 
  Location: FeelX, Shell, Hotkeys
 
  Portability: high
 
  Examples:
 
  o zorder [ entry="background", pos="pbottom"] This statement puts the program
    into the background.
 
  Notes:
 
  o If you have a three button mouse it is easier to use the 3rd mouse button to
    change the Z-Order of the program.
 
  o Most functions are rarely used. Maybe you don't need them. They can be
    useful to arrange windows on the desktop.
 
  o Please don't get angry if you don't understand the explanations below. It's
    difficult to explain ... especially for one who is (obviously) not a native
    english speaker.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        ???       
                                                               -ZOrder   
  Ĵ
    2 pos         wbottom        Move the window into the                
                                 background                              
  Ĵ
                  wprev          put the window one more to the          
                                 front                                   
  Ĵ
                  wnext          put the window one back                 
  Ĵ
                  ptop           Move the program to the front           
  Ĵ
                  pbottom        Move the program into the               
                                 background                              
  Ĵ
                  pprev          Move the program one window             
                                 more to the front                       
  Ĵ
                  pnext          Move the program more to the            
                                 background                              
  
   
   Reference - other supplied functions  97/2+

  This is an example of how to integrate other programs into FeelX. A future
  version may have a lot of objects in this section. If you have any idea for
  nice menus, programs or tricks, please let me know.  

   ReXX  98/3 

  Function: ReXX
 
  Description: Interprets the Clipboard as a ReXX function.
 
  Location: Everywhere
 
  Portability: high
 
  Examples:
 
  o ReXX [ entry="what is %c?", window=pm ] Calculate Clipboard. Output to
    PM-Viewer
 
  o ReXX [ entry="what is %c?", window=pm ] Calculate Clipboard and replace with
    new value.
 
  Attributes:
  Ŀ
      Attribute   Value          Explanation                   Default   
  Ĵ
    1 entry       [text string]  Name of the menu entry        ReXX      
  Ĵ
      rexxfile    [filename]     Exec this file                interp.cmd
  Ĵ
      rexxparametestring         This is the argument for ReXX &         
                                                               (clipboard
  
     
   Advanced topics  99/2+

  This section explains how to control FeelX from your own application and how
  to write FeelX programs for other users.

   Writing FeelX "programs" for other users  100/3 

  I hope FeelX is not very difficult to program. But I assume there are enough
  users that don't want to program for configuration at all. They might profit
  from the work of other users.
 
  On the other hand it might be possible that you "programmed" a nice menu or
  actionbar and want to make it available to other users. In opposite to the
  workplace shell where it is difficult to interchange the configuration of the
  WPS and its menus you can easiliy interchange FeelX-Programs because of the
  textual nature of the configuration.
 
  You can replace a specific configuration by renaming it to feelx.go or by
  starting feelx file.go. You can enhance a feelx.go by appending your file to
  the feelx.go file. Since there might be name-conflicts it is recommended
  either to use anonymous objects or to use "unusual" names like
  MyActionbar_Prompts. You can query the current path of FeelX with the API
  FxQueryFeelXPath.
 
  If you like programming FeelX, I'd be glad if you help other users that have
  more problems. You're very welcome write "programs" for FeelX.
 
  If you have a nice tip for FeelX objects let other know or write me a note.
  Maybe I'll integrate it in the documentation.
 
  Note:
 
   1. Programming actionbars is a little bit tricky because you're currently not
      allowed to use references to other menus. Instead use instances of these
      menus (e.g. MyMenu[] instead of MyMenu) or (much better) use anonymous
      objects or (best) simply don't share one submenu for different menus or
      actionbars. E.g use cut and paste to produce Actionbar1_Submenu and
      Actionbar2_Submenu instead of using one common menu. (This can be easiliy
      tested).
 
   2. If you make a file available to other users have a look at the portability
      section of the function-reference...
 
   Interfacing FeelX  101/3 

  FeelX supports some interfaces you can use to integrate your favourite
  application. You're very welcome to do so.
 
  There are three ways to interface FeelX and to enhance FeelX by a new
  (object-)type:
 
   1. Using the program directive
 
   2. Using the dll directive
 
   3. Using the API
 
  Integrating a program
 
  You can integrate a program by defining a new object. Have a look at the
  ReXXobject supplied with the toolkit.inc file:  
 
  ReXX: =program[
                 name="callrx.exe"
                 entry="ReXX"
                 rexxfile="calc.cmd"
                 parameters="<rexxfile> <rexxparameter>"
                 ]
  It supplies defaults for the main attributes (name, entry) and sets a
  parameter string. The parameter string makes usages of other attributes
  (rexxfile, rexxparameters) with are syntactical replaces at load-time. The
  user can now use the object ReXX and its attributes entry, rexxfile,
  rexxparameters without knowing that ReXX is a program object(!) The program
  callrx.exe is integrated seamlessly and transparent into the language. For
  example the user might program:  
 
  item : =ReXX[entry = " ReXX :% c "
               rexxfile="g:\rexx\interp.cmd"
               rexxparameter="&"
               window=pm
        ]
  to call the ReXX object (resp. the associated program with the file interp.cmd
  and the clipboard(&) as a parameter). The output will be directed into a small
  PM viewer. The menu entry is ReXX followed by the contents of the clipboard.
 
  Let's have another example. The FeelX package contains a program called wo.exe
  to search (in a fault-tolerant way) the contents of the hard disk for a
  specific file.
 
  wo is a typical example of an easy non-PM program. It does not need any input
  (except the command line arguments) and does not need a specific environment
  (e.g. the path). Assume you have written the program wo and want to have it
  integrated seamlessly into FeelX ta make it available to all FeelX users :-)
 
  First define an object called Wo (look at the toolkit.inc file):  
 
  Wo : =program[
         title="wo"
         name="wo.exe"
         parameters="-p c-:[Which file?]"
         window=pm
         entry="Wo?"
       ]
  Now the user can easily enhance it menus by just entering item=Wo or item=wo[]
  or item=wo [ entry="Where is" ].
 
  If this is not enough, use the FxQueryFeelXPath API-function to locate the
  feelx.go file. Add the definition above and the lines:
  Tools:= Tools [
          item= program [
                 entry="Wo"                   /* The menu entry           */
                 name="wo.exe"                /* wo should be in the path */
                 parameters="-p -n c-:[Which file]"
                                              /* Prompt for file          */
                 window=pm                    /* redirect to PM-window    */
                 title="wo"                   /* Title of the PM-window   */
                ] /* end of program */
          ] /* end of Tools */
  If the user has defined a menu called Tools this will be enhanced by the Wo
  entry.
 
  Note:
 
   1. A wrong entry may corrupt the feelx.go file. Never append anything to the
      feelx.go file without asking the user and without making a bakup of
      feelx.go and toolkit.inc
 
   2. If you are using the FeelX-API consider that if you use loadtime linkage
      of the API the program will not run without feelxdll.dll. You must use
      DosLoadModule and DosQueryProcAddr if your program should run with and
      without FeelX.
 
  Integrating a DLL
 
  FeelX supports an easy to use interface to any DLL. A DLL template is supplied
  with the testdll.c file. Have a look at this file. It's easy to understand.
 
  Example: Assume that you want to write a tool that turns on and of the
  animation of WPS folders on opening. You want to have a tool that is added to
  a menu where the mnu entry is checked when animation is on and unchecked when
  animation is off. This is not an easy task when using the Workplace Shell and
  SOM but it is almost trivial when using FeelX.
 
  You need two functions in your DLL. One function is called by FeelX when the
  menu is built up. This function can be used to check the menu entry (or
  disable it). The other function is called when the menu item is selected. The
  functions can have every name you want.
 
  Here is the almost complete(!) example (rest trivial):
 
     void _System _Export showToggle(HWND menu, int id)
       {
       setMenuAttrib(menu, (USHORT)id, MIA_CHECKED, queryAnimation());
       }
 
     void _System _Export animation(int x, int y, HWND hwnd, HWND frame,
            int argc, char *args[], char *vals[])
       {
       DosBeep(100,50);
       setAnimation(!queryAnimation());
       }
 
  The only thing you need are two functions to set and quuery animation.
 
  Now you can integrate your DLL into FeelX, i.e. define an object for FeelX:  
 
  Animation: =dll[
                    entry="Animation"
                    fun="animation"
                    dll="anidll"
                    menufun="showToggle"
                   ]
  Now the DLL is "registered" on start-up and the user can integrate it into the
  menu by using the Animation object.
 
  Serious examples for using this feature are hiding and displaying a tool
  program or its title bar (clock, virtual desktops, screen savers, ...)  
 
  Using FeelX objects
 
  You can use every FeelX object as an entry point from an external program use
  the FxExecObject API function to do so. Assume you want to write a WPS program
  where the FeelX-Tools menu pops up when the user double-clicks on the icon.
  The wpOpen method may look like this:  
 
  SOM_Scope HWND   SOMLINK wpToolsMenu_wpOpen(WPToolsMenu *somSelf,
                  HWND hwndCnr,
                  ULONG ulView,
                  ULONG param)
  {
  if (ulView==MY_OPEN)
     {
     FxExecObject("Tools");
     return 0;
     }
  else
     return (parent_wpOpen(somSelf,hwndCnr,ulView,param));
  }
  (BTW. I know that this is bad WPS-style ... - just an example).
 
  As you can see there are a lot of possiblilities use FeelX for other programs
  and to enhance FeelX with other programs. I hope you have fun using these
  features.

   The FeelX API  102/3 

   You can use the following functions:  
 
  BOOL            FxIsFeelXRunning();
  char            *FxQueryFeelXPath();
  HWND            FxQueryWndProc();
  HWND            FxQueryPID();
  BOOL            FxSaveSettings();
  BOOL            FxLoadSettings();
  BOOL            FxDefaultSettings(FEELXPARAMETERS *);
  BOOL            FxJournalRecord();
  BOOL            FxReleaseJournalRecord();
  BOOL            FxPlayback(struct PlaybackMessages *);
  BOOL            FxAddFront(HWND h);
  BOOL            FxQueryFront(HWND h);
  BOOL            FxDeleteFront(HWND h);
  BOOL            FxAddAltCutPaste(HWND h);
  BOOL            FxQueryAltCutPaste(HWND h);
  BOOL            FxDeleteAltCutPaste(HWND h);
  BOOL            FxExecObject(char *);
  BOOL            FxAssignHotkey(HWND h, char *);
 
  BOOL            FxQueryFeelXStatus();
  BOOL            FxQueryActivateAll();
  BOOL            FxQueryMark();
  int             FxQueryWndFront();
  ULONG           FxQueryHideTimeOut();
  BOOL            FxQueryFolders();
  BOOL            FxQueryStaticMenus();
  BOOL            FxQueryWinlist();
  BOOL            FxQueryMini();
  int             FxQueryMarkButton();
  ULONG           FxQueryMarkFlags();
  ULONG           FxQueryMarkAltFlags();
  int             FxQueryPasteButton();
  BOOL            FxQueryPasteDBClick();
  ULONG           FxQueryPasteFlags();
  ULONG           FxQueryPasteCtrlLFFlags();
  ULONG           FxQueryPasteAltFlags();
 
  BOOL            FxSetFeelXStatus(BOOL);
  BOOL            FxSetActivateAll(BOOL);
  BOOL            FxSetMark(BOOL);
  BOOL            FxSetWndFront(int);
  BOOL            FxSetHideTimeOut(ULONG);
  BOOL            FxSetFolders(BOOL);
  BOOL            FxSetStaticMenus(BOOL);
  BOOL            FxSetWinlist(BOOL);
  BOOL            FxSetMini(BOOL);
  BOOL            FxSetMarkButton(int);
  BOOL            FxSetMarkFlags(ULONG);
  BOOL            FxSetMarkAltFlags(ULONG);
  BOOL            FxSetPasteButton(int);
  BOOL            FxSetPasteDBClick(BOOL);
  BOOL            FxSetPasteFlags(ULONG);
  BOOL            FxSetPasteCtrlLFFlags(ULONG);
  BOOL            FxSetPasteAltFlags(ULONG);
 
  I think the names are almost self-explaining. If you have questions send me a
  note.

   Ideas  103/3 

  This section shows some ideas how to program FeelX. Have a look at the
  examples.go file  
 
  /* Assume that you do not paste with the middle (3rd mouse button)           
  */
  /* Use the following statement to paste with the middle mouse button with CR 
  */
 
  Shell3:= keyin [ string="%c\n" ]
 
  /* The following statement implements a popup-menu-windowlist on             
  */
  /* Ctrl-Shift-Esc. (Use behind an other Hotkeys definition)                  
  */
 
  Hotkeys:= Hotkeys [ esc=mwinlist [] ]
 
  /* You can simply get help about a specific topic with the following fragment
  */
  /* Mark WinCreateWindow in your text and execute the following instruction   
  */
 
  Help:= program [
            entry="Help!!"                        /* the menu entry            
  */
            name="view.exe"                       /* the help viewer of OS/2   
  */
            parameters="PMFUN.INF+PMWIN.INF &"    /* the references and        
  */
         ] /* end of program */                   /* & (=Clipboard)            
  */
   
   Additional programs  104/1+

  The FeelX package does not only contain the FeelX program but also some tools
  that make it easier to use OS/2. This section explains how to use these tools.
 
   FxOpt  105/2 

  FxOpt - change FeelX options  
 
  This program allows you to change the settings of FeelX without a WPS-object.
  Use this program if you don't want to install the WPS object (why??), if you
  use FeelX as a WPS replacement or if you want to automate setting the values
  in a batch file.
 
  You can also use this program to call some of the FeelX API functions.
 
  If you change any parameters: First change them (e.g. fxopt mark:off) and if
  you want to have these parameters whenever FeelX starts, type fxopt save to
  save them in your os2.ini file.
 
  There is no problem to use FxOpt in conjunction with the WPS object.
 
  This program can also be used from a DOS session. But currently you cannot run
  it from 2 DOS sessions simultanously.
 
  run fxopt without parameters to display the current settings. This looks
  similar to the following picture:
  Ŀ
 
   FXOPT v1.1 - Display and change settings of FeelX v1.1                     
  
  Ĵ
 
   General settings:                    More general settings:               
  
    Sliding focus:   on                  activate all controls:    on        
  
    quick marking:   on                  window into foreground:   w/Shift   
  
    hide pointer:    on                  static windowlist:        yes       
  
    hide timeout:    10                  static menus:             yes       
  
    Hotkey flags:    S, C                show Minnie on startup:   yes       
  
    FS - Hotkeys:    no                  strip CR/LF on marking:   yes       
  
                                         folders -> foreground:    yes       
  
  Ĵ
 
   Marking Settings:                    Pasting settings:                    
  
    button:          1                   button:                   1         
  
    flags:           none                flags:                    none      
  
    alternate flags: S                   alternate flags:          S         
  
    [S=shift, C=Ctrl, A=Alt]             double-click:             yes       
  
  Ĵ
 
   FeelX process information:         FeelX & tools are                      
  
    process ID:      13                 (c) 1993, 1994 by Felix von Normann  
  
    window handle:   10e02320                         94036 Passau, Germany  
  
  
 
  All parameters can be changed with Fxopt or the WPS object. To get help start
  fxopt -? The following parameters are currently available: (if values are
  available they are separated by a colon. E.g. fxopt mark:on)
  Ŀ
  Parameter      Description                   Values    Default   
  Ĵ
  on             turn FeelX on                                     
  Ĵ
  off            turn FeelX off                                    
  Ĵ
  load           load FeelX settings from                          
                 os2.ini                                           
  Ĵ
  save           save FeelX settings to os2.ini                    
  Ĵ
  delete         delete FeelX from os2.ini                         
                 (this may be useful if your                       
                 settings are corrupt)                             
  Ĵ
  quit           quit FeelX                                        
  Ĵ
  feelx          turn status of sliding focus  on        on        
                 on (you can also specify                          
                 focus).                                           
  Ĵ
                 turn status of sliding focus  off                 
                 off                                               
  Ĵ
                 toggle status of sliding focustoggle              
  Ĵ
  hide           Hide the mouse pointer        on                  
  Ĵ
                 Do not hide the mouse pointer off       off       
  Ĵ
                 Hide after x seconds          x         10        
  Ĵ
  winlist        persistent windowlist         on        on        
  Ĵ
                 no persistent windowlist      off                 
  Ĵ
  minnie         show Minnie on program start  on        on        
  Ĵ
                 do not show Minnie            off                 
  Ĵ
  mark           turn marking on               on        on        
  Ĵ
                 turn quick marking off        off                 
  Ĵ
  all            activate all controls (even   on        on        
                 pushbuttons).                                     
  Ĵ
                 activate only windows                             
  Ĵ
  menus          menus are static              on        on        
  Ĵ
                 menus are more like X and likeoff                 
                 FeelX v1.0                                        
  Ĵ
  stripcr        Strip CR/LF on marking        on        on        
  Ĵ
                 Add CR/LF after merking       off                 
  Ĵ
  folder         move folder into foreground   on        on        
                 when the user clicks on its                       
                 contents                                          
  Ĵ
                 do not move folders into the  off                 
                 foreground                                        
  Ĵ
  mark           mark with button 1 (left      1         1         
                 button)                                           
  Ĵ
                 mark with button 2(right one) 2                   
  Ĵ
                 mark with button 3(middle one)3                   
  Ĵ
  paste          paste button                  (like     1         
                                               mark)               
  Ĵ
  mflags         define flags for marking (e.g.none      none      
                 mflags:sc or mflags:none)                         
  Ĵ
                 s=shift                       s                   
  Ĵ
                 a=alt                         a                   
  Ĵ
                 c=ctrl                        c                   
  Ĵ
  pflags         define flags for pasting      see above none      
  Ĵ
  amflags        define alternate flags for    see above s         
                 marking                                           
  Ĵ
  apflags        define alternate flags for    see above s         
                 pasting                                           
  Ĵ
  pdbflags       paste with double-click       on        on        
  Ĵ
                 paste with single-click       off                 
  Ĵ
  exec           "start" object x (e.g.pmkill  x                   
                 or MenuLL)                                        
  Ĵ
  altcustpaste   define current shell as       on                  
                 alternate marking shell                           
  Ĵ
                 default marking               off                 
  Ĵ
  top            force current shell to stay onon                  
                 top                                               
  Ĵ
                 normal                        off                 
  Ĵ
                 assign this shell the hotkey xx (any              
                                               alphanum            
                                               char that           
                                               can be              
                                               reached on          
                                               the                 
                                               keyboard            
                                               without             
                                               shift               
                                               (e.g.               
                                               k,k,q))             
  Ĵ
  hflags         hotkey shift combination      sca (see  sc        
                                               above)              
  Ĵ
  fshotkey       Enable Fullscreen hotkeys     on                  
                 (don't use this if FeelX is a                     
                 WPS replacement)                                  
  Ĵ
                 Disable Fullscreen hotkeys    off       off       
  Ĵ
  delhotkey      delete a hotkey               [key]               
  Ĵ
                 delete all hotkey             all                 
  
 
   FG  106/2 

  FG - manipulate VIO shells  
 
  This program can be used to push a shell into the foreground or the background
  from a batch file.
 
  This program requires popuppm.exe to be running. If you use fg very often you
  should place popuppm.exe in your start-up folder. This is done neither by the
  installation proc nor by FeelX. You must do it "by hand".
 
  fg is now able to switch to a full-screen session but you must run fg -fg in a
  full-screen session. You cannot switch automatically to a full-screen session
  if the PM hangs.
 
  This program does also work in a DOS session. There can only be one Dos-FG at
  a time. When starting from a Dos-session the window looses its focus. You must
  explicitly get it back by fg -fg -focus.
 
  Type fg -? to get the following help:
  FG - change active shell parameters                   (c) '94 Felix von
  Normann
 
  Usage: FG [options] [program [program options]]
                     (please make sure that popupPM is running!)
  Options: (default: -focus -fg)
   -min          minimize (with program: restore old position)
   -max          maximize
   -restore      restore if minimized (with program: restore old position)
   -pos:[x],[y]  change position (values can be negative!)
                 x: x-position (decimal) or "left" or "right"
                 y: y-position (decimal) or "top" or "bottom"
   -xpos:[x],[y] do not adjust on byte boundary (not for VIO shells)
   -size:x,y     change size
   -focus        set focus
   -nofocus      do not set focus
   -fg           move to the front (with program: restore old position)
   -bg           move to the background (with program: restore old position)
   -top          window is always top window (undo with -notop)
   -pause        wait for any key (receive focus - wait for key - loose focus)
   -flash        let the titlebar flash 5 times (w/o sound!)
   -hwnd:hex     change parameters for window with handle "hex"
   -hwnd:wps     change parameters for the Workplaces Shell (use with caution!!)
   
   popuppm  107/2 

  popuppm - used by FG  
 
  This program is required by fg.exe. It must be started before fg is used.
  Place it in your start-up folder if you use fg sometimes.

   wpopen  108/2 

  wpOpen - open WPS objects  
 
  A small program that opens the default view for a specific object. An object
  name can be e.g. <WP_MOUSE> for the mouse object. You can omit < and >, you
  can write the name in lower-cace and omit the WP_ (e.g. wpopen mouse)
 
  If you do not specify any parameters wpopen opens the current directory as a
  folder. You can open othe directories by specifiing the fully qualified name
  (e.g. wpopen c:\os2\dll).
 
  For help start wpopen -?

   wo  109/2 

  Wo - fault-tolerant file search  
 
  wo (german: where) was written because I needed a tool to scan all partitions
  of my hard-drive (That is C: to G:) for a specific file. In addition I
  frequently forget the names of my files. I know it is similar to clipbrd.exe
  but I don't know if it is clpbrd.exe or clipboard.exe (on HPFS) or
  clipbrd.exe. (OOh, I'm getting older...) I don't need a PM-wo, I don't need
  the ability to search the files for a string and I don't need a high
  performance search program.
 
  wo is a simple, small, fault-tolerant program that exactly does this job.
 
  To scan drives D:-F: for config.sys type wo d-f:config.sys
 
  To scan all drives for config.sys type wo c-:config.sys
 
  If wo does not find any exact matches it lists the 5 best matches. The first
  one is the best match, the last one is the worst.
 
  wo does not do a phonetical search, it does not employee any theoretical
  proved algorithm like agrep. It does a simple text replacement, is worthy only
  for short words (filenames), but it is small and fast enough on my system.
  Maybe you find it useful too.
 
  type wo for help

   ischild  110/2 

  isChild - is this a child shell?  
 
  A very simple program. It's return code is 0 if the current shell command
  processor is not a child on another one's.

   line  111/2 

  line - change no of lines in a VIO shell  
 
  Call line with a number of lines. This changes the number of lines in a shell.
  Example: line 10
 
  Type line for help.

   mgbox  112/2 

  msgbox - display a message box  
 
  A trivial program. Simply pops a a message box with a text
 
  Type msgbox for help.

   font  113/2 

  font - change the font of the VIO shell  
 
  This program changes the font of a shell. Before starting font have a look at
  the font dialog of a shell. There are listed a lot of fonts. Count
  (zero-based) the entry where your favourite font is. Assume this is the second
  (=1, if zero-based). start font 1 from your batch file to switch to that small
  font.
 
  Type font -? for help.
 
  Some users told me that font makelist does not work or hang up the system.
  This has not been solved now since it runs fine on my system... Be careful
  when using the parameter makelist. All others seem to work.

   callrx  114/2 

  callrx - execute a ReXX command  
 
  This program calls a Rexx-program and prints the return-value of the
  ReXX-program to stdout. The name of the ReXX-program is the first parameter
  while the next parameters are delegated to the ReXX-program.
 
  Type callrx for help.

   fxexec  115/2 

  fxExec - execute a FeelX object  
 
  This is a small program to "execute" a specific object. E.g. fxexec FeelX or
  fxexec pmkill or fxexec B1Desktop.

   Trouble shooting & Workarounds  116/1+

  If you've ever trouble with this program refer to this section.

   My mouse pointer is lost  117/2 

  There is a simple workaround: Just load the e.exe or any other program that
  uses a multi-line-entry-field.

   My system does not shutdown  118/2 

  I don't know wether this is a bug of FeelX or OS/2. If your shutdown does not
  end you must press Ctrl-Alt-Del to avoid chkdsk when the system is booted
  next. As far as I know no data will be lost

   My system is flickering  119/2 

  Open the WPS object and deselect "activate all controls" or analog with fxopt.
 
   An active window does not accept data  120/2 

  The window is probably not active it just have the colors as if it were
  active. Click on the desktop and move back into the window.

   My program does not accept the clipboard as an entry  121/2 

  Use & as a parameter not %c

   There is a menu-entry missing  122/2 

  Make sure that the type is defined (x:=type[]).

   My menu does not disappear  123/2 

  Press ESC

   Problems with networks  124/2 

  Some users told me that their system sometimes hangs when using FeelX v1.0 in
  a network - especially on the server.
 
  I don't have any network and I don't have one available. Therefore this
  situation is very difficult to reproduce and test and debug. I tried to make
  the code more stable (even though other did not had similar problems).

   The EPM pops up  125/2 

  This seems to be a problem of the EPM. Whenever it receives the focus it
  pushes itself into the foreground. Sorry, I don't have any ideas now how to
  solve the problem.

   Keyin does not work  126/2 

  OS/2 2.0 might have problems with keyin in DOS shells. Due to a peculiarity of
  the way shell are pasting keyin does not work. I.e. Dos shells paste about
  4000 characters. To avoid this specify the dos=false attribute.

   Problems with the WPS object  127/2 

  I tried to be careful when creating the WPS object. If was programmed using
  OS/2 2.1 and TOOLKIT21. I cannot exclude that there might be problems with
  OS/2 2.0. If so use uninstal.exe and use fxopt.exe to change the parameters.

   Program is not started  128/2 

  If the program is not in the PATH (config.sys) you must specify the fully
  qualified name in the name-attribute - no matter whether the path-attribute is
  set or not.

     129/0 

  Felix von Normann
  Innstr. 82
  94036 Passau
  Germany
  e-mail: normann@kirk.fmi.uni-passau.de
 
     130/0 

  To remove a shadow open the folder, take the icon with the right mouse button
  (=press the button), move the shadow over the shredder and drop it there by
  releasing the right mouse button.

