mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-04 18:50:37 +02:00
+ initial implementation
This commit is contained in:
parent
84ffe7a5c7
commit
ac4225a280
54
docs/kbdex/Makefile
Normal file
54
docs/kbdex/Makefile
Normal file
@ -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) $*
|
2
docs/kbdex/foot.tex
Normal file
2
docs/kbdex/foot.tex
Normal file
@ -0,0 +1,2 @@
|
||||
\end{verbatim}
|
||||
\end{FPCList}
|
3
docs/kbdex/head.tex
Normal file
3
docs/kbdex/head.tex
Normal file
@ -0,0 +1,3 @@
|
||||
\begin{FPCList}
|
||||
\item[Example]
|
||||
\begin{verbatim}
|
101
docs/kbdex/keybutil.pp
Normal file
101
docs/kbdex/keybutil.pp
Normal file
@ -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.
|
8
docs/kbdex/newex
Normal file
8
docs/kbdex/newex
Normal file
@ -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/ <template.pp >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}
|
8
docs/kbdex/template.pp
Normal file
8
docs/kbdex/template.pp
Normal file
@ -0,0 +1,8 @@
|
||||
Program Example;
|
||||
|
||||
{ Program to demonstrate the *** function. }
|
||||
|
||||
Uses keyboard;
|
||||
|
||||
begin
|
||||
end.
|
Loading…
Reference in New Issue
Block a user