Subversion Repositories Kolibri OS

Rev

Rev 6446 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6446 GerdtR 1
//void PrintMem(void *mem);
2
//void CheckMem();
3
 
4
#include "port.h"
5
 
6
#include 
7
#include 
8
#include 
9
#include 
10
#include 
11
 
12
 
13
//#define DEBUGMODE
14
 
15
#define OPTVARCONST // Замена переменных сонстантами
16
 
17
#define MAXNUMPATH 16
18
#define DATATYPES 9 	// number of data types
19
#define MAXDATA 65500 /* output run file buffer 65500 bytes */
20
 
21
#define DYNAMIC_USED 0
22
#define DYNAMIC      1
23
#define NOT_DYNAMIC 2 /* flag value specifing a non-dynamic proc */
24
#define DYNAMIC_SET 3
25
 
26
#define FILENAMESIZE 80
27
#define SHORTMAX	127 // largest 8 bit signed value
28
#define SHORTMIN -128 // smallest 8 bit signed value
29
#define IDLENGTH 65  /* length of significance of IDS + NULL, therefore 32 */
30
#define STRLEN 2048  /* length of string token holder */
31
#define MAXPOSTS 2048
32
#define SIZEBUF 16384
33
#define ID2S 6*DATATYPES
34
#define MAXSYSCOM 25
35
#define NUMNUM 32
36
#define NUMNUM64 64
37
#define OBJECTALIGN 4096	//выравнивание секций в памяти
38
#define WARNCOUNT 15	//число различных предупреждений
39
 
40
#define ver1 0
41
#define ver2 239
42
 
43
#define BETTA
44
 
45
#ifdef BETTA
46
#define betta " b26"
47
#else
48
#define betta ""
49
#endif
50
 
51
#include "const.h"
52
#include "struct.h"
53
 
54
#ifdef _UNIX_
55
	#ifndef stricmp
56
		#define stricmp strcasecmp
57
	#endif
58
#endif
59
 
60
#ifdef _UNIX_
61
	#ifndef O_BINARY
62
		#define O_BINARY 0
63
	#endif
64
#endif
65
 
66
extern unsigned char FixUpTable;	//запретить создание таблици Fix UP for Windows
67
extern unsigned char WinMonoBlock;
68
extern unsigned int currentfileinfo;
69
 
70
#if !defined (_MAIN_)
71
extern char fobj;	//признак генерации obj
72
extern char *rawfilename;
73
extern struct tm timeptr;
74
extern char outext[];
75
extern unsigned char compilerstr[];  /* compiler ID string */
76
extern LISTCOM *listcom;
77
extern unsigned char gwarning;
78
extern EWAR wartype,errfile;
79
extern int numfindpath;
80
extern char *findpath[];
81
extern char bufpath[];
82
extern unsigned int  startptr;
83
extern unsigned char wconsole;//признак генерации консольного приложения windows
84
extern unsigned long ImageBase;
85
extern int numexport;
86
extern struct listexport *lexport;
87
extern unsigned char optstr;	//оптимизация строковых констант
88
extern unsigned char crif;	//check reply include file
89
extern unsigned char idasm;	//ассемблерные инструкции считать идентификаторами
90
extern char modelmem;
91
extern char *stubfile;
92
extern char comsymbios;
93
extern unsigned char sobj;
94
extern short dllflag;
95
extern char *bufstr;	//буфер для строк из процедур
96
extern int sbufstr;	//начальный размер этого буфера
97
extern unsigned char wbss;	//пост переменные в отдельную секцию
98
extern int numrel;	//число элементов в таблице перемещений
99
extern unsigned char usestub;
100
extern char *winstub;
101
extern unsigned char dpmistub;
102
extern unsigned char useordinal;
103
extern int startupfile;
104
extern int alignproc,aligncycle;
105
extern FILE *hout;
106
extern unsigned char useDOS4GW;
107
extern unsigned char use_env;	//переменная окружения
108
extern unsigned char clearpost;
109
extern unsigned char uselea;
110
extern unsigned char regoverstack;
111
extern unsigned char shortimport;
112
extern char *namestartupfile;
113
extern unsigned char useinline;
114
extern unsigned char ocoff;
115
extern unsigned char ESPloc;
116
 
117
#endif
118
 
119
extern unsigned char string[STRLEN],string2[STRLEN+20];
120
 
121
#if !defined (_TOKC_)
122
extern unsigned int outptrsize;	//размер выходного буфера
123
extern unsigned char string3[STRLEN];
124
extern char *BackTextBlock;	//буфер для перенесенного текста
125
extern int SizeBackBuf;
126
extern unsigned char cha;
127
extern unsigned int inptr;
128
extern unsigned char AlignProc;
129
extern unsigned int secondcallnum;	//# of different second calls and labels
130
extern unsigned char header;
131
extern unsigned char killctrlc;
132
extern unsigned char optimizespeed;
133
extern unsigned char alignword;
134
extern unsigned int outptr,outptrdata;
135
extern unsigned char comfile;
136
extern unsigned char chip;
137
extern unsigned char dos1,dos2;
138
extern unsigned int stacksize;
139
extern int error;
140
extern unsigned char *output,*outputdata;
141
extern unsigned char notdoneprestuff;
142
extern unsigned long postsize;
143
extern unsigned int posts;
144
extern postinfo *postbuf;
145
extern int maxposts;
146
extern unsigned char cpu;
147
extern long runfilesize;
148
extern unsigned char *input; 	 /* dynamic input buffer */
149
extern unsigned int endinptr;		 /* end index of input array */
150
extern unsigned int localsize,paramsize;
151
extern char endoffile;
152
extern unsigned int current_proc_type; 	/* current procedure type */
153
extern unsigned char aligner;
154
extern unsigned int alignersize;
155
extern unsigned int datasize;
156
extern unsigned char warning;
157
extern unsigned int startStartup;
158
extern unsigned char useStartup;
159
extern unsigned int endStartup;
160
extern unsigned char notpost;
161
extern unsigned char am32; 		      // режим 32 битной адресации
162
extern unsigned int externnum;
163
extern unsigned char FastCallApi;	//разрешить быстрый вызов API процедур
164
extern unsigned char FixUp;	//Делать ли таблицу перемещений
165
extern void *liststring;	//цепочка информационных блоков о строках
166
extern struct FILEINFO *startfileinfo;
167
extern unsigned int totalmodule;
168
extern int retproc;
169
extern unsigned char splitdata;	//отделить данные от кода
170
extern unsigned char AlignCycle;       //выравнивать начала циклов
171
extern char param[];	//буфер для параметров процедуры
172
extern unsigned char dynamic_flag;	//флаг обработки динамических элементов
173
extern unsigned char setzeroflag;	//операция меняет zero flag
174
extern unsigned char insertmode;
175
extern unsigned int numblocks;	//номер вложенного блока
176
extern unsigned char notunreach;
177
extern idrec *staticlist;
178
extern unsigned int procedure_start; /* address of start of procedure */
179
extern int lastcommand;	//последний оператор в блоке
180
extern unsigned int initBP;
181
extern unsigned char fstatic;
182
//extern int sizestack;	//размер не компенсированных параметров функций
183
extern unsigned char addstack;
184
extern unsigned long addESP;	//добавка стека
185
extern unsigned char blockproc;	//идетразборка блока функции
186
extern treelocalrec *tlr;	//цепочка локальных блоков
187
extern treelocalrec *btlr;	//цепочка использованых локальных блоков
188
extern int returntype; 				 /* return type, (void, byte, word, ...) */
189
#endif
190
extern int tok,tok2;
191
 
192
#if !defined (_TOKR_)
193
extern char useasm;
7700 leency 194
extern unsigned short ofsmnem[];
6446 GerdtR 195
extern unsigned char asmMnem[];
196
extern char asmparam;
197
#endif
198
 
199
#if !defined (_TOKA_)
200
extern unsigned char id[];
7700 leency 201
extern unsigned short idofs[];
6446 GerdtR 202
extern char id2[ID2S][9];
203
extern char regs[2][8][4];
204
extern char begs[8][3];
205
extern char segs[8][3];
206
extern struct idrec *treestart;
207
extern unsigned int linenum2;
208
extern unsigned int inptr2;
209
extern unsigned char cha2;
210
extern char displaytokerrors;
211
extern char *bufrm;
212
extern UNDEFOFF *undefoffstart;
213
extern DLLLIST *listdll;
214
extern char skipfind;
215
extern struct structteg *tegtree;			//глобальный срисок тегов
216
extern struct structteg *ltegtree;		//локальный срисок тегов
217
//extern struct idrec *lstructlist; //список локальных структур
218
extern struct idrec *definestart;
219
extern SINFO strinf;
220
extern char *startline, *endinput;
221
extern ITOK structadr;
222
extern int scanlexmode;
223
extern COM_MOD *cur_mod;
224
extern unsigned char bytesize;
225
#endif
226
 
227
#if !defined (_TOKE_)
228
extern int maxerrors;
229
extern char mesmain[];
230
extern int endifcount;
231
extern int sysstack;
232
extern int sysnumcom;
233
extern int syscom;
234
extern unsigned char fargc;
235
extern unsigned char jumptomain;
236
extern unsigned int  startptrdata;
237
extern unsigned char parsecommandline;
238
extern unsigned int romsize;
239
extern unsigned char resizemem;
240
extern unsigned int resizesizeaddress;
241
extern unsigned int stackstartaddress;
242
extern int dataromstart,dataromsize;
243
extern unsigned char startuptomain;
244
extern unsigned char dosstring;
245
extern unsigned int numdomain;	//число процедур запускаемых до main
246
extern char *domain;	//буфер имен процедур запускаемых до main
247
extern unsigned char usedirectiv;	//идет обработка директивы
248
extern unsigned char atex;
249
extern unsigned int postnumflag;	//флаг последнего идентификатора в вычислении номера
250
extern unsigned char sdp_mode;	//режим принудительной выгрузки динамических процедур
251
extern int calcnumber;
252
extern int strpackdef;
253
extern int strpackcur;
254
#ifdef DEBUGMODE
255
extern int debug;
256
#endif
257
extern int dirmode;
258
 
259
#endif
260
 
261
extern ITOK itok,itok2,ptok;
262
 
263
#if !defined (_TOKB_)
264
extern int divexpand;
265
extern int optnumber;
266
extern char *badadr;
267
extern LISTFLOAT *floatnum;	//список float констант
268
extern unsigned int numfloatconst;
269
extern unsigned int ofsfloatlist;
270
#endif
271
extern unsigned int linenumber;
272
 
273
#if !defined (_DEBUG_)
274
extern unsigned int ooutptr;
275
extern unsigned int outputcodestart;
276
extern unsigned char dbg,dbgact;
277
extern unsigned int pdbg;      // number of post entrys
278
#endif
279
 
280
#if !defined (_OUTPE_)
281
extern unsigned long ImageBase;
282
extern unsigned long vsizeheader; //виртуальный размер заголовка.
283
extern int filingzerope;
284
extern unsigned long FILEALIGN;	// выравнивание секций в файле
285
#endif
286
 
287
#if !defined (_ERRORS_)
288
extern WARNACT wact[];
289
extern unsigned char mapfile;
290
#endif
291
 
292
#if !defined (_DISASM_)
293
extern unsigned char seg_size;   /* default size is 16 */
294
extern unsigned long instruction_offset;
295
#endif
296
 
297
#if !defined (_SWITCH_)
298
extern FSWI *swtables;
299
extern int numswtable;
300
#endif
301
 
302
#if !defined (_CLASS_)
303
extern structteg *searchteg;
304
extern int destructor;
305
#endif
306
 
307
#if !defined (_RES_)
308
extern unsigned char *resbuf;
309
extern unsigned int curposbuf;
310
extern int numres;	//текущее число ресурсов
311
extern int numstrtbl;
312
#endif
313
 
314
extern unsigned char idxregs[5];
315
 
316
// start of procedure pre-definitions
317
/*-----------------19.09.98 17:18-------------------
318
	 Функции определенные в main.cpp
319
--------------------------------------------------*/
320
void *MALLOC(unsigned long size);
321
void *REALLOC(void *block,unsigned long size);
322
void IncludePath(char *buf);
323
int SelectComand(char *pptr,int *count);
324
void strbtrim(char *st);
325
unsigned long  Align(unsigned long size,unsigned long val);
326
int AlignCD(char segm,int val);	//выравнять данные или код
327
void ErrOpenFile(char *str);
328
unsigned int EntryPoint();
329
long CopyFile(FILE *in,FILE *out);
330
unsigned long getnumber(unsigned char *buf);
331
void addinitvar();
332
FILE *CreateOutPut(char *ext,char *mode);
333
void SetLST(unsigned char neg);
334
void AddUndefClassProc();
335
int MakeCoff();
336
void setdindata(idrec *ptr,int i);
337
 
338
/*-----------------08.03.98 20:10-------------------
339
 Функции определеные в toka.c
340
--------------------------------------------------*/
341
void CheckAllMassiv(char *&buf,int sizeel,SINFO *strc,ITOK *ctok=&itok,int reg1=idxregs[0],int reg2=idxregs[1]);
342
void docalls(); //attempt to declare undefs from library and dynamic proc's
343
int FindOff(unsigned char *name,int base);
344
void nextchar();	//опр в toke
345
void nexttok();
346
void whitespace(); //пропуск нзначащих символов
347
int searchtree(ITOK *itk4,int *tk4,unsigned char *strin4);
348
void AddUndefOff(int segm,char *ostring);
349
void InitStruct();	//инициализировать структуру
350
unsigned long LocalStruct(int flag,int *localline);	//инициализировать локальную структуру
351
struct structteg * FindTeg(int Global,char *name=itok.name);	//найти тег
352
void dostruct();
7700 leency 353
int FastSearch(unsigned char *list,short unsigned *ofs,int type,char *str);
6446 GerdtR 354
void FindDirectiv();
355
unsigned long long scannumber(int *rm);
356
void FastTok(int mode,int *tok4=&tok,ITOK *itok4=&itok);
357
unsigned int initstructvar(structteg *tteg,int numel);
358
unsigned int ScanTok3();
359
int GetVarSize(int var);
360
void compressoffset(ITOK *thetok);
361
void AddDynamicList(idrec *ptr);
362
int CheckUseAsUndef(unsigned char *name);
363
int CheckMassiv(char *&buf,int sizeel,int treg,int *idx=0,int *base=0,long *num=0);
364
void AutoDestructor();
365
void dodelete();
366
void donew();
367
void RunNew(int size);
368
int CallDestructor(structteg *searcht);
369
int FindUseName(char *name);	//поиск ссылок на текущее имя
370
void DateToStr(char *buf);
371
int CalcRm16(int base,int idx);
372
int CheckDef();
373
void SetNewStr(char *name);
374
struct structteg *CreatTeg(int Global,int useunion=FALSE,int noname=FALSE);
375
void InitStruct2(unsigned int flag,structteg *tteg);
376
unsigned long LocalStruct2(int flag,int *localline,int binptr,char bcha,structteg *tteg);
377
void retoldscanmode(int mode);
378
void ExpandRm(int rm,int sib,int *zoom,int *base,int *idx);
379
void BackMod();
380
 
381
/*-----------------08.03.98 21:45-------------------
382
 Функции определеные в tokb.h
383
--------------------------------------------------*/
384
void AddReloc(int segm=itok.segm);
385
int doalmath(int sign,char **ofsstr);
386
int do_e_axmath(int sign,int razr,char **ofsstr);
387
void getintoal(int gtok,ITOK *gstok,char *&gbuf,SINFO *gstr); /* AH may also be changed */
388
void getinto_e_ax(int sign,int gtok,ITOK *gstok,char *&gbuf,SINFO *gstr,int razr,int useAX=FALSE);
389
int  doeaxfloatmath(int itreturn=tk_reg32,int reg=AX,int addop=0);
390
int dobytevar(int sign,int terminater=tk_semicolon); 	// byte, char
391
int do_d_wordvar(int sign,int razr,int terminater=tk_semicolon); 		 /* signed or unsigned 16 bit memory variable */
392
int doreg_32(int reg,int razr,int terminater=tk_semicolon);
393
void doseg(int seg);
394
int caselong(unsigned long val);
395
int dobeg(int beg,int terminater=tk_semicolon);
396
void dobegmath(int beg);	/* math done is on all begs except AL */
397
void doregmath_32(int reg,int razr,int sign,char **ofsstr,int i=0);	/* math done is on all regs except AX */
398
int getintobeg(int beg,char **ofsstr);
399
int getintoreg_32(int reg,int razr,int sign,char **ofsstr,int useloop=TRUE); /* get into word reg (except AX) with enum */
400
void outaddress(ITOK *outtok);
401
void FloatToNumer(int addop=0);
402
int dofloatvar(int addop=0,int retrez=tk_floatvar,int terminater=tk_semicolon);
403
void fwait3();
404
void AddFloatConst(long long fnumber,int type=tk_float);
405
void setwordpost(ITOK *); 					 /* for post word num setting */
406
void setwordext(long *id);
407
void RegMulNum(int reg,unsigned long num,int razr,int sign,int *expand,int flag);
408
int OnlyNumber(int sign);
409
void PopSeg(int seg);
410
void PushSeg(int seg);
411
void MovRegNum(int razr,int relocf,unsigned long number,int reg);
412
int CheckMinusNum();
413
int getintoreg(int reg,int razr,int sign,char **ofsstr);
414
void dobits();
415
void bits2reg(int reg,int razr);
416
void getoperand(int reg=BX);
417
int optnumadd(unsigned long num,int reg,int razr,int vop);
418
int MultiAssign(int razr,int usereg,int npointr=0);
419
void CheckInitBP();
420
void RestoreBP();
421
void fistp_stack(int addop=0);
422
void fld_stack(int size);
423
void fildq_stack();
424
void cpointr(int reg,int numpointr);
425
int doqwordvar(int terminater=tk_semicolon);	//64 bit memory variable
426
void doreg64(int reg,int terminater=tk_semicolon);
427
void doregmath64(int reg);
428
void getintoreg64(int reg);
429
void float2stack(int num);
430
void dofloatstack(int num);
431
 
432
/*-----------------08.03.98 20:59-------------------
433
 Функции определеные в tokc.c
434
--------------------------------------------------*/
435
localrec * addlocalvar(char *str,int tok,unsigned int num,int addmain=FALSE);
436
int addpoststring(int segm=CS,int len=itok.number, int term=itok.flag); 	 /* add a string to the post queue */
437
void define_locallabel();
438
unsigned int dofrom();
439
unsigned int doextract();
440
int doparams();			/* do stack procedure parameter pushing */
441
int swapparam();
442
long updatetree();
443
void addacall(unsigned int idnum,unsigned char callkind);
444
idrec * addtotree(char *keystring);
445
void compilefile(char *filename,int firstflag);
446
void convert_returnvalue(int expectedreturn,int actualreturn);
447
int doid (char uppercase,int expectedreturn);
448
void insert_dynamic(int insert=FALSE);
449
int macros(int expectedreturn);
450
void op(int byte);
451
void opd(int byte);	//вывод байта в сегмент данных
452
void op66(int ctoc);
453
int op67(int ctok);
454
void outqwordd (unsigned long long);
455
void outqword (unsigned long long);
456
void outdwordd (unsigned long);
457
void outdword (unsigned long);
458
void outwordd (unsigned int);
459
void outword (unsigned int);
460
void outseg(ITOK *outtok,unsigned int locadd);
461
int procdo(int expectedreturn);
462
int updatecall(unsigned int which,unsigned int where,unsigned int top);
463
void AddBackBuf(int,char);
464
void CharToBackBuf(char c);
7700 leency 465
void missingpar(char *name=(char *)"");
6446 GerdtR 466
int CheckCodeSize();
467
void CheckPosts();
468
int doanyundefproc(int jumpsend=FALSE);
469
int doanyproc(int jumpsend=FALSE);
470
void killpost(unsigned int poz);
471
char *BackString(char *str);
472
DLLLIST *FindDLL();
473
long initglobalvar(int type,long elements,long ssize,char typev);
474
int typesize(int vartype);
475
void dopoststrings();
476
char *dynamic_var();
477
void uptdbr(/*int usesw=FALSE*/);
478
void docommand(); 		/* do a single command */
479
//int CheckStopBlock();
480
void MakeBreak(unsigned char typeb);
481
void SetBreakLabel();
482
void SetContinueLabel();
483
void CheckDir();
484
int SkipParam();
485
long GetBitMask(int ofs,int size);
486
void AddPostData(unsigned int loop);
487
//void NotPostUnion();
488
unsigned int initparamproc();
489
void CorrectStack(unsigned int num);
490
int testInitVar(int checkaldef=TRUE);
491
void declareparamreg();
492
void declareparamstack(); /* declare procedure parameters */
493
void declareparams(); 		 /* declare procedure parameters */
494
void declarelocals(int mode,int finline=FALSE); 		 /* declare locals */
495
void doblock2();
496
void doblock();
497
void setreturn();
498
int CidOrID();
499
void dynamic_proc();
500
void setproc(int defflag);
501
void define_procedure();
502
void doregparams();
503
int CheckDeclareProc();
504
int loadfile(char *filename,int firstflag);
505
void RestoreStack();
506
void IsUses(idrec *rec);
507
int SkipBlock();
508
void declareanonim();
509
void declareunion();
510
void startblock();
511
void endblock();
512
void LLabel();
513
void AddApiToPost(unsigned int num);
514
 
515
/*-----------------08.03.98 20:06-------------------
516
 функции определены в toke.c
517
--------------------------------------------------*/
518
void jumperror(unsigned int line,char *type);
519
void beep();			 /* beep for any internal errors */
520
void codeexpected();
521
void datatype_expected(int type=0);
522
unsigned long doconstdwordmath();
523
signed long doconstlongmath();
524
long doconstfloatmath();
525
void dwordvalexpected();
526
void idalreadydefined();
527
void illegalfloat();
528
void internalerror (char *str);// serious internal compiler error message
529
void maxoutputerror();
530
void maxwordpostserror();
531
void nextseminext();
532
void numexpected(int type=0);
533
void operatorexpected();
534
void seminext();
535
void shortjumptoolarge();
536
void stringexpected();
537
void swaperror();
538
void SwTok(int want);
539
void unabletoopen(char *str);
540
void unexpectedeof();
541
void unknowncompop();
542
void valueexpected();
543
void varexpected(int type);
544
void wordvalexpected();
545
int includeit(int type);
546
int includeproc();
547
int CheckMacros();
548
void tobigpost();
549
void expected (char ch);
550
int expecting(int want);
551
void outprocedure(unsigned char *array,unsigned int length);
552
void preerror(char *str);//error on currentline with line number and file name
553
void thisundefined(char *str,int next=TRUE);
554
void addconsttotree(char *keystring,long long constvalue,int type=tk_dword);
555
void directive();
556
void doenum();
557
void doprestuff(); //do initial code things, like resize mem, jump to main...
558
void searchvar(char *name,int err=1);
559
void expectingoperand(int want);
560
void InitDefineConst();
561
unsigned long long doconstqwordmath();
562
long long doconstdoublemath();
563
int calclongnumber(long *retnum,long number,int operand);
564
int calcqwordnumber(unsigned long long *retnum,unsigned long long number,int operand);
565
int calcdwordnumber(unsigned long *retnum,unsigned long number,int operand);
566
int calcfloatnumber(float *retnum,float number,int operand);
567
int calcdoublenumber(double *retnum,double number,int operand);
568
 
569
/*-----------------08.03.98 22:24-------------------
570
 Функции определеные в tokr.c
571
--------------------------------------------------*/
572
void doasm(int next=FALSE);
573
int short_ok(long thenumber,int reg32=FALSE);
574
void callloc(long loc); 	/* produce CALL # */
575
void callloc0();
576
void cbw(void);
577
int GOTO();
578
void expecting2(int want);
579
unsigned char gotol(int faradd);
580
void jumploc(long loc); 		/* produce JUMP # */
581
void jumploc0();
582
void movsb(void);
583
void movsd(void);
584
void movsw(void);
585
void popes(); 	/* produce POP ES */
586
void pushds();	/* produce PUSH DS */
587
void pushss();
588
void ret(); 	 /* produce RET */
589
void retf();	 /* produce RETF */
590
void stosb(void);
591
void stosd(void);
592
void stosw(void);
593
void fwait();
594
void xorAHAH(void); 	/* produce XOR AH,AH */
595
void xorAXAX(void); 	/* produce XOR AX,AX */
596
void xorEAXEAX(void); 	/* produce XOR EAX,EAX */
597
void nextexpecting2(int want);
598
void tobedefined(int callkind,int expectedreturn);
599
void cwdq(int razr);
600
void Leave();
601
void CheckIP();
602
int iTest(int mode=0);
603
void ZeroReg(int reg, int razr);
604
int Push(ITOK *wtok=NULL);
605
 
606
/*-----------------08.08.00 22:50-------------------
607
 errors.cpp
608
	--------------------------------------------------*/
609
void warningstring();
610
void warningexpand();
611
void warningjmp(char *str2,int line=linenumber,int file=currentfileinfo);
612
void warningreg(char *str2);
613
void preerror3(char *str,unsigned int line,unsigned int file=currentfileinfo);// error message at a different than current line
614
void unableopenfile(char *name);
615
void tegnotfound();
616
void errstruct();
617
void  warningdefined(char *);
618
void extraparam(char *name="");
619
void warningretsign();
620
void ErrWrite();
621
void ErrReadStub();
622
void warningnotused(char *name,int type);
623
void regBXDISIBPexpected();
624
void reg32expected(int type=0);
625
void InvOperComp();
626
void warningusenotintvar(char *name);
627
void warningdestroyflags();
628
void warningunreach();
629
void unuseableinput();
630
void redeclare(char *name);
631
void undefclass(char *name);
632
void badinfile(char *name);
633
void errorreadingfile(char *name);
634
void expectederror(char *str);
635
void unknowntype();
636
void unknownstruct (char *name,char *sname);
637
void unknowntagstruct (char *name);
638
void warninline();
639
void ZeroMassiv();
640
void bytevalexpected(int type);
641
void FindStopTok();
642
//void not_union_static();
643
extern void edpip(int num=0);
644
void waralreadinit(char *reg);
645
void waralreadinitreg(char *reg,char *reg2);
646
void OnlyComFile();
647
void warnsize();
648
void destrdestreg();
649
void qwordvalexpected();
650
void fpustdestroed();
651
void unknownobj(char *name);
652
void FindEndLex();
653
void fpu0expected();
654
void unknownpragma(char *name);
655
void warpragmapackpop();
656
void SkipBlock2();
657
void warreplasevar(char *name);
658
void warcompneqconst();
659
void warcompeqconst();
660
void warpointerstruct();
661
void warESP();
662
void waralreadinitvar(char *name,unsigned int num);
663
void warningprint(char *str,unsigned int line,unsigned int file);
664
void notexternfun();
665
 
666
void AddDataLine(char ssize/*,char typev*/);
667
void mapfun(int);
668
 
669
/*-----------------24.01.01 01:42-------------------
670
 disasm.cpp
671
	--------------------------------------------------*/
672
void undata(unsigned ofs,unsigned long len,unsigned int type);
673
void unassemble(unsigned long ofs);
674
 
675
/*-----------------25.01.01 23:02-------------------
676
 debug.cpp
677
	--------------------------------------------------*/
678
void AddLine(int SkipLine=FALSE);
679
void DoTDS();
680
void InitDbg();
681
void KillLastLine();
682
void AddDataNullLine(char ssize/* new!!! */,char *name=NULL);
683
void AddCodeNullLine(char *name=NULL);
684
void AddEndLine();
685
#ifdef DEBUGMODE
686
void printdebuginfo();
687
#endif
688
//void AddMainLine();
689
 
690
/*-----------------12.04.01 22:46-------------------
691
 outpe
692
	--------------------------------------------------*/
693
void CreatStub(char *name);
694
void CreatWinStub();
695
void ChSize(long size);
696
 
697
/*-----------------12.04.01 22:57-------------------
698
 outle
699
	--------------------------------------------------*/
700
int MakeLE();
701
int MakeMEOS();
702
int MakeBin32();
703
 
704
/*-----------------08.12.01 23:43-------------------
705
 pointer
706
	--------------------------------------------------*/
707
void dopointer();
708
void dovalpointer();
709
void getpointeradr(ITOK *gstok,char *&gbuf,SINFO *gstr,int numpointer,int razr,int reg=BX);
710
void dopointerproc();
711
 
712
/*-----------------09.12.01 00:28-------------------
713
 new_type
714
	--------------------------------------------------*/
715
void convert_type(int *sign,int *rettype,int *pointr,int reg=BX);
716
 
717
/*-----------------23.12.01 02:39-------------------
718
 class
719
	--------------------------------------------------*/
720
void doclassproc(unsigned int);
721
void AddThis();
722
 
723
/*-----------------27.01.02 23:39-------------------
724
 res
725
	--------------------------------------------------*/
726
void input_res();
727
int MakeRes(unsigned long ofsres,LISTRELOC **listrel);
728
void CreatStrTabRes();
729
 
730
/*-----------------14.04.03 21:31-------------------
731
 optreg
732
--------------------------------------------------*/
733
void initregstat();
734
void deinitregstat();
735
void IDXToReg(char *name,int size,int reg);
736
int CheckIDXReg(char *name,int size,int reg);
737
void IDZToReg(char *name,int reg,int razr);
738
int CheckIDZReg(char *name,int reg,int razr);
739
void clearregstat(int regs=0);
740
void ConstToReg(unsigned long num,int reg,int razr);
741
void ClearReg(int reg);
742
int RegSwapReg(int reg1,int reg2,int razr);
743
char *GetLecsem(int stop1,int stop2=tk_eof,int type=-1);
744
REGISTERSTAT *BakRegStat();
745
void CopyRegStat(REGISTERSTAT *bak);
746
void KillVar(char *name);
747
void CompareRegStat(REGISTERSTAT *bak);
748
int RegToReg(int regd,int regs,int razr);
749
void GenRegToReg(int regd,int reds,int razr);
750
void GetEndLex(int stop1,int stop2=tk_eof,int type=-1);
751
int GetRegNumber(int reg,unsigned long *num,int razr);
752
int GetNumberR(int reg,unsigned long *num,int razr,unsigned long number);
753
void FreeStat(REGISTERSTAT *bak);
754
void AddRegVar(int reg, int razr,ITOK *itok4);
755
int GetRegVar(ITOK *itok4);
756
#ifdef OPTVARCONST
757
void CreateMainLVIC();
758
void KillMainLVIC();
759
void ClearLVIC();
760
int Const2Var(ITOK *itok4,long long num,int typenum);
761
void ClearVarByNum(ITOK *itok4);
762
int UpdVarConst(ITOK *itok4,long long num,int typenum,int operand);
763
void FreeGlobalConst();
764
int CheckRegToConst(int reg,ITOK *itok4,int razr);
765
int CheckUpdRegToConst(int reg,ITOK *itok4,int operand,int razr);
766
int SwapVarConst(ITOK *itok2,ITOK *itok4);
767
int SwapVarRegConst(int reg,ITOK *itok4,int razr);
768
int CheckConstVar(ITOK *itok4);
769
//int CheckConstVar2(ITOK *itok4,long long *num,int *typenum);
770
void CheckConstVar3(int *tok4,ITOK *itok4,int razr);
771
void Const2VarRec(LVIC *varconst);
772
#endif
773
 
774
#ifndef _REGOPT_
775
extern unsigned char optinitreg;
776
#ifdef OPTVARCONST
777
extern unsigned char replasevar;
778
extern LVIC *listvic;
779
#endif
780
#endif
781
 
782
/*-----------------------
783
libobj
784
 -------------------------*/
785
void AddNameObj(char *name,int typefind,int type);
786
void AddObj();
787
 
788
#ifdef __NEWLEX__
789
void inittokn();
790
void doblockstart(char *);
791
 
792
#endif
793
/* end of TOK.H */