|
@@ -614,11 +614,13 @@ function AssignStream(var StreamIn, StreamOut, StreamErr: Text; const prog: Stri
|
|
General information
|
|
General information
|
|
***************************}
|
|
***************************}
|
|
|
|
|
|
|
|
+{
|
|
Function GetDomainName:String;
|
|
Function GetDomainName:String;
|
|
Function GetHostName:String;
|
|
Function GetHostName:String;
|
|
-Function GetEnv(P:string):Pchar;
|
|
|
|
Function Sysinfo(var Info:TSysinfo):Boolean;
|
|
Function Sysinfo(var Info:TSysinfo):Boolean;
|
|
Function Uname(var unamerec:utsname):Boolean;
|
|
Function Uname(var unamerec:utsname):Boolean;
|
|
|
|
+}
|
|
|
|
+Function GetEnv(P:string):Pchar;
|
|
|
|
|
|
{**************************
|
|
{**************************
|
|
Signal
|
|
Signal
|
|
@@ -628,7 +630,7 @@ Procedure SigAction(Signum:Integer;Var Act,OldAct:PSigActionRec );
|
|
Procedure SigProcMask (How:Integer;SSet,OldSSet:PSigSet);
|
|
Procedure SigProcMask (How:Integer;SSet,OldSSet:PSigSet);
|
|
Function SigPending:SigSet;
|
|
Function SigPending:SigSet;
|
|
Procedure SigSuspend(Mask:Sigset);
|
|
Procedure SigSuspend(Mask:Sigset);
|
|
-Function Signal(Signum:Integer;Handler:SignalHandler):SignalHandler;
|
|
|
|
|
|
+//Function Signal(Signum:Integer;Handler:SignalHandler):SignalHandler;
|
|
Function Kill(Pid:longint;Sig:integer):integer;
|
|
Function Kill(Pid:longint;Sig:integer):integer;
|
|
Procedure SigRaise(Sig:integer);
|
|
Procedure SigRaise(Sig:integer);
|
|
Function Alarm(Sec : Longint) : longint;
|
|
Function Alarm(Sec : Longint) : longint;
|
|
@@ -2125,7 +2127,7 @@ begin
|
|
Dup2:=Dup2(filerec(oldfile).handle,filerec(newfile).handle);
|
|
Dup2:=Dup2(filerec(oldfile).handle,filerec(newfile).handle);
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
|
|
+{
|
|
Function Select(N:longint;readfds,writefds,exceptfds:PFDSet;TimeOut:PTimeVal):longint;
|
|
Function Select(N:longint;readfds,writefds,exceptfds:PFDSet;TimeOut:PTimeVal):longint;
|
|
{
|
|
{
|
|
Select checks whether the file descriptor sets in readfs/writefs/exceptfs
|
|
Select checks whether the file descriptor sets in readfs/writefs/exceptfs
|
|
@@ -2165,7 +2167,7 @@ begin
|
|
end;
|
|
end;
|
|
Select:=Select(N,Readfds,WriteFds,ExceptFds,p);
|
|
Select:=Select(N,Readfds,WriteFds,ExceptFds,p);
|
|
end;
|
|
end;
|
|
-
|
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
|
|
Function SelectText(var T:Text;TimeOut :PTimeval):Longint;
|
|
Function SelectText(var T:Text;TimeOut :PTimeval):Longint;
|
|
@@ -2295,18 +2297,24 @@ Function AssignPipe(var pipe_in,pipe_out:longint):boolean;
|
|
}
|
|
}
|
|
var
|
|
var
|
|
pip : tpipe;
|
|
pip : tpipe;
|
|
- regs : SysCallregs;
|
|
|
|
|
|
+ retval : LONGINT;
|
|
|
|
+
|
|
begin
|
|
begin
|
|
- regs.reg2:=longint(@pip);
|
|
|
|
- SysCall(SysCall_nr_pipe,regs);
|
|
|
|
- pipe_in:=pip[1];
|
|
|
|
- pipe_out:=pip[2];
|
|
|
|
- linuxerror:=errno;
|
|
|
|
- AssignPipe:=(LinuxError=0);
|
|
|
|
|
|
+ asm
|
|
|
|
+ lea pip,%ebx
|
|
|
|
+ push %ebx
|
|
|
|
+ mov $42,%eax
|
|
|
|
+ int $0x80
|
|
|
|
+ addl $4,%esp
|
|
|
|
+ mov %eax,retval
|
|
|
|
+ end;
|
|
|
|
+ checkreturnvalue(retval,retval);
|
|
|
|
+ LinuxError:=Errno;
|
|
|
|
+ pipe_in:=pip[1];
|
|
|
|
+ pipe_out:=pip[2];
|
|
|
|
+ AssignPipe:=(LinuxError=0);
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
Function AssignPipe(var pipe_in,pipe_out:text):boolean;
|
|
Function AssignPipe(var pipe_in,pipe_out:text):boolean;
|
|
{
|
|
{
|
|
Sets up a pair of file variables, which act as a pipe. The first one can
|
|
Sets up a pair of file variables, which act as a pipe. The first one can
|
|
@@ -2375,12 +2383,17 @@ end;
|
|
|
|
|
|
Function PClose(Var F:text) :longint;
|
|
Function PClose(Var F:text) :longint;
|
|
var
|
|
var
|
|
- sr : syscallregs;
|
|
|
|
pl : ^longint;
|
|
pl : ^longint;
|
|
res : longint;
|
|
res : longint;
|
|
|
|
+
|
|
begin
|
|
begin
|
|
- sr.reg2:=Textrec(F).Handle;
|
|
|
|
- SysCall (syscall_nr_close,sr);
|
|
|
|
|
|
+ res:=Textrec(F).Handle;
|
|
|
|
+ asm
|
|
|
|
+ push res
|
|
|
|
+ mov $6,%eax
|
|
|
|
+ int $0x80
|
|
|
|
+ add $4,%esp
|
|
|
|
+ end;
|
|
{ closed our side, Now wait for the other - this appears to be needed ?? }
|
|
{ closed our side, Now wait for the other - this appears to be needed ?? }
|
|
pl:=@(textrec(f).userdata[2]);
|
|
pl:=@(textrec(f).userdata[2]);
|
|
waitpid(pl^,@res,0);
|
|
waitpid(pl^,@res,0);
|
|
@@ -2390,19 +2403,23 @@ end;
|
|
|
|
|
|
Function PClose(Var F:file) : longint;
|
|
Function PClose(Var F:file) : longint;
|
|
var
|
|
var
|
|
- sr : syscallregs;
|
|
|
|
pl : ^longint;
|
|
pl : ^longint;
|
|
res : longint;
|
|
res : longint;
|
|
|
|
+
|
|
begin
|
|
begin
|
|
- sr.reg2:=FileRec(F).Handle;
|
|
|
|
- SysCall (Syscall_nr_close,sr);
|
|
|
|
|
|
+ res:=filerec(F).Handle;
|
|
|
|
+ asm
|
|
|
|
+ push res
|
|
|
|
+ mov $6,%eax
|
|
|
|
+ int $0x80
|
|
|
|
+ add $4,%esp
|
|
|
|
+ end;
|
|
{ closed our side, Now wait for the other - this appears to be needed ?? }
|
|
{ closed our side, Now wait for the other - this appears to be needed ?? }
|
|
pl:=@(filerec(f).userdata[2]);
|
|
pl:=@(filerec(f).userdata[2]);
|
|
waitpid(pl^,@res,0);
|
|
waitpid(pl^,@res,0);
|
|
pclose:=res shr 8;
|
|
pclose:=res shr 8;
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
Procedure PCloseText(Var F:text);
|
|
Procedure PCloseText(Var F:text);
|
|
{
|
|
{
|
|
May not use @PClose due overloading
|
|
May not use @PClose due overloading
|
|
@@ -2411,8 +2428,6 @@ begin
|
|
PClose(f);
|
|
PClose(f);
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
Procedure POpen(var F:text;const Prog:String;rw:char);
|
|
Procedure POpen(var F:text;const Prog:String;rw:char);
|
|
{
|
|
{
|
|
Starts the program in 'Prog' and makes it's input or out put the
|
|
Starts the program in 'Prog' and makes it's input or out put the
|
|
@@ -2577,17 +2592,26 @@ end;
|
|
|
|
|
|
|
|
|
|
Function mkFifo(pathname:string;mode:longint):boolean;
|
|
Function mkFifo(pathname:string;mode:longint):boolean;
|
|
-var
|
|
|
|
- regs : SysCallRegs;
|
|
|
|
|
|
+var retval : LONGINT;
|
|
begin
|
|
begin
|
|
pathname:=pathname+#0;
|
|
pathname:=pathname+#0;
|
|
- regs.reg2:=longint(@pathname[1]);
|
|
|
|
- regs.reg3:=mode or STAT_IFIFO;
|
|
|
|
- regs.reg4:=0;
|
|
|
|
- mkFifo:=(SysCall(syscall_nr_mknod,regs)=0);
|
|
|
|
|
|
+ asm
|
|
|
|
+ lea %ecx,pathname
|
|
|
|
+ inc %ecx
|
|
|
|
+ push $0
|
|
|
|
+ mov mode,%ebx
|
|
|
|
+ or STAT_IFIFO,%ebx
|
|
|
|
+ push %ebx
|
|
|
|
+ push %ecx
|
|
|
|
+ mov $14,$eax
|
|
|
|
+ int $0x80
|
|
|
|
+ addl $12,%esp
|
|
|
|
+ mov %eax,retval
|
|
|
|
+ end;
|
|
|
|
+ mkfifo:=checkreturnvalue(retval,retval)=0;
|
|
|
|
+ LinuxError:=Errno;
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
Procedure AssignStream(Var StreamIn,Streamout:text;Const Prog:String);
|
|
Procedure AssignStream(Var StreamIn,Streamout:text;Const Prog:String);
|
|
{
|
|
{
|
|
Starts the program in 'Prog' and makes its input and output the
|
|
Starts the program in 'Prog' and makes its input and output the
|
|
@@ -2754,6 +2778,7 @@ end;
|
|
General information calls
|
|
General information calls
|
|
******************************************************************************}
|
|
******************************************************************************}
|
|
|
|
|
|
|
|
+{
|
|
Function Sysinfo(var Info:TSysinfo):Boolean;
|
|
Function Sysinfo(var Info:TSysinfo):Boolean;
|
|
{
|
|
{
|
|
Get system info
|
|
Get system info
|
|
@@ -2764,9 +2789,9 @@ Begin
|
|
regs.reg2:=longint(@info);
|
|
regs.reg2:=longint(@info);
|
|
Sysinfo:=SysCall(SysCall_nr_Sysinfo,regs)=0;
|
|
Sysinfo:=SysCall(SysCall_nr_Sysinfo,regs)=0;
|
|
End;
|
|
End;
|
|
|
|
+}
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+{
|
|
Function Uname(var unamerec:utsname):Boolean;
|
|
Function Uname(var unamerec:utsname):Boolean;
|
|
{
|
|
{
|
|
Get machine's names
|
|
Get machine's names
|
|
@@ -2778,7 +2803,7 @@ Begin
|
|
Uname:=SysCall(SysCall_nr_uname,regs)=0;
|
|
Uname:=SysCall(SysCall_nr_uname,regs)=0;
|
|
LinuxError:=Errno;
|
|
LinuxError:=Errno;
|
|
End;
|
|
End;
|
|
-
|
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
|
|
Function GetEnv(P:string):Pchar;
|
|
Function GetEnv(P:string):Pchar;
|
|
@@ -2810,7 +2835,7 @@ Begin
|
|
getenv:=nil;
|
|
getenv:=nil;
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
|
|
+{
|
|
|
|
|
|
Function GetDomainName:String;
|
|
Function GetDomainName:String;
|
|
{
|
|
{
|
|
@@ -2827,8 +2852,6 @@ begin
|
|
getdomainname:=strpas(@Sysn.domainname[0]);
|
|
getdomainname:=strpas(@Sysn.domainname[0]);
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
Function GetHostName:String;
|
|
Function GetHostName:String;
|
|
{
|
|
{
|
|
Get machines name. Returns empty string if not set.
|
|
Get machines name. Returns empty string if not set.
|
|
@@ -2843,7 +2866,7 @@ begin
|
|
else
|
|
else
|
|
gethostname:=strpas(@Sysn.nodename[0]);
|
|
gethostname:=strpas(@Sysn.nodename[0]);
|
|
end;
|
|
end;
|
|
-
|
|
|
|
|
|
+}
|
|
|
|
|
|
{******************************************************************************
|
|
{******************************************************************************
|
|
Signal handling calls
|
|
Signal handling calls
|
|
@@ -2858,19 +2881,23 @@ Function Kill(Pid:longint;Sig:integer):integer;
|
|
Return value is zero, except for case three, where the return value
|
|
Return value is zero, except for case three, where the return value
|
|
is the number of processes to which the signal was sent.
|
|
is the number of processes to which the signal was sent.
|
|
}
|
|
}
|
|
-var
|
|
|
|
- regs : Syscallregs;
|
|
|
|
|
|
+
|
|
|
|
+var retval : LONGINT;
|
|
begin
|
|
begin
|
|
- regs.reg2:=Pid;
|
|
|
|
- regs.reg3:=Sig;
|
|
|
|
- kill:=SysCall(Syscall_nr_kill,regs);
|
|
|
|
- if kill<0 then
|
|
|
|
- Kill:=0;
|
|
|
|
- linuxerror:=errno;
|
|
|
|
|
|
+ asm
|
|
|
|
+ push Sig
|
|
|
|
+ push Pid
|
|
|
|
+ mov $37,$eax
|
|
|
|
+ int $0x80
|
|
|
|
+ addl $8,%esp
|
|
|
|
+ mov %eax,retval
|
|
|
|
+ end;
|
|
|
|
+ Kill:=checkreturnvalue(retval,retval);
|
|
|
|
+ if kill<0 THEN
|
|
|
|
+ Kill:=0;
|
|
|
|
+ LinuxError:=Errno;
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
Procedure SigAction(Signum:Integer;Var Act,OldAct:PSigActionRec );
|
|
Procedure SigAction(Signum:Integer;Var Act,OldAct:PSigActionRec );
|
|
{
|
|
{
|
|
Change action of process upon receipt of a signal.
|
|
Change action of process upon receipt of a signal.
|
|
@@ -2878,18 +2905,24 @@ Procedure SigAction(Signum:Integer;Var Act,OldAct:PSigActionRec );
|
|
If Act is non-nil, it is used to specify the new action.
|
|
If Act is non-nil, it is used to specify the new action.
|
|
If OldAct is non-nil the previous action is saved there.
|
|
If OldAct is non-nil the previous action is saved there.
|
|
}
|
|
}
|
|
-Var
|
|
|
|
- sr : Syscallregs;
|
|
|
|
|
|
+
|
|
|
|
+var retval : LONGINT;
|
|
begin
|
|
begin
|
|
- sr.reg2:=Signum;
|
|
|
|
- sr.reg3:=Longint(act);
|
|
|
|
- sr.reg4:=Longint(oldact);
|
|
|
|
- SysCall(Syscall_nr_sigaction,sr);
|
|
|
|
- linuxerror:=errno;
|
|
|
|
|
|
+ asm
|
|
|
|
+ push oldact
|
|
|
|
+ push act
|
|
|
|
+ push signum
|
|
|
|
+ mov $46,$eax
|
|
|
|
+ int $0x80
|
|
|
|
+ addl $12,%esp
|
|
|
|
+ mov %eax,retval
|
|
|
|
+ end;
|
|
|
|
+ SigAction:=checkreturnvalue(retval,retval);
|
|
|
|
+ if kill<0 THEN
|
|
|
|
+ Kill:=0;
|
|
|
|
+ LinuxError:=Errno;
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
Procedure SigProcMask(How:Integer;SSet,OldSSet:PSigSet);
|
|
Procedure SigProcMask(How:Integer;SSet,OldSSet:PSigSet);
|
|
{
|
|
{
|
|
Change the list of currently blocked signals.
|
|
Change the list of currently blocked signals.
|
|
@@ -2899,58 +2932,68 @@ Procedure SigProcMask(How:Integer;SSet,OldSSet:PSigSet);
|
|
SigSetMask : Set the list of blocked signals to SSet
|
|
SigSetMask : Set the list of blocked signals to SSet
|
|
if OldSSet is non-null, the old set will be saved there.
|
|
if OldSSet is non-null, the old set will be saved there.
|
|
}
|
|
}
|
|
-Var
|
|
|
|
- sr : SyscallRegs;
|
|
|
|
|
|
+VAR retval : LONGINT;
|
|
|
|
+
|
|
begin
|
|
begin
|
|
- sr.reg2:=how;
|
|
|
|
- sr.reg3:=longint(SSet);
|
|
|
|
- sr.reg4:=longint(OldSSet);
|
|
|
|
- SysCall(Syscall_nr_sigprocmask,sr);
|
|
|
|
- linuxerror:=errno;
|
|
|
|
|
|
+ asm
|
|
|
|
+ push OldSSet
|
|
|
|
+ push SSet
|
|
|
|
+ push How
|
|
|
|
+ mov $48,%eax
|
|
|
|
+ int $0x80
|
|
|
|
+ addl $12,%esp
|
|
|
|
+ mov %eax,retval
|
|
|
|
+ end;
|
|
|
|
+ SigProcMask:=checkreturnvalue(retval,retval);
|
|
|
|
+ LinuxError:=Errno;
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
Function SigPending:SigSet;
|
|
Function SigPending:SigSet;
|
|
{
|
|
{
|
|
Allows examination of pending signals. The signal mask of pending
|
|
Allows examination of pending signals. The signal mask of pending
|
|
signals is set in SSet
|
|
signals is set in SSet
|
|
}
|
|
}
|
|
Var
|
|
Var
|
|
- sr : SyscallRegs;
|
|
|
|
dummy : Sigset;
|
|
dummy : Sigset;
|
|
|
|
+ retval: LONGINT;
|
|
begin
|
|
begin
|
|
- sr.reg2:=longint(@dummy);
|
|
|
|
- SysCall(Syscall_nr_sigpending,sr);
|
|
|
|
- linuxerror:=errno;
|
|
|
|
- Sigpending:=dummy;
|
|
|
|
|
|
+ asm
|
|
|
|
+ push dummy
|
|
|
|
+ mov $52,%eax
|
|
|
|
+ int $0x80
|
|
|
|
+ addl $4,%esp
|
|
|
|
+ end;
|
|
|
|
+ sigpending:=checkreturnvalue(retval,dummy);
|
|
|
|
+ LinuxError:=Errno;
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
Procedure SigSuspend(Mask:Sigset);
|
|
Procedure SigSuspend(Mask:Sigset);
|
|
{
|
|
{
|
|
Set the signal mask with Mask, and suspend the program until a signal
|
|
Set the signal mask with Mask, and suspend the program until a signal
|
|
is received.
|
|
is received.
|
|
}
|
|
}
|
|
Var
|
|
Var
|
|
- sr : SyscallRegs;
|
|
|
|
|
|
+ retval: LONGINT;
|
|
begin
|
|
begin
|
|
- sr.reg2:=mask;
|
|
|
|
- SysCall(Syscall_nr_sigsuspend,sr);
|
|
|
|
- linuxerror:=errno;
|
|
|
|
|
|
+ asm
|
|
|
|
+ push mask
|
|
|
|
+ mov $111,%eax
|
|
|
|
+ int $0x80
|
|
|
|
+ addl $4,%esp
|
|
|
|
+ mov %eax,retval
|
|
|
|
+ end;
|
|
|
|
+ checkreturnvalue(retval,retval);
|
|
|
|
+ LinuxError:=Errno;
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+{
|
|
Function Signal(Signum:Integer;Handler:SignalHandler):SignalHandler;
|
|
Function Signal(Signum:Integer;Handler:SignalHandler):SignalHandler;
|
|
{
|
|
{
|
|
Install a new handler for signal Signum.
|
|
Install a new handler for signal Signum.
|
|
The old signal handler is returned.
|
|
The old signal handler is returned.
|
|
This call does, in fact, the same as SigAction.
|
|
This call does, in fact, the same as SigAction.
|
|
}
|
|
}
|
|
-var
|
|
|
|
- sr : Syscallregs;
|
|
|
|
|
|
+
|
|
begin
|
|
begin
|
|
sr.reg2:=signum;
|
|
sr.reg2:=signum;
|
|
sr.reg3:=longint(handler);
|
|
sr.reg3:=longint(handler);
|
|
@@ -2966,7 +3009,7 @@ begin
|
|
linuxerror:=0;
|
|
linuxerror:=0;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
-
|
|
|
|
|
|
+}
|
|
|
|
|
|
procedure SigRaise(sig:integer);
|
|
procedure SigRaise(sig:integer);
|
|
begin
|
|
begin
|
|
@@ -3996,7 +4039,10 @@ End.
|
|
|
|
|
|
{
|
|
{
|
|
$Log$
|
|
$Log$
|
|
- Revision 1.1 2000-02-03 17:03:36 marco
|
|
|
|
|
|
+ Revision 1.2 2000-02-04 12:05:04 marco
|
|
|
|
+ * a few functions added.
|
|
|
|
+
|
|
|
|
+ Revision 1.1 2000/02/03 17:03:36 marco
|
|
* initial version. Ported till line +/- 2000
|
|
* initial version. Ported till line +/- 2000
|
|
|
|
|
|
|
|
|