forked from KolibriOS/kolibrios
7984195956
git-svn-id: svn://kolibrios.org@7700 a494cfbc-eb01-0410-851d-a64ba20cac60
794 lines
26 KiB
C
794 lines
26 KiB
C
//void PrintMem(void *mem);
|
|
//void CheckMem();
|
|
|
|
#include "port.h"
|
|
|
|
#include <time.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <ctype.h>
|
|
|
|
|
|
//#define DEBUGMODE
|
|
|
|
#define OPTVARCONST // Çàìåíà ïåðåìåííûõ ñîíñòàíòàìè
|
|
|
|
#define MAXNUMPATH 16
|
|
#define DATATYPES 9 // number of data types
|
|
#define MAXDATA 65500 /* output run file buffer 65500 bytes */
|
|
|
|
#define DYNAMIC_USED 0
|
|
#define DYNAMIC 1
|
|
#define NOT_DYNAMIC 2 /* flag value specifing a non-dynamic proc */
|
|
#define DYNAMIC_SET 3
|
|
|
|
#define FILENAMESIZE 80
|
|
#define SHORTMAX 127 // largest 8 bit signed value
|
|
#define SHORTMIN -128 // smallest 8 bit signed value
|
|
#define IDLENGTH 65 /* length of significance of IDS + NULL, therefore 32 */
|
|
#define STRLEN 2048 /* length of string token holder */
|
|
#define MAXPOSTS 2048
|
|
#define SIZEBUF 16384
|
|
#define ID2S 6*DATATYPES
|
|
#define MAXSYSCOM 25
|
|
#define NUMNUM 32
|
|
#define NUMNUM64 64
|
|
#define OBJECTALIGN 4096 //âûðàâíèâàíèå ñåêöèé â ïàìÿòè
|
|
#define WARNCOUNT 15 //÷èñëî ðàçëè÷íûõ ïðåäóïðåæäåíèé
|
|
|
|
#define ver1 0
|
|
#define ver2 239
|
|
|
|
#define BETTA
|
|
|
|
#ifdef BETTA
|
|
#define betta " b26"
|
|
#else
|
|
#define betta ""
|
|
#endif
|
|
|
|
#include "const.h"
|
|
#include "struct.h"
|
|
|
|
#ifdef _UNIX_
|
|
#ifndef stricmp
|
|
#define stricmp strcasecmp
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef _UNIX_
|
|
#ifndef O_BINARY
|
|
#define O_BINARY 0
|
|
#endif
|
|
#endif
|
|
|
|
extern unsigned char FixUpTable; //çàïðåòèòü ñîçäàíèå òàáëèöè Fix UP for Windows
|
|
extern unsigned char WinMonoBlock;
|
|
extern unsigned int currentfileinfo;
|
|
|
|
#if !defined (_MAIN_)
|
|
extern char fobj; //ïðèçíàê ãåíåðàöèè obj
|
|
extern char *rawfilename;
|
|
extern struct tm timeptr;
|
|
extern char outext[];
|
|
extern unsigned char compilerstr[]; /* compiler ID string */
|
|
extern LISTCOM *listcom;
|
|
extern unsigned char gwarning;
|
|
extern EWAR wartype,errfile;
|
|
extern int numfindpath;
|
|
extern char *findpath[];
|
|
extern char bufpath[];
|
|
extern unsigned int startptr;
|
|
extern unsigned char wconsole;//ïðèçíàê ãåíåðàöèè êîíñîëüíîãî ïðèëîæåíèÿ windows
|
|
extern unsigned long ImageBase;
|
|
extern int numexport;
|
|
extern struct listexport *lexport;
|
|
extern unsigned char optstr; //îïòèìèçàöèÿ ñòðîêîâûõ êîíñòàíò
|
|
extern unsigned char crif; //check reply include file
|
|
extern unsigned char idasm; //àññåìáëåðíûå èíñòðóêöèè ñ÷èòàòü èäåíòèôèêàòîðàìè
|
|
extern char modelmem;
|
|
extern char *stubfile;
|
|
extern char comsymbios;
|
|
extern unsigned char sobj;
|
|
extern short dllflag;
|
|
extern char *bufstr; //áóôåð äëÿ ñòðîê èç ïðîöåäóð
|
|
extern int sbufstr; //íà÷àëüíûé ðàçìåð ýòîãî áóôåðà
|
|
extern unsigned char wbss; //ïîñò ïåðåìåííûå â îòäåëüíóþ ñåêöèþ
|
|
extern int numrel; //÷èñëî ýëåìåíòîâ â òàáëèöå ïåðåìåùåíèé
|
|
extern unsigned char usestub;
|
|
extern char *winstub;
|
|
extern unsigned char dpmistub;
|
|
extern unsigned char useordinal;
|
|
extern int startupfile;
|
|
extern int alignproc,aligncycle;
|
|
extern FILE *hout;
|
|
extern unsigned char useDOS4GW;
|
|
extern unsigned char use_env; //ïåðåìåííàÿ îêðóæåíèÿ
|
|
extern unsigned char clearpost;
|
|
extern unsigned char uselea;
|
|
extern unsigned char regoverstack;
|
|
extern unsigned char shortimport;
|
|
extern char *namestartupfile;
|
|
extern unsigned char useinline;
|
|
extern unsigned char ocoff;
|
|
extern unsigned char ESPloc;
|
|
|
|
#endif
|
|
|
|
extern unsigned char string[STRLEN],string2[STRLEN+20];
|
|
|
|
#if !defined (_TOKC_)
|
|
extern unsigned int outptrsize; //ðàçìåð âûõîäíîãî áóôåðà
|
|
extern unsigned char string3[STRLEN];
|
|
extern char *BackTextBlock; //áóôåð äëÿ ïåðåíåñåííîãî òåêñòà
|
|
extern int SizeBackBuf;
|
|
extern unsigned char cha;
|
|
extern unsigned int inptr;
|
|
extern unsigned char AlignProc;
|
|
extern unsigned int secondcallnum; //# of different second calls and labels
|
|
extern unsigned char header;
|
|
extern unsigned char killctrlc;
|
|
extern unsigned char optimizespeed;
|
|
extern unsigned char alignword;
|
|
extern unsigned int outptr,outptrdata;
|
|
extern unsigned char comfile;
|
|
extern unsigned char chip;
|
|
extern unsigned char dos1,dos2;
|
|
extern unsigned int stacksize;
|
|
extern int error;
|
|
extern unsigned char *output,*outputdata;
|
|
extern unsigned char notdoneprestuff;
|
|
extern unsigned long postsize;
|
|
extern unsigned int posts;
|
|
extern postinfo *postbuf;
|
|
extern int maxposts;
|
|
extern unsigned char cpu;
|
|
extern long runfilesize;
|
|
extern unsigned char *input; /* dynamic input buffer */
|
|
extern unsigned int endinptr; /* end index of input array */
|
|
extern unsigned int localsize,paramsize;
|
|
extern char endoffile;
|
|
extern unsigned int current_proc_type; /* current procedure type */
|
|
extern unsigned char aligner;
|
|
extern unsigned int alignersize;
|
|
extern unsigned int datasize;
|
|
extern unsigned char warning;
|
|
extern unsigned int startStartup;
|
|
extern unsigned char useStartup;
|
|
extern unsigned int endStartup;
|
|
extern unsigned char notpost;
|
|
extern unsigned char am32; // ðåæèì 32 áèòíîé àäðåñàöèè
|
|
extern unsigned int externnum;
|
|
extern unsigned char FastCallApi; //ðàçðåøèòü áûñòðûé âûçîâ API ïðîöåäóð
|
|
extern unsigned char FixUp; //Äåëàòü ëè òàáëèöó ïåðåìåùåíèé
|
|
extern void *liststring; //öåïî÷êà èíôîðìàöèîííûõ áëîêîâ î ñòðîêàõ
|
|
extern struct FILEINFO *startfileinfo;
|
|
extern unsigned int totalmodule;
|
|
extern int retproc;
|
|
extern unsigned char splitdata; //îòäåëèòü äàííûå îò êîäà
|
|
extern unsigned char AlignCycle; //âûðàâíèâàòü íà÷àëà öèêëîâ
|
|
extern char param[]; //áóôåð äëÿ ïàðàìåòðîâ ïðîöåäóðû
|
|
extern unsigned char dynamic_flag; //ôëàã îáðàáîòêè äèíàìè÷åñêèõ ýëåìåíòîâ
|
|
extern unsigned char setzeroflag; //îïåðàöèÿ ìåíÿåò zero flag
|
|
extern unsigned char insertmode;
|
|
extern unsigned int numblocks; //íîìåð âëîæåííîãî áëîêà
|
|
extern unsigned char notunreach;
|
|
extern idrec *staticlist;
|
|
extern unsigned int procedure_start; /* address of start of procedure */
|
|
extern int lastcommand; //ïîñëåäíèé îïåðàòîð â áëîêå
|
|
extern unsigned int initBP;
|
|
extern unsigned char fstatic;
|
|
//extern int sizestack; //ðàçìåð íå êîìïåíñèðîâàííûõ ïàðàìåòðîâ ôóíêöèé
|
|
extern unsigned char addstack;
|
|
extern unsigned long addESP; //äîáàâêà ñòåêà
|
|
extern unsigned char blockproc; //èäåòðàçáîðêà áëîêà ôóíêöèè
|
|
extern treelocalrec *tlr; //öåïî÷êà ëîêàëüíûõ áëîêîâ
|
|
extern treelocalrec *btlr; //öåïî÷êà èñïîëüçîâàíûõ ëîêàëüíûõ áëîêîâ
|
|
extern int returntype; /* return type, (void, byte, word, ...) */
|
|
#endif
|
|
extern int tok,tok2;
|
|
|
|
#if !defined (_TOKR_)
|
|
extern char useasm;
|
|
extern unsigned short ofsmnem[];
|
|
extern unsigned char asmMnem[];
|
|
extern char asmparam;
|
|
#endif
|
|
|
|
#if !defined (_TOKA_)
|
|
extern unsigned char id[];
|
|
extern unsigned short idofs[];
|
|
extern char id2[ID2S][9];
|
|
extern char regs[2][8][4];
|
|
extern char begs[8][3];
|
|
extern char segs[8][3];
|
|
extern struct idrec *treestart;
|
|
extern unsigned int linenum2;
|
|
extern unsigned int inptr2;
|
|
extern unsigned char cha2;
|
|
extern char displaytokerrors;
|
|
extern char *bufrm;
|
|
extern UNDEFOFF *undefoffstart;
|
|
extern DLLLIST *listdll;
|
|
extern char skipfind;
|
|
extern struct structteg *tegtree; //ãëîáàëüíûé ñðèñîê òåãîâ
|
|
extern struct structteg *ltegtree; //ëîêàëüíûé ñðèñîê òåãîâ
|
|
//extern struct idrec *lstructlist; //ñïèñîê ëîêàëüíûõ ñòðóêòóð
|
|
extern struct idrec *definestart;
|
|
extern SINFO strinf;
|
|
extern char *startline, *endinput;
|
|
extern ITOK structadr;
|
|
extern int scanlexmode;
|
|
extern COM_MOD *cur_mod;
|
|
extern unsigned char bytesize;
|
|
#endif
|
|
|
|
#if !defined (_TOKE_)
|
|
extern int maxerrors;
|
|
extern char mesmain[];
|
|
extern int endifcount;
|
|
extern int sysstack;
|
|
extern int sysnumcom;
|
|
extern int syscom;
|
|
extern unsigned char fargc;
|
|
extern unsigned char jumptomain;
|
|
extern unsigned int startptrdata;
|
|
extern unsigned char parsecommandline;
|
|
extern unsigned int romsize;
|
|
extern unsigned char resizemem;
|
|
extern unsigned int resizesizeaddress;
|
|
extern unsigned int stackstartaddress;
|
|
extern int dataromstart,dataromsize;
|
|
extern unsigned char startuptomain;
|
|
extern unsigned char dosstring;
|
|
extern unsigned int numdomain; //÷èñëî ïðîöåäóð çàïóñêàåìûõ äî main
|
|
extern char *domain; //áóôåð èìåí ïðîöåäóð çàïóñêàåìûõ äî main
|
|
extern unsigned char usedirectiv; //èäåò îáðàáîòêà äèðåêòèâû
|
|
extern unsigned char atex;
|
|
extern unsigned int postnumflag; //ôëàã ïîñëåäíåãî èäåíòèôèêàòîðà â âû÷èñëåíèè íîìåðà
|
|
extern unsigned char sdp_mode; //ðåæèì ïðèíóäèòåëüíîé âûãðóçêè äèíàìè÷åñêèõ ïðîöåäóð
|
|
extern int calcnumber;
|
|
extern int strpackdef;
|
|
extern int strpackcur;
|
|
#ifdef DEBUGMODE
|
|
extern int debug;
|
|
#endif
|
|
extern int dirmode;
|
|
|
|
#endif
|
|
|
|
extern ITOK itok,itok2,ptok;
|
|
|
|
#if !defined (_TOKB_)
|
|
extern int divexpand;
|
|
extern int optnumber;
|
|
extern char *badadr;
|
|
extern LISTFLOAT *floatnum; //ñïèñîê float êîíñòàíò
|
|
extern unsigned int numfloatconst;
|
|
extern unsigned int ofsfloatlist;
|
|
#endif
|
|
extern unsigned int linenumber;
|
|
|
|
#if !defined (_DEBUG_)
|
|
extern unsigned int ooutptr;
|
|
extern unsigned int outputcodestart;
|
|
extern unsigned char dbg,dbgact;
|
|
extern unsigned int pdbg; // number of post entrys
|
|
#endif
|
|
|
|
#if !defined (_OUTPE_)
|
|
extern unsigned long ImageBase;
|
|
extern unsigned long vsizeheader; //âèðòóàëüíûé ðàçìåð çàãîëîâêà.
|
|
extern int filingzerope;
|
|
extern unsigned long FILEALIGN; // âûðàâíèâàíèå ñåêöèé â ôàéëå
|
|
#endif
|
|
|
|
#if !defined (_ERRORS_)
|
|
extern WARNACT wact[];
|
|
extern unsigned char mapfile;
|
|
#endif
|
|
|
|
#if !defined (_DISASM_)
|
|
extern unsigned char seg_size; /* default size is 16 */
|
|
extern unsigned long instruction_offset;
|
|
#endif
|
|
|
|
#if !defined (_SWITCH_)
|
|
extern FSWI *swtables;
|
|
extern int numswtable;
|
|
#endif
|
|
|
|
#if !defined (_CLASS_)
|
|
extern structteg *searchteg;
|
|
extern int destructor;
|
|
#endif
|
|
|
|
#if !defined (_RES_)
|
|
extern unsigned char *resbuf;
|
|
extern unsigned int curposbuf;
|
|
extern int numres; //òåêóùåå ÷èñëî ðåñóðñîâ
|
|
extern int numstrtbl;
|
|
#endif
|
|
|
|
extern unsigned char idxregs[5];
|
|
|
|
// start of procedure pre-definitions
|
|
/*-----------------19.09.98 17:18-------------------
|
|
Ôóíêöèè îïðåäåëåííûå â main.cpp
|
|
--------------------------------------------------*/
|
|
void *MALLOC(unsigned long size);
|
|
void *REALLOC(void *block,unsigned long size);
|
|
void IncludePath(char *buf);
|
|
int SelectComand(char *pptr,int *count);
|
|
void strbtrim(char *st);
|
|
unsigned long Align(unsigned long size,unsigned long val);
|
|
int AlignCD(char segm,int val); //âûðàâíÿòü äàííûå èëè êîä
|
|
void ErrOpenFile(char *str);
|
|
unsigned int EntryPoint();
|
|
long CopyFile(FILE *in,FILE *out);
|
|
unsigned long getnumber(unsigned char *buf);
|
|
void addinitvar();
|
|
FILE *CreateOutPut(char *ext,char *mode);
|
|
void SetLST(unsigned char neg);
|
|
void AddUndefClassProc();
|
|
int MakeCoff();
|
|
void setdindata(idrec *ptr,int i);
|
|
|
|
/*-----------------08.03.98 20:10-------------------
|
|
Ôóíêöèè îïðåäåëåíûå â toka.c
|
|
--------------------------------------------------*/
|
|
void CheckAllMassiv(char *&buf,int sizeel,SINFO *strc,ITOK *ctok=&itok,int reg1=idxregs[0],int reg2=idxregs[1]);
|
|
void docalls(); //attempt to declare undefs from library and dynamic proc's
|
|
int FindOff(unsigned char *name,int base);
|
|
void nextchar(); //îïð â toke
|
|
void nexttok();
|
|
void whitespace(); //ïðîïóñê íçíà÷àùèõ ñèìâîëîâ
|
|
int searchtree(ITOK *itk4,int *tk4,unsigned char *strin4);
|
|
void AddUndefOff(int segm,char *ostring);
|
|
void InitStruct(); //èíèöèàëèçèðîâàòü ñòðóêòóðó
|
|
unsigned long LocalStruct(int flag,int *localline); //èíèöèàëèçèðîâàòü ëîêàëüíóþ ñòðóêòóðó
|
|
struct structteg * FindTeg(int Global,char *name=itok.name); //íàéòè òåã
|
|
void dostruct();
|
|
int FastSearch(unsigned char *list,short unsigned *ofs,int type,char *str);
|
|
void FindDirectiv();
|
|
unsigned long long scannumber(int *rm);
|
|
void FastTok(int mode,int *tok4=&tok,ITOK *itok4=&itok);
|
|
unsigned int initstructvar(structteg *tteg,int numel);
|
|
unsigned int ScanTok3();
|
|
int GetVarSize(int var);
|
|
void compressoffset(ITOK *thetok);
|
|
void AddDynamicList(idrec *ptr);
|
|
int CheckUseAsUndef(unsigned char *name);
|
|
int CheckMassiv(char *&buf,int sizeel,int treg,int *idx=0,int *base=0,long *num=0);
|
|
void AutoDestructor();
|
|
void dodelete();
|
|
void donew();
|
|
void RunNew(int size);
|
|
int CallDestructor(structteg *searcht);
|
|
int FindUseName(char *name); //ïîèñê ññûëîê íà òåêóùåå èìÿ
|
|
void DateToStr(char *buf);
|
|
int CalcRm16(int base,int idx);
|
|
int CheckDef();
|
|
void SetNewStr(char *name);
|
|
struct structteg *CreatTeg(int Global,int useunion=FALSE,int noname=FALSE);
|
|
void InitStruct2(unsigned int flag,structteg *tteg);
|
|
unsigned long LocalStruct2(int flag,int *localline,int binptr,char bcha,structteg *tteg);
|
|
void retoldscanmode(int mode);
|
|
void ExpandRm(int rm,int sib,int *zoom,int *base,int *idx);
|
|
void BackMod();
|
|
|
|
/*-----------------08.03.98 21:45-------------------
|
|
Ôóíêöèè îïðåäåëåíûå â tokb.h
|
|
--------------------------------------------------*/
|
|
void AddReloc(int segm=itok.segm);
|
|
int doalmath(int sign,char **ofsstr);
|
|
int do_e_axmath(int sign,int razr,char **ofsstr);
|
|
void getintoal(int gtok,ITOK *gstok,char *&gbuf,SINFO *gstr); /* AH may also be changed */
|
|
void getinto_e_ax(int sign,int gtok,ITOK *gstok,char *&gbuf,SINFO *gstr,int razr,int useAX=FALSE);
|
|
int doeaxfloatmath(int itreturn=tk_reg32,int reg=AX,int addop=0);
|
|
int dobytevar(int sign,int terminater=tk_semicolon); // byte, char
|
|
int do_d_wordvar(int sign,int razr,int terminater=tk_semicolon); /* signed or unsigned 16 bit memory variable */
|
|
int doreg_32(int reg,int razr,int terminater=tk_semicolon);
|
|
void doseg(int seg);
|
|
int caselong(unsigned long val);
|
|
int dobeg(int beg,int terminater=tk_semicolon);
|
|
void dobegmath(int beg); /* math done is on all begs except AL */
|
|
void doregmath_32(int reg,int razr,int sign,char **ofsstr,int i=0); /* math done is on all regs except AX */
|
|
int getintobeg(int beg,char **ofsstr);
|
|
int getintoreg_32(int reg,int razr,int sign,char **ofsstr,int useloop=TRUE); /* get into word reg (except AX) with enum */
|
|
void outaddress(ITOK *outtok);
|
|
void FloatToNumer(int addop=0);
|
|
int dofloatvar(int addop=0,int retrez=tk_floatvar,int terminater=tk_semicolon);
|
|
void fwait3();
|
|
void AddFloatConst(long long fnumber,int type=tk_float);
|
|
void setwordpost(ITOK *); /* for post word num setting */
|
|
void setwordext(long *id);
|
|
void RegMulNum(int reg,unsigned long num,int razr,int sign,int *expand,int flag);
|
|
int OnlyNumber(int sign);
|
|
void PopSeg(int seg);
|
|
void PushSeg(int seg);
|
|
void MovRegNum(int razr,int relocf,unsigned long number,int reg);
|
|
int CheckMinusNum();
|
|
int getintoreg(int reg,int razr,int sign,char **ofsstr);
|
|
void dobits();
|
|
void bits2reg(int reg,int razr);
|
|
void getoperand(int reg=BX);
|
|
int optnumadd(unsigned long num,int reg,int razr,int vop);
|
|
int MultiAssign(int razr,int usereg,int npointr=0);
|
|
void CheckInitBP();
|
|
void RestoreBP();
|
|
void fistp_stack(int addop=0);
|
|
void fld_stack(int size);
|
|
void fildq_stack();
|
|
void cpointr(int reg,int numpointr);
|
|
int doqwordvar(int terminater=tk_semicolon); //64 bit memory variable
|
|
void doreg64(int reg,int terminater=tk_semicolon);
|
|
void doregmath64(int reg);
|
|
void getintoreg64(int reg);
|
|
void float2stack(int num);
|
|
void dofloatstack(int num);
|
|
|
|
/*-----------------08.03.98 20:59-------------------
|
|
Ôóíêöèè îïðåäåëåíûå â tokc.c
|
|
--------------------------------------------------*/
|
|
localrec * addlocalvar(char *str,int tok,unsigned int num,int addmain=FALSE);
|
|
int addpoststring(int segm=CS,int len=itok.number, int term=itok.flag); /* add a string to the post queue */
|
|
void define_locallabel();
|
|
unsigned int dofrom();
|
|
unsigned int doextract();
|
|
int doparams(); /* do stack procedure parameter pushing */
|
|
int swapparam();
|
|
long updatetree();
|
|
void addacall(unsigned int idnum,unsigned char callkind);
|
|
idrec * addtotree(char *keystring);
|
|
void compilefile(char *filename,int firstflag);
|
|
void convert_returnvalue(int expectedreturn,int actualreturn);
|
|
int doid (char uppercase,int expectedreturn);
|
|
void insert_dynamic(int insert=FALSE);
|
|
int macros(int expectedreturn);
|
|
void op(int byte);
|
|
void opd(int byte); //âûâîä áàéòà â ñåãìåíò äàííûõ
|
|
void op66(int ctoc);
|
|
int op67(int ctok);
|
|
void outqwordd (unsigned long long);
|
|
void outqword (unsigned long long);
|
|
void outdwordd (unsigned long);
|
|
void outdword (unsigned long);
|
|
void outwordd (unsigned int);
|
|
void outword (unsigned int);
|
|
void outseg(ITOK *outtok,unsigned int locadd);
|
|
int procdo(int expectedreturn);
|
|
int updatecall(unsigned int which,unsigned int where,unsigned int top);
|
|
void AddBackBuf(int,char);
|
|
void CharToBackBuf(char c);
|
|
void missingpar(char *name=(char *)"");
|
|
int CheckCodeSize();
|
|
void CheckPosts();
|
|
int doanyundefproc(int jumpsend=FALSE);
|
|
int doanyproc(int jumpsend=FALSE);
|
|
void killpost(unsigned int poz);
|
|
char *BackString(char *str);
|
|
DLLLIST *FindDLL();
|
|
long initglobalvar(int type,long elements,long ssize,char typev);
|
|
int typesize(int vartype);
|
|
void dopoststrings();
|
|
char *dynamic_var();
|
|
void uptdbr(/*int usesw=FALSE*/);
|
|
void docommand(); /* do a single command */
|
|
//int CheckStopBlock();
|
|
void MakeBreak(unsigned char typeb);
|
|
void SetBreakLabel();
|
|
void SetContinueLabel();
|
|
void CheckDir();
|
|
int SkipParam();
|
|
long GetBitMask(int ofs,int size);
|
|
void AddPostData(unsigned int loop);
|
|
//void NotPostUnion();
|
|
unsigned int initparamproc();
|
|
void CorrectStack(unsigned int num);
|
|
int testInitVar(int checkaldef=TRUE);
|
|
void declareparamreg();
|
|
void declareparamstack(); /* declare procedure parameters */
|
|
void declareparams(); /* declare procedure parameters */
|
|
void declarelocals(int mode,int finline=FALSE); /* declare locals */
|
|
void doblock2();
|
|
void doblock();
|
|
void setreturn();
|
|
int CidOrID();
|
|
void dynamic_proc();
|
|
void setproc(int defflag);
|
|
void define_procedure();
|
|
void doregparams();
|
|
int CheckDeclareProc();
|
|
int loadfile(char *filename,int firstflag);
|
|
void RestoreStack();
|
|
void IsUses(idrec *rec);
|
|
int SkipBlock();
|
|
void declareanonim();
|
|
void declareunion();
|
|
void startblock();
|
|
void endblock();
|
|
void LLabel();
|
|
void AddApiToPost(unsigned int num);
|
|
|
|
/*-----------------08.03.98 20:06-------------------
|
|
ôóíêöèè îïðåäåëåíû â toke.c
|
|
--------------------------------------------------*/
|
|
void jumperror(unsigned int line,char *type);
|
|
void beep(); /* beep for any internal errors */
|
|
void codeexpected();
|
|
void datatype_expected(int type=0);
|
|
unsigned long doconstdwordmath();
|
|
signed long doconstlongmath();
|
|
long doconstfloatmath();
|
|
void dwordvalexpected();
|
|
void idalreadydefined();
|
|
void illegalfloat();
|
|
void internalerror (char *str);// serious internal compiler error message
|
|
void maxoutputerror();
|
|
void maxwordpostserror();
|
|
void nextseminext();
|
|
void numexpected(int type=0);
|
|
void operatorexpected();
|
|
void seminext();
|
|
void shortjumptoolarge();
|
|
void stringexpected();
|
|
void swaperror();
|
|
void SwTok(int want);
|
|
void unabletoopen(char *str);
|
|
void unexpectedeof();
|
|
void unknowncompop();
|
|
void valueexpected();
|
|
void varexpected(int type);
|
|
void wordvalexpected();
|
|
int includeit(int type);
|
|
int includeproc();
|
|
int CheckMacros();
|
|
void tobigpost();
|
|
void expected (char ch);
|
|
int expecting(int want);
|
|
void outprocedure(unsigned char *array,unsigned int length);
|
|
void preerror(char *str);//error on currentline with line number and file name
|
|
void thisundefined(char *str,int next=TRUE);
|
|
void addconsttotree(char *keystring,long long constvalue,int type=tk_dword);
|
|
void directive();
|
|
void doenum();
|
|
void doprestuff(); //do initial code things, like resize mem, jump to main...
|
|
void searchvar(char *name,int err=1);
|
|
void expectingoperand(int want);
|
|
void InitDefineConst();
|
|
unsigned long long doconstqwordmath();
|
|
long long doconstdoublemath();
|
|
int calclongnumber(long *retnum,long number,int operand);
|
|
int calcqwordnumber(unsigned long long *retnum,unsigned long long number,int operand);
|
|
int calcdwordnumber(unsigned long *retnum,unsigned long number,int operand);
|
|
int calcfloatnumber(float *retnum,float number,int operand);
|
|
int calcdoublenumber(double *retnum,double number,int operand);
|
|
|
|
/*-----------------08.03.98 22:24-------------------
|
|
Ôóíêöèè îïðåäåëåíûå â tokr.c
|
|
--------------------------------------------------*/
|
|
void doasm(int next=FALSE);
|
|
int short_ok(long thenumber,int reg32=FALSE);
|
|
void callloc(long loc); /* produce CALL # */
|
|
void callloc0();
|
|
void cbw(void);
|
|
int GOTO();
|
|
void expecting2(int want);
|
|
unsigned char gotol(int faradd);
|
|
void jumploc(long loc); /* produce JUMP # */
|
|
void jumploc0();
|
|
void movsb(void);
|
|
void movsd(void);
|
|
void movsw(void);
|
|
void popes(); /* produce POP ES */
|
|
void pushds(); /* produce PUSH DS */
|
|
void pushss();
|
|
void ret(); /* produce RET */
|
|
void retf(); /* produce RETF */
|
|
void stosb(void);
|
|
void stosd(void);
|
|
void stosw(void);
|
|
void fwait();
|
|
void xorAHAH(void); /* produce XOR AH,AH */
|
|
void xorAXAX(void); /* produce XOR AX,AX */
|
|
void xorEAXEAX(void); /* produce XOR EAX,EAX */
|
|
void nextexpecting2(int want);
|
|
void tobedefined(int callkind,int expectedreturn);
|
|
void cwdq(int razr);
|
|
void Leave();
|
|
void CheckIP();
|
|
int iTest(int mode=0);
|
|
void ZeroReg(int reg, int razr);
|
|
int Push(ITOK *wtok=NULL);
|
|
|
|
/*-----------------08.08.00 22:50-------------------
|
|
errors.cpp
|
|
--------------------------------------------------*/
|
|
void warningstring();
|
|
void warningexpand();
|
|
void warningjmp(char *str2,int line=linenumber,int file=currentfileinfo);
|
|
void warningreg(char *str2);
|
|
void preerror3(char *str,unsigned int line,unsigned int file=currentfileinfo);// error message at a different than current line
|
|
void unableopenfile(char *name);
|
|
void tegnotfound();
|
|
void errstruct();
|
|
void warningdefined(char *);
|
|
void extraparam(char *name="");
|
|
void warningretsign();
|
|
void ErrWrite();
|
|
void ErrReadStub();
|
|
void warningnotused(char *name,int type);
|
|
void regBXDISIBPexpected();
|
|
void reg32expected(int type=0);
|
|
void InvOperComp();
|
|
void warningusenotintvar(char *name);
|
|
void warningdestroyflags();
|
|
void warningunreach();
|
|
void unuseableinput();
|
|
void redeclare(char *name);
|
|
void undefclass(char *name);
|
|
void badinfile(char *name);
|
|
void errorreadingfile(char *name);
|
|
void expectederror(char *str);
|
|
void unknowntype();
|
|
void unknownstruct (char *name,char *sname);
|
|
void unknowntagstruct (char *name);
|
|
void warninline();
|
|
void ZeroMassiv();
|
|
void bytevalexpected(int type);
|
|
void FindStopTok();
|
|
//void not_union_static();
|
|
extern void edpip(int num=0);
|
|
void waralreadinit(char *reg);
|
|
void waralreadinitreg(char *reg,char *reg2);
|
|
void OnlyComFile();
|
|
void warnsize();
|
|
void destrdestreg();
|
|
void qwordvalexpected();
|
|
void fpustdestroed();
|
|
void unknownobj(char *name);
|
|
void FindEndLex();
|
|
void fpu0expected();
|
|
void unknownpragma(char *name);
|
|
void warpragmapackpop();
|
|
void SkipBlock2();
|
|
void warreplasevar(char *name);
|
|
void warcompneqconst();
|
|
void warcompeqconst();
|
|
void warpointerstruct();
|
|
void warESP();
|
|
void waralreadinitvar(char *name,unsigned int num);
|
|
void warningprint(char *str,unsigned int line,unsigned int file);
|
|
void notexternfun();
|
|
|
|
void AddDataLine(char ssize/*,char typev*/);
|
|
void mapfun(int);
|
|
|
|
/*-----------------24.01.01 01:42-------------------
|
|
disasm.cpp
|
|
--------------------------------------------------*/
|
|
void undata(unsigned ofs,unsigned long len,unsigned int type);
|
|
void unassemble(unsigned long ofs);
|
|
|
|
/*-----------------25.01.01 23:02-------------------
|
|
debug.cpp
|
|
--------------------------------------------------*/
|
|
void AddLine(int SkipLine=FALSE);
|
|
void DoTDS();
|
|
void InitDbg();
|
|
void KillLastLine();
|
|
void AddDataNullLine(char ssize/* new!!! */,char *name=NULL);
|
|
void AddCodeNullLine(char *name=NULL);
|
|
void AddEndLine();
|
|
#ifdef DEBUGMODE
|
|
void printdebuginfo();
|
|
#endif
|
|
//void AddMainLine();
|
|
|
|
/*-----------------12.04.01 22:46-------------------
|
|
outpe
|
|
--------------------------------------------------*/
|
|
void CreatStub(char *name);
|
|
void CreatWinStub();
|
|
void ChSize(long size);
|
|
|
|
/*-----------------12.04.01 22:57-------------------
|
|
outle
|
|
--------------------------------------------------*/
|
|
int MakeLE();
|
|
int MakeMEOS();
|
|
int MakeBin32();
|
|
|
|
/*-----------------08.12.01 23:43-------------------
|
|
pointer
|
|
--------------------------------------------------*/
|
|
void dopointer();
|
|
void dovalpointer();
|
|
void getpointeradr(ITOK *gstok,char *&gbuf,SINFO *gstr,int numpointer,int razr,int reg=BX);
|
|
void dopointerproc();
|
|
|
|
/*-----------------09.12.01 00:28-------------------
|
|
new_type
|
|
--------------------------------------------------*/
|
|
void convert_type(int *sign,int *rettype,int *pointr,int reg=BX);
|
|
|
|
/*-----------------23.12.01 02:39-------------------
|
|
class
|
|
--------------------------------------------------*/
|
|
void doclassproc(unsigned int);
|
|
void AddThis();
|
|
|
|
/*-----------------27.01.02 23:39-------------------
|
|
res
|
|
--------------------------------------------------*/
|
|
void input_res();
|
|
int MakeRes(unsigned long ofsres,LISTRELOC **listrel);
|
|
void CreatStrTabRes();
|
|
|
|
/*-----------------14.04.03 21:31-------------------
|
|
optreg
|
|
--------------------------------------------------*/
|
|
void initregstat();
|
|
void deinitregstat();
|
|
void IDXToReg(char *name,int size,int reg);
|
|
int CheckIDXReg(char *name,int size,int reg);
|
|
void IDZToReg(char *name,int reg,int razr);
|
|
int CheckIDZReg(char *name,int reg,int razr);
|
|
void clearregstat(int regs=0);
|
|
void ConstToReg(unsigned long num,int reg,int razr);
|
|
void ClearReg(int reg);
|
|
int RegSwapReg(int reg1,int reg2,int razr);
|
|
char *GetLecsem(int stop1,int stop2=tk_eof,int type=-1);
|
|
REGISTERSTAT *BakRegStat();
|
|
void CopyRegStat(REGISTERSTAT *bak);
|
|
void KillVar(char *name);
|
|
void CompareRegStat(REGISTERSTAT *bak);
|
|
int RegToReg(int regd,int regs,int razr);
|
|
void GenRegToReg(int regd,int reds,int razr);
|
|
void GetEndLex(int stop1,int stop2=tk_eof,int type=-1);
|
|
int GetRegNumber(int reg,unsigned long *num,int razr);
|
|
int GetNumberR(int reg,unsigned long *num,int razr,unsigned long number);
|
|
void FreeStat(REGISTERSTAT *bak);
|
|
void AddRegVar(int reg, int razr,ITOK *itok4);
|
|
int GetRegVar(ITOK *itok4);
|
|
#ifdef OPTVARCONST
|
|
void CreateMainLVIC();
|
|
void KillMainLVIC();
|
|
void ClearLVIC();
|
|
int Const2Var(ITOK *itok4,long long num,int typenum);
|
|
void ClearVarByNum(ITOK *itok4);
|
|
int UpdVarConst(ITOK *itok4,long long num,int typenum,int operand);
|
|
void FreeGlobalConst();
|
|
int CheckRegToConst(int reg,ITOK *itok4,int razr);
|
|
int CheckUpdRegToConst(int reg,ITOK *itok4,int operand,int razr);
|
|
int SwapVarConst(ITOK *itok2,ITOK *itok4);
|
|
int SwapVarRegConst(int reg,ITOK *itok4,int razr);
|
|
int CheckConstVar(ITOK *itok4);
|
|
//int CheckConstVar2(ITOK *itok4,long long *num,int *typenum);
|
|
void CheckConstVar3(int *tok4,ITOK *itok4,int razr);
|
|
void Const2VarRec(LVIC *varconst);
|
|
#endif
|
|
|
|
#ifndef _REGOPT_
|
|
extern unsigned char optinitreg;
|
|
#ifdef OPTVARCONST
|
|
extern unsigned char replasevar;
|
|
extern LVIC *listvic;
|
|
#endif
|
|
#endif
|
|
|
|
/*-----------------------
|
|
libobj
|
|
-------------------------*/
|
|
void AddNameObj(char *name,int typefind,int type);
|
|
void AddObj();
|
|
|
|
#ifdef __NEWLEX__
|
|
void inittokn();
|
|
void doblockstart(char *);
|
|
|
|
#endif
|
|
/* end of TOK.H */
|