fpc/rtl/wasi/system.pp
nickysn d6038c5709 + implemented do_read for WASI
git-svn-id: branches/wasm@48307 -
2021-01-22 01:04:19 +00:00

181 lines
3.9 KiB
ObjectPascal

unit system;
interface
{$define FPC_IS_SYSTEM}
{$I systemh.inc}
const
LineEnding = #10;
LFNSupport = true;
DirectorySeparator = '/';
DriveSeparator = '';
ExtensionSeparator = '.';
PathSeparator = ':';
AllowDirectorySeparators : set of char = ['\','/'];
AllowDriveSeparators : set of char = [];
{ FileNameCaseSensitive and FileNameCasePreserving are defined below! }
maxExitCode = 65535;
MaxPathLen = 4096;
AllFilesMask = '*';
const
UnusedHandle = -1;
StdInputHandle = 0;
StdOutputHandle = 1;
StdErrorHandle = 2;
FileNameCaseSensitive : boolean = true;
FileNameCasePreserving: boolean = true;
CtrlZMarksEOF: boolean = false; (* #26 not considered as end of file *)
sLineBreak = LineEnding;
DefaultTextLineBreakStyle : TTextLineBreakStyle = tlbsLF;
procedure DebugWrite(const P: PChar);
procedure DebugWriteLn(const P: PChar);
procedure DebugWriteChar(Ch: Char);
procedure DebugWriteHexDigit(d: Byte);
procedure DebugWriteHexByte(b: Byte);
procedure DebugWriteHexWord(w: Word);
procedure DebugWriteHexLongWord(lw: Word);
implementation
type
P__wasi_size_t = ^__wasi_size_t;
__wasi_size_t = longint;
__wasi_fd_t = longint;
size_t = longint;
__wasi_errno_t = longint;
P__wasi_iovec_t = ^__wasi_iovec_t;
__wasi_iovec_t = record
buf: PUInt8;
buf_len: __wasi_size_t;
end;
P__wasi_ciovec_t = ^__wasi_ciovec_t;
__wasi_ciovec_t = record
buf: pointer;
buf_len: __wasi_size_t;
end;
__wasi_exitcode_t = UInt32;
function fd_write(fd: __wasi_fd_t;
iovs: P__wasi_ciovec_t;
iovs_len: size_t;
nwritten: P__wasi_size_t): __wasi_errno_t; external 'wasi_snapshot_preview1';
function fd_read(fd: __wasi_fd_t;
iovs: P__wasi_iovec_t;
iovs_len: size_t;
nread: P__wasi_size_t): __wasi_errno_t; external 'wasi_snapshot_preview1';
procedure proc_exit(rval: __wasi_exitcode_t); noreturn; external 'wasi_snapshot_preview1';
{$I system.inc}
function GetProcessID: SizeUInt;
begin
end;
Procedure Randomize;
Begin
End;
procedure System_exit;
begin
proc_exit(ExitCode);
End;
Function ParamCount: Longint;
Begin
End;
function paramstr(l: longint) : string;
begin
end;
procedure SysInitStdIO;
begin
OpenStdIO(Input,fmInput,StdInputHandle);
OpenStdIO(Output,fmOutput,StdOutputHandle);
OpenStdIO(ErrOutput,fmOutput,StdErrorHandle);
OpenStdIO(StdOut,fmOutput,StdOutputHandle);
OpenStdIO(StdErr,fmOutput,StdErrorHandle);
end;
function CheckInitialStkLen(stklen : SizeUInt) : SizeUInt;
begin
end;
procedure DebugWrite(const P: PChar);
var
our_iov: __wasi_ciovec_t;
our_nwritten: longint;
begin
our_iov.buf := P;
our_iov.buf_len := StrLen(P);
fd_write(1, @our_iov, 1, @our_nwritten);
end;
procedure DebugWriteLn(const P: PChar);
begin
DebugWrite(P);
DebugWriteChar(#10);
end;
procedure DebugWriteChar(Ch: Char);
var
CharArr: array [0..1] of Char;
begin
CharArr[0] := Ch;
CharArr[1] := #0;
DebugWrite(@CharArr);
end;
procedure DebugWriteHexDigit(d: Byte);
const
HexDigits: array [0..15] of Char = '0123456789ABCDEF';
begin
DebugWriteChar(HexDigits[d]);
end;
procedure DebugWriteHexByte(b: Byte);
begin
DebugWriteHexDigit(b shr 4);
DebugWriteHexDigit(b and 15);
end;
procedure DebugWriteHexWord(w: Word);
begin
DebugWriteHexByte(w shr 8);
DebugWriteHexByte(Byte(w));
end;
procedure DebugWriteHexLongWord(lw: Word);
begin
DebugWriteHexWord(lw shr 16);
DebugWriteHexWord(Word(lw));
end;
begin
{ To be set if this is a GUI or console application }
IsConsole := TRUE;
{$ifdef FPC_HAS_FEATURE_DYNLIBS}
{ If dynlibs feature is disabled,
IsLibrary is a constant, which can thus not be set to a value }
{ To be set if this is a library and not a program }
IsLibrary := FALSE;
{$endif def FPC_HAS_FEATURE_DYNLIBS}
{ Setup heap }
InitHeap;
SysInitExceptions;
initunicodestringmanager;
{ Setup stdin, stdout and stderr }
SysInitStdIO;
{ Reset IO Error }
InOutRes:=0;
end.