Subversion Repositories Kolibri OS

Rev

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