⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prnport.h

📁 WINDOWS 并口编程
💻 H
字号:
#ifndef _PRNPORT_H_VICTORCHEN_
#define _PRNPORT_H_VICTORCHEN_
/*-------------------------------------------------------------------------*\
|                         直接控制打印口(并行口)                            |
|                        Copyright (C) Victor Chen                          |
|                    Homepage: http://www.cppfans.com/                      |
\*-------------------------------------------------------------------------*/
#include <vcl.h>
//---------------------------------------------------------------------------
extern unsigned char  (*inportb)(unsigned short);
extern unsigned short (*inportw)(unsigned short);
extern unsigned long  (*inportd)(unsigned short);
extern void (*outportb)(unsigned short, unsigned char );
extern void (*outportw)(unsigned short, unsigned short);
extern void (*outportd)(unsigned short, unsigned long );
//---------------------------------------------------------------------------
class TWinIo
{
public:
  __property bool IsValid = { read = fGetValid };

  bool  (_stdcall *InitializeWinIo)();
  void  (_stdcall *ShutdownWinIo)();
  PBYTE (_stdcall *MapPhysToLin)(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
  bool  (_stdcall *UnmapPhysicalMemory)(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
  bool  (_stdcall *GetPhysLong)(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
  bool  (_stdcall *SetPhysLong)(PBYTE pbPhysAddr, DWORD dwPhysVal);
  bool  (_stdcall *GetPortVal)(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
  bool  (_stdcall *SetPortVal)(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
  bool  (_stdcall *InstallWinIoDriver)(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);
  bool  (_stdcall *RemoveWinIoDriver)();

  bool LoadWinIo(char *lpFileName);
  void FreeWinIo(void);

  TWinIo(char *lpFileName);
  ~TWinIo();
private:
  bool _bInitialized;
  HINSTANCE hWinIo;
  void InitPortFuncs(void);
  bool fGetValid(void) {return hWinIo!=NULL;}
};
//---------------------------------------------------------------------------
class TParallelPort
{
public:
  int printf(const char *format,...);
  int vprintf(const char* format, va_list paramList);
  void InitPrinter(int iInitDelay=200, int iInitWait=100);

  __property unsigned char  Data = { read=fGetData , write=fSetData };
  __property unsigned char  Flag = { read=fGetFlag , write=fSetFlag };
  __property unsigned char  Ctrl = { read=fGetCtrl , write=fSetCtrl };
  __property unsigned short Base = { read=_DataPort, write=fSetPort };

  enum TPrnError
   {
     peNoError    =  0,
     peNotOnLine  = -1,
     peOutOfPaper = -2,
     pePrinterErr = -3,
   };

  enum TPrnFlags  ///status
   {
     pfIdle    = 0x80, //F7 = ~BUSY
     pfAck     = 0x40, //F6 = ACK
     pfPE      = 0x20, //F5 = PE
     pfOnLine  = 0x10, //F4 = ONLINE
     pfNoError = 0x08, //F3 = ~ERROR
   };

  enum TPrnCtrls       // conctrol
   {
     pcinput  =0x20,  //c5  c5=0 for output,c=1 for input
     pcIRQE   = 0x10, //C4
     pcSelect = 0x08, //C3
     pcFInit  = 0x04, //C2 = ~INIT
     pcAutoFD = 0x02, //C1
     pcStore  = 0x01, //C0 = STORE
   };

  __property bool NoException = { read = _bNoException, write = _bNoException };
  __property bool __fastcall (__closure *OnMakeSure)(TPrnError ErrCode) = { read = _lpMakeSure, write = _lpMakeSure };

  int PrintString(char *lpLine);
  TParallelPort(unsigned short p=0x378);

private:
  inline unsigned char fGetData(void) { return inportb(_DataPort  ); }
  inline unsigned char fGetFlag(void) { return inportb(_StatusPort); }
  inline unsigned char fGetCtrl(void) { return inportb(_CtrlPort  ); }

  inline void fSetData(unsigned char d) { outportb(_DataPort  , d); }
  inline void fSetFlag(unsigned char d) { outportb(_StatusPort, d); }
  inline void fSetCtrl(unsigned char d) { outportb(_CtrlPort  , d); }

  void fSetPort(unsigned short p);
  unsigned short _DataPort, _StatusPort, _CtrlPort;

  bool _bNoException;
  bool _fMakeSure(TPrnError ErrCode);
  bool __fastcall (__closure *_lpMakeSure)(TPrnError ErrCode); //return retry;
};
//---------------------------------------------------------------------------
extern TWinIo WinIo;
extern TParallelPort ParallelPort;
//---------------------------------------------------------------------------
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -