aboutsummaryrefslogtreecommitdiffstats
path: root/Game/Code/lib/zlportio
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Game/Code/lib/zlportio/Example/README.TXT27
-rw-r--r--Game/Code/lib/zlportio/Example/install.txt6
-rw-r--r--Game/Code/lib/zlportio/Example/mainform.dfmbin2935 -> 0 bytes
-rw-r--r--Game/Code/lib/zlportio/Example/mainform.pas205
-rw-r--r--Game/Code/lib/zlportio/Example/portio.dof85
-rw-r--r--Game/Code/lib/zlportio/Example/portio.dpr14
-rw-r--r--Game/Code/lib/zlportio/Example/portio.resbin876 -> 0 bytes
-rw-r--r--Game/Code/lib/zlportio/Example/zlportio.sysbin3664 -> 0 bytes
-rw-r--r--Game/Code/lib/zlportio/README.TXT27
-rw-r--r--Game/Code/lib/zlportio/Sys/zlportio.sysbin4016 -> 0 bytes
-rw-r--r--Game/Code/lib/zlportio/ddkint.pas253
-rw-r--r--Game/Code/lib/zlportio/install.txt8
-rw-r--r--Game/Code/lib/zlportio/zlportio.pas285
13 files changed, 0 insertions, 910 deletions
diff --git a/Game/Code/lib/zlportio/Example/README.TXT b/Game/Code/lib/zlportio/Example/README.TXT
deleted file mode 100644
index f8eb7241..00000000
--- a/Game/Code/lib/zlportio/Example/README.TXT
+++ /dev/null
@@ -1,27 +0,0 @@
-
-PortIO example
-Copyright (C) 2001 Zloba Alexander
-http://www.specosoft.com
-Description
------------
- This example show how tow to get direct access port input and output under
- all versions of Microsoft Windows using ZlPortio library,
-
-Terms of Use
-------------
-
-This software is provided "as is", without any guarantee made
-as to its suitability or fitness for any particular use. It may
-contain bugs, so use of this tool is at your own risk. We take
-no responsilbity for any damage that may unintentionally be caused
-through its use.
-
-Reporting Problems
-------------------
-
-If you encounter problems, please visit http://www.specosoft.com
-and download the latest version to see if the issue has been resolved.
-If not, please send a bug report to:
-
- zal@specosoft.com
-
diff --git a/Game/Code/lib/zlportio/Example/install.txt b/Game/Code/lib/zlportio/Example/install.txt
deleted file mode 100644
index fed162bf..00000000
--- a/Game/Code/lib/zlportio/Example/install.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-
-Installation:
-
-Copy files: zlportio.pas, ddkint.pas to your project directory
-or common unit directory.
-
diff --git a/Game/Code/lib/zlportio/Example/mainform.dfm b/Game/Code/lib/zlportio/Example/mainform.dfm
deleted file mode 100644
index 42608286..00000000
--- a/Game/Code/lib/zlportio/Example/mainform.dfm
+++ /dev/null
Binary files differ
diff --git a/Game/Code/lib/zlportio/Example/mainform.pas b/Game/Code/lib/zlportio/Example/mainform.pas
deleted file mode 100644
index 2b26228e..00000000
--- a/Game/Code/lib/zlportio/Example/mainform.pas
+++ /dev/null
@@ -1,205 +0,0 @@
-{$A-,H+}
-unit mainform;
-
-interface
-
-uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls,zlportio, ComCtrls, shellapi,rdtsc;
-
-type
- TMain = class(TForm)
- lb1: TLabel;
- ePort: TEdit;
- lb2: TLabel;
- eData: TEdit;
- eRData: TEdit;
- btnExit: TButton;
- lb3: TLabel;
- coDataType: TComboBox;
- Lb4: TLabel;
- gb1: TGroupBox;
- sbBar: TStatusBar;
- lb5: TLabel;
- btnWrite: TButton;
- btnRead: TButton;
- cbDirect: TCheckBox;
- llbWWW: TLabel;
- procedure btnExitClick(Sender: TObject);
- procedure ePortKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure ePortKeyPress(Sender: TObject; var Key: Char);
- procedure FormCreate(Sender: TObject);
- procedure coDataTypeChange(Sender: TObject);
- procedure ePortKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure btnWriteClick(Sender: TObject);
- procedure eDataKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure btnReadClick(Sender: TObject);
- procedure cbDirectClick(Sender: TObject);
- procedure llbWWWClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- procedure setrdata(const Data:dword);
- function str2int(const value:string;const HEX:boolean):integer;
- end;
-
-var
- Main: TMain;
-implementation
-
-{$R *.DFM}
-{$R-}
-
-function TMain.str2int(const value:string;const HEX:boolean):integer;
-begin
- if HEX then
- result := strtoint('$' + value)
- else
- result := strtoint(value);
-end;
-
-
-procedure TMain.btnExitClick(Sender: TObject);
-begin
- close;
-end;
-
-procedure TMain.ePortKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
-begin
-try
- Case key of
- 38: begin
- key := 0;
- end;
- 40: begin
- key := 0;
- end
- end;
-except
-end;
-end;
-
-procedure TMain.ePortKeyPress(Sender: TObject; var Key: Char);
-begin
- // filter on hex
- if pos(key,#13#8'0123456789abcdefABCDEF')=0 then
- key := #0;
-end;
-
-procedure TMain.FormCreate(Sender: TObject);
-begin
- coDataType.itemindex :=0;
- coDataType.Tag := 2;
- if ZLIOStarted then
- sbBar.SimpleText := 'Driver successfully started !'
- else
- sbBar.SimpleText := 'Couldnt start driver. Something wrong !';
-end;
-
-procedure TMain.coDataTypeChange(Sender: TObject);
-var s:string;
-begin
- coDataType.Tag := 2 shl (coDataType.itemindex);
- erdata.MaxLength := coDataType.Tag;
- edata.MaxLength := coDataType.Tag;
- s := edata.Text;
- delete(s,1,length(s)-coDataType.Tag);
- edata.text := s;
-end;
-
-procedure TMain.ePortKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
-var Port,data:dword;
-begin
-try
- try
- Port := str2int(ePort.Text,true);
- except
- Port := 0;
- end;
- Case key of
- 13: begin
- zlioportwrite(port,coDataType.itemindex,str2int(eData.Text, true));
- end;
- 38: begin
- inc(Port);
- ePort.Text := inttohex(Port,3);
- key := 0;
- end;
- 40: begin
- if port > 0 then
- dec(Port);
- ePort.Text := inttohex(Port,3);
- key := 0;
- end
- end;
- setthreadpriority(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL);
- data := zlioportread(Port,coDataType.itemindex);
- setrdata(data);
-except
-end;
-
-end;
-
-procedure TMain.setrdata(const Data:dword);
-begin
- erData.Text := inttohex(Data,coDataType.Tag);
-end;
-
-procedure TMain.btnWriteClick(Sender: TObject);
-var i:word;
-begin
- i := 13;
- ePortKeyDown( self,i,[])
-end;
-
-
-
-procedure TMain.eDataKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
-var data:dword;
-begin
- try
- Data := str2int(eData.Text,true);
- except Data := 0; end;
- Case key of
- 13: begin
- ePortKeyDown( self,key,[])
- end;
- 38: begin
- inc(Data);
- eData.Text := inttohex(Data,coDataType.Tag);
- key := 0;
- end;
- 40: begin
- dec(Data);
- eData.Text := inttohex(Data,coDataType.Tag);
- key := 0;
- end
- end;
-
-end;
-
-procedure TMain.btnReadClick(Sender: TObject);
-var k:word;
-begin
- k := 0;
- ePortKeyDown(self, k,[]);
-end;
-
-procedure TMain.cbDirectClick(Sender: TObject);
-begin
-zliosetiopm(cbDirect.Checked);
-end;
-
-procedure TMain.llbWWWClick(Sender: TObject);
-begin
- shellexecute( 0,'open','http://www.specosoft.com/update/portio_15.htm',nil,nil,SW_SHOW);
-end;
-
-end.
diff --git a/Game/Code/lib/zlportio/Example/portio.dof b/Game/Code/lib/zlportio/Example/portio.dof
deleted file mode 100644
index 3f5c0f5c..00000000
--- a/Game/Code/lib/zlportio/Example/portio.dof
+++ /dev/null
@@ -1,85 +0,0 @@
-[Compiler]
-A=0
-B=0
-C=0
-D=1
-E=0
-F=0
-G=1
-H=1
-I=0
-J=1
-K=0
-L=1
-M=0
-N=1
-O=1
-P=1
-Q=0
-R=0
-S=0
-T=0
-U=0
-V=1
-W=0
-X=1
-Y=2
-Z=1
-ShowHints=1
-ShowWarnings=1
-UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-[Linker]
-MapFile=0
-OutputObjs=9
-ConsoleApp=1
-DebugInfo=0
-RemoteSymbols=0
-MinStackSize=16384
-MaxStackSize=1048576
-ImageBase=4194304
-ExeDescription=
-[Directories]
-OutputDir=
-UnitOutputDir=
-PackageDLLOutputDir=
-PackageDCPOutputDir=
-SearchPath=
-Packages=Vcl50;Vclx50;VclSmp50;dclocx50;Vcldb50;dclaxserver50;zal
-Conditionals=
-DebugSourceDirs=
-UsePackages=0
-[Parameters]
-RunParams=
-HostApplication=
-[Language]
-ActiveLang=
-ProjectLang=$00000419
-RootDir=
-[Version Info]
-IncludeVerInfo=0
-AutoIncBuild=0
-MajorVer=1
-MinorVer=0
-Release=0
-Build=0
-Debug=0
-PreRelease=0
-Special=0
-Private=0
-DLL=0
-Locale=1049
-CodePage=1251
-[Version Info Keys]
-CompanyName=
-FileDescription=
-FileVersion=1.0.0.0
-InternalName=
-LegalCopyright=
-LegalTrademarks=
-OriginalFilename=
-ProductName=
-ProductVersion=1.0.0.0
-Comments=
-[HistoryLists\hlUnitAliases]
-Count=1
-Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
diff --git a/Game/Code/lib/zlportio/Example/portio.dpr b/Game/Code/lib/zlportio/Example/portio.dpr
deleted file mode 100644
index 42fcc9e9..00000000
--- a/Game/Code/lib/zlportio/Example/portio.dpr
+++ /dev/null
@@ -1,14 +0,0 @@
-{$A-,H+}
-program portio;
-
-uses
- Forms,
- mainform in 'mainform.pas' {Main};
-
-{$R *.RES}
-
-begin
- Application.Initialize;
- Application.CreateForm(TMain, Main);
- Application.Run;
-end.
diff --git a/Game/Code/lib/zlportio/Example/portio.res b/Game/Code/lib/zlportio/Example/portio.res
deleted file mode 100644
index 08ba56e9..00000000
--- a/Game/Code/lib/zlportio/Example/portio.res
+++ /dev/null
Binary files differ
diff --git a/Game/Code/lib/zlportio/Example/zlportio.sys b/Game/Code/lib/zlportio/Example/zlportio.sys
deleted file mode 100644
index 19e42319..00000000
--- a/Game/Code/lib/zlportio/Example/zlportio.sys
+++ /dev/null
Binary files differ
diff --git a/Game/Code/lib/zlportio/README.TXT b/Game/Code/lib/zlportio/README.TXT
deleted file mode 100644
index 3bce114e..00000000
--- a/Game/Code/lib/zlportio/README.TXT
+++ /dev/null
@@ -1,27 +0,0 @@
-
-ZLPortIO
-Copyright (C) 2001 Zloba Alexander
-http://www.specosoft.com
-Description
------------
- This unit allow your application direct access port input and output under
- all versions of Microsoft Windows,
-
-Terms of Use
-------------
-
-This software is provided "as is", without any guarantee made
-as to its suitability or fitness for any particular use. It may
-contain bugs, so use of this tool is at your own risk. We take
-no responsilbity for any damage that may unintentionally be caused
-through its use.
-
-Reporting Problems
-------------------
-
-If you encounter problems, please visit http://www.specosoft.com
-and download the latest version to see if the issue has been resolved.
-If not, please send a bug report to:
-
- zal@specosoft.com
-
diff --git a/Game/Code/lib/zlportio/Sys/zlportio.sys b/Game/Code/lib/zlportio/Sys/zlportio.sys
deleted file mode 100644
index a897a020..00000000
--- a/Game/Code/lib/zlportio/Sys/zlportio.sys
+++ /dev/null
Binary files differ
diff --git a/Game/Code/lib/zlportio/ddkint.pas b/Game/Code/lib/zlportio/ddkint.pas
deleted file mode 100644
index 65b208d9..00000000
--- a/Game/Code/lib/zlportio/ddkint.pas
+++ /dev/null
@@ -1,253 +0,0 @@
-{ -----------------------------------------------------------------------------}
-{ Copyright 2000-2001, Zloba Alexander. All Rights Reserved. }
-{ This unit can be freely used and distributed in commercial and private }
-{ environments, provided this notice is not modified in any way. }
-{ -----------------------------------------------------------------------------}
-{ Feel free to contact me if you have any questions, comments or suggestions at}
-{ zal@specosoft.com (Zloba Alexander) }
-{ You can always find the latest version of this unit at: }
-{ http://www.specosoft.com }
-
-{ -----------------------------------------------------------------------------}
-{ Date last modified: 08/10/2001 }
-{ -----------------------------------------------------------------------------}
-{ Description: }
-{ This unit include service function to work with NT drivers and some }
-{ constant from ntddk.h }
-{------------------------------------------------------------------------------}
-{ Revision History: }
-{ 1.00: + First public release }
-{ 1.10: + added compiler directives for correct compilation }
-{ 1.20: + optimized code }
-{ 1.30: + added constant for compatibility with delphi 3.0 }
-{------------------------------------------------------------------------------}
-
-{$A-,H-}
-unit ddkint;
-
-interface
-uses
- windows,
- winsvc;
-
-function CTL_CODE(const DeviceType,Func,Method,Access:Cardinal):cardinal;
-
-const
- FILE_DEVICE_BEEP = $00000001;
- FILE_DEVICE_CD_ROM = $00000002;
- FILE_DEVICE_CD_ROM_FILE_SYSTEM = $00000003;
- FILE_DEVICE_CONTROLLER = $00000004;
- FILE_DEVICE_DATALINK = $00000005;
- FILE_DEVICE_DFS = $00000006;
- FILE_DEVICE_DISK = $00000007;
- FILE_DEVICE_DISK_FILE_SYSTEM = $00000008;
- FILE_DEVICE_FILE_SYSTEM = $00000009;
- FILE_DEVICE_INPORT_PORT = $0000000a;
- FILE_DEVICE_KEYBOARD = $0000000b;
- FILE_DEVICE_MAILSLOT = $0000000c;
- FILE_DEVICE_MIDI_IN = $0000000d;
- FILE_DEVICE_MIDI_OUT = $0000000e;
- FILE_DEVICE_MOUSE = $0000000f;
- FILE_DEVICE_MULTI_UNC_PROVIDER = $00000010;
- FILE_DEVICE_NAMED_PIPE = $00000011;
- FILE_DEVICE_NETWORK = $00000012;
- FILE_DEVICE_NETWORK_BROWSER = $00000013;
- FILE_DEVICE_NETWORK_FILE_SYSTEM= $00000014;
- FILE_DEVICE_NULL = $00000015;
- FILE_DEVICE_PARALLEL_PORT = $00000016;
- FILE_DEVICE_PHYSICAL_NETCARD = $00000017;
- FILE_DEVICE_PRINTER = $00000018;
- FILE_DEVICE_SCANNER = $00000019;
- FILE_DEVICE_SERIAL_MOUSE_PORT = $0000001a;
- FILE_DEVICE_SERIAL_PORT = $0000001b;
- FILE_DEVICE_SCREEN = $0000001c;
- FILE_DEVICE_SOUND = $0000001d;
- FILE_DEVICE_STREAMS = $0000001e;
- FILE_DEVICE_TAPE = $0000001f;
- FILE_DEVICE_TAPE_FILE_SYSTEM = $00000020;
- FILE_DEVICE_TRANSPORT = $00000021;
- FILE_DEVICE_UNKNOWN = $00000022;
- FILE_DEVICE_VIDEO = $00000023;
- FILE_DEVICE_VIRTUAL_DISK = $00000024;
- FILE_DEVICE_WAVE_IN = $00000025;
- FILE_DEVICE_WAVE_OUT = $00000026;
- FILE_DEVICE_8042_PORT = $00000027;
- FILE_DEVICE_NETWORK_REDIRECTOR = $00000028;
- FILE_DEVICE_BATTERY = $00000029;
- FILE_DEVICE_BUS_EXTENDER = $0000002a;
- FILE_DEVICE_MODEM = $0000002b;
- FILE_DEVICE_VDM = $0000002c;
- FILE_DEVICE_MASS_STORAGE = $0000002d;
- FILE_DEVICE_SMB = $0000002e;
- FILE_DEVICE_KS = $0000002f;
- FILE_DEVICE_CHANGER = $00000030;
- FILE_DEVICE_SMARTCARD = $00000031;
- FILE_DEVICE_ACPI = $00000032;
- FILE_DEVICE_DVD = $00000033;
- FILE_DEVICE_FULLSCREEN_VIDEO = $00000034;
- FILE_DEVICE_DFS_FILE_SYSTEM = $00000035;
- FILE_DEVICE_DFS_VOLUME = $00000036;
- FILE_DEVICE_SERENUM = $00000037;
- FILE_DEVICE_TERMSRV = $00000038;
- FILE_DEVICE_KSEC = $00000039;
-
- FILE_DEVICE_KRNLDRVR = $80ff;
-
- METHOD_BUFFERED = 0;
- METHOD_IN_DIRECT = 1;
- METHOD_OUT_DIRECT = 2;
- METHOD_NEITHER = 3;
-
- FILE_ANY_ACCESS = 0;
- FILE_SPECIAL_ACCESS = (FILE_ANY_ACCESS);
- FILE_READ_ACCESS = ( $0001 ); // file & pipe
- FILE_WRITE_ACCESS = ( $0002 ); // file & pipe
-
- {$IFDEF VER100 or VER110}
- // for compatibilty with delphi 3.0
-const
- SERVICE_KERNEL_DRIVER = $00000001;
- SERVICE_DEMAND_START = $00000003;
- SERVICE_ERROR_NORMAL = $00000001;
-
-{$ENDIF}
-
-function driverstart(const name:pchar):integer;
-function driverstop(const name:pchar):integer;
-
-// for this function must have Administrators or Power users rigths
-function driverinstall(const path,name:pchar):integer;
-function driverremove(const name:pchar):integer;
-
-
-// exlpanation function
-function messagestring(const error:integer):string;
-
-implementation
-
-function CTL_CODE(const DeviceType,Func,Method,Access:Cardinal):cardinal;
-begin
- Result := DeviceType shl 16 or Access shl 14 or Func shl 2 or Method;
-end;
-
-
-function driverinstall(const path,name:pchar):integer;
-var hService: SC_HANDLE;
- hSCMan : SC_HANDLE;
-begin
-
- Result := 0;
-
- hSCMan := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
- if hSCMan = 0 then begin
- result := getlasterror;
- exit;
- end;
-
- hService := CreateService(hSCMan, name,name,
- SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
- SERVICE_ERROR_NORMAL, path,
- nil, nil, nil, nil, nil);
-
- if (hService = 0) then begin
- result := getlasterror;
- CloseServiceHandle(hSCMan);
- exit;
- end
- else
- CloseServiceHandle(hService);
- CloseServiceHandle(hSCMan);
-end;
-
-function driverstart(const name:pchar):integer;
-var
- hService: SC_HANDLE;
- hSCMan : SC_HANDLE;
- args:pchar;
-begin
-
- hSCMan := OpenSCManager(nil, nil, SC_MANAGER_CONNECT);
- if hSCMan = 0 then begin
- result := getlasterror;
- exit;
- end;
-
- // get a handle to the service
- hService := OpenService(hSCMan, name, SERVICE_START);
- if hService <> 0 then Begin
- // start the driver
- args := nil;
- Result := 0;
- if integer(StartService(hService, 0, args ))=0 then
- result := getlasterror;
- CloseServiceHandle(hService);
- end
- else
- result := getlasterror;
- CloseServiceHandle(hSCMan);
-end;
-
-function driverstop(const name:pchar):integer;
-Var
- serviceStatus: TServiceStatus;
- hService: SC_HANDLE;
- hSCMan : SC_HANDLE;
-begin
-
- hSCMan := OpenSCManager(nil, nil, SC_MANAGER_CONNECT);
- if hSCMan = 0 then begin
- result := getlasterror;
- exit;
- end;
-
- // get a handle to the service
- hService := OpenService(hSCMan, Name, SERVICE_STOP);
- if hService <> 0 then Begin
- // start the driver
- Result := 0;
- if integer(ControlService(hService, SERVICE_CONTROL_STOP, serviceStatus))=0 then
- result := getlasterror;
- CloseServiceHandle(hService);
- end
- else
- result := getlasterror;
- CloseServiceHandle(hSCMan);
-end;
-
-function driverremove(const name:pchar):integer;
-Var
- hService: SC_HANDLE;
- hSCMan : SC_HANDLE;
-begin
-
- hSCMan := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
- if hSCMan = 0 then begin
- result := getlasterror;
- exit;
- end;
-
- // get a handle to the service
- hService := OpenService(hSCMan, Name, SERVICE_ALL_ACCESS);
- if hService <> 0 then Begin
- // remove driver description from the registry
- Result := 0;
- if integer(DeleteService(hService)) = 0 then
- result := getlasterror;
- CloseServiceHandle(hService);
- end
- else
- result := getlasterror;
- CloseServiceHandle(hSCMan);
-end;
-
-function messagestring(const error:integer):string;
-var p:pchar;
-begin
- GetMem(p, 200);
- FillChar(p^, 200, 0);
- formatmessage(FORMAT_MESSAGE_FROM_SYSTEM,nil,error,0,p,199,nil);
- Result := p;
- freemem(p,200);
-end;
-
-end.
diff --git a/Game/Code/lib/zlportio/install.txt b/Game/Code/lib/zlportio/install.txt
deleted file mode 100644
index 2c242ed1..00000000
--- a/Game/Code/lib/zlportio/install.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-
-Installation:
-
-Copy files: zlportio.pas, ddkint.pas to your project directory
-or common unit directory.
-
-Copy file zlportio.sys to your project directory.
-It should be in the one directory with you application.
diff --git a/Game/Code/lib/zlportio/zlportio.pas b/Game/Code/lib/zlportio/zlportio.pas
deleted file mode 100644
index 94cbfdd1..00000000
--- a/Game/Code/lib/zlportio/zlportio.pas
+++ /dev/null
@@ -1,285 +0,0 @@
-{ -----------------------------------------------------------------------------}
-{ Copyright 2000-2001, Zloba Alexander. All Rights Reserved. }
-{ This unit can be freely used and distributed in commercial and private }
-{ environments, provided this notice is not modified in any way. }
-{ -----------------------------------------------------------------------------}
-{ Feel free to contact me if you have any questions, comments or suggestions at}
-{ zal@specosoft.com (Zloba Alexander) }
-{ You can always find the latest version of this unit at: }
-{ http://www.specosoft.com }
-
-{ -----------------------------------------------------------------------------}
-{ Date last modified: 08/10/2001 }
-{ -----------------------------------------------------------------------------}
-{ ZLPortIO driver interface unit v1.20 }
-{ -----------------------------------------------------------------------------}
-{ Description: }
-{ This unit allow your application direct access port input and output under }
-{ all versions of Microsoft Windows® }
-{ Depends: }
-{ zlportio.sys ddkint.pas }
-{ You must distribute zlportio.sys with your application }
-{ Procedures and functions: }
-{ procedure zlioportread( const Port,DataType:dword ):dword; }
-{ procedure zlioportwrite( const Port,DataType,Data:dword ); }
-{ }
-{ function portreadb( const Port:dword ):byte; }
-{ function portreadw( const Port:dword ):word; }
-{ function portreadl( const Port:dword ):dword; }
-{ }
-{ procedure portwriteb( const Port:Dword;const Data:byte ); }
-{ procedure portwritew( const Port:dword;const Data:word ); }
-{ procedure portwritel( const Port,Data:dword ); }
-{ }
-{ Examples: }
-{ // get data bits from LPT port }
-{ databits := portreadb( $378 ) }
-{ // set data bits from LPT port }
-{ portwriteb( $378, databits ) }
-{ // The second parameter determine the databus length for operation }
-{ -----------------------------------------------------------------------------}
-{ Revision History: }
-{ 1.00: + First public release }
-{ 1.10: + Added new functions (portreadX,portwriteX) for convenience of usage }
-{ 1.20: + Added new function (zliosetiopm) for enabling direct access to ports}
-{ 1.30: + added compiler directives for correct compilation }
-{ 1.40: + added opportunity to run multiply instances client to driver }
-{ 1.50: - fixed bug with work under win98 }
-{------------------------------------------------------------------------------}
-
-{$A-,H-}
-unit zlportio;
-
-interface
-
-uses windows,
- sysutils,
- ddkint;
-
-Const
- ZLIO_BYTE = 0;
- ZLIO_WORD = 1;
- ZLIO_DWORD = 2;
-
-var
-
-// if TRUE then driver was started
-// in other case something wrong
-// We start driver in initialization section of unit.
-
- ZlIOStarted:boolean = false;
-
-// if TRUE then we can use asm IN,OUT under NT/2000
-// see zliosetiopm for more details
- ZlIODirect:boolean = false;
-
-// handle to opened driver
-
- HZLIO:THandle;
-
-
-function portreadb( const Port:dword ):byte;
-function portreadw( const Port:dword ):word;
-function portreadl( const Port:dword ):dword;
-
-procedure portwriteb( const Port:Dword;const Data:byte );
-procedure portwritew( const Port:dword;const Data:word );
-procedure portwritel( const Port,Data:dword );
-
-
-procedure zlioportwrite( const Port,DataType,Data:dword );
-function zlioportread( const Port,DataType:dword ):dword;
-
-// if you need the best perfomance for your IO operations
-// call zliosetiopm(TRUE). This allow your application
-// to use asm command IN,OUT directly in your code.
-
-procedure zliosetiopm( const Direct:boolean );
-
-// internal
-
-function zliostart:boolean;
-procedure zliostop;
-
-
-implementation
-
-const
- ZLIODriverName='zlportio';
-
-var
- IOCTL_ZLUNI_PORT_READ:cardinal;
- IOCTL_ZLUNI_PORT_WRITE:cardinal;
- IOCTL_ZLUNI_IOPM_ON:cardinal;
- IOCTL_ZLUNI_IOPM_OFF:cardinal;
-
-type
-TzlIOData = record
- Port,DataType,Data:dword;
-end;
-
-
-procedure zlioportwrite( const Port,DataType,Data:dword );
-var resdata:TZLIOData;
- cBR:cardinal;
-begin
- if (not ZLIODirect) then begin
- resdata.Port := Port;
- resdata.Data := Data;
- resdata.DataType := DataType;
- if ZLIOStarted then
- DeviceIoControl(HZLIO,IOCTL_ZLUNI_PORT_WRITE,@resdata,sizeof(resdata),nil,0,cBR,nil );
- end
- else begin
- Case DataType of
- ZLIO_BYTE : asm mov edx,Port;mov eax,data;out dx,al; end;
- ZLIO_WORD : asm mov edx,Port;mov eax,data;out dx,ax; end;
- ZLIO_DWORD: asm mov edx,Port;mov eax,data;out dx,eax; end;
- end;
- end;
-end;
-
-function zlioportread(const Port,DataType:dword):dword;
-var resdata:TZLIOData;
- cBR:cardinal;i:dword;
-begin
- if (not ZLIODirect) then begin
- resdata.Port := Port;
- resdata.DataType := DataType;
- if ZLIOStarted then
- DeviceIoControl(HZLIO,IOCTL_ZLUNI_PORT_READ,@resdata,sizeof(resdata),@i,sizeof(dword),cBR,nil );
- end
- else begin
- Case DataType of
- ZLIO_BYTE : asm mov edx,Port;xor eax,eax;in al,dx;mov i,eax; end;
- ZLIO_WORD : asm mov edx,Port;xor eax,eax;in ax,dx;mov i,eax; end;
- ZLIO_DWORD: asm mov edx,Port;xor eax,eax;in eax,dx;mov i,eax end;
- end;
- end;
- result := i;
-end;
-
-function portreadb( const Port:dword ):byte;
-begin
- Result := zlioportread(Port,ZLIO_BYTE);
-end;
-
-function portreadw( const Port:dword ):word;
-begin
- Result := zlioportread(Port,ZLIO_WORD);
-end;
-
-function portreadl( const Port:dword ):dword;
-begin
- Result := zlioportread(Port,ZLIO_DWORD);
-end;
-
-procedure portwriteb( const Port:Dword;const Data:byte );
-begin
- zlioportwrite(Port,ZLIO_BYTE,Data);
-end;
-
-procedure portwritew( const Port:dword;const Data:word );
-begin
- zlioportwrite(Port,ZLIO_WORD,Data);
-end;
-
-procedure portwritel( const Port,Data:dword );
-begin
- zlioportwrite(Port,ZLIO_DWORD,Data);
-end;
-
-procedure zliosetiopm( const Direct:boolean );
-var cBR:cardinal;
-begin
- if Win32Platform=VER_PLATFORM_WIN32_NT then
- if ZLIOStarted then begin
- if Direct then
- DeviceIoControl(HZLIO,IOCTL_ZLUNI_IOPM_ON,nil,0,nil,0,cBR,nil )
- else
- DeviceIoControl(HZLIO,IOCTL_ZLUNI_IOPM_OFF,nil,0,nil,0,cBR,nil );
- ZLIODirect := Direct;
- end
-end;
-
-
-
-
-function zliostart;
-var dir:shortstring;
-begin
- if Win32Platform<>VER_PLATFORM_WIN32_NT then begin
- result := true;
- exit;
- end;
-// Result := false;
- zliostop;
- dir := ExtractFileDir(ParamStr(0))+'\'+ZLIODriverName+'.sys'#0;
- driverinstall(pchar(@dir[1]),ZLIODriverName+#0);
- Result := driverstart(ZLIODriverName) = 0;
-end;
-
-procedure zliostop;
-begin
- if Win32Platform<>VER_PLATFORM_WIN32_NT then
- exit;
- driverstop(ZLIODriverName);
- driverremove(ZLIODriverName);
-end;
-
-function zlioopen( var Handle:thandle):boolean;
-var cERR:integer;
- s:string;
-begin
- if Win32Platform<>VER_PLATFORM_WIN32_NT then begin
- result := true;
- exit;
- end;
- Result := false;
- Handle := THandle(-1);
- Handle := createFile('\\.\ZLPORTIO',
- GENERIC_READ or GENERIC_WRITE,
- 0,
- nil,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- 0 );
- cERR := getlasterror;
- s := messagestring( cerr);
- if (cERR = ERROR_ALREADY_EXISTS)or(cERR = ERROR_SUCCESS) then Result := True;
-end;
-
-procedure zlioclose( const Handle:thandle);
-begin
- if (Win32Platform=VER_PLATFORM_WIN32_NT) then
- closehandle(Handle);
-end;
-
-
-initialization
-
-IOCTL_ZLUNI_PORT_READ := CTL_CODE(FILE_DEVICE_KRNLDRVR, 1, METHOD_BUFFERED, FILE_ANY_ACCESS);
-IOCTL_ZLUNI_PORT_WRITE := CTL_CODE(FILE_DEVICE_KRNLDRVR, 2, METHOD_BUFFERED, FILE_ANY_ACCESS);
-IOCTL_ZLUNI_IOPM_ON := CTL_CODE(FILE_DEVICE_KRNLDRVR, 3, METHOD_BUFFERED, FILE_ANY_ACCESS);
-IOCTL_ZLUNI_IOPM_OFF := CTL_CODE(FILE_DEVICE_KRNLDRVR, 4, METHOD_BUFFERED, FILE_ANY_ACCESS);
-
- if Win32Platform<>VER_PLATFORM_WIN32_NT then begin
- zliostarted := true;
- zliodirect := true;
- end
- else begin
- if not zlioopen(HZLIO) then begin
- if zliostart then
- ZLIOStarted := zlioopen(HZLIO) or (Win32Platform<>VER_PLATFORM_WIN32_NT);
- end
- else
- ZLIOStarted := true;
- end;
-finalization
-
-if ZLIOStarted then
- zliostop;
-
-
-
-end.