home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ddrivers.zip / VDD / VLPTP.H < prev    next >
C/C++ Source or Header  |  1991-10-08  |  19KB  |  293 lines

  1. /*static char *SCCSID = "%W% %E%";*/
  2. #pragma linesize(132)
  3. #pragma pagesize(60)
  4. #pragma title("VLPTP.H")
  5. /****************************************************************************/
  6. /*                                                                          */
  7. /*                       IBM/Microsoft Confidential                         */
  8. /*                                                                          */
  9. /*                 Copyright (c) IBM Corporation  1987, 1990                */
  10. /*                 Copyright (c) Microsoft Corp.  1987, 1990                */
  11. /*                           All Rights Reserved                            */
  12. /*                                                                          */
  13. /****************************************************************************/
  14. /************************** START OF SPECIFICATIONS ***************************/
  15. /*                                                                            */
  16. /*   SOURCE FILE NAME:  VLPTP.H                                               */
  17. /*                                                                            */
  18. /*   DESCRIPTIVE NAME:  VLPT private constant definitions and data structure  */
  19. /*                      definitions                                           */
  20. /*                                                                            */
  21. /*   FUNCTION: This routine sets the constant definitions and data structure  */
  22. /*             definitions used by VLPT.                                      */
  23. /*                                                                            */
  24. /*   NOTES:                                                                   */
  25. /*                                                                            */
  26. /**************************** END OF SPECIFICATIONS ***************************/
  27.                                     /*                                     */
  28. #define INT_17          0x17        /* Print interrupt vector number 17    */
  29. #define INT_05          0x05        /* Print interrupt vector number 5     */
  30. #define MAXPRTS         3           /* Max. number of LPTs supported       */
  31. #define MAXERROR        5           /* Max. number of errors               */
  32. #define LPTNAME      "LPT \0"       /* LPTx string                         */
  33. #define DRIVENUM    " :\0"
  34. #define DISKSTRING  "0123456789"
  35. #define LPTONE          0           /* LPT 1 offset                        */
  36. #define LPTTWO          1           /* LPT 2 offset                        */
  37. #define LPTTHREE        2           /* LPT 3 offset                        */
  38. #define OPEN_TYPE       0           /* doOpen      type for processing     */
  39. #define FLUSH_TYPE      1           /* doFlush     type for processing     */
  40. #define CLOSE_TYPE      2           /* doClose     type for processing     */
  41. #define ALLOC_TYPE      3           /* VDHAllocMem type for processing     */
  42. #define DIRECT_TYPE     4           /* direct mode type for processing     */
  43. #define PORTS         "123"         /* Global valid port ids  1,2,3        */
  44. #define USED            1           /* Port address USED indicator         */
  45. #define UNUSED          0           /* Port address UNUSED indicator       */
  46. #define BUFSIZ          128         /* Size of character buffer            */
  47. #define DEFLPT1         0x03BC      /* Default port address for LPT1       */
  48. #define DEFLPT2         0x0378      /* Default port address for LPT2       */
  49. #define DEFLPT3         0x0278      /* Default port address for LPT3       */
  50. #define ZERO_ADDRESS    0x00        /* port address of zero                */
  51. #define PORT_HOLD       3           /* holding area offset for port info.  */
  52.                                     /*                                     */
  53.                                     /***************************************/
  54.                                     /* Virtual STATUS port bit definitions */
  55.                                     /*                                     */
  56.                                     /*                                     */
  57.                                     /*   bit bit bit bit bit bit bit bit   */
  58.                                     /*    7   6   5   4   3   2   1   0    */
  59.                                     /*  ---------------------------------  */
  60.                                     /*  | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |  */
  61.                                     /*  ---------------------------------  */
  62.                                     /*    |   |   |   |   |   |   |   |    */
  63.                                     /*    v   |   v   |   v   |   v   |    */
  64.                                     /*  BUSY  |  PE   | ERROR |reserv-|    */
  65.                                     /*        |       |       |  ed   |    */
  66.                                     /*        v       v       v       v    */
  67.                                     /*       ACK   SELECT    IRQ  reserved */
  68.                                     /***************************************/
  69.                                     /*                                     */
  70. #define BUSY_BIT        0x80        /* BUSY bit indicator in status field  */
  71. #define POWER_ON_STATUS 0x0DF       /* Power on status port setting        */
  72. #define STATUS_MASK     0x0F8       /* Status port un-used bit mask off    */
  73. #define STATUS_REV      0x048       /* Status port reverse bit mask        */
  74.                                     /*                                     */
  75.                                     /***************************************/
  76.                                     /* Virtual CONTROL port bit definitions*/
  77.                                     /*                                     */
  78.                                     /*                                     */
  79.                                     /*   bit bit bit bit bit bit bit bit   */
  80.                                     /*    7   6   5   4   3   2   1   0    */
  81.                                     /*  ---------------------------------  */
  82.                                     /*  | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |  */
  83.                                     /*  ---------------------------------  */
  84.                                     /*    |   |   |   |   |   |   |   |    */
  85.                                     /*    v   |   v   |   v   |   v   |    */
  86.                                     /*reserved| direc-| SLCT  | AUTO  |    */
  87.                                     /*        | tion  |  IN   | FD XT |    */
  88.                                     /*        v       v       v       v    */
  89.                                     /*     reserved  IRQ    INIT    STROBE */
  90.                                     /*               EN                    */
  91.                                     /***************************************/
  92.                                     /*                                     */
  93. #define CTRL_DIRECTION_BIT 0x020    /* Control port direction bit, bit 5   */
  94. #define CTRL_IN_MASK    0x0C0       /* Control port IN reserved bits mask  */
  95. #define CTRL_OUT_MASK   0x02F       /* Control port OUT reserved bits mask */
  96.                                     /*                                     */
  97.                                     /***************************************/
  98.                                     /*                                     */
  99. #define RESERVE_MASK    0x0FF       /* Return value mask for reserve port  */
  100. #define TIME_OUT        0x01        /* TIME-OUT indicator                  */
  101.                                     /*                                     */
  102.                                     /***************************************/
  103.                                     /* Per VDM Data Area FLAGS definitions */
  104.                                     /*                                     */
  105.                                     /*                                     */
  106.                                     /*   bit bit bit bit bit bit bit bit   */
  107.                                     /*    7   6   5   4   3   2   1   0    */
  108.                                     /*  ---------------------------------  */
  109.                                     /*  | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  */
  110.                                     /*  ---------------------------------  */
  111.                                     /*    |   |   |   |   |   |   |   |    */
  112.                                     /*    v   |   v   |   v   |   v   |    */
  113.                                     /*  open  | flush | open/ | prt-  |    */
  114.                                     /*  error | error | closed| screen|    */
  115.                                     /*        v       v       v       v    */
  116.                                     /*      close   direct  init     not   */
  117.                                     /*      error    mode            used  */
  118.                                     /***************************************/
  119.                                     /*                                     */
  120. #define OPEN_ERROR_FLAG   0x80      /* OPEN  error indicator               */
  121. #define CLOSE_ERROR_FLAG  0x40      /* CLOSE error indicator               */
  122. #define FLUSH_ERROR_FLAG  0x20      /* FLUSH error indicator               */
  123. #define DIRECT_MODE_FLAG  0x10      /* DIRECT MODE indicator               */
  124. #define OPEN_FLAG         0x08      /* OPEN/CLOSE  complete indicator      */
  125. #define INIT_FLAG         0x04      /* INIT  complete indicator            */
  126. #define PRT_SC_IN_PROG    0x02      /* print screen in progress indicator  */
  127. #define RESV1_FLAG        0x01      /* not used                            */
  128.                                     /*                                     */
  129. #define OP_CL_FL_MASK     0x0E0     /* Open, Close, Flush error mask       */
  130. #define FLAG_NOT_SET      0x00      /*  00000000b                          */
  131.                                     /*                                     */
  132. #define RTN_ERR_PGM     0x0001      /*  response value from VDHPopup       */
  133. #define ABORT           0x0002      /*  response value from VDHPopup       */
  134. #define RETRY           0x0004      /*  response value from VDHPopup       */
  135. #define IGNORE          0x0008      /*  response value from VDHPopup       */
  136.                                     /*                                     */
  137. #define POPUP                1      /* TRUE FLAG                           */
  138. #define NO_POPUP             0      /* FALSE FLAG                          */
  139.                                     /*                                     */
  140. #define RETRY_VAL            5      /* number of times to retry on error   */
  141. #define TIMEOUT_VAL       5000      /* how long before timeout during retry*/
  142.                                     /* timeout interpreted in milliseconds */
  143.                                     /*                                     */
  144. #define INVALID_PDB          0      /* initial PDB value                   */
  145. #define INVALID_HANDLE       0      /* initial File Handle                 */
  146.                                     /*                                     */
  147. #define LPT_NAME          "LPT"     /* Physical Printer Device Driver name */
  148.                                     /*                                     */
  149. #define PLPT_REQUEST_EXCLUSIVE  2   /* VDD-PDD function for open direct    */
  150. #define PLPT_RELEASE_EXCLUSIVE  3   /* VDD-PDD function for close direct   */
  151. #define PLPT_GET_BUFFER_SIZE    4   /* VDD-PDD function for get printer    */
  152.                                     /* buffer size                         */
  153.  
  154. /***LK+ Advance Properties Configurable constants
  155.  */
  156. #define VLPT_SPOOL_MIN      0   /* minimum value for LPT timeout (No timeout) */
  157. #define VLPT_SPOOL_MAX      60*60   /* max value 1 hour (seconds)             */
  158. #define VLPT_SPOOL_STEP     1   /* advanced property step value (1 second)    */
  159. #define VLPT_SPOOL_CLOSE    15  /* default timeout for LPT to close spool     */
  160.                                 /* file in seconds                            */
  161. /*end*/
  162.                                     /*                                     */
  163. typedef USHORT VLPTPDB;             /* define PDB type                     */
  164.                                     /*                                     */
  165.                                     /*                                     */
  166. struct def_bios_data_area {         /* Default VDM Bios Data Area          */
  167.        USHORT lptbase;              /* lpt base port address 16 bit        */
  168.        USHORT used;                 /* Used or not                         */
  169. };                                  /*                                     */
  170.                                     /*                                     */
  171. struct port_address       {         /* LPT port addresses                  */
  172.        USHORT data;                 /* data port address      16 bit       */
  173.        USHORT status;               /* status port address                 */
  174.        USHORT control;              /* control port address                */
  175.        USHORT reserve;              /* reserve port address                */
  176. };                                  /*                                     */
  177.                                     /*                                     */
  178. struct instance_data      {         /* instance data                       */
  179.       UCHAR  flags;                 /* control flags                       */
  180.       UCHAR  data;                  /* virtualized contents of data port   */
  181.       UCHAR  status;                /* virtualized contents of status port */
  182.       UCHAR  lptportid;             /* offset into structure (aka portid)  */
  183.       HFILE  fshandle;              /* handle from VDHOpenPRN              */
  184.       USHORT bufcount;              /* buffer byte counter                 */
  185.       USHORT reserve_word;          /* reserved word                       */
  186.       PCHAR  stream;                /* stream buffer pointer               */
  187.       USHORT pdb_spool;             /* pdb of spool IO process             */
  188.       USHORT pdb_direct;            /* pdb of direct IO process            */
  189.       HHOOK  hhookLptEventContext;  // per lpt context handle
  190. } ;                                 /*                                     */
  191.                                     /*                                     */
  192. typedef struct instance_data *PVLPTINST; // pointer to VLPT instance data structure
  193. typedef PVLPTINST *PPVLPTINST;   // pointer to pointer to instance data
  194.                                     /*                                     */
  195. struct error_table_record {         /* error handling table record         */
  196.       ULONG err_code;               /* error number                        */
  197.       ULONG m_err_code;             /* mapped message file error number    */
  198.       INT   popup;                  /* popup 1 = TRUE  0 = FALSE           */
  199.       ULONG valid_res;              /* valid responses                     */
  200.       ULONG def_res;                /* default responses                   */
  201.       UINT  timeout;                /* timeout                             */
  202.       ULONG retry;                  /* retry count                         */
  203.       PSZZ sub_str;                 /* message substitution string         */
  204.       ULONG num_sub_str;            /* # of message substitution strings   */
  205. };                                  /*                                     */
  206.                                     /*                                     */
  207. struct vlpt_ioh_table_s {           /* IO handle table structure           */
  208.       struct ioh_s iohtable;        /* specific IO handle routine          */
  209. };                                  /*                                     */
  210.                                     /*                                     */
  211.  
  212. #define NOT_BIDI_MODE      0x080    /* Bi-directional flag of Port 102h    */
  213. #define VBIOS_NAME         "VBIOS"  /* VDD Name for IDC with VBIOS         */
  214.  
  215. /*----------------------------*/
  216. /*         VLPTINIT.C         */
  217. /*----------------------------*/
  218. BOOL EXPENTRY VDDInit(PSZ);
  219. SBOOL VDDENTRY VLPTPDDProc(ULONG,F16PVOID,F16PVOID);
  220.  
  221. /*----------------------------*/
  222. /*         VLPTUSER.C         */
  223. /*----------------------------*/
  224. BOOL HOOKENTRY VLPTCreate(HVDM);
  225. BOOL HOOKENTRY VLPTTerminate(HVDM);
  226. BOOL HOOKENTRY VLPTPDBChange(HVDM,VLPTPDB);
  227. BOOL HOOKENTRY VLPTPDBDestroy(HVDM,VLPTPDB);
  228. ULONG EXPENTRY VLPTSetSpoolClose(ULONG, HVDM, ULONG, PSZ);
  229. VOID HOOKENTRY VLPTEventContext(PVOID, PCRF);
  230.  
  231. /*----------------------------*/
  232. /*         VLPTIN.C           */
  233. /*----------------------------*/
  234. BYTE HOOKENTRY VLPT1DaIn(ULONG, PCRF);
  235. BYTE HOOKENTRY VLPT2DaIn(ULONG, PCRF);
  236. BYTE HOOKENTRY VLPT3DaIn(ULONG, PCRF);
  237. BYTE HOOKENTRY VLPT1StIn(ULONG, PCRF);
  238. BYTE HOOKENTRY VLPT2StIn(ULONG, PCRF);
  239. BYTE HOOKENTRY VLPT3StIn(ULONG, PCRF);
  240. BYTE HOOKENTRY VLPT1CoIn(ULONG, PCRF);
  241. BYTE HOOKENTRY VLPT2CoIn(ULONG, PCRF);
  242. BYTE HOOKENTRY VLPT3CoIn(ULONG, PCRF);
  243. BYTE HOOKENTRY VLPTResIn(ULONG, PCRF);
  244.  
  245. /*----------------------------*/
  246. /*         VLPTOUT.C          */
  247. /*----------------------------*/
  248. VOID HOOKENTRY VLPT1DaOut(BYTE, ULONG, PCRF);
  249. VOID HOOKENTRY VLPT2DaOut(BYTE, ULONG, PCRF);
  250. VOID HOOKENTRY VLPT3DaOut(BYTE, ULONG, PCRF);
  251. VOID HOOKENTRY VLPT1StOut(BYTE, ULONG, PCRF);
  252. VOID HOOKENTRY VLPT2StOut(BYTE, ULONG, PCRF);
  253. VOID HOOKENTRY VLPT3StOut(BYTE, ULONG, PCRF);
  254. VOID HOOKENTRY VLPT1CoOut(BYTE, ULONG, PCRF);
  255. VOID HOOKENTRY VLPT2CoOut(BYTE, ULONG, PCRF);
  256. VOID HOOKENTRY VLPT3CoOut(BYTE, ULONG, PCRF);
  257. VOID HOOKENTRY VLPTResOut(BYTE, ULONG, PCRF);
  258.  
  259. /*----------------------------*/
  260. /*         VLPTI17.C          */
  261. /*----------------------------*/
  262. BOOL HOOKENTRY VLPTInt17(PCRF);
  263. VOID PRIVENTRY VLPTI17Print(PVLPTINST,PCRF);
  264. VOID PRIVENTRY VLPTI17Init(PVLPTINST);
  265. BYTE PRIVENTRY fixup_status(BYTE);
  266. UINT PRIVENTRY chk_offset(UINT);
  267.  
  268. /*----------------------------*/
  269. /*         VLPTI05.C          */
  270. /*----------------------------*/
  271. BOOL HOOKENTRY VLPTInt05(PCRF);
  272. VOID HOOKENTRY VLPTIRet5(PVOID,PCRF);
  273.  
  274. /*----------------------------*/
  275. /*         VLPTDO.C           */
  276. /*----------------------------*/
  277. VOID PRIVENTRY doCheck(PVLPTINST);
  278. VOID PRIVENTRY doOpenSpool(PVLPTINST);
  279. VOID PRIVENTRY doWrite(PVLPTINST);
  280. VOID PRIVENTRY doFlush(PVLPTINST);
  281. VOID PRIVENTRY doCloseSpool(PVLPTINST);
  282. BOOL PRIVENTRY doOpenDirect(PVLPTINST);
  283. VOID PRIVENTRY doCloseDirect(PVLPTINST);
  284. BOOL PRIVENTRY get_direct_access(PVLPTINST);
  285.  
  286. /*----------------------------*/
  287. /*         VLPTLO.C           */
  288. /*----------------------------*/
  289. UINT PRIVENTRY dopopup(PVLPTINST,struct error_table_record *,UINT);
  290. VOID PRIVENTRY reseterrors(PVLPTINST,UINT);
  291. VOID PRIVENTRY seterrors(PVLPTINST,UINT);
  292. UINT PRIVENTRY proc_error(PVLPTINST,struct error_table_record *,UINT);
  293.