Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. //void PrintMem(void *mem);
  2. //void CheckMem();
  3.  
  4. #include "port.h"
  5.  
  6. #include <time.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <stdlib.h>
  10. #include <ctype.h>
  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 */
  794.