Subversion Repositories Kolibri OS

Rev

Rev 7209 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.         Êîìïèëÿòîð ÿçûêà ïðîãðàììèðîâàíèÿ Oberon-07/16 äëÿ i486
  2.                 Windows/Linux/KolibriOS.
  3. ------------------------------------------------------------------------------
  4.  
  5.         Ïàðàìåòðû êîìàíäíîé ñòðîêè
  6.  
  7.   Âõîä - òåêñòîâûå ôàéëû ìîäóëåé ñ ðàñøèðåíèåì ".ob07", êîäèðîâêà ANSI èëè
  8. UTF-8 ñ BOM-ñèãíàòóðîé.
  9.   Âûõîä - èñïîíÿåìûé ôàéë ôîðìàòà PE32, ELF èëè MENUET01/MSCOFF.
  10.   Ïàðàìåòðû:
  11.   1) èìÿ ãëàâíîãî ìîäóëÿ
  12.   2) èìÿ ðåçóëüòèðóþùåãî ôàéëà
  13.   3) òèï ïðèëîæåíèÿ è ïëàòôîðìà
  14.       "console" - Windows console
  15.       "gui" - Windows GUI
  16.       "dll" - Windows DLL
  17.       "kos" - KolibriOS
  18.       "obj" - KolibriOS DLL
  19.       "elfexe" - Linux ELF-EXEC
  20.   4) íåîáÿçàòåëüíûå ïàðàìåòðû-êëþ÷è
  21.       -stk <size> ðàçìåð ñòýêà â ìåãàáàéòàõ (ïî óìîë÷àíèþ 2 Ìá)
  22.       -base <address> àäðåñ çàãðóçêè èñïîëíÿåìîãî ôàéëà â êèëîáàéòàõ
  23.       -ver <major.minor> âåðñèÿ ïðîãðàììû (òîëüêî äëÿ obj)
  24.       -nochk <"ptibcwra"> îòêëþ÷èòü ïðîâåðêè ïðè âûïîëíåíèè (ñì. íèæå)
  25.  
  26.       ïàðàìåòð -nochk çàäàåòñÿ â âèäå ñòðîêè èç ñèìâîëîâ:
  27.       "p" - óêàçàòåëè
  28.       "t" - òèïû
  29.       "i" - èíäåêñû
  30.       "b" - íåÿâíîå ïðèâåäåíèå INTEGER ê BYTE
  31.       "c" - äèàïàçîí àðãóìåíòà ôóíêöèè CHR
  32.       "w" - äèàïàçîí àðãóìåíòà ôóíêöèè WCHR
  33.       "r" - ýêâèâàëåíòíî "bcw"
  34.       "a" - âñå ïðîâåðêè
  35.  
  36.       Ïîðÿäîê ñèìâîëîâ ìîæåò áûòü ëþáûì. Íàëè÷èå â ñòðîêå òîãî èëè èíîãî
  37.       ñèìâîëà îòêëþ÷àåò ñîîòâåòñòâóþùóþ ïðîâåðêó.
  38.  
  39.       Íàïðèìåð: -nochk it - îòêëþ÷èòü ïðîâåðêó èíäåêñîâ è îõðàíó òèïà.
  40.       -nochk a - îòêëþ÷èòü âñå îòêëþ÷àåìûå ïðîâåðêè.
  41.  
  42.   Íàïðèìåð:
  43.  
  44.   Compiler.exe "C:\example.ob07" "C:\example.exe" console -stk 1
  45.   Compiler.exe "C:\example.ob07" "C:\example.dll" dll
  46.   Compiler.exe "C:\example.ob07" "C:\example.exe" gui -stk 4
  47.   Compiler.exe "C:\example.ob07" "C:\example.exe" console -nochk pti
  48.   Compiler.kex "/tmp0/1/example.ob07" "/tmp0/1/example.kex" kos -stk 2
  49.   Compiler.kex "/tmp0/1/example.ob07" "/tmp0/1/example.obj" obj -ver 2.7
  50.   Compiler.exe "C:\example.ob07" "C:\example" elfexe
  51.  
  52.    ñëó÷àå óñïåøíîé êîìïèëÿöèè, êîìïèëÿòîð ïåðåäàåò êîä çàâåðøåíèÿ 0, èíà÷å 1.
  53. Ïðè ðàáîòå êîìïèëÿòîðà â KolibriOS, êîä çàâåðøåíèÿ íå ïåðåäàåòñÿ.
  54.  
  55. ------------------------------------------------------------------------------
  56.         Îòëè÷èÿ îò îðèãèíàëà
  57.  
  58. 1.      Ðàñøèðåí ïñåâäîìîäóëü SYSTEM
  59. 2.      Â èäåíòèôèêàòîðàõ äîïóñêàåòñÿ ñèìâîë "_"
  60. 3.      Äîáàâëåíû ñèñòåìíûå ôëàãè
  61. 4.      Óñîâåðøåíñòâîâàí îïåðàòîð CASE (äîáàâëåíû êîíñòàíòíûå âûðàæåíèÿ â
  62.         ìåòêàõ âàðèàíòîâ è íåîáÿçàòåëüíàÿ âåòêà ELSE)
  63. 5.      Ðàñøèðåí íàáîð ñòàíäàðòíûõ ïðîöåäóð
  64. 6.      Ñåìàíòèêà îõðàíû/ïðîâåðêè òèïà óòî÷íåíà äëÿ íóëåâîãî óêàçàòåëÿ
  65. 7.      Ñåìàíòèêà DIV è MOD óòî÷íåíà äëÿ îòðèöàòåëüíûõ ÷èñåë
  66. 8.      Äîáàâëåíû îäíîñòðî÷íûå êîììåíòàðèè (íà÷èíàþòñÿ ñ ïàðû ñèìâîëîâ "//")
  67. 9.      Ðàçðåøåíî íàñëåäîâàíèå îò òèïà-óêàçàòåëÿ
  68. 10.     Äîáàâëåí ñèíòàêñèñ äëÿ èìïîðòà ïðîöåäóð èç âíåøíèõ áèáëèîòåê
  69. 11.     "Ñòðîêè" ìîæíî çàêëþ÷àòü òàêæå â îäèíî÷íûå êàâû÷êè: 'ñòðîêà'
  70. 12.     Äîáàâëåí òèï WCHAR
  71.  
  72. ------------------------------------------------------------------------------
  73.         Îñîáåííîñòè ðåàëèçàöèè
  74.  
  75. 1.      Îñíîâíûå òèïû
  76.  
  77.           Òèï              Äèàïàçîí çíà÷åíèé               Ðàçìåð, áàéò
  78.  
  79.         INTEGER       -2147483648 .. 2147483647                 4
  80.         REAL          4.94E-324 .. 1.70E+308                    8
  81.         CHAR          ñèìâîë ASCII (0X .. 0FFX)                 1
  82.         BOOLEAN       FALSE, TRUE                               1
  83.         SET           ìíîæåñòâî èç öåëûõ ÷èñåë {0 .. 31}        4
  84.         BYTE          0 .. 255                                  1
  85.         WCHAR         ñèìâîë þíèêîäà (0X .. 0FFFFX)             2
  86.  
  87. 2.      Ìàêñèìàëüíàÿ äëèíà èäåíòèôèêàòîðîâ - 1024 ñèìâîëîâ
  88. 3.      Ìàêñèìàëüíàÿ äëèíà ñòðîêîâûõ êîíñòàíò - 1024 ñèìâîëîâ (UTF-8)
  89. 4.      Ìàêñèìàëüíàÿ ðàçìåðíîñòü îòêðûòûõ ìàññèâîâ - 5
  90. 5.      Ïðîöåäóðà NEW çàïîëíÿåò íóëÿìè âûäåëåííûé áëîê ïàìÿòè
  91. 6.      Ãëîáàëüíûå è ëîêàëüíûå ïåðåìåííûå èíèöèàëèçèðóþòñÿ íóëÿìè
  92. 7.      Â îòëè÷èå îò ìíîãèõ Oberon-ðåàëèçàöèé, ñáîðùèê ìóñîðà è äèíàìè÷åñêàÿ
  93.         ìîäóëüíîñòü îòñóòñòâóþò
  94. 8.      Òèï BYTE â âûðàæåíèÿõ âñåãäà ïðèâîäèòñÿ ê INTEGER
  95. 9.      Êîíòðîëü ïåðåïîëíåíèÿ çíà÷åíèé âûðàæåíèé íå ïðîèçâîäèòñÿ
  96. 10.     Îøèáêè âðåìåíè âûïîëíåíèÿ:
  97.  
  98.         - ASSERT(x), ïðè x = FALSE
  99.         - ðàçûìåíîâàíèå íóëåâîãî óêàçàòåëÿ
  100.         - öåëî÷èñëåííîå äåëåíèå íà 0
  101.         - âûçîâ ïðîöåäóðû ÷åðåç ïðîöåäóðíóþ ïåðåìåííóþ ñ íóëåâûì çíà÷åíèåì
  102.         - îøèáêà îõðàíû òèïà
  103.         - íàðóøåíèå ãðàíèö ìàññèâà
  104.         - íåïðåäóñìîòðåííîå çíà÷åíèå âûðàæåíèÿ â îïåðàòîðå CASE
  105.         - îøèáêà êîïèðîâàíèÿ ìàññèâîâ v := x, åñëè LEN(v) < LEN(x)
  106.         - íåÿâíîå ïðèâåäåíèå x:INTEGER ê v:BYTE, åñëè (x < 0) OR (x > 255)
  107.         - CHR(x), åñëè (x < 0) OR (x > 255)
  108.         - WCHR(x), åñëè (x < 0) OR (x > 65535)
  109.  
  110. ------------------------------------------------------------------------------
  111.         Ïñåâäîìîäóëü SYSTEM
  112.  
  113.   Ïñåâäîìîäóëü SYSTEM ñîäåðæèò íèçêîóðîâíåâûå è íåáåçîïàñíûå ïðîöåäóðû,
  114. îøèáêè ïðè èñïîëüçîâàíèè ïðîöåäóð ïñåâäîìîäóëÿ SYSTEM ìîãóò ïðèâåñòè ê
  115. ïîâðåæäåíèþ äàííûõ âðåìåíè âûïîëíåíèÿ è àâàðèéíîìó çàâåðøåíèþ ïðîãðàììû.
  116.  
  117.         PROCEDURE ADR(v: ëþáîé òèï): INTEGER
  118.                 v - ïåðåìåííàÿ èëè ïðîöåäóðà;
  119.                 âîçâðàùàåò àäðåñ v
  120.  
  121.         PROCEDURE SADR(x: ñòðîêîâàÿ êîíñòàíòà (CHAR UTF-8)): INTEGER
  122.                 âîçâðàùàåò àäðåñ x
  123.  
  124.         PROCEDURE WSADR(x: ñòðîêîâàÿ êîíñòàíòà (WCHAR)): INTEGER
  125.                 âîçâðàùàåò àäðåñ x
  126.  
  127.         PROCEDURE SIZE(T): INTEGER
  128.                 âîçâðàùàåò ðàçìåð òèïà T
  129.  
  130.         PROCEDURE TYPEID(T): INTEGER
  131.                 T - òèï-çàïèñü èëè òèï-óêàçàòåëü,
  132.                 âîçâðàùàåò íîìåð òèïà â òàáëèöå òèïîâ-çàïèñåé
  133.  
  134.         PROCEDURE INF(): REAL
  135.                 âîçâðàùàåò ñïåöèàëüíîå âåùåñòâåííîå çíà÷åíèå "áåñêîíå÷íîñòü"
  136.  
  137.         PROCEDURE GET(a: INTEGER;
  138.                 VAR v: ëþáîé îñíîâíîé òèï, PROCEDURE, POINTER)
  139.                 v := Ïàìÿòü[a]
  140.  
  141.         PROCEDURE PUT(a: INTEGER; x: ëþáîé îñíîâíîé òèï, PROCEDURE, POINTER)
  142.                 Ïàìÿòü[a] := x;
  143.                 Åñëè x: BYTE èëè x: WCHAR, òî çíà÷åíèå x áóäåò ðàñøèðåíî
  144.                 äî 32 áèò, äëÿ çàïèñè áàéòîâ èñïîëüçîâàòü SYSTEM.PUT8,
  145.                 äëÿ WCHAR -- SYSTEM.PUT16
  146.  
  147.         PROCEDURE PUT8(a: INTEGER; x: INTEGER, BYTE, CHAR, WCHAR)
  148.                 Ïàìÿòü[a] := ìëàäøèå 8 áèò (x)
  149.  
  150.         PROCEDURE PUT16(a: INTEGER; x: INTEGER, BYTE, CHAR, WCHAR)
  151.                 Ïàìÿòü[a] := ìëàäøèå 16 áèò (x)
  152.  
  153.         PROCEDURE MOVE(Source, Dest, n: INTEGER)
  154.                 Êîïèðóåò n áàéò ïàìÿòè èç Source â Dest,
  155.                 îáëàñòè Source è Dest íå ìîãóò ïåðåêðûâàòüñÿ
  156.  
  157.         PROCEDURE COPY(VAR Source: ëþáîé òèï; VAR Dest: ëþáîé òèï; n: INTEGER)
  158.                 Êîïèðóåò n áàéò ïàìÿòè èç Source â Dest.
  159.                 Ýêâèâàëåíòíî
  160.                 SYSTEM.MOVE(SYSTEM.ADR(Source), SYSTEM.ADR(Dest), n)
  161.  
  162.         PROCEDURE CODE(byte1, byte2,... : INTEGER)
  163.                 Âñòàâêà ìàøèííîãî êîäà,
  164.                 byte1, byte2 ... - êîíñòàíòû â äèàïàçîíå 0..255,
  165.                 íàïðèìåð:
  166.                 SYSTEM.CODE(08BH, 045H, 008H) (* mov eax, dword [ebp + 08h] *)
  167.  
  168.   Òàêæå â ìîäóëå SYSTEM îïðåäåëåí òèï CARD16 (2 áàéòà). Äëÿ òèïà CARD16 íå
  169. äîïóñêàþòñÿ íèêàêèå ÿâíûå îïåðàöèè, çà èñêëþ÷åíèåì ïðèñâàèâàíèÿ.
  170. Ïðåîáðàçîâàíèÿ CARD16 -> INTEGER è INTEGER -> CARD16 ìîãóò áûòü ðåàëèçîâàíû
  171. òàê:
  172.  
  173.         PROCEDURE Card16ToInt (w: SYSTEM.CARD16): INTEGER;
  174.         VAR i: INTEGER;
  175.         BEGIN
  176.             SYSTEM.PUT(SYSTEM.ADR(i), w)
  177.             RETURN i
  178.         END Card16ToInt;
  179.  
  180.         PROCEDURE IntToCard16 (i: INTEGER): SYSTEM.CARD16;
  181.         VAR w: SYSTEM.CARD16;
  182.         BEGIN
  183.             SYSTEM.GET(SYSTEM.ADR(i), w)
  184.             RETURN w
  185.         END IntToCard16;
  186.  
  187.   Ôóíêöèè ïñåâäîìîäóëÿ SYSTEM íåëüçÿ èñïîëüçîâàòü â êîíñòàíòíûõ âûðàæåíèÿõ.
  188.  
  189. ------------------------------------------------------------------------------
  190.         Ñèñòåìíûå ôëàãè
  191.  
  192.   Ïðè îáúÿâëåíèè ïðîöåäóðíûõ òèïîâ è ãëîáàëüíûõ ïðîöåäóð, ïîñëå êëþ÷åâîãî
  193. ñëîâà PROCEDURE ìîæåò áûòü óêàçàí ôëàã ñîãëàøåíèÿ î âûçîâå: [stdcall],
  194. [ccall], [ccall16], [windows], [linux]. Íàïðèìåð:
  195.  
  196.         PROCEDURE [ccall] MyProc (x, y, z: INTEGER): INTEGER;
  197.  
  198.   Åñëè óêàçàí ôëàã [ccall16], òî ïðèíèìàåòñÿ ñîãëàøåíèå ccall, íî ïåðåä
  199. âûçîâîì óêàçàòåëü ñòýêà áóäåò âûðàâíåí ïî ãðàíèöå 16 áàéò.
  200.   Ôëàã [windows] - ñèíîíèì äëÿ [stdcall], [linux] - ñèíîíèì äëÿ [ccall16].
  201.   Çíàê "-" ïîñëå èìåíè ôëàãà ([stdcall-], [linux-], ...) îçíà÷àåò, ÷òî
  202. ðåçóëüòàò ïðîöåäóðû ìîæíî èãíîðèðîâàòü (íå äîïóñêàåòñÿ äëÿ òèïà REAL).
  203.  
  204.   Ïðè îáúÿâëåíèè òèïîâ-çàïèñåé, ïîñëå êëþ÷åâîãî ñëîâà RECORD ìîæåò áûòü
  205. óêàçàí ôëàã [noalign]. Ôëàã [noalign] îçíà÷àåò îòñóòñòâèå âûðàâíèâàíèÿ ïîëåé
  206. çàïèñè. Çàïèñè ñ ñèñòåìíûì ôëàãîì íå ìîãóò èìåòü áàçîâûé òèï è íå ìîãóò áûòü
  207. áàçîâûìè òèïàìè äëÿ äðóãèõ çàïèñåé.
  208.   Äëÿ èñïîëüçîâàíèÿ ñèñòåìíûõ ôëàãîâ, òðåáóåòñÿ èìïîðòèðîâàòü SYSTEM.
  209.  
  210. ------------------------------------------------------------------------------
  211.         Îïåðàòîð CASE
  212.  
  213.   Ñèíòàêñèñ îïåðàòîðà CASE:
  214.  
  215.         CaseStatement =
  216.                 CASE Expression OF Ñase {"|" Ñase}
  217.                         [ELSE StatementSequence] END.
  218.         Case = [CaseLabelList ":" StatementSequence].
  219.         CaseLabelList = CaseLabels {"," CaseLabels}.
  220.         CaseLabels = ConstExpression [".." ConstExpression].
  221.  
  222.   Íàïðèìåð:
  223.  
  224.         CASE x OF
  225.         |-1:    DoSomething1
  226.         | 1:    DoSomething2
  227.         | 0:    DoSomething3
  228.         ELSE
  229.                 DoSomething4
  230.         END
  231.  
  232.   Â ìåòêàõ âàðèàíòîâ ìîæíî èñïîëüçîâàòü êîíñòàíòíûå âûðàæåíèÿ, âåòêà ELSE
  233. íåîáÿçàòåëüíà. Åñëè çíà÷åíèå x íå ñîîòâåòñòâóåò íè îäíîìó âàðèàíòó è ELSE
  234. îòñóòñòâóåò, òî ïðîãðàììà ïðåðûâàåòñÿ ñ îøèáêîé âðåìåíè âûïîëíåíèÿ.
  235.  
  236. ------------------------------------------------------------------------------
  237.         Òèï WCHAR
  238.  
  239.   Òèï WCHAR äîáàâëåí â ÿçûê äëÿ óäîáíîé ïîääåæêè þíèêîäà. Äëÿ òèïîâ WCHAR è
  240. ARRAY OF WCHAR äîïóñêàþòñÿ âñå òå æå îïåðàöèè, êàê äëÿ òèïîâ CHAR è
  241. ARRAY OF CHAR, çà èñêëþ÷åíèåì âñòðîåííîé ïðîöåäóðû CHR, êîòîðàÿ âîçâðàùàåò
  242. òîëüêî òèï CHAR. Äëÿ ïîëó÷åíèÿ çíà÷åíèÿ òèïà WCHAR, ñëåäóåò èñïîëüçîâàòü
  243. ïðîöåäóðó WCHR âìåñòî CHR. Äëÿ ïðàâèëüíîé ðàáîòû ñ òèïîì, íåîáõîäèìî ñîõðàíÿòü
  244. èñõîäíûé êîä â êîäèðîâêå UTF-8 c BOM.
  245.  
  246. ------------------------------------------------------------------------------
  247.         Ïðîâåðêà è îõðàíà òèïà íóëåâîãî óêàçàòåëÿ
  248.  
  249.   Îðèãèíàëüíîå ñîîáùåíèå î ÿçûêå íå îïðåäåëÿåò ïîâåäåíèå ïðîãðàììû ïðè
  250. âûïîëíåíèè îõðàíû p(T) è ïðîâåðêè òèïà p IS T ïðè p = NIL. Âî ìíîãèõ
  251. Oberon-ðåàëèçàöèÿõ âûïîëíåíèå òàêîé îïåðàöèè ïðèâîäèò ê îøèáêå âðåìåíè
  252. âûïîëíåíèÿ. Â äàííîé ðåàëèçàöèè îõðàíà òèïà íóëåâîãî óêàçàòåëÿ íå ïðèâîäèò ê
  253. îøèáêå, à ïðîâåðêà òèïà äàåò ðåçóëüòàò FALSE.  ðÿäå ñëó÷àåâ ýòî ïîçâîëÿåò
  254. çíà÷èòåëüíî ñîêðàòèòü ÷àñòîòó ïðèìåíåíèÿ îõðàíû òèïà.
  255.  
  256. ------------------------------------------------------------------------------
  257.         Äîïîëíèòåëüíûå ñòàíäàðòíûå ïðîöåäóðû
  258.  
  259.         DISPOSE (VAR v: ëþáîé_óêàçàòåëü)
  260.                 Îñâîáîæäàåò ïàìÿòü, âûäåëåííóþ ïðîöåäóðîé NEW äëÿ
  261.                 äèíàìè÷åñêîé ïåðåìåííîé v^, è ïðèñâàèâàåò ïåðåìåííîé v
  262.                 çíà÷åíèå NIL.
  263.  
  264.         COPY (x: ARRAY OF CHAR/WCHAR; VAR v: ARRAY OF CHAR/WCHAR);
  265.                 v := x;
  266.                 Åñëè LEN(v) < LEN(x), òî ñòðîêà x áóäåò ñêîïèðîâàíà
  267.                 íå ïîëíîñòüþ
  268.  
  269.         LSR (x, n: INTEGER): INTEGER
  270.                 Ëîãè÷åñêèé ñäâèã x íà n áèò âïðàâî.
  271.  
  272.         MIN (a, b: INTEGER): INTEGER
  273.                 Ìèíèìóì èç äâóõ çíà÷åíèé.
  274.  
  275.         MAX (a, b: INTEGER): INTEGER
  276.                 Ìàêñèìóì èç äâóõ çíà÷åíèé.
  277.  
  278.         BITS (x: INTEGER): SET
  279.                 Èíòåðïðåòèðóåò x êàê çíà÷åíèå òèïà SET.
  280.                 Âûïîëíÿåòñÿ íà ýòàïå êîìïèëÿöèè.
  281.  
  282.         LENGTH (s: ARRAY OF CHAR/WCHAR): INTEGER
  283.                 Äëèíà 0X-çàâåðøåííîé ñòðîêè s, áåç ó÷åòà ñèìâîëà 0X.
  284.                 Åñëè ñèìâîë 0X îòñóòñòâóåò, ôóíêöèÿ âîçâðàùàåò äëèíó
  285.                 ìàññèâà s. s íå ìîæåò áûòü êîíñòàíòîé.
  286.  
  287.         WCHR (n: INTEGER): WCHAR
  288.                 Ïðåîáðàçîâàíèå òèïà, àíàëîãè÷íî CHR(n: INTEGER): CHAR
  289.  
  290. ------------------------------------------------------------------------------
  291.         DIV è MOD
  292.  
  293.          x         y      x DIV y   x MOD y
  294.  
  295.          5         3         1         2
  296.         -5         3        -2         1
  297.          5        -3        -2        -1
  298.         -5        -3         1        -2
  299.  
  300. ------------------------------------------------------------------------------
  301.         Èìïîðòèðîâàííûå ïðîöåäóðû
  302.  
  303.   Ñèíòàêñèñ èìïîðòà:
  304.  
  305.   PROCEDURE [callconv, "library", "function"] proc_name (FormalParam): Type;
  306.  
  307.   - callconv -- ñîãëàøåíèå î âûçîâå
  308.   - "library" -- èìÿ ôàéëà äèíàìè÷åñêîé áèáëèîòåêè
  309.   - "function" -- èìÿ èìïîðòèðóåìîé ïðîöåäóðû
  310.  
  311.   íàïðèìåð:
  312.  
  313.   PROCEDURE [windows, "kernel32.dll", "ExitProcess"] exit (code: INTEGER);
  314.  
  315.   PROCEDURE [stdcall, "Console.obj", "con_exit"] exit (bCloseWindow: BOOLEAN);
  316.  
  317.   Â êîíöå îáúÿâëåíèÿ ìîæåò áûòü äîáàâëåíî (íåîáÿçàòåëüíî) "END proc_name;"
  318.  
  319.   Îáúÿâëåíèÿ èìïîðòèðîâàííûõ ïðîöåäóð äîëæíû ðàñïîëàãàòüñÿ â ãëîáàëüíîé
  320.   îáëàñòè âèäèìîñòè ìîäóëÿ ïîñëå îáúÿâëåíèÿ ïåðåìåííûõ, âìåñòå ñ îáúÿâëåíèåì
  321.   "îáû÷íûõ" ïðîöåäóð, îò êîòîðûõ èìïîðòèðîâàííûå îòëè÷àþòñÿ òîëüêî îòñóòñòâèåì
  322.   òåëà ïðîöåäóðû. Â îñòàëüíîì, ê òàêèì ïðîöåäóðàì ïðèìåíèìû òå æå ïðàâèëà:
  323.   èõ ìîæíî âûçâàòü, ïðèñâîèòü ïðîöåäóðíîé ïåðåìåííîé èëè ïîëó÷èòü àäðåñ.
  324.  
  325.   Òàê êàê èìïîðòèðîâàííàÿ ïðîöåäóðà âñåãäà èìååò ÿâíîå óêàçàíèå ñîãëàøåíèÿ î
  326.   âûçîâå, òî ñîâìåñòèìûé ïðîöåäóðíûé òèï òîæå äîëæåí áûòü îáúÿâëåí ñ óêàçàíèåì
  327.   ñîãëàøåíèÿ î âûçîâå:
  328.  
  329.   VAR
  330.       ExitProcess: PROCEDURE [windows] (code: INTEGER);
  331.       con_exit:    PROCEDURE [stdcall] (bCloseWindow: BOOLEAN);
  332.  
  333.   Â KolibriOS èìïîðòèðîâàòü ïðîöåäóðû ìîæíî òîëüêî èç áèáëèîòåê, ðàçìåùåííûõ
  334.   â /rd/1/lib. Èìïîðòèðîâàòü è âûçûâàòü ôóíêöèè èíèöèàëèçàöèè áèáëèîòåê
  335.   (lib_init, START) ïðè ýòîì íå íóæíî.
  336.  
  337.   Äëÿ Linux, èìïîðòèðîâàííûå ïðîöåäóðû íå ðåàëèçîâàíû.
  338.  
  339. ------------------------------------------------------------------------------
  340.         Ñêðûòûå ïàðàìåòðû ïðîöåäóð
  341.  
  342.   Íåêîòîðûå ïðîöåäóðû ìîãóò èìåòü ñêðûòûå ïàðàìåòðû, îíè îòñóòñòâóþò â ñïèñêå
  343. ôîðìàëüíûõ ïàðàìåòðîâ, íî ó÷èòûâàþòñÿ êîìïèëÿòîðîì ïðè òðàíñëÿöèè âûçîâîâ.
  344. Ýòî âîçìîæíî â ñëåäóþùèõ ñëó÷àÿõ:
  345.  
  346. 1.      Ïðîöåäóðà èìååò ôîðìàëüíûé ïàðàìåòð îòêðûòûé ìàññèâ:
  347.                 PROCEDURE Proc (x: ARRAY OF ARRAY OF REAL);
  348.         Âûçîâ òðàíñëèðóåòñÿ òàê:
  349.                 Proc(LEN(x), LEN(x[0]), SYSTEM.ADR(x))
  350. 2.      Ïðîöåäóðà èìååò ôîðìàëüíûé ïàðàìåòð-ïåðåìåííóþ òèïà RECORD:
  351.                 PROCEDURE Proc (VAR x: Rec);
  352.         Âûçîâ òðàíñëèðóåòñÿ òàê:
  353.                 Proc(SYSTEM.TYPEID(Rec), SYSTEM.ADR(x))
  354.  
  355. ------------------------------------------------------------------------------
  356.         Ìîäóëü RTL
  357.  
  358.   Âñå ïðîãðàììû íåÿâíî èñïîëüçóþò ìîäóëü RTL. Êîìïèëÿòîð òðàíñëèðóåò
  359. íåêîòîðûå îïåðàöèè (ïðîâåðêà è îõðàíà òèïà, ñðàâíåíèå ñòðîê, ñîîáùåíèÿ îá
  360. îøèáêàõ âðåìåíè âûïîëíåíèÿ è äð.) êàê âûçîâû ïðîöåäóð ýòîãî ìîäóëÿ. Íå
  361. ñëåäóåò ÿâíî âûçûâàòü ýòè ïðîöåäóðû, çà èñêëþ÷åíèåì ïðîöåäóðû SetDll,
  362. åñëè ïðèëîæåíèå êîìïèëèðóåòñÿ êàê Windows DLL:
  363.  
  364.         PROCEDURE SetDll
  365.             (process_detach, thread_detach, thread_attach: DLL_ENTRY);
  366.         ãäå TYPE DLL_ENTRY =
  367.             PROCEDURE (hinstDLL, fdwReason, lpvReserved: INTEGER);
  368.  
  369. SetDll íàçíà÷àåò ïðîöåäóðû process_detach, thread_detach, thread_attach
  370. âûçûâàåìûìè ïðè
  371. - âûãðóçêå dll-áèáëèîòåêè (process_detach)
  372. - ñîçäàíèè íîâîãî ïîòîêà (thread_attach)
  373. - óíè÷òîæåíèè ïîòîêà (thread_detach)
  374.  
  375. Äëÿ ïðî÷èõ òèïîâ ïðèëîæåíèé, âûçîâ ïðîöåäóðû SetDll íå âëèÿåò íà
  376. ïîâåäåíèå ïðîãðàììû.
  377.   Ñîîáùåíèÿ îá îøèáêàõ âðåìåíè âûïîëíåíèÿ âûâîäÿòñÿ â äèàëîãîâûõ îêíàõ
  378. (Windows), â òåðìèíàë (Linux), íà äîñêó îòëàäêè (KolibriOS).
  379.  
  380. ------------------------------------------------------------------------------
  381.         Ìîäóëü API
  382.  
  383.   Ñóùåñòâóþò íåñêîëüêî ðåàëèçàöèé ìîäóëÿ API (äëÿ ðàçëè÷íûõ ÎÑ).
  384.   Êàê è ìîäóëü RTL, ìîäóëü API íå ïðåäíàçíà÷åí äëÿ ïðÿìîãî èñïîëüçîâàíèÿ.
  385. Îí îáåñïå÷èâàåò ñâÿçü RTL ñ ÎÑ.
  386.  
  387. ------------------------------------------------------------------------------
  388.         Ãåíåðàöèÿ èñïîëíÿåìûõ ôàéëîâ DLL
  389.  
  390.   Ðàçðåøàåòñÿ ýêñïîðòèðîâàòü òîëüêî ïðîöåäóðû. Äëÿ ýòîãî, ïðîöåäóðà äîëæíà
  391. íàõîäèòüñÿ â ãëàâíîì ìîäóëå ïðîãðàììû, è åå èìÿ äîëæíî áûòü îòìå÷åíî ñèìâîëîì
  392. ýêñïîðòà ("*"). KolibriOS DLL âñåãäà ýêñïîðòèðóþò èäåíòèôèêàòîðû "version"
  393. (âåðñèÿ ïðîãðàììû) è "lib_init" - àäðåñ ïðîöåäóðû èíèöèàëèçàöèè DLL:
  394.  
  395.         PROCEDURE [stdcall] lib_init (): INTEGER
  396.  
  397. Ýòà ïðîöåäóðà äîëæíà áûòü âûçâàíà ïåðåä èñïîëüçîâàíèåì DLL.
  398. Ïðîöåäóðà âñåãäà âîçâðàùàåò 1.
  399.  
  400.   Äëÿ Linux, ãåíåðàöèÿ äèíàìè÷åñêèõ áèáëèîòåê íå ðåàëèçîâàíà.