home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 292_01 / aslink.h < prev    next >
C/C++ Source or Header  |  1990-07-17  |  8KB  |  362 lines

  1. /* aslink.h */
  2.  
  3. /*
  4.  * (C) Copyright 1989,1990
  5.  * All Rights Reserved
  6.  *
  7.  * Alan R. Baldwin
  8.  * 721 Berkeley St.
  9.  * Kent, Ohio  44240
  10.  */
  11.  
  12. /*)BUILD
  13.     $(PROGRAM) =    ASLINK
  14.     $(INCLUDE) =    ASLINK.H
  15.     $(FILES) = {
  16.         LKMAIN.C
  17.         LKLEX.C
  18.         LKAREA.C
  19.         LKHEAD.C
  20.         LKSYM.C
  21.         LKEVAL.C
  22.         LKDATA.C
  23.         LKLIST.C
  24.         LKRLOC.C
  25.         LKS19.C
  26.         LKIHX.C
  27.     }
  28.     $(STACK) = 2000
  29. */
  30.  
  31. #define    VERSION    "V01.50"
  32.  
  33. /* DECUS C void definition */
  34. /* File/extension seperator */
  35.  
  36. #ifdef    decus
  37. #define    VOID    char
  38. #define    FSEPX    '.'
  39. #endif
  40.  
  41. /* PDOS C void definition */
  42. /* File/extension seperator */
  43.  
  44. #ifdef    PDOS
  45. #define    VOID    char
  46. #define    FSEPX    ':'
  47. #endif
  48.  
  49. /* Default void definition */
  50. /* File/extension seperator */
  51.  
  52. #ifndef    VOID
  53. #define    VOID    void
  54. #define    FSEPX    '.'
  55. #endif
  56.  
  57. /*
  58.  * Case Sensitivity Flag
  59.  */
  60. #define    CASE_SENSITIVE    1
  61.  
  62. /*
  63.  * This file defines the format of the
  64.  * relocatable binary file.
  65.  */
  66.  
  67. #define    NCPS    8        /* characters per symbol */
  68. #define    NDATA    16        /* actual data */
  69. #define    NINPUT    128        /* Input buffer size */
  70. #define    NHASH    64        /* Buckets in hash table */
  71. #define    HMASK    077        /* Hash mask */
  72. #define    NLPP    60        /* Lines per page */
  73. #define    NTXT    16        /* T values */
  74. #define    FILSPC    16        /* File spec length */
  75.  
  76. /*
  77.  * Relocation types.
  78.  */
  79. #define    R_WORD    0000        /* 16 bit */
  80. #define    R_BYTE    0001        /*  8 bit */
  81.  
  82. #define    R_AREA    0000        /* Base type */
  83. #define    R_SYM    0002
  84.  
  85. #define    R_NORM    0000        /* PC adjust */
  86. #define    R_PCR    0004
  87.  
  88. #define    R_BYT1    0000        /* Byte count for R_BYTE = 1 */
  89. #define    R_BYT2    0010        /* Byte count for R_BYTE = 2 */
  90.  
  91. #define    R_SGND    0000        /* Signed value */
  92. #define    R_USGN    0020        /* Unsigned value */
  93.  
  94. #define    R_NOPAG    0000        /* Page Mode */
  95. #define    R_PAG0    0040        /* Page '0' */
  96. #define    R_PAG    0100        /* Page 'nnn' */
  97.  
  98. /*
  99.  * Global symbol types.
  100.  */
  101. #define    S_REF    1        /* referenced */
  102. #define    S_DEF    2        /* defined */
  103.  
  104. /*
  105.  * Area types
  106.  */
  107. #define    A_CON    000        /* concatenate */
  108. #define    A_OVR    004        /* overlay */
  109. #define    A_REL    000        /* relocatable */
  110. #define    A_ABS    010        /* absolute */
  111. #define    A_NOPAG    000        /* non-paged */
  112. #define    A_PAG    020        /* paged */
  113.  
  114. /*
  115.  * File types
  116.  */
  117. #define    F_STD    1        /* stdin */
  118. #define    F_LNK    2        /* File.lnk */
  119. #define    F_REL    3        /* File.rel */
  120.  
  121. typedef unsigned int addr_t;
  122.  
  123. struct    head
  124. {
  125.     struct    head   *h_hp;    /* Header link */
  126.     struct    lfile  *h_lfile;/* Associated file */
  127.     int    h_narea;    /* # of areas */
  128.     struct    areax **a_list;    /* Area list */
  129.     int    h_nglob;    /* # of global symbols */
  130.     struct    sym   **s_list;    /* Globle symbol list */
  131.     char    m_id[NCPS];    /* Module name */
  132. };
  133.  
  134. struct    area
  135. {
  136.     struct    area    *a_ap;    /* Area link */
  137.     struct    areax    *a_axp;    /* Area extension link */
  138.     addr_t    a_addr;        /* Beginning address of area */
  139.     addr_t    a_size;        /* Total size of the area */
  140.     char    a_type;        /* Area subtype */
  141.     char    a_flag;        /* Flag byte */
  142.     char    a_id[NCPS];    /* Name */
  143. };
  144.  
  145. struct    areax
  146. {
  147.     struct    areax    *a_axp;    /* Area extension link */
  148.     struct    area    *a_bap;    /* Base area link */
  149.     struct    head    *a_bhp;    /* Base header link */
  150.     addr_t    a_addr;        /* Beginning address of section */
  151.     addr_t    a_size;        /* Size of the area in section */
  152. };
  153.  
  154. struct    sym
  155. {
  156.     struct    sym    *s_sp;    /* Symbol link */
  157.     struct    areax    *s_axp;    /* Symbol area link */
  158.     char    s_type;        /* Symbol subtype */
  159.     char    s_flag;        /* Flag byte */
  160.     addr_t    s_addr;        /* Address */
  161.     char    s_id[NCPS];    /* Name */
  162. };
  163.  
  164. struct    lfile
  165. {
  166.     struct    lfile    *f_flp;    /* lfile link */
  167.     int    f_type;        /* File type */
  168.     char    *f_idp;        /* Pointer to file spec */
  169. };
  170.  
  171. struct    base
  172. {
  173.     struct    base  *b_base;    /* Base link */
  174.     char          *b_strp;    /* String pointer */
  175. };
  176.  
  177. struct    globl
  178. {
  179.     struct    globl *g_globl;    /* Global link */
  180.     char          *g_strp;    /* String pointer */
  181. };
  182.  
  183. struct    sdp
  184. {
  185.     struct    area  *s_area;    /* Paged Area link */
  186.     struct    areax *s_areax;    /* Paged Area Extension Link */
  187.     addr_t    s_addr;        /* Page address offset */
  188. };
  189.  
  190. struct    rerr
  191. {
  192.     int    aindex;        /* Linking area */
  193.     int    mode;        /* Relocation mode */
  194.     addr_t    rtbase;        /* Base address in section */
  195.     int    rindex;        /* Area/Symbol reloaction index */
  196.     addr_t    rval;        /* Area/Symbol offset value */
  197. };
  198.  
  199. /* Variable definitions */
  200.  
  201. extern        char    *_abs_;
  202. extern        char    *dext;
  203. extern        char    *ip;
  204. extern        char    ib[NINPUT];
  205. extern        char    ctype[];
  206.  
  207. #if    CASE_SENSITIVE
  208. #else
  209. extern        char    ccase[];
  210. #endif
  211.  
  212. #define    SPACE    0000
  213. #define ETC    0000
  214. #define    LETTER    0001
  215. #define    DIGIT    0002
  216. #define    BINOP    0004
  217. #define    RAD2    0010
  218. #define    RAD8    0020
  219. #define    RAD10    0040
  220. #define    RAD16    0100
  221. #define    ILL    0200
  222.  
  223. #define    DGT2    DIGIT|RAD16|RAD10|RAD8|RAD2
  224. #define    DGT8    DIGIT|RAD16|RAD10|RAD8
  225. #define    DGT10    DIGIT|RAD16|RAD10
  226. #define    LTR16    LETTER|RAD16
  227.  
  228. extern    struct    lfile    *startp;
  229. extern    struct    lfile    *linkp;
  230. extern    struct    lfile    *lfp;
  231. extern    struct    lfile    *filep;
  232. extern    struct    lfile    *cfp;
  233. extern    struct    head    *headp;
  234. extern    struct    head    *hp;
  235. extern    struct    area    *areap;
  236. extern    struct    area    *ap;
  237. extern    struct    areax    *axp;
  238. extern    struct    sym    *symhash[NHASH];
  239. extern    struct    base    *basep;
  240. extern    struct    base    *bsp;
  241. extern    struct    globl    *globlp;
  242. extern    struct    globl    *gsp;
  243. extern    struct    sdp    sdp;
  244. extern    struct    rerr    rerr;
  245.  
  246. extern        FILE    *sfp;
  247. extern        FILE    *ofp;
  248. extern        FILE    *mfp;
  249. extern        int    inpfil;
  250. extern        int    cfile;
  251. extern        int    oflag;
  252. extern        int    sflag;
  253. extern        int    mflag;
  254. extern        int    xflag;
  255. extern        int    pflag;
  256. extern        int    radix;
  257. extern        int    hilo;
  258. extern        int    pass;
  259. extern        int    line;
  260. extern        int    page;
  261. extern        int    lop;
  262. extern        int    rtcnt;
  263. extern        addr_t    rtval[];
  264. extern        int    rtflg[];
  265.  
  266. /* C Library function definitions */
  267. /* for reference only
  268. extern    VOID        exit();
  269. extern    int        fclose();
  270. extern    char *        fgets();
  271. extern    FILE *        fopen();
  272. extern    int        fprintf();
  273. extern    VOID        free();
  274. extern    VOID *        malloc();
  275. extern    char        putc();
  276. extern    char *        strcpy();
  277. extern    int        strlen();
  278. extern    char *        strncpy();
  279. */
  280.  
  281. /* Program function definitions */
  282.  
  283. /* lkmain.c */
  284. extern    FILE *        afile();
  285. extern    VOID        bassav();
  286. extern    VOID        gblsav();
  287. extern    VOID        link();
  288. extern    VOID        main();
  289. extern    VOID        map();
  290. extern    int        parse();
  291. extern    VOID        setbas();
  292. extern    VOID        setgbl();
  293. extern    VOID        usage();
  294.  
  295. /* lklex.c */
  296. extern    char        endline();
  297. extern    char        get();
  298. extern    VOID        getfid();
  299. extern    VOID        getid();
  300. extern    int        getline();
  301. extern    char        getmap();
  302. extern    char        getnb();
  303. extern    int        more();
  304. extern    VOID        skip();
  305. extern    VOID        unget();
  306.  
  307. /* lkarea.c */
  308. extern    VOID        lkparea();
  309. extern    VOID        lnkarea();
  310. extern    VOID        lnksect();
  311. extern    VOID        newarea();
  312.  
  313. /* lkhead.c */
  314. extern    VOID        module();
  315. extern    VOID        newhead();
  316.  
  317. /* lksym.c */
  318. extern    int        hash();
  319. extern    struct    sym *    lkpsym();
  320. extern    VOID *        new();
  321. extern    struct    sym *    newsym();
  322. extern    VOID        symdef();
  323. extern    int        symeq();
  324. extern    VOID        syminit();
  325. extern    VOID        symmod();
  326. extern    addr_t        symval();
  327.  
  328. /* lkeval.c */
  329. extern    int        digit();
  330. extern    addr_t        eval();
  331. extern    addr_t        expr();
  332. extern    int        oprio();
  333. extern    addr_t        term();
  334.  
  335. /* lklist.c */
  336. extern    VOID        lstarea();
  337. extern    VOID        newpag();
  338. extern    VOID        slew();
  339.  
  340. /* lkrloc.c */
  341. extern    addr_t        add_b1();
  342. extern    addr_t        add_b2();
  343. extern    addr_t        add_w();
  344. extern    addr_t        evword();
  345. extern    VOID        rele();
  346. extern    VOID        reloc();
  347. extern    VOID        relt();
  348. extern    VOID        relr();
  349. extern    VOID        relp();
  350. extern    VOID        relerr();
  351. extern    char *        errmsg[];
  352. extern    VOID        errdmp();
  353. extern    VOID        relerp();
  354. extern    VOID        erpdmp();
  355. extern    VOID        prntval();
  356.  
  357. /* lks19.c */
  358. extern    VOID        s19();
  359.  
  360. /* lkihx.c */
  361. extern    VOID        ihx();
  362.