Rev 7700 | Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6446 | GerdtR | 1 | #include |
2 | #include |
||
3 | |||
4 | typedef struct _BIT_{ |
||
5 | unsigned int siz:8; |
||
6 | unsigned int ofs:24; |
||
7 | }BIT; |
||
8 | |||
9 | struct _PROCINFO_ |
||
10 | { |
||
11 | char *buf; //адрес текста процедуры |
||
12 | void *classteg; //адрес тега, где определена процедура |
||
13 | unsigned int warn:1; |
||
14 | unsigned int speed:1; |
||
15 | unsigned int lst:1; |
||
16 | unsigned int typestring:2; |
||
17 | unsigned int inlinest:1; |
||
18 | unsigned int code32:1; |
||
19 | unsigned int align:1; |
||
20 | unsigned int acycle:1; |
||
21 | unsigned int idasm:1; |
||
22 | unsigned int opnum:1; |
||
23 | unsigned int de:1; |
||
24 | unsigned int ostring:1; |
||
25 | unsigned int uselea:1; |
||
26 | unsigned int regoverstack:1; |
||
27 | unsigned int sizeacycle; |
||
28 | char chip; |
||
29 | }; |
||
30 | |||
31 | struct idrec |
||
32 | { |
||
33 | union{ |
||
34 | struct idrec *left; |
||
35 | struct localrec *next; |
||
36 | }; |
||
37 | struct idrec *right; //предыдущ и следующ запись |
||
38 | char recid[IDLENGTH]; //имя |
||
39 | unsigned int flag; |
||
40 | char *newid; //блок с даными, для структур адрес тега,для процедур параметры |
||
41 | int rectok; //тип |
||
42 | int recrm; //для структур число копий |
||
43 | int recsegm; |
||
44 | int recpost; |
||
45 | int recsize; |
||
46 | int recsib; |
||
47 | int line; //номер линии |
||
48 | int file; //файл |
||
49 | int count; //счетчик использования |
||
50 | unsigned short type; |
||
51 | unsigned short npointr; |
||
52 | union{ |
||
53 | char *sbuf; //указатель на блок исходного текста |
||
54 | _PROCINFO_ *pinfo; |
||
55 | }; |
||
56 | union{ |
||
57 | long recnumber; |
||
58 | long long reclnumber; |
||
59 | double recdnumber; |
||
60 | float recfnumber; |
||
61 | }; |
||
62 | }; |
||
63 | |||
64 | struct localinfo |
||
65 | { |
||
66 | int usedfirst; |
||
67 | int usedlast; |
||
68 | int start; |
||
69 | int end; |
||
70 | int level; |
||
71 | int count; |
||
72 | }; |
||
73 | |||
74 | struct localrec |
||
75 | { |
||
76 | /* struct localrec *next; |
||
77 | int localtok; |
||
78 | unsigned short type; |
||
79 | unsigned short npointr; |
||
80 | union{ |
||
81 | unsigned int localnumber; |
||
82 | idrec *rec; |
||
83 | }; |
||
84 | int locsize; |
||
85 | char localid[IDLENGTH]; |
||
86 | unsigned char fuse; //флаг использования |
||
87 | unsigned char flag; //флаг static*/ |
||
88 | idrec rec; |
||
89 | localinfo li; |
||
90 | unsigned char fuse; //флаг использования |
||
91 | }; |
||
92 | |||
93 | #define INITBPPAR 1 //инициализация BP после параметров |
||
94 | #define INITBPLOC 2 //инициализация BP после локальных |
||
95 | #define INITBPENTER 4 |
||
96 | #define INITBPADDESP 8 |
||
97 | |||
98 | struct HEADLOC |
||
99 | { |
||
100 | int type; //тип заголовка |
||
101 | unsigned int ofs; //адрес значения |
||
102 | unsigned int num; //величина значения |
||
103 | }; |
||
104 | |||
105 | struct treelocalrec |
||
106 | { |
||
107 | treelocalrec *next; |
||
108 | localrec *lrec; |
||
109 | int initbp; |
||
110 | int level; |
||
111 | unsigned int addesp; |
||
112 | int endline; |
||
113 | }; |
||
114 | |||
115 | typedef struct _ITOK_ |
||
116 | { |
||
117 | int rm; |
||
118 | int segm; |
||
119 | int post; |
||
120 | int sib; |
||
121 | union{ |
||
122 | long number; |
||
123 | long long lnumber; |
||
124 | double dnumber; |
||
125 | float fnumber; |
||
126 | }; |
||
127 | union{ |
||
128 | int size; |
||
129 | BIT bit; |
||
130 | }; |
||
131 | unsigned short type; |
||
132 | unsigned short npointr; |
||
133 | union{ |
||
134 | idrec *rec; |
||
135 | localrec *locrec; |
||
136 | }; |
||
137 | char name[IDLENGTH]; |
||
138 | unsigned int flag; |
||
139 | }ITOK; |
||
140 | |||
141 | struct elementteg |
||
142 | { |
||
143 | union{ |
||
144 | void *nteg; //адрес тега вложенной структуры |
||
145 | idrec *rec; |
||
146 | }; |
||
147 | int tok; |
||
148 | union{ |
||
149 | unsigned int numel; //число элементов этого типа |
||
150 | BIT bit; |
||
151 | }; |
||
152 | unsigned int ofs; //смещение от начала структуры |
||
153 | char name[IDLENGTH]; |
||
154 | }; |
||
155 | |||
156 | struct structteg |
||
157 | { |
||
158 | struct structteg *left; //следующий тег |
||
159 | struct structteg *right; //следующий тег |
||
160 | unsigned int size; //размер тега |
||
161 | unsigned int numoper; //число операндов структуры |
||
162 | struct elementteg *baza; //адрес с описанием элементов тега |
||
163 | unsigned int flag; |
||
164 | char name[IDLENGTH]; |
||
165 | }; |
||
166 | |||
167 | struct listexport |
||
168 | { |
||
169 | long address; |
||
170 | char name[IDLENGTH]; |
||
171 | }; |
||
172 | |||
173 | typedef struct _IOFS_ |
||
174 | { |
||
175 | unsigned int ofs; |
||
176 | unsigned int line; //номер линии |
||
177 | unsigned int file; //файл |
||
178 | unsigned char dataseg; |
||
179 | }IOFS; |
||
180 | |||
181 | typedef struct _UNDEFOFF_ |
||
182 | { |
||
183 | struct _UNDEFOFF_ *next; |
||
184 | IOFS *pos; //буфер с адресами откуда ссылки |
||
185 | int num; //число ссылок на эту метку |
||
186 | char name[IDLENGTH]; |
||
187 | }UNDEFOFF; |
||
188 | |||
189 | typedef struct _LISTCOM_ |
||
190 | { |
||
191 | char name[IDLENGTH]; |
||
192 | }LISTCOM; |
||
193 | |||
194 | typedef struct _SINFO_ |
||
195 | { |
||
196 | char *bufstr; |
||
197 | int size; |
||
198 | }SINFO; |
||
199 | |||
200 | //структура списка api-процедур |
||
201 | typedef struct _APIPROC_ |
||
202 | { |
||
203 | struct idrec *recapi; |
||
204 | }APIPROC; |
||
205 | |||
206 | // |
||
207 | typedef struct _DLLLIST_ |
||
208 | { |
||
209 | struct _DLLLIST_ *next; //следующая DLL |
||
210 | struct _APIPROC_ *list; //список процедур |
||
211 | unsigned short num; //число процедур |
||
212 | char name[IDLENGTH]; //имя DLL |
||
213 | }DLLLIST; |
||
214 | |||
215 | typedef struct _PE_HEADER_ |
||
216 | { |
||
217 | long sign; //сигнатура - всегда 'PE' |
||
218 | short cpu; //мин тип CPU - всегда 0x14C |
||
219 | short numobj; //число входов в таблицу объектов |
||
220 | long date_time; //дата модификации линкером |
||
221 | long pCOFF; |
||
222 | long COFFsize; |
||
223 | short NTheadsize; //размер заголовка PE от MAGIC - всегда 0xE0 |
||
224 | short flags; |
||
225 | short Magic; //назначение прграммы |
||
226 | short LinkVer; //версия линкера |
||
227 | long sizecode; |
||
228 | long sizeinitdata; |
||
229 | long sizeuninitdata; |
||
230 | long EntryRVA; //адрес относит IMAGE BASE по которому передается управление |
||
231 | long basecode; //RVA секция, которая содержит программный код |
||
232 | long basedata; //RVA секция,содержащая данные |
||
233 | long ImageBase; //виртуальный начальный адрес загрузки программы |
||
234 | long objAlig; //выравнивание программных секций |
||
235 | long fileAlig; //Выравнивание секций в файле |
||
236 | long OSver; //номер версии опер системы необх программе |
||
237 | long userver; |
||
238 | long SubSysVer; |
||
239 | long rez; |
||
240 | long imagesize; //размер в байтах загружаемого образа с заголовками выравненый |
||
241 | long headsize; //разм всех заголовков stub+PE+objtabl |
||
242 | long checksum; |
||
243 | short SubSys; //операционная сист необх для запуска |
||
244 | short DLLflag; |
||
245 | long stackRezSize; |
||
246 | long stackComSize; |
||
247 | long heapRezSize; |
||
248 | long heapComSize; |
||
249 | long loaderFlag; |
||
250 | long numRVA; //всегда 10 |
||
251 | long exportRVA; |
||
252 | long exportSize; |
||
253 | long importRVA; |
||
254 | long importSize; |
||
255 | long resourRVA; |
||
256 | long resourSize; |
||
257 | long exceptRVA; |
||
258 | long exceptSize; |
||
259 | long securRVA; |
||
260 | long securSize; |
||
261 | long fixupRVA; |
||
262 | long fixupSize; |
||
263 | long debugRVA; |
||
264 | long debugSize; |
||
265 | long descripRVA; |
||
266 | long descripSize; |
||
267 | long machinRVA; |
||
268 | long machinSize; |
||
269 | long tlsRVA; |
||
270 | long tlsSize; |
||
271 | long loadConfRVA; |
||
272 | long loadConfSize; |
||
273 | long rez2[2]; |
||
274 | long iatRVA; |
||
275 | long iatSize; |
||
276 | long rez3[6]; |
||
277 | }PE_HEADER; |
||
278 | |||
279 | typedef struct _OBJECT_ENTRY_ |
||
280 | { |
||
281 | char name[8]; |
||
282 | long vsize; |
||
283 | long sectionRVA; |
||
284 | long psize; |
||
285 | long pOffset; |
||
286 | unsigned long PointerToRelocations; |
||
287 | unsigned long PointerToLinenumbers; |
||
288 | unsigned short NumberOfRelocations; |
||
289 | unsigned short NumberOfLinenumbers; |
||
290 | long flags; |
||
291 | }OBJECT_ENTRY; |
||
292 | |||
293 | typedef struct _EXPORT_TABLE_ |
||
294 | { |
||
295 | unsigned long Flags; |
||
296 | unsigned long Time; |
||
297 | unsigned short Version[2]; |
||
298 | unsigned long NameRVA; |
||
299 | unsigned long OriginalBase; |
||
300 | unsigned long NumFunc; |
||
301 | unsigned long NumName; |
||
302 | unsigned long AddressRVA; |
||
303 | unsigned long NamePRVA; |
||
304 | unsigned long OrdinalRVA; |
||
305 | }EXPORT_TABLE; |
||
306 | |||
307 | struct ftime { |
||
308 | unsigned ft_tsec:5; /* две секунды */ |
||
309 | unsigned ft_min:6; /* минуты */ |
||
310 | unsigned ft_hour:5; /* часы */ |
||
311 | unsigned ft_day:5; /* день */ |
||
312 | unsigned ft_month:4; /* месяц */ |
||
313 | unsigned ft_year:7; /* год-1980 */ |
||
314 | }; |
||
315 | |||
316 | |||
317 | typedef struct _STRING_LIST_ |
||
318 | { |
||
319 | void *next; //следующая структура |
||
320 | unsigned int len; //длина строки |
||
321 | unsigned int ofs; //адрес в выходном файле |
||
322 | unsigned char type; //тип терминатора |
||
323 | unsigned char plase; //где сейчас строка - post or data |
||
324 | }STRING_LIST; |
||
325 | |||
326 | struct FILEINFO |
||
327 | { |
||
328 | char *filename; |
||
329 | int numdline; |
||
330 | idrec *stlist; |
||
331 | union{ |
||
332 | struct ftime time; |
||
333 | unsigned short lineidx[2]; |
||
334 | }; |
||
335 | }; |
||
336 | |||
337 | struct EWAR{ |
||
338 | FILE *file; |
||
339 | char *name; |
||
340 | }; |
||
341 | |||
342 | typedef struct _ICOMP_ |
||
343 | { |
||
344 | unsigned int type; |
||
345 | unsigned int loc; |
||
346 | unsigned int use_cxz; |
||
347 | }ICOMP; |
||
348 | |||
349 | typedef struct _RETLIST_ |
||
350 | { |
||
351 | unsigned int line; |
||
352 | unsigned int loc; |
||
353 | unsigned int type; |
||
354 | // int use; |
||
355 | }RETLIST; |
||
356 | |||
357 | enum{ |
||
358 | singlcase,startmulti,endmulti}; |
||
359 | |||
360 | typedef struct _ISW_ |
||
361 | { |
||
362 | unsigned char type; |
||
363 | unsigned int postcase; |
||
364 | unsigned long value; |
||
365 | }ISW; |
||
366 | |||
367 | struct postinfo |
||
368 | { |
||
369 | unsigned int loc; |
||
370 | unsigned int num; |
||
371 | unsigned short type; |
||
372 | unsigned short line; |
||
373 | unsigned short file; |
||
374 | |||
375 | }; |
||
376 | |||
377 | typedef struct _EXE_DOS_HEADER_ |
||
378 | { |
||
379 | unsigned short sign; |
||
380 | unsigned short numlastbyte; |
||
381 | unsigned short numpage; |
||
382 | unsigned short numreloc; |
||
383 | unsigned short headsize; |
||
384 | unsigned short minmem; |
||
385 | unsigned short maxmem; |
||
386 | unsigned short initSS; |
||
387 | unsigned short initSP; |
||
388 | unsigned short checksum; |
||
389 | unsigned short initIP; |
||
390 | unsigned short initCS; |
||
391 | unsigned short ofsreloc; |
||
392 | unsigned short overlay; |
||
393 | unsigned long fullsize; |
||
394 | }EXE_DOS_HEADER; |
||
395 | |||
396 | typedef struct _FSWI_ |
||
397 | { |
||
398 | ISW *info; |
||
399 | int sizetab; //число элементов |
||
400 | int type; //разрядность |
||
401 | int numcase; //число используемых элементов |
||
402 | int defal; //значение по умолчанию. |
||
403 | int ptb; //адрес указателя на эту таблицу в блоке кода |
||
404 | int ptv; //адрес тавлицы величин |
||
405 | int mode; //тип switch |
||
406 | int razr; //разрядность величин |
||
407 | }FSWI; |
||
408 | |||
409 | struct paraminfo |
||
410 | { |
||
411 | unsigned int ofspar; |
||
412 | unsigned char type[8]; |
||
413 | }; |
||
414 | |||
415 | struct MEOSheader |
||
416 | { |
||
417 | unsigned char sign[8]; |
||
418 | unsigned long vers; |
||
419 | unsigned long start; |
||
420 | unsigned long size; |
||
421 | unsigned long alloc_mem; |
||
422 | unsigned long esp; |
||
423 | unsigned long I_Param; |
||
424 | unsigned long I_Icon; |
||
425 | }; |
||
426 | |||
427 | #ifdef OPTVARCONST |
||
428 | |||
429 | struct LVIC{ |
||
430 | idrec *rec; |
||
431 | // int blocks; |
||
432 | int typevar; |
||
433 | int contype; //тип содержимого |
||
434 | union{ |
||
435 | long number; |
||
436 | long long lnumber; |
||
437 | double dnumber; |
||
438 | float fnumber; |
||
439 | }; |
||
440 | }; |
||
441 | |||
442 | struct BLVIC |
||
443 | { |
||
444 | int sizevic; |
||
445 | LVIC *listvic; |
||
446 | }; |
||
447 | |||
448 | #endif |
||
449 | |||
450 | #define SIZEIDREG 256 |
||
451 | #define NOINREG 8 |
||
452 | #define SKIPREG 9 |
||
453 | |||
454 | struct REGEQVAR |
||
455 | { |
||
456 | REGEQVAR *next; |
||
457 | char name[IDLENGTH]; |
||
458 | unsigned char razr; |
||
459 | }; |
||
460 | |||
461 | struct REGISTERSTAT |
||
462 | { |
||
463 | union{ |
||
464 | REGEQVAR *next; |
||
465 | #ifdef OPTVARCONST |
||
466 | BLVIC *bakvic; |
||
467 | #endif |
||
468 | }; |
||
469 | union{ |
||
470 | char id[SIZEIDREG]; |
||
471 | void *stringpar; |
||
472 | unsigned long number; |
||
473 | }; |
||
474 | unsigned char type; |
||
475 | unsigned char razr; |
||
476 | }; |
||
477 | |||
478 | struct SAVEREG |
||
479 | { |
||
480 | unsigned int size; //размер памяти для регистров |
||
481 | unsigned char all; //все регистры |
||
482 | unsigned char reg[8]; //карта регистров |
||
483 | }; |
||
484 | |||
485 | struct SAVEPAR |
||
486 | { |
||
487 | unsigned char ooptimizespeed; |
||
488 | unsigned char owarning; |
||
489 | unsigned char odbg; |
||
490 | unsigned char odosstring; |
||
491 | unsigned char ouseinline; |
||
492 | unsigned char oam32; // режим 32 битной адресации |
||
493 | unsigned char oalignword; |
||
494 | unsigned char oAlignCycle; //выравнивать начала циклов |
||
495 | unsigned char oidasm; //ассемблерные инструкции считать идентификаторами |
||
496 | int ooptnumber; |
||
497 | int odivexpand; |
||
498 | unsigned char ooptstr; //оптимизация строковых констант |
||
499 | unsigned char ochip; |
||
500 | int oaligncycle; |
||
501 | unsigned char ouselea; |
||
502 | unsigned char oregoverstack; |
||
503 | }; |
||
504 | |||
505 | struct COM_MOD |
||
506 | { |
||
507 | COM_MOD *next; |
||
508 | unsigned char *input; /* dynamic input buffer */ |
||
509 | unsigned int endinptr; /* end index of input array */ |
||
510 | unsigned int inptr; /* index in input buffer */ |
||
511 | unsigned int inptr2; /* index in input buffer */ |
||
512 | unsigned int linenumber; |
||
513 | unsigned int currentfileinfo; |
||
514 | int numparamdef; //число параметров в текущем define |
||
515 | char *declareparamdef; //список объявленых параметров define |
||
516 | char *paramdef; //список новых параметров |
||
517 | int freze; //флаг запрещения удаления структуры |
||
518 | }; |
||
519 | |||
520 | struct LISTRELOC { |
||
521 | unsigned int val; |
||
522 | }; |
||
523 | |||
524 | struct LISTFLOAT |
||
525 | { |
||
526 | union{ |
||
527 | float fnum; |
||
528 | double dnum; |
||
529 | unsigned long num[2]; |
||
530 | }; |
||
531 | int type; |
||
532 | unsigned int ofs; |
||
533 | }; |
||
534 | |||
535 | struct LILV |
||
536 | { |
||
537 | unsigned int ofs; |
||
538 | int size; |
||
539 | localrec *rec; |
||
540 | }; |
||
541 | |||
542 | struct WARNACT |
||
543 | { |
||
544 | void (*fwarn)(char *str,unsigned int line,unsigned int file); |
||
545 | unsigned char usewarn; |
||
546 | }; |