home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 May / PCO_5_97.ISO / FilesBBS / OS2 / WCAT21.ARJ / WCAT21.ZIP / watchcat.inf (.txt) < prev    next >
Encoding:
OS/2 Help File  |  1995-11-12  |  415.9 KB  |  3,742 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Title Page ΓòÉΓòÉΓòÉ
  3.  
  4.                              Welcome to WatchCat 2.1
  5.                          - The Guardian Angel of OS/2 -
  6.  
  7.  
  8. ΓòÉΓòÉΓòÉ 2. Overview ΓòÉΓòÉΓòÉ
  9.  
  10. Read more about the following topics: 
  11.  
  12.      Do I need WatchCat 
  13.  
  14.      WatchCat is not just a process killer :-) 
  15.  
  16.      Changes since WatchCat 2.0 
  17.  
  18.      What do I have to pay? 
  19.  
  20.  
  21. ΓòÉΓòÉΓòÉ 2.1. Do I need WatchCat? ΓòÉΓòÉΓòÉ
  22.  
  23. WatchCat is a program to recover OS/2 2.x and OS/2 3.x from some kind of hang 
  24. by killing applications. 
  25.  
  26. WatchCat is useful to any OS/2 user in the following situations: 
  27.  
  28.      The Presentation Manager (PM) is blocked. Due to the  single message 
  29.       queue of OS/2 a single ill-behaved PM program might block all PM programs 
  30.       in the system and prevent any program from getting user input. Therefore 
  31.       it is impossible to end the corrupt task or to save data in other 
  32.       programs. You can press Ctrl-ESC but this does not help in all 
  33.       situations. Due to the Full-Screen nature of WatchCat those ill-behaved 
  34.       programs can be killed from within WatchCat. 
  35.  
  36.       There are several reasons why the PM might hang: 
  37.  
  38.         -  An ill-behaved PM program 
  39.  
  40.         -  An ill-behaved Windows program in a Win-OS/2 session 
  41.  
  42.         -  Erroneous Workplace Shell objects. 
  43.  
  44.       Even though OS/2 has become much more stable with Version 3, there are 
  45.       still situations where the PM is blocked: 
  46.  
  47.         -  The PM user-interface is blocked because of a system-modal dialog 
  48.            box that cannot be closed. 
  49.  
  50.         -  User input is impossible because of a high priority process or a 
  51.            process that is doing a lot of swapping. 
  52.  
  53.      Displaying process information in a non-cryptic easy-to-understand way. 
  54.       Learn more about OS/2 and its processes. 
  55.  
  56.  WatchCat is also interesting to programmers in the following situations: 
  57.  
  58.      Display all PStat-info about modules, processes, threads, etc. WatchCat 
  59.       periodically updates all this information. It is quick and easy to use 
  60.       without any PM overhead, by using the CuTe technology. 
  61.  
  62.      Display all WatchCat information on a terminal and control WatchCat even 
  63.       if OS/2 crashed. Open a (windowed) remote shell on the hanging PC. 
  64.       (registered version only). 
  65.  
  66.      Kill threads or change the priority of threads dynamically. (1st Aid 
  67.       Package only). 
  68.  
  69.      Disable Ctrl-Alt-Del or use Ctrl-Alt-Del to activate WatchCat (registered 
  70.       version only). 
  71.  
  72.      We are using WatchCat ourselves many times a day: 
  73.  
  74.         -  View the number of threads in an application. 
  75.  
  76.         -  Do all threads have the correct priority? 
  77.  
  78.         -  View the process hierarchy. Are all child processes started 
  79.            correctly? 
  80.  
  81.         -  Is my program really using the right DLL? Which DLL are used and 
  82.            what path do the DLL have? 
  83.  
  84.         -  Use WatchCat as a task switcher when Ctrl-ESC does not work. 
  85.  
  86.         -  Don't be afraid to use the debugger for critical actions (e.g. 
  87.            breakpoints in the window procedure), most hang-ups can be 
  88.            recovered. 
  89.  
  90.         -  Does my application consume much CPU time? 
  91.  
  92.         -  My application stops. Is it an endless loop or a deadlock? 
  93.  
  94.      You may use it in special cases for debugging: Send your debugging text 
  95.       to WatchCat to avoid any additional PM message passing. This may be 
  96.       useful in some PM and WPS applications. 
  97.  
  98.      WatchCat can be extended with its own modules via a DLL and a documented 
  99.       C-API. or via the simple and documented WatchCat C++ window framework. 
  100.  
  101.  And there are more situations where WatchCat can help - read these anecdotal 
  102.  reports where WatchCat might also help. 
  103.  
  104.  In contrast to WatchCat 1.x  you don't need special hardware to use WatchCat 
  105.  2.1. You can still use any switches you built for v1.x, but you can also 
  106.  simply activate WatchCat by a user-defined hotkey (default: Ctrl-Alt-W). 
  107.  
  108.  WatchCat needs a very small amount of CPU-time. You don't see it and you won't 
  109.  notice it. But it is there if you need it. 
  110.  
  111.  
  112. ΓòÉΓòÉΓòÉ <hidden> How WatchCat works ΓòÉΓòÉΓòÉ
  113.  
  114. Most OS/2 users know the situation where the Presentation Manager hangs: No 
  115. input from keyboard or mouse seems to be possible: WatchCat detects a hotkey 
  116. sequence even when OS/2 hangs. Just press the hotkey and delete the ill-behaved 
  117. application. WatchCat is not affected by a hung PM. You can even use WatchCat 
  118. from a terminal. Without the ill-behaved program OS/2 is stable again. You can 
  119. continue your work without rebooting. 
  120.  
  121.  
  122. ΓòÉΓòÉΓòÉ <hidden> Two true stories about WatchCat ΓòÉΓòÉΓòÉ
  123.  
  124. The first story was reported by Felix von Normann from Passau, a novice OS/2 
  125. user. Here is his true experience: 
  126.  
  127.           "One day I installed a new text-mode editor which I called e.exe and 
  128.           put it before the OS/2 Standardeditor in the PATH, because I liked it 
  129.           more the the graphical version. A few days later I double-clicked on 
  130.           a READ.ME icon of a program package. Nothing happed, I turned of the 
  131.           computer and forgot the situation (...) When I turned on my computer 
  132.           the next day I noticed that it was significantly slowed down, even no 
  133.           program was visible on the WPS. I activated WatchCat and found out 
  134.           that more than 90% CPU-time was consumed by a process called 'e.exe'. 
  135.           Finally I remembered my double-click on the icon. With WatchCat I 
  136.           found out the Editor e.exe was started by the WPS as a PM-program 
  137.           (first column), what was wrong, because the details view proofed that 
  138.           it was a fullscreen program. After killing the process - thanks to 
  139.           WatchCat - the solution was easy to find: I don't double-click on 
  140.           text-icons any longer." 
  141.  
  142.  The second story is from one of our users in the north of Germany. He told us: 
  143.  
  144.           "I was using OS/2 with S3-VGA, 640x480 and a buggy video driver. 
  145.           Sometimes character simply disappeared. After the 3rd repaint a 
  146.           button was labled 'C ce ' instead of 'Cancel'. Activating and leaving 
  147.           WatchCat forced the video driver to completely redraw the whole 
  148.           screen. This trick (activating WatchCat every 10 minutes) helped me 
  149.           to use my system until I found a bug-free (?) driver." 
  150.  
  151.  As you can see, WatchCat is not just a process killer... 
  152.  
  153.  
  154. ΓòÉΓòÉΓòÉ 2.2. Changes since WatchCat 2.0 ΓòÉΓòÉΓòÉ
  155.  
  156. WatchCat.exe 
  157.  
  158.      bugs 
  159.  
  160.         -  Monochrome color changed to 0x7 (instead of 0xf) 
  161.  
  162.         -  Using only one semaphore (maybe an unnecessary change, s.b.) 
  163.  
  164.         -  removed uninitialized variable error causing a problem that    looks 
  165.            like a dead-lock. 
  166.  
  167.         -  removed bug: maximize, TAB 
  168.  
  169.       improvements 
  170.  
  171.         -  improved user interface 
  172.  
  173.         -  optimized segment loading 
  174.  
  175.         -  one context switch less on activation 
  176.  
  177.      new features: 
  178.  
  179.         -  sort ascending, descending 
  180.  
  181.         -  Shutdown (with message box) 
  182.  
  183.         -  Reboot  (with message box) 
  184.  
  185.         -  added /DLL /MOUSE, ... 
  186.  
  187.         -  Added context menu to unblock threads 
  188.  
  189.         -  Changed Init of 50-line-mode 
  190.  
  191.         -  DLL searchable via environment variable WCATDLL 
  192.  
  193.         -  sort by structure 
  194.  
  195.         -  kill entire process tree (does it work???) 
  196.  
  197.         -  kill by name 
  198.  
  199.         -  added new DLL: start programs, stdout >> window 
  200.  
  201.         -  improved options menu (added color support, ...) 
  202.  
  203.         -  parameter /RATE:x , 0<=x<=9, set DevDriv timer rate 
  204.  
  205.         -  support for windowed cmd.exe 
  206.  More new features 
  207.  
  208.      C-A-D package (disable Ctrl-Alt-Del). 
  209.  
  210.      process manipulation center (disable Ctrl-Alt-Del). 
  211.  
  212.      Run WatchCat on a remote PC via serial connection 
  213.  
  214.  
  215. ΓòÉΓòÉΓòÉ <hidden> What do I have to pay? ΓòÉΓòÉΓòÉ
  216.  
  217. WatchCat is not free, but we believe that WatchCat is very cheap. 
  218.  
  219. For use in business, commercial, government, or institutional environment, you 
  220. must buy a registered version or a 1st Aid Package. 
  221.  
  222. For personal usage you may use the unregistered version. In this case you are 
  223. highly encouraged to send us a postcard. You're invited to buy a registered 
  224. version or a 1st Aid Package. Both versions contain more and interesting 
  225. features than the unregistered version. 
  226.  
  227.  
  228. ΓòÉΓòÉΓòÉ 3. Copyright & more ΓòÉΓòÉΓòÉ
  229.  
  230. Please read this section carefully before using or distributing WatchCat. 
  231.  
  232.  
  233. ΓòÉΓòÉΓòÉ 3.1. Copyright ΓòÉΓòÉΓòÉ
  234.  
  235. WatchCat and all software supplied in the WatchCat package is 
  236. (c) Copyright 1993-95 by Felix von Normann and Thomas Opheys. 
  237.  
  238. All rights reserved. 
  239.  
  240. You are invited to distribute the unregistered version WatchCat in the sense of 
  241. Shareware. This implies that you can sell only the copying service. You cannot 
  242. sell the program itself without explicit permission. Repackaging the WatchCat 
  243. archive is not allowed. 
  244.  
  245. You can also sell the registered version or the 1st Aid Package This requires 
  246. our explicit permission and - of course - payment for each sold version. 
  247.  
  248.  
  249. ΓòÉΓòÉΓòÉ 3.2. Disclaimer ΓòÉΓòÉΓòÉ
  250.  
  251. We do not claim to provide error-free software or software that will meet all 
  252. your requirements. 
  253.  
  254. This software is supplied with no warranty, neither expressed nor implied. We 
  255. disclaim all warranties for any damages included but not limited to incidental 
  256. or consequential damage caused directly or indirectly by this software. 
  257.  
  258. All software is provided AS IS. You may use this program only at your own risk. 
  259.  
  260. WatchCat must not be used in states that do not allow the above limitation of 
  261. liability. 
  262.  
  263.  
  264. ΓòÉΓòÉΓòÉ 3.3. The authors ΓòÉΓòÉΓòÉ
  265.  
  266. WatchCat was written by: 
  267.  
  268. For more information refer to section How to contact the authors. 
  269.  
  270.  
  271. ΓòÉΓòÉΓòÉ 3.4. Credits ΓòÉΓòÉΓòÉ
  272.  
  273. Credits go to Will Rose (cwr@crash.cts.com) who was so kind as to read our docs 
  274. (the previous level) and correct grammar, style, syntax, typos and all the 
  275. other things where a German can do harm to the English language. 
  276.  
  277. Thanks to Jeremy Mathers (pynq@quads.uchicago.edu), Benjamin Stein 
  278. (benno@liva.in-berlin.de), Mike Morrell (morrellm@seq.oit.osshe.edu), Nicole 
  279. Greiber (greiber@wrcs2.urz.uni-wuppertal.de), Erich Schulman 
  280. (acme@use.usit.net), Andrew DeNardo 
  281. (LRSSPFLD!CHAMPAIGN!DENARDO@lrsmail.attmail.com), Sven Kiesow 
  282. (kiesow@kirk.fmi.uni-passau.de) and many others for their contributions to 
  283. WatchCat. 
  284.  
  285. THANKS A LOT! 
  286.  
  287.  
  288. ΓòÉΓòÉΓòÉ 4. Payment for WatchCat (changed) ΓòÉΓòÉΓòÉ
  289.  
  290. Topics:
  291.  
  292. Why registering?
  293.  
  294. The unregistered version
  295. The registered version
  296. The 1st Aid Package
  297.  
  298. prices (outside Germany)
  299. Preise (Deutschland)
  300.  
  301. (Nobody seems to have understood the licensing conditions of WatchCat 2.0... We 
  302. are currently working on an expert system written in Prolog but it is not 
  303. finished now, so we have rewritten the licensing part to be more precise. 
  304.  
  305. We would like to ask you to read the following text carefully. we still think 
  306. we have a fair offer for you.) 
  307.  
  308.  
  309. ΓòÉΓòÉΓòÉ 4.1. Why registering? ΓòÉΓòÉΓòÉ
  310.  
  311.      For use in business, commercial, government, or institutional 
  312.       environment, you must buy (at least) the registered version of WatchCat. 
  313.       (Please note: Using the unregistered Shareware version in one of the 
  314.       listed cases is illegal - except for evaluation purposes). 
  315.       You may also order a specially tailored version (with only the parts you 
  316.       need; special start-up messages; custom-built DLL; ...) This service will 
  317.       not be free. A German version is not planned now, it will be created when 
  318.       there is enough interest. 
  319.  
  320.      Pre-installed WatchCat All hardware providers with pre-installed OS/2 are 
  321.       encouraged to pre-install WatchCat, too. To do so, you must buy one 
  322.       regular license per PC. Pre-installing the unregisterd Shareware-Version 
  323.       is not allowed. 
  324.  
  325.      Bundle with other software: Software developers may distribute WatchCat 
  326.       with their software (when using the API or to increase stability). This 
  327.       requires: 
  328.  
  329.         1. One registered WatchCat license per copy of your program 
  330.  
  331.         2. WatchCat must remain to be a single separate product. Don't 
  332.            integrate WatchCat seamless into your product (you may do so vice 
  333.            versa...) 
  334.  
  335.      For personal usage you may use the unregistered version permanently. In 
  336.       this case you are strongly invited to write us a (two!) postcard, saying 
  337.       that you are using the program. Of course you can also order the 
  338.       registered version or the 1st Aid Package This has two advantages: You 
  339.       get a lot of additional software and you motivate us to keep up the 
  340.       WatchCat work. 
  341.       Introduction to sending postcards: avoid asking questions like "Do you 
  342.       really  want a postcard?", "What shall I write??" or "What picture should 
  343.       the postcard show?" (see the answers by double-clicking on the question) 
  344.  
  345.  Consider: We both are not working full-time on WatchCat, but we have many 
  346.  ideas for enhancements and new programs. Please don't force us to think it all 
  347.  over and leave our big love, OS/2. If programming for Windows (and this sucker 
  348.  REALLY needs something like WatchCat) is more lucrative than for OS/2... 
  349.  So, write us a postcard now, introduce WatchCat to your office today, convince 
  350.  your boss to buy some licenses and sleep without feeling guilty tonight. 
  351.  
  352.   Thanks in advance
  353.   Felix & Thomas
  354.  
  355.  
  356. ΓòÉΓòÉΓòÉ 4.2. The unregistered version ΓòÉΓòÉΓòÉ
  357.  
  358. The unregistered version of WatchCat may be distributed in the sense of 
  359. Shareware. It is for private usage or evaluation purposes only. It cantains the 
  360. following packages: 
  361.  
  362.      WatchCat (including WatchCat.exe, device driver, alternative activation). 
  363.  
  364.      Demo of the process manipulation center 
  365.  
  366.      Demo of remote WatchCat 
  367.  
  368.  
  369. ΓòÉΓòÉΓòÉ 4.3. The registered version ΓòÉΓòÉΓòÉ
  370.  
  371. The registered version contains the following features: 
  372.  
  373.      WatchCat (including WatchCat.exe, device driver, alternative activation) 
  374.       with the ability of a windowed shell. 
  375.  
  376.      The C-A-D package 
  377.  
  378.      remote WatchCat 
  379.  
  380.  
  381. ΓòÉΓòÉΓòÉ 4.4. The 1st Aid Package ΓòÉΓòÉΓòÉ
  382.  
  383. The WatchCat 1st Aid package contains the following features: 
  384.  
  385.      WatchCat (including WatchCat.exe, device driver, alternative activation) 
  386.       with the ability of a windowed shell. 
  387.  
  388.      The process manipulation center 
  389.  
  390.      remote WatchCat with 
  391.  
  392.      The C-A-D package (with the ability to kill by Hotkey (Ctrl-Alt-K) and to 
  393.       interrupt DOS programs (Ctrl-Alt-Break)). 
  394.  
  395.      Some DLL sources to make programming for WatchCat easier. 
  396.  
  397.  In addition you get the following components: 
  398.  
  399.      program disk 
  400.  
  401.      A hardware switch (either serial or parallel or game port) which looks 
  402.       like this 
  403.  
  404.      A printed manual of the online documentation (about 50 pages high 
  405.       quality). 
  406.  
  407.  
  408. ΓòÉΓòÉΓòÉ 4.5. prices ΓòÉΓòÉΓòÉ
  409.  
  410.  From Canada and the U.S.A., please use ORDER.US. Thank you. 
  411.  
  412.           Note: if you don't want to pay in US-Dollars: Convert the amount to 
  413.           your own currency and continue... For special ordering/delivery 
  414.           options contact watchcat@fmi.uni-passau.de (i.e. European customers). 
  415.  
  416.  
  417.                     price
  418.   Item           Pieces   p/pce   You get
  419.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  420.   Registered version    1      $ 27    WatchCat 2.1 registered
  421.               2      $ 24    to you, one standard
  422.               3 - 9    $ 20    license, update quarantee
  423.               10 - 49   $ 19    and a program disk.
  424.               50 - 99   $ 16
  425.               100 - 499  $ 12
  426.               500 +    $ 8
  427.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  428.   1st Aid Package     1      $ 62    WatchCat 2.1 registered
  429.               2      $ 59    to you, license, update
  430.               3 - 5    $ 54    guarantee, program disk,
  431.               6 +     $ 50    support, printed manual,
  432.                          hardware connector
  433.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  434.   Printed manual      1      $ 13    Bound and printed manual
  435.               2 +     $ 12    with superior quality.
  436.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  437.   Hardware connector    1      $ 27    Ready built hardware
  438.               2      $ 24    connector in a housing.
  439.               3 +     $ 22
  440.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  441.   Update message      eMail    free    We immediately tell you
  442.               FAX     $ 3    when a new version of
  443.               letter   $ 2    WatchCat is available.
  444.   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  445.  
  446.  Available ORDERING options: 
  447.  
  448.    1. Send your order with a personal check. Please add $8 if the value of your 
  449.       order is $65 or less; for a price above $65, add $16 for money transfer 
  450.       costs. 
  451.  
  452.    2. Send your money in cash to us. This doesn't require an additional fee but 
  453.       it is a little unsafe. 
  454.  
  455.    3. Give a money order to our account to your bank. This will only be 
  456.       accepted if you pre-pay all money transfer expenses. 
  457.  
  458.  Available DELIVERY options: 
  459.  
  460.    1. eMail. If you want to receive your registered version by eMail, there is 
  461.       no additional fee. NOTE! If you order a manual, connector or 1st Aid 
  462.       Package, email delivery is impossible! :-) 
  463.  
  464.    2. If your order is exactly ONE registered version and NOT MORE - no manual, 
  465.       no connector and no 1st Aid Package, add $3. Others add $18. 
  466.  
  467.  
  468. ΓòÉΓòÉΓòÉ 4.6. Preise (Deutschland) ΓòÉΓòÉΓòÉ
  469.  
  470.  
  471.   WatchCat 2.1 Preisliste - nur f╨ær Deutschland            5/95
  472.  
  473.     Artikel                 Anzahl     Preis     Inhalt
  474.     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  475.     Registrierte Version    1 - 9      35 DM     Standardlizenz,
  476.                             10-49      25 DM     Updategarantie,
  477.                             50-99      20 DM     Programmdiskette
  478.                             100-499    15 DM
  479.                             500+       10 DM
  480.     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  481.     1st Aid Package         1          80 DM     Standardlizenz,
  482.                             2 - 5      70 DM     Updategarantie,
  483.                             5 +        65 DM     Handbuch,
  484.                                                  Hardwarestecker,
  485.                                                  Programmdiskette
  486.     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  487.     Handbuch                1          15 DM     gebundenes Handbuch
  488.                                                  (nur bei Abnahme mind.
  489.                                                  einer Lizenz)
  490.     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  491.     Hardwarestecker         1          35 DM     Ein Hardwarestecker fuer
  492.                                                  Parallelport, serielle
  493.                                                  Schnittstelle oder
  494.                                                  Gameport
  495.     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  496.     Update-                 eMail      frei      Wir benachrichtigen Sie,
  497.     Benachrichtigung        FAX        1 DM      sobald eine neue Version
  498.                             Brief      2 DM      von WatchCat verfuegbar
  499.     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  500.  
  501. Bestellung senden an:
  502.  
  503. Thomas Opheys
  504. Landshuter Str. 105c C40
  505. D-93053 Regensburg
  506. Tel.: 0941-76299
  507.  
  508.  
  509. ΓòÉΓòÉΓòÉ 5. How to contact the authors ΓòÉΓòÉΓòÉ
  510.  
  511. There are several ways to contact us. 
  512.  
  513.      To order WatchCat write to: Opheys Electronic, von Normann/Opheys, 
  514.       Landshuter Str. 105c C40, 93053 Regensburg, Germany, 
  515.       watchcat@fmi.uni-passau.de 
  516.  
  517.      By regular mail: To receive further information or to write us a postcard 
  518.       or letter write to one (or both) of the following addresses: 
  519.  
  520.             Felix von Normann          Thomas Opheys
  521.             Innstr. 82              Landshuter Str. 105c C40
  522.             94036 Passau             93053 Regensburg
  523.             Germany               Germany
  524.             normann@fmi.uni-passau.de      opheys@fmi.uni-passau.de
  525.             http://www.uni-passau.de/~normann  http://www.uni-passau.de/~opheys
  526.  
  527.      Send email to: 
  528.  
  529.             watchcat@fmi.uni-passau.de (for all comments about WatchCat)
  530.             normann@fmi.uni-passau.de (to write a mail to Felix)
  531.             opheys@fmi.uni-passau.de (to write a mail to Thomas)
  532.  
  533.      World Wide Web:  We are currently working on a WWW homepage for WatchCat. 
  534.       You need a WWW browser (if you use OS/2, please note that this program is 
  535.       not part of the OS/2 Warp Bonus Pack, but available freely to all OS/2 
  536.       users). Select URL http://www.uni-passau.de/~normann/watchcat.html 
  537.       Currently we have links to: 
  538.  
  539.         -  The online documentation in HTML format (for WWW). 
  540.  
  541.         -  A link to Hobbes (where you can get the latest WatchCat package). 
  542.  
  543.         -  Some pages with the latest information about WatchCat. Frequently 
  544.            asked questions that are not part of this documentation will be 
  545.            collected there. 
  546.  
  547.  
  548. ΓòÉΓòÉΓòÉ 6. WatchCat for the impatient user ΓòÉΓòÉΓòÉ
  549.  
  550. After uninstalling previous versions of WatchCat, copy all files into a single, 
  551. separate directory (e.g. ramdisk, or final WatchCat directory). 
  552.  
  553. Now run the install program (install.exe) and follow the instructions, 
  554. especially select: 
  555.  
  556.      Easy installation: This options installs WatchCat in your CONFIG.SYS and 
  557.       creates a WPS object on your Workplace Shell. The only way to activate 
  558.       WatchCat is the keyboard. 
  559.  
  560.      Advanced installation: Select this option if you want to use a switch for 
  561.       LPT, COM, etc, or if you need more than one device. Use this option also 
  562.       if you do not want to install the WPS object. 
  563.  
  564.  Now installation is ready. The CONFIG.SYS is updated. Reboot. Activate 
  565.  WatchCat (default: Ctrl-Alt-W). Enjoy! 
  566.  
  567.  
  568. ΓòÉΓòÉΓòÉ 7. Installation and configuration of WatchCat ΓòÉΓòÉΓòÉ
  569.  
  570. (If you don't want to read much text, refer to WatchCat for the impatient 
  571. user.). 
  572.  
  573. Before installing WatchCat 2.1 you must deinstall WatchCat 1.x, WatchCat 2.x 
  574. (if present). 
  575.  
  576. We recommend using the installation program to copy the files and update the 
  577. CONFIG.SYS. 
  578.  
  579. Of course, you can also install WatchCat manually. This requires you to include 
  580. a device driver and a RUN= statement in the CONFIG.SYS file. 
  581.  
  582. To get information about which files are needed/not needed, please refer to the 
  583. section Understanding the files in the WatchCat package.). 
  584.  
  585.  
  586. ΓòÉΓòÉΓòÉ 7.1. Installation procedure ΓòÉΓòÉΓòÉ
  587.  
  588. Topics:
  589.  
  590. Deinstalling WatchCat 1.x
  591. Deinstalling WatchCat 2.0
  592. The install program
  593. Installing The WPS object
  594. Installing WatchCat manually
  595. Managing remote WatchCat
  596. Uninstalling WatchCat 2.x
  597.  
  598. Installing the process manipulation center
  599. Deinstalling the process manipulation center
  600.  
  601. Installing C-A-D
  602. Deinstalling C-A-D
  603.  
  604.  
  605. ΓòÉΓòÉΓòÉ 7.1.1. Deinstalling WatchCat 1.x ΓòÉΓòÉΓòÉ
  606.  
  607.           Note: YOU MUST DELETE AND DEREGISTER THE WATCHCAT 1.0/2.x OBJECT FROM 
  608.           THE WORKPLACE SHELL. DO NOT FORGET THIS STEP!!!! 
  609.  
  610.  If you installed the WPS object of WatchCat 1.x (the stupid cat on your 
  611.  Workplace Shell) please remove it BEFORE installing the new version. First 
  612.  delete the icon by using its context menu or dropping it on the shredder. 
  613.  DON'T FORGET THIS STEP! 
  614.  
  615.  Then you can deregister the WPS class. Either run the old WatchCat 1.x, once 
  616.  with the parameter deregisterWPS and once with the parameter clearini: 
  617.  
  618.   [C:\watchcat] watchcat deregisterWPS
  619.    ...
  620.   [C:\watchcat] watchcat clearini
  621.    ...
  622.  
  623.  If you already deleted WatchCat 1.x you can use the install program of 
  624.  WatchCat 2.1 to deregister it. Just type: 
  625.  
  626.   [C:\watchcat] install deregisterWPS
  627.  
  628.  Now you are ready to install WatchCat 2.1. 
  629.  
  630.  
  631. ΓòÉΓòÉΓòÉ 7.1.2. Using the install program ΓòÉΓòÉΓòÉ
  632.  
  633. It is very important to uninstall WatchCat 1.x first. 
  634.  
  635. It is assumed that you unpacked all files in a certain directory. You can put 
  636. all the files into the final WatchCat directory or tell the installation 
  637. program to do so. 
  638.  
  639. Then start install from the command line. 
  640.  
  641. You first have to choose between the easy installation and the advanced 
  642. installation. The easy installation procedure will install WatchCat in your 
  643. CONFIG.SYS, with as many features enabled as possible and default settings. The 
  644. default to activate WatchCat is to use Ctrl-Alt-W. 
  645.  
  646. If you want to activate WatchCat with any other input control, you must choose 
  647. the advanced installation. Please answer all questions, then in the end the 
  648. install program will add WatchCat to the CONFIG.SYS. 
  649.  
  650.           Note: Please note that you can use the install program to install the 
  651.           C-A-D package or the process manipulation center. 
  652.  
  653.  
  654. ΓòÉΓòÉΓòÉ 7.1.3. Installing the WPS object ΓòÉΓòÉΓòÉ
  655.  
  656. A separate installation step for the Workplace Shell object is not required any 
  657. longer. That is all managed by the install program. 
  658.  
  659.  
  660. ΓòÉΓòÉΓòÉ 7.1.4. Installing WatchCat manually ΓòÉΓòÉΓòÉ
  661.  
  662. WatchCat has the following architecture: 
  663.  
  664.  
  665.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  666.   Γöé   WatchCat    Γöé
  667.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  668.           
  669.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  670.   Γöé physical      Γöé
  671.   Γöé device driver Γöé
  672.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  673.           
  674.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  675.   Γöé   Hardware    Γöé
  676.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  677.  
  678. Therefore you must add the statements below to your CONFIG.SYS. Substitute 
  679. x:\path\ with the correct path and do not copy the italic text. (You can place 
  680. these lines somewhere in your CONFIG.SYS). 
  681. DEVICE=x:\path\watchcat.sys      ┬á insert at the end of CONFIG.SYS to install 
  682. the device driver 
  683. RUN=x:\path\watchcat.exe       ┬á to detach the main program 
  684.  
  685. In addition you need to update some variables: (WatchCat will probably not work 
  686. if you do not set these variables correctly). 
  687. PATH=...;x:\path\;           ┬á let OS/2 find watchcat.exe 
  688. LIBPATH=...;x:\path\;         ┬á let OS/2 find the DLL. 
  689. BOOKSHELF=...;x:\path\;        ┬á let OS/2 find this documentation 
  690.  
  691. If you do not want to activate WatchCat with the default hotkey Ctrl-Alt-W, it 
  692. is necessary to add a parameter to the device driver. The parameters are listed 
  693. in the next section. 
  694.  
  695.  
  696. ΓòÉΓòÉΓòÉ 7.1.5. Uninstalling WatchCat 2.x ΓòÉΓòÉΓòÉ
  697.  
  698. Currently we don't have a deinstall program. You must deinstall WatchCat 
  699. manually. To do so please follow these steps. 
  700.  
  701.    1. kill WatchCat (This can be done by WatchCat) 
  702.  
  703.    2. delete the WPS object (if there) 
  704.  
  705.    3. run install deregisterWPS from the commandline 
  706.  
  707.    4. remove WatchCat specific entries from your CONFIG.SYS ( RUN=..., 
  708.       DEVICE=..., LIBPATH, PATH, BOOKSHELF ) 
  709.  
  710.    5. reboot (!!!) 
  711.  
  712.    6. delete all files 
  713.  
  714.  
  715. ΓòÉΓòÉΓòÉ 7.1.6. Managing remote WatchCat ΓòÉΓòÉΓòÉ
  716.  
  717. Using WatchCat from a terminal is very easy: 
  718.  
  719.    1. Connect the terminal (in most cases a second PC) and the local PC via a 
  720.       serial cable. Start the terminal program and configure it correctly. 
  721.  
  722.    2. Configure the serial port of the local PC with the OS/2 mode command. 
  723.  
  724.    3. Now start WatchCat with the parameter /remote. Run it from the command 
  725.       line. Do not detach it. 
  726.  
  727.  Now you can use WatchCat from either your local PC or from your remote 
  728.  terminal. For technical reasons some key combinations are not possible on a 
  729.  terminal. Therefore other control sequences for closing windows and changing 
  730.  the focus are used on the remote terminal. Please read the built-in 
  731.  documentation for more information. Use WatchCat on your local PC as usual. 
  732.  
  733.           Note: You can adjust various settings by editing the file serial.cnf 
  734.           (This file is self-explaining). 
  735.  
  736.  
  737. ΓòÉΓòÉΓòÉ 7.1.7. Installing the process manipulation center ΓòÉΓòÉΓòÉ
  738.  
  739.           New feature: This is a new feature of the 1st Aid Package of WatchCat 
  740.           2.1. This package allows you to kill, suspend, resume threads or 
  741.           change the priority of thread in almost all processes. 
  742.  
  743.  To use process manipulation center the follow these steps: 
  744.  
  745.    1. Move these files into the WatchCat directory (if not already there): 
  746.  
  747.           viocalls.dll 
  748.  
  749.           newvio.dll 
  750.  
  751.           pmwin.dll 
  752.  
  753.           pmwin32.dll 
  754.  
  755.    2. Now ensure that the WatchCat-path is the first path in the LIBPATH 
  756.       statement of your config.sys. e.g. change: 
  757.  
  758.             LIBPATH=.;:\OS2;
  759.             into
  760.             LIBPATH=c:\watchcat\;.;c:\os2;
  761.  
  762.    3. Add the statement DEVICE=x:\path\killer.sys to the end of your config.sys 
  763.  
  764.    4. reboot 
  765.  
  766.  
  767. ΓòÉΓòÉΓòÉ 7.1.8. Deinstalling the process manipulation center package ΓòÉΓòÉΓòÉ
  768.  
  769. To deinstall the process manipulation center follow these steps: 
  770.  
  771.    1. Remove the WatchCat path from the LIBPATH statement of your config.sys. 
  772.  
  773.    2. Remove the DEVICE=...killer.sys statement from the config.sys 
  774.  
  775.    3. Reboot (!!) 
  776.  
  777.    4. Delete the following DLL: 
  778.  
  779.           viocalls.dll 
  780.  
  781.           newvio.dll 
  782.  
  783.           pmwin.dll 
  784.  
  785.           pmwin32.dll 
  786.  
  787.       Please delete these files from the WatchCat directory only!! Do not 
  788.       change these files in the \OS2\DLL directory. 
  789.  
  790.    5. You can now re-insert the WatchCat path into the LIBPATH statement or you 
  791.       can completely deinstall WatchCat. 
  792.  
  793.  
  794. ΓòÉΓòÉΓòÉ 7.1.9. Installing the C-A-D package ΓòÉΓòÉΓòÉ
  795.  
  796.           New feature: The C-A-D package is introduced with the registered 
  797.           version of WatchCat 2.1. 
  798.  
  799.           You can use the WatchCat install program to install all components of 
  800.           the C-A-D package. 
  801.  
  802.    1. Ctrl-Alt-Del feature. 
  803.  
  804.         a. Add the following statements to the config.sys: 
  805.  
  806.                       DEVICE=x:\path\vwcat.sys
  807.                       RUN=x:\path\wccad.exe
  808.  
  809.         b. Add the following statement to the autoexec.bat: 
  810.  
  811.                       x:\path\wccad.exe
  812.                       PATH=...;x:\watchcatpath
  813.  
  814.         c. Add the following load statement to the [windows] part of the 
  815.            win.ini 
  816.            load=x:\path\wcwin.exe 
  817.  
  818.    2. Desktop shutdown, Shutdown Folder: run instcad from the command line. 
  819.  
  820.           After installing and rebooting open the desktop settings. (right 
  821.           mouse button on desktop, Settings). Open the page labled "Shutdown". 
  822.           It is recommended to check at least "acknowledge shutdown". 
  823.  
  824.           After installing try to activate WatchCat with Ctrl-Alt-Del from DOS, 
  825.           Windows, OS/2 Fullscreen, OS/2-PM. Try also to press Ctrl-ESC or 
  826.           Alt-ESC to switch between sessions. If everything works fine, the 
  827.           installation was correct. 
  828.  
  829.           Please note that the source of the instcad.exe program is delivered 
  830.           also. Programmers may adjust this program to install the new desktop 
  831.           only or to install the shutdown folder only (which is not very useful 
  832.           as on its own...). 
  833.  
  834.  
  835. ΓòÉΓòÉΓòÉ 7.1.10. Deinstalling the C-A-D package ΓòÉΓòÉΓòÉ
  836.  
  837.    1. Ctrl-Alt-Del feature 
  838.  
  839.         a. Remove the following statements from the config.sys: 
  840.  
  841.                       DEVICE=x:\path\vwcat.sys
  842.                       RUN=x:\path\wccad.exe
  843.  
  844.         b. Remove the following statement from the autoexec.bat: 
  845.  
  846.                       x:\path\wccad.exe
  847.                       PATH=...;x:\watchcatpath
  848.  
  849.         c. Remove the following load statement from the [windows] part of the 
  850.            win.ini 
  851.            load=x:\path\wcwin.exe 
  852.  
  853.    2. Desktop shutdown, Shutdown Folder: run uncad from the command line. 
  854.  
  855.           Please note that the source of the uncad.exe program is delivered 
  856.           also. Programmers may compile this program on their own. 
  857.  
  858.  
  859. ΓòÉΓòÉΓòÉ 7.2. Understanding the files in the WatchCat package ΓòÉΓòÉΓòÉ
  860.  
  861. The WatchCat package contains the following (or less) files: 
  862.  
  863. File       task                       deleteable?
  864.  
  865. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  866.  
  867. readme.txt    small overview                  yes, after reading
  868. changes.txt   small overview                  yes
  869.  
  870. install.exe   install and deinstall WatchCat          yes, after install
  871.                                  save to diskette
  872. watchcat.sys   device driver                   no
  873. WatchCat.exe   The program. Executable on OS/2 2.11 and Warp
  874. wpcat.dll    Workplace Shell object              if you have no WPS object
  875. watchcat.inf   This documentation                if you don't need doc
  876. wcatwin.dll   Window calls, FeelX calls.            if you don't need
  877.                                  b) FeelX alt. marking
  878. wcatdeb.dl_   rename to wcatdeb.dll to use API         if you're not a programmer
  879. startpgm.dl_   rename to startpgm.dll to use this module     if you don't need it
  880. tracevio.dl_   rename to tracevio.dll to trace VIO calls.    if you don't need it
  881. wcat_api.zip   unpack to program WatchCat            if you're not a programmer
  882. wcinfo      information tool for trouble shooting      yes
  883.  
  884. wccad.exe    control C-A-D, intercept hotkeys         no, if you use C-A-D
  885. wccaddll.dll   used by wccad.exe                yes, (not recommended)
  886. vwcat.sys    virtual device driver              no, if you use C-A-D
  887. wcwin.exe    Windows part of C-A-D              no, if you use C-A-D
  888. wcwindll.dll   used by wcein                  no
  889. sdfolder.dll   shutdown folder                 yes, if you don't need it
  890. wcdesk.dll    extended desktop                 yes, if you don't need it
  891. shutdwn.exe   shutdown program                 yes
  892. kill.exe     small kill program                yes
  893. instcad, etc.  installation and sources             yes
  894.  
  895. killer.sys    device driver                  no, if installed
  896. viocalls.dll   necessary DLL                  no, if installed
  897. pmwin.dll    necessary DLL                  no, if installed
  898. newvio.dll    necessary DLL                  no, if installed
  899. pmwin32.dll   necessary DLL                  no, if installed
  900. qsize.dll    necessary DLL                  no, if installed
  901.  
  902.  
  903. ΓòÉΓòÉΓòÉ 7.3. Parameters supported by the device driver ΓòÉΓòÉΓòÉ
  904.  
  905. Topics:
  906. General syntax
  907. <option>
  908. <device>
  909. <mask>
  910. <hardware>
  911. summary
  912. Converting WCat 1.x options
  913.  
  914.  
  915. ΓòÉΓòÉΓòÉ <hidden> General syntax ΓòÉΓòÉΓòÉ
  916.  
  917.   DEVICE = ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇ WATCHCAT.SYS ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇ
  918.             ΓööΓöÇ <path> ΓöÇΓöÿ                  Γöé  Γö£ΓöÇ <option> ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé
  919.                                            Γöé  ΓööΓöÇ <activation> ΓöÇΓöÿ  Γöé
  920.                                            ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  921.  
  922.   <option> : ΓöÇΓöÇΓö¼ΓöÇ /Q ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ
  923.                Γö£ΓöÇ /mouse ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  924.                Γö£ΓöÇ /nomouse ΓöÇΓöÇΓöÇΓöÇΓöñ
  925.                Γö£ΓöÇ /pm ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  926.                Γö£ΓöÇ /nopm ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  927.                Γö£ΓöÇ /mono ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  928.                Γö£ΓöÇ /color ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  929.                Γö£ΓöÇ /fade ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  930.                Γö£ΓöÇ /nofade ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  931.                Γö£ΓöÇ /remote ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  932.                Γö£ΓöÇ /noremote ΓöÇΓöÇΓöÇΓöñ
  933.                Γö£ΓöÇ /remotepopup Γöñ
  934.                Γö£ΓöÇ /dll ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  935.                Γö£ΓöÇ /nodll ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  936.                Γö£ΓöÇ /killpmΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  937.                ΓööΓöÇ /nokillpmΓöÇΓöÇΓöÇΓöÇΓöÿ
  938.  
  939.   <activation> :  ΓöÇΓöÇΓöÇΓöÇ <device> ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ
  940.                                    ΓööΓöÇ : ΓöÇΓöÇ <mask> ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  941.                                                       ΓööΓöÇ <hardware> ΓöÇΓöÿ
  942. The actual values are described in the following sections. 
  943.  
  944.  
  945. ΓòÉΓòÉΓòÉ 7.3.1. <option> ΓòÉΓòÉΓòÉ
  946.  
  947. You may specify the following options for the device driver (they are globally 
  948. valid for all WatchCat's) or for the program (they are valid for that instance 
  949. of WatchCat only). 
  950.  
  951.      option     description
  952.      ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  953.      /Q           don't display device driver message on hotkeys
  954.      /mouse       use mouse (default)
  955.      /nomouse     don't use mouse
  956.      /pm          use PM calls (e.g. to get window list) (default)
  957.      /nopm        don't use PM calls
  958.      /mono        don't use colors
  959.      /color       use colors
  960.      /fade        fade in WatchCat screen (default)
  961.      /nofade      no fade in
  962.      /remote      use WatchCat via terminal (registered version only)
  963.      /noremote    don't use WatchCat via terminal (default)
  964.      /remotepopup let remote WatchCat popup on activation
  965.      /dll         load DLL on start-up (default)
  966.      /nodll       don't use DLLs
  967.      /killpm      kill the PM on a second activation (default)
  968.      /nokillpm    do not kill the PM
  969.  
  970.  
  971. ΓòÉΓòÉΓòÉ 7.3.2. <device> ΓòÉΓòÉΓòÉ
  972.  
  973. This part is to specify what kind of device you're using. 
  974.  
  975.      name  description       activation mechanism(s)   default bit mask           default hardware
  976.      ΓöÇΓöÇΓöÇΓöÇ  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  977.      KEYB  keyboard          (key/key combination)     Ctrl-Alt-W                 KEYB (Keyboard)
  978.      GAME  game port         (joystick or switch)      any joystick button        GAME (Game Port)
  979.      COM1  serial port 1     (switch)                  DCD,RI,DSR or CTS line     COM (serial)
  980.      COM2  serial port 2     (switch)                  as above                   as above
  981.      COM3  serial port 3     (switch)                  as above                   as above
  982.      COM4  serial port 4     (switch)                  as above                   as above
  983.      LPT1  parallel port 1   (switch)                  BUSY,ACK,PEND,SEL,ERROR    LPT (parallel)
  984.      LPT2  parallel port 2   (switch)                  as above                   as above
  985.      XXXX  user device       (any input)               any bit of the port        USER (user device)
  986.  
  987.  
  988. ΓòÉΓòÉΓòÉ 7.3.3. <mask> ΓòÉΓòÉΓòÉ
  989.  
  990. Defines which input lines/port bits of the given device may be used to accept a 
  991. WatchCat activation. Note that the mask byte must be hexadecimal, and exactly 
  992. two characters long. Example: "F0" (upper four bits will be used). 
  993. For certain devices, there are aliases for common bit masks: 
  994.  
  995.      dev:mask    description
  996.      ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  997.      GAME:JA     Joystick A, any button (J1 also works)
  998.      GAME:JB     Joystick B, any button (J2 also works)
  999.      GAME:JA1    Joystick A, button 1
  1000.      GAME:JA2    Joystick A, button 2
  1001.      GAME:JB1    Joystick B, button 1
  1002.      GAME:JB2    Joystick B, button 2
  1003.      COMx:DCD    COMx, Data Carrier Detect line
  1004.      COMx:RI     COMx, Ring Indicator line
  1005.      COMx:DSR    COMx, Data Set Ready line
  1006.      COMx:CTS    COMx, Clear To Send line
  1007.      LPTx:BUSY   LPTx, BUSY line (BSY also works)
  1008.      LPTx:ACK    LPTx, ACK (Acknowledge) line
  1009.      LPTx:PEND   LPTx, Paper End line
  1010.      LPTx:SEL    LPTx, Selected line
  1011.      LPTx:ERR    LPTx, Error line (ERROR also works)
  1012.      xxxx:ALL    all bits of the device
  1013.  For the KEYB device, a bit mask isn't useful. You can specify a make-code of a 
  1014. key instead; but normally, you use one of the following key aliases: F10, F11, 
  1015. F12, A, B, C, ..., X, Y, Z 
  1016. In addition, you can use CTRL, ALT or SHIFT or any combination of two of these 
  1017. three keys with the activation key: 
  1018.  
  1019.      S-<key>   SHIFT+<key>
  1020.      C-<key>   CTRL+<key>
  1021.      A-<key>   ALT+<key>
  1022.      CA-<key>  CTRL+ALT+<key>
  1023.      CS-<key>  CTRL+SHIFT+<key>
  1024.      AC-<key>  ALT+CTRL+<key>
  1025.      AS-<key>  ALT+SHIFT+<key>
  1026.      SC-<key>  SHIFT+CTRL+<key>
  1027.      SA-<key>  SHIFT+ALT+<key>
  1028.  
  1029.           Examples: 
  1030.  
  1031.                     parameter   to activate WatchCat, press
  1032.                     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1033.                     KEYB:F12    CTRL+ALT+W
  1034.                     KEYB:S-F11   SHIFT+F11
  1035.                     KEYB:CA-C   CTRL+ALT+C
  1036.  
  1037.           You should not use F10 or the A...Z keys without at least CTRL and/or 
  1038.           ALT because some programs might need these keys. 
  1039.  
  1040.           Note: Depending on your keyboard hardware, it might not be possible 
  1041.           to press several keys simultaneously. 
  1042.  
  1043.  
  1044. ΓòÉΓòÉΓòÉ 7.3.4. <hardware> ΓòÉΓòÉΓòÉ
  1045.  
  1046. Define of which hardware type the device is. The following names for hardware 
  1047. types are available: 
  1048.  
  1049.      name  hardware type
  1050.      ΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1051.      KEYB  Keyboard
  1052.      GAME  Game Port
  1053.      COM   serial COM Port
  1054.      LPT   parallel LPT Port
  1055.      USER  user device
  1056.  
  1057. For all standard device names like LPT1, KEYB, COM2, GAME, ... <hardware> is 
  1058. determined automatically. Only when <hardware> is a port address, you have to 
  1059. tell the device driver what kind of hardware is to be expected at this port 
  1060. address. 
  1061.  
  1062.           KEYB - Keyboard 
  1063.           The keyboard can be used to activate WatchCat. Btw. this also works 
  1064.           when the keyboard seems to be "dead" or if a PM session doesn't 
  1065.           respond to the keyboard. Currently, you can use F10, F11, F12 or A..Z 
  1066.           keys together with any combination of one or two shift keys 
  1067.           (CTRL,ALT,SHIFT). 
  1068.           The defaults for KEYB are: 0060:CA-W:KEYB, that is: The keyboard read 
  1069.           data port address hex 60 is used. CTRL+ALT+W is the default key to 
  1070.           activate WatchCat. Internally, the port address of a KEYB device is 
  1071.           discarded. So anything like XXXX:...:KEYB is useless because XXXX 
  1072.           will be replaced with 0060. This isn't a problem (or are there 
  1073.           keyboard controllers with port address<>hex 60?) 
  1074.           If one or two additional keys (SHIFT, CTRL or ALT) are to be pressed, 
  1075.           WatchCat looks for the make codes of all two (three) keys and 
  1076.           activates if at least one break code of these keys is recognized. 
  1077.           Internally, the port address of a KEYB/PKEY device is discarded. So 
  1078.           anything like XXXX:...:KEYB is useless because XXXX will be replaced 
  1079.           with 0060. This isn't a problem (or are there keyboard controllers 
  1080.           with port address<>hex 60?) 
  1081.  
  1082.           GAME - Game Port 
  1083.           A joystick or a special connector on a game port can be used to 
  1084.           activate WatchCat. 
  1085.           The defaults for GAME are: 0201:F0:GAME, that is: The game port read 
  1086.           data address hex 201 is used. A standard game port supports max. two 
  1087.           joysticks with two buttons each. Bit mask hex F0 means that any of 
  1088.           the four buttons may activate WatchCat. The meanings of the bits are: 
  1089.  
  1090.                     bit  mask description
  1091.                     ΓöÇΓöÇΓöÇ  ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1092.                     0-3   --  X/Y positions; don't use them (confuses WatchCat)
  1093.                     4     10  Joystick A, button 1
  1094.                     5     20  Joystick A, button 2
  1095.                     6     40  Joystick B, button 1
  1096.                     7     80  Joystick B, button 2
  1097.  
  1098.           COM - Serial Port 
  1099.           A serial COMx port can be used to activate WatchCat, in conjunction 
  1100.           with a special connector/switch. 
  1101.           The defaults for COM are: <base>:F0:COM, that is: <base> is the COMx 
  1102.           port's base port address: 
  1103.  
  1104.                     port  base port     For a COM port with a different base port
  1105.                     ΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ     address XXXX, use XXXX:F0:COM
  1106.                     COM1  03F8
  1107.                     COM2  02F8
  1108.                     COM3  03E8
  1109.                     COM4  02E8
  1110.  
  1111.           WatchCat sets the lower two bits of the COM port's MODEM CONTROL 
  1112.           Register to 1. This register has the address of BASE+4. Setting these 
  1113.           bits raises the COMx output lines RTS and DTR to +12V, providing +12V 
  1114.           for the connector/switch as a logical high source. 
  1115.           WatchCat inputs from the MODEM STATUS REGISTER which has the port 
  1116.           address of BASE+6. Only the upper four bits are significant here, 
  1117.           hence the bit mask hex F0. The meanings of the bits are: 
  1118.  
  1119.                     bit  mask description
  1120.                     ΓöÇΓöÇΓöÇ  ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1121.                     0-3   --  toggle bits; don't use them (confuses WatchCat)
  1122.                     4     10  CTS (Clear To Send) line
  1123.                     5     20  DSR (Data Set Ready) line
  1124.                     6     40  RI (Ring Indicator) line
  1125.                     7     80  DCD (Data Carrier Detect) line
  1126.  
  1127.  
  1128.           LPT - Parallel Port 
  1129.           A parallel LPTx port can be used to activate WatchCat, in conjunction 
  1130.           with a special connector/switch. 
  1131.           The defaults for LPT are: <base>:F8:LPT, that is: <base> is the LPTx 
  1132.           port's base port address: 
  1133.  
  1134.                     port  base port     For a LPT port with a different base port
  1135.                     ΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ     address XXXX, use XXXX:F8:LPT
  1136.                     LPT1  0378
  1137.                     LPT2  0278
  1138.  
  1139.           WatchCat sets all eight bits of the parallel port's DATA OUT 
  1140.           register, which can be found at the device's base port address. This 
  1141.           outputs eight logical high lines which can be used to drive some 
  1142.           electronics or provide a logical true source (+5V). 
  1143.           WatchCat reads from the STATUS IN REGISTER which has the port address 
  1144.           of BASE+1. Only the upper five bits are significant here, hence the 
  1145.           bit mask hex F8. The meanings of the bits are: 
  1146.  
  1147.                     bit  mask description
  1148.                     ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1149.                     0-2   --  reserved; don't use them (may confuse WatchCat)
  1150.                     3     08  ERR (Error) line
  1151.                     4     10  SEL (Selected) line
  1152.                     5     20  PEND (Paper End) line
  1153.                     6     40  ACK (Acknowledge) line
  1154.                     7     80  BUSY (Busy) line
  1155.  
  1156.           USER - User Device 
  1157.           Any device with a port address that reflects the electrical high/low 
  1158.           state of a switch or other input mechanism can be used to activate 
  1159.           WatchCat. 
  1160.           The defaults for USER are: XXXX:FF:USER, that is: The port address 
  1161.           XXXX is given by you. Mask hex FF enables all bits of the device's 
  1162.           input byte. The meanings of the bits depend on the kind of device. 
  1163.           Remark: GAME is equivalent to 0201:F0:USER 
  1164.  
  1165.           Example: If you have a non-standard COM5 serial device at port 
  1166.           address hex 3D8, use DEVICE=xxx\WATCHCAT.SYS 03D8:ALL:COM 
  1167.  
  1168.  
  1169. ΓòÉΓòÉΓòÉ 7.3.5. Summary ΓòÉΓòÉΓòÉ
  1170.  
  1171. You need one parameter for each device that you want to use to activate 
  1172. WatchCat. Each parameter has the form: x or x:y or x:y:z. 
  1173.  
  1174.           Examples: 
  1175.  
  1176.                     parameter(s)         activate WatchCat with...
  1177.                     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1178.                     KEYB GAME            CTRL+ALT+W key or any joystick button
  1179.                     KEYB:CA-W            CTRL+ALT+W key combination
  1180.                     KEYB KEYB:F11        F11 or CTRL+ALT+W key
  1181.                     GAME:JA2             button 2 of joystick A
  1182.                     LPT2:BUSY            BUSY line of LPT2
  1183.                     LPT1 LPT2            any input line of LPT1 and LPT2
  1184.                     COM1 COM2 COM3 COM4  any input line of any COM port
  1185.                     03D8:DCD:COM         Data Carrier Detect line of a
  1186.                                          non-standard COM port at port
  1187.                                          address hex 3D8
  1188.                     01B1:ALL:USER        any input line of port 1B of a
  1189.                                          8255 chip with base address 01B0
  1190.  
  1191.  
  1192. ΓòÉΓòÉΓòÉ 7.3.6. Converting WatchCat 1.x options ΓòÉΓòÉΓòÉ
  1193.  
  1194. The following table compares all WatchCat 1.x  switches and the new switches. 
  1195.  
  1196. old parameter      new parameter        parameter for
  1197.  
  1198. ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ           ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ              ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1199.  
  1200. /1            LPT1            watchcat.sys
  1201. /2            LPT2            watchcat.sys
  1202. /I=P,B          P:B:hw-type         watchcat.sys
  1203. /G            GAME            watchcat.sys
  1204. /GA           GALL            watchcat.sys
  1205. /C1           COM1            watchcat.sys
  1206. /C2           COM2            watchcat.sys
  1207. /C3           COM3            watchcat.sys
  1208. /C4           COM4            watchcat.sys
  1209. /Bx           GALL            watchcat.sys
  1210. /T            not needed any longer
  1211. /A            menu(Options/Options...)  (program)
  1212. /P            menu(Options/Options)    (program)
  1213. /D            menu(Options/Options)    (program)
  1214. /M            /NOCOLOR          watchcat.sys or
  1215.                           watchcat.exe
  1216.             menu(Options/Options)    (program)
  1217. /S:x           menu(Options/Options)    (program)
  1218. /on /off /toggle     WPS object (context menu)  WPS object (right mouse button)
  1219. exit           not needed any longer
  1220. shadow          not needed any longer
  1221. registerWPS                     installation program
  1222. deregisterWPS      deregisterWPS        installation program
  1223. clearini         (automatically)
  1224.  
  1225.  
  1226. ΓòÉΓòÉΓòÉ 7.4. How to build a connector ΓòÉΓòÉΓòÉ
  1227.  
  1228. You don't have to build a connector. WatchCat now supports the keyboard, too. 
  1229. If you do not want to use the keyboard, you can also use a switch for the 
  1230. parallel port or the serial port. Another way of activating WatchCat is to use 
  1231. a joystick. 
  1232.  
  1233.  
  1234. ΓòÉΓòÉΓòÉ 7.4.1. Connecting with the parallel port ΓòÉΓòÉΓòÉ
  1235.  
  1236. It's so simple... Just go out and buy a 25-pin male SUB-D connector that fits 
  1237. to your parallel port, and a single-pole double-throw (SPDT) switch.  The 
  1238. switch looks like this: In the position shown pins 2 and 3 are connected. 
  1239.  
  1240. Connect the following pins: 
  1241.  
  1242.  
  1243.  switch  connector DB-25
  1244.  
  1245.  1   <-   2 (DATA 0 signal, output)       used as logical HIGH
  1246.  
  1247.  2   ->  11 (BUSY signal, input)          used to input the state
  1248.  
  1249.  3   <-  19 (GROUND)                      used as logical LOW
  1250.  
  1251. The following picture gives an overview how to connect for these situations: 
  1252.  
  1253. You might also want to use another kind of switch: one that simply opens and 
  1254. closes one connection. It's just like the one that is used as a Turbo Button in 
  1255. your computer case, i.e. if you don't use your Turbo Button you can use it as 
  1256. the activation switch for WatchCat. Get a switch that stays in the position in 
  1257. which you put it. 
  1258.  
  1259. You can use one like your case's Reset Button, but you might have to hold it 
  1260. down for a while before WatchCat recognizes it. 
  1261.  
  1262. You will also need one 4.7 kOhm resistor. 
  1263.  
  1264. In the picture shown both pins are connected when the button is pressed: 
  1265.  
  1266. Connect one end of the resistor to pin 11, the other end to pin 19 of the 
  1267. parallel port connector. Pin 11 is also connected to one pin of the switch. The 
  1268. other pin of the switch is connected to pin 2 of the parallel port. 
  1269.  
  1270. The following picture gives an overview of how to connect for these situations: 
  1271.  
  1272.  
  1273. ΓòÉΓòÉΓòÉ 7.4.2. Connecting with a serial COMx port ΓòÉΓòÉΓòÉ
  1274.  
  1275. The same two kinds of connectors (as described in the previous section) can be 
  1276. used here, too. Get a 25-pin or 9-pin female connector for the serial port. 
  1277. For the first type of switch (SPDT), connect the following pins: 
  1278.  
  1279.  
  1280.  25-pin     9-pin      connector on COMx
  1281.  
  1282.  1 <- 20    1 <- 4     (+12V DC output)      used as logical HIGH
  1283.  
  1284.  2 -> 22    2 -> 9     (RI)                  used to input the state
  1285.  
  1286.  3 <-  7    3 <- 5     (GROUND)              used as logical LOW
  1287.  
  1288. For the second type of switch: (Turbo Button...): Connect one end of the 
  1289. resistor to pin 22 (25 pin)/9 (9 pin), the other end to pin 7/5 of the COMx 
  1290. port connector. Pin 22/9 is also connected to one pin of the switch. The other 
  1291. pin of the switch is connected to pin 20/4 of the serial port. Note that here 
  1292. the resistor has to be around 12kOhm. 
  1293.  
  1294.  
  1295. ΓòÉΓòÉΓòÉ 7.4.3. connecting with game port ΓòÉΓòÉΓòÉ
  1296.  
  1297. The same two kinds of connectors can be used here, too. Get a 15-pin male 
  1298. connector for the game port.  For the first type of switch (SPDT), connect the 
  1299. following pins: 
  1300.  
  1301.  
  1302.  switch          connector DB-15 (game port)
  1303.  
  1304.  1   <-    1     (+5V DC output)                  used as logical HIGH
  1305.  
  1306.  2   ->   XX     (fire button, input)             used to input the
  1307.                                                   state
  1308.  
  1309.  3   <-    4     (GROUND)                         used as logical LOW
  1310.  
  1311. Where XX equals  2  for  joystick A, button 1
  1312.          7    joystick A, button 2
  1313.          10    joystick B, button 1  <- recommended
  1314.          14    joystick B, button 2
  1315.  
  1316. For the second type of switch: (Turbo Button...): Connect one end of the 
  1317. resistor to pin XX, the other end to pin 4 of the game port connector. Pin XX 
  1318. is also connected to one pin of the switch. The other pin of the switch is 
  1319. connected to pin 1 of the game port. Note that here the resistor has to be 
  1320. 4,7kOhm. 
  1321.  
  1322. For the game port, you should know that EVERY time you press (and hold) one 
  1323. joystick's fire button, WatchCat is activated. We only say this because some 
  1324. people are said to play games under OS/2... In this case we recommend to use 
  1325. one of joystick B's buttons as the WatchCat switch (or build a connector on the 
  1326. game port that uses the corresponding pin). 
  1327.  
  1328.  
  1329. ΓòÉΓòÉΓòÉ 7.5. Configuring WatchCat ΓòÉΓòÉΓòÉ
  1330.  
  1331. Configuring WatchCat has become easier. You can use the program itself to do 
  1332. so. If you change any settings (sort, etc.) through a menu point, this 
  1333. parameter is changed until the next start of WatchCat only. 
  1334.  
  1335. If you want to change a parameter persistently (over boot time) chose Options 
  1336. ... from the Options menu. 
  1337.  
  1338. This window looks similar to this: 
  1339.  
  1340. ΓòöΓòíΓûáΓò₧ΓòÉΓòíOptionsΓò₧ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòíΓò₧Γòù
  1341. ΓòæStart-up windows:                                                             Γòæ
  1342. Γòæ  [ ] Proc-info   [ ] Threads    [ ] Libraries                                Γòæ
  1343. Γòæ  [ ] Semaphores  [ ] Shared Mem                                              Γòæ
  1344. Γòæ  ( ) Modules     () Processes  ( ) PM                                       Γòæ
  1345. Γòæ                                                                              Γòæ
  1346. ΓòæSort:  [ ] invers sorting                                                     Γòæ
  1347. Γòæ  Modules:      ( ) type  ( ) name  ( ) pid   () structure                   Γòæ
  1348. Γòæ  Processes:    ( ) type  ( ) name  ( ) pid   () structure                   Γòæ
  1349. Γòæ  PM-Processes: ( ) type  ( ) name  ( ) pid   () structure                   Γòæ
  1350. Γòæ                                                                              Γòæ
  1351. ΓòæOther:                                                                        Γòæ
  1352. Γòæ  path:         ( ) full  () names only                                      Γòæ
  1353. Γòæ  lines:        () 25    ( ) 43    ( ) 50                                    Γòæ
  1354. Γòæ  color:        () color ( ) mono                                            Γòæ
  1355. Γòæ                                                                              Γòæ
  1356. ΓòæColor:                                                                        Γòæ
  1357. Γòæ  [Frame           ]   [white     ] on [dark blue ]                     Γòæ
  1358. Γòæ                                                                              Γòæ
  1359. Γòæ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                                        Γòæ
  1360. Γòæ    Γöé  Save  Γöé  Γöé Change Γöé  Γöé Cancel Γöé                                        Γòæ
  1361. Γòæ    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                                        Γòæ
  1362. ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
  1363.  
  1364. Change anything that requires to be changed... If you select Save, all Settings 
  1365. will be saved and restored the next time WatchCat is started. If you select 
  1366. Change, all system parameters are changed, but they are not saved. Last but not 
  1367. least, if you select Cancel, the window is closed without any action. 
  1368.  
  1369.           The parameters are saved in a file called watchcat.ini. This file is 
  1370.           not an OS/2-PM standard ini-file. It is not required that this file 
  1371.           exists. If the file does not exist, WatchCat uses the default values. 
  1372.           If you have any problems because you changed parameters the wrong 
  1373.           way, just delete this file. (It is placed in the directory where the 
  1374.           device driver is installed). 
  1375.  
  1376.  As you can see, there are three major sections: 
  1377.  
  1378.  Start-up windows: You can select between one and three windows that should be 
  1379.  opened automatically on program start. You can also decide whether the default 
  1380.  view of the main window is a process list, a complete module list or just the 
  1381.  PM-programs. 
  1382.  
  1383.  Sort: For any of these three types, you can select a sort criterion. You can 
  1384.  sort by module name, module type, process id or structure. 
  1385.  
  1386.  In the last section you can decide whether all module names should be 
  1387.  displayed with full path, how many lines you want to have and whether you need 
  1388.  color or not. 
  1389.  
  1390.  
  1391. ΓòÉΓòÉΓòÉ 7.6. Using the WPS object ΓòÉΓòÉΓòÉ
  1392.  
  1393. This chapter describes how to use the Workplace Shell object: 
  1394.  
  1395. The context menu
  1396. The "Option" page
  1397. The "Hotkey" page
  1398. The "Window" page
  1399.  
  1400.           Note: The WatchCat object allows the user to activate WatchCat and to 
  1401.           change some global settings. WatchCat is started by the CONFIG.SYS. 
  1402.           Therefore there is no need to put this object into the start-up 
  1403.           folder. 
  1404.  
  1405.           Note: In contrast to WatchCat 1.x, settings like sort, ... can be 
  1406.           done from the WatchCat program (not the object). 
  1407.  
  1408.  
  1409. ΓòÉΓòÉΓòÉ 7.6.1. The context menu ΓòÉΓòÉΓòÉ
  1410.  
  1411. The context menu of WatchCat looks like this: 
  1412.  
  1413. There are two views for WatchCat. Select them by Open. Either you can activate 
  1414. a detached version of WatchCat (which is started by the CONFIG.SYS) or you can 
  1415. start a new windowed instance on the Workplace Shell. (The default can be 
  1416. changed on the Settings window page.) 
  1417.  
  1418. If you need help, click on WatchCat in the Help menu. This will load this 
  1419. online documentation. 
  1420.  
  1421. The last menu point allows the user to temporarily switch WatchCat on/off. The 
  1422. current state is represented by the icon (you try it...). 
  1423.  
  1424.  
  1425. ΓòÉΓòÉΓòÉ 7.6.2. The "Options" page ΓòÉΓòÉΓòÉ
  1426.  
  1427. The Options page looks like this: 
  1428.  
  1429. This page allows the user to switch on or off a device specified in the 
  1430. CONFIG.SYS. In the case above the driver watchcat.sys was called with the 
  1431. parameter KEYB (or without any parameter). Therefore you can turn on or off 
  1432. activating WatchCat by the keyboard. 
  1433.  
  1434. All other devices (in this case Game, LPT, COM) are not selectable (disabled). 
  1435.  
  1436.           Note: Per default (if you selected easy installation) only the 
  1437.           keyboard can be used to activated WatchCat. Therefore only the 
  1438.           keyboard can be turned on or off. All other items are not selectable 
  1439.           (disabled). 
  1440.  
  1441.  
  1442. ΓòÉΓòÉΓòÉ 7.6.3. The "Hotkey" page ΓòÉΓòÉΓòÉ
  1443.  
  1444. The Hotkey page looks like this: 
  1445.  
  1446. This page does not appear if you have not selected hotkeys in the CONFIG.SYS. 
  1447. You can easily change the hotkey here (e.g. if you have compatibility problems 
  1448. with other programs). 
  1449.  
  1450. If you have problems to activate WatchCat via device driver (this may happen in 
  1451. case of a bus mouse, or with the Notebook APM), you can turn off "use device 
  1452. driver" (like above). This selection does not employ the driver, which may 
  1453. solve some problems. On the other hand, there may be situations where WatchCat 
  1454. does not pop up when it is not activated by the driver. When turning off the 
  1455. driver, it is also impossible to activate WatchCat from DOS or Windows. 
  1456.  
  1457.           Note: When turning off the driver, the line 
  1458.  
  1459.                     RUN=x:\watchcat\wccad.exe
  1460.           must be found in the CONFIG.SYS which is not the default. Instead the 
  1461.           install program inserts a REMed line. So you must remove the "REM". 
  1462.  
  1463.           Note: When WatchCat is activated via the driver, the parameters can 
  1464.           be changed "live". When WatchCat is activated by wccad, it is 
  1465.           necessary to reboot. 
  1466.  
  1467.           Note: WatchCat will "remember" the changed Hotkey after rebooting 
  1468.           only if you did not specify a hotkey in the config.sys (which is the 
  1469.           default). It is recommended to use the driver watchcat.sys without 
  1470.           any parameter, if possible. 
  1471.  
  1472.  
  1473. ΓòÉΓòÉΓòÉ 7.6.4. The "Window" page ΓòÉΓòÉΓòÉ
  1474.  
  1475. The Window page looks like this: 
  1476.  
  1477. Select a default view here. A double-click on the WatchCat object will either 
  1478. activate a detached version of WatchCat or will start a windowed version 
  1479. depending on your choice here. This is the only boot persistent choice. (It 
  1480. will also be saved by DeskMan/2). 
  1481.  
  1482. In the above case, a double-click on the WatchCat item would start a second 
  1483. instance of WatchCat in a window. 
  1484.  
  1485.  
  1486. ΓòÉΓòÉΓòÉ 8. Activating WatchCat ΓòÉΓòÉΓòÉ
  1487.  
  1488. The way you activate WatchCat depends on your configuration. If you have chosen 
  1489. the default configuration, simply press Ctrl-Alt-W to activate the program. 
  1490.  
  1491.           Note: If you do not want to use a hotkey, you can also build a simple 
  1492.           switch for the parallel port or the serial port, or activate WatchCat 
  1493.           by a joystick 
  1494.  
  1495.  The monitor is switched to text mode and WatchCat appears. Use the cursor keys 
  1496.  or the mouse to select a process or module. 
  1497.  
  1498.  If you want to kill an application, press k. To switch to a process (if 
  1499.  possible), press Enter. To open a shell, press space. To get a context menu, 
  1500.  press the right mouse button. You can also select items from the main menu. 
  1501.  
  1502.           New feature: When activating WatchCat a second time before it pops 
  1503.           up, the pmshell is killed. This helps WatchCat to popup in some 
  1504.           situations. Also on a second activation the C-A-D feature (if 
  1505.           installed) of the registered version is disabled, so Ctrl-Alt-Del 
  1506.           results into regular booting. 
  1507.  
  1508.           Note: Users of a bus mouse may have a "jumping mouse pointer" when 
  1509.           activating WatchCat via the driver. Users of a APM-Notebook may find 
  1510.           out that their notebook does not go into sleeping mode. In both cases 
  1511.           it may be useful to activate WatchCat in another way. See information 
  1512.           about the WPS object for more information. 
  1513.  
  1514.  
  1515. ΓòÉΓòÉΓòÉ 9. Understanding WatchCat ΓòÉΓòÉΓòÉ
  1516.  
  1517. The following sections explain how to use WatchCat and how to navigate through 
  1518. the supplied information. 
  1519.  
  1520.  
  1521. ΓòÉΓòÉΓòÉ 9.1. The WatchCat package ΓòÉΓòÉΓòÉ
  1522.  
  1523. This section explains how to use WatchCat (the main package). 
  1524.  
  1525.  
  1526. ΓòÉΓòÉΓòÉ 9.1.1. Using WatchCat ΓòÉΓòÉΓòÉ
  1527.  
  1528. The usage of WatchCat is very similar to PM. You can use either the mouse or 
  1529. the keyboard to navigate through the windows. The main menu is at the top of 
  1530. the screen. A status line is visible at the bottom. The rest of the screen is 
  1531. filled with information windows. You can have between 1 and 4 windows visible 
  1532. at the same time. 
  1533.  
  1534. The main difference between the way to use WatchCat and the way to use (native) 
  1535. PM is that you activate a window by just moving the mouse onto it. You don't 
  1536. have to click explicitly on it. (BTW: This is the way of activating windows 
  1537. when you're using FeelX ...) 
  1538.  
  1539. The active window has a double border, while all other windows have a single 
  1540. border. 
  1541.  
  1542. The main idea is that there is one "main" window (this is the process or module 
  1543. window). All other windows show information related to one item of the main 
  1544. window. 
  1545.  
  1546. As a consequence, the process window cannot be closed. You can select a process 
  1547. / module by using the mouse or keyboard. The information in any other (most) 
  1548. windows depend on this selection! For example the Library window does not list 
  1549. all the libraries in the system but only those that are used by the current 
  1550. selected process. 
  1551.  
  1552.           Note: All windows have a selection bar but only the selection in the 
  1553.           process / module list has a meaning. The other windows have a 
  1554.           selection bar only for easier usage. 
  1555.  
  1556.  To learn how to use WatchCat, just play around. 
  1557.  
  1558.           Note: It is not dangerous to play around with WatchCat. All you need 
  1559.           to know is that "K" kills a program, "Enter" switches to the selected 
  1560.           program if possible, "ESC" leaves the WatchCat screen (but does not 
  1561.           end WatchCat). 
  1562.  
  1563.  
  1564. ΓòÉΓòÉΓòÉ 9.1.2. The main menu ΓòÉΓòÉΓòÉ
  1565.  
  1566. The first menu item (called Info) can be used to select what kind of 
  1567. information is displayed. The topmost menu item affects the information in the 
  1568. main window. You can view either all modules in the system (these are Device 
  1569. Drivers, DLL, Dos and OS/2 programs, ...) or only the processes (in fact 
  1570. programs) or just the PM-programs (most often responsible for system hangups). 
  1571.  
  1572. The following items in the menu Info open new windows with additional 
  1573. information about the currently selected process. 
  1574.  
  1575. The Action menu allows special actions. You can open a shell with the first 
  1576. menu point. The second menu point forces WatchCat to redraw the entire screen 
  1577. and update the information. You can kill a process with the third menu item. 
  1578. Sending WM_QUIT does make sense only for PM programs. Sending WM_QUIT 
  1579. terminates the PM program, but not with as much brutality as killing the 
  1580. application. If this menu item does not work, you must kill the application. 
  1581. The Action menu now supports a windowed command shell (Demo in the unregistered 
  1582. version), and an interface to the process manipulation center (menu item 
  1583. "enhanced kill"). You can also shutdown the system from WatchCat or just 
  1584. reboot. The system shutdown will flush all buffers. There is a new menu item 
  1585. called "Kill all". Use this menu item to kill by name. (E.g. select cmd.exe and 
  1586. use this item to kill all cmd.exe) 
  1587.  
  1588. The Options menu lets you change a lot of settings. Please note that it is 
  1589. necessary to select options via the menu item Options ... to save them 
  1590. permanently. 
  1591.  
  1592. The Add-On menu contents depend on the WatchCat special function DLL. You can 
  1593. easily write your own WatchCat module. Any window created with an external DLL 
  1594. is listed here. 
  1595.  
  1596. If you forget something about keys and usage, select Help to get help. 
  1597.  
  1598.           Note: WatchCat does not support overlaying windows. This restriction 
  1599.           implies that the windows are not updated while a menu is visible. 
  1600.  
  1601.  
  1602. ΓòÉΓòÉΓòÉ 9.1.3. The "Process list" window ΓòÉΓòÉΓòÉ
  1603.  
  1604. This is the most important window. This window lists all processes or all 
  1605. modules currently loaded / running in the system. 
  1606.  
  1607.                     ΓòöΓòÉ[Process list]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
  1608.                     ΓòæMOD TYPE    PID CPU NAME              Γòæ
  1609.                     ΓòæΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ    ΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ              Γòæ
  1610.                     Γòæprg PM       12 83% OS2CHESS.EXE (OS/2
  1611.                     Γòæprg PM       15     PULSE.EXE         Γûæ
  1612.                     Γòæprg Vio      16     CMD.EXE (WatchCat.Γûæ
  1613.                     Γòæprg Vio      19     CMD.EXE (T.EXE)   Γûô
  1614.                     Γòæprg Vio      1A     CMD.EXE (CMD.EXE) Γûæ
  1615.                     Γòæprg PM       1E     VIEWDOC.EXE (Infor
  1616.                     ΓòÜΓûôΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓò¥
  1617.  
  1618.  The MOD column gives the type of the module: prg means program, while mod 
  1619.  means any other module. 
  1620.  
  1621.  The TYPE column gives more information about the module type. Currently the 
  1622.  following types are supported: BaseDev - base device driver, Dev - physical 
  1623.  device driver, VDev - virtual device driver, IFS - installable file system, 
  1624.  DLL - Dynamic link library, Font - font, VDM - virtual DOS machine, detach - 
  1625.  detached process, FS - full screen OS/2 program, Vio - windowed program, PM - 
  1626.  Presentation Manager program. 
  1627.  
  1628.  The PID column represents the process id of the module in hexadecimal 
  1629.  notation. This id is available only for processes. 
  1630.  
  1631.  The CPU column gives information about the relative CPU usage by all 
  1632.  processes. This is not an exact value, but an estimation. Please note that 
  1633.  this value is relative. It may look like WatchCat is very CPU-intensive. This 
  1634.  is not true. If WatchCat is the only thing running, it is trivial that it 
  1635.  alone uses the CPU. Try to run pulse and you'll see that pulse will get much 
  1636.  more CPU time than WatchCat itself. 
  1637.  
  1638.  The Name column displays the name and optionally the path of the module. 
  1639.  
  1640.           Since DOS is more or less only a program loader it cannot provide 
  1641.           information about processes, etc. Of course the virtual DOS machines 
  1642.           inherit this problem. Therefore an OS/2 process like WatchCat can get 
  1643.           the information concerning a virtual DOS machine. But it is 
  1644.           impossible (except with a lot of technical tricks) to get information 
  1645.           about the programs running in the DOS session. To provide more 
  1646.           information about the DOS session than just "VDM", WatchCat tries to 
  1647.           extract the window title of the VDM. This might be a hint about what 
  1648.           program is running in the VDM. 
  1649.  
  1650.           Getting the window name is not a CPU-trivial task for WatchCat. 
  1651.           Therefore this information is updated very, very rarely. 
  1652.  
  1653.  
  1654. ΓòÉΓòÉΓòÉ 9.1.4. The Process info - window ΓòÉΓòÉΓòÉ
  1655.  
  1656. This window provides a little more detailed information about a process. We 
  1657. believe this is self-explanatory. 
  1658.  
  1659.                     Γòö[Γûá]ΓòÉ[Process details]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
  1660.                     Γòæpath:        G:\OS2\                  Γòæ
  1661.                     Γòæname:        CMD.EXE                  Γòæ
  1662.                     ΓòæProcess id:  19                       Γòæ
  1663.                     ΓòæParent pid:  5                        Γòæ
  1664.                     ΓòæSession:     27                       Γòæ
  1665.                     Γòæhandle:      0448                     Γòæ
  1666.                     ΓòæStatus:      running                  Γòæ
  1667.                     Γòætype:        Windowable (32 bit)      Γòæ
  1668.                     Γòæ                                      Γòæ
  1669.                     ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
  1670.  
  1671.  
  1672. ΓòÉΓòÉΓòÉ 9.1.5. The Threads window ΓòÉΓòÉΓòÉ
  1673.  
  1674.                     Γòö[Γûá]ΓòÉ[Threads]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
  1675.                     Γòæ ID PRIO STATUS  BLOCKID              Γòæ
  1676.                     ΓòæΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ              Γòæ
  1677.                     Γòæ  1  200 blocked fffe0a4e             Γòæ
  1678.                     Γòæ  2  300 running fff7c2db             Γòæ
  1679.                     Γòæ  3  200 blocked  62800ee             Γòæ
  1680.                     Γòæ  4  301 blocked fffe0a6e             Γòæ
  1681.                     ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
  1682.  
  1683.  The ID column lists the thread ID. 
  1684.  
  1685.  The PRIO column shows the priority of a thread. This value is given in hex. 
  1686.  The priorities have the following meaning: 
  1687.  
  1688.    PRIO  Explanation
  1689.    ΓöÇΓöÇΓöÇΓöÇ  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  1690.    1xx  low priority
  1691.    2xx  normal priority
  1692.    4xx  foreground server
  1693.    3xx  time critical
  1694.  
  1695.  The STATUS column gives information about the thread's state. A thread can be 
  1696.  running (but there is only one WatchCat thread running when this info is 
  1697.  displayed...), be blocked (then the BLOCKID column gives additional 
  1698.  information), a thread can also be ready (this means that the thread is not 
  1699.  waiting but will be running as soon as it gets CPU time). If a thread is 
  1700.  frozen, then the application is loaded with the preload-feature of OS/2 (or it 
  1701.  is thread is suspended). 
  1702.  
  1703.  Pressing the right mouse button (or Shift F1O) displays a thread context menu. 
  1704.  Use it to unblock any thread. This might be useful in some situations. Please 
  1705.  be careful, because it might damage the application. 
  1706.  
  1707.           New feature: With any version of WatchCat you can unblock a thread 
  1708.           via a thread context menu. This will resume the thread and may be 
  1709.           useful in certain situations of testing. 
  1710.  
  1711.           New feature: With the 1st Aid package of WatchCat you have the 
  1712.           process manipulation center. For PM applications and many windowed 
  1713.           programs each thread has an extended context menu where you can 
  1714.           simply kill, suspend or resume any thread or even change its 
  1715.           priority!! (This is part of the registered version only.) of testing. 
  1716.  
  1717.  
  1718. ΓòÉΓòÉΓòÉ 9.1.6. The Libraries window ΓòÉΓòÉΓòÉ
  1719.  
  1720.                     Γòö[Γûá]ΓòÉ[Dynamic Link Libraries]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
  1721.                     Γòæmod DLL(32)         DOSCALL1.DLL      Γòæ
  1722.                     Γòæmod DLL(32)         KBDCALLS.DLL      Γòæ
  1723.                     Γòæmod DLL(32)         MOUCALLS.DLL      Γòæ
  1724.                     Γòæmod DLL(32)         MSG.DLL           Γòæ
  1725.                     Γòæmod DLL(32)         NLS.DLL           Γòæ
  1726.                     Γòæmod DLL(32)         VIOCALLS.DLL      Γòæ
  1727.                     ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
  1728.  
  1729.  The library window just lists all the dynamic link libraries (DLL) used by 
  1730.  this process. Please note that this list is directly associated with the 
  1731.  currently selected process. 
  1732.  
  1733.  
  1734. ΓòÉΓòÉΓòÉ 9.1.7. The Semaphores window ΓòÉΓòÉΓòÉ
  1735.  
  1736.                     Γòö[Γûá]ΓòÉ[Semaphores]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
  1737.                     ΓòæNAME                  INDEX REF REQ FLΓòæ
  1738.                     ΓòæΓöÇΓöÇΓöÇΓöÇ                  ΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇ ΓöÇΓöÇΓòæ
  1739.                     Γòæ\SEM\LKNED001.SEM      53AC   1   0 0 
  1740.                     Γòæ\SEM\LKNED002.SEM      53B2   1   0 0 Γûæ
  1741.                     Γòæ\SEM\LKNED003.SEM      53B8   1   0 0 Γûæ
  1742.                     Γòæ\SEM\PMHDERR.SEM       53CA   1   0 2 Γûæ
  1743.                     Γòæ\SEM\SMGCONT.SEM       53BE   2   0 0 Γûæ
  1744.                     Γòæ\SEM\VIOPOPUP          539A  19   0 0 Γûô
  1745.                     Γòæ\SEM\VIOPRTSC          53A0  16   0 8 
  1746.                     ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
  1747.  
  1748.  This window has the least information value. It lists all 16-bit semaphores 
  1749.  that are used by the current selected process. 
  1750.  
  1751.  
  1752. ΓòÉΓòÉΓòÉ 9.1.8. Shared Memory window ΓòÉΓòÉΓòÉ
  1753.  
  1754.                     Γòö[Γûá]ΓòÉ[Shared Memory]ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ[]Γòù
  1755.                     ΓòæNAME                      SIZE    SEL Γòæ
  1756.                     ΓòæΓöÇΓöÇΓöÇΓöÇ                      ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöÇΓöÇΓöÇ Γòæ
  1757.                     ΓòæPMDRAG.MEM               :  4096B 960FΓòæ
  1758.                     ΓòæPMGLOBAL.MEM             :  4096B 961FΓòæ
  1759.                     ΓòæPULSECTL                 :    48K 893FΓòæ
  1760.                     Γòæ                                      Γòæ
  1761.                     Γòæ                                      Γòæ
  1762.                     Γòæ                                      Γòæ
  1763.                     Γòæ                                      Γòæ
  1764.                     ΓòÜΓûôΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓò¥
  1765.  
  1766.  This window lists all shared memory segments used by a process. It also shows 
  1767.  the size of the memory block, the selector and the handle. 
  1768.  
  1769.  
  1770. ΓòÉΓòÉΓòÉ 9.2. The process manipulation center ΓòÉΓòÉΓòÉ
  1771.  
  1772.           New feature: This is a new feature of the 1st Aid Package of WatchCat 
  1773.           2.1. After installing this package there are additional entries in 
  1774.  the context menu of most processes and threads. 
  1775.  
  1776.      processes: 
  1777.  
  1778.         1. DosExit. This aborts a process in an orderly manner. 
  1779.  
  1780.         2. Breakpoint. Choose this menu point to kill a process. 
  1781.  
  1782.         3. Suspend process. This halts a process. 
  1783.  
  1784.         4. Remove embedded thread. This choice removes the embedded thread. 
  1785.            These options are no longer available after this choice. 
  1786.  
  1787.      threads: 
  1788.  
  1789.         1. Kill thread. Kill a certain thread. 
  1790.  
  1791.         2. Change priority. Change the priority of a process. 
  1792.  
  1793.         3. Suspend/Resume thread. Suspend or resume a thread. 
  1794.  
  1795.       In addition this package increases the size of the message queue to 100 
  1796.       per queue. 
  1797.  
  1798.  
  1799.           This is a powerful feature, but may hang the PM or cause a deadlock. 
  1800.           Do not use this feature until you're absolutely sure what you are 
  1801.           doing. 
  1802.  
  1803.  
  1804. ΓòÉΓòÉΓòÉ 9.3. Using remote WatchCat ΓòÉΓòÉΓòÉ
  1805.  
  1806. This section explains how to use WatchCat. After correct installation, simply 
  1807. start WatchCat with the parameter /remote. You need a serial connection between 
  1808. two PC or a PC and a terminal. You can see WatchCat running on both, the local 
  1809. PC and the terminal. You can use WatchCat from the terminal. 
  1810.  
  1811.  
  1812. ΓòÉΓòÉΓòÉ 9.4. Activate remote WatchCat ΓòÉΓòÉΓòÉ
  1813.  
  1814. Run WatchCat with the parameter /remotepopup. Now activate WatchCat on the 
  1815. local PC and use the terminal to view information or to kill a certain process, 
  1816. change the priority, etc. 
  1817.  
  1818.  
  1819. ΓòÉΓòÉΓòÉ 9.5. The C-A-D package ΓòÉΓòÉΓòÉ
  1820.  
  1821.           New feature: The C-A-D is introduced with WatchCat 2.1. It is part of 
  1822.           the registered version only. 
  1823.  
  1824.  You can use the WatchCat package to disable Ctrl-Alt-Del, or to activate 
  1825.  WatchCat on Ctrl-Alt-Del. The C-A-D package also introduces a shutdown folder 
  1826.  (like the start-up folder), which contents is executed on shutdown. The 
  1827.  shutdown option of the Desktop is replaced, s. t. you can force the C-A-D 
  1828.  package to kill all empty OS/2 shells before shutting down the system. (No 
  1829.  annoying "Do you want to close ...") any longer! 
  1830.  
  1831.  
  1832. ΓòÉΓòÉΓòÉ 9.5.1. Configuring Ctrl-Alt-Del ΓòÉΓòÉΓòÉ
  1833.  
  1834. Open the desktop settings (right mouse button on the desktop, -> Settings). Now 
  1835. select the following page: 
  1836.  
  1837. When selecting the first check box, C-A-D asks for confirmation before shutdown 
  1838. (which is highly recommended). Killing the empty OS/2 shells is recommended 
  1839. also. An OS/2 shell is empty when no program is running in it. You can also 
  1840. kill all DOS (VDM) shells. But be careful. A running DOS program would be 
  1841. killed. 
  1842.  
  1843. Use the second page 
  1844.  
  1845. to use the C-A-D package to configure WatchCat to 
  1846.  
  1847.    1. reboot 
  1848.  
  1849.    2. ignore Ctrl-Alt-Del 
  1850.  
  1851.    3. activate WatchCat (default). 
  1852.  
  1853.  (this requires full installation of the C-A-D package). 
  1854.  
  1855.  OS/2 experts may install only parts of the C-A-D package to disable 
  1856.  Ctrl-Alt-Del only in DOS Shells for example. This will not be explained here. 
  1857.  Instead, it is recommended to use the WPS object and a full installation. 
  1858.  Experts may run wccad -? in an OS/2 and a DOS box for more information. 
  1859.  
  1860.  Please note that the desktop menu has a new item: 
  1861.  
  1862.  This is a quick access to alter the Ctrl-Alt-Del state, if you do want to open 
  1863.  the Desktop settings. 
  1864.  
  1865.           Note: There is no additional shutdown option. Instead: You can select 
  1866.           the standard shutdown (in the above menu) to activate the C-A-D 
  1867.           shutdown. 
  1868.  
  1869.           Note: This package is compatible with other desktop extentions like 
  1870.           Extended desktop by Dan Campbell, a very useful tool. 
  1871.  
  1872.           Note: You can also run shutdown from the command line. It is 
  1873.           recommended to use the C-A-D shutdown program, because it is 
  1874.           capabable of running the shutdown folder. 
  1875.  
  1876.           If you are writing your own shutdown program, use the following code 
  1877.           sequence to run the shutdown objects and shutdown: 
  1878.  
  1879.                     BOOL folder()
  1880.                      {
  1881.                      HOBJECT h;
  1882.  
  1883.                      h=WinQueryObject((PSZ)"<WP_SHUTDOWN>");
  1884.                      if (!h)
  1885.                        return FALSE;
  1886.                      if (!WinSetObjectData(h, "OPEN=SHUTDOWN"))
  1887.                        return FALSE;
  1888.                      return TRUE;
  1889.                      }
  1890.  
  1891.  
  1892. ΓòÉΓòÉΓòÉ 9.5.2. The shutdown folder ΓòÉΓòÉΓòÉ
  1893.  
  1894. The shutdown folder is created (with instcad) in the OS/2 system folder, where 
  1895. you can also find the startup folder. Simply drag a program object onto the 
  1896. folder. Each time you run shutdown.exe or select shutdown from the desktop 
  1897. menu, all programs in the shutdown folder are started. The system will not 
  1898. continue to shutdown until all programs are started. 
  1899.  
  1900. Your system folder may look like this: 
  1901.  
  1902. You can drag program objects or shadows of program objects into the folder: 
  1903.  
  1904.           Note: You can drop only program icons or shadows of program icons on 
  1905.           the startup folder. 
  1906.  
  1907.           To run a ReXX script, create a program icon with a * (asterisk) in th 
  1908.           field of the program name. Enter the ReXX script as a parameter. 
  1909.  
  1910.           To kill programs before the "Do you want to end ..." message appears, 
  1911.           use the kill program (part of the C-A-D package). E.g. kill clock. 
  1912.  
  1913.           The Shutdown folder currently has the following limitations: 
  1914.  
  1915.             1. Only programs can be started, not WPS-objects. 
  1916.  
  1917.             2. The object is not marked as in-use. 
  1918.  
  1919.             3. It is non-determined, which object is called first 
  1920.  
  1921.  
  1922. ΓòÉΓòÉΓòÉ 9.5.3. The shutdown program ΓòÉΓòÉΓòÉ
  1923.  
  1924. You can run shutdown per program (or create a WPS object for it). Just run 
  1925. shutdown for a complete shutdown, or run shutdown -? for a complete description 
  1926. of its parameters 
  1927.  
  1928.  
  1929. ΓòÉΓòÉΓòÉ 9.5.4. The Ctrl-Alt-Break feature ΓòÉΓòÉΓòÉ
  1930.  
  1931.           Note: This feature is available in the 1st Aid Package only. After 
  1932.  installing the C-A-D package, the following hotkeys are available: 
  1933.  
  1934.    1. For DOS sessions: Ctrl-Alt-Break will interrupt the current program and 
  1935.       go back to the DOS prompt. This is very brutal and may not give back all 
  1936.       DOS-memory but may be useful in some situations (and is available for 
  1937.       stand-alone-DOS also). 
  1938.  
  1939.    2. For any OS/2 program: Ctrl-Alt-K will kill the currently running process, 
  1940.       no matter whether the system is in Full-Sceen or PM mode. 
  1941.  
  1942.  
  1943. ΓòÉΓòÉΓòÉ 10. Running WatchCat from the command prompt ΓòÉΓòÉΓòÉ
  1944.  
  1945. Don't forget that you can also start WatchCat from the command prompt. We 
  1946. distinguish between two modes: 
  1947.  
  1948.      If you detach WatchCat (i.e. type detach watchcat  at the command 
  1949.       prompt), WatchCat is activated by hotkey. This is the mechanism when 
  1950.       WatchCat is added to the CONFIG.SYS. 
  1951.  
  1952.      If you start WatchCat like any other program (by typing "WatchCat" at the 
  1953.       command prompt) it does not switch to Full-Screen, and it provides all 
  1954.       information immediately. You don't have a hotkey for this WatchCat 
  1955.       session. 
  1956.  
  1957.           Note: You can have one detached and one or more started (windowed) 
  1958.           WatchCat instances at the same time. 
  1959.  
  1960.           Note: WatchCat supports a few options 
  1961.  
  1962.  
  1963. ΓòÉΓòÉΓòÉ 11. Using external WatchCat modules ΓòÉΓòÉΓòÉ
  1964.  
  1965. On start-up, WatchCat looks for DLLs in its directory and tries to find out 
  1966. whether they are modules for WatchCat or not. If a DLL is a WatchCat module it 
  1967. is integrated into WatchCat as if it were part of the program. 
  1968.  
  1969. The advantages are: 
  1970.  
  1971.      You can delete all unneeded modules 
  1972.  
  1973.      You can write your own modules 
  1974.  
  1975.      It is easier to extend WatchCat 
  1976.  
  1977.  Currently there are three modules. wcprintf for debugging, startpgm for 
  1978.  starting programs in a WatchCat window and tracevio for tracing the calls to 
  1979.  the viocalls DLL. 
  1980.  
  1981.  
  1982. ΓòÉΓòÉΓòÉ 11.1. Using the wcprintf module ΓòÉΓòÉΓòÉ
  1983.  
  1984. This module allows the user to print text in a WatchCat window. 
  1985.  
  1986. All you have to do is to write into the pipe \PIPE\WATCHCAT. This can also be 
  1987. done from DOS sessions. 
  1988.  
  1989.           Example: type read.me >\PIPE\WATCHCAT 
  1990.  
  1991.  If you are writing a PM program and you have trouble with the message 
  1992.  processing, these routines might be useful because they have no additional 
  1993.  message overhead. Examples are the following situations: 
  1994.  
  1995.      You want to hook the message queue. Sending a text string to another 
  1996.       window increases (potentially) the message processing. 
  1997.  
  1998.      You need information about all mouse movement or mouse clicks in your 
  1999.       application. Obviously moving the mouse to another window to display 
  2000.       debugging infos would result in "wrong" messages. 
  2001.  
  2002.      Your application hangs up the PM and you don't know why. You can print 
  2003.       debugging strings, but you are not sure whether all debugging strings are 
  2004.       displayed. 
  2005.  
  2006.  WatchCat can help because it can be activated without key and mouse (by 
  2007.  hardware switch or your program) and it is full-screen. Therefore it works 
  2008.  even if the PM is hung. 
  2009.  
  2010.  If you want to use this module simply include wcapi.h. Then #define WCDEBUG. A 
  2011.  call to wcprintf(char *format, ...) pipes its output into a WatchCat window. 
  2012.  If WCDEBUG is not set and optimization is turned on, the function call is 
  2013.  optimized away. 
  2014.  
  2015.  You can activate WatchCat from the program by calling WatchCat(). 
  2016.  
  2017.  You must link your application with wcatdeb.lib. It is necessary that 
  2018.  wcatdeb.dll is in the same directory as watchcat.exe 
  2019.  
  2020.  
  2021. ΓòÉΓòÉΓòÉ 11.2. Using the startpgm module ΓòÉΓòÉΓòÉ
  2022.  
  2023. Use this module for starting programs and redirecting stdout of the program 
  2024. into a WatchCat window. You need a small description file to use this module. 
  2025. This file must be called: wcatpgm.ini. It's in the same directory with 
  2026. watchcat.sys and watchcat.exe. 
  2027.  
  2028. Let us explain the following example: 
  2029.  
  2030. "Hardware tree", "Show hardware tree", "rmview.exe /hw", windowed
  2031. "qsystem    ", "Show system configuration", "qsystem.exe", windowed
  2032. "Exehdr    ", "Show detailed module information (exehdr)", "exehdr.exe %p", update
  2033.  
  2034. Use one line per program. The first entry specifies a title. This title is used 
  2035. in the menu Add-On and as a window name. It is recommend to pad spaces up to 10 
  2036. characters. The next entry is the help text, shown on the status line. Specify 
  2037. the full command line as the 3rd parameter. Please don't forget .exe and please 
  2038. avoid unnecessary spaces. The last parameter is most interesting. Specifying 
  2039. windowed will start your program once. Specifying update will start the program 
  2040. evertime a new process is selected. This is especially interesting in 
  2041. conjunction with %p. This macro is replaced with the path and program name. 
  2042.  
  2043. In the example, the first line will start rmview a standard (but undocumented) 
  2044. OS/2 program. qsystem is a tool by N Couch/J Muir for detecing the hardware 
  2045. configuration. This program can be found on the DevCon CD. exehdr is part of 
  2046. the Toolkit. It displays interesting information about Modules (segments, 
  2047. exported names, ...). 
  2048.  
  2049.  
  2050. ΓòÉΓòÉΓòÉ 11.3. Using the tracevio module ΓòÉΓòÉΓòÉ
  2051.  
  2052. Move tracevio.dll into the WatchCat path to use the tracing feature. This 
  2053. requires the process manipulation center to be installed. 
  2054.  
  2055. Select the package from the Add-On menu and see which VIOCALL function is 
  2056. called by a certain application. Very usyful for debugging. 
  2057.  
  2058.  
  2059. ΓòÉΓòÉΓòÉ 12. Interfacing WatchCat ΓòÉΓòÉΓòÉ
  2060.  
  2061. There are two ways of interfacing to WatchCat. First, your program can activate 
  2062. WatchCat and second, you can write your own WatchCat module and write directly 
  2063. into a WatchCat window. 
  2064.  
  2065. The API is still under development. If one of the functions does not work as 
  2066. expected or you need a function not provided now, please contact us. (All 
  2067. functions were developed with IBM C/Set++; they are portable and partly tested 
  2068. for Borland, EMX, Watcom; cf. testmod.c) 
  2069.  
  2070.  
  2071. ΓòÉΓòÉΓòÉ 12.1. Activating WatchCat from a program ΓòÉΓòÉΓòÉ
  2072.  
  2073. There are two ways to activate WatchCat from your own program: 
  2074.  
  2075.      Use the following code sequence: 
  2076.  
  2077.  
  2078.           #include INCL_DOSSEMAPHORES
  2079.            ...
  2080.           #include <os2.h>
  2081.            ...
  2082.           HEV hev;
  2083.            ...
  2084.           if (!DosOpenEventSem((PSZ)"\\Sem32\\WatchCat", &hev))
  2085.              {
  2086.              DosPostEventSem(hev);
  2087.              DosCloseEventSem(hev);
  2088.              }
  2089.  
  2090.      Link with wcatdeb.lib, and use the following code sequence: 
  2091.  
  2092.  
  2093.           #include <wcapi.h>
  2094.            ...
  2095.           WatchCat();
  2096.  
  2097.  
  2098. ΓòÉΓòÉΓòÉ 12.2. Writing your own DLL ΓòÉΓòÉΓòÉ
  2099.  
  2100. Writing your own WatchCat DLL is not difficult. WatchCat searches its own 
  2101. directory for any WatchCat DLL. 
  2102.  
  2103. A WatchCat DLL is a dynamic link library that contains at least the functions 
  2104. WCatRegister and WCatInit. More specifically, WatchCat does the following: Call 
  2105. WCatRegister(), call WCatInit(), start WCatThread() as a thread, if present. 
  2106.  
  2107. To make it easier, you have to compile dllbase.c and link it with your 
  2108. application. Then you have access to all functions with prototypes in wcapi.h. 
  2109. dllbase contains WCatRegister and initializes the "system". 
  2110.  
  2111. Your own written module should contain at least WCatInit. Use this function to 
  2112. create all windows you need (use WCatBegWindow). You can also insert headlines 
  2113. (use WCatSetTitle). Don't call WCatBegWindow later. 
  2114.  
  2115. The WCatThread function is started as a normal-priority thread. You can use all 
  2116. functions here, too. 
  2117.  
  2118. WatchCat is event-driven. If an event occurs (mouse, keyboard, ...) WatchCat 
  2119. calls a specific DLL-function (if present). 
  2120.  
  2121. Your function is called with a void* parameter. This is a window handle 
  2122. identical to one allocated with WCatBegWindow. It is your job to find out if 
  2123. this handle belongs to a window which message you want to intercept. Your 
  2124. function can return either TRUE (non-zero) or FALSE. TRUE indicates that the 
  2125. parent is not called, so the default action is not done. On the other hand, 
  2126. FALSE indicates that the default action has to be done. 
  2127.  
  2128. Currently the following functions are supported: 
  2129.  
  2130.  
  2131.           int WCatKey(void *win_handle, int scan, int ascii, int shift)
  2132.              win_handle           window handle
  2133.              scan                 Make-Code
  2134.              ascii                Ascii-Code or 0
  2135.              shift                0=no shift, 2 = Ctrl, 4 = Alt
  2136.  
  2137.           int WCatB1Click(void *win_handle, int x, int y)
  2138.              win_handle           window handle
  2139.              x                    x-coordinate (relative to window)
  2140.              y                    y-coordinate (relative to window)
  2141.  
  2142.           int WCatSelected(void *win_handle, int i)
  2143.              win_handle           window handle
  2144.              i                    line (0-based)
  2145.  
  2146.           int WCatInformIfProcessChanged(void *win_handle, int i)
  2147.              win_handle           window handle
  2148.              i                    line which is selected now
  2149.  
  2150.           WCatTimer()
  2151.              called every second
  2152.  
  2153.           WCatThread()
  2154.              called as a thread
  2155.  
  2156.  Please note that your DLL can provide the above functions. They are called by 
  2157.  WatchCat. Do not call the functions yourself. On the other hand all above 
  2158.  functions are optional. You do not need to provide any of them. 
  2159.  
  2160.           Example: See the testmod.c file for an example. 
  2161.  
  2162.           Writing a DLL for WatchCat is not very difficult, but not trivial 
  2163.           either. Please read the documentation carefully to see if any library 
  2164.           initialization is required. When one of the above functions is called 
  2165.           you can assume that this is done in the WatchCat process context. 
  2166.           Note that your DLL may be called from several WatchCat instances (The 
  2167.           example ignores this problem). In the WatchCat context you can call 
  2168.           all API functions except WCatBegWindow. If the function is called 
  2169.           from outside the WatchCat context, you are not allowed to call this 
  2170.           API. 
  2171.  
  2172.  
  2173. ΓòÉΓòÉΓòÉ 12.3. API C-Reference ΓòÉΓòÉΓòÉ
  2174.  
  2175. The following C-reference describes all functions that can be used in your DLL. 
  2176.  
  2177.           Note: To use these functions, it is necessary to compile dllbase.c 
  2178.           and link it to your DLL. 
  2179.  
  2180.           Note: These functions can only be used in the WatchCat-context. Never 
  2181.           call these functions from another program or a DLL used by another 
  2182.           program. This would definitely result in a protection violation. 
  2183.  
  2184.  
  2185. ΓòÉΓòÉΓòÉ 12.3.1. WCatBegWindow ΓòÉΓòÉΓòÉ
  2186.  
  2187.  Prototype: 
  2188.  
  2189.  
  2190.           void * _System WCatBegWindow(char *title, char *Menuentry,
  2191.                                        char *description, void (*fn)());
  2192.  
  2193.  Parameters: 
  2194.  
  2195.  
  2196.           char *title            The title of the window
  2197.           char *Menuentry        This string appears in the Add-On menu
  2198.           char *description      Your text for the status line
  2199.           void (*fn)()           An action function associated with the menuitem
  2200.  
  2201.  Returns:  A window handle of void * 
  2202.  
  2203.  Notes:  Use this function to add a window to the Add-On submenu. Currently it 
  2204.      is impossible to create windows dynamically. Therefore it is absolutely 
  2205.      necessary to create all windows on start-up (i.e. in function WCatInit()). 
  2206.      You should save the handle that is returned. It is used for all operations 
  2207.      and should not be altered. The function taken as the last parameter is 
  2208.      called whenever the associated menuitem is selected. The intuitive action 
  2209.      is to show a window (see example below) - but it is not necessary to do 
  2210.      so. You can also ignore the window handle returned by WCatBegWindow and do 
  2211.      some some other action when a menu item is selected. 
  2212.  
  2213.  Example: 
  2214.  
  2215.  
  2216.           void  *win=0;                   /* window handle */
  2217.  
  2218.           void show()
  2219.             {
  2220.             WCatShowWindow(win);
  2221.             WCatShowWindow
  2222.             }
  2223.  
  2224.           BOOL _Export _System WCatInit()
  2225.             {
  2226.             ...
  2227.             win=WCatBegWindow("My title",
  2228.                               "My menu entry",
  2229.                               "A very long description",
  2230.                               show);
  2231.             ...
  2232.             return TRUE;
  2233.             }
  2234.  
  2235.  
  2236. ΓòÉΓòÉΓòÉ 12.3.2. WCatClearWindow ΓòÉΓòÉΓòÉ
  2237.  
  2238.  Prototype: 
  2239.  
  2240.  
  2241.           void _System WCatClearWindow(void *win);
  2242.  
  2243.  Parameters: 
  2244.  
  2245.  
  2246.           void *win              The window handle (returned by WinBegWindow)
  2247.  
  2248.  Returns:  no return value 
  2249.  
  2250.  Notes:  This function simply clears the window. 
  2251.  
  2252.  Example: 
  2253.  
  2254.  
  2255.           void  *win;                    /* window handle */
  2256.            ...
  2257.           if (WindowShouldBeCleared==TRUE)
  2258.              WCatClearWindow(win);
  2259.  
  2260.  
  2261. ΓòÉΓòÉΓòÉ 12.3.3. WCatShowWindow ΓòÉΓòÉΓòÉ
  2262.  
  2263.  Prototype: 
  2264.  
  2265.  
  2266.           void _System WCatShowWindow(void *win);
  2267.  
  2268.  Parameters: 
  2269.  
  2270.  
  2271.           void *win              The window handle (returned by WinBegWindow)
  2272.  
  2273.  Returns:  no return value 
  2274.  
  2275.  Notes:  Use this function to show the window. Nothing happens if the window is 
  2276.      already visible. 
  2277.  
  2278.  Example: 
  2279.  
  2280.  
  2281.           void  *win;                    /* window handle */
  2282.            ...
  2283.           void show()
  2284.             {
  2285.             WCatShowWindow(win);
  2286.             }
  2287.  
  2288.  
  2289. ΓòÉΓòÉΓòÉ 12.3.4. WCatAddLine ΓòÉΓòÉΓòÉ
  2290.  
  2291.  Prototype: 
  2292.  
  2293.  
  2294.           void _System WCatAddLine(void *win, char *text);
  2295.  
  2296.  Parameters: 
  2297.  
  2298.  
  2299.           void *win              The window handle (returned by WinBegWindow)
  2300.           char *text             A string that contains one line (excluding \n).
  2301.                                  Try to use strings with less than 200 chars.
  2302.  
  2303.  Returns:  no return value 
  2304.  
  2305.  Notes:  This function adds a line containing text to the window associated 
  2306.      with the window handle win This function does not scroll the contents of 
  2307.      the window. (cf. WCatAddLineAndScroll) 
  2308.  
  2309.  Example: 
  2310.  
  2311.  
  2312.           void  *win;                     /* window handle */
  2313.            ...
  2314.           WCatAddLine(win, "This is a a new line");
  2315.  
  2316.  
  2317. ΓòÉΓòÉΓòÉ 12.3.5. WCatAddLineAndScroll ΓòÉΓòÉΓòÉ
  2318.  
  2319.  Prototype: 
  2320.  
  2321.  
  2322.           void _System WCatAddLineAndScroll(void *win, char *text);
  2323.  
  2324.  Parameters: 
  2325.  
  2326.  
  2327.           void *win              The window handle (returned by WinBegWindow)
  2328.           char *text             A string that contains one line (excluding \n).
  2329.                                  Try to use strings with less than 200 chars.
  2330.  
  2331.  Returns:  no return value 
  2332.  
  2333.  Notes:  This function adds a line containing text to the window associated 
  2334.      with the window handle win This function does scroll the contents of the 
  2335.      window if necessary (cf. WCatAddLine) 
  2336.  
  2337.  Example: 
  2338.  
  2339.  
  2340.           void  *win;                     /* window handle */
  2341.             ...
  2342.           WCatAddLineAndScroll(win, "This is a a new line");
  2343.  
  2344.  
  2345. ΓòÉΓòÉΓòÉ 12.3.6. WCatChangeLine ΓòÉΓòÉΓòÉ
  2346.  
  2347.  Prototype: 
  2348.  
  2349.  
  2350.           void _System WCatChangeLine(void *win, int line, char *text);
  2351.  
  2352.  Parameters: 
  2353.  
  2354.  
  2355.           void *win              The window handle (returned by WinBegWindow)
  2356.           int  line              The line in the window (0-based)
  2357.           char *text             The new text string that replaces the old line
  2358.                                  (no \n)
  2359.  
  2360.  Returns:  no return value 
  2361.  
  2362.  Notes:  This function can be used to replace a specific line. 
  2363.  
  2364.  Example: 
  2365.  
  2366.  
  2367.           void  *win;                     /* window handle */
  2368.            ...
  2369.           /* Change the first line */
  2370.           WCatChangeLine(win, 0, "This is the new first line");
  2371.  
  2372.  
  2373. ΓòÉΓòÉΓòÉ 12.3.7. WCatPrintf ΓòÉΓòÉΓòÉ
  2374.  
  2375.  Prototype: 
  2376.  
  2377.  
  2378.           void _System WCatPrintf(void *win, char *format, ...);
  2379.  
  2380.  Parameters: 
  2381.  
  2382.  
  2383.           void *win              The window handle (returned by WinBegWindow)
  2384.           rest                   usage exactly like printf
  2385.  
  2386.  Returns:  no return value 
  2387.  
  2388.  Notes:  This is a very easy interface to print strings in a window. The line 
  2389.      is added as the last line without scrolling. 
  2390.  
  2391.  Example: 
  2392.  
  2393.  
  2394.           void  *win=0;                   /* window handle */
  2395.           char  *name1="Bill";
  2396.           char  *name2="Lou";
  2397.            ...
  2398.           WCatPrintf(win, "Hi %s, my name is %s", name1, name2);
  2399.  
  2400.  
  2401. ΓòÉΓòÉΓòÉ 12.3.8. WCatChangePrintf ΓòÉΓòÉΓòÉ
  2402.  
  2403.  Prototype: 
  2404.  
  2405.  
  2406.           void _System WCatChangePrintf(void *win, int line, char *format, ...);
  2407.  
  2408.  Parameters: 
  2409.  
  2410.  
  2411.           void *win              The window handle (returned by WinBegWindow)
  2412.           int  line              The line to be changed (0-based)
  2413.           rest                   usage exactly like printf
  2414.  
  2415.  Returns:  no return value 
  2416.  
  2417.  Notes:  This is a very easy interface to print strings in a window. A specific 
  2418.      line is replaced. 
  2419.  
  2420.  Example: 
  2421.  
  2422.  
  2423.           void  *win=0;                   /* window handle */
  2424.           char  *name1="Bill";
  2425.           char  *name2="Jim";
  2426.            ...
  2427.           WCatChangePrintf(win, 0, "Hi %s, my name is %s", name1, name2);
  2428.  
  2429.  
  2430. ΓòÉΓòÉΓòÉ 12.3.9. WCatQueryPID ΓòÉΓòÉΓòÉ
  2431.  
  2432.  Prototype: 
  2433.  
  2434.  
  2435.           unsigned long _System WCatQueryPID();
  2436.  
  2437.  Parameters: 
  2438.  
  2439.  
  2440.           no parameters
  2441.  
  2442.  Returns:  returns the process id of the currently selected process. A value of 
  2443.      -1 indicates that no process but some other module is selected. 
  2444.  
  2445.  Notes:  Use this function to query what process is currently selected in the 
  2446.      process/module list. 
  2447.  
  2448.  Example: 
  2449.  
  2450.  
  2451.           ULONG pid;
  2452.  
  2453.           pid=WCatQueryPID();
  2454.  
  2455.  
  2456. ΓòÉΓòÉΓòÉ 12.3.10. WCatQueryHandle ΓòÉΓòÉΓòÉ
  2457.  
  2458.  Prototype: 
  2459.  
  2460.  
  2461.           unsigned long _System WCatQueryHandle();
  2462.  
  2463.  Parameters: 
  2464.  
  2465.  
  2466.           no parameters
  2467.  
  2468.  Returns:  returns the handle of the currently selected process or module. 
  2469.  
  2470.  Notes:  Use this function to query what process or module is currently 
  2471.      selected in the process/module list. 
  2472.  
  2473.  Example: 
  2474.  
  2475.  
  2476.           ULONG handle;
  2477.           char name[50];
  2478.  
  2479.           pid=WCatQueryHandle();
  2480.           if (DosQueryModuleName(handle, sizeof(name), name))
  2481.              {
  2482.              if (stricmp(name, "watchcat.exe")==0)
  2483.                 WCatPrintf("it's me! it's me!");
  2484.              }
  2485.  
  2486.  
  2487. ΓòÉΓòÉΓòÉ 12.3.11. WCatSetTitle ΓòÉΓòÉΓòÉ
  2488.  
  2489.  Prototype: 
  2490.  
  2491.  
  2492.           void _System WCatSetTitle(void *win, int i, char *text);
  2493.  
  2494.  Parameters: 
  2495.  
  2496.  
  2497.           void *win              The window handle (returned by WinBegWindow)
  2498.           int  line              Title line (0 based)
  2499.           char *text             Headline
  2500.  
  2501.  Returns:  no return values 
  2502.  
  2503.  Notes:  Use this function to generate a headline for a window. 
  2504.  
  2505.  Example: 
  2506.  
  2507.  
  2508.           void  *win;                     /* window handle */
  2509.            ...
  2510.           WCatSetTitle(win, 0, "PID   remark");
  2511.           WCatSetTitle(win, 1, "ΓöÇΓöÇΓöÇ   ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ");
  2512.  
  2513.  
  2514. ΓòÉΓòÉΓòÉ 12.3.12. WCatPopup ΓòÉΓòÉΓòÉ
  2515.  
  2516.  Prototype: 
  2517.  
  2518.  
  2519.           void _System WCatPopup();
  2520.  
  2521.  Parameters: 
  2522.  
  2523.  
  2524.           no parameters
  2525.  
  2526.  Returns:  no return values 
  2527.  
  2528.  Notes:  Forces WatchCat to be popped up.  Do not use this function from 
  2529.      another program! 
  2530.  
  2531.  Example: 
  2532.  
  2533.  
  2534.           WCatPopup();
  2535.  
  2536.  
  2537. ΓòÉΓòÉΓòÉ 12.4. API C++-Framework-Reference ΓòÉΓòÉΓòÉ
  2538.  
  2539. Using WatchCat from C++ is even more simple. You need small experience with C++ 
  2540. and the framework-idea and some experience with programming DLL. 
  2541.  
  2542. WatchCat uses a binary-compatible compiler-independent (but curently not 
  2543. language-independent) object model. 
  2544.  
  2545. WatchCat is currently based on C++. There are plans to support Direct-to-SOM 
  2546. when the right DTS-compilers become available. 
  2547.  
  2548. How to program with the WatchCat window framework? 
  2549.  
  2550.    1. First #include wcapi.h in your file. Overload one of the two classes 
  2551.       WCatWindow (a "normal" window) or WCatListbox (a listbox like most other 
  2552.       currently used windows). 
  2553.  
  2554.           Just have a look at the wcapi.h file. The class definitions are 
  2555.            almost self-explaining. The class hierarchy does currently not 
  2556.            reflect the "real" hierarchy used in WatchCat.exe (where it not as 
  2557.            simple), but there is no need to care about it. 
  2558.  
  2559.           WCatBaseWindow is an abstract base class and cannot be instanciated. 
  2560.  
  2561.    2. Specialize your class by overriding some methods. Each method that is not 
  2562.       overridden will have a default meaning. 
  2563.  
  2564.    3. Provide a function call WCInit with C-Linkage (!!) and default _System 
  2565.       linkage, which is called on start-up. Create all windows here with the 
  2566.       overloaded new operator. Currently dynamically created windows are not 
  2567.       supported. 
  2568.  
  2569.    4. Now compile and link with dllpbase.cpp and dllbase.c 
  2570.  
  2571.           You need per-process initialization and multiple data segments. 
  2572.           Please ensure that you have correctly initialized the compiler's 
  2573.           run-time environment. 
  2574.  
  2575.    5. Ensure that the DLL is in the same directory where WatchCat is, or the 
  2576.       environment variable WCATDLL is pointing to the correct path. 
  2577.  
  2578.    6. Run and enjoy. 
  2579.  
  2580.           Example: How to program "hello, world" with WatchCat: How many lines 
  2581.           do you need to write a program the prints "hello, xx" (xx=name of a 
  2582.           process) in a WatchCat window, whenever the user selects a new 
  2583.           process??? 
  2584.  
  2585.           Well, here is the program: 
  2586.  
  2587.                     #define INCL_DOS
  2588.                     #include <os2.h>
  2589.                     #include <string.h>
  2590.  
  2591.                     #include "wcapi.h"
  2592.  
  2593.                     class Hello : public WCatListbox
  2594.                      {
  2595.                      public:
  2596.                       Hello(char *title, void (* _Optlink fn)(), char *Menuentry=0,
  2597.                                 char *description=0)
  2598.                          :WCatListbox(title,fn,Menuentry,description) {}
  2599.                       virtual int processChanged(int i);
  2600.                      };
  2601.  
  2602.                     int Hello::processChanged(int i)
  2603.                      {
  2604.                      char buffer[CCHMAXPATH+10];
  2605.  
  2606.                      strcpy(buffer, "hello, ");
  2607.  
  2608.                      if (0==DosQueryModuleName(WCatQueryHandle(), CCHMAXPATH, buffer+7))
  2609.                        addLineAndScroll(buffer);
  2610.                      return 0;
  2611.                      }
  2612.  
  2613.                     Hello *hello;
  2614.  
  2615.                     void _Optlink fun()
  2616.                      {
  2617.                      hello->show();
  2618.                      }
  2619.  
  2620.                     BOOL WCEXPORT WCSYSTEM WCatInit()
  2621.                      {
  2622.                      hello=new Hello("Hello, world", &fun, " Say hello, world",
  2623.                              "Hello, world example");
  2624.                      hello->show();
  2625.                      return 0;
  2626.                      }
  2627.  
  2628.           We first declare a new class (=window type) by overloading 
  2629.           WCatListbox. This is a default listbox, except that it prints out a 
  2630.           message when the user selects a new process. So besides a new 
  2631.           constructor, we override processChanged. The new method calls 
  2632.           WCatQueryHandle and detects the name with the OS/2 API 
  2633.           DosQueryModuleName. Without error, we now print out the text "hello, 
  2634.           xxx" with the method addLineAndScroll. 
  2635.  
  2636.           All we need is one pointer per listbox. This is a global variable. 
  2637.           Please note that you need multiple data segments when producing a 
  2638.           DLL. The next step is to provide WCInit(). Don't forget WCEXPORT 
  2639.           WCSYSTEM. Both words are important to ensure C and _System linkage. 
  2640.           We simply create a window with the C++ new-operator here and show it 
  2641.           on start-up. (The user can also select it via the menu.) 
  2642.  
  2643.           As a last thing, we provide a function that is called whenever the 
  2644.           user clicks on our menu entry. All we want to do is to show the 
  2645.           window. 
  2646.  
  2647.           Ready. Now we need to compile our WatchCat application. First we 
  2648.           create the following module definition file for our linker: 
  2649.  
  2650.                     LIBRARY hello INITINSTANCE TERMINSTANCE
  2651.                     DATA MULTIPLE NONSHARED
  2652.           As you can see we need a per-process initialization, because WCatInit 
  2653.           should be called whenever WatchCat is started. And we need DATA 
  2654.           MULTIPLE, because the global variable hello should be unique to all 
  2655.           processes. 
  2656.  
  2657.           Now we are ready for compiling. For IBM C/Set++ the procedure looks 
  2658.           like this :icc -Rn -Ge- hello.cpp dllpbase.cpp dllbase.c hello.def. 
  2659.           Please consult your compiler manual for more information about 
  2660.           switches and initialization. 
  2661.  
  2662.           VOILA! We're ready. Start WatchCat and enjoy your first WatchCat 
  2663.           application. *** HAPPY PROGRAMMING! *** 
  2664.  
  2665.  
  2666. ΓòÉΓòÉΓòÉ 12.4.1. key ΓòÉΓòÉΓòÉ
  2667.  
  2668.  Signature: 
  2669.  
  2670.  
  2671.           int key(int scan, int ascii, int shift)
  2672.  
  2673.  Type: 
  2674.  
  2675.  
  2676.           This is a callback function that may be overridden to
  2677.           recognize key-strokes.
  2678.  
  2679.  Parameters: 
  2680.  
  2681.  
  2682.           int scan;       scan code
  2683.           int ascii;      asciii code
  2684.           int shift;      shift state
  2685.  
  2686.  Returns:  return 0. 
  2687.  
  2688.  Notes:  This function is called if the user presses a key in the associated 
  2689.      window 
  2690.  
  2691.  
  2692. ΓòÉΓòÉΓòÉ 12.4.2. selected ΓòÉΓòÉΓòÉ
  2693.  
  2694.  Signature: 
  2695.  
  2696.  
  2697.           int selected (int i)
  2698.  
  2699.  Type: 
  2700.  
  2701.  
  2702.           This is a callback function that may be overridden to
  2703.           recognize if the user selects an item in the listbox.
  2704.  
  2705.  Parameters: 
  2706.  
  2707.  
  2708.           int i;          The item nr. in the process window
  2709.  
  2710.  Returns:  return 0. 
  2711.  
  2712.  
  2713. ΓòÉΓòÉΓòÉ 12.4.3. processChanged ΓòÉΓòÉΓòÉ
  2714.  
  2715.  Signature: 
  2716.  
  2717.  
  2718.           processChanged(int i)
  2719.  
  2720.  Type: 
  2721.  
  2722.  
  2723.           This is a callback function that may be overridden to
  2724.           recognize if the user selects a process.
  2725.  
  2726.  Parameters: 
  2727.  
  2728.  
  2729.           int i;          nr. in the process listbox
  2730.  
  2731.  Returns:  return 0. 
  2732.  
  2733.  Notes:  This functio is called if the user selects an item in the process 
  2734.      window. Use WCatQueryHandle to get more information. 
  2735.  
  2736.  
  2737. ΓòÉΓòÉΓòÉ 12.4.4. b1click ΓòÉΓòÉΓòÉ
  2738.  
  2739.  Signature: 
  2740.  
  2741.  
  2742.           int b1click(int x, int y)
  2743.  
  2744.  Type: 
  2745.  
  2746.  
  2747.           This is a callback function that may be overridden to
  2748.           recognize if the user clicks on the assiciated window.
  2749.  
  2750.  Parameters: 
  2751.  
  2752.  
  2753.           int x;          the logical x-coordinate (0-based)
  2754.           int y;          the logical y-coordinate (0-based)
  2755.  
  2756.  Returns:  return 0. 
  2757.  
  2758.  
  2759. ΓòÉΓòÉΓòÉ 12.4.5. b1dbclick ΓòÉΓòÉΓòÉ
  2760.  
  2761.  Signature: 
  2762.  
  2763.  
  2764.           int b1dbclick(int x, int y)
  2765.  
  2766.  Type: 
  2767.  
  2768.  
  2769.           This is a callback function that may be overridden to
  2770.           recognize if the user double-clicks on the assiciated window.
  2771.  
  2772.  Parameters: 
  2773.  
  2774.  
  2775.           int x;          the logical x-coordinate (0-based)
  2776.           int y;          the logical y-coordinate (0-based)
  2777.  
  2778.  Returns:  return 0. 
  2779.  
  2780.  
  2781. ΓòÉΓòÉΓòÉ 12.4.6. receiveFocus ΓòÉΓòÉΓòÉ
  2782.  
  2783.  Signature: 
  2784.  
  2785.  
  2786.           int receiveFocus()
  2787.  
  2788.  Type: 
  2789.  
  2790.  
  2791.           This is a callback function that may be overridden to
  2792.           recognize if the window gets the input focus.
  2793.  
  2794.  Parameters: 
  2795.  
  2796.  
  2797.           no parameters
  2798.  
  2799.  Returns:  return 0. 
  2800.  
  2801.  
  2802. ΓòÉΓòÉΓòÉ 12.4.7. receiveFocus ΓòÉΓòÉΓòÉ
  2803.  
  2804.  Signature: 
  2805.  
  2806.  
  2807.           int looseFocus()
  2808.  
  2809.  Type: 
  2810.  
  2811.  
  2812.           This is a callback function that may be overridden to
  2813.           recognize if the window loses the input focus.
  2814.  
  2815.  Parameters: 
  2816.  
  2817.  
  2818.           no parameters
  2819.  
  2820.  Returns:  return 0. 
  2821.  
  2822.  
  2823. ΓòÉΓòÉΓòÉ 12.4.8. handleShow ΓòÉΓòÉΓòÉ
  2824.  
  2825.  Signature: 
  2826.  
  2827.  
  2828.           int handleShow()
  2829.  
  2830.  Type: 
  2831.  
  2832.  
  2833.           This is a callback function that may be overridden to
  2834.           recognize if show method is displayed.
  2835.  
  2836.  Parameters: 
  2837.  
  2838.  
  2839.           no parameters
  2840.  
  2841.  Returns:  return 0. 
  2842.  
  2843.  
  2844. ΓòÉΓòÉΓòÉ 12.4.9. setTitle ΓòÉΓòÉΓòÉ
  2845.  
  2846.  Signature: 
  2847.  
  2848.  
  2849.           void setTitle()
  2850.  
  2851.  Type: 
  2852.  
  2853.  
  2854.           This is a service function that you can call to change the
  2855.           title.
  2856.  
  2857.  Parameters: 
  2858.  
  2859.  
  2860.           int i;          Use i=0
  2861.           char *s;        the title string
  2862.  
  2863.  Returns:  returns nothing 
  2864.  
  2865.  
  2866. ΓòÉΓòÉΓòÉ 12.4.10. clrScr ΓòÉΓòÉΓòÉ
  2867.  
  2868.  Signature: 
  2869.  
  2870.  
  2871.           void clrScr()
  2872.  
  2873.  Type: 
  2874.  
  2875.  
  2876.           This is a service function that you can call to
  2877.           clear the screen (Listbox, window)
  2878.  
  2879.  Parameters: 
  2880.  
  2881.  
  2882.           no parameters
  2883.  
  2884.  Returns:  returns nothing 
  2885.  
  2886.  
  2887. ΓòÉΓòÉΓòÉ 12.4.11. puts ΓòÉΓòÉΓòÉ
  2888.  
  2889.  Signature: 
  2890.  
  2891.  
  2892.           void puts(char *s)
  2893.  
  2894.  Type: 
  2895.  
  2896.  
  2897.           This is a service function that you can call to
  2898.           display a string.
  2899.  
  2900.  Parameters: 
  2901.  
  2902.  
  2903.           char *s;        the string
  2904.  
  2905.  Returns:  returns nothing 
  2906.  
  2907.  
  2908. ΓòÉΓòÉΓòÉ 12.4.12. addLine ΓòÉΓòÉΓòÉ
  2909.  
  2910.  Signature: 
  2911.  
  2912.  
  2913.           void addLine(char *s) (WCatListbox only)
  2914.  
  2915.  Type: 
  2916.  
  2917.  
  2918.           This is a service function that you can call to
  2919.           add a string to the Listbox
  2920.  
  2921.  Parameters: 
  2922.  
  2923.  
  2924.           char *s;        the string
  2925.  
  2926.  Returns:  returns nothing 
  2927.  
  2928.  
  2929. ΓòÉΓòÉΓòÉ 12.4.13. addLineAndScroll ΓòÉΓòÉΓòÉ
  2930.  
  2931.  Signature: 
  2932.  
  2933.  
  2934.           void addLineAndScroll(char *s) (WCatListbox only)
  2935.  
  2936.  Type: 
  2937.  
  2938.  
  2939.           This is a service function that you can call to
  2940.           add a string to the Listbox and scroll down one line
  2941.  
  2942.  Parameters: 
  2943.  
  2944.  
  2945.           char *s;        the string
  2946.  
  2947.  Returns:  returns nothing 
  2948.  
  2949.  
  2950. ΓòÉΓòÉΓòÉ 12.4.14. changeLine ΓòÉΓòÉΓòÉ
  2951.  
  2952.  Signature: 
  2953.  
  2954.  
  2955.           void changeLine(int i, char *s) (WCatListbox only)
  2956.  
  2957.  Type: 
  2958.  
  2959.  
  2960.           This is a service function that you can call to
  2961.           replace line i  with the string s in the Listbox
  2962.  
  2963.  Parameters: 
  2964.  
  2965.  
  2966.           int  i;         the line (0-based)
  2967.           char *s;        the string
  2968.  
  2969.  Returns:  returns nothing 
  2970.  
  2971.  
  2972. ΓòÉΓòÉΓòÉ 13. FAQ ΓòÉΓòÉΓòÉ
  2973.  
  2974.  
  2975. ΓòÉΓòÉΓòÉ 13.1. A short technical OS/2 introduction ΓòÉΓòÉΓòÉ
  2976.  
  2977. For all non-programmers, this chapter provides a small OS/2 introduction to 
  2978. explain often used technical terms that may be new to some users. All 
  2979. OS/2-professionals, OS/2-cracks, OS/2-gurus and OS/2-gods: STAY AWAY FROM THIS 
  2980. CHAPTER! This chapter (and the following chapters) was written for you, the 
  2981. beginners, the non-programmer, the avarage user of OS/2. I (Felix) tried to 
  2982. avoid unnecessary technical blah-blah. Please feel free to comment and 
  2983. critizise this part of the documentation if it is difficult to understand. 
  2984. (There is more risk that it is too depict). 
  2985.  
  2986.  
  2987. ΓòÉΓòÉΓòÉ 13.1.1. Multitasking ΓòÉΓòÉΓòÉ
  2988.  
  2989. OS/2 is a multitasking operating system. Multitasking means that several 
  2990. processes can run at the same time. 
  2991.  
  2992.           Example: After a hard day of work you're sitting in front of your TV, 
  2993.           a cool bavarian beer in the left hand, eating potato chips with the 
  2994.           right hand. This is a form of multitasking, because you are doing all 
  2995.           three tasks (TV, beer, chips) at the same time. 
  2996.  
  2997.  Since currently most PC only have one CPU OS/2 cannot run all programs 
  2998.  simultanously (like you cannot drink and eat at the same time) instead all 
  2999.  tasks are done serial but for a very short time (a few milliseconds) s.t. the 
  3000.  user gets the impression of simultanously running programs. 
  3001.  
  3002.  There are two types multitasking: 
  3003.  
  3004.    1. Cooparative multitasking: This form is used in Windows. Each task gets 
  3005.       CPU-time and must explicitly give away the CPU-power. This is very 
  3006.       inflexible of course. A program use the processor on its own. For example 
  3007.       imagine your wife disturbs your TV-session and starts discussing the 
  3008.       visit of your parents-in-law. She may use all your (CPU) time preventing 
  3009.       you from doing some other really important tasks (TV). 
  3010.  
  3011.    2. Pre-emtive multitasking: This form of multitasking is used by OS/2. Each 
  3012.       program gets a specific amount of CPU time. Then OS/2 interrupts the 
  3013.       program and let the CPU concentrate on another task. There is an obvious 
  3014.       analogy in our example: turn up the TV-noise after a few milliseconds. 
  3015.  
  3016.  OS/2 supports several levels of priority, protection against other processes 
  3017.  and much more as you can read in the next chapters. 
  3018.  
  3019.  
  3020. ΓòÉΓòÉΓòÉ 13.1.2. Processes and Threads ΓòÉΓòÉΓòÉ
  3021.  
  3022. There are two important technical terms: processes and threads: 
  3023.  
  3024.      process: A process is an execution instance of a program. If you are 
  3025.       starting a program two times, there are two additional processes (1+1=2) 
  3026.       running in the system. A process can own several resources like memory or 
  3027.       file handles. A process can access only his own resources, it is 
  3028.       forbidden to access other resources. This is like real life; you have 
  3029.       small resources (e.g. money) but when you try to access other's resources 
  3030.       (bank) you're punished and must go into prison. OS/2 is more cruel. A 
  3031.       process that tries to access other processes' resources is killed. (Every 
  3032.       OS/2 user knows the protection violation dialog box). All processes have 
  3033.       a unique id called process id (PID). 
  3034.  
  3035.      threads: A process is not the smallest unit of program execution. In 
  3036.       contrast to Windows and many Unix systems parts of the program can run 
  3037.       parallel. Remember our TV-example? Imaging your not just viewing the 
  3038.       O.J.Simson process, but instead you're zapping through all channels. This 
  3039.       is true multithreading. There are 3 processes (TV, beer, potato chips) 
  3040.       and a few threads (viewing all channels at the same time). All task share 
  3041.       the CPU (you)-time. All threads have a unique id called thread id (TID). 
  3042.  
  3043.  Mostly threads are used to do time-consuming jobs (like printing) in the 
  3044.  background. Threads share the resources of their process. Threads are not 
  3045.  protected against each-other (within a process). OS/2 supports up to 4096 
  3046.  threads in total. Each process has at least one thread (primary thread). An 
  3047.  application that has only one thread is called single-threaded. An application 
  3048.  may produce additional threads (secondary threads) and is then multithreaded 
  3049.  
  3050.  You can use WatchCat to view information about the threads in a process. Have 
  3051.  a look at the thread state or priority. 
  3052.  
  3053.  
  3054. ΓòÉΓòÉΓòÉ 13.1.3. Other Modules ΓòÉΓòÉΓòÉ
  3055.  
  3056. Now you know what processes are. Let's try to be more general. A process is a 
  3057. special form of a module. A module something that consists of resources and/or 
  3058. code. There are different types of modules explained in the following. 
  3059.  
  3060.      Device drivers: With OS/2, programs are not allowed to access hardware 
  3061.       directly (ok, ok, except 16-bit IOPL code). E.g.You don't fetch your 
  3062.       slippers yourself, instead you order your dachshund to do so. With OS/2 
  3063.       each program does not directly access the hardware, instead it 
  3064.       communicates with the device driver. there are two types of device 
  3065.       drivers. The physical device drivers which are always 16-bit and directly 
  3066.       access the hardware and the virtual device drivers which typically 
  3067.       communicate with the physical device driver. Virtual device drivers 
  3068.       (always 32-bit) provide virtual hardware for DOS programs. This is 
  3069.       necassary because DOS programs are egoistic and want to access all 
  3070.       hardware resources alone. The solution is to pretend hardware (virtual 
  3071.       hardware) that DOS can access on it's own. (For a DOS session, it's 
  3072.       April, 1st every day...). 
  3073.  
  3074.      DOS programs.: 
  3075.  
  3076.       DOS programs are run in a virtual DOS machine (VDM) Spiteful one can say 
  3077.       that this is simply an OS/2 process that emulates a (complete) PC. DOS 
  3078.       programs "think" they are running on a stand-onlone PC. 
  3079.  
  3080.       No OS/2 program can look "into" a VDM. Therefore it is impossible for 
  3081.       WatchCat to tell the users what (resident) programs are running there. 
  3082.       Instead it finds out the window title, which is enough in most 
  3083.       situations. 
  3084.  
  3085.       With WatchCat you can see that a VDM may contain 2 threads, but this is 
  3086.       an OS/2 feature, not DOS creating two threads... 
  3087.  
  3088.      WinOS/2 programs: A WinOS/2 program is also running in a VDM. WinOS/2 
  3089.       sessions have the same restriction as DOS sessions have. You can run each 
  3090.       WinOS/2 session in different VDM (like running it on different PC) or in 
  3091.       one VDM (when one Windows program commits suicide all programs in the 
  3092.       same VDM are also dead). 
  3093.  
  3094.      Dynamic link libraries (DLL): A DLL is mostly interesting to programmers. 
  3095.       DLL are code segments (or resources) that are not part of the program but 
  3096.       instead loaded when starting (load-time DLL) or running (run-time DLL). 
  3097.       DLL are a boring concept for users but an exciting concept for 
  3098.       programmers. For example you can integrate a mini Editor (currently 
  3099.       without hardware cursor...) in WatchCat as a DLL. To the user it looks 
  3100.       like being part of the WatchCat package even though we (Felix and Thomas, 
  3101.       the fathers of WatchCat don't know about it)! Another important attribute 
  3102.       of DLL is that they can be used to share resources (and code). Consider 
  3103.       DOS: 10 DOS applications have 10 different user interfaces with 10 times 
  3104.       the code of one user interface. With OS/2 programs share the same code 
  3105.       for the user interface (e.g. pmwin.dll). This means less code on your 
  3106.       harddisk. Don't think about WatchCat now... 
  3107.  
  3108.       With WatchCat you can see what DLL are used by a process. 
  3109.  
  3110.  
  3111. ΓòÉΓòÉΓòÉ 13.1.4. Synchronisation ΓòÉΓòÉΓòÉ
  3112.  
  3113. Processes and threads need to be synchronized. For car traffic we know the 
  3114. following types of synchronization: 
  3115.  
  3116.    1. No synchronization: The weakest car must give way. 
  3117.  
  3118.    2. Minimal synchronization: The car that arrives as the latest must give 
  3119.       way. 
  3120.  
  3121.    3. Better syncronisation: The car that arrives from the right can drive 
  3122.       first. 
  3123.  
  3124.    4. Full synchronization: Traffic is synchronized by traffic lights. 
  3125.  
  3126.  With OS/2 "traffic lights" are called Semaphores. Semaphores are used to 
  3127.  synchronize trains, which seems to have similar problems like cars. An 
  3128.  interesting consequence of the above example is that the first three points 
  3129.  contain the risk of a deadlock (all cars coming at the same time). This may 
  3130.  happen in OS/2 programs, too. You can use WatchCat to kill a hung program. 
  3131.  
  3132.  To be more precise there are two types of semaphores: 
  3133.  
  3134.      Event semaphores: They are like traffic lights as described above. 
  3135.  
  3136.      Mutex semaphores: They can be used to protect resources. Example: You are 
  3137.       traveling in a train and have to go to the toilet. By laying your jacket 
  3138.       on the seat you mark the seat as occupied. Now your jacket is a mutex 
  3139.       semaphore. 
  3140.  
  3141.  For technical reasons WatchCat can currently only display 16-Bit semaphores 
  3142.  which are commonly not used in 32-bit programs. 
  3143.  
  3144.  
  3145. ΓòÉΓòÉΓòÉ 13.1.5. Process communication ΓòÉΓòÉΓòÉ
  3146.  
  3147. As explained earlier, processes cannot directly access other processes data. 
  3148. Instead they have to communicate with each other. OS/2 knows several ways to 
  3149. communicate: 
  3150.  
  3151.      The simplest type is shared memory. Many processes may use the same 
  3152.       region of memory. This communication needs careful synchronization. 
  3153.       WatchCat can be used to display information about shared memory. 
  3154.  
  3155.      Pipes: A pipe acts like a hose. One process writes into the pipe another 
  3156.       one reads from the pipe. 
  3157.  
  3158.      Queues: Queues are more complex. The can be used as FIFO 
  3159.       (first-in-first-out) or LIFO (last-in-first-out) buffers. 
  3160.  
  3161.  Other mechanisms are used by the Presentation Manager (PM) which is based on 
  3162.  sending messages. 
  3163.  
  3164.  
  3165. ΓòÉΓòÉΓòÉ 13.2. PM and WatchCat ΓòÉΓòÉΓòÉ
  3166.  
  3167. Like the previous chapter, this part of the documentation is not intended to be 
  3168. read by OS/2-gurus. It gives a brief introduction to the architecture of the 
  3169. PM. 
  3170.  
  3171.  
  3172. ΓòÉΓòÉΓòÉ 13.2.1. Architechture of the PM ΓòÉΓòÉΓòÉ
  3173.  
  3174. The Presentation Manager (PM) is event-driven. This means that an application 
  3175. receives a message whenever something interesting happens (e.g. keystroke, 
  3176. mouse movement, exploding printer, etc). Events are not necessary invoked by 
  3177. the user. Many messages are used for internal communication. And there are not 
  3178. just a few messages! While working a few hours with OS/2 thousands of messages 
  3179. are sent between the PM and several applications. 
  3180.  
  3181. When a few people are discussing a serious problem and all members are speaking 
  3182. at the same time, they will probably never come to a solution. This way of 
  3183. discussion is a little bit ineffective. It is more effective to have a talk 
  3184. master who manages the discussion. In the OS/2 world we have communicating 
  3185. applications and the PM as the "talk master": 
  3186.  
  3187. The PM sends a message to one application (green arrow), the application 
  3188. answers and gives control back to the PM (blue line). Now assume that one of 
  3189. the applications is like a politican. Politicans mostly don't stop speaking 
  3190. once they have started. We need a rule for the maximum speaking time. And 
  3191. indeed - there is a CUA (common user access, defined by IBM) rule which says 
  3192. that an application should not work longer than 0.1 seconds on one message. 
  3193. (Imagine a politican speaking 0.1 seconds! Wow! And considering the redundancy 
  3194. of their speech this is not impossible...). To summarize: While one program is 
  3195. working on a message, other programs cannot get messages. Every program should 
  3196. get ready in 0.1 seconds. 
  3197.  
  3198. To avoid mis-understandings: OS/2 is a pre-emtive operations system. While one 
  3199. PM application is working on a message all threads that are not waiting for a 
  3200. PM message (in other words, they don't take part in the discussion) can do 
  3201. whatever they want to do (For example WatchCat can kill the PM...). 
  3202.  
  3203. What does this mean in practice? You are currently running view.exe to read 
  3204. this online documention. Click on Services/Search to search for a text string. 
  3205. When searching for a certain string the PM shows a funny small clock and you 
  3206. have a reason to justify opening a new can of beer. View.exe is a perfect 
  3207. example what happens if someone ignores the CUA guidelines. Obviously the CUA 
  3208. book is not much spreaded in the IBM - there are many more examples like view. 
  3209. The correct solution (maybe in OS/2 4.0) is to put the searching algorithm in a 
  3210. different (non-PM) thread. 
  3211.  
  3212.  
  3213. ΓòÉΓòÉΓòÉ 13.2.2. The single message queue ΓòÉΓòÉΓòÉ
  3214.  
  3215. As you have seen above there are parts in the PM that have to be serialized. 
  3216. Hmmm. There seems to be an easy solution. Every application gets a message 
  3217. queue. Now the PM can save all messages belonging to one appliction in the 
  3218. queue and give the control to another application. And indeed - every 
  3219. application has its own message queue, but - 
  3220.  
  3221. ... there is one bottle neck: Only one system message queue. User input 
  3222. (keyboard, mouse) is  not put directly into the application message queues, 
  3223. instead all user input is serialized. User input cannot be evaluated "in 
  3224. parallel". As long as a program is hanging or working on a message no user 
  3225. input can be evaluated. 
  3226.  
  3227. This is the reason why you can see the clock running; pulse is working and you 
  3228. are watching the ill-behaved application while it is joyfully deleting your 
  3229. files and (without WatchCat) you can do nothing except rebooting, because your 
  3230. input is saved in the system message queue but not directed to the 
  3231. applications. 
  3232.  
  3233.  
  3234. ΓòÉΓòÉΓòÉ 13.3. How does WatchCat work? ΓòÉΓòÉΓòÉ
  3235.  
  3236. WatchCat is - of course - not a PM application. Instead it is running in a 
  3237. different session. It bypasses the PM handling of keyboard events by directly 
  3238. accessing the hardware: 
  3239.  
  3240. The PM is blocked, but WatchCat (better: its device driver) detects the hotkey 
  3241. sequence. It grabs the CPU time and the screen. The user can now kill the 
  3242. corrupt PM task (which violates CUA!) or kill the PM itself. All other PM 
  3243. programs are not affected. Now the PM is stable again. By pressing ESC, 
  3244. WatchCat turns back to the PM as you can go on working as if nothing happend: 
  3245.  
  3246.  
  3247. ΓòÉΓòÉΓòÉ 13.3.1. The message queue size ΓòÉΓòÉΓòÉ
  3248.  
  3249. There were long discussions in the Internet fora whether the message queue size 
  3250. of OS/2 is too small. 
  3251.  
  3252. First: The process control center contains DLL to increase the message queue 
  3253. size of any application process to 100 messages. 
  3254.  
  3255. In spite of this feature the message queue will probably never cause problems: 
  3256.  
  3257.      Technical argumentation 
  3258.  
  3259.       There are two ways to distribute messages: sending messages (which is 
  3260.       synchronous) and posting messages (which is asynchronous). Sending a 
  3261.       message results in a procedure call, while only posted messages are put 
  3262.       into the (application) message queue. 
  3263.  
  3264.       When the PM hangs because of a limited message queue obviously one or 
  3265.       more applications are corrupting/blocking the message queue. Therefore it 
  3266.       exists an ill-behaved thread, which has as least 
  3267.  
  3268.         1. a message queue (non-PM threads cannot block the PM), 
  3269.  
  3270.         2. a window procedure (without it the thread simply does not take care 
  3271.            about posted or lost messages) and 
  3272.  
  3273.         3. a condition under which this thread is blocked. 
  3274.  
  3275.       As noted above, posted messages are asynchronous. I can imagine only 
  3276.       three situations why a thread (with message queue and window procedure) 
  3277.       might hang because of a lost posted message: 
  3278.  
  3279.         1. The window procedure waits for the posted message: 
  3280.               Example: 
  3281.  
  3282.                           ...
  3283.                           case WM_PAINT: wait_for(WM_USER);
  3284.                                   ...
  3285.                           ...
  3286.                          This is not possible with the PM.
  3287.  
  3288.         2. The window proc waits for an event caused indirectly by the 
  3289.            posted message: 
  3290.                case WM_PAINT: DosWaitEventSem(...); 
  3291.            This is absolutely worst PM programming style! You must not block 
  3292.            the window procedure. A message should be answered in 0.1 seconds 
  3293.            (CUA). In a multitasking environment you cannot make any assumptions 
  3294.            about the performance of other threads. Therefore you should not 
  3295.            block the thread via blocking/waiting. Instead a message should be 
  3296.            sent/posted (e.g. WM_SEM1). The PM is not blocked with this 
  3297.            approach. 
  3298.  
  3299.         3. A user message sends information about e.g. initialization. When 
  3300.            this message is lost, parts of the application are not initialized. 
  3301.            This is bad programming practice, but the result will probably be a 
  3302.            protection violation or window garbage, but not a hung PM. 
  3303.  
  3304.       So - I believe - it is almost impossible for an application to hang 
  3305.       because of lost messages. And if there is an ill-behaved application that 
  3306.       waits synchronously for a posted message it is programmed very ugly and 
  3307.       will probably fail quite often (and not just because of the queue size). 
  3308.  
  3309.       This does not mean that I believe messages cannot get lost. But I don't 
  3310.       believe that the result is a hung PM. Probably a listbox does not contain 
  3311.       all items or the window is not redrawn correctly. 
  3312.  
  3313.       And there is one more thing that is difficult to understand. Assuming 
  3314.       that a lock-up is happening rarely (e.g. 1% of the lost messages) there 
  3315.       must be a lot of lost messages. As a consequence there must be a lot of 
  3316.       lost button clicks, menu choices, incorrect drawn windows, etc. The 
  3317.       slower the CPU is, the more faults are visible. But I have rarely seen 
  3318.       problems like that on my 386/33, but I sometimes had a hung PM. 
  3319.  
  3320.      non-technical argumentation 
  3321.  
  3322.       The PM supports two ways of communication: synchronous (like a telephone 
  3323.       call) and asynchronous (like sending a letter). In my opinion synchronous 
  3324.       communication may cause hang-ups or deadlocks. (e.g. imagine you and your 
  3325.       partner are trying to call each-other simultaneously without hangingup 
  3326.       the phone. This results in a deadlock). Asynchronous communication cannot 
  3327.       result in deadlocks (or are you not working while waiting for the 
  3328.       postman?). Lost messages (letters) may result in errors, but not in 
  3329.       system lock-ups. 
  3330.  
  3331.  
  3332. ΓòÉΓòÉΓòÉ 13.4. Is OS/2 instable? ΓòÉΓòÉΓòÉ
  3333.  
  3334. Is WatchCat the proof that OS/2 is instable? 
  3335.  
  3336. NO. OS/2 is a very stable, very modern and very powerful operating system. Like 
  3337. many other systems there are situations where OS/2 gets into trouble. We want 
  3338. to improve OS/2 with WatchCat. 
  3339.  
  3340.  
  3341. ΓòÉΓòÉΓòÉ 13.5. What processes cannot be killed? ΓòÉΓòÉΓòÉ
  3342.  
  3343. Unfortunately OS/2 does not support a "die, die, die" Signal (or kill -9 on 
  3344. Unix). OS/2 seems to believe that in doubts the nature of an application is 
  3345. peaceful. There are some kind of programs that cannot be killed, e.g.: 
  3346.  
  3347.      programs "stopping" in the exit list 
  3348.  
  3349.      programs "stopping" in a 16-Bit segment 
  3350.  
  3351.  Sorry, the only chance is to reboot. 
  3352.  
  3353.  
  3354. ΓòÉΓòÉΓòÉ 13.6. It beeps, but why does WatchCat not pop up? ΓòÉΓòÉΓòÉ
  3355.  
  3356. The beep is from the device driver. That is very low-level. A device driver can 
  3357. operate even if the operating system is damaged. The hotkey will be recognized 
  3358. as long as Ctr-Alt-Del is possible also. Of course in situations of a complete 
  3359. OS-hangup WatchCat is helpless. 
  3360.  
  3361. On the other hand the WatchCat.exe program needs to get access to the display. 
  3362. There are rare situations where the system locks the display and WatchCat has 
  3363. no chance to display its information. 
  3364.  
  3365.           Activate WatchCat a second time. This forces the PM to be killed. In 
  3366.           some situation this helps WatchCat to pop up. 
  3367.  
  3368.  
  3369. ΓòÉΓòÉΓòÉ 13.7. Is WatchCat a low-level program? ΓòÉΓòÉΓòÉ
  3370.  
  3371. For some users it may be surprising that WatchCat itself is not a tricky, 
  3372. ill-behaved, low-level program. 
  3373.  
  3374. WatchCat uses a few tricks, but it is not as low-level as one might expect. The 
  3375. device driver is using a documented interface. WatchCat.exe is a ring-3 
  3376. application like your complier or your text processor. The way both parts work 
  3377. together is the name of the game. 
  3378.  
  3379.  
  3380. ΓòÉΓòÉΓòÉ 14. Trouble shooting ΓòÉΓòÉΓòÉ
  3381.  
  3382. If you have any problems with WatchCat please refer to this section. If your 
  3383. problem cannot be solved, have a look at the WatchCat-WWW-home page or send us 
  3384. a mail. 
  3385.  
  3386.  
  3387. ΓòÉΓòÉΓòÉ 14.1. Tips when you have problems ΓòÉΓòÉΓòÉ
  3388.  
  3389. WatchCat is not a trivial program. It is a good-behaved program but with 
  3390. special hardware configurations or after a wrong installation you may detect 
  3391. that WatchCat is not working as expected. Please follow the following guideline 
  3392. to get WatchCat working. (Most of the tips are not just limited to WatchCat.) 
  3393.  
  3394.  
  3395. ΓòÉΓòÉΓòÉ 14.2. The installation of (a) WatchCat (component) did not work ΓòÉΓòÉΓòÉ
  3396.  
  3397.    1. Stop working! Think it over! 
  3398.  
  3399.    2. Read the trouble shooting section carefully. Is your problem listed 
  3400.       there? Did you follow the installation rules? Did you install WatchCat 
  3401.       like other software? (E.g. installing a program to the RAM-Disk or CDROM 
  3402.       does not work). 
  3403.  
  3404.    3. Don't forget to remove all older versions of WatchCat each time before 
  3405.       installing a new version (the 1st, 2nd, 3rd time). 
  3406.  
  3407.    4. Reboot 
  3408.  
  3409.    5. Check whether the PATH and LIBPATH environment variable are set 
  3410.       correctly. 
  3411.  
  3412.    6. If the installation was aborted, there may be some parts installed while 
  3413.       others are not. Try to deinstall the program completey before trying 
  3414.       again. 
  3415.  
  3416.    7. Experts may start the wcinfo utility and check the supplied information. 
  3417.  
  3418.    8. If you have Internet WWW access select 
  3419.       http://www.fmi.uni-passau.de/~normann/wcinfo.html The latest information 
  3420.       is collected here. 
  3421.  
  3422.    9. Send us a mail (watchcat@uni-passau.de). Describe the problem precisely 
  3423.       (consider to include the output of the wcinfo utility). 
  3424.  
  3425.  
  3426. ΓòÉΓòÉΓòÉ 14.3. Suddenly WatchCat does not work any longer ΓòÉΓòÉΓòÉ
  3427.  
  3428.    1. Stop working! Think it over! 
  3429.  
  3430.    2. Read the trouble shooting section carefully. Is your problem listed 
  3431.       there? 
  3432.  
  3433.    3. What has changed? config.sys? The hardware? 
  3434.  
  3435.    4. Is WatchCat running? Maybe you just killed it. 
  3436.  
  3437.    5. Have a look at the config.sys? Does everything look ok? 
  3438.  
  3439.    6. Experts may start the wcinfo utility and check the supplied information. 
  3440.  
  3441.    7. If you have Internet WWW access, select 
  3442.       http://www.fmi.uni-passau.de/~normann/wcinfo.html The latest information 
  3443.       is collected here. 
  3444.  
  3445.    8. Send us a mail (watchcat@uni-passau.de). Describe the problem precisely 
  3446.       (consider to include the output of the wcinfo utility). 
  3447.  
  3448.  
  3449. ΓòÉΓòÉΓòÉ 14.4. The system is instable when WatchCat is running ΓòÉΓòÉΓòÉ
  3450.  
  3451.    1. Stop working! Think it over! 
  3452.  
  3453.    2. Read the trouble shooting section carefully. Is your problem listed 
  3454.       there? Especially if you have a bus mouse or a laptop/notebook. 
  3455.  
  3456.    3. Did you follow all installation instructions? (Add WatchCat at the end of 
  3457.       the config.sys). 
  3458.  
  3459.    4. Try to remove some of the components. 
  3460.  
  3461.         a. REM out the device driver, REM out CALL=, RUN= 
  3462.  
  3463.         b. Start WatchCat. Does it work? Now include the device driver. Does it 
  3464.            work? Now include RUN=. Does it work? 
  3465.  
  3466.    5. Experts may start the wcinfo utility and check the supplied information. 
  3467.  
  3468.    6. If you have Internet WWW access select 
  3469.       http://www.uni-passau.de/~normann/wcinfo.html The latest information is 
  3470.       collected here. 
  3471.  
  3472.    7. Send us a mail (watchcat@uni-passau.de). Describe the problem precisely 
  3473.       (consider to include the output of the wcinfo utility). 
  3474.  
  3475.  
  3476. ΓòÉΓòÉΓòÉ 14.5. Pressing Ctrl-Alt-W does not result in any action ΓòÉΓòÉΓòÉ
  3477.  
  3478. Make sure that you included watchcat.sys in your CONFIG.SYS. 
  3479.  
  3480. Make sure that WatchCat is running DETACHED (include it with RUN= in your 
  3481. CONFIG.SYS). If WatchCat is running visibly, it is NOT detached. 
  3482.  
  3483. Try to find out if other ways to activate WatchCat work. 
  3484.  
  3485.  
  3486. ΓòÉΓòÉΓòÉ 14.6. My mouse is killed after activation ΓòÉΓòÉΓòÉ
  3487.  
  3488. Run WatchCat with the parameter /nomouse 
  3489.  
  3490.  
  3491. ΓòÉΓòÉΓòÉ 14.7. The screen is black and I cannot see anything ΓòÉΓòÉΓòÉ
  3492.  
  3493. Run WatchCat with the parameter /nofade 
  3494.  
  3495.  
  3496. ΓòÉΓòÉΓòÉ 14.8. My mouse is jumping ΓòÉΓòÉΓòÉ
  3497.  
  3498. Using a bus mouse may be incompatible with WatchCat. Either use a serial mouse 
  3499. or choose a different mechanism for activating WatchCat. 
  3500.  
  3501.  
  3502. ΓòÉΓòÉΓòÉ 14.9. Some keys are hanging ΓòÉΓòÉΓòÉ
  3503.  
  3504. This seems to be an OS/2 keyboard driver bug. Try to specify the parameter 
  3505. /rate:x, with 1<=x<=9, default is /rate:2. Try out if a higher value than 2 
  3506. works. 
  3507.  
  3508.  
  3509. ΓòÉΓòÉΓòÉ 14.10. I cannot kill my program ΓòÉΓòÉΓòÉ
  3510.  
  3511. There are some programs WatchCat cannot kill. Sorry. Since OS/2 does not 
  3512. provide a way to shoot'em down, we can't help. 
  3513.  
  3514. Sometimes it is impossible to get a stable system again. In this case it is 
  3515. necessary to boot via Ctrl-Alt-Del. Please note that this key sequence does 
  3516. close all files. Do not press the reset key. 
  3517.  
  3518. You may also open a shell by pressing Space (or open a windowed shell) and do 
  3519. some house-keeping before rebooting. 
  3520.  
  3521.  
  3522. ΓòÉΓòÉΓòÉ 14.11. Why is the PM-Shell killed? ΓòÉΓòÉΓòÉ
  3523.  
  3524. It's not a bug - it's a feature! When WatchCat is activated a second time 
  3525. before it pops up, the PM-Shell is killed. This is very useful for some 
  3526. hang-ups. On the other hand, it might not be useful when using etc. the 
  3527. joystick (hold tzhe fire-button a few seconds). You can switch off this feature 
  3528. with /nokillpm. 
  3529.  
  3530.  
  3531. ΓòÉΓòÉΓòÉ 14.12. Problems with Notebooks ΓòÉΓòÉΓòÉ
  3532.  
  3533. When using the device driver the notebook might not go into sleeping mode. 
  3534. Consider to use an alternative activation method (cf.  the WPS object). 
  3535.  
  3536.  
  3537. ΓòÉΓòÉΓòÉ 14.13. Problems with a bus mouse ΓòÉΓòÉΓòÉ
  3538.  
  3539. When using a bus mouse the following problems may occur: 
  3540.  
  3541.      The mouse is "jumping" 
  3542.  
  3543.      When only one activation key is selected (i.e. F12) WatchCat may be 
  3544.       activated accidently. 
  3545.  
  3546.  There are three solutions: 
  3547.  
  3548.      Use a serial mouse 
  3549.  
  3550.      Use another activation methos (e.g. joystick) 
  3551.  
  3552.      Consider to use an alternative activation method (cf. the WPS object). 
  3553.  
  3554.  
  3555. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3556.  
  3557. Yes, please, please, please send us a postcard. We want to get drowned in 
  3558. postcards! Thousend thanks from Passau!!!! 
  3559.  
  3560.  
  3561. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3562.  
  3563. Your postcard can look like this: 
  3564.  
  3565.  
  3566. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3567.  
  3568. Your country, your hometown, a funny cartoon, Claudia Schiffer, whatever you 
  3569. like! 
  3570.  
  3571. Sample postcard: 
  3572.  
  3573.  
  3574. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3575.  
  3576. The hardware switch looks similar to the following: 
  3577.  
  3578.  
  3579. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3580.  
  3581. WatchCat uses the FeelX API to switch quick marking to the alternate Marking 
  3582. mode if it is started in a window. So it is still possible to use cut and 
  3583. paste, but you must press a shift key (per default: just shift, this can be 
  3584. selected in the FeelX notebook). Other windows are not affected. 
  3585.  
  3586. In the current version of FeelX (1.1a) it is not possible to turn off the 
  3587. context menu. It is recommended to use Alt-F10 to get the context window in a 
  3588. windowed version of WatchCat. 
  3589.  
  3590.  
  3591. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3592.  
  3593. A single-pole double-throw (SPDT) looks like this: In this situation pins 2 and 
  3594. 3 are connected. 
  3595.  
  3596.  
  3597. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3598.  
  3599. A switch like the PC's turbo button looks like this: In this situation both 
  3600. pins are connected if the button is pressed. For WatchCat, a switch that 
  3601. remains in the state in which it is set is recommended. 
  3602.  
  3603.  
  3604. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3605.  
  3606. DeskMan/2 (Gregory Czaja; Development Technologies, Inc.) is a powerful tool 
  3607. for the Workplace Shell. One of its (endless) features allows the user to save 
  3608. and restore Workplace Shell objects. 
  3609.  
  3610.  
  3611. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3612.  
  3613. The CONFIG.SYS file is the OS/2 configuration file. It can be found in the root 
  3614. directory of the OS/2 boot drive. 
  3615.  
  3616.  
  3617. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3618.  
  3619. A key-sequence that is used to perform some action (instead of typing 
  3620. characters and words) is called a hotkey. The default hotkey to activate 
  3621. WatchCat is Ctrl-Alt-W: 
  3622.  
  3623.  
  3624. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3625.  
  3626. The environment variable LIBPATH is set in the CONFIG.SYS file. You must add 
  3627. the WatchCat path here to ensure that all DLL's are found. Especially the WPS 
  3628. object cannot work without this variable. 
  3629.  
  3630.  
  3631. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3632.  
  3633. The environment variable PATH is set in the CONFIG.SYS file. You must add the 
  3634. WatchCat path here to ensure that the program can be start from any command 
  3635. shell. 
  3636.  
  3637.  
  3638. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3639.  
  3640. This statement is used to integrate a device driver into OS/2. WatchCat uses a 
  3641. device driver to be independent from usual message processing (which might be 
  3642. blocked). Add the line DEVICE=x:\path\watchcat.sys (parameters) anywhere in 
  3643. your CONFIG.SYS file. 
  3644.  
  3645.  
  3646. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3647.  
  3648. The environment variable LIBPATH is set in the CONFIG.SYS file. You must add 
  3649. the WatchCat path here to ensure that the help file is found whenever you type 
  3650. view watchcat  in a command shell. 
  3651.  
  3652.  
  3653. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3654.  
  3655. This statement is responsible for detaching a program on start-up. Please add 
  3656. the line RUN=x:\path\watchcat anywhere in your CONFIG.SYS. In contrast to START 
  3657. this command detaches the process. Do NOT use START. 
  3658.  
  3659.  
  3660. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3661.  
  3662. The PM (Presentation Manager) is responsible for the graphical appearance of 
  3663. OS/2. The PM manages windows, buttons, ... The best known PM-application is the 
  3664. WPS (Workplace Shell). 
  3665.  
  3666.  
  3667. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3668.  
  3669. A device driver is responsible for the communication between applications and 
  3670. hardware. An application cannot (should not) access hardware directly. There 
  3671. are 3 types of device drivers. 
  3672.  
  3673.    1. A base device driver is loaded even before other device drivers. It is 
  3674.       very, very low level. E.G. AHA154X.ADD is driver that is responsible for 
  3675.       the Adaptec SCSI Adapter. This driver is added to the CONFIG.SYS via 
  3676.       BASEDEV= 
  3677.  
  3678.    2. A physical device driver (the "normal" driver) is added to the config.sys 
  3679.       via DEVICE It is loaded after the base device drivers and before any 
  3680.       application. Physical device drivers are always 16-Bit. 
  3681.  
  3682.    3. A virtual device driver is a special device driver. It is used by a 
  3683.       virtual DOS machine to virtualize hardware. DOS programs can access 
  3684.       hardware directly which is not allowed with OS/2 (s.a.). Therefore the 
  3685.       hardware is "simulated" by the virtual device driver. The virtual device 
  3686.       driver can communicate with a physical device driver. from the technical 
  3687.       point of view a virtual device driver is a 32-Bit DLL. 
  3688.  
  3689.  WatchCat uses a physical device driver (watchcat.sys) to by-pass the standard 
  3690.  key processing. Therefore WatchCat notices its hotkey even when the PM is 
  3691.  blocked. 
  3692.  
  3693.  
  3694. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3695.  
  3696. WatchCat uses the CuTe technology (continous update technology) for quickly 
  3697. updating the windows. 
  3698.  
  3699.  
  3700. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3701.  
  3702. The OS/2 Presentation-Manager is an event-driven system. All events in the 
  3703. system (e.g. moving the mouse or pressing a key) are converted into a message 
  3704. an put into a global message queue. The applications take the messages from 
  3705. this queue. This is done in a serial way. The second program cannot get a 
  3706. message while the first application is still working on its message. Therefore 
  3707. one application can stop the whole system. 
  3708.  
  3709.  
  3710. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3711.  
  3712. The WPS (Workplace Shell) is the graphical user interface of OS/2. An WPS 
  3713. object is simply an icon (and its functionality). All icons on your desktop are 
  3714. WPS objects. 
  3715.  
  3716. Objects with the same functionality are grouped to a WPS class. Mostly one 
  3717. class has many objects. For example there are many folder objects which are 
  3718. instances of the folder class. Some classes only have one object (e.g. 
  3719. WatchCat). 
  3720.  
  3721. Classes that are not part of OS/2 (e.g. WatchCat) must be registered (just to 
  3722. tell the system that they want to be used...). This task is done by the 
  3723. installation program. 
  3724.  
  3725.  
  3726. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3727.  
  3728. A dynamic link library (DLL) is program code that is linked to an application 
  3729. when the program is started. A DLL can be shared by many different processes. 
  3730.  
  3731. There are two ways of using a DLL: 
  3732.  
  3733.    1. load-time dynamic linking: The DLL is loaded when the program is started. 
  3734.       The DLL is not part of the application, but there are references to the 
  3735.       DLL in the program. 
  3736.  
  3737.    2. run-time dynamic linking: The DLL is loaded via an explicit command in 
  3738.       the application. The program does not have any references to the DLL. The 
  3739.       DLL is not loaded until the explicit call. 
  3740.  
  3741.  WatchCat can display all run-time linked DLL in the Library window. ALL DLL 
  3742.  will we displayed in main window (if "all modules" is selected).