/programs/develop/oberon07/Lib/KolibriOS/API.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016 Anton Krotov |
Copyright 2016, 2017 Anton Krotov |
This program is free software: you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by |
166,6 → 166,11 |
p1 := sysfunc1(-1) |
END ExitProcess; |
PROCEDURE ExitThread*(p1: INTEGER); |
BEGIN |
p1 := sysfunc1(-1) |
END ExitThread; |
PROCEDURE OutChar(c: CHAR); |
VAR res: INTEGER; |
BEGIN |
/programs/develop/oberon07/Lib/KolibriOS/HOST.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016 Anton Krotov |
Copyright 2016, 2017 Anton Krotov |
This program is free software: you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by |
41,40 → 41,6 |
fsize, sec*, dsec*: INTEGER; |
PROCEDURE [stdcall] sysfunc1(arg1: INTEGER): INTEGER; |
BEGIN |
sys.CODE("8B4508"); (* mov eax, [ebp + 08h] *) |
sys.CODE("CD40"); (* int 40h *) |
sys.CODE("C9"); (* leave *) |
sys.CODE("C20400"); (* ret 04h *) |
RETURN 0 |
END sysfunc1; |
PROCEDURE [stdcall] sysfunc2(arg1, arg2: INTEGER): INTEGER; |
BEGIN |
sys.CODE("53"); (* push ebx *) |
sys.CODE("8B4508"); (* mov eax, [ebp + 08h] *) |
sys.CODE("8B5D0C"); (* mov ebx, [ebp + 0Ch] *) |
sys.CODE("CD40"); (* int 40h *) |
sys.CODE("5B"); (* pop ebx *) |
sys.CODE("C9"); (* leave *) |
sys.CODE("C20800"); (* ret 08h *) |
RETURN 0 |
END sysfunc2; |
PROCEDURE [stdcall] sysfunc3(arg1, arg2, arg3: INTEGER): INTEGER; |
BEGIN |
sys.CODE("53"); (* push ebx *) |
sys.CODE("8B4508"); (* mov eax, [ebp + 08h] *) |
sys.CODE("8B5D0C"); (* mov ebx, [ebp + 0Ch] *) |
sys.CODE("8B4D10"); (* mov ecx, [ebp + 10h] *) |
sys.CODE("CD40"); (* int 40h *) |
sys.CODE("5B"); (* pop ebx *) |
sys.CODE("C9"); (* leave *) |
sys.CODE("C20C00"); (* ret 0Ch *) |
RETURN 0 |
END sysfunc3; |
PROCEDURE [stdcall] sysfunc22(arg1, arg2: INTEGER; VAR res2: INTEGER): INTEGER; |
BEGIN |
sys.CODE("53"); (* push ebx *) |
122,7 → 88,7 |
PROCEDURE Time*(VAR sec, dsec: INTEGER); |
VAR t: INTEGER; |
BEGIN |
t := sysfunc2(26, 9); |
t := API.sysfunc2(26, 9); |
sec := t DIV 100; |
dsec := t MOD 100 |
END Time; |
139,7 → 105,7 |
BEGIN |
Time(sec, dsec); |
Lib := sysfunc3(68, 19, sys.ADR("/rd/1/lib/console.obj")); |
Lib := API.sysfunc3(68, 19, sys.ADR("/rd/1/lib/console.obj")); |
IF Lib # 0 THEN |
GetProc(sys.ADR(con_init), "con_init"); |
GetProc(sys.ADR(con_exit), "con_exit"); |
155,7 → 121,7 |
IF con_exit # NIL THEN |
con_exit(FALSE) |
END; |
n := sysfunc1(-1) |
API.ExitProcess(0) |
END ExitProcess; |
PROCEDURE GetCommandLine*(): INTEGER; |
173,7 → 139,7 |
END GetName; |
PROCEDURE malloc*(size: INTEGER): INTEGER; |
RETURN sysfunc3(68, 12, size) |
RETURN API.sysfunc3(68, 12, size) |
END malloc; |
PROCEDURE CloseFile*(hObject: INTEGER); |
/programs/develop/oberon07/Lib/KolibriOS/NetDevices.ob07 |
---|
0,0 → 1,107 |
(* |
Copyright 2017 Anton Krotov |
This program is free software: you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by |
the Free Software Foundation, either version 3 of the License, or |
(at your option) any later version. |
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser General Public License |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
*) |
MODULE NetDevices; |
IMPORT sys := SYSTEM, K := KOSAPI; |
CONST |
//net devices types |
LOOPBACK* = 0; |
ETH* = 1; |
SLIP* = 2; |
//Link status |
LINK_DOWN* = 0; |
LINK_UNKNOWN* = 1; |
LINK_FD* = 2; //full duplex flag |
LINK_10M* = 4; |
LINK_100M* = 8; |
LINK_1G* = 12; |
TYPE |
DEVICENAME* = ARRAY 64 OF CHAR; |
PROCEDURE Number* (): INTEGER; |
RETURN K.sysfunc2(74, -1) |
END Number; |
PROCEDURE Type* (num: INTEGER): INTEGER; |
RETURN K.sysfunc2(74, num * 256) |
END Type; |
PROCEDURE Name* (num: INTEGER; VAR name: DEVICENAME): BOOLEAN; |
VAR err: BOOLEAN; |
BEGIN |
err := K.sysfunc3(74, num * 256 + 1, sys.ADR(name[0])) = -1; |
IF err THEN |
name := "" |
END |
RETURN ~err |
END Name; |
PROCEDURE Reset* (num: INTEGER): BOOLEAN; |
RETURN K.sysfunc2(74, num * 256 + 2) # -1 |
END Reset; |
PROCEDURE Stop* (num: INTEGER): BOOLEAN; |
RETURN K.sysfunc2(74, num * 256 + 3) # -1 |
END Stop; |
PROCEDURE Pointer* (num: INTEGER): INTEGER; |
RETURN K.sysfunc2(74, num * 256 + 4) |
END Pointer; |
PROCEDURE SentPackets* (num: INTEGER): INTEGER; |
RETURN K.sysfunc2(74, num * 256 + 6) |
END SentPackets; |
PROCEDURE ReceivedPackets* (num: INTEGER): INTEGER; |
RETURN K.sysfunc2(74, num * 256 + 7) |
END ReceivedPackets; |
PROCEDURE SentBytes* (num: INTEGER; VAR hValue: INTEGER): INTEGER; |
RETURN K.sysfunc22(74, num * 256 + 8, hValue) |
END SentBytes; |
PROCEDURE ReceivedBytes* (num: INTEGER; VAR hValue: INTEGER): INTEGER; |
RETURN K.sysfunc22(74, num * 256 + 9, hValue) |
END ReceivedBytes; |
PROCEDURE LinkStatus* (num: INTEGER): INTEGER; |
RETURN K.sysfunc2(74, num * 256 + 10) |
END LinkStatus; |
END NetDevices. |
/programs/develop/oberon07/Lib/KolibriOS/RTL.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016 Anton Krotov |
Copyright 2016, 2017 Anton Krotov |
This program is free software: you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by |
28,6 → 28,7 |
VAR |
SelfName, rtab: INTEGER; CloseProc: PROC; |
init: BOOLEAN; |
PROCEDURE [stdcall] _halt*(n: INTEGER); |
BEGIN |
116,14 → 117,6 |
END |
END _arrayrot; |
PROCEDURE Min(a, b: INTEGER): INTEGER; |
BEGIN |
IF a > b THEN |
a := b |
END |
RETURN a |
END Min; |
PROCEDURE [stdcall] _length*(s: ARRAY OF CHAR): INTEGER; |
BEGIN |
sys.CODE("8B4508"); // mov eax, [ebp + 08h] |
144,7 → 137,7 |
PROCEDURE [stdcall] _strcopy*(b, blen, a, alen: INTEGER); |
BEGIN |
_savearr(Min(alen, blen), a, b); |
_savearr(MIN(alen, blen), a, b); |
IF blen > alen THEN |
sys.PUT(b + alen, 0X) |
END |
153,7 → 146,7 |
PROCEDURE [stdcall] _strcmp*(op: INTEGER; b, a: ARRAY OF CHAR): BOOLEAN; |
VAR i: INTEGER; Res: BOOLEAN; |
BEGIN |
i := API.strncmp(sys.ADR(a), sys.ADR(b), Min(LEN(a), LEN(b))); |
i := API.strncmp(sys.ADR(a), sys.ADR(b), MIN(LEN(a), LEN(b))); |
IF i = 0 THEN |
i := _length(a) - _length(b) |
END; |
252,7 → 245,8 |
Int(code, int); |
StrAppend(int) |
END; |
API.DebugMsg(sys.ADR(msg), SelfName) |
API.DebugMsg(sys.ADR(msg), SelfName); |
API.ExitThread(0) |
END _assrt; |
PROCEDURE [stdcall] _close*; |
264,11 → 258,14 |
PROCEDURE [stdcall] _init*(self, rec, gsize, gadr, esp: INTEGER); |
BEGIN |
IF ~init THEN |
API.zeromem(gsize, gadr); |
init := TRUE; |
API.init(esp); |
SelfName := self; |
rtab := rec; |
CloseProc := NIL |
END |
END _init; |
PROCEDURE SetClose*(proc: PROC); |
/programs/develop/oberon07/Lib/Linux32/API.ob07 |
---|
1,4 → 1,4 |
(* |
(* |
Copyright 2016 Anton Krotov |
This program is free software: you can redistribute it and/or modify |
103,6 → 103,11 |
exit(code) |
END ExitProcess; |
PROCEDURE ExitThread* (code: INTEGER); |
BEGIN |
exit(code) |
END ExitThread; |
PROCEDURE GetProc(name: ARRAY OF CHAR; hMOD, adr: INTEGER); |
VAR H: INTEGER; |
BEGIN |
/programs/develop/oberon07/Lib/Linux32/RTL.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016 Anton Krotov |
(* |
Copyright 2016, 2017 Anton Krotov |
This program is free software: you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by |
28,6 → 28,7 |
VAR |
SelfName, rtab: INTEGER; CloseProc: PROC; |
init: BOOLEAN; |
PROCEDURE [stdcall] _halt*(n: INTEGER); |
BEGIN |
116,14 → 117,6 |
END |
END _arrayrot; |
PROCEDURE Min(a, b: INTEGER): INTEGER; |
BEGIN |
IF a > b THEN |
a := b |
END |
RETURN a |
END Min; |
PROCEDURE [stdcall] _length*(s: ARRAY OF CHAR): INTEGER; |
BEGIN |
sys.CODE("8B4508"); // mov eax, [ebp + 08h] |
144,7 → 137,7 |
PROCEDURE [stdcall] _strcopy*(b, blen, a, alen: INTEGER); |
BEGIN |
_savearr(Min(alen, blen), a, b); |
_savearr(MIN(alen, blen), a, b); |
IF blen > alen THEN |
sys.PUT(b + alen, 0X) |
END |
153,7 → 146,7 |
PROCEDURE [stdcall] _strcmp*(op: INTEGER; b, a: ARRAY OF CHAR): BOOLEAN; |
VAR i: INTEGER; Res: BOOLEAN; |
BEGIN |
i := API.strncmp(sys.ADR(a), sys.ADR(b), Min(LEN(a), LEN(b))); |
i := API.strncmp(sys.ADR(a), sys.ADR(b), MIN(LEN(a), LEN(b))); |
IF i = 0 THEN |
i := _length(a) - _length(b) |
END; |
252,7 → 245,8 |
Int(code, int); |
StrAppend(int) |
END; |
API.DebugMsg(sys.ADR(msg), SelfName) |
API.DebugMsg(sys.ADR(msg), SelfName); |
API.ExitThread(0) |
END _assrt; |
PROCEDURE [stdcall] _close*; |
264,11 → 258,14 |
PROCEDURE [stdcall] _init*(self, rec, gsize, gadr, esp: INTEGER); |
BEGIN |
IF ~init THEN |
API.zeromem(gsize, gadr); |
init := TRUE; |
API.init(esp); |
SelfName := self; |
rtab := rec; |
CloseProc := NIL; |
CloseProc := NIL |
END |
END _init; |
PROCEDURE SetClose*(proc: PROC); |
/programs/develop/oberon07/Lib/Windows32/API.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016 Anton Krotov |
(* |
Copyright 2016, 2017 Anton Krotov |
This program is free software: you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by |
25,6 → 25,8 |
Free*: PROCEDURE [winapi] (hMem: INTEGER): INTEGER; |
MessageBoxA*: PROCEDURE [winapi] (hWnd, lpText, lpCaption, uType: INTEGER): INTEGER; |
ExitProcess*: PROCEDURE [winapi] (code: INTEGER); |
ExitThread*: PROCEDURE [winapi] (code: INTEGER); |
GetCurrentThreadId*: PROCEDURE [winapi] (): INTEGER; |
strncmp*: PROCEDURE [cdecl] (a, b, n: INTEGER): INTEGER; |
GetProcAddress*: PROCEDURE [winapi] (hModule, name: INTEGER): INTEGER; |
62,6 → 64,8 |
lib := LoadLibraryA(sys.ADR("kernel32.dll")); |
GetProc("ExitProcess", lib, sys.ADR(ExitProcess)); |
GetProc("ExitThread", lib, sys.ADR(ExitThread)); |
GetProc("GetCurrentThreadId", lib, sys.ADR(GetCurrentThreadId)); |
GetProc("GlobalAlloc", lib, sys.ADR(Alloc)); |
GetProc("GlobalFree", lib, sys.ADR(Free)); |
/programs/develop/oberon07/Lib/Windows32/HOST.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016 Anton Krotov |
(* |
Copyright 2016, 2017 Anton Krotov |
This program is free software: you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by |
49,7 → 49,6 |
ReadFile, WriteFile: PROCEDURE [winapi] (hFile, Buffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped: INTEGER): INTEGER; |
GetCommandLine*: PROCEDURE [winapi] (): INTEGER; |
GetTickCount: PROCEDURE [winapi] (): INTEGER; |
Alloc: PROCEDURE [winapi] (uFlags, dwBytes: INTEGER): INTEGER; |
ExitProcess*: PROCEDURE [winapi] (code: INTEGER); |
SetFilePointer: PROCEDURE [winapi] (hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod: INTEGER): INTEGER; |
112,7 → 111,7 |
END Time; |
PROCEDURE malloc*(size: INTEGER): INTEGER; |
RETURN Alloc(64, size) |
RETURN API.Alloc(64, size) |
END malloc; |
PROCEDURE init*; |
128,9 → 127,8 |
GetProc("ReadFile", lib, sys.ADR(ReadFile)); |
GetProc("WriteFile", lib, sys.ADR(WriteFile)); |
GetProc("GetCommandLineA", lib, sys.ADR(GetCommandLine)); |
GetProc("ExitProcess", lib, sys.ADR(ExitProcess)); |
GetProc("GlobalAlloc", lib, sys.ADR(Alloc)); |
GetProc("SetFilePointer", lib, sys.ADR(SetFilePointer)); |
ExitProcess := API.ExitProcess; |
hConsoleOutput := GetStdHandle(-11) |
END init; |
/programs/develop/oberon07/Lib/Windows32/RTL.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016 Anton Krotov |
(* |
Copyright 2016, 2017 Anton Krotov |
This program is free software: you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by |
28,6 → 28,8 |
VAR |
SelfName, rtab: INTEGER; CloseProc: PROC; |
init: BOOLEAN; |
main_thread_id: INTEGER; |
PROCEDURE [stdcall] _halt*(n: INTEGER); |
BEGIN |
116,14 → 118,6 |
END |
END _arrayrot; |
PROCEDURE Min(a, b: INTEGER): INTEGER; |
BEGIN |
IF a > b THEN |
a := b |
END |
RETURN a |
END Min; |
PROCEDURE [stdcall] _length*(s: ARRAY OF CHAR): INTEGER; |
BEGIN |
sys.CODE("8B4508"); // mov eax, [ebp + 08h] |
144,7 → 138,7 |
PROCEDURE [stdcall] _strcopy*(b, blen, a, alen: INTEGER); |
BEGIN |
_savearr(Min(alen, blen), a, b); |
_savearr(MIN(alen, blen), a, b); |
IF blen > alen THEN |
sys.PUT(b + alen, 0X) |
END |
153,7 → 147,7 |
PROCEDURE [stdcall] _strcmp*(op: INTEGER; b, a: ARRAY OF CHAR): BOOLEAN; |
VAR i: INTEGER; Res: BOOLEAN; |
BEGIN |
i := API.strncmp(sys.ADR(a), sys.ADR(b), Min(LEN(a), LEN(b))); |
i := API.strncmp(sys.ADR(a), sys.ADR(b), MIN(LEN(a), LEN(b))); |
IF i = 0 THEN |
i := _length(a) - _length(b) |
END; |
252,7 → 246,11 |
Int(code, int); |
StrAppend(int) |
END; |
API.DebugMsg(sys.ADR(msg), SelfName) |
IF API.GetCurrentThreadId() = main_thread_id THEN |
API.ExitProcess(0) |
ELSE |
API.ExitThread(0) |
END |
END _assrt; |
PROCEDURE [stdcall] _close*; |
264,11 → 262,15 |
PROCEDURE [stdcall] _init*(self, rec, gsize, gadr, esp: INTEGER); |
BEGIN |
IF ~init THEN |
API.zeromem(gsize, gadr); |
init := TRUE; |
API.init(esp); |
main_thread_id := API.GetCurrentThreadId(); |
SelfName := self; |
rtab := rec; |
CloseProc := NIL; |
CloseProc := NIL |
END |
END _init; |
PROCEDURE SetClose*(proc: PROC); |