home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lxapi32.zip / Dev32 / lxstrategy.c < prev    next >
C/C++ Source or Header  |  2002-04-26  |  5KB  |  156 lines

  1. /* $Id: lxstrategy.c,v 1.2 2002/04/26 23:08:57 smilcke Exp $ */
  2.  
  3. /*
  4.  * strategy.c
  5.  * Autor:               Stefan Milcke
  6.  * Erstellt am:         07.09.2001
  7.  * Letzte Aenderung am: 27.04.2002
  8.  *
  9. */
  10.  
  11. extern "C"
  12. {
  13. #define INCL_NOPMAPI
  14. #define INCL_DOSINFOSEG
  15. #include <os2.h>
  16. }
  17.  
  18. #include <devhelp.h>
  19. #include <devtype.h>
  20. #include <devrp.h>
  21. #include "lxdevown.h"
  22.  
  23. extern "C" WORD32 StratIOCtl(RP __far *_rp);
  24. WORD32 StratClose(RP __far *_rp);
  25. WORD32 StratRemove(RP __far *_rp);
  26.  
  27. // SvL: Needed in StratOpen
  28. WORD32 deviceOwner = DEV_NO_OWNER; //UltiMOD, PCM, MIDI etc.
  29. WORD32 numOS2Opens = 0;
  30. // SvL: End
  31.  
  32. extern "C" void OS2_V4lx_close_all_opened_devices(void);
  33. extern "C" unsigned long OS2_get_current_pid(void);
  34. //--------------------------------- StratOpen ----------------------------------
  35. WORD32 StratOpen(RP __far*)
  36. {
  37.  if(numOS2Opens == 0)
  38.  {
  39.   OS2_V4lx_close_all_opened_devices();
  40.   deviceOwner = DEV_PDD_OWNER;
  41.  }
  42.  numOS2Opens++;
  43.  return RPDONE;
  44. }
  45.  
  46. //--------------------------------- StratWrite ---------------------------------
  47. #pragma off (unreferenced)
  48. static WORD32 StratWrite(RP __far* _rp)
  49. #pragma on (unreferenced)
  50. {
  51.   return RPDONE | RPERR;
  52. }
  53.  
  54. extern WORD32 DiscardableInit(RPInit __far*);
  55.  
  56. //--------------------------------- StratInit ----------------------------------
  57. WORD32 StratInit(RP __far* _rp)
  58. {
  59.   RPInit __far* rp = (RPInit __far*)_rp;
  60.   return DiscardableInit(rp);
  61. }
  62.  
  63.  
  64. //----------------------------- StratInitComplete ------------------------------
  65. #pragma off (unreferenced)
  66. WORD32 StratInitComplete(RP __far* _rp)
  67. #pragma on (unreferenced)
  68. {
  69.   return(RPDONE);
  70. }
  71.  
  72. //--------------------------------- StratError ---------------------------------
  73. static WORD32 StratError(RP __far*)
  74. {
  75.   return RPERR_COMMAND | RPDONE;
  76. }
  77.  
  78. extern "C" void do_cleanup_all_requested_modules(int external);
  79. extern "C" bttv_cleanup_module(void);
  80. extern "C" videodev_exit();
  81.  
  82. //------------------------------- StratDeinstall -------------------------------
  83. #pragma off (unreferenced)
  84. static WORD32 StratDeinstall(RP __far* rp)
  85. #pragma on (unreferenced)
  86. {
  87.  do_cleanup_all_requested_modules(1);
  88.  do_cleanup_all_requested_modules(0);
  89.  return RPDONE;
  90. }
  91.  
  92. //------------------------------- StratShutdown --------------------------------
  93. static WORD32 StratShutdown(RP __far* _rp)
  94. {
  95.  RPShutdown __far *rp=(RPShutdown __far *)_rp;
  96.  if(rp->Function==0)
  97.   do_cleanup_all_requested_modules(1);    // Unload external modules
  98.  else
  99.   do_cleanup_all_requested_modules(0);    // Unload internal modules
  100.  return RPDONE;
  101. }
  102.  
  103. // Strategy dispatch table
  104. //
  105. // This table is used by the strategy routine to dispatch strategy requests
  106.  
  107. typedef WORD32 (*RPHandler)(RP __far* rp);
  108. RPHandler StratDispatch[] =
  109. {
  110.   StratInit,                  // 00 (BC): Initialization
  111.   StratError,                 // 01 (B ): Media check
  112.   StratError,                 // 02 (B ): Build BIOS parameter block
  113.   StratError,                 // 03 (  ): Unused
  114.   StratError,                 // 04 (BC): Read
  115.   StratError,                 // 05 ( C): Nondestructive read with no wait
  116.   StratError,                 // 06 ( C): Input status
  117.   StratError,                 // 07 ( C): Input flush
  118.   StratWrite,                 // 08 (BC): Write
  119.   StratError,                 // 09 (BC): Write verify
  120.   StratError,                 // 0A ( C): Output status
  121.   StratError,                 // 0B ( C): Output flush
  122.   StratError,                 // 0C (  ): Unused
  123.   StratOpen,                  // 0D (BC): Open
  124.   StratClose,                 // 0E (BC): Close
  125.   StratError,                 // 0F (B ): Removable media check
  126.   StratIOCtl,                 // 10 (BC): IO Control
  127.   StratError,                 // 11 (B ): Reset media
  128.   StratError,                 // 12 (B ): Get logical unit
  129.   StratError,                 // 13 (B ): Set logical unit
  130.   StratDeinstall,             // 14 ( C): Deinstall character device driver
  131.   StratError,                 // 15 (  ): Unused
  132.   StratError,                 // 16 (B ): Count partitionable fixed disks
  133.   StratError,                 // 17 (B ): Get logical unit mapping of fixed disk
  134.   StratError,                 // 18 (  ): Unused
  135.   StratError,                 // 19 (  ): Unused
  136.   StratError,                 // 1A (  ): Unused
  137.   StratError,                 // 1B (  ): Unused
  138.   StratShutdown,              // 1C (BC): Notify start or end of system shutdown
  139.   StratError,                 // 1D (B ): Get driver capabilities
  140.   StratError,                 // 1E (  ): Unused
  141.   StratInitComplete           // 1F (BC): Notify end of initialization
  142. };
  143.  
  144. //---------------------------------- Strategy ----------------------------------
  145. WORD32 __far Strategy(RP __far* rp);
  146. #pragma aux (STRATEGY) Strategy "STRATEGY_ENTRY";
  147. WORD32 __far Strategy(RP __far* rp)
  148. {
  149.   if (rp->Command < sizeof(StratDispatch)/sizeof(StratDispatch[0]))
  150.            return(StratDispatch[rp->Command](rp));
  151.   else    return(RPERR_COMMAND | RPDONE);
  152. }
  153.  
  154.  
  155.  
  156.