Subversion Repositories Kolibri OS

Rev

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