summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkaroly <karoly@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-10-26 23:47:41 +0000
committerkaroly <karoly@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-10-26 23:47:41 +0000
commit992fa26b4a3a564ff5474cd60c2e444fd9e9cbea (patch)
treef237115ad7717f7c813df81ae493cc5fba2769b3
parent9edac0d78196da254ff3e6ec1f4bb12a17e7d278 (diff)
downloadfpc-992fa26b4a3a564ff5474cd60c2e444fd9e9cbea.tar.gz
+ initial version of Amiga sysmsgs support
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@11980 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--packages/fv/src/amismsg.inc115
-rw-r--r--packages/fv/src/sysmsg.pas9
2 files changed, 124 insertions, 0 deletions
diff --git a/packages/fv/src/amismsg.inc b/packages/fv/src/amismsg.inc
new file mode 100644
index 0000000000..1259dc8858
--- /dev/null
+++ b/packages/fv/src/amismsg.inc
@@ -0,0 +1,115 @@
+{
+ System dependent system messages for AmigaOS/MorphOS
+
+ Copyright (c) 2008 by Karoly Balogh
+
+ 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.
+}
+
+
+
+uses
+ video;
+
+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);
+// fpioctl(stdinputhandle,TIOCGWINSZ,@winsize);
+// 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;
+begin
+ SystemEvent.typ:=SysNothing;
+ if not SystemEventActive then
+ exit(false);
+ if PendingSystemEvents>0 then
+ begin
+ SystemEvent:=PendingSystemHead^;
+ PollSystemEvent:=true;
+ end
+ else
+ begin
+ PollSystemEvent:=false;
+ if Video.HasCloseWindow then begin
+ SystemEvent.typ:=SysClose;
+ SystemEvent.CloseTyp:=0;
+ PutSystemEvent(SystemEvent);
+ PollSystemEvent:=true;
+ end;
+{
+ FillChar(WinSize,sizeof(WinSize),0);
+ fpioctl(stdinputhandle,TIOCGWINSZ,@winsize);
+ 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}
+ end;
+end;
+
diff --git a/packages/fv/src/sysmsg.pas b/packages/fv/src/sysmsg.pas
index c702dca377..6486966912 100644
--- a/packages/fv/src/sysmsg.pas
+++ b/packages/fv/src/sysmsg.pas
@@ -83,6 +83,15 @@ implementation
{$define HAS_SYSMSG}
{$endif unix}
+{$ifdef amiga}
+{$i amismsg.inc}
+{$define HAS_SYSMSG}
+{$endif amiga}
+{$ifdef morphos}
+{$i amismsg.inc}
+{$define HAS_SYSMSG}
+{$endif morphos}
+
{$ifdef HAS_SYSMSG}
procedure PutSystemEvent(const SystemEvent: TSystemEvent);