kolibrios-gitea/programs/develop/cmm/struct.h
Coldy 3444be38ad cmm: fixups for fully MSCOFF generation
git-svn-id: svn://kolibrios.org@9680 a494cfbc-eb01-0410-851d-a64ba20cac60
2022-02-05 17:52:05 +00:00

547 lines
11 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <sys/stat.h>
typedef struct _BIT_{
unsigned int siz:8;
unsigned int ofs:24;
}BIT;
struct _PROCINFO_
{
char *buf; // ¤à¥á ⥪áâ  ¯à®æ¥¤ãàë
void *classteg; // ¤à¥á ⥣ , £¤¥ ®¯à¥¤¥«¥­  ¯à®æ¥¤ãà 
unsigned int warn:1;
unsigned int speed:1;
unsigned int lst:1;
unsigned int typestring:2;
unsigned int inlinest:1;
unsigned int code32:1;
unsigned int align:1;
unsigned int acycle:1;
unsigned int idasm:1;
unsigned int opnum:1;
unsigned int de:1;
unsigned int ostring:1;
unsigned int uselea:1;
unsigned int regoverstack:1;
unsigned int sizeacycle;
char chip;
};
struct idrec
{
union{
struct idrec *left;
struct localrec *next;
};
struct idrec *right; //¯à¥¤ë¤ãé ¨ á«¥¤ãîé § ¯¨áì
char recid[IDLENGTH]; //¨¬ï
unsigned int flag;
char *newid; //¡«®ª á ¤ ­ë¬¨, ¤«ï áâàãªâãà  ¤à¥á ⥣ ,¤«ï ¯à®æ¥¤ãà ¯ à ¬¥âàë
int rectok; //⨯
int recrm; //¤«ï áâàãªâãà ç¨á«® ª®¯¨©
int recsegm;
int recpost;
int recsize;
int recsib;
int line; //­®¬¥à «¨­¨¨
int file; //ä ©«
int count; //áç¥â稪 ¨á¯®«ì§®¢ ­¨ï
unsigned short type;
unsigned short npointr;
union{
char *sbuf; //㪠§ â¥«ì ­  ¡«®ª ¨á室­®£® ⥪áâ 
_PROCINFO_ *pinfo;
};
union{
long recnumber;
long long reclnumber;
double recdnumber;
float recfnumber;
};
};
struct localinfo
{
int usedfirst;
int usedlast;
int start;
int end;
int level;
int count;
};
struct localrec
{
/* struct localrec *next;
int localtok;
unsigned short type;
unsigned short npointr;
union{
unsigned int localnumber;
idrec *rec;
};
int locsize;
char localid[IDLENGTH];
unsigned char fuse; //ä« £ ¨á¯®«ì§®¢ ­¨ï
unsigned char flag; //ä« £ static*/
idrec rec;
localinfo li;
unsigned char fuse; //ä« £ ¨á¯®«ì§®¢ ­¨ï
};
#define INITBPPAR 1 //¨­¨æ¨ «¨§ æ¨ï BP ¯®á«¥ ¯ à ¬¥â஢
#define INITBPLOC 2 //¨­¨æ¨ «¨§ æ¨ï BP ¯®á«¥ «®ª «ì­ëå
#define INITBPENTER 4
#define INITBPADDESP 8
struct HEADLOC
{
int type; //⨯ § £®«®¢ª 
unsigned int ofs; // ¤à¥á §­ ç¥­¨ï
unsigned int num; //¢¥«¨ç¨­  §­ ç¥­¨ï
};
struct treelocalrec
{
treelocalrec *next;
localrec *lrec;
int initbp;
int level;
unsigned int addesp;
int endline;
};
typedef struct _ITOK_
{
int rm;
int segm;
int post;
int sib;
union{
long number;
long long lnumber;
double dnumber;
float fnumber;
};
union{
int size;
BIT bit;
};
unsigned short type;
unsigned short npointr;
union{
idrec *rec;
localrec *locrec;
};
char name[IDLENGTH];
unsigned int flag;
}ITOK;
struct elementteg
{
union{
void *nteg; // ¤à¥á ⥣  ¢«®¦¥­­®© áâàãªâãàë
idrec *rec;
};
int tok;
union{
unsigned int numel; //ç¨á«® í«¥¬¥­â®¢ í⮣® ⨯ 
BIT bit;
};
unsigned int ofs; //ᬥ饭¨¥ ®â ­ ç «  áâàãªâãàë
char name[IDLENGTH];
};
struct structteg
{
struct structteg *left; //á«¥¤ãî騩 ⥣
struct structteg *right; //á«¥¤ãî騩 ⥣
unsigned int size; //à §¬¥à ⥣ 
unsigned int numoper; //ç¨á«® ®¯¥à ­¤®¢ áâàãªâãàë
struct elementteg *baza; // ¤à¥á á ®¯¨á ­¨¥¬ í«¥¬¥­â®¢ ⥣ 
unsigned int flag;
char name[IDLENGTH];
};
struct listexport
{
long address;
char name[IDLENGTH];
};
typedef struct _IOFS_
{
unsigned int ofs;
unsigned int line; //­®¬¥à «¨­¨¨
unsigned int file; //ä ©«
unsigned char dataseg;
}IOFS;
typedef struct _UNDEFOFF_
{
struct _UNDEFOFF_ *next;
IOFS *pos; //¡ãä¥à á  ¤à¥á ¬¨ ®âªã¤  áá뫪¨
int num; //ç¨á«® ááë«®ª ­  íâã ¬¥âªã
char name[IDLENGTH];
}UNDEFOFF;
typedef struct _LISTCOM_
{
char name[IDLENGTH];
}LISTCOM;
typedef struct _SINFO_
{
char *bufstr;
int size;
}SINFO;
//áâàãªâãà  á¯¨áª  api-¯à®æ¥¤ãà
typedef struct _APIPROC_
{
struct idrec *recapi;
}APIPROC;
//
typedef struct _DLLLIST_
{
struct _DLLLIST_ *next; //á«¥¤ãîé ï DLL
struct _APIPROC_ *list; //ᯨ᮪ ¯à®æ¥¤ãà
unsigned short num; //ç¨á«® ¯à®æ¥¤ãà
char name[IDLENGTH]; //¨¬ï DLL
}DLLLIST;
typedef struct _PE_HEADER_
{
long sign; //ᨣ­ âãà  - ¢á¥£¤  'PE'
short cpu; //¬¨­ ⨯ CPU - ¢á¥£¤  0x14C
short numobj; //ç¨á«® ¢å®¤®¢ ¢ â ¡«¨æã ®¡ê¥ªâ®¢
long date_time; //¤ â  ¬®¤¨ä¨ª æ¨¨ «¨­ª¥à®¬
long pCOFF;
long COFFsize;
short NTheadsize; //à §¬¥à § £®«®¢ª  PE ®â MAGIC - ¢á¥£¤  0xE0
short flags;
short Magic; //­ §­ ç¥­¨¥ ¯à£à ¬¬ë
short LinkVer; //¢¥àá¨ï «¨­ª¥à 
long sizecode;
long sizeinitdata;
long sizeuninitdata;
long EntryRVA; // ¤à¥á ®â­®á¨â IMAGE BASE ¯® ª®â®à®¬ã ¯¥à¥¤ ¥âáï ã¯à ¢«¥­¨¥
long basecode; //RVA ᥪæ¨ï, ª®â®à ï ᮤ¥à¦¨â ¯à®£à ¬¬­ë© ª®¤
long basedata; //RVA ᥪæ¨ï,ᮤ¥à¦ é ï ¤ ­­ë¥
long ImageBase; //¢¨àâã «ì­ë© ­ ç «ì­ë©  ¤à¥á § £à㧪¨ ¯à®£à ¬¬ë
long objAlig; //¢ëà ¢­¨¢ ­¨¥ ¯à®£à ¬¬­ëå ᥪ権
long fileAlig; //‚ëà ¢­¨¢ ­¨¥ ᥪ権 ¢ ä ©«¥
long OSver; //­®¬¥à ¢¥àᨨ ®¯¥à á¨áâ¥¬ë ­¥®¡å ¯à®£à ¬¬¥
long userver;
long SubSysVer;
long rez;
long imagesize; //à §¬¥à ¢ ¡ ©â å § £à㦠¥¬®£® ®¡à §  á § £®«®¢ª ¬¨ ¢ëà ¢­¥­ë©
long headsize; //à §¬ ¢á¥å § £®«®¢ª®¢ stub+PE+objtabl
long checksum;
short SubSys; //®¯¥à æ¨®­­ ï á¨áâ ­¥®¡å ¤«ï § ¯ã᪠
short DLLflag;
long stackRezSize;
long stackComSize;
long heapRezSize;
long heapComSize;
long loaderFlag;
long numRVA; //¢á¥£¤  10
long exportRVA;
long exportSize;
long importRVA;
long importSize;
long resourRVA;
long resourSize;
long exceptRVA;
long exceptSize;
long securRVA;
long securSize;
long fixupRVA;
long fixupSize;
long debugRVA;
long debugSize;
long descripRVA;
long descripSize;
long machinRVA;
long machinSize;
long tlsRVA;
long tlsSize;
long loadConfRVA;
long loadConfSize;
long rez2[2];
long iatRVA;
long iatSize;
long rez3[6];
}PE_HEADER;
typedef struct _OBJECT_ENTRY_
{
char name[8];
long vsize;
long sectionRVA;
long psize;
long pOffset;
unsigned long PointerToRelocations;
unsigned long PointerToLinenumbers;
unsigned short NumberOfRelocations;
unsigned short NumberOfLinenumbers;
long flags;
}OBJECT_ENTRY;
typedef struct _EXPORT_TABLE_
{
unsigned long Flags;
unsigned long Time;
unsigned short Version[2];
unsigned long NameRVA;
unsigned long OriginalBase;
unsigned long NumFunc;
unsigned long NumName;
unsigned long AddressRVA;
unsigned long NamePRVA;
unsigned long OrdinalRVA;
}EXPORT_TABLE;
struct ftime {
unsigned ft_tsec:5; /* ¤¢¥ ᥪ㭤ë */
unsigned ft_min:6; /* ¬¨­ãâë */
unsigned ft_hour:5; /* ç áë */
unsigned ft_day:5; /* ¤¥­ì */
unsigned ft_month:4; /* ¬¥áïæ */
unsigned ft_year:7; /* £®¤-1980 */
};
typedef struct _STRING_LIST_
{
void *next; //á«¥¤ãîé ï áâàãªâãà 
unsigned int len; //¤«¨­  áâப¨
unsigned int ofs; // ¤à¥á ¢ ¢ë室­®¬ ä ©«¥
unsigned char type; //⨯ â¥à¬¨­ â®à 
unsigned char plase; //£¤¥ ᥩç á áâப  - post or data
}STRING_LIST;
struct FILEINFO
{
char *filename;
int numdline;
idrec *stlist;
union{
struct ftime time;
unsigned short lineidx[2];
};
};
struct EWAR{
FILE *file;
char *name;
};
typedef struct _ICOMP_
{
unsigned int type;
unsigned int loc;
unsigned int use_cxz;
}ICOMP;
typedef struct _RETLIST_
{
unsigned int line;
unsigned int loc;
unsigned int type;
// int use;
}RETLIST;
enum{
singlcase,startmulti,endmulti};
typedef struct _ISW_
{
unsigned char type;
unsigned int postcase;
unsigned long value;
}ISW;
struct postinfo
{
unsigned int loc;
unsigned int num;
unsigned short type;
unsigned short line;
unsigned short file;
};
typedef struct _EXE_DOS_HEADER_
{
unsigned short sign;
unsigned short numlastbyte;
unsigned short numpage;
unsigned short numreloc;
unsigned short headsize;
unsigned short minmem;
unsigned short maxmem;
unsigned short initSS;
unsigned short initSP;
unsigned short checksum;
unsigned short initIP;
unsigned short initCS;
unsigned short ofsreloc;
unsigned short overlay;
unsigned long fullsize;
}EXE_DOS_HEADER;
typedef struct _FSWI_
{
ISW *info;
int sizetab; //ç¨á«® í«¥¬¥­â®¢
int type; //à §à來®áâì
int numcase; //ç¨á«® ¨á¯®«ì§ã¥¬ëå í«¥¬¥­â®¢
int defal; //§­ ç¥­¨¥ ¯® 㬮«ç ­¨î.
int ptb; // ¤à¥á 㪠§ â¥«ï ­  íâã â ¡«¨æã ¢ ¡«®ª¥ ª®¤ 
int ptv; // ¤à¥á â ¢«¨æë ¢¥«¨ç¨­
int mode; //⨯ switch
int razr; //à §à來®áâì ¢¥«¨ç¨­
}FSWI;
struct paraminfo
{
unsigned int ofspar;
unsigned char type[8];
};
struct MEOSheader
{
unsigned char sign[25];
unsigned long vers;
unsigned long start;
unsigned long size;
unsigned long alloc_mem;
unsigned long esp;
unsigned long I_Param;
unsigned long I_Icon;
};
#ifdef OPTVARCONST
struct LVIC{
idrec *rec;
// int blocks;
int typevar;
int contype; //⨯ ᮤ¥à¦¨¬®£®
union{
long number;
long long lnumber;
double dnumber;
float fnumber;
};
};
struct BLVIC
{
int sizevic;
LVIC *listvic;
};
#endif
#define SIZEIDREG 256
#define NOINREG 8
#define SKIPREG 9
struct REGEQVAR
{
REGEQVAR *next;
char name[IDLENGTH];
unsigned char razr;
};
struct REGISTERSTAT
{
union{
REGEQVAR *next;
#ifdef OPTVARCONST
BLVIC *bakvic;
#endif
};
union{
char id[SIZEIDREG];
void *stringpar;
unsigned long number;
};
unsigned char type;
unsigned char razr;
};
struct SAVEREG
{
unsigned int size; //à §¬¥à ¯ ¬ï⨠¤«ï ॣ¨áâ஢
unsigned char all; //¢á¥ ॣ¨áâàë
unsigned char reg[8]; //ª àâ  à¥£¨áâ஢
};
struct SAVEPAR
{
unsigned char ooptimizespeed;
unsigned char owarning;
unsigned char odbg;
unsigned char odosstring;
unsigned char ouseinline;
unsigned char oam32; // ०¨¬ 32 ¡¨â­®©  ¤à¥á æ¨¨
unsigned char oalignword;
unsigned char oAlignCycle; //¢ëà ¢­¨¢ âì ­ ç «  横«®¢
unsigned char oidasm; // áᥬ¡«¥à­ë¥ ¨­áâàãªæ¨¨ áç¨â âì ¨¤¥­â¨ä¨ª â®à ¬¨
int ooptnumber;
int odivexpand;
unsigned char ooptstr; //®¯â¨¬¨§ æ¨ï áâப®¢ëå ª®­áâ ­â
unsigned char ochip;
int oaligncycle;
unsigned char ouselea;
unsigned char oregoverstack;
};
struct COM_MOD
{
COM_MOD *next;
unsigned char *input; /* dynamic input buffer */
unsigned int endinptr; /* end index of input array */
unsigned int inptr; /* index in input buffer */
unsigned int inptr2; /* index in input buffer */
unsigned int linenumber;
unsigned int currentfileinfo;
int numparamdef; //ç¨á«® ¯ à ¬¥â஢ ¢ ⥪ã饬 define
char *declareparamdef; //ᯨ᮪ ®¡ê¥­ëå ¯ à ¬¥â஢ define
char *paramdef; //ᯨ᮪ ­®¢ëå ¯ à ¬¥â஢
int freze; //ä« £ § ¯à¥é¥­¨ï 㤠«¥­¨ï áâàãªâãàë
};
struct LISTRELOC {
unsigned int val;
};
struct LISTFLOAT
{
union{
float fnum;
double dnum;
unsigned long num[2];
};
int type;
unsigned int ofs;
};
struct LILV
{
unsigned int ofs;
int size;
localrec *rec;
};
struct WARNACT
{
void (*fwarn)(char *str,unsigned int line,unsigned int file);
unsigned char usewarn;
};