From 10a01c0127ae81aefbed5eebf013a2e6737f8f49 Mon Sep 17 00:00:00 2001 From: nickysn Date: Sat, 5 Sep 2015 21:41:37 +0000 Subject: [PATCH] + import catch, throw and stack management win16 api functions git-svn-id: trunk@31540 - --- rtl/win16/winprocs.pp | 16 ++++++++++++++++ rtl/win16/wintypes.pp | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/rtl/win16/winprocs.pp b/rtl/win16/winprocs.pp index 46f1b24b11..89341a8c98 100644 --- a/rtl/win16/winprocs.pp +++ b/rtl/win16/winprocs.pp @@ -1,5 +1,9 @@ unit winprocs; +{$if defined(FPC_MM_COMPACT) or defined(FPC_MM_LARGE) or defined(FPC_MM_HUGE)} + {$define VAR_PARAMS_ARE_FAR} +{$endif} + interface uses @@ -50,6 +54,18 @@ procedure OutputDebugString(OutputString: LPCSTR); external 'KERNEL'; function SetErrorMode(Mode: UINT): UINT; external 'KERNEL'; +{ Catch/Throw and stack management } + +function Catch(CatchBuf: LPCATCHBUF): SmallInt; external 'KERNEL'; +procedure Throw(CatchBuf: LPCATCHBUF; ThrowBack: SmallInt); external 'KERNEL'; +{$ifdef VAR_PARAMS_ARE_FAR} +function Catch(var CatchBuf: TCatchBuf): SmallInt; external 'KERNEL'; +procedure Throw(var CatchBuf: TCatchBuf; ThrowBack: SmallInt); external 'KERNEL'; +{$endif} + +procedure SwitchStackBack; external 'KERNEL'; +procedure SwitchStackTo(StackSegment, StackPointer, StackTop: UINT); external 'KERNEL'; + implementation function LOBYTE(w: Word): Byte; diff --git a/rtl/win16/wintypes.pp b/rtl/win16/wintypes.pp index 7ff60ba17b..b477ce3ccf 100644 --- a/rtl/win16/wintypes.pp +++ b/rtl/win16/wintypes.pp @@ -87,6 +87,12 @@ const SEM_NOGPFAULTERRORBOX = $0002; SEM_NOOPENFILEERRORBOX = $8000; +type + LPCATCHBUF = ^CATCHBUF; far; + CATCHBUF = array [0..8] of SmallInt; + PCatchBuf = ^TCatchBuf; + TCatchBuf = CATCHBUF; + implementation end.