1 /******************************************************************************
2 *
3 * Copyright (C) 2006, The Gentee Group. All rights reserved.
4 * This file is part of the Gentee open source project - http://www.gentee.com.
5 *
6 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT").
7 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS
8 * ACCEPTANCE OF THE AGREEMENT.
9 *
10 * ID: vmload 18.10.06 0.0.A.
11 *
12 * Author: Alexey Krivonogov ( gentee )
13 *
14 * Summary: Load objects into VM
15 *
16 ******************************************************************************/
17
18 #ifndef _VMLOAD_
19 #define _VMLOAD_
20
21 #ifdef __cplusplus
22 extern "C" {
23 #endif // __cplusplus
24
25 #include "vmrun.h"
26
27 // Флаги для VAR DWORD MODE
28
29 #define VAR_NAME 0x01 // Есть имя
30 #define VAR_OFTYPE 0x02 // Есть of type
31 #define VAR_DIM 0x04 // Есть размерность [,,,]
32 #define VAR_IDNAME 0x08 // For define if macro has IDNAME type
33 // В этом случае, тип строка, но она содержит имя идентификатора
34 #define VAR_PARAM 0x10 // Параметр функции или подфункции
35 #define VAR_DATA 0x20 // Имеются данные
36
37 //--------------------------------------------------------------------------
38 /* FULL MODE
39
40 Все FULL MODE должны начинаться с
41 1 - byte - тип объекта OVM_*****
42 2 - uint - флаги flags
43 3 - BWD - размер загружаемых данных - весь включая общие данные
44 4 - pbyte - последовательность байт до 0 - имя объекта если есть флаг GHCOM_NAME
45
46 //--------------------------------------------------------------------------
47
48 Формат описания переменной определенного типа VAR DWORD MODE
49
50 BWD - тип
51 ubyte - [VARFLAG] флаги VAR_
52
53 if [VARFLAG] & VAR_NAME
54 pbyte - имя подтипа - последовательность байт до 0
55
56 if [VARFLAG] & VAR_OFTYPE
57 BWD - Тип - oftype
58
59 if [VARFLAG] & VAR_DIM
60 ubyte - [DIM] - размерность
61 for [DIM]
62 BWD - величины размерностей
63
64 if [VARFLAG] & VAR_DATA
65 Последовательность данных. Для чисел - числа
66 Для прочих
67 BWD - размер
68 Далее идет данные
69
70 //--------------------------------------------------------------------------
71
72 Формат DWORD MODE для OVM_TYPE
73
74 if GHTY_INHERIT
75 BWD - Тип - родитель inherit если есть флаг GHTY_INHERIT
76
77 if GHTY_INDEX
78 BWD - Тип - index
79 BWD - Тип - index oftype
80
81 if GHTY_INITDEL
82 BWD - ID - method init
83 BWD - ID - method delete
84
85 if GHTY_EXTFUNC
86 BWD - ID - method oftype
87 BWD - ID - method = %{}
88
89 if GHTY_ARRAY
90 if BWD > MAX_MSR - один метод ID array
91 else array[ MAX_MSR ] - методы array
92
93 BWD - [COUNT] - Количество подтипов. Если GHTY_STACK, то размер
94
95 for [COUNT]
96 Описание [VAR DWORD MODE]
97
98 //--------------------------------------------------------------------------
99
100 Формат DWORD MODE для OVM_BYTECODE
101
102 [VAR DWORD MODE] - тип возвращаемого значения
103 BWD - [PAR COUNT] - Количество параметров
104
105 for [ PAR COUNT ]
106 Описания [VAR DWORD MODE] параметров
107
108 BWD - [SET COUNT] - Количество блоков параметров
109
110 for [ SET COUNT ]
111 BWD - [VAR COUNT] - Количество переменных
112
113 for [SUMMARY VAR COUNT]
114 Описания [VAR DWORD MODE] параметров
115
116 dwords - последовательность dword - команды байт кода
117
118 //--------------------------------------------------------------------------
119
120 Формат DWORD MODE для OVM_EXFUNC
121
122 [VAR DWORD MODE] - тип возвращаемого значения
123 BWD - [PAR COUNT] - Количество параметров
124
125 for [ PAR COUNT ]
126 Описания [VAR DWORD MODE] параметров
127
128 if [GHEX_IMPORT]
129 BWD - library id
130 pubyte - the original name
131
132 //--------------------------------------------------------------------------
133
134 Формат DWORD MODE для OVM_DEFINE
135
136 dword [COUNT] - Количество элементов
137 for [COUNT]
138 Описание [VAR DWORD MODE]
139
140 //--------------------------------------------------------------------------
141
142 Формат DWORD MODE для OVM_IMPORT
143
144 pubyte - the name of the file
145 if GHIMP_LINK
146 dword [SIZE] - the size of DLL
147 ubyte SIZE - the body of the dll
148
149 //--------------------------------------------------------------------------
150
151 Формат DWORD MODE для OVM_GLOBAL
152
153 [VAR DWORD MODE] - тип переменной
154
155 //--------------------------------------------------------------------------
156
157 Формат DWORD MODE для OVM_ALIAS
158
159 BWD - the id of linked object
160
161 //--------------------------------------------------------------------------
162
163 Формат DWORD MODE для OVM_RESOURCE
164
165 BWD - [COUNT] - Количество строк
166 for [COUNT]
167 BWD - the id of type
168 TStr pubyte - строка
169 */
170
171 // Parameters for 'mode' of load_bytecode
172 #define VMLOAD_GE 0 // Loading from GE
173 #define VMLOAD_G 1 // Loading from G
174 #define VMLOAD_EXTERN 1 // Extern description
175 #define VMLOAD_FIRST 2 // Pre-loading function
176 #define VMLOAD_OK 3 // Loading byte-code
177
178 uint STDCALL load_bwd( pubyte * ptr );
179 uint STDCALL load_convert( pubyte * ptr );
180 pvmobj STDCALL load_addobj( uint over );
181 pvmobj STDCALL load_stack( int top, int cmd, stackfunc pseudo );
182 pvmobj STDCALL load_type( pubyte* input );
183 pvmobj STDCALL load_bytecode( pubyte* input, uint mode );
184 pvmobj STDCALL load_exfunc( pubyte* input, uint over );
185 pvmobj STDCALL load_define( pubyte* input );
186 pvmobj STDCALL load_import( pubyte* input );
187 pvmobj STDCALL load_global( pubyte* input );
188 pvmobj STDCALL load_alias( pubyte* input );
189
190 #ifdef _ASM
191 void STDCALL ge_toasm( uint id, pbuf bout );
192 #endif
193
194 /*
195
196 По окончанию загрузки предворительная инициализация
197
198 Заполняем поля GHRT_INIT GHRT_DEINIT у типов
199 Инициализируем global variables
200 выполняем entry
201 выполняем main если это необходимо
202 */
203
204 //--------------------------------------------------------------------------
205
206
207 #ifdef __cplusplus
208 }
209 #endif // __cplusplus
210
211 #endif // _VMLOAD_
212
213
Редактировать