* merged freebsd from fixes

This commit is contained in:
peter 2000-10-26 23:08:47 +00:00
parent b8a008b31c
commit a554625890
11 changed files with 1918 additions and 77 deletions

1275
api/freebsd/Makefile Normal file

File diff suppressed because it is too large Load Diff

44
api/freebsd/Makefile.fpc Normal file
View File

@ -0,0 +1,44 @@
#
# Makefile.fpc for Free Pascal API (used by Free Vision) for freebsd
#
[defaults]
defaulttarget=freebsd
[targets]
units=terminfo $(APIOBJECTS)
[install]
unitsubdir=api
packagename=api
[libs]
libname=libfpapi.so
libversion=1.0
[dirs]
fpcdir=../..
targetdir=.
sourcesdir=$(INC)
incdir=$(INC) $(UNIXINC)
unitdir=$(UNIXINC)
[presettings]
INC=../inc
UNIXINC=../unix
# Override defaults
override PASEXT=.pas
include $(INC)/Makefile.api
[rules]
video$(PPUEXT): $(INC)/video.pas $(UNIXINC)/video.inc
keyboard$(PPUEXT): $(INC)/keyboard.pas $(UNIXINC)/keyboard.inc
mouse$(PPUEXT): $(INC)/mouse.pas $(UNIXINC)/mouse.inc
filectrl$(PPUEXT): $(INC)/filectrl.pas $(UNIXINC)/filectrl.inc

View File

@ -116,6 +116,8 @@ export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION
##################################################################### #####################################################################
INC=../inc INC=../inc
UNIXINC=../unix
# Override defaults # Override defaults
override PASEXT=.pas override PASEXT=.pas
@ -192,7 +194,7 @@ endif
# Targets # Targets
override UNITOBJECTS+=terminfo $(APIOBJECTS) override UNITOBJECTS+=$(APIOBJECTS) terminfo
# Clean # Clean
@ -209,7 +211,8 @@ ZIPTARGET=install
# Directories # Directories
vpath %$(PASEXT) $(INC) vpath %$(PASEXT) $(INC)
override NEEDINCDIR=$(INC) override NEEDUNITDIR=$(UNIXINC)
override NEEDINCDIR=$(INC) $(UNIXINC)
ifndef TARGETDIR ifndef TARGETDIR
TARGETDIR=. TARGETDIR=.
endif endif
@ -1263,10 +1266,11 @@ endif
# Users rules # Users rules
##################################################################### #####################################################################
video$(PPUEXT): $(INC)/video.pas video.inc
keyboard$(PPUEXT): $(INC)/keyboard.pas keyboard.inc keyboard$(PPUEXT): $(INC)/keyboard.pas $(UNIXINC)/keyboard.inc
mouse$(PPUEXT): $(INC)/mouse.pas mouse.inc mouse$(PPUEXT): $(INC)/mouse.pas $(UNIXINC)/mouse.inc
filectrl$(PPUEXT): $(INC)/filectrl.pas filectrl.inc filectrl$(PPUEXT): $(INC)/filectrl.pas $(UNIXINC)/filectrl.inc
video$(PPUEXT): $(INC)/video.pas $(UNIXINC)/video.inc

View File

@ -6,7 +6,7 @@
defaulttarget=linux defaulttarget=linux
[targets] [targets]
units=terminfo $(APIOBJECTS) units= $(APIOBJECTS) terminfo
[install] [install]
unitsubdir=api unitsubdir=api
@ -20,22 +20,25 @@ libversion=1.0
fpcdir=../.. fpcdir=../..
targetdir=. targetdir=.
sourcesdir=$(INC) sourcesdir=$(INC)
incdir=$(INC) incdir=$(INC) $(UNIXINC)
unitdir=$(UNIXINC)
[presettings] [presettings]
INC=../inc INC=../inc
UNIXINC=../unix
# Override defaults # Override defaults
override PASEXT=.pas override PASEXT=.pas
include $(INC)/Makefile.api include $(INC)/Makefile.api
[rules] [rules]
video$(PPUEXT): $(INC)/video.pas video.inc
keyboard$(PPUEXT): $(INC)/keyboard.pas keyboard.inc keyboard$(PPUEXT): $(INC)/keyboard.pas $(UNIXINC)/keyboard.inc
mouse$(PPUEXT): $(INC)/mouse.pas mouse.inc mouse$(PPUEXT): $(INC)/mouse.pas $(UNIXINC)/mouse.inc
filectrl$(PPUEXT): $(INC)/filectrl.pas filectrl.inc filectrl$(PPUEXT): $(INC)/filectrl.pas $(UNIXINC)/filectrl.inc
video$(PPUEXT): $(INC)/video.pas $(UNIXINC)/video.inc

View File

@ -158,7 +158,25 @@ end;
{ {
$Log$ $Log$
Revision 1.2 2000-07-13 11:32:24 michael Revision 1.2 2000-10-26 23:08:48 peter
+ removed logs * merged freebsd from fixes
Revision 1.1.2.1 2000/10/25 12:23:20 marco
* Linux dir split up
Revision 1.1 2000/07/13 06:29:39 michael
+ Initial import
Revision 1.1 2000/01/06 01:20:31 peter
* moved out of packages/ back to topdir
Revision 1.1 1999/11/24 23:36:38 peter
* moved to packages dir
Revision 1.1 1998/12/04 12:48:30 peter
* moved some dirs
Revision 1.1 1998/10/26 11:31:47 peter
+ inital include files
} }

View File

@ -114,7 +114,13 @@ function Gpm_GetSnapshot(var Event: TGPMEvent): Longint; cdecl;external;
end. end.
{ {
$Log$ $Log$
Revision 1.1 2000-07-13 06:29:39 michael Revision 1.2 2000-10-26 23:08:48 peter
* merged freebsd from fixes
Revision 1.1.2.1 2000/10/25 12:23:20 marco
* Linux dir split up
Revision 1.1 2000/07/13 06:29:39 michael
+ Initial import + Initial import
Revision 1.1 2000/01/06 01:20:31 peter Revision 1.1 2000/01/06 01:20:31 peter

View File

@ -10,6 +10,10 @@ uses
var var
OldIO : TermIos; OldIO : TermIos;
{$ifdef logging}
f : text;
{$endif logging}
Procedure SetRawMode(b:boolean); Procedure SetRawMode(b:boolean);
Var Var
Tio : Termios; Tio : Termios;
@ -230,11 +234,40 @@ Begin
Keypressed := (KeySend<>KeyPut) or sysKeyPressed; Keypressed := (KeySend<>KeyPut) or sysKeyPressed;
End; End;
{$ifdef DEBUG}
Function RawReadKey:char;
Var
ch : char;
OldState,
State : longint;
is_delay : boolean;
fdsin : fdSet;
Begin
{Check Buffer first}
if KeySend<>KeyPut then
begin
RawReadKey:=PopKey;
exit;
end;
{Wait for Key}
if not sysKeyPressed then
begin
FD_Zero (fdsin);
FD_Set (StdInputHandle,fdsin);
Select (StdInputHandle+1,@fdsin,nil,nil,nil);
end;
RawReadKey:=ttyRecvChar;
end;
{$endif DEBUG}
Function ReadKey:char; Function ReadKey:char;
Var Var
ch : char; ch : char;
OldState, OldState,
State : longint; State : longint;
is_delay : boolean;
fdsin : fdSet; fdsin : fdSet;
Begin Begin
{Check Buffer first} {Check Buffer first}
@ -257,11 +290,20 @@ Begin
FD_Zero(fdsin); FD_Zero(fdsin);
fd_Set(StdInputHandle,fdsin); fd_Set(StdInputHandle,fdsin);
State:=1; State:=1;
{$ifdef logging}
write(f,'Esc');
{$endif logging}
if InCnt=0 then if InCnt=0 then
Select(StdInputHandle+1,@fdsin,nil,nil,10); Select(StdInputHandle+1,@fdsin,nil,nil,10);
while (State<>0) and (sysKeyPressed) do while (State<>0) and (sysKeyPressed) do
begin begin
ch:=ttyRecvChar; ch:=ttyRecvChar;
{$ifdef logging}
if ord(ch)>31 then
write(f,ch)
else
write(f,'#',ord(ch):2);
{$endif logging}
OldState:=State; OldState:=State;
State:=0; State:=0;
case OldState of case OldState of
@ -277,8 +319,8 @@ Begin
'O' : State:=6; 'O' : State:=6;
else else
begin begin
PushKey(ch);
PushKey(#27); PushKey(#27);
PushKey(ch);
end; end;
end; end;
end; end;
@ -294,15 +336,16 @@ Begin
'K' : PushExt(79); 'K' : PushExt(79);
'1' : State:=4; '1' : State:=4;
'2' : State:=5; '2' : State:=5;
'3' : PushExt(83); '3' : State:=12;{PushExt(83)}
'4' : PushExt(79); '4' : PushExt(79);
'5' : PushExt(73); '5' : PushExt(73);
'6' : PushExt(81); '6' : PushExt(81);
'?' : State:=7;
else else
begin begin
PushKey(ch);
PushKey('[');
PushKey(#27); PushKey(#27);
PushKey('[');
PushKey(ch);
end; end;
end; end;
if ch in ['3'..'6'] then if ch in ['3'..'6'] then
@ -315,30 +358,73 @@ Begin
'C' : PushExt(61); 'C' : PushExt(61);
'D' : PushExt(62); 'D' : PushExt(62);
'E' : PushExt(63); 'E' : PushExt(63);
else
begin
PushKey(#27);
PushKey('[');
PushKey('[');
PushKey(ch);
end; end;
end; end;
4 : begin end;
4 : begin {Esc[1}
case ch of case ch of
'~' : PushExt(71); '~' : PushExt(71);
'7' : PushExt(64); '7' : PushExt(64);
'8' : PushExt(65); '8' : PushExt(65);
'9' : PushExt(66); '9' : PushExt(66);
else
begin
PushKey(#27);
PushKey('[');
PushKey('1');
PushKey(ch);
end;
end; end;
if (Ch<>'~') then if (Ch<>'~') then
State:=255; State:=255;
end; end;
5 : begin 5 : begin {Esc[2}
case ch of case ch of
'~' : PushExt(82); '~' : PushExt(82);
'0' : pushExt(67); '0' : pushExt(67);
'1' : PushExt(68); '1' : PushExt(68);
'3' : PushExt(133); '3' : PushExt($85){F11, but ShiftF1 also !!};
'4' : PushExt(134); '4' : PushExt($86){F12, but Shift F2 also !!};
'5' : PushExt($56){ShiftF3};
'6' : PushExt($57){ShiftF4};
'8' : PushExt($58){ShiftF5};
'9' : PushExt($59){ShiftF6};
else
begin
PushKey(#27);
PushKey('[');
PushKey('2');
PushKey(ch);
end;
end; end;
if (Ch<>'~') then if (Ch<>'~') then
State:=255; State:=255;
end; end;
6 : begin {Esc0 Function keys in vt100 mode PM } 12 : begin {Esc[3}
case ch of
'~' : PushExt(83);
'1' : PushExt($5A){ShiftF7};
'2' : PushExt($5B){ShiftF8};
'3' : PushExt($5C){ShiftF9};
'4' : PushExt($5D){ShiftF10};
else
begin
PushKey(#27);
PushKey('[');
PushKey('3');
PushKey(ch);
end;
end;
if (Ch<>'~') then
State:=255;
end;
6 : begin {EscO Function keys in vt100 mode PM }
case ch of case ch of
'P' : {F1}PushExt(59); 'P' : {F1}PushExt(59);
'Q' : {F2}PushExt(60); 'Q' : {F2}PushExt(60);
@ -350,15 +436,135 @@ Begin
'l' : {F8}PushExt(66); 'l' : {F8}PushExt(66);
'w' : {F9}PushExt(67); 'w' : {F9}PushExt(67);
'x' : {F10}PushExt(68); 'x' : {F10}PushExt(68);
'D' : {keyLeft}PushExt($4B);
'C' : {keyRight}PushExt($4D);
'A' : {keyUp}PushExt($48);
'B' : {keyDown}PushExt($50);
else
begin
PushKey(#27);
PushKey('O');
PushKey(ch);
end; end;
end; end;
255 : ; end;
7 : begin {Esc[? keys in vt100 mode PM }
case ch of
'0' : State:=11;
'1' : State:=8;
'7' : State:=9;
else
begin
PushKey(#27);
PushKey('[');
PushKey('?');
PushKey(ch);
end;
end;
end;
8 : begin {Esc[?1 keys in vt100 mode PM }
case ch of
'l' : {local mode};
'h' : {transmit mode};
';' : { 'Esc[1;0c seems to be sent by M$ telnet app
for no hangup purposes }
state:=10;
else
begin
PushKey(#27);
PushKey('[');
PushKey('?');
PushKey('1');
PushKey(ch);
end;
end;
end;
9 : begin {Esc[?7 keys in vt100 mode PM }
case ch of
'l' : {exit_am_mode};
'h' : {enter_am_mode};
else
begin
PushKey(#27);
PushKey('[');
PushKey('?');
PushKey('7');
PushKey(ch);
end;
end;
end;
10 : begin {Esc[?1; keys in vt100 mode PM }
case ch of
'0' : state:=11;
else
begin
PushKey(#27);
PushKey('[');
PushKey('?');
PushKey('1');
PushKey(';');
PushKey(ch);
end;
end;
end;
11 : begin {Esc[?1;0 keys in vt100 mode PM }
case ch of
'c' : ;
else
begin
PushKey(#27);
PushKey('[');
PushKey('?');
PushKey('1');
PushKey(';');
PushKey('0');
PushKey(ch);
end;
end;
end;
255 : { just forget this trailing char };
end; end;
if (State<>0) and (InCnt=0) then if (State<>0) and (InCnt=0) then
Select(StdInputHandle+1,@fdsin,nil,nil,10); Select(StdInputHandle+1,@fdsin,nil,nil,10);
end; end;
if State=1 then if State=1 then
PushKey(ch); PushKey(ch);
if ch='$' then
begin { '$<XX>' means a delay of XX millisecs }
is_delay :=false;
Select(StdInputHandle+1,@fdsin,nil,nil,10);
if (sysKeyPressed) then
begin
ch:=ttyRecvChar;
is_delay:=(ch='<');
if not is_delay then
begin
PushKey('$');
PushKey(ch);
end
else
begin
{$ifdef logging}
write(f,'$<');
{$endif logging}
Select(StdInputHandle+1,@fdsin,nil,nil,10);
while (sysKeyPressed) and (ch<>'>') do
begin
{ Should we really repect this delay ?? }
ch:=ttyRecvChar;
{$ifdef logging}
write(f,ch);
{$endif logging}
Select(StdInputHandle+1,@fdsin,nil,nil,10);
end;
end;
end
else
PushKey('$');
end;
{$ifdef logging}
writeln(f);
{$endif logging}
end end
else else
Begin Begin
@ -378,6 +584,7 @@ var
begin begin
arg:=6; arg:=6;
shift:=0; shift:=0;
{$Ifndef BSD}
if IOCtl(StdInputHandle,TIOCLINUX,@arg) then if IOCtl(StdInputHandle,TIOCLINUX,@arg) then
begin begin
if (arg and (2 or 8))<>0 then if (arg and (2 or 8))<>0 then
@ -387,6 +594,7 @@ begin
if (arg and 1)<>0 then if (arg and 1)<>0 then
inc(shift,3); inc(shift,3);
end; end;
{$endif}
ShiftState:=shift; ShiftState:=shift;
end; end;
@ -397,6 +605,10 @@ procedure InitKeyboard;
begin begin
SetRawMode(true); SetRawMode(true);
patchkeyboard; patchkeyboard;
{$ifdef logging}
assign(f,'keyboard.log');
rewrite(f);
{$endif logging}
end; end;
@ -404,6 +616,9 @@ procedure DoneKeyboard;
begin begin
unpatchkeyboard; unpatchkeyboard;
SetRawMode(false); SetRawMode(false);
{$ifdef logging}
close(f);
{$endif logging}
end; end;
@ -588,13 +803,56 @@ end;
{ {
$Log$ $Log$
Revision 1.4 2000-10-15 09:18:22 peter Revision 1.2 2000-10-26 23:08:48 peter
* vt100 keys support merged * merged freebsd from fixes
Revision 1.3 2000/10/04 11:53:31 pierre Revision 1.1.2.1 2000/10/25 12:23:20 marco
Add TargetEntry and TargetExit (merged) * Linux dir split up
Revision 1.2 2000/07/13 11:32:25 michael Revision 1.1.2.4 2000/10/19 07:41:35 pierre
+ removed logs + added testkeyb for linux for get Escape sequences easily
Revision 1.1.2.3 2000/10/19 07:29:01 pierre
* enhance special keys support both in linux and vt100 mode
Revision 1.1.2.2 2000/10/11 16:19:44 pierre
* add support of function keys for vt100
Revision 1.1.2.1 2000/09/25 13:18:37 jonas
* added missing restoring of part of the termios info (even though those
fields weren't changed, leaving them uninitialized when restoring
won't do much good :)
Revision 1.1 2000/07/13 06:29:39 michael
+ Initial import
Revision 1.2 2000/06/30 09:00:33 jonas
* compiles again with -dnomouse
Revision 1.1 2000/01/06 01:20:31 peter
* moved out of packages/ back to topdir
Revision 1.1 1999/11/24 23:36:38 peter
* moved to packages dir
Revision 1.5 1999/02/16 10:44:53 peter
* alt-f<x> support
Revision 1.4 1998/12/15 10:30:34 peter
+ ctrl arrows support
* better backspace
Revision 1.3 1998/12/12 19:13:02 peter
* keyboard updates
* make test target, make all only makes units
Revision 1.1 1998/12/04 12:48:30 peter
* moved some dirs
Revision 1.3 1998/10/29 12:49:48 peter
* more fixes
Revision 1.1 1998/10/26 11:31:47 peter
+ inital include files
} }

View File

@ -23,6 +23,9 @@ var
mousecurcell : TVideoCell; mousecurcell : TVideoCell;
const
gpm_fs : longint = -1;
procedure PlaceMouseCur(ofs:longint); procedure PlaceMouseCur(ofs:longint);
{$ifndef NOMOUSE} {$ifndef NOMOUSE}
var var
@ -62,13 +65,22 @@ begin
PendingMouseTail:=@PendingMouseEvent; PendingMouseTail:=@PendingMouseEvent;
PendingMouseEvents:=0; PendingMouseEvents:=0;
FillChar(LastMouseEvent,sizeof(TMouseEvent),0); FillChar(LastMouseEvent,sizeof(TMouseEvent),0);
if gpm_fs=-1 then
begin
{ open gpm } { open gpm }
connect.EventMask:=GPM_MOVE or GPM_DRAG or GPM_DOWN or GPM_UP; connect.EventMask:=GPM_MOVE or GPM_DRAG or GPM_DOWN or GPM_UP;
connect.DefaultMask:=0; connect.DefaultMask:=0;
connect.MinMod:=0; connect.MinMod:=0;
connect.MaxMod:=0; connect.MaxMod:=0;
Gpm_Open(connect,0); gpm_fs:=Gpm_Open(connect,0);
if (gpm_fs=-2) and (getenv('TERM')<>'xterm') then
begin
gpm_fs:=-1;
Gpm_Close;
end;
end;
{ show mousepointer } { show mousepointer }
if gpm_fs<>-1 then
ShowMouse; ShowMouse;
{$endif ndef NOMOUSE} {$endif ndef NOMOUSE}
end; end;
@ -77,19 +89,51 @@ end;
procedure DoneMouse; procedure DoneMouse;
begin begin
{$ifndef NOMOUSE} {$ifndef NOMOUSE}
If gpm_fs<>-1 then
begin
HideMouse; HideMouse;
Gpm_Close; Gpm_Close;
gpm_fs:=-1;
end;
{$endif ndef NOMOUSE} {$endif ndef NOMOUSE}
end; end;
function DetectMouse:byte; function DetectMouse:byte;
{$ifndef NOMOUSE}
var
x : longint;
e : TGPMEvent;
connect : TGPMConnect;
{$endif ndef NOMOUSE}
begin begin
{$ifdef NOMOUSE} {$ifdef NOMOUSE}
DetectMouse:=0; DetectMouse:=0;
{$else ndef NOMOUSE} {$else ndef NOMOUSE}
if gpm_fs=-1 then
begin
connect.EventMask:=GPM_MOVE or GPM_DRAG or GPM_DOWN or GPM_UP;
connect.DefaultMask:=0;
connect.MinMod:=0;
connect.MaxMod:=0;
gpm_fs:=Gpm_Open(connect,0);
if (gpm_fs=-2) and (getenv('TERM')<>'xterm') then
begin
Gpm_Close;
gpm_fs:=-1;
end;
end;
{ always a mouse deamon present } { always a mouse deamon present }
if gpm_fs<>-1 then
begin
x:=Gpm_GetSnapshot(e);
if x<>-1 then
DetectMouse:=x
else
DetectMouse:=2; DetectMouse:=2;
end
else
DetectMouse:=0;
{$endif ndef NOMOUSE} {$endif ndef NOMOUSE}
end; end;
@ -173,6 +217,7 @@ begin
{$ifdef NOMOUSE} {$ifdef NOMOUSE}
fillchar(MouseEvent,SizeOf(TMouseEvent),#0); fillchar(MouseEvent,SizeOf(TMouseEvent),#0);
{$else ndef NOMOUSE} {$else ndef NOMOUSE}
fillchar(MouseEvent,SizeOf(TMouseEvent),#0);
if gpm_fd<0 then if gpm_fd<0 then
exit; exit;
Gpm_GetEvent(e); Gpm_GetEvent(e);
@ -213,11 +258,15 @@ begin
fillchar(MouseEvent,SizeOf(TMouseEvent),#0); fillchar(MouseEvent,SizeOf(TMouseEvent),#0);
exit(false); exit(false);
{$else ndef NOMOUSE} {$else ndef NOMOUSE}
fillchar(MouseEvent,SizeOf(TMouseEvent),#0);
if gpm_fd<0 then if gpm_fd<0 then
exit(false); exit(false);
if gpm_fd>0 then
begin
FD_Zero(fds); FD_Zero(fds);
FD_Set(gpm_fd,fds); FD_Set(gpm_fd,fds);
if (Select(gpm_fd+1,@fds,nil,nil,1)>0) then end;
if (gpm_fd=-2) or (Select(gpm_fd+1,@fds,nil,nil,1)>0) then
begin begin
Gpm_GetSnapshot(e); Gpm_GetSnapshot(e);
MouseEvent.x:=e.x-1; MouseEvent.x:=e.x-1;
@ -237,7 +286,10 @@ begin
else else
MouseEvent.Action:=0; MouseEvent.Action:=0;
end; end;
PollMouseEvent:=true; if (gpm_fd<>-2) or (MouseEvent.Action<>0) then
PollMouseEvent:=true
else
PollMouseEvent:=false;
end end
else else
PollMouseEvent:=false; PollMouseEvent:=false;
@ -246,7 +298,51 @@ end;
{ {
$Log$ $Log$
Revision 1.2 2000-07-13 11:32:25 michael Revision 1.2 2000-10-26 23:08:48 peter
+ removed logs * merged freebsd from fixes
Revision 1.1.2.1 2000/10/25 12:23:20 marco
* Linux dir split up
Revision 1.1.2.1 2000/10/24 07:58:49 pierre
* get mouse to not crash on xterm, its now completely disabled
Revision 1.1 2000/07/13 06:29:39 michael
+ Initial import
Revision 1.3 2000/06/30 09:00:33 jonas
* compiles again with -dnomouse
Revision 1.2 2000/04/17 08:51:38 pierre
+ set conditional NOMOUSE to get dummy mouse unit
Revision 1.1 2000/01/06 01:20:31 peter
* moved out of packages/ back to topdir
Revision 1.1 1999/11/24 23:36:38 peter
* moved to packages dir
Revision 1.5 1999/07/01 19:41:26 peter
* define OLDGPM to compile with old gpm (for v1.14) else the new
gpm unit from rtl will be used (v1.17)
Revision 1.4 1999/06/23 00:01:30 peter
* check for videobuf=nil
Revision 1.3 1999/03/31 20:20:18 michael
+ Fixed probmem preventing IDE to run in x-term.
Revision 1.2 1998/12/11 00:13:20 peter
+ SetMouseXY
* use far for exitproc procedure
Revision 1.1 1998/12/04 12:48:30 peter
* moved some dirs
Revision 1.3 1998/12/01 15:08:16 peter
* fixes for linux
Revision 1.2 1998/10/29 12:49:49 peter
* more fixes
} }

View File

@ -1,9 +1,10 @@
{ {
$Id$ $Id$
Copyright (c) 1997 Balazs Scheidler (bazsi@balabit.hu)
An interface unit for the terminfo database An interface unit for the terminfo database
Copyright (c) 1997 Balazs Scheidler (bazsi@balabit.hu)
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either License as published by the Free Software Foundation; either
@ -747,18 +748,47 @@ function tparam(const char *, char *, int, ...): PChar; cdecl; external;}
end. end.
{ {
$Log$ $Log$
Revision 1.3 2000-10-15 09:20:21 peter Revision 1.2 2000-10-26 23:08:48 peter
* linux terminal fixes merged * merged freebsd from fixes
Revision 1.2 2000/08/02 12:39:22 jonas Revision 1.1.2.1 2000/10/25 12:23:20 marco
* fixed crashes under ncurses 4 by adding auto-detection for ncurses 4/5 * Linux dir split up
* cur_term is not directly usable anymore for the largest part because
of a different record layout in ncurses 4/5, therefore the pointers Revision 1.1.2.3 2000/10/09 16:29:14 pierre
cur_term_booleans, cur_term_numbers, cur_term_strings and * more linux terminal fixes
cur_term_common are now available
* adapted video.inc to use the new naming convention Revision 1.1.2.2 2000/08/02 12:30:36 jonas
(merged from fixes branch) * improved version check *slightly*
Revision 1.1 2000/07/13 06:29:39 michael Revision 1.1 2000/07/13 06:29:39 michael
+ Initial import + Initial import
Revision 1.2 2000/06/30 12:28:57 jonas
* fixed termtype structure
Revision 1.1 2000/01/06 01:20:31 peter
* moved out of packages/ back to topdir
Revision 1.1 1999/11/24 23:36:38 peter
* moved to packages dir
Revision 1.3 1999/04/22 14:48:27 peter
* remove asm
Revision 1.2 1998/12/07 12:25:51 peter
* link with ncurses which is more available the curses
Revision 1.1 1998/12/04 12:48:30 peter
* moved some dirs
Revision 1.1 1998/10/26 11:31:47 peter
+ inital include files
Revision 1.3 1998/10/26 09:36:26 peter
* fixed cdecl
Revision 1.2 1998/07/29 20:17:47 bazsi
some updates to Video, it now uses terminfo. Some modifications for FreeVision.
Revision 1.1 1998/06/13 12:38:54 bazsi
} }

31
api/unix/testkeyb.pas Normal file
View File

@ -0,0 +1,31 @@
program raw_read;
uses
keyboard;
var
c : char;
col : byte;
begin
InitKeyboard;
c:=' ';
col:=1;
while c<>'x' do
begin
c:=RawReadKey;
if ord(c)<32 then
begin
write('"#',ord(c),'"');
inc(col,4);
end
else
write(c);
inc(col);
if col>=80 then
begin
writeln;
col:=0;
end;
end;
DoneKeyboard;
end.

View File

@ -25,13 +25,20 @@ const
procedure SendEscapeSeqNdx(Ndx: Word); procedure SendEscapeSeqNdx(Ndx: Word);
var var
P: PChar; P,pdelay: PChar;
begin begin
if not assigned(cur_term_Strings) then if not assigned(cur_term_Strings) then
RunError(219); RunError(219);
P:=cur_term_Strings^[Ndx]; P:=cur_term_Strings^[Ndx];
if assigned(p) then if assigned(p) then
begin { Do not transmit the delays }
pdelay:=strpos(p,'$<');
if assigned(pdelay) then
pdelay^:=#0;
fdWrite(TTYFd, P^, StrLen(P)); fdWrite(TTYFd, P^, StrLen(P));
if assigned(pdelay) then
pdelay^:='$';
end;
end; end;
@ -627,31 +634,100 @@ end;
{ {
$Log$ $Log$
Revision 1.6 2000-10-15 09:17:20 peter Revision 1.2 2000-10-26 23:08:48 peter
* merged more fixes * merged freebsd from fixes
Revision 1.5 2000/10/04 11:53:31 pierre Revision 1.1.2.1 2000/10/25 12:23:20 marco
Add TargetEntry and TargetExit (merged) * Linux dir split up
Revision 1.4 2000/09/26 08:18:29 jonas Revision 1.1.2.11 2000/10/19 07:28:18 pierre
* do not transmit the delay part in terminfo strings
Revision 1.1.2.10 2000/10/13 15:09:40 pierre
* Handle zero size for term correctly
Revision 1.1.2.9 2000/10/10 16:39:44 pierre
+ transform low ascii chars by changing their colors and adding 48
Revision 1.1.2.8 2000/10/10 15:34:58 pierre
* fixe a bug in Attr2Ansi
Revision 1.1.2.7 2000/10/10 10:52:56 pierre
+ FVMaxWidth to avoid too wide screens
Revision 1.1.2.6 2000/10/09 21:57:42 pierre
* Set LowAscii to false only if not on a local tty
Revision 1.1.2.5 2000/10/09 16:29:15 pierre
* more linux terminal fixes
Revision 1.1.2.4 2000/10/04 11:44:33 pierre
add TargetEntry and TargetExit procedures (needed for linux)
Revision 1.1.2.3 2000/10/03 22:31:29 pierre
* avoid invalid cur_term var
Revision 1.1.2.2 2000/09/25 13:21:19 jonas
+ added preserving of rawness of terminal when going though + added preserving of rawness of terminal when going though
init/donevideo init/donevideo
* del_term() is now called in donevideo * del_term() is now called in donevideo
* if initvideo is called while the video is already initialized, the * if initvideo is called while the video is already iniialized, the
screen is cleared and the cursor is set home, instead of going screen is cleared and the cursor is set home, instead of going
through the whole donevideo and then initvideo through the whole donevideo and then initvideo
(merged from fixes branch)
Revision 1.3 2000/08/02 12:39:22 jonas Revision 1.1.2.1 2000/08/02 12:29:06 jonas
* fixed crashes under ncurses 4 by adding auto-detection for ncurses 4/5 * fixed crashes under ncurses 4 by adding auto-detection for ncurses 4/5
* cur_term is not directly usable anymore for the largest part because * cur_term is not directly usable anymore for the largest part because
of a different record layout in ncurses 4/5, therefore the pointers of a different record layout in ncurses 4/5, therefore the pointers
cur_term_booleans, cur_term_numbers, cur_term_strings and cur_term_booleans, cur_term_numbers, cur_term_strings and
cur_term_common are now available cur_term_common are now available
* adapted video.inc to use the new naming convention * adapted video.inc to use the new naming convention
(merged from fixes branch)
Revision 1.2 2000/07/13 11:32:25 michael Revision 1.1 2000/07/13 06:29:39 michael
+ removed logs + Initial import
Revision 1.3 2000/06/30 12:28:57 jonas
* fixed termtype structure
Revision 1.2 2000/03/12 15:02:10 peter
* removed unused var
Revision 1.1 2000/01/06 01:20:31 peter
* moved out of packages/ back to topdir
Revision 1.1 1999/11/24 23:36:38 peter
* moved to packages dir
Revision 1.5 1999/07/05 21:38:19 peter
* works now also on not /dev/tty* units
* if col,row is 0,0 then take 80x25 by default
Revision 1.4 1999/02/22 12:46:16 peter
+ lowascii boolean if ascii < #32 is handled correctly
Revision 1.3 1999/02/08 10:34:26 peter
* cursortype futher implemented
Revision 1.2 1998/12/12 19:13:03 peter
* keyboard updates
* make test target, make all only makes units
Revision 1.1 1998/12/04 12:48:30 peter
* moved some dirs
Revision 1.6 1998/12/03 10:18:07 peter
* tty fixed
Revision 1.5 1998/12/01 15:08:17 peter
* fixes for linux
Revision 1.4 1998/11/01 20:29:12 peter
+ lockupdatescreen counter to not let updatescreen() update
Revision 1.3 1998/10/29 12:49:50 peter
* more fixes
Revision 1.1 1998/10/26 11:31:47 peter
+ inital include files
} }