V7M/src/cmd/size.c
#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);
}
}