summaryrefslogtreecommitdiff
path: root/packages/fv/src/unixsmsg.inc
diff options
context:
space:
mode:
authorpeter <peter@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-01-14 16:54:03 +0000
committerpeter <peter@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-01-14 16:54:03 +0000
commite5247b2cfbbc77f34dcf5a46d5f0066ea887e7b2 (patch)
tree035171903206a511a36bb5fe6bb79a231f95ce88 /packages/fv/src/unixsmsg.inc
parent1e8bbc586f27f8cff8d18e4dd94d18ddc8989b09 (diff)
downloadfpc-e5247b2cfbbc77f34dcf5a46d5f0066ea887e7b2.tar.gz
* moved freevision package
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@9752 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fv/src/unixsmsg.inc')
-rw-r--r--packages/fv/src/unixsmsg.inc126
1 files changed, 126 insertions, 0 deletions
diff --git a/packages/fv/src/unixsmsg.inc b/packages/fv/src/unixsmsg.inc
new file mode 100644
index 0000000000..7872ebafe8
--- /dev/null
+++ b/packages/fv/src/unixsmsg.inc
@@ -0,0 +1,126 @@
+{
+ System dependent system messages for unix
+
+ Copyright (c) 2002 by Pierre Muller
+
+ 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
+ version 2 of the License, or (at your option) any later version.
+
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+
+{ This file is still a dummy,
+ it should use ioctl to get information about resizing of windows }
+
+uses
+{$ifdef VER1_0}
+ linux;
+{$else}
+ BaseUnix,termio;
+{$endif}
+
+Const
+ SystemEventActive : Boolean = false;
+
+var
+ lastxsize,lastysize : longint;
+
+procedure InitSystemMsg;
+var
+ WinSize : TWinSize;
+begin
+ If SystemEventActive then
+ exit;
+ { Code to enable size tracking should go here }
+ PendingSystemHead:=@PendingSystemEvent;
+ PendingSystemTail:=@PendingSystemEvent;
+ PendingSystemEvents:=0;
+ FillChar(LastSystemEvent,sizeof(TSystemEvent),0);
+ FillChar(WinSize,sizeof(WinSize),0);
+{$ifdef VER1_0}
+ ioctl(stdinputhandle,TIOCGWINSZ,@winsize);
+{$else}
+ fpioctl(stdinputhandle,TIOCGWINSZ,@winsize);
+{$endif}
+ LastXSize:=WinSize.ws_row;
+ LastYSize:=WinSize.ws_col;
+ If LastXSize=0 then
+ LastXSize:=80;
+ If LastYSize=0 then
+ LastYSize:=25;
+
+ SystemEventActive:=true;
+end;
+
+
+procedure DoneSystemMsg;
+begin
+ if not SystemEventActive then
+ exit;
+ { Code to disable size tracking should go here }
+ SystemEventActive:=false;
+end;
+
+procedure GetSystemEvent(var SystemEvent: TSystemEvent);
+begin
+ if PendingSystemEvents=0 then
+ PollSystemEvent(SystemEvent);
+ if PendingSystemEvents=0 then
+ exit;
+ SystemEvent:=PendingSystemHead^;
+ inc(PendingSystemHead);
+ if longint(PendingSystemHead)=longint(@PendingSystemEvent)+sizeof(PendingSystemEvent) then
+ PendingSystemHead:=@PendingSystemEvent;
+ dec(PendingSystemEvents);
+ LastSystemEvent:=SystemEvent;
+end;
+
+
+function PollSystemEvent(var SystemEvent: TSystemEvent):boolean;
+var
+ CloseState : word;
+ WinSize : TWinSize;
+begin
+ SystemEvent.typ:=SysNothing;
+ if not SystemEventActive then
+ exit(false);
+ if PendingSystemEvents>0 then
+ begin
+ SystemEvent:=PendingSystemHead^;
+ PollSystemEvent:=true;
+ end
+ else
+ begin
+ FillChar(WinSize,sizeof(WinSize),0);
+{$ifdef VER1_0}
+ ioctl(stdinputhandle,TIOCGWINSZ,@winsize);
+{$else}
+ fpioctl(stdinputhandle,TIOCGWINSZ,@winsize);
+{$endif}
+ if (winsize.ws_col<>0) and (winsize.ws_row<>0) and
+ ((winsize.ws_row<>lastxsize) or (winsize.ws_col<>lastysize)) then
+ begin
+ SystemEvent.typ:=SysResize;
+ SystemEvent.x:=WinSize.ws_col;
+ SystemEvent.y:=WinSize.ws_row;
+ PutSystemEvent(SystemEvent);
+ LastXSize:=WinSize.ws_row;
+ LastYSize:=WinSize.ws_col;
+ PollSystemEvent:=true;
+ end
+ else
+ PollSystemEvent:=false;
+ end;
+end;
+