EnglishРусский  

   ..

   vm.c

   vm.h

   vm-a.h

   vmload.c

   vmload.h

   vmres.c

   vmres.h

   vmrun.c

   vmrun.h

   vmrun-a.c

   vmtype.c

   vmtype.h

Реклама

Инсталлятор CreateInstall
Бесплатные и коммерческие инсталляторы

source\src\vm\vmload.h
  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 
Редактировать