2 CMemCopy(cDestination, cSource: Pointer; cSize: Int); internal;
3 -> skopiruje cSize Intov z cSource do cDestination
5 CMemSet(cMemory: Pointer; cLength, cValue: Integer); internal;
6 -> nastavi pamat danu cMemory o dlzke cLength na cValue
8 ERangeCheckError; internal;
9 -> Vyvola vynimku RangeCheckError a skonci beh programu
13 RefCount, Size: Integer;
14 Data: array [1..Size] of Byte;
18 BCreate(cInt: Int): Blob; stdcall;
19 BCreateR(cInt: Int): Blob; register;
20 BCreateEmptyR(cInt: Int): Blob; register;
21 BBCreate(cInt: Int): Blob; special;
22 -> vytvori (prazdny) Blob o velkosti cInt
23 cInt by mal byt vzdy vacsi ako 0
25 BDestroy(cBlob: Blob); stdcall;
26 BDestroyR(cBlob: Blob); register;
27 BDestroyC(cBlob: Blob); cdecl;
28 -> odstrani dany cBlob
30 BLengthC(cBlob: Blob): Int; cdecl;
31 BBGetLength(cBlob: Blob): Blob; blobcall;
32 -> vrati velkost cBlob
33 tato velkost by mala byt vzdy vacsia ako 0
35 BBSetLength(cBlob, cNewLength: Blob): Blob; blobcall;
36 BResize(cBlob: Blob; cNewLength: Int): Blob; stdcall;
37 -> vrati Blob o velkosti cNewLength
38 skopiruje povodny obsah do noveho, ak sa zvacsil, napadduje nulami
40 BEnlarge(cBlob: Blob; cNewLength: Int): Blob; stdcall;
41 -> zvacsi cBlob na dlzku cNewLength, ak ta je viac ako aktualna dlzka
43 BCopy(cBlob: Blob): Blob; stdcall;
44 BBCopy(cBlob: Blob): Blob; special;
45 -> vrati Blob obsahujuci kopiu cBlob
47 BToIndex(cBlob: Blob): Int; stdcall;
48 -> vrati reprezentaciu cBlob ako index do ineho Blobu
49 pri chybe sposobi RangeCheckError
51 BBToBlob(cInt: Int): Blob; blobcall;
52 -> vrati optimalny Blob reprezentujuci dany Int
54 BToPtr(cBlob, cIndex: Blob): Pointer; stdcall;
55 -> vrati Pointer na prvok cBlob[cIndex]
56 pri chybe sposobi RangeCheckError
58 BGetElement(cBlob, cIndex: Blob): Blob; stdcall;
59 BBGetElement(cBlob, cIndex: Blob): Blob; blobcall;
60 -> vrati cBlob[cIndex] ako Blob
62 BBSetElement(cBlob, cIndex, cValue: Blob): Blob; blobcall;
63 -> vrati kopiu cBlob, pre ktoru plati cBlob[cIndex] := cValue;
65 BOptimize(cBlob: Blob): Blob; stdcall;
66 -> vrati dlzkovo optimalizovanu verziu cBlob
68 BNot(cBlob: Blob): Blob; stdcall;
69 BBNot(cBlob: Blob): Blob; blobcall;
70 -> vrati binarne negovanu verziu cBlob
72 BAnd(cBlob1, cBlob2: Blob): Blob; stdcall;
73 BBAnd(cBlob1, cBlob2: Blob): Blob; blobcall;
74 -> vrati (cBlob1 AND cBlob2)
76 BOr(cBlob1, cBlob2: Blob): Blob; stdcall;
77 BBOr(cBlob1, cBlob2: Blob): Blob; blobcall;
78 -> vrati (cBlob1 OR cBlob2)
80 BXor(cBlob1, cBlob2: Blob): Blob; stdcall;
81 BBXor(cBlob1, cBlob2: Blob): Blob; blobcall;
82 -> vrati (cBlob1 XOR cBlob2)
84 BToShiftLow(cShift: Blob): Int; stdcall;
85 -> vrati spodne 3 bity z cShift
87 BToShiftHigh(cShift: Blob): Int; stdcall;
88 -> vrati bity 4-35 z cShift
89 ak je cShift vacsi, vrati najvacsi vyjadritelny Int
91 BShiftLeft(cBlob, cShift: Blob): Blob; stdcall;
92 BBShiftLeft(cBlob, cShift: Blob): Blob; blobcall;
93 -> vrati (cBlob << cShift)
95 BShiftRight(cBlob, cShift: Blob): Blob; stdcall;
96 BBShiftRight(cBlob, cShift: Blob): Blob; blobcall;
97 -> vrati (cBlob >> cShift)
99 BNegate(cBlob: Blob): Blob; stdcall;
100 BBNegate(cBlob: Blob): Blob; blobcall;
101 -> vrati Blob reprezentujuci znamienkovo negovany cBlob
103 BSign(cBlob: Blob): Int; stdcall;
104 -> vrati 1 ak (cBlob < 0), inak 0
106 BSignExtend(cBlob: Blob; cNewLength: Int): Blob; stdcall;
107 -> rozsiri cBlob znamienkovo na cNewLength
108 -> cNewLength musi byt vacsi ako aktualna dlzka
110 BEquals(cBlob1, cBlob2): Blob; stdcall;
111 BBEquals(cBlob1, cBlob2): Blob; blobcall;
112 -> vrati Blob reprezentujuci -1 ak (cBlob1 == cBlob2), inak 0
114 BBGreater(cBlob1, cBlob2): Blob; blobcall;
115 -> vrati Blob reprezentujuci -1 ak (cBlob1 > cBlob2), inak 0
117 BBAdd(cBlob1, cBlob2: Blob): Blob; blobcall;
118 -> vrati novy Blob reprezentujuci (cBlob1 + cBlob2)
120 BBSubtract(cBlob1, cBlob2: Blob): Blob; blobcall;
121 -> vrati novy Blob reprezentujuci (cBlob1 - cBlob2)
123 BMultiply(cBlob1, cBlob2: Blob): Blob; stdcall;
124 BBMultiply(cBlob1, cBlob2: Blob): Blob; blobcall;
125 -> vrati novy Blob reprezentujuci (cBlob1 * cBlob2)
127 BBDivMod(CBlob1, cBlob2: Blob): (Blob, Blob, Int); blobcall;
128 -> vrati (cBlob1 / cBlob2), (cBlob1 % cBlob2) a znamienko na zasobniku
129 -> Vystupy su neoptimalizovane, nie je na ne aplikovane znamienko
131 BDivide(cBlob1, cBlob2: Blob): Blob; stdcall;
132 BBDivide(cBlob1, cBlob2: Blob): Blob; blobcall;
133 -> vrati novy Blob reprezentujuci (cBlob1 / cBlob2)
135 BModulo(cBlob1, cBlob2: Blob): Blob; stdcall;
136 BBModulo(cBlob1, cBlob2: Blob): Blob; blobcall;
137 -> vrati novy Blob reprezentujuci (cBlob1 % cBlob2)
139 BDecimalAdd16R(cBlob: Blob; cValue: Int): Blob; register;
140 -> vrati Blob reprezentujuci (cBlob + cValue) v desiatkovom zapise (BCD)
141 cBlob musi byt v desiatkovom zapise (BCD)
142 cBlob je na konci uvolneny, netreba ho teda uvolnovat
143 cValue je hodnota z intervalu 0 - 15
145 BDecimalMul16R(cBlob: Blob): Blob; register;
146 -> vrati Blob reprezentujuci (cBlob * 16) v desiatkovom zapise (BCD)
147 cBlob musi byt v desiatkovom zapise (BCD)
148 cBlob je na konci uvolneny, netreba ho teda uvolnovat
150 BIntToStr(cBlob: Blob): Blob; register;
151 -> vrati znamienkove cislo reprezentovane cBlom-om ako retazec
152 tento retazec je v ASCII zapise
154 BBPrintStr(cBlob: Blob); blobcall;
155 -> vypise cBlob ako retazec
157 BBPrintInt(cBlob: Blob); blobcall;
158 -> vypise cBlob ako znamienkove cislo
160 BBgetchr(): Blob; blobcall;
161 -> nacita Char a vrati Blob reprezentujuci tento Char
163 BBgetint(): Blob; blobcall;
164 -> nacita Int a vrati Blob reprezentujuci tento Int
166 BBoutstr(cFormatBlob, cParam1, cParam2, ... : Blob); blobcall;
167 -> formatovany vystup na obrazovku, podobny printf
168 podporovane prepinace:
173 BFinalizeResult(cBlob: Int): Blob; special;
174 -> ak (cBlob == -1), tak na zasobniku vrati Blob reprezentujuci hodnotu 0
175 inak vrati na zasobniku cBlob
177 BBIsZero(cBlob: Blob): Int; blobcall;
178 -> vrati 0 ak (cBlob == 0), inak 1
180 BBTrue(): Blob; blobcall;
181 -> vrati Blob reprezentujuci TRUE (hodnota -1)
183 BBFalse(): Blob; blobcall;
184 -> vrati Blob reprezentujuci FALSE (hodnota 0)
188 eax, ecx, edx -> Lokalne registre, mozu sa modifikovat v LUBOVOLNEJ funkcii
189 ebx, esi, edi, ebp, esp -> Funkcie musia zachovat obsah registrov
193 Pouziva sa na implementaciu vnutornych operacii
194 Pouziva registre InternalX
195 Zachovava vsetky bezne registre (eax, ecx, ...)
198 Sluzi na male, rychle funkcie
199 Pokus o napodobnenie "register calling convention", teda:
200 Vysledok funkcie sa ulozi do registra eax
201 Prve tri parametre su v registroch eax, edx, ecx
202 Ostatne parametre su v spravnom poradi ulozene na zasobniku
203 Volana funkcia je zodpovedna za odstranenie parametrov zo zasobnika
206 Pokus o napodobenie "stdcall calling convention", teda:
207 Vysledok funkcie sa ulozi do registra eax
208 Parametre funkcie sa ukladaju na zasobnik v opacnom poradi
209 Volana funkcia je zodpovedna za odstranenie parametrov zo zasobnika
212 Pokus o napodobenie "cdecl calling convention", teda:
213 Vysledok funkcie sa ulozi do registra eax
214 Parametre funkcie sa ukladaju na zasobnik v opacnom poradi
215 Volajuci je zodpovedny za odstranenie parametrov zo zasobnika
218 Specialna volacia syntax, vhodna pre jazyk BoB
219 Vysledok funkcie sa ulozi na vrch zasobnika, ak je to Blob
220 Inak sa ulozi do registra eax
221 Parametre funkcie sa ukladaju na zasobnik v opacnom poradi
222 Na kazdy blob zadany ako parameter sa zavola BDestroy
223 Volana funkcia je zodpovedna za odstranenie parametrov zo zasobnika