Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 9646 → Rev 9645

/programs/develop/oberon07/Compiler.kex
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/programs/develop/oberon07/lib/KolibriOS/KOSAPI.ob07
19,7 → 19,14
 
DLL_INIT: PROCEDURE [stdcall] (entry: INTEGER);
 
imp_error*: RECORD
 
proc*, lib*: STRING;
error*: INTEGER
 
END;
 
 
PROCEDURE [stdcall-] sysfunc1* (arg1: INTEGER): INTEGER;
BEGIN
SYSTEM.CODE(
169,6 → 176,7
PROCEDURE mem_commit (adr, size: INTEGER);
VAR
tmp: INTEGER;
 
BEGIN
FOR tmp := adr TO adr + size - 1 BY 4096 DO
SYSTEM.PUT(tmp, 0)
179,6 → 187,7
PROCEDURE [stdcall] malloc* (size: INTEGER): INTEGER;
VAR
ptr: INTEGER;
 
BEGIN
SYSTEM.CODE(060H); (* pusha *)
IF sysfunc2(18, 16) > ASR(size, 10) THEN
218,6 → 227,7
VAR
buf: ARRAY 1024 OF CHAR;
a: INTEGER;
 
BEGIN
a := sysfunc3(9, SYSTEM.ADR(buf), -1);
SYSTEM.GET(SYSTEM.ADR(buf) + 22, a)
228,6 → 238,7
PROCEDURE GetCommandLine* (): INTEGER;
VAR
param: INTEGER;
 
BEGIN
SYSTEM.GET(28 + AppAdr(), param)
RETURN param
237,6 → 248,7
PROCEDURE GetName* (): INTEGER;
VAR
name: INTEGER;
 
BEGIN
SYSTEM.GET(32 + AppAdr(), name)
RETURN name
264,9 → 276,11
VAR
cur, procname, adr: INTEGER;
 
 
PROCEDURE streq (str1, str2: INTEGER): BOOLEAN;
VAR
c1, c2: CHAR;
 
BEGIN
REPEAT
SYSTEM.GET(str1, c1);
278,6 → 292,7
RETURN c1 = c2
END streq;
 
 
BEGIN
adr := 0;
IF (lib # 0) & (name # "") THEN
298,6 → 313,7
PROCEDURE init (dll: INTEGER);
VAR
lib_init: INTEGER;
 
BEGIN
lib_init := GetProcAdr("lib_init", dll);
IF lib_init # 0 THEN
310,44 → 326,6
END init;
 
 
PROCEDURE OutChar* (c: CHAR);
BEGIN
sysfunc3(63, 1, ORD(c))
END OutChar;
 
 
PROCEDURE OutLn*;
BEGIN
OutChar(0DX);
OutChar(0AX)
END OutLn;
 
 
PROCEDURE OutString (s: ARRAY OF CHAR);
VAR
i: INTEGER;
BEGIN
i := 0;
WHILE (i < LEN(s)) & (s[i] # 0X) DO
OutChar(s[i]);
INC(i)
END
END OutString;
 
 
PROCEDURE imp_error (lib, proc: STRING);
BEGIN
OutString("import error: ");
IF proc = "" THEN
OutString("can't load '")
ELSE
OutString("not found '"); OutString(proc); OutString("' in '")
END;
OutString(lib);
OutString("'" + 0DX + 0AX)
END imp_error;
 
 
PROCEDURE GetStr (adr, i: INTEGER; VAR str: STRING);
VAR
c: CHAR;
359,25 → 337,38
END GetStr;
 
 
PROCEDURE [stdcall-] dll_Load* (import_table: INTEGER): INTEGER;
PROCEDURE [stdcall] dll_Load* (import_table: INTEGER): INTEGER;
CONST
path = "/sys/lib/";
VAR
imp, lib, exp, proc, pathLen: INTEGER;
imp, lib, exp, proc, res, pathLen: INTEGER;
fail, done: BOOLEAN;
procname, libname: STRING;
 
BEGIN
SYSTEM.CODE(060H); (* pusha *)
fail := FALSE;
done := FALSE;
res := 0;
libname := path;
pathLen := LENGTH(libname);
 
REPEAT
SYSTEM.GET(import_table, imp);
WHILE imp # 0 DO
IF imp # 0 THEN
SYSTEM.GET(import_table + 4, lib);
GetStr(lib, pathLen, libname);
exp := sysfunc3(68, 19, SYSTEM.ADR(libname[0]));
IF exp = 0 THEN
imp_error(libname, "")
fail := exp = 0;
ELSE
done := TRUE
END;
IF fail THEN
done := TRUE;
imp_error.proc := "";
imp_error.lib := libname;
imp_error.error := 1
END;
IF (imp # 0) & ~fail THEN
REPEAT
SYSTEM.GET(imp, proc);
IF proc # 0 THEN
384,22 → 375,25
GetStr(proc, 0, procname);
proc := GetProcAdr(procname, exp);
IF proc # 0 THEN
SYSTEM.PUT(imp, proc)
SYSTEM.PUT(imp, proc);
INC(imp, 4)
ELSE
proc := 1;
imp_error(libname, procname)
END;
INC(imp, 4)
imp_error.proc := procname;
imp_error.lib := libname;
imp_error.error := 2
END
END
UNTIL proc = 0;
init(exp)
init(exp);
INC(import_table, 8)
END
UNTIL done;
IF fail THEN
res := 1
END;
INC(import_table, 8);
SYSTEM.GET(import_table, imp);
END;
 
import_table := res;
SYSTEM.CODE(061H) (* popa *)
RETURN 0
RETURN import_table
END dll_Load;
 
 
416,6 → 410,7
PROCEDURE LoadLib* (name: ARRAY OF CHAR): INTEGER;
VAR
Lib: INTEGER;
 
BEGIN
DLL_INIT := dll_Init;
Lib := sysfunc3(68, 19, SYSTEM.ADR(name[0]));
426,10 → 421,12
END LoadLib;
 
 
PROCEDURE _init* (import_table: INTEGER);
PROCEDURE _init*;
BEGIN
DLL_INIT := dll_Init;
dll_Load(import_table)
imp_error.lib := "";
imp_error.proc := "";
imp_error.error := 0
END _init;
 
 
/programs/develop/oberon07/lib/KolibriOS/RasterWorks.ob07
71,7 → 71,7
 
// calculate amount of valid chars in UTF-8 string
// supports zero terminated string (set byteQuantity = -1)
countUTF8Z *: PROCEDURE (string, byteQuantity: INTEGER): INTEGER;
cntUTF_8 *: PROCEDURE (string, byteQuantity: INTEGER): INTEGER;
 
 
// calculate amount of chars that fits given width
113,7 → 113,7
Lib := KOSAPI.LoadLib("/sys/lib/RasterWorks.obj");
ASSERT(Lib # 0);
GetProc(Lib, sys.ADR(drawText), "drawText");
GetProc(Lib, sys.ADR(countUTF8Z), "countUTF8Z");
GetProc(Lib, sys.ADR(cntUTF_8), "cntUTF-8");
GetProc(Lib, sys.ADR(charsFit), "charsFit");
GetProc(Lib, sys.ADR(strWidth), "strWidth");
END main;
/programs/develop/oberon07/lib/KolibriOS/API.ob07
1,7 → 1,7
(*
BSD 2-Clause License
 
Copyright (c) 2018, 2020-2022, Anton Krotov
Copyright (c) 2018, 2020-2021, Anton Krotov
All rights reserved.
*)
 
36,7 → 36,7
 
CriticalSection: CRITICAL_SECTION;
 
multi: BOOLEAN;
_import*, multi: BOOLEAN;
 
base*: INTEGER;
 
226,6 → 226,19
END exit_thread;
 
 
PROCEDURE OutChar (c: CHAR);
BEGIN
K.sysfunc3(63, 1, ORD(c))
END OutChar;
 
 
PROCEDURE OutLn;
BEGIN
OutChar(0DX);
OutChar(0AX)
END OutLn;
 
 
PROCEDURE OutStr (pchar: INTEGER);
VAR
c: CHAR;
234,7 → 247,7
REPEAT
SYSTEM.GET(pchar, c);
IF c # 0X THEN
K.OutChar(c)
OutChar(c)
END;
INC(pchar)
UNTIL c = 0X
245,18 → 258,43
PROCEDURE DebugMsg* (lpText, lpCaption: INTEGER);
BEGIN
IF lpCaption # 0 THEN
K.OutLn;
OutLn;
OutStr(lpCaption);
K.OutChar(":");
K.OutLn
OutChar(":");
OutLn
END;
OutStr(lpText);
IF lpCaption # 0 THEN
K.OutLn
OutLn
END
END DebugMsg;
 
 
PROCEDURE OutString (s: ARRAY OF CHAR);
VAR
i: INTEGER;
BEGIN
i := 0;
WHILE (i < LEN(s)) & (s[i] # 0X) DO
OutChar(s[i]);
INC(i)
END
END OutString;
 
 
PROCEDURE imp_error;
BEGIN
OutString("import error: ");
IF K.imp_error.error = 1 THEN
OutString("can't load '"); OutString(K.imp_error.lib)
ELSIF K.imp_error.error = 2 THEN
OutString("not found '"); OutString(K.imp_error.proc); OutString("' in '"); OutString(K.imp_error.lib)
END;
OutString("'");
OutLn
END imp_error;
 
 
PROCEDURE init* (import_, code: INTEGER);
BEGIN
multi := FALSE;
263,7 → 301,11
base := code - SizeOfHeader;
K.sysfunc2(68, 11);
InitializeCriticalSection(CriticalSection);
K._init(import_)
K._init;
_import := (K.dll_Load(import_) = 0) & (K.imp_error.error = 0);
IF ~_import THEN
imp_error
END
END init;
 
 
/programs/develop/oberon07/lib/KolibriOS/HOST.ob07
539,7 → 539,7
 
maxreal := 1.9;
PACK(maxreal, 1023);
Console := TRUE;
Console := API._import;
IF Console THEN
con_init(-1, -1, -1, -1, SYSTEM.SADR("Oberon-07 for KolibriOS"))
END;