Subversion Repositories Kolibri OS

Rev

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

  1. #include <stdio.h>
  2. #include <sys/stat.h>
  3.  
  4. typedef struct _BIT_{
  5.         unsigned int siz:8;
  6.         unsigned int ofs:24;
  7. }BIT;
  8.  
  9. struct _PROCINFO_
  10. {
  11.         char *buf;      // ¤à¥á ⥪áâ  ¯à®æ¥¤ãàë
  12.         void *classteg; // ¤à¥á ⥣ , £¤¥ ®¯à¥¤¥«¥­  ¯à®æ¥¤ãà 
  13.         unsigned int warn:1;
  14.         unsigned int speed:1;
  15.         unsigned int lst:1;
  16.         unsigned int typestring:2;
  17.         unsigned int inlinest:1;
  18.         unsigned int code32:1;
  19.         unsigned int align:1;
  20.         unsigned int acycle:1;
  21.         unsigned int idasm:1;
  22.         unsigned int opnum:1;
  23.         unsigned int de:1;
  24.         unsigned int ostring:1;
  25.         unsigned int uselea:1;
  26.         unsigned int regoverstack:1;
  27.         unsigned int sizeacycle;
  28.         char chip;
  29. };
  30.  
  31. struct idrec
  32. {
  33.         union{
  34.                 struct idrec *left;
  35.                 struct localrec *next;
  36.         };
  37.         struct idrec *right;    //¯à¥¤ë¤ãé ¨ á«¥¤ãîé § ¯¨áì
  38.         char recid[IDLENGTH];   //¨¬ï
  39.         unsigned int flag;
  40.         char *newid;  //¡«®ª á ¤ ­ë¬¨, ¤«ï áâàãªâãà  ¤à¥á ⥣ ,¤«ï ¯à®æ¥¤ãà ¯ à ¬¥âàë
  41.         int rectok;             //⨯
  42.         int recrm;    //¤«ï áâàãªâãà ç¨á«® ª®¯¨©
  43.         int recsegm;
  44.         int recpost;
  45.         int recsize;
  46.         int recsib;
  47.         int line;       //­®¬¥à «¨­¨¨
  48.         int file;       //ä ©«
  49.         int count;      //áç¥â稪 ¨á¯®«ì§®¢ ­¨ï
  50.         unsigned short type;
  51.         unsigned short npointr;
  52.         union{
  53.                 char *sbuf;     //㪠§ â¥«ì ­  ¡«®ª ¨á室­®£® ⥪áâ 
  54.                 _PROCINFO_ *pinfo;
  55.         };
  56.         union{
  57.                 long recnumber;
  58.                 long long reclnumber;
  59.                 double recdnumber;
  60.                 float recfnumber;
  61.         };
  62. };
  63.  
  64. struct localinfo
  65. {
  66.         int usedfirst;
  67.         int usedlast;
  68.         int start;
  69.         int end;
  70.         int level;
  71.         int count;
  72. };
  73.  
  74. struct localrec
  75. {
  76. /*      struct localrec *next;
  77.         int localtok;
  78.         unsigned short type;
  79.         unsigned short npointr;
  80.         union{
  81.                 unsigned int localnumber;
  82.                 idrec *rec;
  83.         };
  84.         int locsize;
  85.         char localid[IDLENGTH];
  86.         unsigned char fuse;     //ä« £ ¨á¯®«ì§®¢ ­¨ï
  87.         unsigned char flag;     //ä« £ static*/
  88.         idrec rec;
  89.         localinfo li;
  90.         unsigned char fuse;     //ä« £ ¨á¯®«ì§®¢ ­¨ï
  91. };
  92.  
  93. #define INITBPPAR 1     //¨­¨æ¨ «¨§ æ¨ï BP ¯®á«¥ ¯ à ¬¥â஢
  94. #define INITBPLOC 2 //¨­¨æ¨ «¨§ æ¨ï BP ¯®á«¥ «®ª «ì­ëå
  95. #define INITBPENTER 4
  96. #define INITBPADDESP 8
  97.  
  98. struct HEADLOC
  99. {
  100.         int type;       //⨯ § £®«®¢ª 
  101.         unsigned int ofs; // ¤à¥á §­ ç¥­¨ï
  102.         unsigned int num;       //¢¥«¨ç¨­  §­ ç¥­¨ï
  103. };
  104.  
  105. struct treelocalrec
  106. {
  107.         treelocalrec *next;
  108.         localrec *lrec;
  109.         int initbp;
  110.         int level;
  111.         unsigned int addesp;
  112.         int endline;
  113. };
  114.  
  115. typedef struct _ITOK_
  116. {
  117.         int rm;
  118.         int segm;
  119.         int post;
  120.         int sib;
  121.         union{
  122.                 long number;
  123.                 long long lnumber;
  124.                 double dnumber;
  125.                 float fnumber;
  126.         };
  127.         union{
  128.                 int size;
  129.                 BIT bit;
  130.         };
  131.         unsigned short type;
  132.         unsigned short npointr;
  133. union{
  134.                 idrec *rec;
  135.                 localrec *locrec;
  136.         };
  137.         char name[IDLENGTH];
  138.         unsigned int flag;
  139. }ITOK;
  140.  
  141. struct elementteg
  142. {
  143.         union{
  144.                 void *nteg;     // ¤à¥á ⥣  ¢«®¦¥­­®© áâàãªâãàë
  145.                 idrec *rec;
  146.         };
  147.         int tok;
  148.         union{
  149.                 unsigned int numel;     //ç¨á«® í«¥¬¥­â®¢ í⮣® ⨯ 
  150.                 BIT bit;
  151.         };
  152.         unsigned int ofs;       //ᬥ饭¨¥ ®â ­ ç «  áâàãªâãàë
  153.         char name[IDLENGTH];
  154. };
  155.  
  156. struct structteg
  157. {
  158.         struct structteg *left; //á«¥¤ãî騩 ⥣
  159.         struct structteg *right;        //á«¥¤ãî騩 ⥣
  160.         unsigned int size;      //à §¬¥à ⥣ 
  161.         unsigned int numoper;   //ç¨á«® ®¯¥à ­¤®¢ áâàãªâãàë
  162.         struct elementteg *baza;        // ¤à¥á á ®¯¨á ­¨¥¬ í«¥¬¥­â®¢ ⥣ 
  163.         unsigned int flag;
  164.         char name[IDLENGTH];
  165. };
  166.  
  167. struct listexport
  168. {
  169.         long address;
  170.         char name[IDLENGTH];
  171. };
  172.  
  173. typedef struct _IOFS_
  174. {
  175.         unsigned int ofs;
  176.         unsigned int line;      //­®¬¥à «¨­¨¨
  177.         unsigned int file;      //ä ©«
  178.         unsigned char dataseg;
  179. }IOFS;
  180.  
  181. typedef struct _UNDEFOFF_
  182. {
  183.         struct _UNDEFOFF_ *next;
  184.         IOFS *pos;      //¡ãä¥à á  ¤à¥á ¬¨ ®âªã¤  áá뫪¨
  185.         int num;        //ç¨á«® ááë«®ª ­  íâã ¬¥âªã
  186.         char name[IDLENGTH];
  187. }UNDEFOFF;
  188.  
  189. typedef struct _LISTCOM_
  190. {
  191.         char name[IDLENGTH];
  192. }LISTCOM;
  193.  
  194. typedef struct _SINFO_
  195. {
  196.         char *bufstr;
  197.         int size;
  198. }SINFO;
  199.  
  200. //áâàãªâãà  á¯¨áª  api-¯à®æ¥¤ãà
  201. typedef struct _APIPROC_
  202. {
  203.         struct idrec *recapi;
  204. }APIPROC;
  205.  
  206. //
  207. typedef struct _DLLLIST_
  208. {
  209.         struct _DLLLIST_ *next; //á«¥¤ãîé ï DLL
  210.         struct _APIPROC_ *list; //ᯨ᮪ ¯à®æ¥¤ãà
  211.         unsigned short num;     //ç¨á«® ¯à®æ¥¤ãà
  212.         char name[IDLENGTH];    //¨¬ï DLL
  213. }DLLLIST;
  214.  
  215. typedef struct _PE_HEADER_
  216. {
  217.         long sign;      //ᨣ­ âãà  - ¢á¥£¤   'PE'
  218.         short cpu;    //¬¨­ ⨯ CPU - ¢á¥£¤  0x14C
  219.         short numobj;   //ç¨á«® ¢å®¤®¢ ¢ â ¡«¨æã ®¡ê¥ªâ®¢
  220.         long date_time; //¤ â  ¬®¤¨ä¨ª æ¨¨ «¨­ª¥à®¬
  221.         long pCOFF;
  222.         long COFFsize;
  223.         short NTheadsize;       //à §¬¥à § £®«®¢ª  PE ®â MAGIC - ¢á¥£¤  0xE0
  224.         short flags;
  225.         short Magic;    //­ §­ ç¥­¨¥ ¯à£à ¬¬ë
  226.         short LinkVer;  //¢¥àá¨ï «¨­ª¥à 
  227.         long sizecode;
  228.         long sizeinitdata;
  229.         long sizeuninitdata;
  230.         long EntryRVA;  // ¤à¥á ®â­®á¨â IMAGE BASE ¯® ª®â®à®¬ã ¯¥à¥¤ ¥âáï ã¯à ¢«¥­¨¥
  231.         long basecode;  //RVA ᥪæ¨ï, ª®â®à ï ᮤ¥à¦¨â ¯à®£à ¬¬­ë© ª®¤
  232.         long basedata;  //RVA ᥪæ¨ï,ᮤ¥à¦ é ï ¤ ­­ë¥
  233.         long ImageBase; //¢¨àâã «ì­ë© ­ ç «ì­ë©  ¤à¥á § £à㧪¨ ¯à®£à ¬¬ë
  234.         long objAlig;   //¢ëà ¢­¨¢ ­¨¥ ¯à®£à ¬¬­ëå ᥪ権
  235.         long fileAlig;  //‚ëà ¢­¨¢ ­¨¥ ᥪ権 ¢ ä ©«¥
  236.         long OSver;     //­®¬¥à ¢¥àᨨ ®¯¥à á¨áâ¥¬ë ­¥®¡å ¯à®£à ¬¬¥
  237.         long userver;
  238.         long SubSysVer;
  239.         long rez;
  240.         long imagesize; //à §¬¥à ¢ ¡ ©â å § £à㦠¥¬®£® ®¡à §  á § £®«®¢ª ¬¨ ¢ëà ¢­¥­ë©
  241.         long headsize;  //à §¬ ¢á¥å § £®«®¢ª®¢ stub+PE+objtabl
  242.         long checksum;
  243.         short SubSys;   //®¯¥à æ¨®­­ ï á¨áâ ­¥®¡å ¤«ï § ¯ã᪠
  244.         short DLLflag;
  245.         long stackRezSize;
  246.         long stackComSize;
  247.         long heapRezSize;
  248.         long heapComSize;
  249.         long loaderFlag;
  250.         long numRVA;    //¢á¥£¤  10
  251.         long exportRVA;
  252.         long exportSize;
  253.         long importRVA;
  254.         long importSize;
  255.         long resourRVA;
  256.         long resourSize;
  257.         long exceptRVA;
  258.         long exceptSize;
  259.         long securRVA;
  260.         long securSize;
  261.         long fixupRVA;
  262.         long fixupSize;
  263.         long debugRVA;
  264.         long debugSize;
  265.         long descripRVA;
  266.         long descripSize;
  267.         long machinRVA;
  268.         long machinSize;
  269.         long tlsRVA;
  270.         long tlsSize;
  271.         long loadConfRVA;
  272.         long loadConfSize;
  273.         long rez2[2];
  274.         long iatRVA;
  275.         long iatSize;
  276.         long rez3[6];
  277. }PE_HEADER;
  278.  
  279. typedef struct _OBJECT_ENTRY_
  280. {
  281.         char name[16];
  282.         long vsize;
  283.         long sectionRVA;
  284.         long psize;
  285.         long pOffset;
  286.         unsigned long PointerToRelocations;
  287.         unsigned long PointerToLinenumbers;
  288.         unsigned short NumberOfRelocations;
  289.         unsigned short NumberOfLinenumbers;
  290.         long flags;
  291. }OBJECT_ENTRY;
  292.  
  293. typedef struct _EXPORT_TABLE_
  294. {
  295.         unsigned long Flags;
  296.         unsigned long Time;
  297.         unsigned short Version[2];
  298.         unsigned long NameRVA;
  299.         unsigned long OriginalBase;
  300.         unsigned long NumFunc;
  301.         unsigned long NumName;
  302.         unsigned long AddressRVA;
  303.         unsigned long NamePRVA;
  304.         unsigned long OrdinalRVA;
  305. }EXPORT_TABLE;
  306.  
  307. struct ftime {
  308.         unsigned ft_tsec:5;  /* ¤¢¥ ᥪ㭤ë */
  309.         unsigned ft_min:6;   /* ¬¨­ãâë */
  310.         unsigned ft_hour:5;  /* ç áë */
  311.         unsigned ft_day:5;   /* ¤¥­ì */
  312.         unsigned ft_month:4; /* ¬¥áïæ */
  313.         unsigned ft_year:7;  /* £®¤-1980 */
  314. };
  315.  
  316.  
  317. typedef struct _STRING_LIST_
  318. {
  319.         void *next;     //á«¥¤ãîé ï áâàãªâãà 
  320.         unsigned int len; //¤«¨­  áâப¨
  321.         unsigned int ofs;       // ¤à¥á ¢ ¢ë室­®¬ ä ©«¥
  322.         unsigned char type;     //⨯ â¥à¬¨­ â®à 
  323.         unsigned char plase;    //£¤¥ ᥩç á áâப  - post or data
  324. }STRING_LIST;
  325.  
  326. struct FILEINFO
  327. {
  328.         char *filename;
  329.         int numdline;
  330.         idrec *stlist;
  331.         union{
  332.                 struct ftime time;
  333.                 unsigned short lineidx[2];
  334.         };
  335. };
  336.  
  337. struct EWAR{
  338.         FILE *file;
  339.         char *name;
  340. };
  341.  
  342. typedef struct _ICOMP_
  343. {
  344.         unsigned int type;
  345.         unsigned int loc;
  346.         unsigned int use_cxz;
  347. }ICOMP;
  348.  
  349. typedef struct _RETLIST_
  350. {
  351.         unsigned int line;
  352.         unsigned int loc;
  353.         unsigned int type;
  354. //      int use;
  355. }RETLIST;
  356.  
  357. enum{
  358.         singlcase,startmulti,endmulti};
  359.  
  360. typedef struct _ISW_
  361. {
  362.         unsigned char type;
  363.         unsigned int postcase;
  364.         unsigned long value;
  365. }ISW;
  366.  
  367. struct postinfo
  368. {
  369.         unsigned int loc;
  370.         unsigned int num;
  371.         unsigned short type;
  372.         unsigned short line;
  373.         unsigned short file;
  374.  
  375. };
  376.  
  377. typedef struct _EXE_DOS_HEADER_
  378. {
  379.         unsigned short sign;
  380.         unsigned short numlastbyte;
  381.         unsigned short numpage;
  382.         unsigned short numreloc;
  383.         unsigned short headsize;
  384.         unsigned short minmem;
  385.         unsigned short maxmem;
  386.         unsigned short initSS;
  387.         unsigned short initSP;
  388.         unsigned short checksum;
  389.         unsigned short initIP;
  390.         unsigned short initCS;
  391.         unsigned short ofsreloc;
  392.         unsigned short overlay;
  393.         unsigned long  fullsize;
  394. }EXE_DOS_HEADER;
  395.  
  396. typedef struct _FSWI_
  397. {
  398.         ISW *info;
  399.         int sizetab;    //ç¨á«® í«¥¬¥­â®¢
  400.         int type;       //à §à來®áâì
  401.         int numcase;    //ç¨á«® ¨á¯®«ì§ã¥¬ëå í«¥¬¥­â®¢
  402.         int defal;      //§­ ç¥­¨¥ ¯® 㬮«ç ­¨î.
  403.         int ptb;        // ¤à¥á 㪠§ â¥«ï ­  íâã â ¡«¨æã ¢ ¡«®ª¥ ª®¤ 
  404.         int ptv;        // ¤à¥á â ¢«¨æë ¢¥«¨ç¨­
  405.         int mode;       //⨯ switch
  406.         int razr;       //à §à來®áâì ¢¥«¨ç¨­
  407. }FSWI;
  408.  
  409. struct paraminfo
  410. {
  411.         unsigned int ofspar;
  412.         unsigned char type[8];
  413. };
  414.  
  415. struct MEOSheader
  416. {
  417.         unsigned char sign[25];
  418.         unsigned long vers;
  419.         unsigned long start;
  420.         unsigned long size;
  421.         unsigned long alloc_mem;
  422.         unsigned long esp;
  423.         unsigned long I_Param;
  424.         unsigned long I_Icon;
  425. };
  426.  
  427. #ifdef OPTVARCONST
  428.  
  429. struct LVIC{
  430.         idrec *rec;
  431. //      int blocks;
  432.         int typevar;
  433.         int contype;    //⨯ ᮤ¥à¦¨¬®£®
  434.         union{
  435.                 long number;
  436.                 long long lnumber;
  437.                 double dnumber;
  438.                 float fnumber;
  439.         };
  440. };
  441.  
  442. struct BLVIC
  443. {
  444.         int sizevic;
  445.         LVIC *listvic;
  446. };
  447.  
  448. #endif
  449.  
  450. #define SIZEIDREG 256
  451. #define NOINREG 8
  452. #define SKIPREG 9
  453.  
  454. struct REGEQVAR
  455. {
  456.         REGEQVAR *next;
  457.         char name[IDLENGTH];
  458.         unsigned char razr;
  459. };
  460.  
  461. struct REGISTERSTAT
  462. {
  463.         union{
  464.                 REGEQVAR *next;
  465. #ifdef OPTVARCONST
  466.                 BLVIC *bakvic;
  467. #endif
  468.         };
  469.         union{
  470.                 char id[SIZEIDREG];
  471.                 void *stringpar;
  472.                 unsigned long number;
  473.         };
  474.         unsigned char type;
  475.         unsigned char razr;
  476. };
  477.  
  478. struct SAVEREG
  479. {
  480.         unsigned int size;      //à §¬¥à ¯ ¬ï⨠¤«ï ॣ¨áâ஢
  481.         unsigned char all;      //¢á¥ ॣ¨áâàë
  482.         unsigned char reg[8];   //ª àâ  à¥£¨áâ஢
  483. };
  484.  
  485. struct SAVEPAR
  486. {
  487.  unsigned char ooptimizespeed;
  488.  unsigned char owarning;
  489.  unsigned char odbg;
  490.  unsigned char odosstring;
  491.  unsigned char ouseinline;
  492.  unsigned char oam32;                 // ०¨¬ 32 ¡¨â­®©  ¤à¥á æ¨¨
  493.  unsigned char oalignword;
  494.  unsigned char oAlignCycle;       //¢ëà ¢­¨¢ âì ­ ç «  横«®¢
  495.  unsigned char oidasm;  // áᥬ¡«¥à­ë¥ ¨­áâàãªæ¨¨ áç¨â âì ¨¤¥­â¨ä¨ª â®à ¬¨
  496.  int ooptnumber;
  497.  int odivexpand;
  498.  unsigned char ooptstr; //®¯â¨¬¨§ æ¨ï áâப®¢ëå ª®­áâ ­â
  499.  unsigned char ochip;
  500.  int           oaligncycle;
  501.  unsigned char ouselea;
  502.  unsigned char oregoverstack;
  503. };
  504.  
  505. struct COM_MOD
  506. {
  507.         COM_MOD *next;
  508.         unsigned char *input;    /* dynamic input buffer */
  509.         unsigned int endinptr;           /* end index of input array */
  510.         unsigned int inptr;              /* index in input buffer */
  511.         unsigned int inptr2;             /* index in input buffer */
  512.         unsigned int linenumber;
  513.         unsigned int currentfileinfo;
  514.         int numparamdef;        //ç¨á«® ¯ à ¬¥â஢ ¢ ⥪ã饬 define
  515.         char *declareparamdef;  //ᯨ᮪ ®¡ê¥­ëå ¯ à ¬¥â஢ define
  516.         char *paramdef; //ᯨ᮪ ­®¢ëå ¯ à ¬¥â஢
  517.         int freze;      //ä« £ § ¯à¥é¥­¨ï 㤠«¥­¨ï áâàãªâãàë
  518. };
  519.  
  520. struct LISTRELOC {
  521.         unsigned int val;
  522. };
  523.  
  524. struct LISTFLOAT
  525. {
  526.         union{
  527.                 float fnum;
  528.                 double dnum;
  529.                 unsigned long num[2];
  530.         };
  531.         int type;
  532.         unsigned int ofs;
  533. };
  534.  
  535. struct LILV
  536. {
  537.         unsigned int ofs;
  538.         int size;
  539.         localrec *rec;
  540. };
  541.  
  542. struct WARNACT
  543. {
  544.         void (*fwarn)(char *str,unsigned int line,unsigned int file);
  545.         unsigned char usewarn;
  546. };
  547.