Go to most recent revision | Details | 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; |
||
194 | extern short ofsmnem[]; |
||
195 | extern unsigned char asmMnem[]; |
||
196 | extern char asmparam; |
||
197 | #endif |
||
198 | |||
199 | #if !defined (_TOKA_) |
||
200 | extern unsigned char id[]; |
||
201 | extern short idofs[]; |
||
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(); |
||
353 | int FastSearch(unsigned char *list,short *ofs,int type,char *str); |
||
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); |
||
465 | void missingpar(char *name=""); |
||
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 */ |