Browse Source

+ Added demo for drivers and FunctionKeyName function

michael 24 năm trước cách đây
mục cha
commit
db1b530e29
5 tập tin đã thay đổi với 156 bổ sung3 xóa
  1. 8 3
      docs/kbdex/Makefile
  2. 3 0
      docs/kbdex/README
  3. 23 0
      docs/kbdex/ex8.pp
  4. 24 0
      docs/kbdex/ex9.pp
  5. 98 0
      docs/kbdex/logkeys.pp

+ 8 - 3
docs/kbdex/Makefile

@@ -32,8 +32,7 @@ endif
 
 .PHONY: all tex clean
 
-OBJECTS=ex1 ex2 ex3 ex4 ex5 ex6 ex7
-# ex8 ex9 \
+OBJECTS=ex1 ex2 ex3 ex4 ex5 ex6 ex7 ex8 ex9
 #        ex10 ex11 ex12 ex13  ex14 ex15 ex16 ex17 ex18
 
 TEXOBJECTS=$(addsuffix .tex, $(OBJECTS))
@@ -46,10 +45,16 @@ onetex : tex
 	$(MAKETEX) $(TEXOBJECTS)
 
 clean : 
-	rm -f *.o *.s $(OBJECTS) $(TEXOBJECTS)
+	rm -f *.o *.s $(OBJECTS) $(TEXOBJECTS) logkeys.ppu logkeys.o
+	rm -f keyboard.log
  
 $(OBJECTS): %: %.pp
 	$(PP) $(PPOPTS) $*
 
 $(TEXOBJECTS): %.tex: %.pp head.tex foot.tex
 	$(PP2TEX) $*
+
+ex9: ex9.pp logkeys.ppu
+
+logkeys.ppu: logkeys.pp
+	$(PP) $(PPOPTS) logkeys.pp

+ 3 - 0
docs/kbdex/README

@@ -7,3 +7,6 @@ ex4.pp contains an example of the PollKeyEvent function.
 ex5.pp contains an example of the PutKeyEvent function.
 ex6.pp contains an example of the PollShiftStateEvent function.
 ex7.pp contains an example of the IsFunctionKey function.
+ex8.pp contains an example of the FunctionKeyName function.
+logkeys.pp contains an example of a custom keyboard driver.
+ex9.pp contains a demonstration program for the logkeys unit.

+ 23 - 0
docs/kbdex/ex8.pp

@@ -0,0 +1,23 @@
+Program Example8;
+
+{ Program to demonstrate the FunctionKeyName function. }
+
+Uses keyboard;
+
+Var
+  K : TkeyEvent;
+
+begin
+  InitKeyboard;
+  Writeln('Press function keys, press "q" to end.');
+  Repeat
+    K:=GetKeyEvent;
+    K:=TranslateKeyEvent(K);
+    If IsFunctionKey(k) then
+      begin
+      Write('Got function key : ');
+      Writeln(FunctionKeyName(TkeyRecord(K).KeyCode));
+      end;
+  Until (GetKeyEventChar(K)='q');
+  DoneKeyboard;
+end.

+ 24 - 0
docs/kbdex/ex9.pp

@@ -0,0 +1,24 @@
+program example9;
+
+{ This program demonstrates the logkeys unit }
+
+uses keyboard,logkeys;
+
+Var
+  K : TKeyEvent;
+
+begin
+  InitKeyBoard;
+  Writeln('Press keys, press "q" to end, "s" toggles logging.');
+  Repeat
+    K:=GetKeyEvent;
+    K:=TranslateKeyEvent(K);
+    Writeln('Got key : ',KeyEventToString(K));
+    if GetKeyEventChar(K)='s' then
+      if IsKeyLogging then
+        StopKeyLogging
+      else
+        StartKeyLogging;  
+  Until (GetKeyEventChar(K)='q');
+  DoneKeyBoard;
+end.

+ 98 - 0
docs/kbdex/logkeys.pp

@@ -0,0 +1,98 @@
+unit logkeys;
+
+interface
+
+Procedure StartKeyLogging;
+Procedure StopKeyLogging;
+Function  IsKeyLogging : Boolean;
+Procedure  SetKeyLogFileName(FileName : String);
+
+
+implementation
+
+uses sysutils,keyboard;
+
+var
+  NewKeyBoardDriver,
+  OldKeyBoardDriver : TKeyboardDriver;
+  Active,Logging : Boolean;
+  LogFileName : String;
+  KeyLog : Text;
+
+Function TimeStamp : String;
+
+begin
+  TimeStamp:=FormatDateTime('hh:nn:ss',Time());
+end;
+  
+Procedure StartKeyLogging;
+
+begin
+  Logging:=True;
+  Writeln(KeyLog,'Start logging keystrokes at: ',TimeStamp);
+end;
+
+Procedure StopKeyLogging;
+
+begin
+  Writeln(KeyLog,'Stop logging keystrokes at: ',TimeStamp);
+  Logging:=False;
+end;
+
+Function IsKeyLogging : Boolean;
+
+begin
+  IsKeyLogging:=Logging;
+end;
+
+Function LogGetKeyEvent : TKeyEvent;
+
+Var
+  K : TKeyEvent;
+
+begin
+  K:=OldkeyboardDriver.GetKeyEvent();
+  If Logging then
+    begin
+    Write(KeyLog,TimeStamp);
+    Writeln(KeyLog,': Key event: ',KeyEventToString(TranslateKeyEvent(K)));
+    end;
+  LogGetKeyEvent:=K;  
+end;
+
+Procedure LogInitKeyBoard;
+
+begin
+  OldKeyBoardDriver.InitDriver();
+  Assign(KeyLog,logFileName);
+  Rewrite(KeyLog);
+  Active:=True;
+  StartKeyLogging;
+end;
+
+Procedure LogDoneKeyBoard;
+
+begin
+  StopKeyLogging;
+  Close(KeyLog);
+  Active:=False;
+  OldKeyBoardDriver.DoneDriver();
+end;
+
+Procedure SetKeyLogFileName(FileName : String);
+
+begin
+  If Not Active then
+    LogFileName:=FileName;
+end;
+
+Initialization
+  GetKeyBoardDriver(OldKeyBoardDriver);
+  NewKeyBoardDriver:=OldKeyBoardDriver;
+  NewKeyBoardDriver.GetKeyEvent:=@LogGetKeyEvent;
+  NewKeyBoardDriver.InitDriver:=@LogInitKeyboard;
+  NewKeyBoardDriver.DoneDriver:=@LogDoneKeyboard;
+  LogFileName:='keyboard.log';
+  Logging:=False;
+  SetKeyboardDriver(NewKeyBoardDriver);
+end.