|
|
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.