mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 01:09:27 +02:00
* merged freebsd from fixes
This commit is contained in:
parent
b8a008b31c
commit
a554625890
1275
api/freebsd/Makefile
Normal file
1275
api/freebsd/Makefile
Normal file
File diff suppressed because it is too large
Load Diff
44
api/freebsd/Makefile.fpc
Normal file
44
api/freebsd/Makefile.fpc
Normal 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
|
||||
|
@ -116,6 +116,8 @@ export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION
|
||||
#####################################################################
|
||||
|
||||
INC=../inc
|
||||
UNIXINC=../unix
|
||||
|
||||
|
||||
# Override defaults
|
||||
override PASEXT=.pas
|
||||
@ -192,7 +194,7 @@ endif
|
||||
|
||||
# Targets
|
||||
|
||||
override UNITOBJECTS+=terminfo $(APIOBJECTS)
|
||||
override UNITOBJECTS+=$(APIOBJECTS) terminfo
|
||||
|
||||
# Clean
|
||||
|
||||
@ -209,7 +211,8 @@ ZIPTARGET=install
|
||||
# Directories
|
||||
|
||||
vpath %$(PASEXT) $(INC)
|
||||
override NEEDINCDIR=$(INC)
|
||||
override NEEDUNITDIR=$(UNIXINC)
|
||||
override NEEDINCDIR=$(INC) $(UNIXINC)
|
||||
ifndef TARGETDIR
|
||||
TARGETDIR=.
|
||||
endif
|
||||
@ -1263,10 +1266,11 @@ endif
|
||||
# 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
|
||||
|
@ -6,7 +6,7 @@
|
||||
defaulttarget=linux
|
||||
|
||||
[targets]
|
||||
units=terminfo $(APIOBJECTS)
|
||||
units= $(APIOBJECTS) terminfo
|
||||
|
||||
[install]
|
||||
unitsubdir=api
|
||||
@ -20,22 +20,25 @@ libversion=1.0
|
||||
fpcdir=../..
|
||||
targetdir=.
|
||||
sourcesdir=$(INC)
|
||||
incdir=$(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 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
|
||||
|
@ -158,7 +158,25 @@ end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2000-07-13 11:32:24 michael
|
||||
+ removed logs
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
}
|
@ -114,7 +114,13 @@ function Gpm_GetSnapshot(var Event: TGPMEvent): Longint; cdecl;external;
|
||||
end.
|
||||
{
|
||||
$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
|
||||
|
||||
Revision 1.1 2000/01/06 01:20:31 peter
|
@ -10,6 +10,10 @@ uses
|
||||
|
||||
var
|
||||
OldIO : TermIos;
|
||||
{$ifdef logging}
|
||||
f : text;
|
||||
{$endif logging}
|
||||
|
||||
Procedure SetRawMode(b:boolean);
|
||||
Var
|
||||
Tio : Termios;
|
||||
@ -230,11 +234,40 @@ Begin
|
||||
Keypressed := (KeySend<>KeyPut) or sysKeyPressed;
|
||||
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;
|
||||
Var
|
||||
ch : char;
|
||||
OldState,
|
||||
State : longint;
|
||||
is_delay : boolean;
|
||||
fdsin : fdSet;
|
||||
Begin
|
||||
{Check Buffer first}
|
||||
@ -257,11 +290,20 @@ Begin
|
||||
FD_Zero(fdsin);
|
||||
fd_Set(StdInputHandle,fdsin);
|
||||
State:=1;
|
||||
{$ifdef logging}
|
||||
write(f,'Esc');
|
||||
{$endif logging}
|
||||
if InCnt=0 then
|
||||
Select(StdInputHandle+1,@fdsin,nil,nil,10);
|
||||
while (State<>0) and (sysKeyPressed) do
|
||||
begin
|
||||
ch:=ttyRecvChar;
|
||||
{$ifdef logging}
|
||||
if ord(ch)>31 then
|
||||
write(f,ch)
|
||||
else
|
||||
write(f,'#',ord(ch):2);
|
||||
{$endif logging}
|
||||
OldState:=State;
|
||||
State:=0;
|
||||
case OldState of
|
||||
@ -277,8 +319,8 @@ Begin
|
||||
'O' : State:=6;
|
||||
else
|
||||
begin
|
||||
PushKey(ch);
|
||||
PushKey(#27);
|
||||
PushKey(ch);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -294,15 +336,16 @@ Begin
|
||||
'K' : PushExt(79);
|
||||
'1' : State:=4;
|
||||
'2' : State:=5;
|
||||
'3' : PushExt(83);
|
||||
'3' : State:=12;{PushExt(83)}
|
||||
'4' : PushExt(79);
|
||||
'5' : PushExt(73);
|
||||
'6' : PushExt(81);
|
||||
'?' : State:=7;
|
||||
else
|
||||
begin
|
||||
PushKey(ch);
|
||||
PushKey('[');
|
||||
PushKey(#27);
|
||||
PushKey('[');
|
||||
PushKey(ch);
|
||||
end;
|
||||
end;
|
||||
if ch in ['3'..'6'] then
|
||||
@ -315,30 +358,73 @@ Begin
|
||||
'C' : PushExt(61);
|
||||
'D' : PushExt(62);
|
||||
'E' : PushExt(63);
|
||||
else
|
||||
begin
|
||||
PushKey(#27);
|
||||
PushKey('[');
|
||||
PushKey('[');
|
||||
PushKey(ch);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
4 : begin
|
||||
4 : begin {Esc[1}
|
||||
case ch of
|
||||
'~' : PushExt(71);
|
||||
'7' : PushExt(64);
|
||||
'8' : PushExt(65);
|
||||
'9' : PushExt(66);
|
||||
else
|
||||
begin
|
||||
PushKey(#27);
|
||||
PushKey('[');
|
||||
PushKey('1');
|
||||
PushKey(ch);
|
||||
end;
|
||||
end;
|
||||
if (Ch<>'~') then
|
||||
State:=255;
|
||||
end;
|
||||
5 : begin
|
||||
5 : begin {Esc[2}
|
||||
case ch of
|
||||
'~' : PushExt(82);
|
||||
'0' : pushExt(67);
|
||||
'1' : PushExt(68);
|
||||
'3' : PushExt(133);
|
||||
'4' : PushExt(134);
|
||||
'3' : PushExt($85){F11, but ShiftF1 also !!};
|
||||
'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;
|
||||
if (Ch<>'~') then
|
||||
State:=255;
|
||||
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
|
||||
'P' : {F1}PushExt(59);
|
||||
'Q' : {F2}PushExt(60);
|
||||
@ -350,15 +436,135 @@ Begin
|
||||
'l' : {F8}PushExt(66);
|
||||
'w' : {F9}PushExt(67);
|
||||
'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;
|
||||
255 : ;
|
||||
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;
|
||||
if (State<>0) and (InCnt=0) then
|
||||
Select(StdInputHandle+1,@fdsin,nil,nil,10);
|
||||
end;
|
||||
if State=1 then
|
||||
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
|
||||
else
|
||||
Begin
|
||||
@ -378,6 +584,7 @@ var
|
||||
begin
|
||||
arg:=6;
|
||||
shift:=0;
|
||||
{$Ifndef BSD}
|
||||
if IOCtl(StdInputHandle,TIOCLINUX,@arg) then
|
||||
begin
|
||||
if (arg and (2 or 8))<>0 then
|
||||
@ -387,6 +594,7 @@ begin
|
||||
if (arg and 1)<>0 then
|
||||
inc(shift,3);
|
||||
end;
|
||||
{$endif}
|
||||
ShiftState:=shift;
|
||||
end;
|
||||
|
||||
@ -397,6 +605,10 @@ procedure InitKeyboard;
|
||||
begin
|
||||
SetRawMode(true);
|
||||
patchkeyboard;
|
||||
{$ifdef logging}
|
||||
assign(f,'keyboard.log');
|
||||
rewrite(f);
|
||||
{$endif logging}
|
||||
end;
|
||||
|
||||
|
||||
@ -404,6 +616,9 @@ procedure DoneKeyboard;
|
||||
begin
|
||||
unpatchkeyboard;
|
||||
SetRawMode(false);
|
||||
{$ifdef logging}
|
||||
close(f);
|
||||
{$endif logging}
|
||||
end;
|
||||
|
||||
|
||||
@ -588,13 +803,56 @@ end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.4 2000-10-15 09:18:22 peter
|
||||
* vt100 keys support merged
|
||||
Revision 1.2 2000-10-26 23:08:48 peter
|
||||
* merged freebsd from fixes
|
||||
|
||||
Revision 1.3 2000/10/04 11:53:31 pierre
|
||||
Add TargetEntry and TargetExit (merged)
|
||||
Revision 1.1.2.1 2000/10/25 12:23:20 marco
|
||||
* Linux dir split up
|
||||
|
||||
Revision 1.2 2000/07/13 11:32:25 michael
|
||||
+ removed logs
|
||||
Revision 1.1.2.4 2000/10/19 07:41:35 pierre
|
||||
+ 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
|
||||
|
||||
}
|
@ -23,6 +23,9 @@ var
|
||||
mousecurcell : TVideoCell;
|
||||
|
||||
|
||||
const
|
||||
gpm_fs : longint = -1;
|
||||
|
||||
procedure PlaceMouseCur(ofs:longint);
|
||||
{$ifndef NOMOUSE}
|
||||
var
|
||||
@ -62,14 +65,23 @@ begin
|
||||
PendingMouseTail:=@PendingMouseEvent;
|
||||
PendingMouseEvents:=0;
|
||||
FillChar(LastMouseEvent,sizeof(TMouseEvent),0);
|
||||
{ open gpm }
|
||||
connect.EventMask:=GPM_MOVE or GPM_DRAG or GPM_DOWN or GPM_UP;
|
||||
connect.DefaultMask:=0;
|
||||
connect.MinMod:=0;
|
||||
connect.MaxMod:=0;
|
||||
Gpm_Open(connect,0);
|
||||
{ show mousepointer }
|
||||
ShowMouse;
|
||||
if gpm_fs=-1 then
|
||||
begin
|
||||
{ open gpm }
|
||||
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_fs:=-1;
|
||||
Gpm_Close;
|
||||
end;
|
||||
end;
|
||||
{ show mousepointer }
|
||||
if gpm_fs<>-1 then
|
||||
ShowMouse;
|
||||
{$endif ndef NOMOUSE}
|
||||
end;
|
||||
|
||||
@ -77,19 +89,51 @@ end;
|
||||
procedure DoneMouse;
|
||||
begin
|
||||
{$ifndef NOMOUSE}
|
||||
HideMouse;
|
||||
Gpm_Close;
|
||||
If gpm_fs<>-1 then
|
||||
begin
|
||||
HideMouse;
|
||||
Gpm_Close;
|
||||
gpm_fs:=-1;
|
||||
end;
|
||||
{$endif ndef NOMOUSE}
|
||||
end;
|
||||
|
||||
|
||||
function DetectMouse:byte;
|
||||
{$ifndef NOMOUSE}
|
||||
var
|
||||
x : longint;
|
||||
e : TGPMEvent;
|
||||
connect : TGPMConnect;
|
||||
{$endif ndef NOMOUSE}
|
||||
begin
|
||||
{$ifdef NOMOUSE}
|
||||
DetectMouse:=0;
|
||||
{$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 }
|
||||
DetectMouse:=2;
|
||||
if gpm_fs<>-1 then
|
||||
begin
|
||||
x:=Gpm_GetSnapshot(e);
|
||||
if x<>-1 then
|
||||
DetectMouse:=x
|
||||
else
|
||||
DetectMouse:=2;
|
||||
end
|
||||
else
|
||||
DetectMouse:=0;
|
||||
{$endif ndef NOMOUSE}
|
||||
end;
|
||||
|
||||
@ -173,6 +217,7 @@ begin
|
||||
{$ifdef NOMOUSE}
|
||||
fillchar(MouseEvent,SizeOf(TMouseEvent),#0);
|
||||
{$else ndef NOMOUSE}
|
||||
fillchar(MouseEvent,SizeOf(TMouseEvent),#0);
|
||||
if gpm_fd<0 then
|
||||
exit;
|
||||
Gpm_GetEvent(e);
|
||||
@ -213,11 +258,15 @@ begin
|
||||
fillchar(MouseEvent,SizeOf(TMouseEvent),#0);
|
||||
exit(false);
|
||||
{$else ndef NOMOUSE}
|
||||
fillchar(MouseEvent,SizeOf(TMouseEvent),#0);
|
||||
if gpm_fd<0 then
|
||||
exit(false);
|
||||
FD_Zero(fds);
|
||||
FD_Set(gpm_fd,fds);
|
||||
if (Select(gpm_fd+1,@fds,nil,nil,1)>0) then
|
||||
if gpm_fd>0 then
|
||||
begin
|
||||
FD_Zero(fds);
|
||||
FD_Set(gpm_fd,fds);
|
||||
end;
|
||||
if (gpm_fd=-2) or (Select(gpm_fd+1,@fds,nil,nil,1)>0) then
|
||||
begin
|
||||
Gpm_GetSnapshot(e);
|
||||
MouseEvent.x:=e.x-1;
|
||||
@ -237,7 +286,10 @@ begin
|
||||
else
|
||||
MouseEvent.Action:=0;
|
||||
end;
|
||||
PollMouseEvent:=true;
|
||||
if (gpm_fd<>-2) or (MouseEvent.Action<>0) then
|
||||
PollMouseEvent:=true
|
||||
else
|
||||
PollMouseEvent:=false;
|
||||
end
|
||||
else
|
||||
PollMouseEvent:=false;
|
||||
@ -246,7 +298,51 @@ end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2000-07-13 11:32:25 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
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.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
|
||||
|
||||
}
|
@ -1,9 +1,10 @@
|
||||
{
|
||||
$Id$
|
||||
Copyright (c) 1997 Balazs Scheidler (bazsi@balabit.hu)
|
||||
|
||||
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
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
@ -747,18 +748,47 @@ function tparam(const char *, char *, int, ...): PChar; cdecl; external;}
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.3 2000-10-15 09:20:21 peter
|
||||
* linux terminal fixes merged
|
||||
Revision 1.2 2000-10-26 23:08:48 peter
|
||||
* merged freebsd from fixes
|
||||
|
||||
Revision 1.2 2000/08/02 12:39:22 jonas
|
||||
* 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
|
||||
of a different record layout in ncurses 4/5, therefore the pointers
|
||||
cur_term_booleans, cur_term_numbers, cur_term_strings and
|
||||
cur_term_common are now available
|
||||
* adapted video.inc to use the new naming convention
|
||||
(merged from fixes branch)
|
||||
Revision 1.1.2.1 2000/10/25 12:23:20 marco
|
||||
* Linux dir split up
|
||||
|
||||
Revision 1.1.2.3 2000/10/09 16:29:14 pierre
|
||||
* more linux terminal fixes
|
||||
|
||||
Revision 1.1.2.2 2000/08/02 12:30:36 jonas
|
||||
* improved version check *slightly*
|
||||
|
||||
Revision 1.1 2000/07/13 06:29:39 michael
|
||||
+ 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
31
api/unix/testkeyb.pas
Normal 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.
|
@ -25,13 +25,20 @@ const
|
||||
|
||||
procedure SendEscapeSeqNdx(Ndx: Word);
|
||||
var
|
||||
P: PChar;
|
||||
P,pdelay: PChar;
|
||||
begin
|
||||
if not assigned(cur_term_Strings) then
|
||||
RunError(219);
|
||||
P:=cur_term_Strings^[Ndx];
|
||||
if assigned(p) then
|
||||
fdWrite(TTYFd, P^, StrLen(P));
|
||||
begin { Do not transmit the delays }
|
||||
pdelay:=strpos(p,'$<');
|
||||
if assigned(pdelay) then
|
||||
pdelay^:=#0;
|
||||
fdWrite(TTYFd, P^, StrLen(P));
|
||||
if assigned(pdelay) then
|
||||
pdelay^:='$';
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
@ -627,31 +634,100 @@ end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.6 2000-10-15 09:17:20 peter
|
||||
* merged more fixes
|
||||
Revision 1.2 2000-10-26 23:08:48 peter
|
||||
* merged freebsd from fixes
|
||||
|
||||
Revision 1.5 2000/10/04 11:53:31 pierre
|
||||
Add TargetEntry and TargetExit (merged)
|
||||
Revision 1.1.2.1 2000/10/25 12:23:20 marco
|
||||
* 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
|
||||
init/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
|
||||
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
|
||||
* cur_term is not directly usable anymore for the largest part because
|
||||
of a different record layout in ncurses 4/5, therefore the pointers
|
||||
cur_term_booleans, cur_term_numbers, cur_term_strings and
|
||||
cur_term_common are now available
|
||||
* adapted video.inc to use the new naming convention
|
||||
(merged from fixes branch)
|
||||
|
||||
Revision 1.2 2000/07/13 11:32:25 michael
|
||||
+ removed logs
|
||||
Revision 1.1 2000/07/13 06:29:39 michael
|
||||
+ 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
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user