/programs/develop/oberon07/Lib/KolibriOS/NetDevices.ob07 |
---|
File deleted |
\ No newline at end of file |
/programs/develop/oberon07/Lib/KolibriOS/API.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016, 2017 Anton Krotov |
Copyright 2016 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,11 → 166,6 |
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, 2017 Anton Krotov |
Copyright 2016 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,6 → 41,40 |
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 *) |
88,7 → 122,7 |
PROCEDURE Time*(VAR sec, dsec: INTEGER); |
VAR t: INTEGER; |
BEGIN |
t := API.sysfunc2(26, 9); |
t := sysfunc2(26, 9); |
sec := t DIV 100; |
dsec := t MOD 100 |
END Time; |
105,7 → 139,7 |
BEGIN |
Time(sec, dsec); |
Lib := API.sysfunc3(68, 19, sys.ADR("/rd/1/lib/console.obj")); |
Lib := 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"); |
121,7 → 155,7 |
IF con_exit # NIL THEN |
con_exit(FALSE) |
END; |
API.ExitProcess(0) |
n := sysfunc1(-1) |
END ExitProcess; |
PROCEDURE GetCommandLine*(): INTEGER; |
139,7 → 173,7 |
END GetName; |
PROCEDURE malloc*(size: INTEGER): INTEGER; |
RETURN API.sysfunc3(68, 12, size) |
RETURN sysfunc3(68, 12, size) |
END malloc; |
PROCEDURE CloseFile*(hObject: INTEGER); |
/programs/develop/oberon07/Lib/KolibriOS/RTL.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016, 2017 Anton Krotov |
Copyright 2016 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,7 → 28,6 |
VAR |
SelfName, rtab: INTEGER; CloseProc: PROC; |
init: BOOLEAN; |
PROCEDURE [stdcall] _halt*(n: INTEGER); |
BEGIN |
117,6 → 116,14 |
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] |
137,7 → 144,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 |
146,7 → 153,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; |
245,8 → 252,7 |
Int(code, int); |
StrAppend(int) |
END; |
API.DebugMsg(sys.ADR(msg), SelfName); |
API.ExitThread(0) |
API.DebugMsg(sys.ADR(msg), SelfName) |
END _assrt; |
PROCEDURE [stdcall] _close*; |
258,14 → 264,11 |
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,11 → 103,6 |
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, 2017 Anton Krotov |
(* |
Copyright 2016 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,7 → 28,6 |
VAR |
SelfName, rtab: INTEGER; CloseProc: PROC; |
init: BOOLEAN; |
PROCEDURE [stdcall] _halt*(n: INTEGER); |
BEGIN |
117,6 → 116,14 |
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] |
137,7 → 144,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 |
146,7 → 153,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; |
245,8 → 252,7 |
Int(code, int); |
StrAppend(int) |
END; |
API.DebugMsg(sys.ADR(msg), SelfName); |
API.ExitThread(0) |
API.DebugMsg(sys.ADR(msg), SelfName) |
END _assrt; |
PROCEDURE [stdcall] _close*; |
258,14 → 264,11 |
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 |
CloseProc := NIL; |
END _init; |
PROCEDURE SetClose*(proc: PROC); |
/programs/develop/oberon07/Lib/Windows32/API.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016, 2017 Anton Krotov |
(* |
Copyright 2016 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,8 → 25,6 |
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; |
64,8 → 62,6 |
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, 2017 Anton Krotov |
(* |
Copyright 2016 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,6 → 49,7 |
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; |
111,7 → 112,7 |
END Time; |
PROCEDURE malloc*(size: INTEGER): INTEGER; |
RETURN API.Alloc(64, size) |
RETURN Alloc(64, size) |
END malloc; |
PROCEDURE init*; |
127,8 → 128,9 |
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, 2017 Anton Krotov |
(* |
Copyright 2016 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,8 → 28,6 |
VAR |
SelfName, rtab: INTEGER; CloseProc: PROC; |
init: BOOLEAN; |
main_thread_id: INTEGER; |
PROCEDURE [stdcall] _halt*(n: INTEGER); |
BEGIN |
118,6 → 116,14 |
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] |
138,7 → 144,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 |
147,7 → 153,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; |
246,11 → 252,7 |
Int(code, int); |
StrAppend(int) |
END; |
IF API.GetCurrentThreadId() = main_thread_id THEN |
API.ExitProcess(0) |
ELSE |
API.ExitThread(0) |
END |
API.DebugMsg(sys.ADR(msg), SelfName) |
END _assrt; |
PROCEDURE [stdcall] _close*; |
262,15 → 264,11 |
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 |
END |
CloseProc := NIL; |
END _init; |
PROCEDURE SetClose*(proc: PROC); |
/programs/develop/oberon07/Compiler.kex |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/programs/develop/oberon07/Docs/About1251.txt |
---|
30,6 → 30,7 |
ïåðåäàåòñÿ. Ñîîáùåíèÿ êîìïèëÿòîðà âûâîäÿòñÿ íà êîíñîëü (Windows, |
KolibriOS), â òåðìèíàë (Linux). |
2. Ïàïêà Lib - áèáëèîòåêà ìîäóëåé |
3. Ïàïêà Source - èñõîäíûé êîä êîìïèëÿòîðà |
------------------------------------------------------------------------------ |
Îòëè÷èÿ îò îðèãèíàëà |
44,8 → 45,6 |
7. Ñåìàíòèêà DIV è MOD óòî÷íåíà äëÿ îòðèöàòåëüíûõ ÷èñåë |
8. Äîáàâëåíû îäíîñòðî÷íûå êîììåíòàðèè (íà÷èíàþòñÿ ñ ïàðû ñèìâîëîâ "//") |
9. Ðàçðåøåí ýêñïîðò ïåðåìåííûõ òèïîâ ARRAY è RECORD (òîëüêî äëÿ ÷òåíèÿ) |
10. Ðàçðåøåíî íàñëåäîâàíèå îò òèïà-óêàçàòåëÿ |
11. Äîáàâëåíû ïñåâäîíèìû òèïîâ (TYPE A = B) |
------------------------------------------------------------------------------ |
Îñîáåííîñòè ðåàëèçàöèè |
104,11 → 103,6 |
Êîïèðóåò n áàéò ïàìÿòè èç Source â Dest, |
îáëàñòè Source è Dest íå äîëæíû ïåðåêðûâàòüñÿ |
PROCEDURE COPY(VAR Source: ëþáîé òèï; VAR Dest: ëþáîé òèï; n: INTEGER) |
Êîïèðóåò n áàéò ïàìÿòè èç Source â Dest. |
Ýêâèâàëåíòíî |
SYSTEM.MOVE(SYSTEM.ADR(Source), SYSTEM.ADR(Dest), n) |
PROCEDURE CODE(s: ARRAY OF CHAR) |
Âñòàâêà ìàøèííîãî êîäà |
s - ñòðîêîâàÿ êîíñòàíòà øåñòíàäöàòèðè÷íûõ öèôð |
204,12 → 198,6 |
LSR(x, n: INTEGER): INTEGER |
Ëîãè÷åñêèé ñäâèã x íà n áèò âïðàâî. |
MIN(a, b: INTEGER): INTEGER |
Ìèíèìóì èç äâóõ çíà÷åíèé. |
MAX(a, b: INTEGER): INTEGER |
Ìàêñèìóì èç äâóõ çíà÷åíèé. |
BITS(x: INTEGER): SET |
Èíòåðïðåòèðóåò x êàê çíà÷åíèå òèïà SET. |
Âûïîëíÿåòñÿ íà ýòàïå êîìïèëÿöèè. |
865,6 → 853,4 |
MODULE RasterWorks - îáåðòêà áèáëèîòåêè Rasterworks.obj |
------------------------------------------------------------------------------ |
MODULE libimg - îáåðòêà áèáëèîòåêè libimg.obj |
------------------------------------------------------------------------------ |
MODULE NetDevices - îáåðòêà äëÿ ô.74 (ðàáîòà ñ ñåòåâûìè óñòðîéñòâàìè) |
------------------------------------------------------------------------------ |
/programs/develop/oberon07/Docs/About866.txt |
---|
30,6 → 30,7 |
¯¥à¥¤ ¥âáï. ®®¡é¥¨ï ª®¬¯¨«ïâ®à ¢ë¢®¤ïâáï ª®á®«ì (Windows, |
KolibriOS), ¢ â¥à¬¨ « (Linux). |
2. ¯ª Lib - ¡¨¡«¨®â¥ª ¬®¤ã«¥© |
3. ¯ª Source - ¨áå®¤ë© ª®¤ ª®¬¯¨«ïâ®à |
------------------------------------------------------------------------------ |
⫨ç¨ï ®â ®à¨£¨ « |
44,8 → 45,6 |
7. ¥¬ ⨪ DIV ¨ MOD ãâ®ç¥ ¤«ï ®âà¨æ ⥫ìëå ç¨á¥« |
8. ®¡ ¢«¥ë ®¤®áâà®çë¥ ª®¬¬¥â ਨ ( ç¨ îâáï á ¯ àë ᨬ¢®«®¢ "//") |
9. §à¥è¥ íªá¯®àâ ¯¥à¥¬¥ëå ⨯®¢ ARRAY ¨ RECORD (⮫쪮 ¤«ï ç⥨ï) |
10. §à¥è¥® á«¥¤®¢ ¨¥ ®â ⨯ -㪠§ ⥫ï |
11. ®¡ ¢«¥ë ¯á¥¢¤®¨¬ë ⨯®¢ (TYPE A = B) |
------------------------------------------------------------------------------ |
ᮡ¥®á⨠ॠ«¨§ 樨 |
104,11 → 103,6 |
®¯¨àã¥â n ¡ ©â ¯ ¬ï⨠¨§ Source ¢ Dest, |
®¡« á⨠Source ¨ Dest ¥ ¤®«¦ë ¯¥à¥ªàë¢ âìáï |
PROCEDURE COPY(VAR Source: «î¡®© ⨯; VAR Dest: «î¡®© ⨯; n: INTEGER) |
®¯¨àã¥â n ¡ ©â ¯ ¬ï⨠¨§ Source ¢ Dest. |
ª¢¨¢ «¥â® |
SYSTEM.MOVE(SYSTEM.ADR(Source), SYSTEM.ADR(Dest), n) |
PROCEDURE CODE(s: ARRAY OF CHAR) |
áâ ¢ª ¬ 訮£® ª®¤ |
s - áâப®¢ ï ª®áâ â è¥áâ ¤æ â¨à¨çëå æ¨äà |
204,12 → 198,6 |
LSR(x, n: INTEGER): INTEGER |
®£¨ç¥áª¨© ᤢ¨£ x n ¡¨â ¢¯à ¢®. |
MIN(a, b: INTEGER): INTEGER |
¨¨¬ã¬ ¨§ ¤¢ãå § 票©. |
MAX(a, b: INTEGER): INTEGER |
ªá¨¬ã¬ ¨§ ¤¢ãå § 票©. |
BITS(x: INTEGER): SET |
â¥à¯à¥â¨àã¥â x ª ª § 票¥ ⨯ SET. |
믮«ï¥âáï íâ ¯¥ ª®¬¯¨«ï樨. |
865,6 → 853,4 |
MODULE RasterWorks - ®¡¥à⪠¡¨¡«¨®â¥ª¨ Rasterworks.obj |
------------------------------------------------------------------------------ |
MODULE libimg - ®¡¥à⪠¡¨¡«¨®â¥ª¨ libimg.obj |
------------------------------------------------------------------------------ |
MODULE NetDevices - ®¡¥à⪠¤«ï ä.74 (à ¡®â á á¥â¥¢ë¬¨ ãáâனá⢠¬¨) |
------------------------------------------------------------------------------ |
/programs/develop/oberon07/Source/Compiler.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016, 2017 Anton Krotov |
Copyright 2016 Anton Krotov |
This file is part of Compiler. |
52,10 → 52,10 |
stABS = 1; stODD = 2; stLEN = 3; stLSL = 4; stASR = 5; stROR = 6; stFLOOR = 7; stFLT = 8; |
stORD = 9; stCHR = 10; stLONG = 11; stSHORT = 12; stINC = 13; stDEC = 14; stINCL = 15; |
stEXCL = 16; stCOPY = 17; stNEW = 18; stASSERT = 19; stPACK = 20; stUNPK = 21; stDISPOSE = 22; |
stBITS = 23; stLSR = 24; stLENGTH = 25; stMIN = 26; stMAX = 27; |
stBITS = 23; stLSR = 24; stLENGTH = 25; |
sysADR = 101; sysSIZE = 102; sysINF = 103; sysGET = 104; sysPUT = 105; |
sysCODE = 106; sysTYPEID = 107; sysMOVE = 108; sysCOPY = 109; |
sysCODE = 106; sysTYPEID = 107; sysMOVE = 108; |
TYPE |
394,9 → 394,7 |
IntType(b.T, coord); |
IF b.eType = eCONST THEN |
Assert(ASR(FLOOR(b.Value), 5) = 0, coord, 53); |
IF a.eType = eCONST THEN |
Assert(a.Value <= b.Value, coord, 54) |
END |
END; |
Load(b) |
ELSE |
617,32 → 615,6 |
Str(e1); |
e.T := inttype; |
X86.StFunc(X86.stLENGTH) |
|stMIN, stMAX: |
pExpr(e1); |
IntType(e1.T, coord); |
Load(e1); |
Check(lxComma); |
NextCoord(coord); |
pExpr(e2); |
IntType(e2.T, coord); |
Load(e2); |
IF (e1.eType = eCONST) & (e2.eType = eCONST) THEN |
a := FLOOR(e1.Value); |
b := FLOOR(e2.Value); |
CASE func OF |
|stMIN: a := MIN(a, b) |
|stMAX: a := MAX(a, b) |
ELSE |
END; |
e.Value := LONG(FLT(a)); |
e.eType := eCONST |
END; |
IF func = stMIN THEN |
X86.StFunc(X86.stMIN) |
ELSE |
X86.StFunc(X86.stMAX) |
END; |
e.T := inttype |
|sysADR: |
Assert((SCAN.tLex = lxIDENT) OR (SCAN.tLex = lxSTRING) OR (SCAN.tLex = lxCHX), coord, 43); |
IF SCAN.tLex = lxIDENT THEN |
1664,29 → 1636,12 |
Expr(e1); |
IntType(e1.T, coord); |
Load(e1); |
|sysCOPY: |
begcall := X86.current; |
Designator(e1); |
Assert(e1.eType = eVAR, coord, 63); |
Check(lxComma); |
X86.PushCall(begcall); |
X86.Param; |
NextCoord(coord); |
Designator(e1); |
Assert(e1.eType = eVAR, coord, 63); |
Assert(~e1.Read, coord, 115); |
Check(lxComma); |
X86.EndCall; |
NextCoord(coord); |
Expr(e1); |
IntType(e1.T, coord); |
Load(e1); |
ELSE |
Assert(FALSE, coord2, 132) |
END; |
Check(lxRRound); |
Next; |
IF (proc = sysMOVE) OR (proc = sysCOPY) THEN |
IF proc = sysMOVE THEN |
X86.StProc(X86.sysMOVE) |
END |
END StProc; |
1723,7 → 1678,7 |
IF s.Len = 1 THEN |
X86.Mono(s.Number) |
END; |
X86.PushConst(MIN(s.Len + 1, e1.T.Len)) |
X86.PushConst(UTILS.min(s.Len + 1, e1.T.Len)) |
END; |
X86.Save(e1.T.tType) |
ELSIF e1.eType = ePROC THEN |
/programs/develop/oberon07/Source/DECL.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016, 2017 Anton Krotov |
Copyright 2016 Anton Krotov |
This file is part of Compiler. |
43,10 → 43,10 |
stABS = 1; stODD = 2; stLEN = 3; stLSL = 4; stASR = 5; stROR = 6; stFLOOR = 7; stFLT = 8; |
stORD = 9; stCHR = 10; stLONG = 11; stSHORT = 12; stINC = 13; stDEC = 14; stINCL = 15; |
stEXCL = 16; stCOPY = 17; stNEW = 18; stASSERT = 19; stPACK = 20; stUNPK = 21; stDISPOSE = 22; |
stBITS = 23; stLSR = 24; stLENGTH = 25; stMIN = 26; stMAX = 27; |
stBITS = 23; stLSR = 24; stLENGTH = 25; |
sysADR = 101; sysSIZE = 102; sysINF = 103; sysGET = 104; sysPUT = 105; |
sysCODE = 106; sysTYPEID = 107; sysMOVE = 108; sysCOPY = 109; |
sysCODE = 106; sysTYPEID = 107; sysMOVE = 108; |
TINTEGER = 1; TREAL = 2; TLONGREAL = 3; TCHAR = 4; TSET = 5; TBOOLEAN = 6; TVOID = 7; TNIL = 8; |
TCARD16 = 9; TSTRING = 10; TARRAY = 11; TRECORD = 12; TPOINTER = 13; TPROC = 14; |
417,8 → 417,6 |
PushStProc("BITS", stBITS); |
PushStProc("LSR", stLSR); |
PushStProc("LENGTH", stLENGTH); |
PushStProc("MIN", stMIN); |
PushStProc("MAX", stMAX); |
Guard |
END StIdent; |
1056,9 → 1054,6 |
Check(lxIDENT); |
nov.Base := IdType(coord); |
Assert(nov.Base # NIL, coord, 42); |
IF (nov.Base.tType = TPOINTER) & (nov.Base.Base.tType = TRECORD) THEN |
nov.Base := nov.Base.Base |
END; |
Assert(nov.Base.tType = TRECORD, coord, 80); |
Assert(notrecurs(TRUE, nov.Base), coord, 96); |
nov.Size := nov.Base.Size; |
1199,16 → 1194,10 |
last := unit.Idents.Last(IDENT); |
Check(lxEQ); |
Next; |
IF SCAN.tLex = lxIDENT THEN |
last.T := ParseType(coord) |
ELSE |
NEW(NewType); |
MemErr(NewType = NIL); |
last.T := NewType; |
T := StructType(FALSE, NewType) |
END; |
T := StructType(FALSE, NewType); |
Check(lxSemi); |
Next |
END |
1427,7 → 1416,6 |
PushSysProc("PUT", sysPUT); |
PushSysProc("CODE", sysCODE); |
PushSysProc("MOVE", sysMOVE); |
PushSysProc("COPY", sysCOPY); |
PushSysProc("INF", sysINF); |
PushSysType("CARD16", TCARD16); |
sys := unit; |
/programs/develop/oberon07/Source/ERRORS.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016, 2017 Anton Krotov |
Copyright 2016 Anton Krotov |
This file is part of Compiler. |
200,7 → 200,7 |
| 77: str := "®¦¨¤ «áï ¨¤¥â¨ä¨ª â®à ⨯ " |
| 78: str := "¤«¨ ⨯ -¬ áᨢ ¤®«¦ ¡ëâì ¡®«ìè¥ ã«ï" |
| 79: str := "®¦¨¤ «®áì 'OF' ¨«¨ ','" |
| 80: str := "®¦¨¤ «áï ¨¤¥â¨ä¨ª â®à ⨯ -§ ¯¨á¨ ¨«¨ ⨯ -㪠§ ⥫ï" |
| 80: str := "®¦¨¤ «áï ¨¤¥â¨ä¨ª â®à ⨯ -§ ¯¨á¨" |
| 81: str := "¡ §®¢ë© ⨯ ⨯ -㪠§ â¥«ï ¤®«¦¥ ¡ëâì § ¯¨áìî" |
| 82: str := "⨯ १ã«ìâ â ¯à®æ¥¤ãàë ¥ ¬®¦¥â ¡ëâì § ¯¨áìî ¨«¨ ¬ áᨢ®¬" |
| 83: str := "à §¬¥à ⨯ ᫨誮¬ ¢¥«¨ª" |
/programs/develop/oberon07/Source/UTILS.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016, 2017 Anton Krotov |
Copyright 2016 Anton Krotov |
This file is part of Compiler. |
28,7 → 28,7 |
Ext* = ".ob07"; |
MAX_PATH = 1024; |
MAX_PARAM = 1024; |
Date* = 1509580800; (* 2017-11-02 *) |
Date* = 1451606400; (* 2016-01-01 *) |
TYPE |
199,6 → 199,14 |
Line := newLine |
END UnitLine; |
PROCEDURE min*(a, b: INTEGER): INTEGER; |
BEGIN |
IF a > b THEN |
a := b |
END |
RETURN a |
END min; |
PROCEDURE Align*(n: INTEGER): INTEGER; |
RETURN (4 - n MOD 4) MOD 4 |
END Align; |
/programs/develop/oberon07/Source/X86.ob07 |
---|
1,5 → 1,5 |
(* |
Copyright 2016, 2017 Anton Krotov |
Copyright 2016 Anton Krotov |
This file is part of Compiler. |
36,7 → 36,7 |
stDEC* = 14; stINCL* = 15; stEXCL* = 16; stCOPY* = 17; stNEW* = 18; stASSERT* = 19; |
stPACK* = 20; stUNPK* = 21; stDISPOSE* = 22; stFABS* = 23; stINC1* = 24; |
stDEC1* = 25; stASSERT1* = 26; stUNPK1* = 27; stPACK1* = 28; stLSR* = 29; |
stLENGTH* = 30; stMIN* = 31; stMAX* = 32; |
stLENGTH* = 30; |
sysMOVE* = 108; |
1232,9 → 1232,7 |
|stASR: PopECX; OutCode("58D3F8"); PushEAX |
|stLSL: PopECX; OutCode("58D3E0"); PushEAX |
|stLSR: PopECX; OutCode("58D3E8"); PushEAX |
|stORD: PopEDX; OutCode("85D274036A015A"); PushEDX; |
|stMIN: PopEDX; OutCode("3914247E025852"); |
|stMAX: PopEDX; OutCode("3B14247E025852"); |
|stORD: PopEDX; OutCode("85D274036A015A"); PushEDX |
|stLENGTH: CallRTL(_length); PushEAX |
ELSE |
END |
1271,12 → 1269,12 |
|TCHAR, TBOOLEAN: |
IF lastcmd.tcmd = ECMD THEN |
del; |
OutCode("0FB6"); |
OutCode("33D28A"); |
IntByte("55", "95", offset); |
PushEDX |
ELSE |
PopEDX; |
OutCode("0FB60A"); |
OutCode("33C98A0A"); |
PushECX |
END |
|TLONGREAL: |