156 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*	esize:		prints info from e.out header
 | 
						|
*/
 | 
						|
 | 
						|
#include	<stdio.h>
 | 
						|
 | 
						|
#ifndef	MAGIC
 | 
						|
#define	MAGIC		07255
 | 
						|
#endif	MAGIC
 | 
						|
 | 
						|
FILE *load_fp;
 | 
						|
int eof;
 | 
						|
 | 
						|
/*	Much of the code has been borrowed from the EM interpreter
 | 
						|
*/
 | 
						|
 | 
						|
typedef	unsigned long ptr;	/* pointer to EM adress */
 | 
						|
 | 
						|
long magic;
 | 
						|
long flags;
 | 
						|
long uref;
 | 
						|
long version;
 | 
						|
long wsize;
 | 
						|
long psize;
 | 
						|
long int7;
 | 
						|
long int8;
 | 
						|
long ntext;
 | 
						|
long ndata;
 | 
						|
long nproc;
 | 
						|
long entrypoint;
 | 
						|
long nline;
 | 
						|
long szdata;
 | 
						|
long ptr7;
 | 
						|
long ptr8;
 | 
						|
 | 
						|
main(argc, argv)
 | 
						|
	int argc;
 | 
						|
	char *argv[];
 | 
						|
{
 | 
						|
	printf("TPFCRE uref vers  w/p   text  nproc  szdata\n");
 | 
						|
	
 | 
						|
	if (argc == 1)	{
 | 
						|
		esize("e.out");
 | 
						|
	}
 | 
						|
	else	{
 | 
						|
		while (argc > 1)	{
 | 
						|
			esize(argv[1]);
 | 
						|
			argc--, argv++;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	exit(0);
 | 
						|
}
 | 
						|
 | 
						|
esize(fname)
 | 
						|
	char *fname;
 | 
						|
{
 | 
						|
	eof = 0;
 | 
						|
	if (!rd_open(fname))	{
 | 
						|
		printf("%s: cannot open\n", fname);
 | 
						|
	}
 | 
						|
	else	{
 | 
						|
		if (!rd_header())	{
 | 
						|
			printf("%s: not EM object format\n", fname);
 | 
						|
		}
 | 
						|
		else	{
 | 
						|
			printf("%c", flags&0001 ? 'T' : '-');
 | 
						|
			printf("%c", flags&0002 ? 'P' : '-');
 | 
						|
			printf("%c", flags&0004 ? 'F' : '-');
 | 
						|
			printf("%c", flags&0010 ? 'C' : '-');
 | 
						|
			printf("%c", flags&0020 ? 'R' : '-');
 | 
						|
			printf("%c", flags&0040 ? 'E' : '-');
 | 
						|
			printf("%c", flags&0100 ? '?' : ' ');
 | 
						|
			printf("%c", flags&0200 ? '?' : ' ');
 | 
						|
			
 | 
						|
			printf("%3ld  ", uref);
 | 
						|
			printf("%3ld  ", version);
 | 
						|
			printf("%1ld/%1ld", wsize, psize);
 | 
						|
			printf("%c", int7 ? '?' : ' ');
 | 
						|
			printf("%c", int8 ? '?' : ' ');
 | 
						|
				
 | 
						|
			printf("%5ld  ", ntext);
 | 
						|
			printf("%5ld  ", nproc);
 | 
						|
			printf("%6ld", szdata);
 | 
						|
			printf("%c", ptr7 ? '?' : ' ');
 | 
						|
			printf("%c", ptr8 ? '?' : ' ');
 | 
						|
			printf("%s\n", fname);
 | 
						|
		}
 | 
						|
		rd_close();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
#define	btol(a)		((long)(((long) (a)) & 0xFF))
 | 
						|
 | 
						|
int
 | 
						|
rd_open(load_file)
 | 
						|
	char *load_file;
 | 
						|
{
 | 
						|
	return (load_fp = fopen(load_file, "r")) != NULL;
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
rd_byte()
 | 
						|
{
 | 
						|
	int i;
 | 
						|
 | 
						|
	if ((i = fgetc(load_fp)) == EOF)
 | 
						|
		eof = 1;
 | 
						|
	return (i);
 | 
						|
}
 | 
						|
 | 
						|
long
 | 
						|
rd_int(n)
 | 
						|
	long n;
 | 
						|
{
 | 
						|
	long l;
 | 
						|
	register int i;
 | 
						|
 | 
						|
	l = btol(rd_byte());
 | 
						|
	for (i = 1; i < n; i++)
 | 
						|
		l = l | (btol(rd_byte()) << (long) (i*8));
 | 
						|
	return (l);
 | 
						|
}
 | 
						|
 | 
						|
#define	rd_ptr()	((ptr) rd_int(psize))
 | 
						|
 | 
						|
int
 | 
						|
rd_header()
 | 
						|
{
 | 
						|
	magic = rd_int(2L);
 | 
						|
	if (magic != MAGIC || eof)
 | 
						|
		return 0;
 | 
						|
	
 | 
						|
	flags = rd_int(2L);
 | 
						|
	uref = rd_int(2L);
 | 
						|
	version = rd_int(2L);
 | 
						|
	wsize = rd_int(2L);
 | 
						|
	psize = rd_int(2L);
 | 
						|
	int7 = rd_int(2L);	/* Entry 7 is unused */
 | 
						|
	int8 = rd_int(2L);	/* Entry 8 is unused */
 | 
						|
 | 
						|
	ntext = rd_ptr();
 | 
						|
	ndata = rd_ptr();
 | 
						|
	nproc = rd_ptr();
 | 
						|
	entrypoint = rd_ptr();
 | 
						|
	nline = rd_ptr();
 | 
						|
	szdata = rd_ptr();
 | 
						|
	ptr7 = rd_ptr();	/* entry 7 is unused */
 | 
						|
	ptr8 = rd_ptr();	/* entry 8 is unused */
 | 
						|
	
 | 
						|
	return !eof;
 | 
						|
}
 | 
						|
 | 
						|
rd_close()
 | 
						|
{
 | 
						|
	fclose(load_fp);
 | 
						|
}
 | 
						|
 |