From ac4225a28043985359bde67513be8e9d8db11cfe Mon Sep 17 00:00:00 2001 From: michael Date: Sun, 9 Sep 2001 15:22:04 +0000 Subject: [PATCH] + initial implementation --- docs/kbdex/Makefile | 54 ++++++++++++++++++++++ docs/kbdex/foot.tex | 2 + docs/kbdex/head.tex | 3 ++ docs/kbdex/keybutil.pp | 101 +++++++++++++++++++++++++++++++++++++++++ docs/kbdex/newex | 8 ++++ docs/kbdex/template.pp | 8 ++++ 6 files changed, 176 insertions(+) create mode 100644 docs/kbdex/Makefile create mode 100644 docs/kbdex/foot.tex create mode 100644 docs/kbdex/head.tex create mode 100644 docs/kbdex/keybutil.pp create mode 100644 docs/kbdex/newex create mode 100644 docs/kbdex/template.pp diff --git a/docs/kbdex/Makefile b/docs/kbdex/Makefile new file mode 100644 index 0000000000..6e89113b16 --- /dev/null +++ b/docs/kbdex/Makefile @@ -0,0 +1,54 @@ +####################################################################### +# +# Makefile to compile all examples and convert them to LaTeX +# +####################################################################### + +# Compiler +PP=ppc386 + +# Unit directory +# UNITDIR=/usr/lib/ppc/0.99.0/linuxunits + + +# Any options you wish to pass. +PPOPTS= + +# Script to convert the programs to LaTeX examples which can be included. +PP2TEX=../pp2tex + +# Script to collect all examples in 1 file. +MAKETEX=make1tex + +####################################################################### +# No need to edit after this line. +####################################################################### + +ifdef UNITDIR +PPOPTS:=$(PPOPTS) -Up$(UNITDIR); +endif + +.SUFFIXES: .pp .tex + +.PHONY: all tex clean + +OBJECTS=rttiobj trtti1 trtti2 trtti3 ex1 ex2 ex3 ex4 ex5 ex6 ex7 ex8 ex9 \ + ex10 ex11 ex12 ex13 ex14 ex15 ex16 ex17 ex18 + +TEXOBJECTS=$(addsuffix .tex, $(OBJECTS)) + +all : $(OBJECTS) + +tex : $(TEXOBJECTS) + +onetex : tex + $(MAKETEX) $(TEXOBJECTS) + +clean : + rm -f *.o *.s $(OBJECTS) $(TEXOBJECTS) rttiobj.ppu + +$(OBJECTS): %: %.pp + $(PP) $(PPOPTS) $* + +$(TEXOBJECTS): %.tex: %.pp head.tex foot.tex + $(PP2TEX) $* diff --git a/docs/kbdex/foot.tex b/docs/kbdex/foot.tex new file mode 100644 index 0000000000..4b6c233a40 --- /dev/null +++ b/docs/kbdex/foot.tex @@ -0,0 +1,2 @@ +\end{verbatim} +\end{FPCList} \ No newline at end of file diff --git a/docs/kbdex/head.tex b/docs/kbdex/head.tex new file mode 100644 index 0000000000..2699f37d16 --- /dev/null +++ b/docs/kbdex/head.tex @@ -0,0 +1,3 @@ +\begin{FPCList} +\item[Example] +\begin{verbatim} diff --git a/docs/kbdex/keybutil.pp b/docs/kbdex/keybutil.pp new file mode 100644 index 0000000000..3fa9cb9ea5 --- /dev/null +++ b/docs/kbdex/keybutil.pp @@ -0,0 +1,101 @@ +unit keybutil; + +Interface + +Uses keyboard; + +Type + TKeyRecord = packed record + KeyCode : Word; + ShiftState, Flags : Byte; + end; + +Const + // Only use these strings. Should be used to localize key names. + SShift : Array [1..3] of string = ('SHIFT','CTRL','ALT'); + SLeftRight : Array [1..2] of string = ('LEFT','RIGHT'); + SUnicodeChar : String = 'Unicode character '; + SScanCode : String = 'Key with scancode '; + SUnknownFunctionKey : String = 'Unknown function key : '; + SAnd : String = 'AND'; + SKeyPad : Array [0..($FF2F-kbdHome)] of string = + ('Home','Up','PgUp','Left', + 'Middle','Right','End','Down', + 'PgDn','Insert','Delete','', + '','','',''); + + +Implementation + +Procedure AddToString (Var S : String; Const A : String); + +begin + If Length(S)=0 then + S:=A + else + S:=S+' '+A; +end; + +Function IntToStr(Int : Longint) : String; + +begin + Str(Int,IntToStr); +end; + +Function ShiftStateString(KeyEvent : TKeyEvent; UseLeftRight : Boolean) : String; + +Var + S : Integer; + T : String; + +begin + S:=GetKeyEventShiftState(KeyEvent); + T:=''; + If (S and kbShift)<>0 then + begin + if UseLeftRight then + case (S and kbShift) of + kbShift : AddToString(T,SLeftRight[1]+' '+SAnd+' '+SLeftRight[2]); + kbLeftShift : AddToString(T,SLeftRight[1]); + kbRightShift : AddToString(T,SLeftRight[2]); + end; + AddToString(T,SShift[1]); + end; + If (S and kbCtrl)<>0 Then + AddToString(T,SShift[2]); + If (S and kbAlt)<>0 Then + AddToString(T,SShift[2]); + ShiftStateString:=T; +end; + +Function FunctionKeyName (KeyCode : Word) : String; + +begin + If ((KeyCode-KbdF1)<$1F) Then + FunctionKeyName:='F'+IntToStr((KeyCode-KbdF1+1)) + else + begin + If (KeyCode-kbdHome)<($2F-$1F) then + FunctionKeyName:=SKeyPad[(KeyCode-kbdHome)] + else + FunctionKeyName:=SUnknownFunctionKey + IntToStr(KeyCode); + end; +end; + +Function KeyEventToString(KeyEvent : TKeyEvent) : String; + +Var + T : String; + +begin + T:=ShiftStateString(KeyEvent,False); + Case GetKeyEventFlags(KeyEvent) of + kbASCII : AddToString(T,GetKeyEventChar(KeyEvent)); + kbUniCode : AddToString(T,SUniCodeChar+IntToStr(GetKeyEventUniCode(Keyevent))); + kbFnKey : AddToString(T,FunctionKeyName(GetKeyEventCode(KeyEvent))); + // Not good, we need a GetKeyEventScanCode function !! + kbPhys : AddToString(T,SScanCode+IntToStr(KeyEvent and $ffff)); + end; +end; + +end. diff --git a/docs/kbdex/newex b/docs/kbdex/newex new file mode 100644 index 0000000000..45f07f89e7 --- /dev/null +++ b/docs/kbdex/newex @@ -0,0 +1,8 @@ +#!/bin/sh +if [ -e ex${1}.pp ]; then + mv ex${1}.pp ex${1}.pp.orig +fi +sed -e s/Example/Example$1/ -e s/\\\*\\\*\\\*/$2/ ex${1}.pp +echo "ex${1}.pp contains an example of the $2 function." >>README +joe ex${1}.pp +ppc386 ex${1}.pp && ex${1} diff --git a/docs/kbdex/template.pp b/docs/kbdex/template.pp new file mode 100644 index 0000000000..3724b99961 --- /dev/null +++ b/docs/kbdex/template.pp @@ -0,0 +1,8 @@ +Program Example; + +{ Program to demonstrate the *** function. } + +Uses keyboard; + +begin +end.