Subversion Repositories Kolibri OS

Rev

Rev 6446 | Rev 9680 | Go to most recent revision | Details | Compare with Previous | 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
{
7700 leency 281
	char name[16];
6446 GerdtR 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
{
7700 leency 417
	unsigned char sign[25];
6446 GerdtR 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
};