Using object library
This commit is contained in:
		
							parent
							
								
									97cd4953b0
								
							
						
					
					
						commit
						382c88eb17
					
				
					 3 changed files with 88 additions and 234 deletions
				
			
		|  | @ -1,6 +1,3 @@ | |||
| #define DUK	/* Modifications by Duk Bekema. */ | ||||
| 
 | ||||
| /* @(#)anm.c	1.4 */ | ||||
| /* $Header$ */ | ||||
| /*
 | ||||
| **	print symbol tables for | ||||
|  | @ -8,7 +5,6 @@ | |||
| ** | ||||
| **	anm [-gopruns] [name ...] | ||||
| */ | ||||
| #define	ushort	unsigned short | ||||
| 
 | ||||
| #include	"out.h" | ||||
| 
 | ||||
|  | @ -23,13 +19,14 @@ int	globl_flg; | |||
| int	nosort_flg; | ||||
| int	arch_flg; | ||||
| int	prep_flg; | ||||
| int	read_error; | ||||
| struct	outhead	hbuf; | ||||
| struct	outsect	sbuf; | ||||
| FILE	*fi; | ||||
| long	off; | ||||
| char	*malloc(); | ||||
| char	*realloc(); | ||||
| long	s_base[S_MAX];	/* for specially encoded bases */ | ||||
| char	*filename; | ||||
| 
 | ||||
| main(argc, argv) | ||||
| char **argv; | ||||
|  | @ -89,16 +86,21 @@ char **argv; | |||
| 		unsigned	readcount; | ||||
| 		int		i,j; | ||||
| 
 | ||||
| 		fi = fopen(*++argv,"r"); | ||||
| 		if (fi == NULL) { | ||||
| 		read_error = 0; | ||||
| 		if (! rd_open(*++argv)) { | ||||
| 			fprintf(stderr, "anm: cannot open %s\n", *argv); | ||||
| 			continue; | ||||
| 		} | ||||
| 
 | ||||
| 		getofmt((char *)&hbuf, SF_HEAD, fi); | ||||
| 		filename = *argv; | ||||
| 		rd_ohead(&hbuf); | ||||
| 		if (read_error) { | ||||
| 			rd_close(); | ||||
| 			continue; | ||||
| 		} | ||||
| 		if (BADMAGIC(hbuf)) { | ||||
| 			fprintf(stderr, "anm: %s -- bad format\n", *argv); | ||||
| 			fclose(fi); | ||||
| 			rd_close(); | ||||
| 			continue; | ||||
| 		} | ||||
| 		if (narg > 1) | ||||
|  | @ -107,13 +109,13 @@ char **argv; | |||
| 		n = hbuf.oh_nname; | ||||
| 		if (n == 0) { | ||||
| 			fprintf(stderr, "anm: %s -- no name list\n", *argv); | ||||
| 			fclose(fi); | ||||
| 			rd_close(); | ||||
| 			continue; | ||||
| 		} | ||||
| 
 | ||||
| 		if (hbuf.oh_nchar == 0) { | ||||
| 			fprintf(stderr, "anm: %s -- no names\n", *argv); | ||||
| 			fclose(fi); | ||||
| 			rd_close(); | ||||
| 			continue; | ||||
| 		} | ||||
| 		if ((readcount = hbuf.oh_nchar) != hbuf.oh_nchar) { | ||||
|  | @ -121,10 +123,14 @@ char **argv; | |||
| 			exit(2); | ||||
| 		} | ||||
| 
 | ||||
| 		/* store special section bases */ | ||||
| 		/* store special section bases ??? */ | ||||
| 		if (hbuf.oh_flags & HF_8086) { | ||||
| 			rd_sect(&sbuf, hbuf.oh_nsect); | ||||
| 			if (read_error) { | ||||
| 				rd_close(); | ||||
| 				continue; | ||||
| 			} | ||||
| 			for (i=0; i<hbuf.oh_nsect; i++) { | ||||
| 				getofmt((char *)&sbuf, SF_SECT, fi); | ||||
| 				s_base[i+S_MIN] = | ||||
| 					(sbuf.os_base>>12) & 03777760; | ||||
| 			} | ||||
|  | @ -134,17 +140,20 @@ char **argv; | |||
| 			fprintf(stderr, "anm: out of memory on %s\n", *argv); | ||||
| 			exit(2); | ||||
| 		} | ||||
| 		fseek(fi, OFF_CHAR(hbuf), 0); | ||||
| 		if (fread(cbufp, 1, readcount, fi) == 0) { | ||||
| 			fprintf(stderr, "anm: read error on %s\n", *argv); | ||||
| 			exit(2); | ||||
| 		rd_string(cbufp, hbuf.oh_nchar); | ||||
| 		if (read_error) { | ||||
| 			free(cbufp); | ||||
| 			rd_close(); | ||||
| 			continue; | ||||
| 		} | ||||
| 		fi_to_co = cbufp - OFF_CHAR(hbuf); | ||||
| 
 | ||||
| 		fseek(fi, OFF_NAME(hbuf), 0); | ||||
| 		fi_to_co = (long) (cbufp - OFF_CHAR(hbuf)); | ||||
| 		i = 0; | ||||
| 		while (--n >= 0) { | ||||
| 			getofmt((char *)&nbuf, SF_NAME, fi); | ||||
| 			rd_name(&nbuf, 1); | ||||
| 			if (read_error) { | ||||
| 				break; | ||||
| 			} | ||||
| 
 | ||||
| 			if (nbuf.on_foff == 0) | ||||
| 				continue; /* skip entries without names */ | ||||
|  | @ -157,7 +166,7 @@ char **argv; | |||
| 			    ((nbuf.on_type&S_TYP)!=S_UND || (nbuf.on_type&S_ETC)!=0)) | ||||
| 				continue; | ||||
| 
 | ||||
| 			nbuf.on_mptr = nbuf.on_foff + fi_to_co; | ||||
| 			nbuf.on_mptr = (char *) (nbuf.on_foff + fi_to_co); | ||||
| 
 | ||||
| 			/* adjust value for specially encoded bases */ | ||||
| 			if (hbuf.oh_flags & HF_8086) { | ||||
|  | @ -180,7 +189,7 @@ char **argv; | |||
| 			nbufp[i++] = nbuf; | ||||
| 		} | ||||
| 
 | ||||
| 		if (nosort_flg==0) | ||||
| 		if (nbufp && nosort_flg==0) | ||||
| 			qsort(nbufp, i, sizeof(struct outname), compare); | ||||
| 
 | ||||
| 		for (n=0; n<i; n++) { | ||||
|  | @ -231,7 +240,7 @@ char **argv; | |||
| 			free((char *)nbufp); | ||||
| 		if (cbufp) | ||||
| 			free((char *)cbufp); | ||||
| 		fclose(fi); | ||||
| 		rd_close(); | ||||
| 	} | ||||
| 	exit(0); | ||||
| } | ||||
|  | @ -265,46 +274,8 @@ struct outname	*p1, *p2; | |||
| 	return(0); | ||||
| } | ||||
| 
 | ||||
| getofmt(p, s, f) | ||||
| register char	*p; | ||||
| register char	*s; | ||||
| register FILE	*f; | ||||
| rd_fatal() | ||||
| { | ||||
| 	register i; | ||||
| 	register long l; | ||||
| 
 | ||||
| 	for (;;) { | ||||
| 		switch (*s++) { | ||||
| /*		case '0': p++; continue; */ | ||||
| 		case '1': | ||||
| 			*p++ = getc(f); | ||||
| 			continue; | ||||
| 		case '2': | ||||
| 			i = getc(f); | ||||
| 			i |= (getc(f) << 8); | ||||
| #ifndef DUK | ||||
| 			*((short *)p)++ = i; | ||||
| #else DUK | ||||
| 			*((short *)p) = i; | ||||
| 			p += sizeof(short); | ||||
| #endif DUK | ||||
| 			continue; | ||||
| 		case '4': | ||||
| 			l = (long)getc(f); | ||||
| 			l |= ((long)getc(f) << 8); | ||||
| 			l |= ((long)getc(f) << 16); | ||||
| 			l |= ((long)getc(f) << 24); | ||||
| #ifndef DUK | ||||
| 			*((long *)p)++ = l; | ||||
| #else DUK | ||||
| 			*((long *)p) = l; | ||||
| 			p += sizeof(long); | ||||
| #endif DUK | ||||
| 			continue; | ||||
| 		default: | ||||
| 		case '\0': | ||||
| 			break; | ||||
| 		} | ||||
| 		break; | ||||
| 	} | ||||
| 	fprintf(stderr,"read error on %s\n", filename); | ||||
| 	read_error = 1; | ||||
| } | ||||
|  |  | |||
|  | @ -1,8 +1,4 @@ | |||
| #define DUK	/* Modifications by Duk Bekema. */ | ||||
| 
 | ||||
| /* @(#)asize.c	1.2 */ | ||||
| /* $Header$ */ | ||||
| #define	ushort	unsigned short | ||||
| 
 | ||||
| #include	<stdio.h> | ||||
| #include 	"out.h" | ||||
|  | @ -20,7 +16,6 @@ char **argv; | |||
| 	ushort		nrsect; | ||||
| 	long		sum; | ||||
| 	int		gorp; | ||||
| 	FILE		*f; | ||||
| 
 | ||||
| 	if (--argc == 0) { | ||||
| 		argc = 1; | ||||
|  | @ -29,20 +24,20 @@ char **argv; | |||
| 	gorp = argc; | ||||
| 
 | ||||
| 	while(argc--) { | ||||
| 		if ((f = fopen(*++argv, "r"))==NULL) { | ||||
| 		if (! rd_open(*++argv)) { | ||||
| 			fprintf(stderr, "asize: cannot open %s\n", *argv); | ||||
| 			continue; | ||||
| 		} | ||||
| 		getofmt ((char *)&buf, SF_HEAD , f); | ||||
| 		rd_ohead(&buf); | ||||
| 		if(BADMAGIC(buf)) { | ||||
| 			fprintf(stderr, "asize: %s-- bad format\n", *argv); | ||||
| 			fclose(f); | ||||
| 			rd_close(); | ||||
| 			continue; | ||||
| 		} | ||||
| 		nrsect = buf.oh_nsect; | ||||
| 		if (nrsect == 0) { | ||||
| 			fprintf(stderr, "asize: %s-- no sections\n", *argv); | ||||
| 			fclose(f); | ||||
| 			rd_close(); | ||||
| 			continue; | ||||
| 		} | ||||
| 		if (gorp > 1) | ||||
|  | @ -50,57 +45,19 @@ char **argv; | |||
| 
 | ||||
| 		sum = 0; | ||||
| 		while (nrsect-- > 0) { | ||||
| 			getofmt ((char *)&sbuf, SF_SECT , f); | ||||
| 			rd_sect(&sbuf, 1); | ||||
| 			printf("%ld", sbuf.os_size); | ||||
| 			sum += sbuf.os_size; | ||||
| 			if (nrsect > 0) | ||||
| 				putchar('+'); | ||||
| 		} | ||||
| 		printf(" = %ld = 0x%lx\n", sum, sum); | ||||
| 		fclose(f); | ||||
| 		rd_close(); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| getofmt(p, s, f) | ||||
| register char	*p; | ||||
| register char	*s; | ||||
| register FILE	*f; | ||||
| rd_fatal() | ||||
| { | ||||
| 	register i; | ||||
| 	register long l; | ||||
| 
 | ||||
| 	for (;;) { | ||||
| 		switch (*s++) { | ||||
| /*		case '0': p++; continue; */ | ||||
| 		case '1': | ||||
| 			*p++ = getc(f); | ||||
| 			continue; | ||||
| 		case '2': | ||||
| 			i = getc(f); | ||||
| 			i |= (getc(f) << 8); | ||||
| #ifndef DUK | ||||
| 			*((short *)p)++ = i; | ||||
| #else DUK | ||||
| 			*((short *)p) = i; | ||||
| 			p += sizeof(short); | ||||
| #endif DUK | ||||
| 			continue; | ||||
| 		case '4': | ||||
| 			l = (long)getc(f); | ||||
| 			l |= (long)(getc(f) << 8); | ||||
| 			l |= ((long)getc(f) << 16); | ||||
| 			l |= ((long)getc(f) << 24); | ||||
| #ifndef DUK | ||||
| 			*((long *)p)++ = l; | ||||
| #else DUK | ||||
| 			*((long *)p) = l; | ||||
| 			p += sizeof(long); | ||||
| #endif DUK | ||||
| 			continue; | ||||
| 		default: | ||||
| 		case '\0': | ||||
| 			break; | ||||
| 		} | ||||
| 		break; | ||||
| 	} | ||||
| 	fprintf(stderr, "read error\n"); | ||||
| 	exit(2); | ||||
| } | ||||
|  |  | |||
|  | @ -1,8 +1,4 @@ | |||
| #define DUK	/* Modifications by Duk Bekema. */ | ||||
| 
 | ||||
| /* @(#)astrip.c	1.1 */ | ||||
| /* $Header$ */ | ||||
| #define	ushort	unsigned short | ||||
| 
 | ||||
| #include "out.h" | ||||
| #include <signal.h> | ||||
|  | @ -19,6 +15,7 @@ char	*mktemp(); | |||
| FILE	*fopen(); | ||||
| FILE	*tf; | ||||
| struct outhead buf; | ||||
| int	readerror, writeerror; | ||||
| 
 | ||||
| main(argc, argv) | ||||
| char **argv; | ||||
|  | @ -41,16 +38,17 @@ strip(name) | |||
| char *name; | ||||
| { | ||||
| 	long size; | ||||
| 	FILE *f; | ||||
| 
 | ||||
| 	if ((f = fopen(name,"r")) == NULL) { | ||||
| 	if (! rd_open(name)) { | ||||
| 		fprintf(stderr, "astrip: cannot open %s\n", name); | ||||
| 		return(1); | ||||
| 	} | ||||
| 	getofmt ((char *)&buf, SF_HEAD , f); | ||||
| 	if(BADMAGIC(buf)) { | ||||
| 	readerror = 0; | ||||
| 	writeerror = 0; | ||||
| 	rd_ohead(&buf); | ||||
| 	if(readerror || BADMAGIC(buf)) { | ||||
| 		fprintf(stderr, "astrip: %s-- bad format\n", name); | ||||
| 		fclose(f); | ||||
| 		rd_close(); | ||||
| 		return(1); | ||||
| 	} | ||||
| 	size = OFF_RELO(buf) - SZ_HEAD; | ||||
|  | @ -60,62 +58,68 @@ char *name; | |||
| 	buf.oh_nchar = 0; | ||||
| 
 | ||||
| 
 | ||||
| 	if ((tf = fopen(tname,"w")) == NULL) { | ||||
| 	if (! wr_open(tname)) { | ||||
| 		fprintf(stderr, "astrip: cannot create temp file %s\n", tname); | ||||
| 		fclose(f); | ||||
| 		rd_close(); | ||||
| 		return(2); | ||||
| 	} | ||||
| 	fseek(tf, (long)0, 0); | ||||
| 	putofmt((char *)&buf,SF_HEAD,tf,tname); | ||||
| 	if(copy(name, tname, f, tf, size)) { | ||||
| 		fclose(f); | ||||
| 		fclose(tf); | ||||
| 	wr_ohead(&buf); | ||||
| 	if (writeerror) { | ||||
| 		fprintf(stderr, "astrip: write error on temp file %s\n", tname); | ||||
| 		rd_close(); | ||||
| 		wr_close(); | ||||
| 		return(1); | ||||
| 	} | ||||
| 	fclose(f); | ||||
| 	fclose(tf); | ||||
| 	if(copy(name, tname, size)) { | ||||
| 		rd_close(); | ||||
| 		wr_close(); | ||||
| 		return(1); | ||||
| 	} | ||||
| 	rd_close(); | ||||
| 	wr_close(); | ||||
| 	size += SZ_HEAD; | ||||
| 	if ((f = fopen(name,"w")) == NULL) { | ||||
| 	if (! wr_open(name)) { | ||||
| 		fprintf(stderr, "astrip: cannot write %s\n", name); | ||||
| 		return(1); | ||||
| 	} | ||||
| 	if ((tf = fopen(tname,"r")) == NULL) { | ||||
| 	if (! rd_open(tname)) { | ||||
| 		fprintf(stderr, "astrip: cannot read temp file %s\n", tname); | ||||
| 		fclose(f); | ||||
| 		wr_close(); | ||||
| 		return(2); | ||||
| 	} | ||||
| 	fseek(tf, (long)0, 0); | ||||
| 	if(copy(tname, name, tf, f, size)) { | ||||
| 		fclose(f); | ||||
| 		fclose(tf); | ||||
| 	if(copy(tname, name, size)) { | ||||
| 		wr_close(); | ||||
| 		rd_close(); | ||||
| 		return(2); | ||||
| 	} | ||||
| 
 | ||||
| 	fclose(f); | ||||
| 	fclose(tf); | ||||
| 	wr_close(); | ||||
| 	rd_close(); | ||||
| 	return(0); | ||||
| } | ||||
| 
 | ||||
| copy(fnam, tnam, fr, to, size) | ||||
| copy(fnam, tnam, size) | ||||
| char *fnam; | ||||
| char *tnam; | ||||
| long size; | ||||
| FILE *fr,*to; | ||||
| { | ||||
| 	register s, n; | ||||
| 	char lbuf[512]; | ||||
| 	int fr, fw; | ||||
| 
 | ||||
| 	fr = rd_fd(); | ||||
| 	fw = wr_fd(); | ||||
| 	while(size != (long)0) { | ||||
| 		s = 512; | ||||
| 		if(size < 512) | ||||
| 			s = (int) size; | ||||
| 		n = fread(lbuf,1,s,fr); | ||||
| 		if(n != s) { | ||||
| 		rd_bytes(fr, lbuf, (long) s); | ||||
| 		if (readerror) { | ||||
| 			fprintf(stderr, "astrip: unexpected eof on %s\n", fnam); | ||||
| 			return(1); | ||||
| 		} | ||||
| 		n = fwrite(lbuf,1,s,to); | ||||
| 		if(n != s) { | ||||
| 		wr_bytes(fw, lbuf, (long) s); | ||||
| 		if (writeerror) { | ||||
| 			fprintf(stderr, "astrip: write error on %s\n", tnam); | ||||
| 			return(1); | ||||
| 		} | ||||
|  | @ -124,90 +128,12 @@ FILE *fr,*to; | |||
| 	return(0); | ||||
| } | ||||
| 
 | ||||
| getofmt(p, s, f) | ||||
| register char	*p; | ||||
| register char	*s; | ||||
| register FILE	*f; | ||||
| rd_fatal() | ||||
| { | ||||
| 	register i; | ||||
| 	register long l; | ||||
| 
 | ||||
| 	for (;;) { | ||||
| 		switch (*s++) { | ||||
| /*		case '0': p++; continue; */ | ||||
| 		case '1': | ||||
| 			*p++ = getc(f); | ||||
| 			continue; | ||||
| 		case '2': | ||||
| 			i = getc(f); | ||||
| 			i |= (getc(f) << 8); | ||||
| #ifndef DUK | ||||
| 			*((short *)p)++ = i; | ||||
| #else DUK | ||||
| 			*((short *)p) = i; | ||||
| 			p += sizeof(short); | ||||
| #endif DUK | ||||
| 			continue; | ||||
| 		case '4': | ||||
| 			l = (long)getc(f); | ||||
| 			l |= (long)(getc(f) << 8); | ||||
| 			l |= ((long)getc(f) << 16); | ||||
| 			l |= ((long)getc(f) << 24); | ||||
| #ifndef DUK | ||||
| 			*((long *)p)++ = l; | ||||
| #else DUK | ||||
| 			*((long *)p) = l; | ||||
| 			p += sizeof(long); | ||||
| #endif DUK | ||||
| 			continue; | ||||
| 		default: | ||||
| 		case '\0': | ||||
| 			break; | ||||
| 		} | ||||
| 		break; | ||||
| 	} | ||||
| 	readerror = 1; | ||||
| } | ||||
| 
 | ||||
| putofmt(p, s, f, fnam) | ||||
| register char	*p; | ||||
| register char	*s; | ||||
| register FILE	*f; | ||||
| char		*fnam; | ||||
| wr_fatal() | ||||
| { | ||||
| 	register i,j; | ||||
| 	register long l; | ||||
| 
 | ||||
| 	while (j = *s++) { | ||||
| 		switch (j -= '0') { | ||||
| /*		case 0: p++; break; */ | ||||
| 		case 1: | ||||
| 			i = *p++; putc(i,f); | ||||
| 			break; | ||||
| 		case 2: | ||||
| #ifndef DUK | ||||
| 			i = *((short *)p)++; | ||||
| #else DUK | ||||
| 			i = *((short *)p); | ||||
| 			p += sizeof(short); | ||||
| #endif DUK | ||||
| 			putc(i,f); | ||||
| 			i>>=8; putc(i,f); | ||||
| 			break; | ||||
| 		case 4: | ||||
| #ifndef DUK | ||||
| 			l = *((long *)p)++; | ||||
| #else DUK | ||||
| 			l = *((long *)p); | ||||
| 			p += sizeof(long); | ||||
| #endif DUK | ||||
| 			putc(l,f); | ||||
| 			l >>=8; putc(l,f); | ||||
| 			l >>=8; putc(l,f); | ||||
| 			l >>=8; putc(l,f); | ||||
| 			break; | ||||
| 		default: | ||||
| 			break; | ||||
| 		} | ||||
| 		if (ferror(f)) fprintf(stderr, "astrip: write error on %s\n", fnam); | ||||
| 	} | ||||
| 	writeerror = 1; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue