home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 8 Other
/
08-Other.zip
/
wcat21.zip
/
watchcat.inf
(
.txt
)
< prev
next >
Wrap
OS/2 Help File
|
1995-05-16
|
425KB
|
3,709 lines
ΓòÉΓòÉΓòÉ 1. Title Page ΓòÉΓòÉΓòÉ
Welcome to WatchCat 2.1
- The Guardian Angel of OS/2 -
ΓòÉΓòÉΓòÉ 2. Overview ΓòÉΓòÉΓòÉ
Read more about the following topics:
o Do I need WatchCat
o WatchCat is not just a process killer :-)
o Changes since WatchCat 2.0
o What do I have to pay?
ΓòÉΓòÉΓòÉ 2.1. Do I need WatchCat? ΓòÉΓòÉΓòÉ
WatchCat is a program to recover OS/2 2.x and OS/2 3.x from some kind of hang
by killing applications.
WatchCat is useful to any OS/2 user in the following situations:
o The Presentation Manager (PM) is blocked. Due to the single message queue of
OS/2 a single ill-behaved PM program might block all PM programs in the
system and prevent any program from getting user input. Therefore it is
impossible to end the corrupt task or to save data in other programs. You can
press Ctrl-ESC but this does not help in all situations. Due to the
Full-Screen nature of WatchCat those ill-behaved programs can be killed from
within WatchCat.
There are several reasons why the PM might hang:
- An ill-behaved PM program
- An ill-behaved Windows program in a Win-OS/2 session
- Erroneous Workplace Shell objects.
Even though OS/2 has become much more stable with Version 3, there are still
situations where the PM is blocked:
- The PM user-interface is blocked because of a system-modal dialog box that
cannot be closed.
- User input is impossible because of a high priority process or a process
that is doing a lot of swapping.
o Displaying process information in a non-cryptic easy-to-understand way. Learn
more about OS/2 and its processes.
WatchCat is also interesting to programmers in the following situations:
o Display all PStat-info about modules, processes, threads, etc. WatchCat
periodically updates all this information. It is quick and easy to use
without any PM overhead, by using the CuTe technology.
o Display all WatchCat information on a terminal and control WatchCat even if
OS/2 crashed. Open a (windowed) remote shell on the hanging PC. (registered
version only).
o Kill threads or change the priority of threads dynamically. (1st Aid Package
only).
o Disable Ctrl-Alt-Del or use Ctrl-Alt-Del to activate WatchCat (registered
version only).
o We are using WatchCat ourselves many times a day:
- View the number of threads in an application.
- Do all threads have the correct priority?
- View the process hierarchy. Are all child processes started correctly?
- Is my program really using the right DLL? Which DLL are used and what path
do the DLL have?
- Use WatchCat as a task switcher when Ctrl-ESC does not work.
- Don't be afraid to use the debugger for critical actions (e.g. breakpoints
in the window procedure), most hang-ups can be recovered.
- Does my application consume much CPU time?
- My application stops. Is it an endless loop or a deadlock?
o You may use it in special cases for debugging: Send your debugging text to
WatchCat to avoid any additional PM message passing. This may be useful in
some PM and WPS applications.
o WatchCat can be extended with its own modules via a DLL and a documented
C-API. or via the simple and documented WatchCat C++ window framework.
And there are more situations where WatchCat can help - read these anecdotal
reports where WatchCat might also help.
In contrast to WatchCat 1.x you don't need special hardware to use WatchCat
2.1. You can still use any switches you built for v1.x, but you can also simply
activate WatchCat by a user-defined hotkey (default: Ctrl-Alt-W).
WatchCat needs a very small amount of CPU-time. You don't see it and you won't
notice it. But it is there if you need it.
ΓòÉΓòÉΓòÉ <hidden> How WatchCat works ΓòÉΓòÉΓòÉ
Most OS/2 users know the situation where the Presentation Manager hangs: No
input from keyboard or mouse seems to be possible: WatchCat detects a hotkey
sequence even when OS/2 hangs. Just press the hotkey and delete the ill-behaved
application. WatchCat is not affected by a hung PM. You can even use WatchCat
from a terminal. Without the ill-behaved program OS/2 is stable again. You can
continue your work without rebooting.
ΓòÉΓòÉΓòÉ <hidden> Two true stories about WatchCat ΓòÉΓòÉΓòÉ
The first story was reported by Felix von Normann from Passau, a novice OS/2
user. Here is his true experience:
"One day I installed a new text-mode editor which I called e.exe and
put it before the OS/2 Standardeditor in the PATH, because I liked it
more the the graphical version. A few days later I double-clicked on
a READ.ME icon of a program package. Nothing happed, I turned of the
computer and forgot the situation (...) When I turned on my computer
the next day I noticed that it was significantly slowed down, even no
program was visible on the WPS. I activated WatchCat and found out
that more than 90% CPU-time was consumed by a process called 'e.exe'.
Finally I remembered my double-click on the icon. With WatchCat I
found out the Editor e.exe was started by the WPS as a PM-program
(first column), what was wrong, because the details view proofed that
it was a fullscreen program. After killing the process - thanks to
WatchCat - the solution was easy to find: I don't double-click on
text-icons any longer."
The second story is from one of our users in the north of Germany. He told us:
"I was using OS/2 with S3-VGA, 640x480 and a buggy video driver.
Sometimes character simply disappeared. After the 3rd repaint a
button was labled 'C ce ' instead of 'Cancel'. Activating and leaving
WatchCat forced the video driver to completely redraw the whole
screen. This trick (activating WatchCat every 10 minutes) helped me
to use my system until I found a bug-free (?) driver."
As you can see, WatchCat is not just a process killer...
ΓòÉΓòÉΓòÉ 2.2. Changes since WatchCat 2.0 ΓòÉΓòÉΓòÉ
WatchCat.exe
o bugs
- Monochrome color changed to 0x7 (instead of 0xf)
- Using only one semaphore (maybe an unnecessary change, s.b.)
- removed uninitialized variable error causing a problem that looks like
a dead-lock.
- removed bug: maximize, TAB
o improvements
- improved user interface
- optimized segment loading
- one context switch less on activation
o new features:
- sort ascending, descending
- Shutdown (with message box)
- Reboot (with message box)
- added /DLL /MOUSE, ...
- Added context menu to unblock threads
- Changed Init of 50-line-mode
- DLL searchable via environment variable WCATDLL
- sort by structure
- kill entire process tree (does it work???)
- kill by name
- added new DLL: start programs, stdout >> window
- improved options menu (added color support, ...)
- parameter /RATE:x , 0<=x<=9, set DevDriv timer rate
- support for windowed cmd.exe
More new features
o C-A-D package (disable Ctrl-Alt-Del).
o process manipulation center (disable Ctrl-Alt-Del).
o Run WatchCat on a remote PC via serial connection
ΓòÉΓòÉΓòÉ <hidden> What do I have to pay? ΓòÉΓòÉΓòÉ
WatchCat is not free, but we believe that WatchCat is very cheap.
For use in business, commercial, government, or institutional environment, you
must buy a registered version or a 1st Aid Package.
For personal usage you may use the unregistered version. In this case you are
highly encouraged to send us a postcard. You're invited to buy a registered
version or a 1st Aid Package. Both versions contain more and interesting
features than the unregistered version.
ΓòÉΓòÉΓòÉ 3. Copyright & more ΓòÉΓòÉΓòÉ
Please read this section carefully before using or distributing WatchCat.
ΓòÉΓòÉΓòÉ 3.1. Copyright ΓòÉΓòÉΓòÉ
WatchCat and all software supplied in the WatchCat package is
(c) Copyright 1993-95 by Felix von Normann and Thomas Opheys.
All rights reserved.
You are invited to distribute the unregistered version WatchCat in the sense of
Shareware. This implies that you can sell only the copying service. You cannot
sell the program itself without explicit permission. Repackaging the WatchCat
archive is not allowed.
You can also sell the registered version or the 1st Aid Package This requires
our explicit permission and - of course - payment for each sold version.
ΓòÉΓòÉΓòÉ 3.2. Disclaimer ΓòÉΓòÉΓòÉ
We do not claim to provide error-free software or software that will meet all
your requirements.
This software is supplied with no warranty, neither expressed nor implied. We
disclaim all warranties for any damages included but not limited to incidental
or consequential damage caused directly or indirectly by this software.
All software is provided AS IS. You may use this program only at your own risk.
WatchCat must not be used in states that do not allow the above limitation of
liability.
ΓòÉΓòÉΓòÉ 3.3. The authors ΓòÉΓòÉΓòÉ
WatchCat was written by:
For more information refer to section How to contact the authors.
ΓòÉΓòÉΓòÉ 3.4. Credits ΓòÉΓòÉΓòÉ
Credits go to Will Rose (cwr@crash.cts.com) who was so kind as to read our docs
(the previous level) and correct grammar, style, syntax, typos and all the
other things where a German can do harm to the English language.
Thanks to Jeremy Mathers (pynq@quads.uchicago.edu), Benjamin Stein
(benno@liva.in-berlin.de), Mike Morrell (morrellm@seq.oit.osshe.edu), Nicole
Greiber (greiber@wrcs2.urz.uni-wuppertal.de), Erich Schulman
(acme@use.usit.net), Andrew DeNardo
(LRSSPFLD!CHAMPAIGN!DENARDO@lrsmail.attmail.com), Sven Kiesow
(kiesow@kirk.fmi.uni-passau.de) and many others for their contributions to
WatchCat.
THANKS A LOT!
ΓòÉΓòÉΓòÉ 4. Payment for WatchCat (changed) ΓòÉΓòÉΓòÉ
Topics:
Why registering?
The unregistered version
The registered version
The 1st Aid Package
prices (outside Germany)
Preise (Deutschland)
(Nobody seems to have understood the licensing conditions of WatchCat 2.0... We
are currently working on an expert system written in Prolog but it is not
finished now, so we have rewritten the licensing part to be more precise.
We would like to ask you to read the following text carefully. we still think
we have a fair offer for you.)
ΓòÉΓòÉΓòÉ 4.1. Why registering? ΓòÉΓòÉΓòÉ
o For use in business, commercial, government, or institutional environment,
you must buy (at least) the registered version of WatchCat.
(Please note: Using the unregistered Shareware version in one of the listed
cases is illegal - except for evaluation purposes).
You may also order a specially tailored version (with only the parts you
need; special start-up messages; custom-built DLL; ...) This service will
not be free. A German version is not planned now, it will be created when
there is enough interest.
o Pre-installed WatchCat All hardware providers with pre-installed OS/2 are
encouraged to pre-install WatchCat, too. To do so, you must buy one regular
license per PC. Pre-installing the unregisterd Shareware-Version is not
allowed.
o Bundle with other software: Software developers may distribute WatchCat with
their software (when using the API or to increase stability). This requires:
1. One registered WatchCat license per copy of your program
2. WatchCat must remain to be a single separate product. Don't integrate
WatchCat seamless into your product (you may do so vice versa...)
o For personal usage you may use the unregistered version permanently. In this
case you are strongly invited to write us a (two!) postcard, saying that you
are using the program. Of course you can also order the registered version
or the 1st Aid Package This has two advantages: You get a lot of additional
software and you motivate us to keep up the WatchCat work.
Introduction to sending postcards: avoid asking questions like "Do you
really want a postcard?", "What shall I write??" or "What picture should
the postcard show?" (see the answers by double-clicking on the question)
Consider: We both are not working full-time on WatchCat, but we have many
ideas for enhancements and new programs. Please don't force us to think it all
over and leave our big love, OS/2. If programming for Windows (and this sucker
REALLY needs something like WatchCat) is more lucrative than for OS/2...
So, write us a postcard now, introduce WatchCat to your office today, convince
your boss to buy some licenses and sleep without feeling guilty tonight.
Thanks in advance
Felix & Thomas
ΓòÉΓòÉΓòÉ 4.2. The unregistered version ΓòÉΓòÉΓòÉ
The unregistered version of WatchCat may be distributed in the sense of
Shareware. It is for private usage or evaluation purposes only. It cantains the
following packages:
o WatchCat (including WatchCat.exe, device driver, alternative activation).
o Demo of the process manipulation center
o Demo of remote WatchCat
ΓòÉΓòÉΓòÉ 4.3. The registered version ΓòÉΓòÉΓòÉ
The registered version contains the following features:
o WatchCat (including WatchCat.exe, device driver, alternative activation)
with the ability of a windowed shell.
o The C-A-D package
o remote WatchCat
ΓòÉΓòÉΓòÉ 4.4. The 1st Aid Package ΓòÉΓòÉΓòÉ
The WatchCat 1st Aid package contains the following features:
o WatchCat (including WatchCat.exe, device driver, alternative activation)
with the ability of a windowed shell.
o The process manipulation center
o remote WatchCat with
o The C-A-D package (with the ability to kill by Hotkey (Ctrl-Alt-K) and to
interrupt DOS programs (Ctrl-Alt-Break)).
o Some DLL sources to make programming for WatchCat easier.
In addition you get the following components:
o program disk
o A hardware switch (either serial or parallel or game port) which looks like
this
o A printed manual of the online documentation (about 50 pages high quality).
ΓòÉΓòÉΓòÉ 4.5. prices ΓòÉΓòÉΓòÉ
Item Pieces p/pce You get
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
Registered version 1 $ 27 WatchCat 2.1 registered
2 $ 24 to you, one standard
3 - 9 $ 20 license, update quarantee
10 - 49 $ 19 and a program disk.
50 - 99 $ 16
100 - 499 $ 12
500 + $ 8
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
1st Aid Package 1 $ 62 WatchCat 2.1 registered
2 $ 59 to you, license, update
3 - 5 $ 54 guarantee, program disk,
6 + $ 50 support, printed manual,
hardware connector
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
Printed manual 1 $ 13 Bound and printed manual
2 + $ 12 with superior quality.
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
Hardware connector 1 $ 27 Ready built hardware
2 $ 24 connector in a housing.
3 + $ 22
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
Update message eMail free We immediately tell you
FAX $ 3 when a new version of
letter $ 2 WatchCat is available.
phone $ 10
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
Available ordering options:
1. Send your order with a personal check. For a total price of $65 or less
add $8; for a price above $65, add $20 for money transfer costs.
2. Send your money in cash to us. This doesn't require an additional fee.
Give a money order to our account to your bank. This will only be accepted
if you pre-pay all money transfer expenses. Add $6 for processing.
Available delivery options:
1. eMail. If you want to receive your registered version by eMail, there is
no additional fee.
2. Air mail. Add $3 if you only order exactly one registered version. Others
add $18.
3. Personal delivery by a member of your friendly WatchCat team: Add $1000
for a flight to the U.S., a hotel room and one day in Disneyland. :-)
ΓòÉΓòÉΓòÉ 4.6. Preise (Deutschland) ΓòÉΓòÉΓòÉ
Einzel-
Artikel Anzahl Preis Inhalt
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
Registrierte Version 1 - 9 35 DM Standardlizenz,
10-49 25 DM Updategarantie,
59-99 20 DM Programmdiskette
100-499 15 DM
500+ 10 DM
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
1st Aid Package 1 80 DM Standardlizenz,
2 - 5 70 DM Updategarantie,
5 + 65 DM Handbuch,
Hardwarestecker,
Programmdiskette
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
Handbuch 1 15 DM gebundenes Handbuch
(nur bei Abnahme mind.
einer Lizenz)
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
Hardwarestecker 1 35 DM Ein Hardwarestecker fuer
Parallelport, serielle
Schnittstelle _oder_
Gameport
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
Update- eMail frei Wir benachrichtigen Sie,
Benachrichtigung FAX 1 DM sobald eine neue Version
Brief 2 DM von WatchCat verfuegbar
Telefon 5 Dm ist.
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
ΓòÉΓòÉΓòÉ 5. How to contact the authors ΓòÉΓòÉΓòÉ
There are several ways to contact us.
o To order WatchCat write to: Opheys Electronic, von Normann/Opheys,
Franz-Stockbauer-Weg 1, D-94032 Passau, Germany, watchcat@fmi.uni-passau.de
o By regular mail: To receive further information or to write us a postcard or
letter write to one (or both) of the following addresses:
Felix von Normann Thomas Opheys
Innstr. 82 Franz-Stockbauer-Weg 1 / 88
94036 Passau 94032 Passau
Germany Germany
normann@kirk.fmi.uni-passau.de opheys@kirk.fmi.uni-passau.de
http://www.uni-passau.de/~normann http://www.uni-passau.de/~opheys
o Send email to:
watchcat@fmi.uni-passau.de (for all comments about WatchCat)
normann@kirk.fmi.uni-passau.de (to write a mail to Felix)
opheys@kirk.fmi.uni-passau.de (to write a mail to Thomas)
o World Wide Web: We are currently working on a WWW homepage for WatchCat.
You need a WWW browser (if you use OS/2, please note that this program is
not part of the OS/2 Warp Bonus Pack, but available freely to all OS/2
users). Select URL http://www.uni-passau.de/~normann/watchcat.html
Currently we have links to:
- The online documentation in HTML format (for WWW).
- A link to Hobbes (where you can get the latest WatchCat package).
- Some pages with the latest information about WatchCat. Frequently asked
questions that are not part of this documentation will be collected
there.
ΓòÉΓòÉΓòÉ 6. WatchCat for the impatient user ΓòÉΓòÉΓòÉ
After uninstalling previous versions of WatchCat, copy all files into a single,
separate directory (e.g. ramdisk, or final WatchCat directory).
Now run the install program (install.exe) and follow the instructions,
especially select:
o Easy installation: This options installs WatchCat in your CONFIG.SYS and
creates a WPS object on your Workplace Shell. The only way to activate
WatchCat is the keyboard.
o Advanced installation: Select this option if you want to use a switch for
LPT, COM, etc, or if you need more than one device. Use this option also if
you do not want to install the WPS object.
Now installation is ready. The CONFIG.SYS is updated. Reboot. Activate
WatchCat (default: Ctrl-Alt-W). Enjoy!
ΓòÉΓòÉΓòÉ 7. Installation and configuration of WatchCat ΓòÉΓòÉΓòÉ
(If you don't want to read much text, refer to WatchCat for the impatient
user.).
Before installing WatchCat 2.1 you must deinstall WatchCat 1.x, WatchCat 2.x
(if present).
We recommend using the installation program to copy the files and update the
CONFIG.SYS.
Of course, you can also install WatchCat manually. This requires you to include
a device driver and a RUN= statement in the CONFIG.SYS file.
To get information about which files are needed/not needed, please refer to the
section Understanding the files in the WatchCat package.).
ΓòÉΓòÉΓòÉ 7.1. Installation procedure ΓòÉΓòÉΓòÉ
Topics:
Deinstalling WatchCat 1.x
Deinstalling WatchCat 2.0
The install program
Installing The WPS object
Installing WatchCat manually
Managing remote WatchCat
Uninstalling WatchCat 2.x
Installing the process manipulation center
Deinstalling the process manipulation center
Installing C-A-D
Deinstalling C-A-D
ΓòÉΓòÉΓòÉ 7.1.1. Deinstalling WatchCat 1.x ΓòÉΓòÉΓòÉ
Note: YOU MUST DELETE AND DEREGISTER THE WATCHCAT 1.0/2.x OBJECT FROM
THE WORKPLACE SHELL. DO NOT FORGET THIS STEP!!!!
If you installed the WPS object of WatchCat 1.x (the stupid cat on your
Workplace Shell) please remove it BEFORE installing the new version. First
delete the icon by using its context menu or dropping it on the shredder.
DON'T FORGET THIS STEP!
Then you can deregister the WPS class. Either run the old WatchCat 1.x, once
with the parameter deregisterWPS and once with the parameter clearini:
[C:\watchcat] watchcat deregisterWPS
...
[C:\watchcat] watchcat clearini
...
If you already deleted WatchCat 1.x you can use the install program of
WatchCat 2.1 to deregister it. Just type:
[C:\watchcat] install deregisterWPS
Now you are ready to install WatchCat 2.1.
ΓòÉΓòÉΓòÉ 7.1.2. Using the install program ΓòÉΓòÉΓòÉ
It is very important to uninstall WatchCat 1.x first.
It is assumed that you unpacked all files in a certain directory. You can put
all the files into the final WatchCat directory or tell the installation
program to do so.
Then start install from the command line.
You first have to choose between the easy installation and the advanced
installation. The easy installation procedure will install WatchCat in your
CONFIG.SYS, with as many features enabled as possible and default settings. The
default to activate WatchCat is to use Ctrl-Alt-W.
If you want to activate WatchCat with any other input control, you must choose
the advanced installation. Please answer all questions, then in the end the
install program will add WatchCat to the CONFIG.SYS.
Note: Please note that you can use the install program to install the
C-A-D package or the process manipulation center.
ΓòÉΓòÉΓòÉ 7.1.3. Installing the WPS object ΓòÉΓòÉΓòÉ
A separate installation step for the Workplace Shell object is not required any
longer. That is all managed by the install program.
ΓòÉΓòÉΓòÉ 7.1.4. Installing WatchCat manually ΓòÉΓòÉΓòÉ
WatchCat has the following architecture:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé WatchCat Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé physical Γöé
Γöé device driver Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé Hardware Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
Therefore you must add the statements below to your CONFIG.SYS. Substitute
x:\path\ with the correct path and do not copy the italic text. (You can place
these lines somewhere in your CONFIG.SYS).
DEVICE=x:\path\watchcat.sys   insert at the end of CONFIG.SYS to install
the device driver
RUN=x:\path\watchcat.exe   to detach the main program
In addition you need to update some variables: (WatchCat will probably not work
if you do not set these variables correctly).
PATH=...;x:\path\;   let OS/2 find watchcat.exe
LIBPATH=...;x:\path\;   let OS/2 find the DLL.
BOOKSHELF=...;x:\path\;   let OS/2 find this documentation
If you do not want to activate WatchCat with the default hotkey Ctrl-Alt-W, it
is necessary to add a parameter to the device driver. The parameters are listed
in the next section.
ΓòÉΓòÉΓòÉ 7.1.5. Uninstalling WatchCat 2.x ΓòÉΓòÉΓòÉ
Currently we don't have a deinstall program. You must deinstall WatchCat
manually. To do so please follow these steps.
1. kill WatchCat (This can be done by WatchCat)
2. delete the WPS object (if there)
3. run install deregisterWPS from the commandline
4. remove WatchCat specific entries from your CONFIG.SYS ( RUN=...,
DEVICE=..., LIBPATH, PATH, BOOKSHELF )
5. reboot (!!!)
6. delete all files
ΓòÉΓòÉΓòÉ 7.1.6. Managing remote WatchCat ΓòÉΓòÉΓòÉ
Using WatchCat from a terminal is very easy:
1. Connect the terminal (in most cases a second PC) and the local PC via a
serial cable. Start the terminal program and configure it correctly.
2. Configure the serial port of the local PC with the OS/2 mode command.
3. Now start WatchCat with the parameter /remote. Run it from the command
line. Do not detach it.
Now you can use WatchCat from either your local PC or from your remote
terminal. For technical reasons some key combinations are not possible on a
terminal. Therefore other control sequences for closing windows and changing
the focus are used on the remote terminal. Please read the built-in
documentation for more information. Use WatchCat on your local PC as usual.
Note: You can adjust various settings by editing the file serial.cnf
(This file is self-explaining).
ΓòÉΓòÉΓòÉ 7.1.7. Installing the process manipulation center ΓòÉΓòÉΓòÉ
New feature: This is a new feature of the 1st Aid Package of WatchCat
2.1. This package allows you to kill, suspend, resume threads or
change the priority of thread in almost all processes.
To use process manipulation center the follow these steps:
1. Move these files into the WatchCat directory (if not already there):
o viocalls.dll
o newvio.dll
o pmwin.dll
o pmwin32.dll
2. Now ensure that the WatchCat-path is the first path in the LIBPATH
statement of your config.sys. e.g. change:
LIBPATH=.;:\OS2;
into
LIBPATH=c:\watchcat\;.;c:\os2;
3. Add the statement DEVICE=x:\path\killer.sys to the end of your config.sys
4. reboot
ΓòÉΓòÉΓòÉ 7.1.8. Deinstalling the process manipulation center package ΓòÉΓòÉΓòÉ
To deinstall the process manipulation center follow these steps:
1. Remove the WatchCat path from the LIBPATH statement of your config.sys.
2. Remove the DEVICE=...killer.sys statement from the config.sys
3. Reboot (!!)
4. Delete the following DLL:
o viocalls.dll
o newvio.dll
o pmwin.dll
o pmwin32.dll
Please delete these files from the WatchCat directory only!! Do not change
these files in the \OS2\DLL directory.
5. You can now re-insert the WatchCat path into the LIBPATH statement or you
can completely deinstall WatchCat.
ΓòÉΓòÉΓòÉ 7.1.9. Installing the C-A-D package ΓòÉΓòÉΓòÉ
New feature: The C-A-D package is introduced with the registered
version of WatchCat 2.1.
You can use the WatchCat install program to install all components of
the C-A-D package.
1. Ctrl-Alt-Del feature.
a. Add the following statements to the config.sys:
DEVICE=x:\path\vwcat.sys
RUN=x:\path\wccad.exe
b. Add the following statement to the autoexec.bat:
x:\path\wccad.exe
PATH=...;x:\watchcatpath
c. Add the following load statement to the [windows] part of the win.ini
load=x:\path\wcwin.exe
2. Desktop shutdown, Shutdown Folder: run instcad from the command line.
After installing and rebooting open the desktop settings. (right
mouse button on desktop, Settings). Open the page labled "Shutdown".
It is recommended to check at least "acknowledge shutdown".
After installing try to activate WatchCat with Ctrl-Alt-Del from DOS,
Windows, OS/2 Fullscreen, OS/2-PM. Try also to press Ctrl-ESC or
Alt-ESC to switch between sessions. If everything works fine, the
installation was correct.
Please note that the source of the instcad.exe program is delivered
also. Programmers may adjust this program to install the new desktop
only or to install the shutdown folder only (which is not very useful
as on its own...).
ΓòÉΓòÉΓòÉ 7.1.10. Deinstalling the C-A-D package ΓòÉΓòÉΓòÉ
1. Ctrl-Alt-Del feature
a. Remove the following statements from the config.sys:
DEVICE=x:\path\vwcat.sys
RUN=x:\path\wccad.exe
b. Remove the following statement from the autoexec.bat:
x:\path\wccad.exe
PATH=...;x:\watchcatpath
c. Remove the following load statement from the [windows] part of the
win.ini
load=x:\path\wcwin.exe
2. Desktop shutdown, Shutdown Folder: run uncad from the command line.
Please note that the source of the uncad.exe program is delivered
also. Programmers may compile this program on their own.
ΓòÉΓòÉΓòÉ 7.2. Understanding the files in the WatchCat package ΓòÉΓòÉΓòÉ
The WatchCat package contains the following (or less) files:
File task deleteable?
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
readme.txt small overview yes, after reading
changes.txt small overview yes
install.exe install and deinstall WatchCat yes, after install
save to diskette
watchcat.sys device driver no
WatchCat.exe The program. Executable on OS/2 2.11 and Warp
wpcat.dll Workplace Shell object if you have no WPS object
watchcat.inf This documentation if you don't need doc
wcatwin.dll Window calls, FeelX calls. if you don't need
b) FeelX alt. marking
wcatdeb.dl_ rename to wcatdeb.dll to use API if you're not a programmer
startpgm.dl_ rename to startpgm.dll to use this module if you don't need it
tracevio.dl_ rename to tracevio.dll to trace VIO calls. if you don't need it
wcat_api.zip unpack to program WatchCat if you're not a programmer
wcinfo information tool for trouble shooting yes
wccad.exe control C-A-D, intercept hotkeys no, if you use C-A-D
wccaddll.dll used by wccad.exe yes, (not recommended)
vwcat.sys virtual device driver no, if you use C-A-D
wcwin.exe Windows part of C-A-D no, if you use C-A-D
wcwindll.dll used by wcein no
sdfolder.dll shutdown folder yes, if you don't need it
wcdesk.dll extended desktop yes, if you don't need it
shutdwn.exe shutdown program yes
kill.exe small kill program yes
instcad, etc. installation and sources yes
killer.sys device driver no, if installed
viocalls.dll necessary DLL no, if installed
pmwin.dll necessary DLL no, if installed
newvio.dll necessary DLL no, if installed
pmwin32.dll necessary DLL no, if installed
qsize.dll necessary DLL no, if installed
ΓòÉΓòÉΓòÉ 7.3. Parameters supported by the device driver ΓòÉΓòÉΓòÉ
Topics:
General syntax
<option>
<device>
<mask>
<hardware>
summary
Converting WCat 1.x options
ΓòÉΓòÉΓòÉ <hidden> General syntax ΓòÉΓòÉΓòÉ
DEVICE = ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ WATCHCAT.SYS ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇ
ΓööΓöÇ <path> ΓöÇΓöÿ Γöé Γö£ΓöÇ <option> ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
Γöé ΓööΓöÇ <activation> ΓöÇΓöÿ Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
<option> : ΓöÇΓöÇΓö¼ΓöÇ /Q ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ
Γö£ΓöÇ /mouse ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /nomouse ΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /pm ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /nopm ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /mono ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /color ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /fade ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /nofade ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /remote ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /noremote ΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /remotepopup Γöñ
Γö£ΓöÇ /dll ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /nodll ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γö£ΓöÇ /killpmΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
ΓööΓöÇ /nokillpmΓöÇΓöÇΓöÇΓöÇΓöÿ
<activation> : ΓöÇΓöÇΓöÇΓöÇ <device> ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ
ΓööΓöÇ : ΓöÇΓöÇ <mask> ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
ΓööΓöÇ <hardware> ΓöÇΓöÿ
The actual values are described in the following sections.
ΓòÉΓòÉΓòÉ 7.3.1. <option> ΓòÉΓòÉΓòÉ
You may specify the following options for the device driver (they are globally
valid for all WatchCat's) or for the program (they are valid for that instance
of WatchCat only).
option description
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
/Q don't display device driver message on hotkeys
/mouse use mouse (default)
/nomouse don't use mouse
/pm use PM calls (e.g. to get window list) (default)
/nopm don't use PM calls
/mono don't use colors
/color use colors
/fade fade in WatchCat screen (default)
/nofade no fade in
/remote use WatchCat via terminal (registered version only)
/noremote don't use WatchCat via terminal (default)
/remotepopup let remote WatchCat popup on activation
/dll load DLL on start-up (default)
/nodll don't use DLLs
/killpm kill the PM on a second activation (default)
/nokillpm do not kill the PM
ΓòÉΓòÉΓòÉ 7.3.2. <device> ΓòÉΓòÉΓòÉ
This part is to specify what kind of device you're using.
name description activation mechanism(s) default bit mask default hardware
ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
KEYB keyboard (key/key combination) Ctrl-Alt-W KEYB (Keyboard)
GAME game port (joystick or switch) any joystick button GAME (Game Port)
COM1 serial port 1 (switch) DCD,RI,DSR or CTS line COM (serial)
COM2 serial port 2 (switch) as above as above
COM3 serial port 3 (switch) as above as above
COM4 serial port 4 (switch) as above as above
LPT1 parallel port 1 (switch) BUSY,ACK,PEND,SEL,ERROR LPT (parallel)
LPT2 parallel port 2 (switch) as above as above
XXXX user device (any input) any bit of the port USER (user device)
ΓòÉΓòÉΓòÉ 7.3.3. <mask> ΓòÉΓòÉΓòÉ
Defines which input lines/port bits of the given device may be used to accept a
WatchCat activation. Note that the mask byte must be hexadecimal, and exactly
two characters long. Example: "F0" (upper four bits will be used).
For certain devices, there are aliases for common bit masks:
dev:mask description
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
GAME:JA Joystick A, any button (J1 also works)
GAME:JB Joystick B, any button (J2 also works)
GAME:JA1 Joystick A, button 1
GAME:JA2 Joystick A, button 2
GAME:JB1 Joystick B, button 1
GAME:JB2 Joystick B, button 2
COMx:DCD COMx, Data Carrier Detect line
COMx:RI COMx, Ring Indicator line
COMx:DSR COMx, Data Set Ready line
COMx:CTS COMx, Clear To Send line
LPTx:BUSY LPTx, BUSY line (BSY also works)
LPTx:ACK LPTx, ACK (Acknowledge) line
LPTx:PEND LPTx, Paper End line
LPTx:SEL LPTx, Selected line
LPTx:ERR LPTx, Error line (ERROR also works)
xxxx:ALL all bits of the device
For the KEYB device, a bit mask isn't useful. You can specify a make-code of a
key instead; but normally, you use one of the following key aliases: F10, F11,
F12, A, B, C, ..., X, Y, Z
In addition, you can use CTRL, ALT or SHIFT or any combination of two of these
three keys with the activation key:
S-<key> SHIFT+<key>
C-<key> CTRL+<key>
A-<key> ALT+<key>
CA-<key> CTRL+ALT+<key>
CS-<key> CTRL+SHIFT+<key>
AC-<key> ALT+CTRL+<key>
AS-<key> ALT+SHIFT+<key>
SC-<key> SHIFT+CTRL+<key>
SA-<key> SHIFT+ALT+<key>
Examples:
parameter to activate WatchCat, press
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
KEYB:F12 CTRL+ALT+W
KEYB:S-F11 SHIFT+F11
KEYB:CA-C CTRL+ALT+C
You should not use F10 or the A...Z keys without at least CTRL and/or
ALT because some programs might need these keys.
Note: Depending on your keyboard hardware, it might not be possible
to press several keys simultaneously.
ΓòÉΓòÉΓòÉ 7.3.4. <hardware> ΓòÉΓòÉΓòÉ
Define of which hardware type the device is. The following names for hardware
types are available:
name hardware type
ΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
KEYB Keyboard
GAME Game Port
COM serial COM Port
LPT parallel LPT Port
USER user device
For all standard device names like LPT1, KEYB, COM2, GAME, ... <hardware> is
determined automatically. Only when <hardware> is a port address, you have to
tell the device driver what kind of hardware is to be expected at this port
address.
KEYB - Keyboard
The keyboard can be used to activate WatchCat. Btw. this also works
when the keyboard seems to be "dead" or if a PM session doesn't
respond to the keyboard. Currently, you can use F10, F11, F12 or A..Z
keys together with any combination of one or two shift keys
(CTRL,ALT,SHIFT).
The defaults for KEYB are: 0060:CA-W:KEYB, that is: The keyboard read
data port address hex 60 is used. CTRL+ALT+W is the default key to
activate WatchCat. Internally, the port address of a KEYB device is
discarded. So anything like XXXX:...:KEYB is useless because XXXX
will be replaced with 0060. This isn't a problem (or are there
keyboard controllers with port address<>hex 60?)
If one or two additional keys (SHIFT, CTRL or ALT) are to be pressed,
WatchCat looks for the make codes of all two (three) keys and
activates if at least one break code of these keys is recognized.
Internally, the port address of a KEYB/PKEY device is discarded. So
anything like XXXX:...:KEYB is useless because XXXX will be replaced
with 0060. This isn't a problem (or are there keyboard controllers
with port address<>hex 60?)
GAME - Game Port
A joystick or a special connector on a game port can be used to
activate WatchCat.
The defaults for GAME are: 0201:F0:GAME, that is: The game port read
data address hex 201 is used. A standard game port supports max. two
joysticks with two buttons each. Bit mask hex F0 means that any of
the four buttons may activate WatchCat. The meanings of the bits are:
bit mask description
ΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
0-3 -- X/Y positions; don't use them (confuses WatchCat)
4 10 Joystick A, button 1
5 20 Joystick A, button 2
6 40 Joystick B, button 1
7 80 Joystick B, button 2
COM - Serial Port
A serial COMx port can be used to activate WatchCat, in conjunction
with a special connector/switch.
The defaults for COM are: <base>:F0:COM, that is: <base> is the COMx
port's base port address:
port base port For a COM port with a different base port
ΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ address XXXX, use XXXX:F0:COM
COM1 03F8
COM2 02F8
COM3 03E8
COM4 02E8
WatchCat sets the lower two bits of the COM port's MODEM CONTROL
Register to 1. This register has the address of BASE+4. Setting these
bits raises the COMx output lines RTS and DTR to +12V, providing +12V
for the connector/switch as a logical high source.
WatchCat inputs from the MODEM STATUS REGISTER which has the port
address of BASE+6. Only the upper four bits are significant here,
hence the bit mask hex F0. The meanings of the bits are:
bit mask description
ΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
0-3 -- toggle bits; don't use them (confuses WatchCat)
4 10 CTS (Clear To Send) line
5 20 DSR (Data Set Ready) line
6 40 RI (Ring Indicator) line
7 80 DCD (Data Carrier Detect) line
LPT - Parallel Port
A parallel LPTx port can be used to activate WatchCat, in conjunction
with a special connector/switch.
The defaults for LPT are: <base>:F8:LPT, that is: <base> is the LPTx
port's base port address:
port base port For a LPT port with a different base port
ΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ address XXXX, use XXXX:F8:LPT
LPT1 0378
LPT2 0278
WatchCat sets all eight bits of the parallel port's DATA OUT
register, which can be found at the device's base port address. This
outputs eight logical high lines which can be used to drive some
electronics or provide a logical true source (+5V).
WatchCat reads from the STATUS IN REGISTER which has the port address
of BASE+1. Only the upper five bits are significant here, hence the
bit mask hex F8. The meanings of the bits are:
bit mask description
ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
0-2 -- reserved; don't use them (may confuse WatchCat)
3 08 ERR (Error) line
4 10 SEL (Selected) line
5 20 PEND (Paper End) line
6 40 ACK (Acknowledge) line
7 80 BUSY (Busy) line
USER - User Device
Any device with a port address that reflects the electrical high/low
state of a switch or other input mechanism can be used to activate
WatchCat.
The defaults for USER are: XXXX:FF:USER, that is: The port address
XXXX is given by you. Mask hex FF enables all bits of the device's
input byte. The meanings of the bits depend on the kind of device.
Remark: GAME is equivalent to 0201:F0:USER
Example: If you have a non-standard COM5 serial device at port
address hex 3D8, use DEVICE=xxx\WATCHCAT.SYS 03D8:ALL:COM
ΓòÉΓòÉΓòÉ 7.3.5. Summary ΓòÉΓòÉΓòÉ
You need one parameter for each device that you want to use to activate
WatchCat. Each parameter has the form: x or x:y or x:y:z.
Examples:
parameter(s) activate WatchCat with...
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
KEYB GAME CTRL+ALT+W key or any joystick button
KEYB:CA-W CTRL+ALT+W key combination
KEYB KEYB:F11 F11 or CTRL+ALT+W key
GAME:JA2 button 2 of joystick A
LPT2:BUSY BUSY line of LPT2
LPT1 LPT2 any input line of LPT1 and LPT2
COM1 COM2 COM3 COM4 any input line of any COM port
03D8:DCD:COM Data Carrier Detect line of a
non-standard COM port at port
address hex 3D8
01B1:ALL:USER any input line of port 1B of a
8255 chip with base address 01B0
ΓòÉΓòÉΓòÉ 7.3.6. Converting WatchCat 1.x options ΓòÉΓòÉΓòÉ
The following table compares all WatchCat 1.x switches and the new switches.
old parameter new parameter parameter for
ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
/1 LPT1 watchcat.sys
/2 LPT2 watchcat.sys
/I=P,B P:B:hw-type watchcat.sys
/G GAME watchcat.sys
/GA GALL watchcat.sys
/C1 COM1 watchcat.sys
/C2 COM2 watchcat.sys
/C3 COM3 watchcat.sys
/C4 COM4 watchcat.sys
/Bx GALL watchcat.sys
/T not needed any longer
/A menu(Options/Options...) (program)
/P menu(Options/Options) (program)
/D menu(Options/Options) (program)
/M /NOCOLOR watchcat.sys or
watchcat.exe
menu(Options/Options) (program)
/S:x menu(Options/Options) (program)
/on /off /toggle WPS object (context menu) WPS object (right mouse button)
exit not needed any longer
shadow not needed any longer
registerWPS installation program
deregisterWPS deregisterWPS installation program
clearini (automatically)
ΓòÉΓòÉΓòÉ 7.4. How to build a connector ΓòÉΓòÉΓòÉ
You don't have to build a connector. WatchCat now supports the keyboard, too.
If you do not want to use the keyboard, you can also use a switch for the
parallel port or the serial port. Another way of activating WatchCat is to use
a joystick.
ΓòÉΓòÉΓòÉ 7.4.1. Connecting with the parallel port ΓòÉΓòÉΓòÉ
It's so simple... Just go out and buy a 25-pin male SUB-D connector that fits
to your parallel port, and a single-pole double-throw (SPDT) switch. The
switch looks like this: In the position shown pins 2 and 3 are connected.
Connect the following pins:
switch connector DB-25
1 <- 2 (DATA 0 signal, output) used as logical HIGH
2 -> 11 (BUSY signal, input) used to input the state
3 <- 19 (GROUND) used as logical LOW
The following picture gives an overview how to connect for these situations:
You might also want to use another kind of switch: one that simply opens and
closes one connection. It's just like the one that is used as a Turbo Button in
your computer case, i.e. if you don't use your Turbo Button you can use it as
the activation switch for WatchCat. Get a switch that stays in the position in
which you put it.
You can use one like your case's Reset Button, but you might have to hold it
down for a while before WatchCat recognizes it.
You will also need one 4.7 kOhm resistor.
In the picture shown both pins are connected when the button is pressed:
Connect one end of the resistor to pin 11, the other end to pin 19 of the
parallel port connector. Pin 11 is also connected to one pin of the switch. The
other pin of the switch is connected to pin 2 of the parallel port.
The following picture gives an overview of how to connect for these situations:
ΓòÉΓòÉΓòÉ 7.4.2. Connecting with a serial COMx port ΓòÉΓòÉΓòÉ
The same two kinds of connectors (as described in the previous section) can be
used here, too. Get a 25-pin or 9-pin female connector for the serial port.
For the first type of switch (SPDT), connect the following pins:
25-pin 9-pin connector on COMx
1 <- 20 1 <- 4 (+12V DC output) used as logical HIGH
2 -> 22 2 -> 9 (RI) used to input the state
3 <- 7 3 <- 5 (GROUND) used as logical LOW
For the second type of switch: (Turbo Button...): Connect one end of the
resistor to pin 22 (25 pin)/9 (9 pin), the other end to pin 7/5 of the COMx
port connector. Pin 22/9 is also connected to one pin of the switch. The other
pin of the switch is connected to pin 20/4 of the serial port. Note that here
the resistor has to be around 12kOhm.
ΓòÉΓòÉΓòÉ 7.4.3. connecting with game port ΓòÉΓòÉΓòÉ
The same two kinds of connectors can be used here, too. Get a 15-pin male
connector for the game port. For the first type of switch (SPDT), connect the
following pins:
switch connector DB-15 (game port)
1 <- 1 (+5V DC output) used as logical HIGH
2 -> XX (fire button, input) used to input the
state
3 <- 4 (GROUND) used as logical LOW
Where XX equals 2 for joystick A, button 1
7 joystick A, button 2
10 joystick B, button 1 <- recommended
14 joystick B, button 2
For the second type of switch: (Turbo Button...): Connect one end of the
resistor to pin XX, the other end to pin 4 of the game port connector. Pin XX
is also connected to one pin of the switch. The other pin of the switch is
connected to pin 1 of the game port. Note that here the resistor has to be
4,7kOhm.
For the game port, you should know that EVERY time you press (and hold) one
joystick's fire button, WatchCat is activated. We only say this because some
people are said to play games under OS/2... In this case we recommend to use
one of joystick B's buttons as the WatchCat switch (or build a connector on the
game port that uses the corresponding pin).
ΓòÉΓòÉΓòÉ 7.5. Configuring WatchCat ΓòÉΓòÉΓòÉ
Configuring WatchCat has become easier. You can use the program itself to do
so. If you change any settings (sort, etc.) through a menu point, this
parameter is changed until the next start of WatchCat only.
If you want to change a parameter persistently (over boot time) chose Options
... from the Options menu.
This window looks similar to this:
ΓòöΓòíΓûáΓò₧ΓòÉΓòíOptionsΓò₧ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòíΓò₧Γòù
ΓòæStart-up windows: Γòæ
Γòæ [ ] Proc-info [ ] Threads [ ] Libraries Γòæ
Γòæ [ ] Semaphores [ ] Shared Mem Γòæ
Γòæ ( ) Modules () Processes ( ) PM Γòæ
Γòæ Γòæ
ΓòæSort: [ ] invers sorting Γòæ
Γòæ Modules: ( ) type ( ) name ( ) pid () structure Γòæ
Γòæ Processes: ( ) type ( ) name ( ) pid () structure Γòæ
Γòæ PM-Processes: ( ) type ( ) name ( ) pid () structure Γòæ
Γòæ Γòæ
ΓòæOther: Γòæ
Γòæ path: ( ) full () names only Γòæ
Γòæ lines: () 25 ( ) 43 ( ) 50 Γòæ
Γòæ color: () color ( ) mono Γòæ
Γòæ Γòæ
ΓòæColor: Γòæ
Γòæ [Frame ] [white ] on [dark blue ] Γòæ
Γòæ Γòæ
Γòæ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γòæ
Γòæ Γöé Save Γöé Γöé Change Γöé Γöé Cancel Γöé Γòæ
Γòæ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γòæ
ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
Change anything that requires to be changed... If you select Save, all Settings
will be saved and restored the next time WatchCat is started. If you select
Change, all system parameters are changed, but they are not saved. Last but not
least, if you select Cancel, the window is closed without any action.
The parameters are saved in a file called watchcat.ini. This file is
not an OS/2-PM standard ini-file. It is not required that this file
exists. If the file does not exist, WatchCat uses the default values.
If you have any problems because you changed parameters the wrong
way, just delete this file. (It is placed in the directory where the
device driver is installed).
As you can see, there are three major sections:
Start-up windows: You can select between one and three windows that should be
opened automatically on program start. You can also decide whether the default
view of the main window is a process list, a complete module list or just the
PM-programs.
Sort: For any of these three types, you can select a sort criterion. You can
sort by module name, module type, process id or structure.
In the last section you can decide whether all module names should be
displayed with full path, how many lines you want to have and whether you need
color or not.
ΓòÉΓòÉΓòÉ 7.6. Using the WPS object ΓòÉΓòÉΓòÉ
This chapter describes how to use the Workplace Shell object:
The context menu
The "Option" page
The "Hotkey" page
The "Window" page
Note: The WatchCat object allows the user to activate WatchCat and to
change some global settings. WatchCat is started by the CONFIG.SYS.
Therefore there is no need to put this object into the start-up
folder.
Note: In contrast to WatchCat 1.x, settings like sort, ... can be
done from the WatchCat program (not the object).
ΓòÉΓòÉΓòÉ 7.6.1. The context menu ΓòÉΓòÉΓòÉ
The context menu of WatchCat looks like this:
There are two views for WatchCat. Select them by Open. Either you can activate
a detached version of WatchCat (which is started by the CONFIG.SYS) or you can
start a new windowed instance on the Workplace Shell. (The default can be
changed on the Settings window page.)
If you need help, click on WatchCat in the Help menu. This will load this
online documentation.
The last menu point allows the user to temporarily switch WatchCat on/off. The
current state is represented by the icon (you try it...).
ΓòÉΓòÉΓòÉ 7.6.2. The "Options" page ΓòÉΓòÉΓòÉ
The Options page looks like this:
This page allows the user to switch on or off a device specified in the
CONFIG.SYS. In the case above the driver watchcat.sys was called with the
parameter KEYB (or without any parameter). Therefore you can turn on or off
activating WatchCat by the keyboard.
All other devices (in this case Game, LPT, COM) are not selectable (disabled).
Note: Per default (if you selected easy installation) only the
keyboard can be used to activated WatchCat. Therefore only the
keyboard can be turned on or off. All other items are not selectable
(disabled).
ΓòÉΓòÉΓòÉ 7.6.3. The "Hotkey" page ΓòÉΓòÉΓòÉ
The Hotkey page looks like this:
This page does not appear if you have not selected hotkeys in the CONFIG.SYS.
You can easily change the hotkey here (e.g. if you have compatibility problems
with other programs).
If you have problems to activate WatchCat via device driver (this may happen in
case of a bus mouse, or with the Notebook APM), you can turn off "use device
driver" (like above). This selection does not employ the driver, which may
solve some problems. On the other hand, there may be situations where WatchCat
does not pop up when it is not activated by the driver. When turning off the
driver, it is also impossible to activate WatchCat from DOS or Windows.
Note: When turning off the driver, the line
RUN=x:\watchcat\wccad.exe
must be found in the CONFIG.SYS which is not the default. Instead the
install program inserts a REMed line. So you must remove the "REM".
Note: When WatchCat is activated via the driver, the parameters can
be changed "live". When WatchCat is activated by wccad, it is
necessary to reboot.
Note: WatchCat will "remember" the changed Hotkey after rebooting
only if you did not specify a hotkey in the config.sys (which is the
default). It is recommended to use the driver watchcat.sys without
any parameter, if possible.
ΓòÉΓòÉΓòÉ 7.6.4. The "Window" page ΓòÉΓòÉΓòÉ
The Window page looks like this:
Select a default view here. A double-click on the WatchCat object will either
activate a detached version of WatchCat or will start a windowed version
depending on your choice here. This is the only boot persistent choice. (It
will also be saved by DeskMan/2).
In the above case, a double-click on the WatchCat item would start a second
instance of WatchCat in a window.
ΓòÉΓòÉΓòÉ 8. Activating WatchCat ΓòÉΓòÉΓòÉ
The way you activate WatchCat depends on your configuration. If you have chosen
the default configuration, simply press Ctrl-Alt-W to activate the program.
Note: If you do not want to use a hotkey, you can also build a simple
switch for the parallel port or the serial port, or activate WatchCat
by a joystick
The monitor is switched to text mode and WatchCat appears. Use the cursor keys
or the mouse to select a process or module.
If you want to kill an application, press k. To switch to a process (if
possible), press Enter. To open a shell, press space. To get a context menu,
press the right mouse button. You can also select items from the main menu.
New feature: When activating WatchCat a second time before it pops
up, the pmshell is killed. This helps WatchCat to popup in some
situations. Also on a second activation the C-A-D feature (if
installed) of the registered version is disabled, so Ctrl-Alt-Del
results into regular booting.
Note: Users of a bus mouse may have a "jumping mouse pointer" when
activating WatchCat via the driver. Users of a APM-Notebook may find
out that their notebook does not go into sleeping mode. In both cases
it may be useful to activate WatchCat in another way. See information
about the WPS object for more information.
ΓòÉΓòÉΓòÉ 9. Understanding WatchCat ΓòÉΓòÉΓòÉ
The following sections explain how to use WatchCat and how to navigate through
the supplied information.
ΓòÉΓòÉΓòÉ 9.1. The WatchCat package ΓòÉΓòÉΓòÉ
This section explains how to use WatchCat (the main package).
ΓòÉΓòÉΓòÉ 9.1.1. Using WatchCat ΓòÉΓòÉΓòÉ
The usage of WatchCat is very similar to PM. You can use either the mouse or
the keyboard to navigate through the windows. The main menu is at the top of
the screen. A status line is visible at the bottom. The rest of the screen is
filled with information windows. You can have between 1 and 4 windows visible
at the same time.
The main difference between the way to use WatchCat and the way to use (native)
PM is that you activate a window by just moving the mouse onto it. You don't
have to click explicitly on it. (BTW: This is the way of activating windows
when you're using FeelX ...)
The active window has a double border, while all other windows have a single
border.
The main idea is that there is one "main" window (this is the process or module
window). All other windows show information related to one item of the main
window.
As a consequence, the process window cannot be closed. You can select a process
/ module by using the mouse or keyboard. The information in any other (most)
windows depend on this selection! For example the Library window does not list
all the libraries in the system but only those that are used by the current
selected process.
Note: All windows have a selection bar but only the selection in the
process / module list has a meaning. The other windows have a
selection bar only for easier usage.
To learn how to use WatchCat, just play around.
Note: It is not dangerous to play around with WatchCat. All you need
to know is that "K" kills a program, "Enter" switches to the selected
program if possible, "ESC" leaves the WatchCat screen (but does not
end WatchCat).
ΓòÉΓòÉΓòÉ 9.1.2. The main menu ΓòÉΓòÉΓòÉ
The first menu item (called Info) can be used to select what kind of
information is displayed. The topmost menu item affects the information in the
main window. You can view either all modules in the system (these are Device
Drivers, DLL, Dos and OS/2 programs, ...) or only the processes (in fact
programs) or just the PM-programs (most often responsible for system hangups).
The following items in the menu Info open new windows with additional
information about the currently selected process.
The Action menu allows special actions. You can open a shell with the first
menu point. The second menu point forces WatchCat to redraw the entire screen
and update the information. You can kill a process with the third menu item.
Sending WM_QUIT does make sense only for PM programs. Sending WM_QUIT
terminates the PM program, but not with as much brutality as killing the
application. If this menu item does not work, you must kill the application.
The Action menu now supports a windowed command shell (Demo in the unregistered
version), and an interface to the process manipulation center (menu item
"enhanced kill"). You can also shutdown the system from WatchCat or just
reboot. The system shutdown will flush all buffers. There is a new menu item
called "Kill all". Use this menu item to kill by name. (E.g. select cmd.exe and
use this item to kill all cmd.exe)
The Options menu lets you change a lot of settings. Please note that it is
necessary to select options via the menu item Options ... to save them
permanently.
The Add-On menu contents depend on the WatchCat special function DLL. You can
easily write your own WatchCat module. Any window created with an external DLL
is listed here.
If you forget something about keys and usage, select Help to get help.
Note: WatchCat does not support overlaying windows. This restriction
implies that the windows are not updated while a menu is visible.
ΓòÉΓòÉΓòÉ 9.1.3. The "Process list" window ΓòÉΓòÉΓòÉ
This is the most important window. This window lists all processes or all
modules currently loaded / running in the system.
ΓòöΓòÉ[Process list]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
ΓòæMOD TYPE PID CPU NAME Γòæ
ΓòæΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ Γòæ
Γòæprg PM 12 83% OS2CHESS.EXE (OS/2
Γòæprg PM 15 PULSE.EXE Γûæ
Γòæprg Vio 16 CMD.EXE (WatchCat.Γûæ
Γòæprg Vio 19 CMD.EXE (T.EXE) Γûô
Γòæprg Vio 1A CMD.EXE (CMD.EXE) Γûæ
Γòæprg PM 1E VIEWDOC.EXE (Infor
ΓòÜΓûôΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓò¥
The MOD column gives the type of the module: prg means program, while mod
means any other module.
The TYPE column gives more information about the module type. Currently the
following types are supported: BaseDev - base device driver, Dev - physical
device driver, VDev - virtual device driver, IFS - installable file system,
DLL - Dynamic link library, Font - font, VDM - virtual DOS machine, detach -
detached process, FS - full screen OS/2 program, Vio - windowed program, PM -
Presentation Manager program.
The PID column represents the process id of the module in hexadecimal
notation. This id is available only for processes.
The CPU column gives information about the relative CPU usage by all
processes. This is not an exact value, but an estimation. Please note that
this value is relative. It may look like WatchCat is very CPU-intensive. This
is not true. If WatchCat is the only thing running, it is trivial that it
alone uses the CPU. Try to run pulse and you'll see that pulse will get much
more CPU time than WatchCat itself.
The Name column displays the name and optionally the path of the module.
Since DOS is more or less only a program loader it cannot provide
information about processes, etc. Of course the virtual DOS machines
inherit this problem. Therefore an OS/2 process like WatchCat can get
the information concerning a virtual DOS machine. But it is
impossible (except with a lot of technical tricks) to get information
about the programs running in the DOS session. To provide more
information about the DOS session than just "VDM", WatchCat tries to
extract the window title of the VDM. This might be a hint about what
program is running in the VDM.
Getting the window name is not a CPU-trivial task for WatchCat.
Therefore this information is updated very, very rarely.
ΓòÉΓòÉΓòÉ 9.1.4. The Process info - window ΓòÉΓòÉΓòÉ
This window provides a little more detailed information about a process. We
believe this is self-explanatory.
Γòö[Γûá]ΓòÉ[Process details]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
Γòæpath: G:\OS2\ Γòæ
Γòæname: CMD.EXE Γòæ
ΓòæProcess id: 19 Γòæ
ΓòæParent pid: 5 Γòæ
ΓòæSession: 27 Γòæ
Γòæhandle: 0448 Γòæ
ΓòæStatus: running Γòæ
Γòætype: Windowable (32 bit) Γòæ
Γòæ Γòæ
ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
ΓòÉΓòÉΓòÉ 9.1.5. The Threads window ΓòÉΓòÉΓòÉ
Γòö[Γûá]ΓòÉ[Threads]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
Γòæ ID PRIO STATUS BLOCKID Γòæ
ΓòæΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γòæ
Γòæ 1 200 blocked fffe0a4e Γòæ
Γòæ 2 300 running fff7c2db Γòæ
Γòæ 3 200 blocked 62800ee Γòæ
Γòæ 4 301 blocked fffe0a6e Γòæ
ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
The ID column lists the thread ID.
The PRIO column shows the priority of a thread. This value is given in hex.
The priorities have the following meaning:
PRIO Explanation
ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
1xx low priority
2xx normal priority
4xx foreground server
3xx time critical
The STATUS column gives information about the thread's state. A thread can be
running (but there is only one WatchCat thread running when this info is
displayed...), be blocked (then the BLOCKID column gives additional
information), a thread can also be ready (this means that the thread is not
waiting but will be running as soon as it gets CPU time). If a thread is
frozen, then the application is loaded with the preload-feature of OS/2 (or it
is thread is suspended).
Pressing the right mouse button (or Shift F1O) displays a thread context menu.
Use it to unblock any thread. This might be useful in some situations. Please
be careful, because it might damage the application.
New feature: With any version of WatchCat you can unblock a thread
via a thread context menu. This will resume the thread and may be
useful in certain situations of testing.
New feature: With the 1st Aid package of WatchCat you have the
process manipulation center. For PM applications and many windowed
programs each thread has an extended context menu where you can
simply kill, suspend or resume any thread or even change its
priority!! (This is part of the registered version only.) of testing.
ΓòÉΓòÉΓòÉ 9.1.6. The Libraries window ΓòÉΓòÉΓòÉ
Γòö[Γûá]ΓòÉ[Dynamic Link Libraries]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
Γòæmod DLL(32) DOSCALL1.DLL Γòæ
Γòæmod DLL(32) KBDCALLS.DLL Γòæ
Γòæmod DLL(32) MOUCALLS.DLL Γòæ
Γòæmod DLL(32) MSG.DLL Γòæ
Γòæmod DLL(32) NLS.DLL Γòæ
Γòæmod DLL(32) VIOCALLS.DLL Γòæ
ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
The library window just lists all the dynamic link libraries (DLL) used by
this process. Please note that this list is directly associated with the
currently selected process.
ΓòÉΓòÉΓòÉ 9.1.7. The Semaphores window ΓòÉΓòÉΓòÉ
Γòö[Γûá]ΓòÉ[Semaphores]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
ΓòæNAME INDEX REF REQ FLΓòæ
ΓòæΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇ ΓöÇΓöÇΓòæ
Γòæ\SEM\LKNED001.SEM 53AC 1 0 0
Γòæ\SEM\LKNED002.SEM 53B2 1 0 0 Γûæ
Γòæ\SEM\LKNED003.SEM 53B8 1 0 0 Γûæ
Γòæ\SEM\PMHDERR.SEM 53CA 1 0 2 Γûæ
Γòæ\SEM\SMGCONT.SEM 53BE 2 0 0 Γûæ
Γòæ\SEM\VIOPOPUP 539A 19 0 0 Γûô
Γòæ\SEM\VIOPRTSC 53A0 16 0 8
ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
This window has the least information value. It lists all 16-bit semaphores
that are used by the current selected process.
ΓòÉΓòÉΓòÉ 9.1.8. Shared Memory window ΓòÉΓòÉΓòÉ
Γòö[Γûá]ΓòÉ[Shared Memory]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
ΓòæNAME SIZE SEL Γòæ
ΓòæΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇ Γòæ
ΓòæPMDRAG.MEM : 4096B 960FΓòæ
ΓòæPMGLOBAL.MEM : 4096B 961FΓòæ
ΓòæPULSECTL : 48K 893FΓòæ
Γòæ Γòæ
Γòæ Γòæ
Γòæ Γòæ
Γòæ Γòæ
ΓòÜΓûôΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓò¥
This window lists all shared memory segments used by a process. It also shows
the size of the memory block, the selector and the handle.
ΓòÉΓòÉΓòÉ 9.2. The process manipulation center ΓòÉΓòÉΓòÉ
New feature: This is a new feature of the 1st Aid Package of WatchCat
2.1. After installing this package there are additional entries in
the context menu of most processes and threads.
o processes:
1. DosExit. This aborts a process in an orderly manner.
2. Breakpoint. Choose this menu point to kill a process.
3. Suspend process. This halts a process.
4. Remove embedded thread. This choice removes the embedded thread. These
options are no longer available after this choice.
o threads:
1. Kill thread. Kill a certain thread.
2. Change priority. Change the priority of a process.
3. Suspend/Resume thread. Suspend or resume a thread.
In addition this package increases the size of the message queue to 100 per
queue.
This is a powerful feature, but may hang the PM or cause a deadlock.
Do not use this feature until you're absolutely sure what you are
doing.
ΓòÉΓòÉΓòÉ 9.3. Using remote WatchCat ΓòÉΓòÉΓòÉ
This section explains how to use WatchCat. After correct installation, simply
start WatchCat with the parameter /remote. You need a serial connection between
two PC or a PC and a terminal. You can see WatchCat running on both, the local
PC and the terminal. You can use WatchCat from the terminal.
ΓòÉΓòÉΓòÉ 9.4. Activate remote WatchCat ΓòÉΓòÉΓòÉ
Run WatchCat with the parameter /remotepopup. Now activate WatchCat on the
local PC and use the terminal to view information or to kill a certain process,
change the priority, etc.
ΓòÉΓòÉΓòÉ 9.5. The C-A-D package ΓòÉΓòÉΓòÉ
New feature: The C-A-D is introduced with WatchCat 2.1. It is part of
the registered version only.
You can use the WatchCat package to disable Ctrl-Alt-Del, or to activate
WatchCat on Ctrl-Alt-Del. The C-A-D package also introduces a shutdown folder
(like the start-up folder), which contents is executed on shutdown. The
shutdown option of the Desktop is replaced, s. t. you can force the C-A-D
package to kill all empty OS/2 shells before shutting down the system. (No
annoying "Do you want to close ...") any longer!
ΓòÉΓòÉΓòÉ 9.5.1. Configuring Ctrl-Alt-Del ΓòÉΓòÉΓòÉ
Open the desktop settings (right mouse button on the desktop, -> Settings). Now
select the following page:
When selecting the first check box, C-A-D asks for confirmation before shutdown
(which is highly recommended). Killing the empty OS/2 shells is recommended
also. An OS/2 shell is empty when no program is running in it. You can also
kill all DOS (VDM) shells. But be careful. A running DOS program would be
killed.
Use the second page
to use the C-A-D package to configure WatchCat to
1. reboot
2. ignore Ctrl-Alt-Del
3. activate WatchCat (default).
(this requires full installation of the C-A-D package).
OS/2 experts may install only parts of the C-A-D package to disable
Ctrl-Alt-Del only in DOS Shells for example. This will not be explained here.
Instead, it is recommended to use the WPS object and a full installation.
Experts may run wccad -? in an OS/2 and a DOS box for more information.
Please note that the desktop menu has a new item:
This is a quick access to alter the Ctrl-Alt-Del state, if you do want to open
the Desktop settings.
Note: There is no additional shutdown option. Instead: You can select
the standard shutdown (in the above menu) to activate the C-A-D
shutdown.
Note: This package is compatible with other desktop extentions like
Extended desktop by Dan Campbell, a very useful tool.
Note: You can also run shutdown from the command line. It is
recommended to use the C-A-D shutdown program, because it is
capabable of running the shutdown folder.
If you are writing your own shutdown program, use the following code
sequence to run the shutdown objects and shutdown:
BOOL folder()
{
HOBJECT h;
h=WinQueryObject((PSZ)"<WP_SHUTDOWN>");
if (!h)
return FALSE;
if (!WinSetObjectData(h, "OPEN=SHUTDOWN"))
return FALSE;
return TRUE;
}
ΓòÉΓòÉΓòÉ 9.5.2. The shutdown folder ΓòÉΓòÉΓòÉ
The shutdown folder is created (with instcad) in the OS/2 system folder, where
you can also find the startup folder. Simply drag a program object onto the
folder. Each time you run shutdown.exe or select shutdown from the desktop
menu, all programs in the shutdown folder are started. The system will not
continue to shutdown until all programs are started.
Your system folder may look like this:
You can drag program objects or shadows of program objects into the folder:
Note: You can drop only program icons or shadows of program icons on
the startup folder.
To run a ReXX script, create a program icon with a * (asterisk) in th
field of the program name. Enter the ReXX script as a parameter.
To kill programs before the "Do you want to end ..." message appears,
use the kill program (part of the C-A-D package). E.g. kill clock.
The Shutdown folder currently has the following limitations:
1. Only programs can be started, not WPS-objects.
2. The object is not marked as in-use.
3. It is non-determined, which object is called first
ΓòÉΓòÉΓòÉ 9.5.3. The shutdown program ΓòÉΓòÉΓòÉ
You can run shutdown per program (or create a WPS object for it). Just run
shutdown for a complete shutdown, or run shutdown -? for a complete description
of its parameters
ΓòÉΓòÉΓòÉ 9.5.4. The Ctrl-Alt-Break feature ΓòÉΓòÉΓòÉ
Note: This feature is available in the 1st Aid Package only. After
installing the C-A-D package, the following hotkeys are available:
1. For DOS sessions: Ctrl-Alt-Break will interrupt the current program and go
back to the DOS prompt. This is very brutal and may not give back all
DOS-memory but may be useful in some situations (and is available for
stand-alone-DOS also).
2. For any OS/2 program: Ctrl-Alt-K will kill the currently running process,
no matter whether the system is in Full-Sceen or PM mode.
ΓòÉΓòÉΓòÉ 10. Running WatchCat from the command prompt ΓòÉΓòÉΓòÉ
Don't forget that you can also start WatchCat from the command prompt. We
distinguish between two modes:
o If you detach WatchCat (i.e. type detach watchcat at the command prompt),
WatchCat is activated by hotkey. This is the mechanism when WatchCat is
added to the CONFIG.SYS.
o If you start WatchCat like any other program (by typing "WatchCat" at the
command prompt) it does not switch to Full-Screen, and it provides all
information immediately. You don't have a hotkey for this WatchCat session.
Note: You can have one detached and one or more started (windowed)
WatchCat instances at the same time.
Note: WatchCat supports a few options
ΓòÉΓòÉΓòÉ 11. Using external WatchCat modules ΓòÉΓòÉΓòÉ
On start-up, WatchCat looks for DLLs in its directory and tries to find out
whether they are modules for WatchCat or not. If a DLL is a WatchCat module it
is integrated into WatchCat as if it were part of the program.
The advantages are:
o You can delete all unneeded modules
o You can write your own modules
o It is easier to extend WatchCat
Currently there are three modules. wcprintf for debugging, startpgm for
starting programs in a WatchCat window and tracevio for tracing the calls to
the viocalls DLL.
ΓòÉΓòÉΓòÉ 11.1. Using the wcprintf module ΓòÉΓòÉΓòÉ
This module allows the user to print text in a WatchCat window.
All you have to do is to write into the pipe \PIPE\WATCHCAT. This can also be
done from DOS sessions.
Example: type read.me >\PIPE\WATCHCAT
If you are writing a PM program and you have trouble with the message
processing, these routines might be useful because they have no additional
message overhead. Examples are the following situations:
o You want to hook the message queue. Sending a text string to another window
increases (potentially) the message processing.
o You need information about all mouse movement or mouse clicks in your
application. Obviously moving the mouse to another window to display
debugging infos would result in "wrong" messages.
o Your application hangs up the PM and you don't know why. You can print
debugging strings, but you are not sure whether all debugging strings are
displayed.
WatchCat can help because it can be activated without key and mouse (by
hardware switch or your program) and it is full-screen. Therefore it works
even if the PM is hung.
If you want to use this module simply include wcapi.h. Then #define WCDEBUG. A
call to wcprintf(char *format, ...) pipes its output into a WatchCat window.
If WCDEBUG is not set and optimization is turned on, the function call is
optimized away.
You can activate WatchCat from the program by calling WatchCat().
You must link your application with wcatdeb.lib. It is necessary that
wcatdeb.dll is in the same directory as watchcat.exe
ΓòÉΓòÉΓòÉ 11.2. Using the startpgm module ΓòÉΓòÉΓòÉ
Use this module for starting programs and redirecting stdout of the program
into a WatchCat window. You need a small description file to use this module.
This file must be called: wcatpgm.ini. It's in the same directory with
watchcat.sys and watchcat.exe.
Let us explain the following example:
"Hardware tree", "Show hardware tree", "rmview.exe /hw", windowed
"qsystem ", "Show system configuration", "qsystem.exe", windowed
"Exehdr ", "Show detailed module information (exehdr)", "exehdr.exe %p", update
Use one line per program. The first entry specifies a title. This title is used
in the menu Add-On and as a window name. It is recommend to pad spaces up to 10
characters. The next entry is the help text, shown on the status line. Specify
the full command line as the 3rd parameter. Please don't forget .exe and please
avoid unnecessary spaces. The last parameter is most interesting. Specifying
windowed will start your program once. Specifying update will start the program
evertime a new process is selected. This is especially interesting in
conjunction with %p. This macro is replaced with the path and program name.
In the example, the first line will start rmview a standard (but undocumented)
OS/2 program. qsystem is a tool by N Couch/J Muir for detecing the hardware
configuration. This program can be found on the DevCon CD. exehdr is part of
the Toolkit. It displays interesting information about Modules (segments,
exported names, ...).
ΓòÉΓòÉΓòÉ 11.3. Using the tracevio module ΓòÉΓòÉΓòÉ
Move tracevio.dll into the WatchCat path to use the tracing feature. This
requires the process manipulation center to be installed.
Select the package from the Add-On menu and see which VIOCALL function is
called by a certain application. Very usyful for debugging.
ΓòÉΓòÉΓòÉ 12. Interfacing WatchCat ΓòÉΓòÉΓòÉ
There are two ways of interfacing to WatchCat. First, your program can activate
WatchCat and second, you can write your own WatchCat module and write directly
into a WatchCat window.
The API is still under development. If one of the functions does not work as
expected or you need a function not provided now, please contact us. (All
functions were developed with IBM C/Set++; they are portable and partly tested
for Borland, EMX, Watcom; cf. testmod.c)
ΓòÉΓòÉΓòÉ 12.1. Activating WatchCat from a program ΓòÉΓòÉΓòÉ
There are two ways to activate WatchCat from your own program:
o Use the following code sequence:
#include INCL_DOSSEMAPHORES
...
#include <os2.h>
...
HEV hev;
...
if (!DosOpenEventSem((PSZ)"\\Sem32\\WatchCat", &hev))
{
DosPostEventSem(hev);
DosCloseEventSem(hev);
}
o Link with wcatdeb.lib, and use the following code sequence:
#include <wcapi.h>
...
WatchCat();
ΓòÉΓòÉΓòÉ 12.2. Writing your own DLL ΓòÉΓòÉΓòÉ
Writing your own WatchCat DLL is not difficult. WatchCat searches its own
directory for any WatchCat DLL.
A WatchCat DLL is a dynamic link library that contains at least the functions
WCatRegister and WCatInit. More specifically, WatchCat does the following: Call
WCatRegister(), call WCatInit(), start WCatThread() as a thread, if present.
To make it easier, you have to compile dllbase.c and link it with your
application. Then you have access to all functions with prototypes in wcapi.h.
dllbase contains WCatRegister and initializes the "system".
Your own written module should contain at least WCatInit. Use this function to
create all windows you need (use WCatBegWindow). You can also insert headlines
(use WCatSetTitle). Don't call WCatBegWindow later.
The WCatThread function is started as a normal-priority thread. You can use all
functions here, too.
WatchCat is event-driven. If an event occurs (mouse, keyboard, ...) WatchCat
calls a specific DLL-function (if present).
Your function is called with a void* parameter. This is a window handle
identical to one allocated with WCatBegWindow. It is your job to find out if
this handle belongs to a window which message you want to intercept. Your
function can return either TRUE (non-zero) or FALSE. TRUE indicates that the
parent is not called, so the default action is not done. On the other hand,
FALSE indicates that the default action has to be done.
Currently the following functions are supported:
int WCatKey(void *win_handle, int scan, int ascii, int shift)
win_handle window handle
scan Make-Code
ascii Ascii-Code or 0
shift 0=no shift, 2 = Ctrl, 4 = Alt
int WCatB1Click(void *win_handle, int x, int y)
win_handle window handle
x x-coordinate (relative to window)
y y-coordinate (relative to window)
int WCatSelected(void *win_handle, int i)
win_handle window handle
i line (0-based)
int WCatInformIfProcessChanged(void *win_handle, int i)
win_handle window handle
i line which is selected now
WCatTimer()
called every second
WCatThread()
called as a thread
Please note that your DLL can provide the above functions. They are called by
WatchCat. Do not call the functions yourself. On the other hand all above
functions are optional. You do not need to provide any of them.
Example: See the testmod.c file for an example.
Writing a DLL for WatchCat is not very difficult, but not trivial
either. Please read the documentation carefully to see if any library
initialization is required. When one of the above functions is called
you can assume that this is done in the WatchCat process context.
Note that your DLL may be called from several WatchCat instances (The
example ignores this problem). In the WatchCat context you can call
all API functions except WCatBegWindow. If the function is called
from outside the WatchCat context, you are not allowed to call this
API.
ΓòÉΓòÉΓòÉ 12.3. API C-Reference ΓòÉΓòÉΓòÉ
The following C-reference describes all functions that can be used in your DLL.
Note: To use these functions, it is necessary to compile dllbase.c
and link it to your DLL.
Note: These functions can only be used in the WatchCat-context. Never
call these functions from another program or a DLL used by another
program. This would definitely result in a protection violation.
ΓòÉΓòÉΓòÉ 12.3.1. WCatBegWindow ΓòÉΓòÉΓòÉ
Prototype:
void * _System WCatBegWindow(char *title, char *Menuentry,
char *description, void (*fn)());
Parameters:
char *title The title of the window
char *Menuentry This string appears in the Add-On menu
char *description Your text for the status line
void (*fn)() An action function associated with the menuitem
Returns: A window handle of void *
Notes: Use this function to add a window to the Add-On submenu. Currently it
is impossible to create windows dynamically. Therefore it is absolutely
necessary to create all windows on start-up (i.e. in function WCatInit()).
You should save the handle that is returned. It is used for all operations
and should not be altered. The function taken as the last parameter is
called whenever the associated menuitem is selected. The intuitive action
is to show a window (see example below) - but it is not necessary to do
so. You can also ignore the window handle returned by WCatBegWindow and do
some some other action when a menu item is selected.
Example:
void *win=0; /* window handle */
void show()
{
WCatShowWindow(win);
WCatShowWindow
}
BOOL _Export _System WCatInit()
{
...
win=WCatBegWindow("My title",
"My menu entry",
"A very long description",
show);
...
return TRUE;
}
ΓòÉΓòÉΓòÉ 12.3.2. WCatClearWindow ΓòÉΓòÉΓòÉ
Prototype:
void _System WCatClearWindow(void *win);
Parameters:
void *win The window handle (returned by WinBegWindow)
Returns: no return value
Notes: This function simply clears the window.
Example:
void *win; /* window handle */
...
if (WindowShouldBeCleared==TRUE)
WCatClearWindow(win);
ΓòÉΓòÉΓòÉ 12.3.3. WCatShowWindow ΓòÉΓòÉΓòÉ
Prototype:
void _System WCatShowWindow(void *win);
Parameters:
void *win The window handle (returned by WinBegWindow)
Returns: no return value
Notes: Use this function to show the window. Nothing happens if the window is
already visible.
Example:
void *win; /* window handle */
...
void show()
{
WCatShowWindow(win);
}
ΓòÉΓòÉΓòÉ 12.3.4. WCatAddLine ΓòÉΓòÉΓòÉ
Prototype:
void _System WCatAddLine(void *win, char *text);
Parameters:
void *win The window handle (returned by WinBegWindow)
char *text A string that contains one line (excluding \n).
Try to use strings with less than 200 chars.
Returns: no return value
Notes: This function adds a line containing text to the window associated
with the window handle win This function does not scroll the contents of
the window. (cf. WCatAddLineAndScroll)
Example:
void *win; /* window handle */
...
WCatAddLine(win, "This is a a new line");
ΓòÉΓòÉΓòÉ 12.3.5. WCatAddLineAndScroll ΓòÉΓòÉΓòÉ
Prototype:
void _System WCatAddLineAndScroll(void *win, char *text);
Parameters:
void *win The window handle (returned by WinBegWindow)
char *text A string that contains one line (excluding \n).
Try to use strings with less than 200 chars.
Returns: no return value
Notes: This function adds a line containing text to the window associated
with the window handle win This function does scroll the contents of the
window if necessary (cf. WCatAddLine)
Example:
void *win; /* window handle */
...
WCatAddLineAndScroll(win, "This is a a new line");
ΓòÉΓòÉΓòÉ 12.3.6. WCatChangeLine ΓòÉΓòÉΓòÉ
Prototype:
void _System WCatChangeLine(void *win, int line, char *text);
Parameters:
void *win The window handle (returned by WinBegWindow)
int line The line in the window (0-based)
char *text The new text string that replaces the old line
(no \n)
Returns: no return value
Notes: This function can be used to replace a specific line.
Example:
void *win; /* window handle */
...
/* Change the first line */
WCatChangeLine(win, 0, "This is the new first line");
ΓòÉΓòÉΓòÉ 12.3.7. WCatPrintf ΓòÉΓòÉΓòÉ
Prototype:
void _System WCatPrintf(void *win, char *format, ...);
Parameters:
void *win The window handle (returned by WinBegWindow)
rest usage exactly like printf
Returns: no return value
Notes: This is a very easy interface to print strings in a window. The line
is added as the last line without scrolling.
Example:
void *win=0; /* window handle */
char *name1="Bill";
char *name2="Lou";
...
WCatPrintf(win, "Hi %s, my name is %s", name1, name2);
ΓòÉΓòÉΓòÉ 12.3.8. WCatChangePrintf ΓòÉΓòÉΓòÉ
Prototype:
void _System WCatChangePrintf(void *win, int line, char *format, ...);
Parameters:
void *win The window handle (returned by WinBegWindow)
int line The line to be changed (0-based)
rest usage exactly like printf
Returns: no return value
Notes: This is a very easy interface to print strings in a window. A specific
line is replaced.
Example:
void *win=0; /* window handle */
char *name1="Bill";
char *name2="Jim";
...
WCatChangePrintf(win, 0, "Hi %s, my name is %s", name1, name2);
ΓòÉΓòÉΓòÉ 12.3.9. WCatQueryPID ΓòÉΓòÉΓòÉ
Prototype:
unsigned long _System WCatQueryPID();
Parameters:
no parameters
Returns: returns the process id of the currently selected process. A value of
-1 indicates that no process but some other module is selected.
Notes: Use this function to query what process is currently selected in the
process/module list.
Example:
ULONG pid;
pid=WCatQueryPID();
ΓòÉΓòÉΓòÉ 12.3.10. WCatQueryHandle ΓòÉΓòÉΓòÉ
Prototype:
unsigned long _System WCatQueryHandle();
Parameters:
no parameters
Returns: returns the handle of the currently selected process or module.
Notes: Use this function to query what process or module is currently
selected in the process/module list.
Example:
ULONG handle;
char name[50];
pid=WCatQueryHandle();
if (DosQueryModuleName(handle, sizeof(name), name))
{
if (stricmp(name, "watchcat.exe")==0)
WCatPrintf("it's me! it's me!");
}
ΓòÉΓòÉΓòÉ 12.3.11. WCatSetTitle ΓòÉΓòÉΓòÉ
Prototype:
void _System WCatSetTitle(void *win, int i, char *text);
Parameters:
void *win The window handle (returned by WinBegWindow)
int line Title line (0 based)
char *text Headline
Returns: no return values
Notes: Use this function to generate a headline for a window.
Example:
void *win; /* window handle */
...
WCatSetTitle(win, 0, "PID remark");
WCatSetTitle(win, 1, "ΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ");
ΓòÉΓòÉΓòÉ 12.3.12. WCatPopup ΓòÉΓòÉΓòÉ
Prototype:
void _System WCatPopup();
Parameters:
no parameters
Returns: no return values
Notes: Forces WatchCat to be popped up. Do not use this function from
another program!
Example:
WCatPopup();
ΓòÉΓòÉΓòÉ 12.4. API C++-Framework-Reference ΓòÉΓòÉΓòÉ
Using WatchCat from C++ is even more simple. You need small experience with C++
and the framework-idea and some experience with programming DLL.
WatchCat uses a binary-compatible compiler-independent (but curently not
language-independent) object model.
WatchCat is currently based on C++. There are plans to support Direct-to-SOM
when the right DTS-compilers become available.
How to program with the WatchCat window framework?
1. First #include wcapi.h in your file. Overload one of the two classes
WCatWindow (a "normal" window) or WCatListbox (a listbox like most other
currently used windows).
o Just have a look at the wcapi.h file. The class definitions are almost
self-explaining. The class hierarchy does currently not reflect the
"real" hierarchy used in WatchCat.exe (where it not as simple), but there
is no need to care about it.
o WCatBaseWindow is an abstract base class and cannot be instanciated.
2. Specialize your class by overriding some methods. Each method that is not
overridden will have a default meaning.
3. Provide a function call WCInit with C-Linkage (!!) and default _System
linkage, which is called on start-up. Create all windows here with the
overloaded new operator. Currently dynamically created windows are not
supported.
4. Now compile and link with dllpbase.cpp and dllbase.c
You need per-process initialization and multiple data segments.
Please ensure that you have correctly initialized the compiler's
run-time environment.
5. Ensure that the DLL is in the same directory where WatchCat is, or the
environment variable WCATDLL is pointing to the correct path.
6. Run and enjoy.
Example: How to program "hello, world" with WatchCat: How many lines
do you need to write a program the prints "hello, xx" (xx=name of a
process) in a WatchCat window, whenever the user selects a new
process???
Well, here is the program:
#define INCL_DOS
#include <os2.h>
#include <string.h>
#include "wcapi.h"
class Hello : public WCatListbox
{
public:
Hello(char *title, void (* _Optlink fn)(), char *Menuentry=0,
char *description=0)
:WCatListbox(title,fn,Menuentry,description) {}
virtual int processChanged(int i);
};
int Hello::processChanged(int i)
{
char buffer[CCHMAXPATH+10];
strcpy(buffer, "hello, ");
if (0==DosQueryModuleName(WCatQueryHandle(), CCHMAXPATH, buffer+7))
addLineAndScroll(buffer);
return 0;
}
Hello *hello;
void _Optlink fun()
{
hello->show();
}
BOOL WCEXPORT WCSYSTEM WCatInit()
{
hello=new Hello("Hello, world", &fun, " Say hello, world",
"Hello, world example");
hello->show();
return 0;
}
We first declare a new class (=window type) by overloading
WCatListbox. This is a default listbox, except that it prints out a
message when the user selects a new process. So besides a new
constructor, we override processChanged. The new method calls
WCatQueryHandle and detects the name with the OS/2 API
DosQueryModuleName. Without error, we now print out the text "hello,
xxx" with the method addLineAndScroll.
All we need is one pointer per listbox. This is a global variable.
Please note that you need multiple data segments when producing a
DLL. The next step is to provide WCInit(). Don't forget WCEXPORT
WCSYSTEM. Both words are important to ensure C and _System linkage.
We simply create a window with the C++ new-operator here and show it
on start-up. (The user can also select it via the menu.)
As a last thing, we provide a function that is called whenever the
user clicks on our menu entry. All we want to do is to show the
window.
Ready. Now we need to compile our WatchCat application. First we
create the following module definition file for our linker:
LIBRARY hello INITINSTANCE TERMINSTANCE
DATA MULTIPLE NONSHARED
As you can see we need a per-process initialization, because WCatInit
should be called whenever WatchCat is started. And we need DATA
MULTIPLE, because the global variable hello should be unique to all
processes.
Now we are ready for compiling. For IBM C/Set++ the procedure looks
like this :icc -Rn -Ge- hello.cpp dllpbase.cpp dllbase.c hello.def.
Please consult your compiler manual for more information about
switches and initialization.
VOILA! We're ready. Start WatchCat and enjoy your first WatchCat
application. *** HAPPY PROGRAMMING! ***
ΓòÉΓòÉΓòÉ 12.4.1. key ΓòÉΓòÉΓòÉ
Signature:
int key(int scan, int ascii, int shift)
Type:
This is a callback function that may be overridden to
recognize key-strokes.
Parameters:
int scan; scan code
int ascii; asciii code
int shift; shift state
Returns: return 0.
Notes: This function is called if the user presses a key in the associated
window
ΓòÉΓòÉΓòÉ 12.4.2. selected ΓòÉΓòÉΓòÉ
Signature:
int selected (int i)
Type:
This is a callback function that may be overridden to
recognize if the user selects an item in the listbox.
Parameters:
int i; The item nr. in the process window
Returns: return 0.
ΓòÉΓòÉΓòÉ 12.4.3. processChanged ΓòÉΓòÉΓòÉ
Signature:
processChanged(int i)
Type:
This is a callback function that may be overridden to
recognize if the user selects a process.
Parameters:
int i; nr. in the process listbox
Returns: return 0.
Notes: This functio is called if the user selects an item in the process
window. Use WCatQueryHandle to get more information.
ΓòÉΓòÉΓòÉ 12.4.4. b1click ΓòÉΓòÉΓòÉ
Signature:
int b1click(int x, int y)
Type:
This is a callback function that may be overridden to
recognize if the user clicks on the assiciated window.
Parameters:
int x; the logical x-coordinate (0-based)
int y; the logical y-coordinate (0-based)
Returns: return 0.
ΓòÉΓòÉΓòÉ 12.4.5. b1dbclick ΓòÉΓòÉΓòÉ
Signature:
int b1dbclick(int x, int y)
Type:
This is a callback function that may be overridden to
recognize if the user double-clicks on the assiciated window.
Parameters:
int x; the logical x-coordinate (0-based)
int y; the logical y-coordinate (0-based)
Returns: return 0.
ΓòÉΓòÉΓòÉ 12.4.6. receiveFocus ΓòÉΓòÉΓòÉ
Signature:
int receiveFocus()
Type:
This is a callback function that may be overridden to
recognize if the window gets the input focus.
Parameters:
no parameters
Returns: return 0.
ΓòÉΓòÉΓòÉ 12.4.7. receiveFocus ΓòÉΓòÉΓòÉ
Signature:
int looseFocus()
Type:
This is a callback function that may be overridden to
recognize if the window loses the input focus.
Parameters:
no parameters
Returns: return 0.
ΓòÉΓòÉΓòÉ 12.4.8. handleShow ΓòÉΓòÉΓòÉ
Signature:
int handleShow()
Type:
This is a callback function that may be overridden to
recognize if show method is displayed.
Parameters:
no parameters
Returns: return 0.
ΓòÉΓòÉΓòÉ 12.4.9. setTitle ΓòÉΓòÉΓòÉ
Signature:
void setTitle()
Type:
This is a service function that you can call to change the
title.
Parameters:
int i; Use i=0
char *s; the title string
Returns: returns nothing
ΓòÉΓòÉΓòÉ 12.4.10. clrScr ΓòÉΓòÉΓòÉ
Signature:
void clrScr()
Type:
This is a service function that you can call to
clear the screen (Listbox, window)
Parameters:
no parameters
Returns: returns nothing
ΓòÉΓòÉΓòÉ 12.4.11. puts ΓòÉΓòÉΓòÉ
Signature:
void puts(char *s)
Type:
This is a service function that you can call to
display a string.
Parameters:
char *s; the string
Returns: returns nothing
ΓòÉΓòÉΓòÉ 12.4.12. addLine ΓòÉΓòÉΓòÉ
Signature:
void addLine(char *s) (WCatListbox only)
Type:
This is a service function that you can call to
add a string to the Listbox
Parameters:
char *s; the string
Returns: returns nothing
ΓòÉΓòÉΓòÉ 12.4.13. addLineAndScroll ΓòÉΓòÉΓòÉ
Signature:
void addLineAndScroll(char *s) (WCatListbox only)
Type:
This is a service function that you can call to
add a string to the Listbox and scroll down one line
Parameters:
char *s; the string
Returns: returns nothing
ΓòÉΓòÉΓòÉ 12.4.14. changeLine ΓòÉΓòÉΓòÉ
Signature:
void changeLine(int i, char *s) (WCatListbox only)
Type:
This is a service function that you can call to
replace line i with the string s in the Listbox
Parameters:
int i; the line (0-based)
char *s; the string
Returns: returns nothing
ΓòÉΓòÉΓòÉ 13. FAQ ΓòÉΓòÉΓòÉ
ΓòÉΓòÉΓòÉ 13.1. A short technical OS/2 introduction ΓòÉΓòÉΓòÉ
For all non-programmers, this chapter provides a small OS/2 introduction to
explain often used technical terms that may be new to some users. All
OS/2-professionals, OS/2-cracks, OS/2-gurus and OS/2-gods: STAY AWAY FROM THIS
CHAPTER! This chapter (and the following chapters) was written for you, the
beginners, the non-programmer, the avarage user of OS/2. I (Felix) tried to
avoid unnecessary technical blah-blah. Please feel free to comment and
critizise this part of the documentation if it is difficult to understand.
(There is more risk that it is too depict).
ΓòÉΓòÉΓòÉ 13.1.1. Multitasking ΓòÉΓòÉΓòÉ
OS/2 is a multitasking operating system. Multitasking means that several
processes can run at the same time.
Example: After a hard day of work you're sitting in front of your TV,
a cool bavarian beer in the left hand, eating potato chips with the
right hand. This is a form of multitasking, because you are doing all
three tasks (TV, beer, chips) at the same time.
Since currently most PC only have one CPU OS/2 cannot run all programs
simultanously (like you cannot drink and eat at the same time) instead all
tasks are done serial but for a very short time (a few milliseconds) s.t. the
user gets the impression of simultanously running programs.
There are two types multitasking:
1. Cooparative multitasking: This form is used in Windows. Each task gets
CPU-time and must explicitly give away the CPU-power. This is very
inflexible of course. A program use the processor on its own. For example
imagine your wife disturbs your TV-session and starts discussing the visit
of your parents-in-law. She may use all your (CPU) time preventing you
from doing some other really important tasks (TV).
2. Pre-emtive multitasking: This form of multitasking is used by OS/2. Each
program gets a specific amount of CPU time. Then OS/2 interrupts the
program and let the CPU concentrate on another task. There is an obvious
analogy in our example: turn up the TV-noise after a few milliseconds.
OS/2 supports several levels of priority, protection against other processes
and much more as you can read in the next chapters.
ΓòÉΓòÉΓòÉ 13.1.2. Processes and Threads ΓòÉΓòÉΓòÉ
There are two important technical terms: processes and threads:
o process: A process is an execution instance of a program. If you are
starting a program two times, there are two additional processes (1+1=2)
running in the system. A process can own several resources like memory or
file handles. A process can access only his own resources, it is forbidden
to access other resources. This is like real life; you have small resources
(e.g. money) but when you try to access other's resources (bank) you're
punished and must go into prison. OS/2 is more cruel. A process that tries
to access other processes' resources is killed. (Every OS/2 user knows the
protection violation dialog box). All processes have a unique id called
process id (PID).
o threads: A process is not the smallest unit of program execution. In
contrast to Windows and many Unix systems parts of the program can run
parallel. Remember our TV-example? Imaging your not just viewing the
O.J.Simson process, but instead you're zapping through all channels. This is
true multithreading. There are 3 processes (TV, beer, potato chips) and a
few threads (viewing all channels at the same time). All task share the CPU
(you)-time. All threads have a unique id called thread id (TID).
Mostly threads are used to do time-consuming jobs (like printing) in the
background. Threads share the resources of their process. Threads are not
protected against each-other (within a process). OS/2 supports up to 4096
threads in total. Each process has at least one thread (primary thread). An
application that has only one thread is called single-threaded. An application
may produce additional threads (secondary threads) and is then multithreaded
You can use WatchCat to view information about the threads in a process. Have
a look at the thread state or priority.
ΓòÉΓòÉΓòÉ 13.1.3. Other Modules ΓòÉΓòÉΓòÉ
Now you know what processes are. Let's try to be more general. A process is a
special form of a module. A module something that consists of resources and/or
code. There are different types of modules explained in the following.
o Device drivers: With OS/2, programs are not allowed to access hardware
directly (ok, ok, except 16-bit IOPL code). E.g.You don't fetch your
slippers yourself, instead you order your dachshund to do so. With OS/2 each
program does not directly access the hardware, instead it communicates with
the device driver. there are two types of device drivers. The physical
device drivers which are always 16-bit and directly access the hardware and
the virtual device drivers which typically communicate with the physical
device driver. Virtual device drivers (always 32-bit) provide virtual
hardware for DOS programs. This is necassary because DOS programs are
egoistic and want to access all hardware resources alone. The solution is to
pretend hardware (virtual hardware) that DOS can access on it's own. (For a
DOS session, it's April, 1st every day...).
o DOS programs.:
DOS programs are run in a virtual DOS machine (VDM) Spiteful one can say
that this is simply an OS/2 process that emulates a (complete) PC. DOS
programs "think" they are running on a stand-onlone PC.
No OS/2 program can look "into" a VDM. Therefore it is impossible for
WatchCat to tell the users what (resident) programs are running there.
Instead it finds out the window title, which is enough in most situations.
With WatchCat you can see that a VDM may contain 2 threads, but this is an
OS/2 feature, not DOS creating two threads...
o WinOS/2 programs: A WinOS/2 program is also running in a VDM. WinOS/2
sessions have the same restriction as DOS sessions have. You can run each
WinOS/2 session in different VDM (like running it on different PC) or in one
VDM (when one Windows program commits suicide all programs in the same VDM
are also dead).
o Dynamic link libraries (DLL): A DLL is mostly interesting to programmers.
DLL are code segments (or resources) that are not part of the program but
instead loaded when starting (load-time DLL) or running (run-time DLL). DLL
are a boring concept for users but an exciting concept for programmers. For
example you can integrate a mini Editor (currently without hardware
cursor...) in WatchCat as a DLL. To the user it looks like being part of the
WatchCat package even though we (Felix and Thomas, the fathers of WatchCat
don't know about it)! Another important attribute of DLL is that they can be
used to share resources (and code). Consider DOS: 10 DOS applications have
10 different user interfaces with 10 times the code of one user interface.
With OS/2 programs share the same code for the user interface (e.g.
pmwin.dll). This means less code on your harddisk. Don't think about
WatchCat now...
With WatchCat you can see what DLL are used by a process.
ΓòÉΓòÉΓòÉ 13.1.4. Synchronisation ΓòÉΓòÉΓòÉ
Processes and threads need to be synchronized. For car traffic we know the
following types of synchronization:
1. No synchronization: The weakest car must give way.
2. Minimal synchronization: The car that arrives as the latest must give way.
3. Better syncronisation: The car that arrives from the right can drive
first.
4. Full synchronization: Traffic is synchronized by traffic lights.
With OS/2 "traffic lights" are called Semaphores. Semaphores are used to
synchronize trains, which seems to have similar problems like cars. An
interesting consequence of the above example is that the first three points
contain the risk of a deadlock (all cars coming at the same time). This may
happen in OS/2 programs, too. You can use WatchCat to kill a hung program.
To be more precise there are two types of semaphores:
o Event semaphores: They are like traffic lights as described above.
o Mutex semaphores: They can be used to protect resources. Example: You are
traveling in a train and have to go to the toilet. By laying your jacket on
the seat you mark the seat as occupied. Now your jacket is a mutex
semaphore.
For technical reasons WatchCat can currently only display 16-Bit semaphores
which are commonly not used in 32-bit programs.
ΓòÉΓòÉΓòÉ 13.1.5. Process communication ΓòÉΓòÉΓòÉ
As explained earlier, processes cannot directly access other processes data.
Instead they have to communicate with each other. OS/2 knows several ways to
communicate:
o The simplest type is shared memory. Many processes may use the same region
of memory. This communication needs careful synchronization. WatchCat can be
used to display information about shared memory.
o Pipes: A pipe acts like a hose. One process writes into the pipe another one
reads from the pipe.
o Queues: Queues are more complex. The can be used as FIFO
(first-in-first-out) or LIFO (last-in-first-out) buffers.
Other mechanisms are used by the Presentation Manager (PM) which is based on
sending messages.
ΓòÉΓòÉΓòÉ 13.2. PM and WatchCat ΓòÉΓòÉΓòÉ
Like the previous chapter, this part of the documentation is not intended to be
read by OS/2-gurus. It gives a brief introduction to the architecture of the
PM.
ΓòÉΓòÉΓòÉ 13.2.1. Architechture of the PM ΓòÉΓòÉΓòÉ
The Presentation Manager (PM) is event-driven. This means that an application
receives a message whenever something interesting happens (e.g. keystroke,
mouse movement, exploding printer, etc). Events are not necessary invoked by
the user. Many messages are used for internal communication. And there are not
just a few messages! While working a few hours with OS/2 thousands of messages
are sent between the PM and several applications.
When a few people are discussing a serious problem and all members are speaking
at the same time, they will probably never come to a solution. This way of
discussion is a little bit ineffective. It is more effective to have a talk
master who manages the discussion. In the OS/2 world we have communicating
applications and the PM as the "talk master":
The PM sends a message to one application (green arrow), the application
answers and gives control back to the PM (blue line). Now assume that one of
the applications is like a politican. Politicans mostly don't stop speaking
once they have started. We need a rule for the maximum speaking time. And
indeed - there is a CUA (common user access, defined by IBM) rule which says
that an application should not work longer than 0.1 seconds on one message.
(Imagine a politican speaking 0.1 seconds! Wow! And considering the redundancy
of their speech this is not impossible...). To summarize: While one program is
working on a message, other programs cannot get messages. Every program should
get ready in 0.1 seconds.
To avoid mis-understandings: OS/2 is a pre-emtive operations system. While one
PM application is working on a message all threads that are not waiting for a
PM message (in other words, they don't take part in the discussion) can do
whatever they want to do (For example WatchCat can kill the PM...).
What does this mean in practice? You are currently running view.exe to read
this online documention. Click on Services/Search to search for a text string.
When searching for a certain string the PM shows a funny small clock and you
have a reason to justify opening a new can of beer. View.exe is a perfect
example what happens if someone ignores the CUA guidelines. Obviously the CUA
book is not much spreaded in the IBM - there are many more examples like view.
The correct solution (maybe in OS/2 4.0) is to put the searching algorithm in a
different (non-PM) thread.
ΓòÉΓòÉΓòÉ 13.2.2. The single message queue ΓòÉΓòÉΓòÉ
As you have seen above there are parts in the PM that have to be serialized.
Hmmm. There seems to be an easy solution. Every application gets a message
queue. Now the PM can save all messages belonging to one appliction in the
queue and give the control to another application. And indeed - every
application has its own message queue, but -
... there is one bottle neck: Only one system message queue. User input
(keyboard, mouse) is not put directly into the application message queues,
instead all user input is serialized. User input cannot be evaluated "in
parallel". As long as a program is hanging or working on a message no user
input can be evaluated.
This is the reason why you can see the clock running; pulse is working and you
are watching the ill-behaved application while it is joyfully deleting your
files and (without WatchCat) you can do nothing except rebooting, because your
input is saved in the system message queue but not directed to the
applications.
ΓòÉΓòÉΓòÉ 13.3. How does WatchCat work? ΓòÉΓòÉΓòÉ
WatchCat is - of course - not a PM application. Instead it is running in a
different session. It bypasses the PM handling of keyboard events by directly
accessing the hardware:
The PM is blocked, but WatchCat (better: its device driver) detects the hotkey
sequence. It grabs the CPU time and the screen. The user can now kill the
corrupt PM task (which violates CUA!) or kill the PM itself. All other PM
programs are not affected. Now the PM is stable again. By pressing ESC,
WatchCat turns back to the PM as you can go on working as if nothing happend:
ΓòÉΓòÉΓòÉ 13.3.1. The message queue size ΓòÉΓòÉΓòÉ
There were long discussions in the Internet fora whether the message queue size
of OS/2 is too small.
First: The process control center contains DLL to increase the message queue
size of any application process to 100 messages.
In spite of this feature the message queue will probably never cause problems:
o Technical argumentation
There are two ways to distribute messages: sending messages (which is
synchronous) and posting messages (which is asynchronous). Sending a message
results in a procedure call, while only posted messages are put into the
(application) message queue.
When the PM hangs because of a limited message queue obviously one or more
applications are corrupting/blocking the message queue. Therefore it exists
an ill-behaved thread, which has as least
1. a message queue (non-PM threads cannot block the PM),
2. a window procedure (without it the thread simply does not take care
about posted or lost messages) and
3. a condition under which this thread is blocked.
As noted above, posted messages are asynchronous. I can imagine only three
situations why a thread (with message queue and window procedure) might hang
because of a lost posted message:
1. The window procedure waits for the posted message:
Example:
...
case WM_PAINT: wait_for(WM_USER);
...
...
This is not possible with the PM.
2. The window proc waits for an event caused indirectly by the posted
message:
case WM_PAINT: DosWaitEventSem(...);
This is absolutely worst PM programming style! You must not block the
window procedure. A message should be answered in 0.1 seconds (CUA). In
a multitasking environment you cannot make any assumptions about the
performance of other threads. Therefore you should not block the thread
via blocking/waiting. Instead a message should be sent/posted (e.g.
WM_SEM1). The PM is not blocked with this approach.
3. A user message sends information about e.g. initialization. When this
message is lost, parts of the application are not initialized. This is
bad programming practice, but the result will probably be a protection
violation or window garbage, but not a hung PM.
So - I believe - it is almost impossible for an application to hang because
of lost messages. And if there is an ill-behaved application that waits
synchronously for a posted message it is programmed very ugly and will
probably fail quite often (and not just because of the queue size).
This does not mean that I believe messages cannot get lost. But I don't
believe that the result is a hung PM. Probably a listbox does not contain
all items or the window is not redrawn correctly.
And there is one more thing that is difficult to understand. Assuming that a
lock-up is happening rarely (e.g. 1% of the lost messages) there must be a
lot of lost messages. As a consequence there must be a lot of lost button
clicks, menu choices, incorrect drawn windows, etc. The slower the CPU is,
the more faults are visible. But I have rarely seen problems like that on my
386/33, but I sometimes had a hung PM.
o non-technical argumentation
The PM supports two ways of communication: synchronous (like a telephone
call) and asynchronous (like sending a letter). In my opinion synchronous
communication may cause hang-ups or deadlocks. (e.g. imagine you and your
partner are trying to call each-other simultaneously without hangingup the
phone. This results in a deadlock). Asynchronous communication cannot result
in deadlocks (or are you not working while waiting for the postman?). Lost
messages (letters) may result in errors, but not in system lock-ups.
ΓòÉΓòÉΓòÉ 13.4. Is OS/2 instable? ΓòÉΓòÉΓòÉ
Is WatchCat the proof that OS/2 is instable?
NO. OS/2 is a very stable, very modern and very powerful operating system. Like
many other systems there are situations where OS/2 gets into trouble. We want
to improve OS/2 with WatchCat.
ΓòÉΓòÉΓòÉ 13.5. What processes cannot be killed? ΓòÉΓòÉΓòÉ
Unfortunately OS/2 does not support a "die, die, die" Signal (or kill -9 on
Unix). OS/2 seems to believe that in doubts the nature of an application is
peaceful. There are some kind of programs that cannot be killed, e.g.:
o programs "stopping" in the exit list
o programs "stopping" in a 16-Bit segment
Sorry, the only chance is to reboot.
ΓòÉΓòÉΓòÉ 13.6. It beeps, but why does WatchCat not pop up? ΓòÉΓòÉΓòÉ
The beep is from the device driver. That is very low-level. A device driver can
operate even if the operating system is damaged. The hotkey will be recognized
as long as Ctr-Alt-Del is possible also. Of course in situations of a complete
OS-hangup WatchCat is helpless.
On the other hand the WatchCat.exe program needs to get access to the display.
There are rare situations where the system locks the display and WatchCat has
no chance to display its information.
Activate WatchCat a second time. This forces the PM to be killed. In
some situation this helps WatchCat to pop up.
ΓòÉΓòÉΓòÉ 13.7. Is WatchCat a low-level program? ΓòÉΓòÉΓòÉ
For some users it may be surprising that WatchCat itself is not a tricky,
ill-behaved, low-level program.
WatchCat uses a few tricks, but it is not as low-level as one might expect. The
device driver is using a documented interface. WatchCat.exe is a ring-3
application like your complier or your text processor. The way both parts work
together is the name of the game.
ΓòÉΓòÉΓòÉ 14. Trouble shooting ΓòÉΓòÉΓòÉ
If you have any problems with WatchCat please refer to this section. If your
problem cannot be solved, have a look at the WatchCat-WWW-home page or send us
a mail.
ΓòÉΓòÉΓòÉ 14.1. Tips when you have problems ΓòÉΓòÉΓòÉ
WatchCat is not a trivial program. It is a good-behaved program but with
special hardware configurations or after a wrong installation you may detect
that WatchCat is not working as expected. Please follow the following guideline
to get WatchCat working. (Most of the tips are not just limited to WatchCat.)
ΓòÉΓòÉΓòÉ 14.2. The installation of (a) WatchCat (component) did not work ΓòÉΓòÉΓòÉ
1. Stop working! Think it over!
2. Read the trouble shooting section carefully. Is your problem listed there?
Did you follow the installation rules? Did you install WatchCat like other
software? (E.g. installing a program to the RAM-Disk or CDROM does not
work).
3. Don't forget to remove all older versions of WatchCat each time before
installing a new version (the 1st, 2nd, 3rd time).
4. Reboot
5. Check whether the PATH and LIBPATH environment variable are set correctly.
6. If the installation was aborted, there may be some parts installed while
others are not. Try to deinstall the program completey before trying
again.
7. Experts may start the wcinfo utility and check the supplied information.
8. If you have Internet WWW access select
http://www.fmi.uni-passau.de/~normann/wcinfo.html The latest information
is collected here.
9. Send us a mail (watchcat@uni-passau.de). Describe the problem precisely
(consider to include the output of the wcinfo utility).
ΓòÉΓòÉΓòÉ 14.3. Suddenly WatchCat does not work any longer ΓòÉΓòÉΓòÉ
1. Stop working! Think it over!
2. Read the trouble shooting section carefully. Is your problem listed there?
3. What has changed? config.sys? The hardware?
4. Is WatchCat running? Maybe you just killed it.
5. Have a look at the config.sys? Does everything look ok?
6. Experts may start the wcinfo utility and check the supplied information.
7. If you have Internet WWW access, select
http://www.fmi.uni-passau.de/~normann/wcinfo.html The latest information
is collected here.
8. Send us a mail (watchcat@uni-passau.de). Describe the problem precisely
(consider to include the output of the wcinfo utility).
ΓòÉΓòÉΓòÉ 14.4. The system is instable when WatchCat is running ΓòÉΓòÉΓòÉ
1. Stop working! Think it over!
2. Read the trouble shooting section carefully. Is your problem listed there?
Especially if you have a bus mouse or a laptop/notebook.
3. Did you follow all installation instructions? (Add WatchCat at the end of
the config.sys).
4. Try to remove some of the components.
a. REM out the device driver, REM out CALL=, RUN=
b. Start WatchCat. Does it work? Now include the device driver. Does it
work? Now include RUN=. Does it work?
5. Experts may start the wcinfo utility and check the supplied information.
6. If you have Internet WWW access select
http://www.uni-passau.de/~normann/wcinfo.html The latest information is
collected here.
7. Send us a mail (watchcat@uni-passau.de). Describe the problem precisely
(consider to include the output of the wcinfo utility).
ΓòÉΓòÉΓòÉ 14.5. Pressing Ctrl-Alt-W does not result in any action ΓòÉΓòÉΓòÉ
Make sure that you included watchcat.sys in your CONFIG.SYS.
Make sure that WatchCat is running DETACHED (include it with RUN= in your
CONFIG.SYS). If WatchCat is running visibly, it is NOT detached.
Try to find out if other ways to activate WatchCat work.
ΓòÉΓòÉΓòÉ 14.6. My mouse is killed after activation ΓòÉΓòÉΓòÉ
Run WatchCat with the parameter /nomouse
ΓòÉΓòÉΓòÉ 14.7. The screen is black and I cannot see anything ΓòÉΓòÉΓòÉ
Run WatchCat with the parameter /nofade
ΓòÉΓòÉΓòÉ 14.8. My mouse is jumping ΓòÉΓòÉΓòÉ
Using a bus mouse may be incompatible with WatchCat. Either use a serial mouse
or choose a different mechanism for activating WatchCat.
ΓòÉΓòÉΓòÉ 14.9. Some keys are hanging ΓòÉΓòÉΓòÉ
This seems to be an OS/2 keyboard driver bug. Try to specify the parameter
/rate:x, with 1<=x<=9, default is /rate:2. Try out if a higher value than 2
works.
ΓòÉΓòÉΓòÉ 14.10. I cannot kill my program ΓòÉΓòÉΓòÉ
There are some programs WatchCat cannot kill. Sorry. Since OS/2 does not
provide a way to shoot'em down, we can't help.
Sometimes it is impossible to get a stable system again. In this case it is
necessary to boot via Ctrl-Alt-Del. Please note that this key sequence does
close all files. Do not press the reset key.
You may also open a shell by pressing Space (or open a windowed shell) and do
some house-keeping before rebooting.
ΓòÉΓòÉΓòÉ 14.11. Why is the PM-Shell killed? ΓòÉΓòÉΓòÉ
It's not a bug - it's a feature! When WatchCat is activated a second time
before it pops up, the PM-Shell is killed. This is very useful for some
hang-ups. On the other hand, it might not be useful when using etc. the
joystick (hold tzhe fire-button a few seconds). You can switch off this feature
with /nokillpm.
ΓòÉΓòÉΓòÉ 14.12. Problems with Notebooks ΓòÉΓòÉΓòÉ
When using the device driver the notebook might not go into sleeping mode.
Consider to use an alternative activation method (cf. the WPS object).
ΓòÉΓòÉΓòÉ 14.13. Problems with a bus mouse ΓòÉΓòÉΓòÉ
When using a bus mouse the following problems may occur:
o The mouse is "jumping"
o When only one activation key is selected (i.e. F12) WatchCat may be
activated accidently.
There are three solutions:
o Use a serial mouse
o Use another activation methos (e.g. joystick)
o Consider to use an alternative activation method (cf. the WPS object).
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
Yes, please, please, please send us a postcard. We want to get drowned in
postcards! Thousend thanks from Passau!!!!
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
Your postcard can look like this:
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
Your country, your hometown, a funny cartoon, Claudia Schiffer, whatever you
like!
Sample postcard:
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
The hardware switch looks similar to the following:
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
WatchCat uses the FeelX API to switch quick marking to the alternate Marking
mode if it is started in a window. So it is still possible to use cut and
paste, but you must press a shift key (per default: just shift, this can be
selected in the FeelX notebook). Other windows are not affected.
In the current version of FeelX (1.1a) it is not possible to turn off the
context menu. It is recommended to use Alt-F10 to get the context window in a
windowed version of WatchCat.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
A single-pole double-throw (SPDT) looks like this: In this situation pins 2 and
3 are connected.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
A switch like the PC's turbo button looks like this: In this situation both
pins are connected if the button is pressed. For WatchCat, a switch that
remains in the state in which it is set is recommended.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
DeskMan/2 (Gregory Czaja; Development Technologies, Inc.) is a powerful tool
for the Workplace Shell. One of its (endless) features allows the user to save
and restore Workplace Shell objects.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
The CONFIG.SYS file is the OS/2 configuration file. It can be found in the root
directory of the OS/2 boot drive.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
A key-sequence that is used to perform some action (instead of typing
characters and words) is called a hotkey. The default hotkey to activate
WatchCat is Ctrl-Alt-W:
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
The environment variable LIBPATH is set in the CONFIG.SYS file. You must add
the WatchCat path here to ensure that all DLL's are found. Especially the WPS
object cannot work without this variable.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
The environment variable PATH is set in the CONFIG.SYS file. You must add the
WatchCat path here to ensure that the program can be start from any command
shell.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
This statement is used to integrate a device driver into OS/2. WatchCat uses a
device driver to be independent from usual message processing (which might be
blocked). Add the line DEVICE=x:\path\watchcat.sys (parameters) anywhere in
your CONFIG.SYS file.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
The environment variable LIBPATH is set in the CONFIG.SYS file. You must add
the WatchCat path here to ensure that the help file is found whenever you type
view watchcat in a command shell.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
This statement is responsible for detaching a program on start-up. Please add
the line RUN=x:\path\watchcat anywhere in your CONFIG.SYS. In contrast to START
this command detaches the process. Do NOT use START.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
The PM (Presentation Manager) is responsible for the graphical appearance of
OS/2. The PM manages windows, buttons, ... The best known PM-application is the
WPS (Workplace Shell).
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
A device driver is responsible for the communication between applications and
hardware. An application cannot (should not) access hardware directly. There
are 3 types of device drivers.
1. A base device driver is loaded even before other device drivers. It is
very, very low level. E.G. AHA154X.ADD is driver that is responsible for
the Adaptec SCSI Adapter. This driver is added to the CONFIG.SYS via
BASEDEV=
2. A physical device driver (the "normal" driver) is added to the config.sys
via DEVICE It is loaded after the base device drivers and before any
application. Physical device drivers are always 16-Bit.
3. A virtual device driver is a special device driver. It is used by a
virtual DOS machine to virtualize hardware. DOS programs can access
hardware directly which is not allowed with OS/2 (s.a.). Therefore the
hardware is "simulated" by the virtual device driver. The virtual device
driver can communicate with a physical device driver. from the technical
point of view a virtual device driver is a 32-Bit DLL.
WatchCat uses a physical device driver (watchcat.sys) to by-pass the standard
key processing. Therefore WatchCat notices its hotkey even when the PM is
blocked.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
WatchCat uses the CuTe technology (continous update technology) for quickly
updating the windows.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
The OS/2 Presentation-Manager is an event-driven system. All events in the
system (e.g. moving the mouse or pressing a key) are converted into a message
an put into a global message queue. The applications take the messages from
this queue. This is done in a serial way. The second program cannot get a
message while the first application is still working on its message. Therefore
one application can stop the whole system.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
The WPS (Workplace Shell) is the graphical user interface of OS/2. An WPS
object is simply an icon (and its functionality). All icons on your desktop are
WPS objects.
Objects with the same functionality are grouped to a WPS class. Mostly one
class has many objects. For example there are many folder objects which are
instances of the folder class. Some classes only have one object (e.g.
WatchCat).
Classes that are not part of OS/2 (e.g. WatchCat) must be registered (just to
tell the system that they want to be used...). This task is done by the
installation program.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
A dynamic link library (DLL) is program code that is linked to an application
when the program is started. A DLL can be shared by many different processes.
There are two ways of using a DLL:
1. load-time dynamic linking: The DLL is loaded when the program is started.
The DLL is not part of the application, but there are references to the
DLL in the program.
2. run-time dynamic linking: The DLL is loaded via an explicit command in the
application. The program does not have any references to the DLL. The DLL
is not loaded until the explicit call.
WatchCat can display all run-time linked DLL in the Library window. ALL DLL
will we displayed in main window (if "all modules" is selected).