esize.c 2.5 KB

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