summaryrefslogtreecommitdiff
path: root/rtl/aros/i386/execf.inc
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/aros/i386/execf.inc')
-rw-r--r--rtl/aros/i386/execf.inc89
1 files changed, 89 insertions, 0 deletions
diff --git a/rtl/aros/i386/execf.inc b/rtl/aros/i386/execf.inc
new file mode 100644
index 0000000000..0a15874015
--- /dev/null
+++ b/rtl/aros/i386/execf.inc
@@ -0,0 +1,89 @@
+{
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 2006 Karoly Balogh
+
+ exec functions (V40) for Amiga/PowerPC
+
+ See the file COPYING.FPC, included in this distribution,
+ for details about the copyright.
+
+ This program 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.
+
+ **********************************************************************}
+
+var
+ LocalExecBase : Pointer; external name '_ExecBase';
+
+procedure Forbid; syscall AOS_ExecBase 22;
+procedure Permit; syscall AOS_ExecBase 23;
+function execAllocMem(byteSize: Cardinal; requirements: Cardinal): Pointer; syscall LocalExecBase 33;
+procedure execFreeMem(memoryBlock: Pointer; byteSize: Cardinal); syscall LocalExecBase 35;
+function FindTask(name: PChar): PTask; syscall LocalExecBase 49;
+function SetSignal(newSignals: Cardinal; signalSet : Cardinal): Cardinal; syscall LocalExecBase 51;
+function Wait(SignalSet: LongWord): LongWord; syscall AOS_ExecBase 53;
+procedure Signal(Task: PTask; SignalSet: LongWord); syscall AOS_ExecBase 54;
+function AllocSignal(signalNum: LongInt): ShortInt; syscall LocalExecBase 55;
+procedure FreeSignal(signalNum: LongInt); syscall LocalExecBase 56;
+procedure AddPort(port: PMsgPort); syscall LocalExecBase 59;
+procedure RemPort(port: PMsgPort); syscall LocalExecBase 60;
+function GetMsg(port: PMsgPort): PMessage; syscall LocalExecBase 62;
+procedure ReplyMsg(message : pMessage); syscall LocalExecBase 63;
+function WaitPort(port: PMsgPort): PMessage; syscall LocalExecBase 64;
+procedure CloseLibrary(libHandle: PLibrary); syscall LocalExecBase 69;
+function OpenDevice(devName: PChar; numunit: Cardinal; ioRequest: pIORequest; flags: Cardinal): ShortInt; syscall LocalExecBase 74;
+procedure CloseDevice(ioRequest: PIORequest); syscall LocalExecBase 75;
+function DoIO(ioRequest: PIORequest): ShortInt; syscall LocalExecBase 76;
+function OpenLibrary(libname: PChar; libver : Cardinal): Pointer; syscall LocalExecBase 92;
+procedure InitSemaphore(SigSem: PSignalSemaphore); syscall AOS_ExecBase 93;
+procedure ObtainSemaphore(SigSem: PSignalSemaphore); syscall AOS_ExecBase 94;
+procedure ReleaseSemaphore(SigSem: PSignalSemaphore); syscall AOS_ExecBase 95;
+function AttemptSemaphore(SigSem: PSignalSemaphore): LongWord; syscall AOS_ExecBase 96;
+function CreatePool(requirements: Cardinal; puddleSize: Cardinal; threshSize: Cardinal): Pointer; syscall LocalExecBase 116;
+procedure DeletePool(poolHeader: Pointer); syscall LocalExecBase 117;
+function AllocPooled(poolHeader: Pointer; memSize: Cardinal): Pointer; syscall LocalExecBase 118;
+function FreePooled(poolHeader: Pointer; memory: Pointer; memSize: Cardinal): Pointer; syscall LocalExecBase 119;
+procedure StackSwap(NewStack: PStackSwapStruct); syscall AOS_ExecBase 122;
+procedure RawPutChar(c: Char); syscall AOS_ExecBase 86;
+
+//function RawDoFmt(const formatString : pCHAR;const dataStream : POINTER; putChProc : tPROCEDURE; putChData : POINTER): pointer;
+function RawDoFmt(const formatString : pCHAR;const dataStream : POINTER; putChProc : POINTER; putChData : POINTER): pointer; syscall LocalExecBase 87;
+
+function GetLibAdress(Base: Pointer; Offset: LongInt): Pointer; inline;
+begin
+ if Base = nil then
+ begin
+ RawDoFmt('FPC_FILE_DEBUG: Error! Illegal library access with not opened library: %d !'+#10,@Offset,pointer(1),nil);
+ Debugln('Illegal library access with not opened library');
+ Halt(1);
+ end;
+ GetLibAdress := Pointer((Base -(Offset * SizeOf(Pointer)))^);
+end;
+
+procedure Debug(s: string);
+type
+ TkPrintf = function(Msg: PChar): Integer; cdecl;
+var
+ kPrintf: TkPrintf;
+ d: string;
+ i: Integer;
+begin
+ if Assigned(AOS_ExecBase) then
+ begin
+ if Assigned(PExecBase(AOS_ExecBase)^.DebugArosBase) then
+ begin
+ kPrintf := TKPrintF(PExecBase(AOS_ExecBase)^.DebugArosBase^.kprintfPtr);
+ if Assigned(kPrintf) then
+ begin
+ d := s + #0;
+ i := kPrintf(@d[1]);
+ end;
+ end;
+ end;
+end;
+
+procedure Debugln(s: string);
+begin
+ Debug(s + #10);
+end;