home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 8 Other
/
08-Other.zip
/
myfeelx.zip
/
feelx.txt
< prev
next >
Wrap
Text File
|
1994-07-25
|
142KB
|
3,323 lines
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 erhältlich, dafür 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
für Deutschland - Preissenkungen für Software gelten nie für 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│║
║└─────┘ └────────┘║
║┌──────┐┌──────┐ ║
║│MenuLL││MenuLR│ ║
║└──────┘└──────┘ ║
╚══════════════════╝
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 ║│MenuLL││MenuLR│ ║
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 top│top │
├────┼────────────┼───────────────┼──────────────────────────────┼──────────┤
│ │ │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 two│0 │
│ │ │ │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 disable│nothing] │
│ │ │ │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 appears│unnamed │
│ │ │ │as a submenu │menu │
├────┼────────────┼───────────────┼──────────────────────────────┼──────────┤
│ 1 │item (or │[ref1;ref2;ref3│refx 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 │ │
│ │ │windoze31seamle│shells. │ │
├────┼────────────┼───────────────┼──────────────────────────────┼──────────┤
│ 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;string│List 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│
├────┼────────────┼───────────────┼──────────────────────────────┼──────────┤
│ │rexxparamete│string │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 focus│toggle │ │
├───────────────┼──────────────────────────────┼──────────┼──────────┤
│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 like│off │ │
│ │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 on│on │ │
│ │top │ │ │
├───────────────┼──────────────────────────────┼──────────┼──────────┤
│ │normal │off │ │
├───────────────┼──────────────────────────────┼──────────┼──────────┤
│ │assign this shell the hotkey x│x (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.