{$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.