|
|
1.1 ! root 1: /* ! 2: * static char ID_mid[] = "@(#) mid.c: 1.3 6/29/82"; ! 3: */ ! 4: ! 5: #include <stdio.h> ! 6: #include "sdp.h" ! 7: #include "sdp1.h" ! 8: #include <signal.h> ! 9: #include "syms.h" ! 10: #include "tagitem.h" ! 11: ! 12: ! 13: /* before starting pass 2 of utility, a table for index of ! 14: tag must be built. The tagitem and storage area for tags ! 15: saved in pass 1 are freed ! 16: */ ! 17: ! 18: #define YES 1 ! 19: #define NO 0 ! 20: struct table{ ! 21: long oldlcn; ! 22: long newlcn; ! 23: long real_loc; ! 24: } *tbl_head; ! 25: ! 26: ! 27: extern long szecnt; ! 28: extern char *malloc(); ! 29: extern long tag_sum; ! 30: extern int vflag; ! 31: extern char tagname[]; ! 32: extern int framsz; ! 33: extern int framect; ! 34: ! 35: extern struct SPACE *TAGSPACE; ! 36: extern struct ENVIRON *ENV; ! 37: extern struct SPACE *SYMSPACE; ! 38: ! 39: ! 40: build() ! 41: { ! 42: ! 43: ! 44: extern ITEMID ti_head; ! 45: ! 46: TAGITEM *tag_ptr, *tag_ptr2; ! 47: ITEMID tagid; ! 48: struct table *tbl_ptr; ! 49: ! 50: long i; ! 51: char *p; ! 52: ! 53: ! 54: if (symfini()!=YES) ! 55: { ! 56: fprintf(stderr,"could not close SDP\n"); ! 57: return (NO); ! 58: } ! 59: if (sdp_disconnect(TAGSPACE) == SDPERROR) ! 60: { ! 61: fprintf(stderr,"Failed to close SDP for tag"); ! 62: return(NO); ! 63: } ! 64: if (sdp_vacate(ENV) == SDPERROR) ! 65: { ! 66: return (NO); ! 67: } ! 68: tbl_head = (struct table *) calloc((unsigned)tag_sum, sizeof(struct table)); ! 69: if ( tbl_head == NULL ) { ! 70: fprintf(stderr,"No space for table\n"); ! 71: return(NO); ! 72: } ! 73: tbl_ptr = tbl_head; ! 74: ! 75: tagid = ti_head; ! 76: /* ! 77: printf("framect=%d framsz=%d tagsum=%ld tab=%d\n",framect,framsz, ! 78: tag_sum,sizeof(struct table)); ! 79: */ ! 80: framect=((long) framect * framsz - tag_sum * sizeof(struct table)) / framsz; ! 81: ! 82: if (framect < 2) ! 83: { ! 84: fprintf(stderr,"nospace for secondary house\n"); ! 85: return (NO); ! 86: } ! 87: ENV = sdp_house(framect,framsz,NULL); ! 88: if (ENV == NULL) ! 89: { ! 90: fprintf(stderr,"secondary house failed\n"); ! 91: return (NO); ! 92: } ! 93: if ((int)(TAGSPACE=sdp_connect(tagname,ENV,NULL,RNLY)) == SDPERROR) ! 94: { ! 95: fprintf(stderr,"Failed to reinitialized SDP symbol space\n"); ! 96: return (NO); ! 97: } ! 98: tag_ptr = (TAGITEM *) sdp_use(TAGSPACE,tagid,RNLY); ! 99: ! 100: /* ! 101: * build table ! 102: */ ! 103: ! 104: for ( i=0L; i < tag_sum; i++) { ! 105: tbl_ptr->oldlcn = tag_ptr->oldloc; ! 106: tbl_ptr->newlcn = tag_ptr->newloc; ! 107: if ( tag_ptr->p_realtag == 0L) ! 108: tbl_ptr->real_loc = tbl_ptr->newlcn; ! 109: else { ! 110: tag_ptr2 = (TAGITEM *)sdp_use(TAGSPACE,tag_ptr->p_realtag,RNLY); ! 111: tbl_ptr->real_loc = tag_ptr2->newloc; ! 112: sdp_unuse(TAGSPACE,tag_ptr->p_realtag,RNLY); ! 113: } ! 114: ! 115: ++tbl_ptr; ! 116: sdp_unuse(TAGSPACE,tagid,RNLY); ! 117: tagid = tag_ptr->next_ti; ! 118: if ( (i+1) < tag_sum ) ! 119: tag_ptr = (TAGITEM *) sdp_use(TAGSPACE,tagid,RNLY); ! 120: } ! 121: ! 122: return( YES ); ! 123: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.