esize.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /* esize: prints info from e.out header
  2. */
  3. #include <stdio.h>
  4. #ifndef MAGIC
  5. #define MAGIC 07255
  6. #endif MAGIC
  7. FILE *load_fp;
  8. int eof;
  9. /* Much of the code has been borrowed from the EM interpreter
  10. */
  11. typedef unsigned long ptr; /* pointer to EM adress */
  12. long magic;
  13. long flags;
  14. long uref;
  15. long version;
  16. long wsize;
  17. long psize;
  18. long int7;
  19. long int8;
  20. long ntext;
  21. long ndata;
  22. long nproc;
  23. long entrypoint;
  24. long nline;
  25. long szdata;
  26. long ptr7;
  27. long ptr8;
  28. main(argc, argv)
  29. int argc;
  30. char *argv[];
  31. {
  32. printf("TPFCRE uref vers w/p text nproc szdata\n");
  33. if (argc == 1) {
  34. esize("e.out");
  35. }
  36. else {
  37. while (argc > 1) {
  38. esize(argv[1]);
  39. argc--, argv++;
  40. }
  41. }
  42. exit(0);
  43. }
  44. esize(fname)
  45. char *fname;
  46. {
  47. eof = 0;
  48. if (!rd_open(fname)) {
  49. printf("%s: cannot open\n", fname);
  50. }
  51. else {
  52. if (!rd_header()) {
  53. printf("%s: not EM object format\n", fname);
  54. }
  55. else {
  56. printf("%c", flags&0001 ? 'T' : '-');
  57. printf("%c", flags&0002 ? 'P' : '-');
  58. printf("%c", flags&0004 ? 'F' : '-');
  59. printf("%c", flags&0010 ? 'C' : '-');
  60. printf("%c", flags&0020 ? 'R' : '-');
  61. printf("%c", flags&0040 ? 'E' : '-');
  62. printf("%c", flags&0100 ? '?' : ' ');
  63. printf("%c", flags&0200 ? '?' : ' ');
  64. printf("%3ld ", uref);
  65. printf("%3ld ", version);
  66. printf("%1ld/%1ld", wsize, psize);
  67. printf("%c", int7 ? '?' : ' ');
  68. printf("%c", int8 ? '?' : ' ');
  69. printf("%5ld ", ntext);
  70. printf("%5ld ", nproc);
  71. printf("%6ld", szdata);
  72. printf("%c", ptr7 ? '?' : ' ');
  73. printf("%c", ptr8 ? '?' : ' ');
  74. printf("%s\n", fname);
  75. }
  76. rd_close();
  77. }
  78. }
  79. #define btol(a) ((long)(((long) (a)) & 0xFF))
  80. int
  81. rd_open(load_file)
  82. char *load_file;
  83. {
  84. return (load_fp = fopen(load_file, "r")) != NULL;
  85. }
  86. int
  87. rd_byte()
  88. {
  89. int i;
  90. if ((i = fgetc(load_fp)) == EOF)
  91. eof = 1;
  92. return (i);
  93. }
  94. long
  95. rd_int(n)
  96. long n;
  97. {
  98. long l;
  99. register int i;
  100. l = btol(rd_byte());
  101. for (i = 1; i < n; i++)
  102. l = l | (btol(rd_byte()) << (long) (i*8));
  103. return (l);
  104. }
  105. #define rd_ptr() ((ptr) rd_int(psize))
  106. int
  107. rd_header()
  108. {
  109. magic = rd_int(2L);
  110. if (magic != MAGIC || eof)
  111. return 0;
  112. flags = rd_int(2L);
  113. uref = rd_int(2L);
  114. version = rd_int(2L);
  115. wsize = rd_int(2L);
  116. psize = rd_int(2L);
  117. int7 = rd_int(2L); /* Entry 7 is unused */
  118. int8 = rd_int(2L); /* Entry 8 is unused */
  119. ntext = rd_ptr();
  120. ndata = rd_ptr();
  121. nproc = rd_ptr();
  122. entrypoint = rd_ptr();
  123. nline = rd_ptr();
  124. szdata = rd_ptr();
  125. ptr7 = rd_ptr(); /* entry 7 is unused */
  126. ptr8 = rd_ptr(); /* entry 8 is unused */
  127. return !eof;
  128. }
  129. rd_close()
  130. {
  131. fclose(load_fp);
  132. }