mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-10-10 05:07:23 +00:00
Update library source to V2.
This commit is contained in:
parent
4245c6e8b3
commit
7bdc53145e
46 changed files with 3141 additions and 3349 deletions
|
|
@ -1,5 +1,8 @@
|
|||
(* $Id: C.Mod,v 1.9 1999/10/03 11:46:01 ooc-devel Exp $ *)
|
||||
MODULE oocC;
|
||||
|
||||
(* ILP32 model *)
|
||||
|
||||
(* Basic data types for interfacing to C code.
|
||||
Copyright (C) 1997-1998 Michael van Acken
|
||||
|
||||
|
|
@ -18,8 +21,7 @@ MODULE oocC;
|
|||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*)
|
||||
|
||||
IMPORT
|
||||
SYSTEM;
|
||||
IMPORT SYSTEM;
|
||||
|
||||
(*
|
||||
These types are intended to be equivalent to their C counterparts.
|
||||
|
|
@ -28,39 +30,33 @@ Unix they should be fairly safe.
|
|||
*)
|
||||
|
||||
TYPE
|
||||
char* = CHAR;
|
||||
signedchar* = SHORTINT; (* signed char *)
|
||||
shortint* = INTEGER; (* short int *)
|
||||
int* = LONGINT;
|
||||
set* = SET; (* unsigned int, used as set *)
|
||||
longint* = LONGINT; (* long int *)
|
||||
(*longset* = SYSTEM.SET64; *) (* unsigned long, used as set *)
|
||||
longset* = SET;
|
||||
address* = LONGINT;
|
||||
float* = REAL;
|
||||
double* = LONGREAL;
|
||||
char* = CHAR; (* 8 bits *)
|
||||
signedchar* = SHORTINT; (* 8 bits *)
|
||||
shortint* = RECORD a,b: SYSTEM.BYTE END; (* 16 bits *)
|
||||
int* = LONGINT; (* 32 bits *)
|
||||
set* = LONGINT; (* 32 bits *)
|
||||
longint* = LONGINT; (* 32 bits on ILP32 (64 bits is 'long long') *)
|
||||
(*longset* = SET; n/a *) (* 64 bit SET *)
|
||||
address* = LONGINT; (* 32 bits *)
|
||||
float* = REAL; (* 32 bits *)
|
||||
double* = LONGREAL; (* 64 bits *)
|
||||
|
||||
enum1* = int;
|
||||
enum2* = int;
|
||||
enum4* = int;
|
||||
|
||||
(* if your C compiler uses short enumerations, you'll have to replace the
|
||||
declarations above with
|
||||
enum1* = SHORTINT;
|
||||
enum2* = INTEGER;
|
||||
enum4* = LONGINT;
|
||||
(*
|
||||
enum2* = int;
|
||||
enum4* = int;
|
||||
*)
|
||||
|
||||
FILE* = address; (* this is acually a replacement for `FILE*', i.e., for a pointer type *)
|
||||
sizet* = longint;
|
||||
uidt* = int;
|
||||
gidt* = int;
|
||||
FILE* = address; (* this is acually a replacement for `FILE*', i.e., for a pointer type *)
|
||||
sizet* = longint; (* 32 bits in i686 *)
|
||||
uidt* = int;
|
||||
gidt* = int;
|
||||
|
||||
|
||||
TYPE (* some commonly used C array types *)
|
||||
charPtr1d* = POINTER TO ARRAY OF char;
|
||||
charPtr2d* = POINTER TO ARRAY OF charPtr1d;
|
||||
intPtr1d* = POINTER TO ARRAY OF int;
|
||||
intPtr1d* = POINTER TO ARRAY OF int;
|
||||
|
||||
TYPE (* C string type, assignment compatible with character arrays and
|
||||
string constants *)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
(* $Id: C.Mod,v 1.9 1999/10/03 11:46:01 ooc-devel Exp $ *)
|
||||
MODULE oocC;
|
||||
|
||||
(* LP64 model *)
|
||||
|
||||
(* Basic data types for interfacing to C code.
|
||||
Copyright (C) 1997-1998 Michael van Acken
|
||||
|
||||
|
|
@ -18,8 +21,7 @@ MODULE oocC;
|
|||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*)
|
||||
|
||||
IMPORT
|
||||
SYSTEM;
|
||||
IMPORT SYSTEM;
|
||||
|
||||
(*
|
||||
These types are intended to be equivalent to their C counterparts.
|
||||
|
|
@ -28,42 +30,37 @@ Unix they should be fairly safe.
|
|||
*)
|
||||
|
||||
TYPE
|
||||
char* = CHAR;
|
||||
signedchar* = SHORTINT; (* signed char *)
|
||||
shortint* = RECORD a,b : SYSTEM.BYTE END; (* 2 bytes on x64_64 *) (* short int *)
|
||||
int* = INTEGER;
|
||||
set* = INTEGER;(*SET;*) (* unsigned int, used as set *)
|
||||
longint* = LONGINT; (* long int *)
|
||||
longset* = SET; (*SYSTEM.SET64; *) (* unsigned long, used as set *)
|
||||
address* = LONGINT; (*SYSTEM.ADDRESS;*)
|
||||
float* = REAL;
|
||||
double* = LONGREAL;
|
||||
char* = CHAR; (* 8 bits *)
|
||||
signedchar* = SHORTINT; (* 8 bits *)
|
||||
shortint* = RECORD a,b: SYSTEM.BYTE END; (* 16 bits *)
|
||||
int* = INTEGER; (* 32 bits *)
|
||||
set* = INTEGER; (* 32 bits *)
|
||||
longint* = INTEGER; (* 32 bits *)
|
||||
longset* = SET; (* 64 bits *)
|
||||
address* = LONGINT; (* 64 bits *)
|
||||
float* = REAL; (* 32 bits *)
|
||||
double* = LONGREAL; (* 64 bits *)
|
||||
|
||||
enum1* = int;
|
||||
enum2* = int;
|
||||
enum4* = int;
|
||||
|
||||
(* if your C compiler uses short enumerations, you'll have to replace the
|
||||
declarations above with
|
||||
enum1* = SHORTINT;
|
||||
enum2* = INTEGER;
|
||||
enum4* = LONGINT;
|
||||
(*
|
||||
enum2* = int;
|
||||
enum4* = int;
|
||||
*)
|
||||
|
||||
FILE* = address; (* this is acually a replacement for `FILE*', i.e., for a pointer type *)
|
||||
FILE* = address; (* this is acually a replacement for `FILE*', i.e., for a pointer type *)
|
||||
sizet* = longint;
|
||||
uidt* = int;
|
||||
gidt* = int;
|
||||
uidt* = int;
|
||||
gidt* = int;
|
||||
|
||||
|
||||
TYPE (* some commonly used C array types *)
|
||||
charPtr1d* = POINTER TO ARRAY OF char;
|
||||
charPtr2d* = POINTER TO ARRAY OF charPtr1d;
|
||||
intPtr1d* = POINTER TO ARRAY OF int;
|
||||
intPtr1d* = POINTER TO ARRAY OF int;
|
||||
|
||||
TYPE (* C string type, assignment compatible with character arrays and
|
||||
string constants *)
|
||||
string* = POINTER (*[CSTRING]*) TO ARRAY OF char;
|
||||
string* = POINTER TO ARRAY OF char;
|
||||
|
||||
TYPE
|
||||
Proc* = PROCEDURE;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
(* $Id: C.Mod,v 1.9 1999/10/03 11:46:01 ooc-devel Exp $ *)
|
||||
MODULE oocC;
|
||||
|
||||
(* LP64 model *)
|
||||
|
||||
(* Basic data types for interfacing to C code.
|
||||
Copyright (C) 1997-1998 Michael van Acken
|
||||
|
||||
|
|
@ -18,8 +21,7 @@ MODULE oocC;
|
|||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*)
|
||||
|
||||
IMPORT
|
||||
SYSTEM;
|
||||
IMPORT SYSTEM;
|
||||
|
||||
(*
|
||||
These types are intended to be equivalent to their C counterparts.
|
||||
|
|
@ -28,42 +30,37 @@ Unix they should be fairly safe.
|
|||
*)
|
||||
|
||||
TYPE
|
||||
char* = CHAR;
|
||||
signedchar* = SHORTINT; (* signed char *)
|
||||
shortint* = RECORD a,b : SYSTEM.BYTE END; (* 2 bytes on x64_64 *) (* short int *)
|
||||
int* = INTEGER;
|
||||
set* = INTEGER;(*SET;*) (* unsigned int, used as set *)
|
||||
longint* = LONGINT; (* long int *)
|
||||
longset* = SET; (*SYSTEM.SET64; *) (* unsigned long, used as set *)
|
||||
address* = LONGINT; (*SYSTEM.ADDRESS;*)
|
||||
float* = REAL;
|
||||
double* = LONGREAL;
|
||||
char* = CHAR; (* 8 bits *)
|
||||
signedchar* = SHORTINT; (* 8 bits *)
|
||||
shortint* = RECORD a,b: SYSTEM.BYTE END; (* 16 bits *)
|
||||
int* = INTEGER; (* 32 bits *)
|
||||
set* = INTEGER; (* 32 bits *)
|
||||
longint* = LONGINT; (* 64 bits *)
|
||||
longset* = SET; (* 64 bits *)
|
||||
address* = LONGINT; (* 64 bits *)
|
||||
float* = REAL; (* 32 bits *)
|
||||
double* = LONGREAL; (* 64 bits *)
|
||||
|
||||
enum1* = int;
|
||||
enum2* = int;
|
||||
enum4* = int;
|
||||
|
||||
(* if your C compiler uses short enumerations, you'll have to replace the
|
||||
declarations above with
|
||||
enum1* = SHORTINT;
|
||||
enum2* = INTEGER;
|
||||
enum4* = LONGINT;
|
||||
(*
|
||||
enum2* = int;
|
||||
enum4* = int;
|
||||
*)
|
||||
|
||||
FILE* = address; (* this is acually a replacement for `FILE*', i.e., for a pointer type *)
|
||||
FILE* = address; (* this is acually a replacement for `FILE*', i.e., for a pointer type *)
|
||||
sizet* = longint;
|
||||
uidt* = int;
|
||||
gidt* = int;
|
||||
uidt* = int;
|
||||
gidt* = int;
|
||||
|
||||
|
||||
TYPE (* some commonly used C array types *)
|
||||
charPtr1d* = POINTER TO ARRAY OF char;
|
||||
charPtr2d* = POINTER TO ARRAY OF charPtr1d;
|
||||
intPtr1d* = POINTER TO ARRAY OF int;
|
||||
intPtr1d* = POINTER TO ARRAY OF int;
|
||||
|
||||
TYPE (* C string type, assignment compatible with character arrays and
|
||||
string constants *)
|
||||
string* = POINTER (*[CSTRING]*) TO ARRAY OF char;
|
||||
string* = POINTER TO ARRAY OF char;
|
||||
|
||||
TYPE
|
||||
Proc* = PROCEDURE;
|
||||
|
|
|
|||
|
|
@ -162,6 +162,7 @@ BEGIN
|
|||
ELSE
|
||||
RETURN strWrongFormat;
|
||||
END;
|
||||
ELSE (* Ignore unrecognised class *)
|
||||
END;
|
||||
prev:=class; INC(index)
|
||||
END;
|
||||
|
|
|
|||
|
|
@ -231,6 +231,7 @@ BEGIN
|
|||
IF decExp THEN DEC(nexp) END;
|
||||
END
|
||||
| Conv.invalid, Conv.terminator: EXIT
|
||||
ELSE (* Ignore unrecognised class *)
|
||||
END;
|
||||
prev:=class; INC(index)
|
||||
END;
|
||||
|
|
@ -285,6 +286,7 @@ BEGIN
|
|||
IF decExp THEN DEC(nexp) END;
|
||||
END
|
||||
| Conv.invalid, Conv.terminator: EXIT
|
||||
ELSE (* Ignore unrecognised class *)
|
||||
END;
|
||||
prev:=class; INC(index)
|
||||
END;
|
||||
|
|
|
|||
|
|
@ -182,6 +182,7 @@ BEGIN
|
|||
IF decExp THEN DEC(nexp) END;
|
||||
END
|
||||
| Conv.invalid, Conv.terminator: EXIT
|
||||
ELSE (* Ignore unrecognised class *)
|
||||
END;
|
||||
prev:=class; INC(index)
|
||||
END;
|
||||
|
|
@ -254,6 +255,7 @@ BEGIN
|
|||
IF decExp THEN DEC(nexp) END;
|
||||
END
|
||||
| Conv.invalid, Conv.terminator: EXIT
|
||||
ELSE (* Ignore unrecognised class *)
|
||||
END;
|
||||
prev:=class; INC(index)
|
||||
END;
|
||||
|
|
|
|||
|
|
@ -1,78 +1,67 @@
|
|||
MODULE oocRts; (* module is written from scratch by noch to wrap around Unix.Mod and Args.Mod and provide compatibility for some ooc libraries *)
|
||||
IMPORT Args, Unix, Files, Strings := oocStrings(*, Console*);
|
||||
IMPORT Args, Platform, Files, Strings := oocStrings(*, Console*);
|
||||
CONST
|
||||
pathSeperator* = "/";
|
||||
|
||||
VAR i : INTEGER;
|
||||
b : BOOLEAN;
|
||||
str0 : ARRAY 128 OF CHAR;
|
||||
VAR
|
||||
i: INTEGER;
|
||||
b: BOOLEAN;
|
||||
str0: ARRAY 128 OF CHAR;
|
||||
|
||||
PROCEDURE System* (command : ARRAY OF CHAR) : INTEGER;
|
||||
(* Executes `command' as a shell command. Result is the value returned by
|
||||
the libc `system' function. *)
|
||||
BEGIN
|
||||
RETURN Unix.System(command)
|
||||
|
||||
END System;
|
||||
BEGIN RETURN Platform.System(command) END System;
|
||||
|
||||
PROCEDURE GetEnv* (VAR var: ARRAY OF CHAR; name: ARRAY OF CHAR): BOOLEAN;
|
||||
(* If an environment variable `name' exists, copy its value into `var' and
|
||||
return TRUE. Otherwise return FALSE. *)
|
||||
BEGIN
|
||||
RETURN Args.getEnv(name, var);
|
||||
END GetEnv;
|
||||
BEGIN RETURN Platform.getEnv(name, var) END GetEnv;
|
||||
|
||||
|
||||
PROCEDURE GetUserHome* (VAR home: ARRAY OF CHAR; user: ARRAY OF CHAR);
|
||||
(* Get the user's home directory path (stored in /etc/passwd)
|
||||
or the current user's home directory if user="". *)
|
||||
VAR
|
||||
f : Files.File;
|
||||
r : Files.Rider;
|
||||
str, str1 : ARRAY 1024 OF CHAR;
|
||||
found, found1 : BOOLEAN;
|
||||
p, p1, p2 : INTEGER;
|
||||
f : Files.File;
|
||||
r : Files.Rider;
|
||||
str, str1 : ARRAY 1024 OF CHAR;
|
||||
found, found1 : BOOLEAN;
|
||||
p, p1, p2 : INTEGER;
|
||||
BEGIN
|
||||
f := Files.Old("/etc/passwd");
|
||||
Files.Set(r, f, 0);
|
||||
|
||||
REPEAT
|
||||
Files.ReadLine(r, str);
|
||||
|
||||
(* Console.String(str); Console.Ln;*)
|
||||
|
||||
Strings.Extract(str, 0, SHORT(LEN(user)-1), str1);
|
||||
(* Console.String(str1); Console.Ln;*)
|
||||
|
||||
IF Strings.Equal(user, str1) THEN found := TRUE END;
|
||||
|
||||
UNTIL found OR r.eof;
|
||||
|
||||
IF found THEN
|
||||
found1 := FALSE;
|
||||
Strings.FindNext(":", str, SHORT(LEN(user)), found1, p); p2 := p + 1;
|
||||
Strings.FindNext(":", str, p2, found1, p); p2 := p + 1;
|
||||
Strings.FindNext(":", str, p2, found1, p); p2 := p + 1;
|
||||
Strings.FindNext(":", str, p2, found1, p); p2 := p + 1;
|
||||
Strings.FindNext(":", str, p2, found1, p1);
|
||||
Strings.Extract(str,p+1,p1-p-1, home);
|
||||
(*Console.String(home); Console.Ln;*)
|
||||
ELSE
|
||||
(* current user's home *)
|
||||
found1 := GetEnv(home, "HOME");
|
||||
(*Console.String("not found"); Console.Ln; Console.String (home); Console.Ln;*)
|
||||
END
|
||||
f := Files.Old("/etc/passwd");
|
||||
Files.Set(r, f, 0);
|
||||
|
||||
REPEAT
|
||||
Files.ReadLine(r, str);
|
||||
(* Console.String(str); Console.Ln;*)
|
||||
Strings.Extract(str, 0, SHORT(LEN(user)-1), str1);
|
||||
(* Console.String(str1); Console.Ln;*)
|
||||
found := Strings.Equal(user, str1)
|
||||
UNTIL found OR r.eof;
|
||||
|
||||
IF found THEN
|
||||
found1 := FALSE;
|
||||
Strings.FindNext(":", str, SHORT(LEN(user)), found1, p); p2 := p + 1;
|
||||
Strings.FindNext(":", str, p2, found1, p); p2 := p + 1;
|
||||
Strings.FindNext(":", str, p2, found1, p); p2 := p + 1;
|
||||
Strings.FindNext(":", str, p2, found1, p); p2 := p + 1;
|
||||
Strings.FindNext(":", str, p2, found1, p1);
|
||||
Strings.Extract(str,p+1,p1-p-1, home);
|
||||
(*Console.String(home); Console.Ln;*)
|
||||
ELSE
|
||||
(* current user's home *)
|
||||
found1 := GetEnv(home, "HOME");
|
||||
(*Console.String("not found"); Console.Ln; Console.String (home); Console.Ln;*)
|
||||
END
|
||||
END GetUserHome;
|
||||
|
||||
BEGIN
|
||||
(* test *)
|
||||
(*
|
||||
i := System("ls");
|
||||
b := GetEnv(str0, "HOME");
|
||||
IF b THEN Console.String(str0); Console.Ln END;
|
||||
|
||||
GetUserHome(str0, "noch");
|
||||
*)
|
||||
(* test *)
|
||||
(*
|
||||
i := System("ls");
|
||||
b := GetEnv(str0, "HOME");
|
||||
IF b THEN Console.String(str0); Console.Ln END;
|
||||
GetUserHome(str0, "noch");
|
||||
*)
|
||||
END oocRts.
|
||||
|
|
|
|||
|
|
@ -1,110 +1,15 @@
|
|||
MODULE oocSysClock;
|
||||
IMPORT Unix;
|
||||
IMPORT SYSTEM, Platform;
|
||||
|
||||
CONST
|
||||
maxSecondParts* = 999; (* Most systems have just millisecond accuracy *)
|
||||
|
||||
zoneMin* = -780; (* time zone minimum minutes *)
|
||||
zoneMax* = 720; (* time zone maximum minutes *)
|
||||
|
||||
localTime* = MIN(INTEGER); (* time zone is inactive & time is local *)
|
||||
unknownZone* = localTime+1; (* time zone is unknown *)
|
||||
|
||||
(* daylight savings mode values *)
|
||||
unknown* = -1; (* current daylight savings status is unknown *)
|
||||
inactive* = 0; (* daylight savings adjustments are not in effect *)
|
||||
active* = 1; (* daylight savings adjustments are being used *)
|
||||
|
||||
TYPE
|
||||
(* The DateTime type is a system-independent time format whose fields
|
||||
are defined as follows:
|
||||
|
||||
year > 0
|
||||
month = 1 .. 12
|
||||
day = 1 .. 31
|
||||
hour = 0 .. 23
|
||||
minute = 0 .. 59
|
||||
second = 0 .. 59
|
||||
fractions = 0 .. maxSecondParts
|
||||
zone = -780 .. 720
|
||||
*)
|
||||
DateTime* =
|
||||
RECORD
|
||||
year*: INTEGER;
|
||||
month*: SHORTINT;
|
||||
day*: SHORTINT;
|
||||
hour*: SHORTINT;
|
||||
minute*: SHORTINT;
|
||||
second*: SHORTINT;
|
||||
summerTimeFlag*: SHORTINT; (* daylight savings mode (see above) *)
|
||||
fractions*: INTEGER; (* parts of a second in milliseconds *)
|
||||
zone*: INTEGER; (* Time zone differential factor which
|
||||
is the number of minutes to add to
|
||||
local time to obtain UTC or is set
|
||||
to localTime when time zones are
|
||||
inactive. *)
|
||||
END;
|
||||
|
||||
|
||||
PROCEDURE CanGetClock*(): BOOLEAN;
|
||||
(* Returns TRUE if a system clock can be read; FALSE otherwise. *)
|
||||
VAR timeval: Unix.Timeval; timezone: Unix.Timezone;
|
||||
l : LONGINT;
|
||||
BEGIN
|
||||
l := Unix.Gettimeofday(timeval, timezone);
|
||||
IF l = 0 THEN RETURN TRUE ELSE RETURN FALSE END
|
||||
END CanGetClock;
|
||||
(*
|
||||
PROCEDURE CanSetClock*(): BOOLEAN;
|
||||
(* Returns TRUE if a system clock can be set; FALSE otherwise. *)
|
||||
*)
|
||||
(*
|
||||
PROCEDURE IsValidDateTime* (d: DateTime): BOOLEAN;
|
||||
(* Returns TRUE if the value of `d' represents a valid date and time;
|
||||
FALSE otherwise. *)
|
||||
*)
|
||||
|
||||
|
||||
(*
|
||||
PROCEDURE SetClock* (userData: DateTime);
|
||||
(* If possible, sets the system clock to the values of `userData'. *)
|
||||
*)
|
||||
(*
|
||||
PROCEDURE MakeLocalTime * (VAR c: DateTime);
|
||||
(* Fill in the daylight savings mode and time zone for calendar date `c'.
|
||||
The fields `zone' and `summerTimeFlag' given in `c' are ignored, assuming
|
||||
that the rest of the record describes a local time.
|
||||
Note 1: On most Unix systems the time zone information is only available for
|
||||
dates falling within approx. 1 Jan 1902 to 31 Dec 2037. Outside this range
|
||||
the field `zone' will be set to the unspecified `localTime' value (see
|
||||
above), and `summerTimeFlag' will be set to `unknown'.
|
||||
Note 2: The time zone information might not be fully accurate for past (and
|
||||
future) years that apply different DST rules than the current year.
|
||||
Usually the current set of rules is used for _all_ years between 1902 and
|
||||
2037.
|
||||
Note 3: With DST there is one hour in the year that happens twice: the
|
||||
hour after which the clock is turned back for a full hour. It is undefined
|
||||
which time zone will be selected for dates refering to this hour, i.e.
|
||||
whether DST or normal time zone will be chosen. *)
|
||||
*)
|
||||
PROCEDURE CanGetClock*(): BOOLEAN; BEGIN RETURN TRUE END CanGetClock;
|
||||
|
||||
PROCEDURE GetTimeOfDay* (VAR sec, usec: LONGINT): LONGINT;
|
||||
(* PRIVAT. Don't use this. Take Time.GetTime instead.
|
||||
Equivalent to the C function `gettimeofday'. The return value is `0' on
|
||||
success and `-1' on failure; in the latter case `sec' and `usec' are set to
|
||||
zero. *)
|
||||
VAR timeval: Unix.Timeval; timezone: Unix.Timezone;
|
||||
l : LONGINT;
|
||||
BEGIN
|
||||
l := Unix.Gettimeofday (timeval, timezone);
|
||||
IF l = 0 THEN
|
||||
sec := timeval.sec;
|
||||
usec := timeval.usec;
|
||||
ELSE
|
||||
sec := 0;
|
||||
usec := 0;
|
||||
END;
|
||||
RETURN l;
|
||||
Platform.GetTimeOfDay(sec, usec); RETURN 0;
|
||||
END GetTimeOfDay;
|
||||
|
||||
END oocSysClock.
|
||||
|
|
|
|||
23
src/library/ooc/oocwrapperlibc.Mod
Executable file
23
src/library/ooc/oocwrapperlibc.Mod
Executable file
|
|
@ -0,0 +1,23 @@
|
|||
MODULE oocwrapperlibc;
|
||||
IMPORT SYSTEM, Platform;
|
||||
|
||||
|
||||
PROCEDURE -includeStdio() "#include <stdio.h>";
|
||||
|
||||
PROCEDURE system*(cmd : ARRAY OF CHAR);
|
||||
VAR r: INTEGER;
|
||||
BEGIN
|
||||
r := Platform.System(cmd)
|
||||
END system;
|
||||
|
||||
|
||||
PROCEDURE -sprntf(s, t0, t1, t2: ARRAY OF CHAR): INTEGER
|
||||
"sprintf((char*)s, (char*)t0, (char*)t1, (char*)t2)";
|
||||
|
||||
PROCEDURE sprintf*(VAR s: ARRAY OF CHAR; template0: ARRAY OF CHAR; template1: ARRAY OF CHAR; template2: ARRAY OF CHAR);
|
||||
VAR r : INTEGER;
|
||||
BEGIN
|
||||
r := sprntf(s, template0, template1, template2);
|
||||
END sprintf;
|
||||
|
||||
END oocwrapperlibc.
|
||||
Loading…
Add table
Add a link
Reference in a new issue