home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / icon / dos / src / icont / link.h < prev    next >
C/C++ Source or Header  |  1992-02-10  |  6KB  |  159 lines

  1. /*
  2.  * External declarations for the linker.
  3.  */
  4.  
  5. #include "../h/rt.h"
  6.  
  7. #ifdef ATT3B
  8. #include <sys/types.h>
  9. #include <sys/stat.h>
  10. #endif                    /* ATT3B */
  11.  
  12. /*
  13.  * Miscellaneous external declarations.
  14.  */
  15.  
  16. extern FILE *infile;        /* current input file */
  17. extern FILE *outfile;        /* linker output file */
  18. extern FILE *dbgfile;        /* debug file */
  19. extern char inname[];        /* input file name */
  20. extern int lineno;        /* source program line number (from ucode) */
  21.  
  22. #ifdef EventMon
  23. extern int colmno;        /* source program column number */
  24. #endif                    /* EventMon */
  25.  
  26. extern int lstatics;        /* total number of statics */
  27. extern int argoff;        /* stack offset counter for arguments */
  28. extern int dynoff;        /* stack offset counter for locals */
  29. extern int static1;        /* first static in procedure */
  30. extern int nlocal;        /* number of locals in local table */
  31. extern int nconst;        /* number of constants in constant table */
  32. extern int nrecords;        /* number of records in program */
  33. extern int trace;        /* initial setting of &trace */
  34. extern char ixhdr[];        /* header line for direct execution */
  35. extern char *iconx;        /* location of iconx */
  36. extern int hdrloc;        /* location to place hdr block at */
  37. extern struct lfile *llfiles;    /* list of files to link */
  38.  
  39. /*
  40.  * Structures for symbol table entries.
  41.  */
  42.  
  43. struct lentry {            /* local table entry */
  44.    char *l_name;        /*   name of variable */
  45.    int l_flag;            /*   variable flags */
  46.    union {            /*   value field */
  47.       int staticid;        /*     unique id for static variables */
  48.       word offset;        /*       stack offset for args and locals */
  49.       struct gentry *global;    /*     global table entry */
  50.       } l_val;
  51.    };
  52.  
  53. struct gentry {            /* global table entry */
  54.    struct gentry *g_blink;    /*    link for bucket chain */
  55.    char *g_name;        /*   name of variable */
  56.    int g_flag;            /*   variable flags */
  57.    int g_nargs;            /*   number of args or fields */
  58.    int g_procid;        /*   procedure or record id */
  59.    word g_pc;            /*   position in icode of object */
  60.    };
  61.  
  62. struct centry {            /* constant table entry */
  63.    int c_flag;            /*   type of literal flag */
  64.    union {            /*   value field */
  65.       long ival;        /*     integer */
  66.       double rval;        /*       real */
  67.       char *sval;        /*      string */
  68.       } c_val;
  69.    int c_length;        /*   length of literal string */
  70.    word c_pc;            /*   position in icode of object */
  71.    };
  72.  
  73. struct ientry {            /* identifier table entry */
  74.    struct ientry *i_blink;    /*    link for bucket chain */
  75.    char *i_name;        /*   pointer to string */
  76.    int i_length;        /*   length of string */
  77.    };
  78.  
  79. struct fentry {            /* field table header entry */
  80.    struct fentry *f_blink;    /*    link for bucket chain */
  81.    char *f_name;        /*   name of field */
  82.    int f_fid;            /*   field id */
  83.    struct rentry *f_rlist;    /*    head of list of records */
  84.    };
  85.  
  86. struct rentry {            /* field table record list entry */
  87.    struct rentry *r_link;    /*   link for list of records */
  88.    int r_recid;            /*   record id */
  89.    int r_fnum;            /*   offset of field within record */
  90.    };
  91.  
  92. #include "lfile.h"
  93.  
  94. /*
  95.  * Flag values in symbol tables.
  96.  */
  97.  
  98. #define F_Global        01    /* variable declared global externally */
  99. #define F_Proc            05    /* procedure (includes GLOBAL) */
  100. #define F_Record       011    /* record (includes GLOBAL) */
  101. #define F_Dynamic       020    /* variable declared local dynamic */
  102. #define F_Static       040    /* variable declared local static */
  103. #define F_Builtin      0101    /* identifier refers to built-in procedure */
  104. #define F_ImpError      0400    /* procedure has default error */
  105. #define F_Argument     01000    /* variable is a formal parameter */
  106. #define F_IntLit     02000    /* literal is an integer */
  107. #define F_RealLit     04000    /* literal is a real */
  108. #define F_StrLit    010000    /* literal is a string */
  109. #define F_CsetLit    020000    /* literal is a cset */
  110.  
  111. /*
  112.  * Symbol table region pointers.
  113.  */
  114.  
  115. extern struct gentry **lghash;    /* hash area for global table */
  116. extern struct ientry **lihash;    /* hash area for identifier table */
  117. extern struct fentry **lfhash;    /* hash area for field table */
  118.  
  119. extern struct lentry *lltable;    /* local table */
  120. extern struct gentry *lgtable;    /* global table */
  121. extern struct centry *lctable;    /* constant table */
  122. extern struct ientry *litable;    /* identifier table */
  123. extern struct fentry *lftable;    /* field table headers */
  124. extern struct rentry *lrtable;    /* field table record lists */
  125. extern struct ipc_fname *fnmtbl; /* table associating ipc with file name */
  126. extern struct ipc_line *lntable; /* table associating ipc with line number */
  127. extern char *lsspace;        /* string space */
  128. extern word *labels;        /* label table */
  129. extern char *codeb;        /* generated code space */
  130.  
  131. extern struct gentry *lgfree;    /* free pointer for global table */
  132. extern struct ientry *lifree;    /* free pointer for identifier table */
  133. extern struct fentry *lffree;    /* free pointer for field table headers */
  134. extern struct rentry *lrfree;    /* free pointer for field table record lists */
  135. extern struct ipc_fname *fnmfree; /* free pointer for ipc/file name tbl */
  136. extern struct ipc_line *lnfree;    /* free pointer for ipc/line number tbl */
  137. extern char *lsfree;        /* free pointer for string space */
  138. extern char *codep;        /* free pointer for code space */
  139.  
  140. extern char *lsend;        /* pointer to end of string space */
  141.  
  142.  
  143. /*
  144.  * Hash computation macros.
  145.  */
  146.  
  147. #define ghasher(x)    (((word)x)&gmask)    /* for global table */
  148. #define fhasher(x)    (((word)x)&fmask)    /* for field table */
  149.  
  150. /*
  151.  * Machine-dependent constants.
  152.  */
  153.  
  154. #ifdef FieldNames
  155. #define RkBlkSize(gp) ((9*WordSize)+(gp)->g_nargs * sizeof(struct descrip))
  156. #else                    /* FieldNames */
  157. #define RkBlkSize (9*WordSize)        /* size of record constructor block */
  158. #endif                    /* FieldNames */
  159.