|
|
1.1 root 1: /* $Header: sym42init.c,v 1.1 86/03/24 16:19:22 rcs Exp $ */
2: /* (C) Copyright 1985 Third Eye Software, Inc. - All Rights Reserved */
3:
4: #include "tes42.h"
5:
6: #include <sys/file.h>
7:
8: #define UpRatio(x, y, z) (((x + y - 1) * y) / z)
9:
10:
11: export int vfdSym; /* file descriptor to read from the file */
12: export int vcsym; /* globally accessable length of symbol table */
13: export char *vsbStr; /* string table buffer for our symbol table */
14: int vcbStr; /* size of string table */
15: struct exec vhead; /* header info of the object file */
16:
17: export int visymMax; /* max total symbols (regular+global) */
18: export int viauxMax; /* max aux entries */
19: export int vifdMax; /* max file entries */
20: export int vipdMax; /* max proc entries */
21: export int vilineMax; /* max line entries */
22:
23:
24: /* S Y M 4 2 I N I T */
25:
26: export void Sym42Init (sbObjName)
27: char *sbObjName;
28: {
29: int cb, i;
30:
31: if ((vfdSym= open (sbObjName, O_RDONLY, 0)) < 0) {
32: perror (sbObjName);
33: exit (1);
34: } /* if */
35:
36: if (read (vfdSym, &vhead, sizeof (vhead)) != sizeof (vhead)) {
37: perror (sbObjName);
38: exit (1);
39: } /* if */
40:
41: if (lseek (vfdSym, N_STROFF (vhead), 0) < 0) {
42: perror (sbObjName);
43: exit (1);
44: } /* if */
45:
46: if (read (vfdSym, &vcbStr, sizeof (vcbStr)) != sizeof (vcbStr)) {
47: perror (sbObjName);
48: exit (1);
49: } /* if */
50:
51: if ((vsbStr= (char *) malloc (vcbStr))== 0) {
52: printf ("%s: no memory for string table(%d)\n", sbObjName, vcbStr);
53: exit (1);
54: } /* if */
55:
56: if (read (vfdSym, vsbStr+4, vcbStr-4) != vcbStr-4) {
57: perror (sbObjName);
58: exit (1);
59: } /* if */
60:
61: if (lseek (vfdSym, N_SYMOFF (vhead), 0) < 0) {
62: perror (sbObjName);
63: exit (1);
64: } /* if */
65:
66: vcsym= vhead.a_syms / cbNLISTR;
67:
68: /* make the various tables proportionate to the incoming symtab */
69: viauxMax = Max(10000, (vcsym / 2) * vadjust);
70: vrgAux = (pAUXU) malloc(viauxMax * cbAUXU); /* aux table */
71:
72: vipdMax = Max(2000, (vcsym / 6) * vadjust);
73: vrgPd = (pPDR) malloc(vipdMax * cbPDR); /* proc table */
74:
75: vifdMax = Max(2000, (vcsym / 15) * vadjust);
76: vrgFd = (pFDR) malloc(vifdMax * cbFDR); /* file table */
77:
78: vilineMax = Max(10000, (vcsym / 2) * vadjust);
79: vrgLine = (pLINER) malloc(vilineMax * cbLINER); /* line no table */
80:
81: visymMax = Max(10000, vcsym * vadjust);
82: vrgSym = (pSYMR) malloc(visymMax * cbSYMR); /* symbol table */
83:
84: visymGlMax = Max(10000, (vcsym / 10) * vadjust);
85: vrgSymGlobal = (pSYMR) malloc(visymGlMax * cbSYMR); /* globals */
86:
87: vissMax = vcbStr * vadjust; /* should be enough */
88: vsbNewStr = vsbMax = (char *) malloc(vissMax);
89: *vsbMax++ = 0;
90: vissMac = 1;
91:
92: cb = 4000 * sizeof(int);
93: vrgTesF42 = (int *) malloc(cb);
94: ZeroBlock(vrgTesF42, cb);
95: for (i = 0; i < tesF42Low; i++)
96: vrgTesF42[i] = i;
97: } /* sym42Init */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.