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