Subversion Repositories Kolibri OS

Rev

Rev 6613 | Blame | Last modification | View Log | Download | RSS feed

  1.         Êîìïèëÿòîð ÿçûêà ïðîãðàììèðîâàíèÿ Oberon-07/11 äëÿ i386
  2.                 Windows/Linux/KolibriOS.
  3. ------------------------------------------------------------------------------
  4.  
  5.         Ñîñòàâ ïðîãðàììû
  6.  
  7. 1.      Compiler.kex (KolibriOS) - èñïîëíÿåìûé ôàéë êîìïèëÿòîðà.
  8.         Âõîä - òåêñòîâûå ôàéëû ìîäóëåé ñ ðàñøèðåíèåì ".ob07", êîäèðîâêà ANSI
  9.         èëè UTF-8 ñ BOM-ñèãíàòóðîé.
  10.         Âûõîä - èñïîëíÿåìûé ôàéë ôîðìàòà PE, ELF èëè MENUET01/MS COFF.
  11.         Ïàðàìåòðû:
  12.         1) èìÿ ãëàâíîãî ìîäóëÿ
  13.         2) òèï ïðèëîæåíèÿ è ïëàòôîðìà
  14.                 "con" - Windows console
  15.                 "gui" - Windows GUI
  16.                 "dll" - Windows DLL
  17.                 "elf" - Linux
  18.                 "kos" - KolibriOS
  19.                 "obj" - KolibriOS DLL
  20.         3) ðàçìåð ñòýêà â ìåãàáàéòàõ, íåîáÿçàòåëüíûé ïàðàìåòð, ïî óìîë÷àíèþ -
  21.         1 Ìá, äëÿ ELF èãíîðèðóåòñÿ. Åñëè 2-é ïàðàìåòð = "obj" (KolibriOS DLL),
  22.         òî 3-é ïàðàìåòð çàäàåòñÿ øåñòíàäöàòèðè÷íûì ÷èñëîì
  23.         (0x00000001 .. 0xffffffff) è îïðåäåëÿåò âåðñèþ ïðîãðàììû,
  24.         ïî óìîë÷àíèþ - 0x00010000 (v1.0).
  25.         Íàïðèìåð:
  26.                 "C:\oberon-07\example.ob07" con 1
  27.                 "C:\oberon-07\example.ob07" obj 0x00020005 (* v2.5 *)
  28.          ñëó÷àå óñïåøíîé êîìïèëÿöèè, êîìïèëÿòîð ïåðåäàåò êîä çàâåðøåíèÿ 0,
  29.         èíà÷å 1. Ïðè ðàáîòå êîìïèëÿòîðà â KolibriOS, êîä çàâåðøåíèÿ íå
  30.         ïåðåäàåòñÿ. Ñîîáùåíèÿ êîìïèëÿòîðà âûâîäÿòñÿ íà êîíñîëü (Windows,
  31.         KolibriOS), â òåðìèíàë (Linux).
  32. 2.      Ïàïêà Lib - áèáëèîòåêà ìîäóëåé
  33.  
  34. ------------------------------------------------------------------------------
  35.         Îòëè÷èÿ îò îðèãèíàëà
  36.  
  37. 1.      Ðàñøèðåí ïñåâäîìîäóëü SYSTEM
  38. 2.      Ðàçðåøåí ñèìâîë "_" â èäåíòèôèêàòîðàõ
  39. 3.      Äîáàâëåíû ñèñòåìíûå ôëàãè
  40. 4.      Îïåðàòîð CASE ðåàëèçîâàí â ñîîòâåòñòâèè ñ ñèíòàêñèñîì è ñåìàíòèêîé
  41.         äàííîãî îïåðàòîðà â ÿçûêå Oberon (Revision 1.10.90)
  42. 5.      Ðàñøèðåí íàáîð ñòàíäàðòíûõ ïðîöåäóð
  43. 6.      Ñåìàíòèêà îõðàíû/ïðîâåðêè òèïà óòî÷íåíà äëÿ íóëåâîãî óêàçàòåëÿ
  44. 7.      Ñåìàíòèêà DIV è MOD óòî÷íåíà äëÿ îòðèöàòåëüíûõ ÷èñåë
  45. 8.      Äîáàâëåíû îäíîñòðî÷íûå êîììåíòàðèè (íà÷èíàþòñÿ ñ ïàðû ñèìâîëîâ "//")
  46. 9.      Ðàçðåøåí ýêñïîðò ïåðåìåííûõ òèïîâ ARRAY è RECORD (òîëüêî äëÿ ÷òåíèÿ)
  47. 10.     Ðàçðåøåíî íàñëåäîâàíèå îò òèïà-óêàçàòåëÿ
  48. 11.     Äîáàâëåíû ïñåâäîíèìû òèïîâ (TYPE A = B)
  49.  
  50. ------------------------------------------------------------------------------
  51.         Îñîáåííîñòè ðåàëèçàöèè
  52.  
  53. 1.      Îñíîâíûå òèïû
  54.  
  55.           Òèï              Äèàïàçîí çíà÷åíèé               Ðàçìåð, áàéò
  56.  
  57.         INTEGER       -2147483648 .. 2147483647                 4
  58.         REAL          1.40E-45 .. 3.34E+38                      4
  59.         LONGREAL      4.94E-324 .. 1.70E+308                    8
  60.         CHAR          ñèìâîë ASCII (0X .. 0FFX)                 1
  61.         BOOLEAN       FALSE, TRUE                               1
  62.         SET           ìíîæåñòâî èç öåëûõ ÷èñåë {0 .. 31}        4
  63.  
  64. 2.      Ìàêñèìàëüíàÿ äëèíà èäåíòèôèêàòîðîâ - 255 ñèìâîëîâ
  65. 3.      Ìàêñèìàëüíàÿ äëèíà ñòðîêîâûõ êîíñòàíò - 255 ñèìâîëîâ
  66. 4.      Ìàêñèìàëüíàÿ äëèíà ñòðîê èñõîäíîãî êîäà - 511 ñèìâîëîâ
  67. 5.      Ìàêñèìàëüíàÿ ðàçìåðíîñòü îòêðûòûõ ìàññèâîâ - 5
  68. 6.      Ìàêñèìàëüíîå êîëè÷åñòâî îáúÿâëåííûõ òèïîâ-çàïèñåé - 2047
  69. 7.      Ïðîöåäóðà NEW çàïîëíÿåò íóëÿìè âûäåëåííûé áëîê ïàìÿòè
  70. 8.      Ãëîáàëüíûå è ëîêàëüíûå ïåðåìåííûå èíèöèàëèçèðóþòñÿ íóëÿìè
  71. 9.       îòëè÷èå îò ìíîãèõ Oberon-ðåàëèçàöèé, ñáîðùèê ìóñîðà è äèíàìè÷åñêàÿ
  72.         ìîäóëüíîñòü îòñóòñòâóþò
  73.  
  74. ------------------------------------------------------------------------------
  75.         Ïñåâäîìîäóëü SYSTEM
  76.  
  77.   Ïñåâäîìîäóëü SYSTEM ñîäåðæèò íèçêîóðîâíåâûå è íåáåçîïàñíûå ïðîöåäóðû,
  78. îøèáêè ïðè èñïîëüçîâàíèè ïðîöåäóð ïñåâäîìîäóëÿ SYSTEM ìîãóò ïðèâåñòè ê
  79. ïîâðåæäåíèþ äàííûõ âðåìåíè âûïîëíåíèÿ è àâàðèéíîìó çàâåðøåíèþ ïðîãðàììû.
  80.  
  81.         PROCEDURE ADR(v: ëþáîé òèï): INTEGER
  82.                 v - ïåðåìåííàÿ, ïðîöåäóðà èëè ñòðîêîâàÿ êîíñòàíòà;
  83.                 âîçâðàùàåò àäðåñ v
  84.  
  85.         PROCEDURE SIZE(T): INTEGER
  86.                 âîçâðàùàåò ðàçìåð òèïà T
  87.  
  88.         PROCEDURE TYPEID(T): INTEGER
  89.                 T - òèï-çàïèñü èëè òèï-óêàçàòåëü,
  90.                 âîçâðàùàåò íîìåð òèïà â òàáëèöå òèïîâ-çàïèñåé
  91.  
  92.         PROCEDURE INF(T): T
  93.                 T - REAL èëè LONGREAL,
  94.                 âîçâðàùàåò ñïåöèàëüíîå âåùåñòâåííîå çíà÷åíèå "áåñêîíå÷íîñòü"
  95.  
  96.         PROCEDURE GET(a: INTEGER;
  97.                 VAR v: ëþáîé îñíîâíîé òèï, PROCEDURE, POINTER)
  98.                 v := Ïàìÿòü[a]
  99.  
  100.         PROCEDURE PUT(a: INTEGER; x: ëþáîé îñíîâíîé òèï, PROCEDURE, POINTER)
  101.                 Ïàìÿòü[a] := x
  102.  
  103.         PROCEDURE MOVE(Source, Dest, n: INTEGER)
  104.                 Êîïèðóåò n áàéò ïàìÿòè èç Source â Dest,
  105.                 îáëàñòè Source è Dest íå äîëæíû ïåðåêðûâàòüñÿ
  106.  
  107.         PROCEDURE COPY(VAR Source: ëþáîé òèï; VAR Dest: ëþáîé òèï; n: INTEGER)
  108.                 Êîïèðóåò n áàéò ïàìÿòè èç Source â Dest.
  109.                 Ýêâèâàëåíòíî
  110.                 SYSTEM.MOVE(SYSTEM.ADR(Source), SYSTEM.ADR(Dest), n)
  111.  
  112.         PROCEDURE CODE(s: ARRAY OF CHAR)
  113.                 Âñòàâêà ìàøèííîãî êîäà
  114.                 s - ñòðîêîâàÿ êîíñòàíòà øåñòíàäöàòèðè÷íûõ öèôð
  115.                 êîëè÷åñòâî öèôð äîëæíî áûòü ÷åòíûì
  116.                 íàïðèìåð: SYSTEM.CODE("B801000000") (* mov eax, 1 *)
  117.  
  118.   Òàêæå â ìîäóëå SYSTEM îïðåäåëåí òèï CARD16 (2 áàéòà). Äëÿ òèïà CARD16 íå
  119. äîïóñêàþòñÿ íèêàêèå ÿâíûå îïåðàöèè, çà èñêëþ÷åíèåì ïðèñâàèâàíèÿ.
  120. Ïðåîáðàçîâàíèÿ CARD16 -> INTEGER è INTEGER -> CARD16 ìîãóò áûòü ðåàëèçîâàíû
  121. òàê:
  122.  
  123.         PROCEDURE Card16ToInt(w: SYSTEM.CARD16): INTEGER;
  124.         VAR i: INTEGER;
  125.         BEGIN
  126.           SYSTEM.PUT(SYSTEM.ADR(i), w)
  127.           RETURN i
  128.         END Card16ToInt;
  129.  
  130.         PROCEDURE IntToCard16(i: INTEGER): SYSTEM.CARD16;
  131.         VAR w: SYSTEM.CARD16;
  132.         BEGIN
  133.           SYSTEM.GET(SYSTEM.ADR(i), w)
  134.           RETURN w
  135.         END IntToCard16;
  136.  
  137.   Ôóíêöèè ïñåâäîìîäóëÿ SYSTEM íåëüçÿ èñïîëüçîâàòü â êîíñòàíòíûõ âûðàæåíèÿõ.
  138.  
  139. ------------------------------------------------------------------------------
  140.         Ñèñòåìíûå ôëàãè
  141.  
  142.   Ïðè îáúÿâëåíèè ïðîöåäóðíûõ òèïîâ è ãëîáàëüíûõ ïðîöåäóð, ïîñëå êëþ÷åâîãî
  143. ñëîâà PROCEDURE ìîæåò áûòü óêàçàí ôëàã ñîãëàøåíèÿ âûçîâà: [stdcall], [cdecl]
  144. èëè [winapi]. Íàïðèìåð:
  145.  
  146.         PROCEDURE [cdecl] MyProc(x, y, z: INTEGER): INTEGER;
  147.  
  148.   Åñëè óêàçàí ôëàã [winapi], òî ïðèíèìàåòñÿ ñîãëàøåíèå stdcall è
  149. ïðîöåäóðó-ôóíêöèþ ìîæíî âûçâàòü êàê ñîáñòâåííî ïðîöåäóðó, âíå âûðàæåíèÿ.
  150. Ôëàã [winapi] äîñòóïåí òîëüêî äëÿ ïëàòôîðìû Windows.
  151.   Ïðè îáúÿâëåíèè òèïîâ-çàïèñåé, ïîñëå êëþ÷åâîãî ñëîâà RECORD ìîæåò áûòü
  152. óêàçàí ôëàã [noalign] èëè [union]. Ôëàã [noalign] îçíà÷àåò îòñóòñòâèå
  153. âûðàâíèâàíèÿ ïîëåé çàïèñè, à ôëàã [union] îçíà÷àåò, ÷òî ñìåùåíèÿ âñåõ ïîëåé
  154. çàïèñè ðàâíû íóëþ, ïðè ýòîì ðàçìåð çàïèñè ðàâåí ðàçìåðó íàèáîëüøåãî ïîëÿ.
  155. Çàïèñè RECORD [union] ... END ñîîòâåòñòâóþò îáúåäèíåíèÿì (union) â ÿçûêå C.
  156. Çàïèñè ñ ñèñòåìíûìè ôëàãàìè íå ìîãóò èìåòü áàçîâîãî òèïà è íå ìîãóò áûòü
  157. áàçîâûìè òèïàìè äëÿ äðóãèõ çàïèñåé.
  158.   Äëÿ èñïîëüçîâàíèÿ ñèñòåìíûõ ôëàãîâ, òðåáóåòñÿ èìïîðòèðîâàòü SYSTEM.
  159.  
  160. ------------------------------------------------------------------------------
  161.         Îïåðàòîð CASE
  162.  
  163.   Ñèíòàêñèñ îïåðàòîðà CASE:
  164.  
  165.         CaseStatement =
  166.                 CASE Expression OF Ñase {"|" Ñase}
  167.                         [ELSE StatementSequence] END.
  168.         Case = [CaseLabelList ":" StatementSequence].
  169.         CaseLabelList = CaseLabels {"," CaseLabels}.
  170.         CaseLabels = ConstExpression [".." ConstExpression].
  171.  
  172.   Íàïðèìåð:
  173.  
  174.         CASE x OF
  175.         |-1:    DoSomething1
  176.         | 1:    DoSomething2
  177.         | 0:    DoSomething3
  178.         ELSE
  179.                 DoSomething4
  180.         END
  181.  
  182.   Â ìåòêàõ âàðèàíòîâ ìîæíî èñïîëüçîâàòü êîíñòàíòíûå âûðàæåíèÿ, âåòêà ELSE
  183. íåîáÿçàòåëüíà. Åñëè íå âûïîëíåí íè îäèí âàðèàíò è ELSE îòñóòñòâóåò, òî
  184. ïðîãðàììà ïðåðûâàåòñÿ ñ îøèáêîé âðåìåíè âûïîëíåíèÿ.
  185.  
  186. ------------------------------------------------------------------------------
  187.         Ïðîâåðêà è îõðàíà òèïà íóëåâîãî óêàçàòåëÿ
  188.  
  189.   Îðèãèíàëüíîå ñîîáùåíèå î ÿçûêå íå îïðåäåëÿåò ïîâåäåíèå ïðîãðàììû ïðè
  190. âûïîëíåíèè îõðàíû p(T) è ïðîâåðêè òèïà p IS T ïðè p = NIL. Âî ìíîãèõ
  191. Oberon-ðåàëèçàöèÿõ âûïîëíåíèå òàêîé îïåðàöèè ïðèâîäèò ê îøèáêå âðåìåíè
  192. âûïîëíåíèÿ. Â äàííîé ðåàëèçàöèè îõðàíà òèïà íóëåâîãî óêàçàòåëÿ íå ïðèâîäèò ê
  193. îøèáêå, à ïðîâåðêà òèïà äàåò ðåçóëüòàò FALSE.  ðÿäå ñëó÷àåâ ýòî ïîçâîëÿåò
  194. çíà÷èòåëüíî ñîêðàòèòü ÷àñòîòó ïðèìåíåíèÿ îõðàíû òèïà.
  195.  
  196. ------------------------------------------------------------------------------
  197.         Äîïîëíèòåëüíûå ñòàíäàðòíûå ïðîöåäóðû
  198.  
  199.         DISPOSE(VAR v: ëþáîé_óêàçàòåëü)
  200.                 Îñâîáîæäàåò ïàìÿòü, âûäåëåííóþ ïðîöåäóðîé NEW äëÿ
  201.                 äèíàìè÷åñêîé ïåðåìåííîé v^, è ïðèñâàèâàåò ïåðåìåííîé v
  202.                 çíà÷åíèå NIL.
  203.  
  204.         LSR(x, n: INTEGER): INTEGER
  205.                 Ëîãè÷åñêèé ñäâèã x íà n áèò âïðàâî.
  206.  
  207.         MIN(a, b: INTEGER): INTEGER
  208.                 Ìèíèìóì èç äâóõ çíà÷åíèé.
  209.  
  210.         MAX(a, b: INTEGER): INTEGER
  211.                 Ìàêñèìóì èç äâóõ çíà÷åíèé.
  212.  
  213.         BITS(x: INTEGER): SET
  214.                 Èíòåðïðåòèðóåò x êàê çíà÷åíèå òèïà SET.
  215.                 Âûïîëíÿåòñÿ íà ýòàïå êîìïèëÿöèè.
  216.  
  217.         LENGTH(s: ARRAY OF CHAR): INTEGER
  218.                 Äëèíà 0X-çàâåðøåííîé ñòðîêè s, áåç ó÷åòà ñèìâîëà 0X.
  219.                 Åñëè ñèìâîë 0X îòñóòñòâóåò, ôóíêöèÿ âîçâðàùàåò äëèíó
  220.                 ìàññèâà s.
  221.  
  222. ------------------------------------------------------------------------------
  223.         DIV è MOD
  224.  
  225.          x         y      x DIV y   x MOD y
  226.  
  227.          5         3         1         2
  228.         -5         3        -2         1
  229.          5        -3        -2        -1
  230.         -5        -3         1        -2
  231.  
  232. ------------------------------------------------------------------------------
  233.         Ñêðûòûå ïàðàìåòðû ïðîöåäóð
  234.  
  235.   Íåêîòîðûå ïðîöåäóðû ìîãóò èìåòü ñêðûòûå ïàðàìåòðû, îíè îòñóòñòâóþò â ñïèñêå
  236. ôîðìàëüíûõ ïàðàìåòðîâ, íî ó÷èòûâàþòñÿ êîìïèëÿòîðîì ïðè òðàíñëÿöèè âûçîâîâ.
  237. Ýòî âîçìîæíî â ñëåäóþùèõ ñëó÷àÿõ:
  238.  
  239. 1.      Ïðîöåäóðà èìååò ôîðìàëüíûé ïàðàìåòð îòêðûòûé ìàññèâ:
  240.                 PROCEDURE Proc(x: ARRAY OF ARRAY OF LONGREAL);
  241.         Âûçîâ òðàíñëèðóåòñÿ òàê:
  242.                 Proc(SYSTEM.ADR(x), LEN(x), LEN(x[0])
  243. 2.      Ïðîöåäóðà èìååò ôîðìàëüíûé ïàðàìåòð-ïåðåìåííóþ òèïà RECORD:
  244.                 PROCEDURE Proc(VAR x: Rec);
  245.         Âûçîâ òðàíñëèðóåòñÿ òàê:
  246.                 Proc(SYSTEM.TYPEID(Rec), SYSTEM.ADR(x))
  247. 3.      Ïðîöåäóðà ÿâëÿåòñÿ âëîæåííîé, ãëóáèíà âëîæåíèÿ k,
  248.         äëÿ ãëîáàëüíûõ ïðîöåäóð k = 0:
  249.                 PROCEDURE Proc(p1, ..., pn);
  250.         Âûçîâ òðàíñëèðóåòñÿ òàê:
  251.                 Proc(base(k - 1), base(k - 2), ..., base(0), p1, ..., pn),
  252.         ãäå base(m) - àäðåñ áàçû êàäðà ñòýêà îõâàòûâàþùåé ïðîöåäóðû ãëóáèíû
  253.         âëîæåíèÿ m (èñïîëüçóåòñÿ äëÿ äîñòóïà ê ëîêàëüíûì ïåðåìåííûì
  254.         îõâàòûâàþùåé ïðîöåäóðû)
  255.  
  256. ------------------------------------------------------------------------------
  257.         Ìîäóëü RTL
  258.  
  259.   Âñå ïðîãðàììû íåÿâíî èñïîëüçóþò ìîäóëü RTL. Êîìïèëÿòîð òðàíñëèðóåò
  260. íåêîòîðûå îïåðàöèè (ïðîâåðêà è îõðàíà òèïà, ñðàâíåíèå ñòðîê, ñîîáùåíèÿ îá
  261. îøèáêàõ âðåìåíè âûïîëíåíèÿ è äð.) êàê âûçîâû ïðîöåäóð ýòîãî ìîäóëÿ. Íå
  262. ñëåäóåò ÿâíî âûçûâàòü ýòè ïðîöåäóðû, çà èñêëþ÷åíèåì ïðîöåäóðû SetClose:
  263.  
  264.         PROCEDURE SetClose(proc: PROC), ãäå TYPE PROC = PROCEDURE
  265.  
  266. SetClose íàçíà÷àåò ïðîöåäóðó proc (áåç ïàðàìåòðîâ) âûçûâàåìîé ïðè âûãðóçêå
  267. dll-áèáëèîòåêè (Windows), åñëè ïðèëîæåíèå êîìïèëèðóåòñÿ êàê Windows DLL. Äëÿ
  268. ïðî÷èõ òèïîâ ïðèëîæåíèé è ïëàòôîðì âûçîâ ïðîöåäóðû SetClose íå âëèÿåò íà
  269. ïîâåäåíèå ïðîãðàììû.
  270.   Ñîîáùåíèÿ îá îøèáêàõ âðåìåíè âûïîëíåíèÿ âûâîäÿòñÿ â äèàëîãîâûõ îêíàõ
  271. (Windows), â òåðìèíàë (Linux), íà äîñêó îòëàäêè (KolibriOS).
  272.  
  273. ------------------------------------------------------------------------------
  274.         Ìîäóëü API
  275.  
  276.   Ñóùåñòâóþò òðè ðåàëèçàöèè ìîäóëÿ API: äëÿ Windows, Linux è KolibriOS. Êàê è
  277. ìîäóëü RTL, ìîäóëü API íå ïðåäíàçíà÷åí äëÿ ïðÿìîãî èñïîëüçîâàíèÿ. Îí
  278. îáåñïå÷èâàåò êðîññïëàòôîðìåííîñòü êîìïèëÿòîðà.
  279.  
  280. ------------------------------------------------------------------------------
  281.         Ãåíåðàöèÿ èñïîëíÿåìûõ ôàéëîâ DLL
  282.  
  283.   Ðàçðåøàåòñÿ ýêñïîðòèðîâàòü òîëüêî ïðîöåäóðû. Äëÿ ýòîãî, ïðîöåäóðà äîëæíà
  284. íàõîäèòüñÿ â ãëàâíîì ìîäóëå ïðîãðàììû, è åå èìÿ äîëæíî áûòü îòìå÷åíî ñèìâîëîì
  285. ýêñïîðòà ("*"). KolibriOS DLL âñåãäà ýêñïîðòèðóþò èäåíòèôèêàòîðû "version"
  286. (âåðñèÿ ïðîãðàììû) è "lib_init" - àäðåñ ïðîöåäóðû èíèöèàëèçàöèè DLL:
  287.  
  288.         PROCEDURE [stdcall] lib_init(): INTEGER
  289.  
  290. Ýòà ïðîöåäóðà äîëæíà áûòü âûçâàíà ïåðåä èñïîëüçîâàíèåì DLL.
  291. Ïðîöåäóðà âñåãäà âîçâðàùàåò 1.
  292.   Â íàñòîÿùåå âðåìÿ ãåíåðàöèÿ DLL äëÿ Linux íå ðåàëèçîâàíà.
  293.  
  294. ==============================================================================
  295. ==============================================================================
  296.  
  297.         Áèáëèîòåêà (KolibriOS)
  298.  
  299. ------------------------------------------------------------------------------
  300. MODULE Out - êîíñîëüíûé âûâîä
  301.  
  302.         PROCEDURE Open
  303.                 ôîðìàëüíî îòêðûâàåò êîíñîëüíûé âûâîä
  304.  
  305.         PROCEDURE Int(x, width: INTEGER)
  306.                 âûâîä öåëîãî ÷èñëà x;
  307.                 width - êîëè÷åñòâî çíàêîìåñò, èñïîëüçóåìûõ äëÿ âûâîäà
  308.  
  309.         PROCEDURE Real(x: LONGREAL; width: INTEGER)
  310.                 âûâîä âåùåñòâåííîãî ÷èñëà x â ïëàâàþùåì ôîðìàòå;
  311.                 width - êîëè÷åñòâî çíàêîìåñò, èñïîëüçóåìûõ äëÿ âûâîäà
  312.  
  313.         PROCEDURE Char(x: CHAR)
  314.                 âûâîä ñèìâîëà x
  315.  
  316.         PROCEDURE FixReal(x: LONGREAL; width, p: INTEGER)
  317.                 âûâîä âåùåñòâåííîãî ÷èñëà x â ôèêñèðîâàííîì ôîðìàòå;
  318.                 width - êîëè÷åñòâî çíàêîìåñò, èñïîëüçóåìûõ äëÿ âûâîäà;
  319.                 p - êîëè÷åñòâî çíàêîâ ïîñëå äåñÿòè÷íîé òî÷êè
  320.  
  321.         PROCEDURE Ln
  322.                 ïåðåõîä íà ñëåäóþùóþ ñòðîêó
  323.  
  324.         PROCEDURE String(s: ARRAY OF CHAR)
  325.                 âûâîä ñòðîêè s
  326.  
  327. ------------------------------------------------------------------------------
  328. MODULE In - êîíñîëüíûé ââîä
  329.  
  330.         VAR Done: BOOLEAN
  331.                 ïðèíèìàåò çíà÷åíèå TRUE â ñëó÷àå óñïåøíîãî âûïîëíåíèÿ
  332.                 îïåðàöèè ââîäà, èíà÷å FALSE
  333.  
  334.         PROCEDURE Open
  335.                 ôîðìàëüíî îòêðûâàåò êîíñîëüíûé ââîä,
  336.                 òàêæå ïðèñâàèâàåò ïåðåìåííîé Done çíà÷åíèå TRUE
  337.  
  338.         PROCEDURE Int(VAR x: INTEGER)
  339.                 ââîä ÷èñëà òèïà INTEGER
  340.  
  341.         PROCEDURE Char(VAR x: CHAR)
  342.                 ââîä ñèìâîëà
  343.  
  344.         PROCEDURE Real(VAR x: REAL)
  345.                 ââîä ÷èñëà òèïà REAL
  346.  
  347.         PROCEDURE LongReal(VAR x: LONGREAL)
  348.                 ââîä ÷èñëà òèïà LONGREAL
  349.  
  350.         PROCEDURE String(VAR s: ARRAY OF CHAR)
  351.                 ââîä ñòðîêè
  352.  
  353.         PROCEDURE Ln
  354.                 îæèäàíèå íàæàòèÿ ENTER
  355.  
  356. ------------------------------------------------------------------------------
  357. MODULE Console - äîïîëíèòåëüíûå ïðîöåäóðû êîíñîëüíîãî âûâîäà
  358.  
  359.         CONST
  360.  
  361.         Ñëåäóþùèå êîíñòàíòû îïðåäåëÿþò öâåò êîíñîëüíîãî âûâîäà
  362.  
  363.                 Black = 0      Blue = 1           Green = 2
  364.                 Cyan = 3       Red = 4            Magenta = 5
  365.                 Brown = 6      LightGray = 7      DarkGray = 8
  366.                 LightBlue = 9  LightGreen = 10    LightCyan = 11
  367.                 LightRed = 12  LightMagenta = 13  Yellow = 14
  368.                 White = 15
  369.  
  370.         PROCEDURE Cls
  371.                 î÷èñòêà îêíà êîíñîëè
  372.  
  373.         PROCEDURE SetColor(FColor, BColor: INTEGER)
  374.                 óñòàíîâêà öâåòà êîíñîëüíîãî âûâîäà: FColor - öâåò òåêñòà,
  375.                 BColor - öâåò ôîíà, âîçìîæíûå çíà÷åíèÿ - âûøåïåðå÷èñëåííûå
  376.                 êîíñòàíòû
  377.  
  378.         PROCEDURE SetCursor(x, y: INTEGER)
  379.                 óñòàíîâêà êóðñîðà êîíñîëè â ïîçèöèþ (x, y)
  380.  
  381.         PROCEDURE GetCursor(VAR x, y: INTEGER)
  382.                 çàïèñûâàåò â ïàðàìåòðû òåêóùèå êîîðäèíàòû êóðñîðà êîíñîëè
  383.  
  384.         PROCEDURE GetCursorX(): INTEGER
  385.                 âîçâðàùàåò òåêóùóþ x-êîîðäèíàòó êóðñîðà êîíñîëè
  386.  
  387.         PROCEDURE GetCursorY(): INTEGER
  388.                 âîçâðàùàåò òåêóùóþ y-êîîðäèíàòó êóðñîðà êîíñîëè
  389.  
  390. ------------------------------------------------------------------------------
  391. MODULE ConsoleLib - îáåðòêà áèáëèîòåêè console.obj
  392.  
  393. ------------------------------------------------------------------------------
  394. MODULE Math - ìàòåìàòè÷åñêèå ôóíêöèè
  395.  
  396.         CONST
  397.  
  398.                 pi = 3.141592653589793D+00
  399.                 e  = 2.718281828459045D+00
  400.  
  401.         VAR
  402.  
  403.                 Inf, nInf: LONGREAL
  404.                         ïîëîæèòåëüíàÿ è îòðèöàòåëüíàÿ áåñêîíå÷íîñòü
  405.  
  406.         PROCEDURE IsNan(x: LONGREAL): BOOLEAN
  407.                 âîçâðàùàåò TRUE, åñëè x - íå ÷èñëî
  408.  
  409.         PROCEDURE IsInf(x: LONGREAL): BOOLEAN
  410.                 âîçâðàùàåò TRUE, åñëè x - áåñêîíå÷íîñòü
  411.  
  412.         PROCEDURE sqrt(x: LONGREAL): LONGREAL
  413.                 êâàäðàòíûé êîðåíü x
  414.  
  415.         PROCEDURE exp(x: LONGREAL): LONGREAL
  416.                 ýêñïîíåíòà x
  417.  
  418.         PROCEDURE ln(x: LONGREAL): LONGREAL
  419.                 íàòóðàëüíûé ëîãàðèôì x
  420.  
  421.         PROCEDURE sin(x: LONGREAL): LONGREAL
  422.                 ñèíóñ x
  423.  
  424.         PROCEDURE cos(x: LONGREAL): LONGREAL
  425.                 êîñèíóñ x
  426.  
  427.         PROCEDURE tan(x: LONGREAL): LONGREAL
  428.                 òàíãåíñ x
  429.  
  430.         PROCEDURE arcsin(x: LONGREAL): LONGREAL
  431.                 àðêñèíóñ x
  432.  
  433.         PROCEDURE arccos(x: LONGREAL): LONGREAL
  434.                 àðêêîñèíóñ x
  435.  
  436.         PROCEDURE arctan(x: LONGREAL): LONGREAL
  437.                 àðêòàíãåíñ x
  438.  
  439.         PROCEDURE arctan2(y, x: LONGREAL): LONGREAL
  440.                 àðêòàíãåíñ y/x
  441.  
  442.         PROCEDURE power(base, exponent: LONGREAL): LONGREAL
  443.                 âîçâåäåíèå ÷èñëà base â ñòåïåíü exponent
  444.  
  445.         PROCEDURE log(base, x: LONGREAL): LONGREAL
  446.                 ëîãàðèôì x ïî îñíîâàíèþ base
  447.  
  448.         PROCEDURE sinh(x: LONGREAL): LONGREAL
  449.                 ãèïåðáîëè÷åñêèé ñèíóñ x
  450.  
  451.         PROCEDURE cosh(x: LONGREAL): LONGREAL
  452.                 ãèïåðáîëè÷åñêèé êîñèíóñ x
  453.  
  454.         PROCEDURE tanh(x: LONGREAL): LONGREAL
  455.                 ãèïåðáîëè÷åñêèé òàíãåíñ x
  456.  
  457.         PROCEDURE arcsinh(x: LONGREAL): LONGREAL
  458.                 îáðàòíûé ãèïåðáîëè÷åñêèé ñèíóñ x
  459.  
  460.         PROCEDURE arccosh(x: LONGREAL): LONGREAL
  461.                 îáðàòíûé ãèïåðáîëè÷åñêèé êîñèíóñ x
  462.  
  463.         PROCEDURE arctanh(x: LONGREAL): LONGREAL
  464.                 îáðàòíûé ãèïåðáîëè÷åñêèé òàíãåíñ x
  465.  
  466.         PROCEDURE round(x: LONGREAL): LONGREAL
  467.                 îêðóãëåíèå x äî áëèæàéøåãî öåëîãî
  468.  
  469.         PROCEDURE frac(x: LONGREAL): LONGREAL;
  470.                 äðîáíàÿ ÷àñòü ÷èñëà x
  471.  
  472.         PROCEDURE floor(x: LONGREAL): LONGREAL
  473.                 íàèáîëüøåå öåëîå ÷èñëî (ïðåäñòàâëåíèå êàê LONGREAL),
  474.                 íå áîëüøå x: floor(1.2) = 1.0
  475.  
  476.         PROCEDURE ceil(x: LONGREAL): LONGREAL
  477.                 íàèìåíüøåå öåëîå ÷èñëî (ïðåäñòàâëåíèå êàê LONGREAL),
  478.                 íå ìåíüøå x: ceil(1.2) = 2.0
  479.  
  480.         PROCEDURE sgn(x: LONGREAL): INTEGER
  481.                 åñëè x > 0 âîçâðàùàåò 1
  482.                 åñëè x < 0 âîçâðàùàåò -1
  483.                 åñëè x = 0 âîçâðàùàåò 0
  484.  
  485. ------------------------------------------------------------------------------
  486. MODULE Debug - âûâîä íà äîñêó îòëàäêè
  487.         Èíòåðôåéñ êàê ìîäóëü Out
  488.  
  489.         PROCEDURE Open
  490.                 îòêðûâàåò äîñêó îòëàäêè
  491.  
  492. ------------------------------------------------------------------------------
  493. MODULE File - ðàáîòà ñ ôàéëîâîé ñèñòåìîé
  494.  
  495.         TYPE
  496.  
  497.                 FNAME = ARRAY 520 OF CHAR
  498.  
  499.                 FS = POINTER TO rFS
  500.  
  501.                 rFS = RECORD (* èíôîðìàöèîííàÿ ñòðóêòóðà ôàéëà *)
  502.                         subfunc, pos, hpos, bytes, buffer: INTEGER;
  503.                         name: FNAME
  504.                 END
  505.  
  506.                 FD = POINTER TO rFD
  507.  
  508.                 rFD = RECORD (* ñòðóêòóðà áëîêà äàííûõ âõîäà êàòàëîãà *)
  509.                         attr: INTEGER;
  510.                         ntyp: CHAR;
  511.                         reserved: ARRAY 3 OF CHAR;
  512.                         time_create, date_create,
  513.                         time_access, date_access,
  514.                         time_modif,  date_modif,
  515.                         size, hsize: INTEGER;
  516.                         name: FNAME
  517.                 END
  518.  
  519.         CONST
  520.  
  521.                 SEEK_BEG = 0
  522.                 SEEK_CUR = 1
  523.                 SEEK_END = 2
  524.  
  525.         PROCEDURE Load(FName: ARRAY OF CHAR; VAR size: INTEGER): INTEGER;
  526.                 Çàãðóæàåò â ïàìÿòü ôàéë ñ èìåíåì FName, çàïèñûâàåò â ïàðàìåòð
  527.                 size ðàçìåð ôàéëà, âîçâðàùàåò àäðåñ çàãðóæåííîãî ôàéëà
  528.                 èëè 0 (îøèáêà). Ïðè íåîáõîäèìîñòè, ðàñïàêîâûâàåò
  529.                 ôàéë (kunpack).
  530.  
  531.         PROCEDURE GetFileInfo(FName: ARRAY OF CHAR; VAR Info: rFD): BOOLEAN
  532.                 Çàïèñûâàåò ñòðóêòóðó áëîêà äàííûõ âõîäà êàòàëîãà äëÿ ôàéëà
  533.                 èëè ïàïêè ñ èìåíåì FName â ïàðàìåòð Info.
  534.                 Ïðè îøèáêå âîçâðàùàåò FALSE.
  535.  
  536.         PROCEDURE Exists(FName: ARRAY OF CHAR): BOOLEAN
  537.                 âîçâðàùàåò TRUE, åñëè ôàéë ñ èìåíåì FName ñóùåñòâóåò
  538.  
  539.         PROCEDURE Close(VAR F: FS)
  540.                 îñâîáîæäàåò ïàìÿòü, âûäåëåííóþ äëÿ èíôîðìàöèîííîé ñòðóêòóðû
  541.                 ôàéëà F è ïðèñâàèâàåò F çíà÷åíèå NIL
  542.  
  543.         PROCEDURE Open(FName: ARRAY OF CHAR): FS
  544.                 âîçâðàùàåò óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêòóðó ôàéëà ñ
  545.                 èìåíåì FName, ïðè îøèáêå âîçâðàùàåò NIL
  546.  
  547.         PROCEDURE Delete(FName: ARRAY OF CHAR): BOOLEAN
  548.                 óäàëÿåò ôàéë ñ èìåíåì FName, ïðè îøèáêå âîçâðàùàåò FALSE
  549.  
  550.         PROCEDURE Seek(F: FS; Offset, Origin: INTEGER): INTEGER
  551.                 óñòàíàâëèâàåò ïîçèöèþ ÷òåíèÿ-çàïèñè ôàéëà F íà Offset,
  552.                 îòíîñèòåëüíî Origin = (SEEK_BEG - íà÷àëî ôàéëà,
  553.                 SEEK_CUR - òåêóùàÿ ïîçèöèÿ, SEEK_END - êîíåö ôàéëà),
  554.                 âîçâðàùàåò ïîçèöèþ îòíîñèòåëüíî íà÷àëà ôàéëà, íàïðèìåð:
  555.                         Seek(F, 0, SEEK_END)
  556.                 óñòàíàâëèâàåò ïîçèöèþ íà êîíåö ôàéëà è âîçâðàùàåò äëèíó
  557.                 ôàéëà; ïðè îøèáêå âîçâðàùàåò -1
  558.  
  559.         PROCEDURE Read(F: FS; Buffer, Count: INTEGER): INTEGER
  560.                 ×èòàåò äàííûå èç ôàéëà â ïàìÿòü. F - óêàçàòåëü íà
  561.                 èíôîðìàöèîííóþ ñòðóêòóðó ôàéëà, Buffer - àäðåñ îáëàñòè
  562.                 ïàìÿòè, Count - êîëè÷åñòâî áàéò, êîòîðîå òðåáóåòñÿ ïðî÷èòàòü
  563.                 èç ôàéëà; âîçâðàùàåò êîëè÷åñòâî áàéò, êîòîðîå áûëî ïðî÷èòàíî
  564.                 è ñîîòâåòñòâóþùèì îáðàçîì èçìåíÿåò ïîçèöèþ ÷òåíèÿ/çàïèñè â
  565.                 èíôîðìàöèîííîé ñòðóêòóðå F.
  566.  
  567.         PROCEDURE Write(F: FS; Buffer, Count: INTEGER): INTEGER
  568.                 Çàïèñûâàåò äàííûå èç ïàìÿòè â ôàéë. F - óêàçàòåëü íà
  569.                 èíôîðìàöèîííóþ ñòðóêòóðó ôàéëà, Buffer - àäðåñ îáëàñòè
  570.                 ïàìÿòè, Count - êîëè÷åñòâî áàéò, êîòîðîå òðåáóåòñÿ çàïèñàòü
  571.                 â ôàéë; âîçâðàùàåò êîëè÷åñòâî áàéò, êîòîðîå áûëî çàïèñàíî è
  572.                 ñîîòâåòñòâóþùèì îáðàçîì èçìåíÿåò ïîçèöèþ ÷òåíèÿ/çàïèñè â
  573.                 èíôîðìàöèîííîé ñòðóêòóðå F.
  574.  
  575.         PROCEDURE Create(FName: ARRAY OF CHAR): FS
  576.                 ñîçäàåò íîâûé ôàéë ñ èìåíåì FName (ïîëíîå èìÿ), âîçâðàùàåò
  577.                 óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêòóðó ôàéëà,
  578.                 ïðè îøèáêå âîçâðàùàåò NIL
  579.  
  580.         PROCEDURE CreateDir(DirName: ARRAY OF CHAR): BOOLEAN
  581.                 ñîçäàåò ïàïêó ñ èìåíåì DirName, âñå ïðîìåæóòî÷íûå ïàïêè
  582.                 äîëæíû ñóùåñòâîâàòü, ïðè îøèáêå âîçâðàùàåò FALSE
  583.  
  584.         PROCEDURE DeleteDir(DirName: ARRAY OF CHAR): BOOLEAN
  585.                 óäàëÿåò ïóñòóþ ïàïêó ñ èìåíåì DirName,
  586.                 ïðè îøèáêå âîçâðàùàåò FALSE
  587.  
  588.         PROCEDURE DirExists(DirName: ARRAY OF CHAR): BOOLEAN
  589.                 âîçâðàùàåò TRUE, åñëè ïàïêà ñ èìåíåì DirName ñóùåñòâóåò
  590.  
  591. ------------------------------------------------------------------------------
  592. MODULE Read - ÷òåíèå îñíîâíûõ òèïîâ äàííûõ èç ôàéëà F
  593.  
  594.         Ïðîöåäóðû âîçâðàùàþò TRUE â ñëó÷àå óñïåøíîé îïåðàöèè ÷òåíèÿ è
  595.         ñîîòâåòñòâóþùèì îáðàçîì èçìåíÿþò ïîçèöèþ ÷òåíèÿ/çàïèñè â
  596.         èíôîðìàöèîííîé ñòðóêòóðå F
  597.  
  598.         PROCEDURE Char(F: File.FS; VAR x: CHAR): BOOLEAN
  599.  
  600.         PROCEDURE Int(F: File.FS; VAR x: INTEGER): BOOLEAN
  601.  
  602.         PROCEDURE Real(F: File.FS; VAR x: REAL): BOOLEAN
  603.  
  604.         PROCEDURE LongReal(F: File.FS; VAR x: LONGREAL): BOOLEAN
  605.  
  606.         PROCEDURE Boolean(F: File.FS; VAR x: BOOLEAN): BOOLEAN
  607.  
  608.         PROCEDURE Set(F: File.FS; VAR x: SET): BOOLEAN
  609.  
  610.         PROCEDURE Card16(F: File.FS; VAR x: SYSTEM.CARD16): BOOLEAN
  611.  
  612. ------------------------------------------------------------------------------
  613. MODULE Write - çàïèñü îñíîâíûõ òèïîâ äàííûõ â ôàéë F
  614.  
  615.         Ïðîöåäóðû âîçâðàùàþò TRUE â ñëó÷àå óñïåøíîé îïåðàöèè çàïèñè è
  616.         ñîîòâåòñòâóþùèì îáðàçîì èçìåíÿþò ïîçèöèþ ÷òåíèÿ/çàïèñè â
  617.         èíôîðìàöèîííîé ñòðóêòóðå F
  618.  
  619.         PROCEDURE Char(F: File.FS; x: CHAR): BOOLEAN
  620.  
  621.         PROCEDURE Int(F: File.FS; x: INTEGER): BOOLEAN
  622.  
  623.         PROCEDURE Real(F: File.FS; x: REAL): BOOLEAN
  624.  
  625.         PROCEDURE LongReal(F: File.FS; x: LONGREAL): BOOLEAN
  626.  
  627.         PROCEDURE Boolean(F: File.FS; x: BOOLEAN): BOOLEAN
  628.  
  629.         PROCEDURE Set(F: File.FS; x: SET): BOOLEAN
  630.  
  631.         PROCEDURE Card16(F: File.FS; x: SYSTEM.CARD16): BOOLEAN
  632.  
  633. ------------------------------------------------------------------------------
  634. MODULE DateTime - äàòà, âðåìÿ
  635.  
  636.         CONST ERR = -7.0D5
  637.  
  638.         PROCEDURE Now(VAR Year, Month, Day, Hour, Min, Sec: INTEGER)
  639.                 çàïèñûâàåò â ïàðàìåòðû êîìïîíåíòû òåêóùåé ñèñòåìíîé äàòû è
  640.                 âðåìåíè
  641.  
  642.         PROCEDURE Encode(Year, Month, Day, Hour, Min, Sec: INTEGER): LONGREAL
  643.                 âîçâðàùàåò äàòó, ïîëó÷åííóþ èç êîìïîíåíòîâ
  644.                 Year, Month, Day, Hour, Min, Sec;
  645.                 ïðè îøèáêå âîçâðàùàåò êîíñòàíòó ERR = -7.0D5
  646.  
  647.         PROCEDURE Decode(Date: LONGREAL; VAR Year, Month, Day,
  648.                                 Hour, Min, Sec: INTEGER): BOOLEAN
  649.                 èçâëåêàåò êîìïîíåíòû
  650.                 Year, Month, Day, Hour, Min, Sec èç äàòû Date;
  651.                 ïðè îøèáêå âîçâðàùàåò FALSE
  652.  
  653. ------------------------------------------------------------------------------
  654. MODULE Args - ïàðàìåòðû ïðîãðàììû
  655.  
  656.         VAR argc: INTEGER
  657.                 êîëè÷åñòâî ïàðàìåòðîâ ïðîãðàììû, âêëþ÷àÿ èìÿ
  658.                 èñïîëíÿåìîãî ôàéëà
  659.  
  660.         PROCEDURE GetArg(n: INTEGER; VAR s: ARRAY OF CHAR)
  661.                 çàïèñûâàåò â ñòðîêó s n-é ïàðàìåòð ïðîãðàììû,
  662.                 íóìåðàöèÿ ïàðàìåòðîâ îò 0 äî argc - 1,
  663.                 íóëåâîé ïàðàìåòð -- èìÿ èñïîëíÿåìîãî ôàéëà
  664.  
  665. ------------------------------------------------------------------------------
  666. MODULE KOSAPI
  667.  
  668.         PROCEDURE sysfunc1(arg1: INTEGER): INTEGER
  669.         PROCEDURE sysfunc2(arg1, arg2: INTEGER): INTEGER
  670.         ...
  671.         PROCEDURE sysfunc7(arg1, arg2, ..., arg7: INTEGER): INTEGER
  672.                 Îáåðòêè äëÿ ôóíêöèé API ÿäðà KolibriOS.
  673.                 arg1 .. arg7 ñîîòâåòñòâóþò ðåãèñòðàì
  674.                         eax, ebx, ecx, edx, esi, edi, ebp;
  675.                 âîçâðàùàþò çíà÷åíèå ðåãèñòðà eax ïîñëå ñèñòåìíîãî âûçîâà.
  676.  
  677.         PROCEDURE sysfunc22(arg1, arg2: INTEGER; VAR res2: INTEGER): INTEGER
  678.                 Îáåðòêà äëÿ ôóíêöèé API ÿäðà KolibriOS.
  679.                 arg1 - ðåãèñòð eax, arg2 - ðåãèñòð ebx,
  680.                 res2 - çíà÷åíèå ðåãèñòðà ebx ïîñëå ñèñòåìíîãî âûçîâà;
  681.                 âîçâðàùàåò çíà÷åíèå ðåãèñòðà eax ïîñëå ñèñòåìíîãî âûçîâà.
  682.  
  683.         PROCEDURE malloc(size: INTEGER): INTEGER
  684.                 Âûäåëÿåò áëîê ïàìÿòè.
  685.                 size - ðàçìåð áëîêà â áàéòàõ,
  686.                 âîçâðàùàåò àäðåñ âûäåëåííîãî áëîêà
  687.  
  688.         PROCEDURE free(ptr: INTEGER): INTEGER
  689.                 Îñâîáîæäàåò ðàíåå âûäåëåííûé áëîê ïàìÿòè ñ àäðåñîì ptr,
  690.                 âîçâðàùàåò 0
  691.  
  692.         PROCEDURE realloc(ptr, size: INTEGER): INTEGER
  693.                 Ïåðåðàñïðåäåëÿåò áëîê ïàìÿòè,
  694.                 ptr - àäðåñ ðàíåå âûäåëåííîãî áëîêà,
  695.                 size - íîâûé ðàçìåð,
  696.                 âîçâðàùàåò óêàçàòåëü íà ïåðåðàñïðåäåëåííûé áëîê,
  697.                 0 ïðè îøèáêå
  698.  
  699.         PROCEDURE GetCommandLine(): INTEGER
  700.                 Âîçâðàùàåò àäðåñ ñòðîêè ïàðàìåòðîâ
  701.  
  702.         PROCEDURE GetName(): INTEGER
  703.                 Âîçâðàùàåò àäðåñ ñòðîêè ñ èìåíåì ïðîãðàììû
  704.  
  705.         PROCEDURE LoadLib(name: ARRAY OF CHAR): INTEGER
  706.                 Çàãðóæàåò DLL ñ ïîëíûì èìåíåì name. Âîçâðàùàåò àäðåñ òàáëèöû
  707.                 ýêñïîðòà. Ïðè îøèáêå âîçâðàùàåò 0.
  708.  
  709.         PROCEDURE GetProcAdr(name: ARRAY OF CHAR; lib: INTEGER): INTEGER
  710.                 name - èìÿ ïðîöåäóðû
  711.                 lib - àäðåñ òàáëèöû ýêñïîðòà DLL
  712.                 Âîçâðàùàåò àäðåñ ïðîöåäóðû. Ïðè îøèáêå âîçâðàùàåò 0.
  713.  
  714. ------------------------------------------------------------------------------
  715. MODULE ColorDlg - ðàáîòà ñ äèàëîãîì "Color Dialog"
  716.  
  717.         TYPE
  718.  
  719.                 Dialog = POINTER TO RECORD (* ñòðóêòóðà äèàëîãà *)
  720.                     status: INTEGER   (* ñîñòîÿíèå äèàëîãà:
  721.                                          0 - ïîëüçîâàòåëü íàæàë Cancel
  722.                                          1 - ïîëüçîâàòåëü íàæàë OK
  723.                                          2 - äèàëîã îòêðûò           *)
  724.  
  725.                     color:  INTEGER   (* âûáðàííûé öâåò *)
  726.                 END
  727.  
  728.         PROCEDURE Create(draw_window: DRAW_WINDOW): Dialog
  729.                 ñîçäàòü äèàëîã
  730.                 draw_window - ïðîöåäóðà ïåðåðèñîâêè îñíîâíîãî îêíà
  731.                 (TYPE DRAW_WINDOW = PROCEDURE);
  732.                 ïðîöåäóðà âîçâðàùàåò óêàçàòåëü íà ñòðóêòóðó äèàëîãà
  733.  
  734.         PROCEDURE Show(cd: Dialog)
  735.                 ïîêàçàòü äèàëîã
  736.                 cd - óêàçàòåëü íà ñòðóêòóðó äèàëîãà, êîòîðûé áûë ñîçäàí ðàíåå
  737.                 ïðîöåäóðîé Create
  738.  
  739.         PROCEDURE Destroy(VAR cd: Dialog)
  740.                 óíè÷òîæèòü äèàëîã
  741.                 cd - óêàçàòåëü íà ñòðóêòóðó äèàëîãà
  742.  
  743. ------------------------------------------------------------------------------
  744. MODULE OpenDlg - ðàáîòà ñ äèàëîãîì "Open Dialog"
  745.  
  746.         TYPE
  747.  
  748.                 Dialog = POINTER TO RECORD (* ñòðóêòóðà äèàëîãà *)
  749.                     status:   INTEGER  (* ñîñòîÿíèå äèàëîãà:
  750.                                           0 - ïîëüçîâàòåëü íàæàë Cancel
  751.                                           1 - ïîëüçîâàòåëü íàæàë OK
  752.                                           2 - äèàëîã îòêðûò           *)
  753.  
  754.                     FileName: ARRAY 4096 OF CHAR (* èìÿ âûáðàííîãî ôàéëà *)
  755.                     FilePath: ARRAY 4096 OF CHAR (* ïîëíîå èìÿ âûáðàííîãî
  756.                                                     ôàéëà                *)
  757.                 END
  758.  
  759.         PROCEDURE Create(draw_window: DRAW_WINDOW; type: INTEGER; def_path,
  760.                         filter: ARRAY OF CHAR): Dialog
  761.                 ñîçäàòü äèàëîã
  762.                 draw_window - ïðîöåäóðà ïåðåðèñîâêè îñíîâíîãî îêíà
  763.                         (TYPE DRAW_WINDOW = PROCEDURE)
  764.                 type -  òèï äèàëîãà
  765.                         0 - îòêðûòü
  766.                         1 - ñîõðàíèòü
  767.                         2 - âûáðàòü ïàïêó
  768.                 def_path - ïóòü ïî óìîë÷àíèþ, ïàïêà def_path áóäåò îòêðûòà
  769.                         ïðè ïåðâîì çàïóñêå äèàëîãà
  770.                 filter - â ñòðîêå çàïèñàíî ïåðå÷èñëåíèå ðàñøèðåíèé ôàéëîâ,
  771.                         êîòîðûå áóäóò ïîêàçàíû â äèàëîãîâîì îêíå, ðàñøèðåíèÿ
  772.                         ðàçäåëÿþòñÿ ñèìâîëîì "|", íàïðèìåð: "ASM|TXT|INI"
  773.                 ïðîöåäóðà âîçâðàùàåò óêàçàòåëü íà ñòðóêòóðó äèàëîãà
  774.  
  775.         PROCEDURE Show(od: Dialog; Width, Height: INTEGER)
  776.                 ïîêàçàòü äèàëîã
  777.                 od - óêàçàòåëü íà ñòðóêòóðó äèàëîãà, êîòîðûé áûë ñîçäàí ðàíåå
  778.                      ïðîöåäóðîé Create
  779.                 Width è Height - øèðèíà è âûñîòà äèàëîãîâîãî îêíà
  780.  
  781.         PROCEDURE Destroy(VAR od: Dialog)
  782.                 óíè÷òîæèòü äèàëîã
  783.                 od - óêàçàòåëü íà ñòðóêòóðó äèàëîãà
  784.  
  785. ------------------------------------------------------------------------------
  786. MODULE kfonts - ðàáîòà ñ kf-øðèôòàìè
  787.  
  788.         CONST
  789.  
  790.                 bold            =   1
  791.                 italic          =   2
  792.                 underline       =   4
  793.                 strike_through  =   8
  794.                 smoothing       =  16
  795.                 bpp32           =  32
  796.  
  797.         TYPE
  798.  
  799.                 TFont = POINTER TO TFont_desc (* óêàçàòåëü íà øðèôò *)
  800.  
  801.         PROCEDURE LoadFont(file_name: ARRAY OF CHAR): TFont
  802.                 çàãðóçèòü øðèôò èç ôàéëà
  803.                 file_name   èìÿ kf-ôàéëà
  804.                 ðåç-ò:      óêàçàòåëü íà øðèôò/NIL (îøèáêà)
  805.  
  806.         PROCEDURE SetSize(Font: TFont; font_size: INTEGER): BOOLEAN
  807.                 óñòàíîâèòü ðàçìåð øðèôòà
  808.                 Font        óêàçàòåëü íà øðèôò
  809.                 font_size   ðàçìåð øðèôòà
  810.                 ðåç-ò:      TRUE/FALSE (îøèáêà)
  811.  
  812.         PROCEDURE Enabled(Font: TFont; font_size: INTEGER): BOOLEAN
  813.                 ïðîâåðèòü, åñòü ëè øðèôò, çàäàííîãî ðàçìåðà
  814.                 Font        óêàçàòåëü íà øðèôò
  815.                 font_size   ðàçìåð øðèôòà
  816.                 ðåç-ò:      TRUE/FALSE (øðèôòà íåò)
  817.  
  818.         PROCEDURE Destroy(VAR Font: TFont)
  819.                 âûãðóçèòü øðèôò, îñâîáîäèòü äèíàìè÷åñêóþ ïàìÿòü
  820.                 Font        óêàçàòåëü íà øðèôò
  821.                 Ïðèñâàèâàåò ïåðåìåííîé Font çíà÷åíèå NIL
  822.  
  823.         PROCEDURE TextHeight(Font: TFont): INTEGER
  824.                 ïîëó÷èòü âûñîòó ñòðîêè òåêñòà
  825.                 Font        óêàçàòåëü íà øðèôò
  826.                 ðåç-ò:      âûñîòà ñòðîêè òåêñòà â ïèêñåëÿõ
  827.  
  828.         PROCEDURE TextWidth(Font: TFont;
  829.                     str, length, params: INTEGER): INTEGER
  830.                 ïîëó÷èòü øèðèíó ñòðîêè òåêñòà
  831.                 Font        óêàçàòåëü íà øðèôò
  832.                 str         àäðåñ ñòðîêè òåêñòà â êîäèðîâêå Win-1251
  833.                 length      êîëè÷åñòâî ñèìâîëîâ â ñòðîêå èëè -1, åñëè ñòðîêà
  834.                             çàâåðøàåòñÿ íóëåì
  835.                 params      ïàðàìåòðû-ôëàãè ñì. íèæå
  836.                 ðåç-ò:      øèðèíà ñòðîêè òåêñòà â ïèêñåëÿõ
  837.  
  838.         PROCEDURE TextOut(Font: TFont;
  839.                     canvas, x, y, str, length, color, params: INTEGER)
  840.                 âûâåñòè òåêñò â áóôåð
  841.                 äëÿ âûâîäà áóôåðà â îêíî, èñïîëüçîâàòü ô.65 èëè
  842.                 ô.7 (åñëè áóôåð 24-áèòíûé)
  843.                 Font        óêàçàòåëü íà øðèôò
  844.                 canvas      àäðåñ ãðàôè÷åñêîãî áóôåðà
  845.                             ñòðóêòóðà áóôåðà:
  846.                               Xsize       dd
  847.                               Ysize       dd
  848.                               picture     rb  Xsize * Ysize * 4 (32 áèòà)
  849.                                               èëè Xsize * Ysize * 3 (24 áèòà)
  850.                 x, y        êîîðäèíàòû òåêñòà îòíîñèòåëüíî ëåâîãî âåðõíåãî
  851.                             óãëà áóôåðà
  852.                 str         àäðåñ ñòðîêè òåêñòà â êîäèðîâêå Win-1251
  853.                 length      êîëè÷åñòâî ñèìâîëîâ â ñòðîêå èëè -1, åñëè ñòðîêà
  854.                             çàâåðøàåòñÿ íóëåì
  855.                 color       öâåò òåêñòà 0x00RRGGBB
  856.                 params      ïàðàìåòðû-ôëàãè:
  857.                                1   æèðíûé
  858.                                2   êóðñèâ
  859.                                4   ïîä÷åðêíóòûé
  860.                                8   ïåðå÷åðêíóòûé
  861.                               16   ïðèìåíèòü ñãëàæèâàíèå
  862.                               32   âûâîä â 32-áèòíûé áóôåð
  863.                             âîçìîæíî èñïîëüçîâàíèå ôëàãîâ â ëþáûõ ñî÷åòàíèÿõ
  864. ------------------------------------------------------------------------------
  865. MODULE RasterWorks - îáåðòêà áèáëèîòåêè Rasterworks.obj
  866. ------------------------------------------------------------------------------
  867. MODULE libimg - îáåðòêà áèáëèîòåêè libimg.obj
  868. ------------------------------------------------------------------------------
  869. MODULE NetDevices - îáåðòêà äëÿ ô.74 (ðàáîòà ñ ñåòåâûìè óñòðîéñòâàìè)
  870. ------------------------------------------------------------------------------