esize.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. main(argc, argv)
  30. int argc;
  31. 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. }
  45. esize(fname)
  46. 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
  82. rd_open(load_file)
  83. char *load_file;
  84. {
  85. return (load_fp = fopen(load_file, "r")) != NULL;
  86. }
  87. int
  88. rd_byte()
  89. {
  90. int i;
  91. if ((i = fgetc(load_fp)) == EOF)
  92. eof = 1;
  93. return (i);
  94. }
  95. long
  96. rd_int(n)
  97. long n;
  98. {
  99. long l;
  100. register int i;
  101. l = btol(rd_byte());
  102. for (i = 1; i < n; i++)
  103. l = l | (btol(rd_byte()) << (long) (i*8));
  104. return (l);
  105. }
  106. #define rd_ptr() ((ptr) rd_int(psize))
  107. int
  108. rd_header()
  109. {
  110. magic = rd_int(2L);
  111. if (magic != MAGIC || eof)
  112. return 0;
  113. flags = rd_int(2L);
  114. uref = rd_int(2L);
  115. version = rd_int(2L);
  116. wsize = rd_int(2L);
  117. psize = rd_int(2L);
  118. int7 = rd_int(2L); /* Entry 7 is unused */
  119. int8 = rd_int(2L); /* Entry 8 is unused */
  120. ntext = rd_ptr();
  121. ndata = rd_ptr();
  122. nproc = rd_ptr();
  123. entrypoint = rd_ptr();
  124. nline = rd_ptr();
  125. szdata = rd_ptr();
  126. ptr7 = rd_ptr(); /* entry 7 is unused */
  127. ptr8 = rd_ptr(); /* entry 8 is unused */
  128. return !eof;
  129. }
  130. rd_close()
  131. {
  132. fclose(load_fp);
  133. }