V7M/src/cmd/size.c

Compare this file to the similar file:
Show the results in this format:

#include	<stdio.h>
#include 	<a.out.h>
/*
	size -- determine object size
*/
int a_magic[] = {A_MAGIC1,A_MAGIC2,A_MAGIC3,A_MAGIC4, 0430, 0431, 0};
main(argc, argv)
char **argv;
{
	struct exec buf;
	long sum, coresize;
	int gorp,i;
	FILE *f;
	if (argc==1) {
		*argv = "a.out";
		argc++;
		--argv;
	}
	gorp = argc;
	while(--argc) {
		++argv;
		if ((f = fopen(*argv, "r"))==NULL) {
			printf("size: %s not found\n", *argv);
			continue;
		}
		fread((char *)&buf, sizeof(buf), 1, f);
		for(i=0;a_magic[i];i++)
			if(a_magic[i] == buf.a_magic) break;
		if(a_magic[i] == 0) {
			printf("size: %s not an object file\n", *argv);
			fclose(f);
			continue;
		}
		if (gorp>2)
			printf("%s: ", *argv);
		printf("%u+", buf.a_text);
/* wnj added */
		coresize = buf.a_text;
		if (buf.a_magic == 0430 || buf.a_magic == 0431) {
			unsigned sizes[8];
			fread(sizes, sizeof sizes, 1, f);
			printf("(");
			for (i = 1; i < 8; i++)
				if (sizes[i]) {
					coresize += sizes[i];
					if (i > 1)
						printf(",");
					printf("%u", sizes[i]);
				}
			printf(")+");
		}
/* end wnj added */
		printf("%u+%u = ", buf.a_data,buf.a_bss);
		sum = (long) buf.a_text + (long) buf.a_data + (long) buf.a_bss;
		printf("%Db = 0%Ob", sum, sum);
		if (coresize != buf.a_text)
			printf(" (%D total text)", coresize);
		printf("\n");
		fclose(f);
	}
}