mirror of
https://github.com/AntKrotov/oberon-07-compiler.git
synced 2026-10-05 17:54:31 +00:00
81 lines
1.4 KiB
Plaintext
81 lines
1.4 KiB
Plaintext
(*
|
|
BSD 2-Clause License
|
|
|
|
Copyright (c) 2019, Anton Krotov
|
|
All rights reserved.
|
|
*)
|
|
|
|
MODULE LINAPI;
|
|
|
|
IMPORT API, SYSTEM;
|
|
|
|
|
|
CONST
|
|
|
|
SIZE_OF_DWORD = 4;
|
|
|
|
|
|
VAR
|
|
|
|
argc*, envc*, libc*: INTEGER;
|
|
|
|
|
|
PROCEDURE dlopen* (filename: ARRAY OF CHAR): INTEGER;
|
|
RETURN API.dlopen(SYSTEM.ADR(filename[0]), 1)
|
|
END dlopen;
|
|
|
|
|
|
PROCEDURE dlsym* (handle: INTEGER; symbol: ARRAY OF CHAR): INTEGER;
|
|
RETURN API.dlsym(handle, SYSTEM.ADR(symbol[0]))
|
|
END dlsym;
|
|
|
|
|
|
PROCEDURE GetArg* (n: INTEGER; VAR s: ARRAY OF CHAR);
|
|
VAR
|
|
i, len, ptr: INTEGER;
|
|
c: CHAR;
|
|
|
|
BEGIN
|
|
i := 0;
|
|
len := LEN(s) - 1;
|
|
IF (0 <= n) & (n <= argc + envc) & (n # argc) & (len > 0) THEN
|
|
SYSTEM.GET(API.MainParam + (n + 1) * SIZE_OF_DWORD, ptr);
|
|
REPEAT
|
|
SYSTEM.GET(ptr, c);
|
|
s[i] := c;
|
|
INC(i);
|
|
INC(ptr)
|
|
UNTIL (c = 0X) OR (i = len)
|
|
END;
|
|
s[i] := 0X
|
|
END GetArg;
|
|
|
|
|
|
PROCEDURE GetEnv* (n: INTEGER; VAR s: ARRAY OF CHAR);
|
|
BEGIN
|
|
IF (0 <= n) & (n < envc) THEN
|
|
GetArg(n + argc + 1, s)
|
|
ELSE
|
|
s[0] := 0X
|
|
END
|
|
END GetEnv;
|
|
|
|
|
|
PROCEDURE init;
|
|
VAR
|
|
ptr: INTEGER;
|
|
|
|
BEGIN
|
|
libc := API.libc;
|
|
envc := -1;
|
|
SYSTEM.GET(API.MainParam, argc);
|
|
REPEAT
|
|
SYSTEM.GET(API.MainParam + (envc + argc + 3) * SIZE_OF_DWORD, ptr);
|
|
INC(envc)
|
|
UNTIL ptr = 0
|
|
END init;
|
|
|
|
|
|
BEGIN
|
|
init
|
|
END LINAPI. |