mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-11 09:18:10 +02:00
65 lines
1.2 KiB
ObjectPascal
65 lines
1.2 KiB
ObjectPascal
program mkkeytab;
|
|
|
|
{
|
|
This program takes the keyboard scan code definitions, (the const section
|
|
of the rtl/unix/keyboard.pp file) and outputs a
|
|
latex table. The final output is done with some reformatting with the
|
|
following sed commands:
|
|
|
|
mkkeytab | sed 's/[aA]lt/ALT-/g' | sed 's/[Ss]hift/SHIFT-/g' | sed 's/[Cc]trl/CTRL-/g' > keys.tex
|
|
|
|
}
|
|
|
|
uses sysutils,classes;
|
|
|
|
Function ScanLine (S: String) : String;
|
|
|
|
Var
|
|
I : Integer;
|
|
KN,KC : String;
|
|
|
|
begin
|
|
I:=Pos('=',S);
|
|
Result:='';
|
|
If I<>0 then
|
|
begin
|
|
KN:=Trim(Copy(S,1,I-1));
|
|
Delete(KN,1,2);
|
|
Delete(S,1,I);
|
|
I:=Pos(';',S);
|
|
If I<>0 then
|
|
begin
|
|
KC:=Trim(Copy(S,1,I-1));
|
|
Delete(KC,1,1);
|
|
Result:= KC+' & '+KN;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
Var
|
|
F : text;
|
|
List : TstringList;
|
|
I,RowCount : Integer;
|
|
S: String;
|
|
|
|
begin
|
|
List:=TstringList.Create;
|
|
Assign(f,'keys.txt');
|
|
Reset(f);
|
|
While not eof(f) do
|
|
begin
|
|
Readln (f,s);
|
|
S:=ScanLine(s);
|
|
If S<>'' then
|
|
List.Add(S);
|
|
end;
|
|
RowCount:=List.Count div 3;
|
|
if (List.Count mod 3)<>0 then
|
|
begin
|
|
Inc(RowCount);
|
|
List.Add('');
|
|
List.Add('');
|
|
end;
|
|
For I:=0 to rowcount-1 do
|
|
Writeln(Format('%-20s & %-20s & %-20s \\',[List[i],List[I+RowCount],List[I+2*RowCount]]));
|
|
end. |