esize.c 2.6 KB

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