home *** CD-ROM | disk | FTP | other *** search
/ vis-ftp.cs.umass.edu / vis-ftp.cs.umass.edu.tar / vis-ftp.cs.umass.edu / pub / Software / ASCENDER / ascendMar8.tar / UMass / BoldtNew / LLVS / g0_dump_header.c < prev    next >
C/C++ Source or Header  |  1996-01-31  |  3KB  |  120 lines

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5.  
  6. #define HEADER_TYPE_LEN 16
  7. #define HEADER_INFO_LEN 120
  8. #define INT_STRING_LEN 10
  9. #define BYTESIZE 8
  10.  
  11. #define IU_TESTBED_TYPE "SRI TB01IMGHDR"
  12.  
  13. void copy_substring(char* dest, char* src, int begin, int end)
  14. {
  15.   strncpy(dest,&src[begin],end-begin);
  16.   dest[end-begin] = '\0';
  17.   return;
  18. }
  19.  
  20. int read_int_from_string(char* src, int begin, int end)
  21. {
  22.   char tmpstr[INT_STRING_LEN];  
  23.  
  24.   copy_substring(tmpstr,src,begin,end);
  25.   return((int)(atoi(tmpstr)));
  26. }
  27.  
  28. int string_equal(char* string, char* strptr)  /* string must end with '\0'  */
  29. {                                             /* but strptr doesn't have to */
  30.   return(!strncmp(string,strptr,strlen(string)));
  31. }
  32.  
  33.  
  34. int ceiling(int a, int b)
  35. {
  36.   return((int)(ceil( ((float)a) / ((float)b) )));
  37. }
  38.  
  39.  
  40. void main(int argc, char *argv[])
  41. {
  42.  
  43.   char *infilename;
  44.   FILE *infile;
  45.   char headerString[HEADER_INFO_LEN+1];
  46.   char elementType[40-32+1];
  47.   int imageXdim, imageYdim, elementSize, elementBytes, headerLen;
  48.   int blockXdim, blockYdim, blockSize, numXblocks, numYblocks;
  49.   int dx = 1, dy = 1;
  50.   int i, itmp, jtmp;
  51.  
  52.  
  53.   infilename = argv[1];
  54.  
  55.   if ((infile = fopen(infilename,"r")) == NULL) {
  56.     perror("error opening input file");
  57.     perror(infilename);
  58.     return;
  59.   }
  60.  
  61.   for (i=0 ; i < HEADER_TYPE_LEN; i++)
  62.     headerString[i] = getc(infile);
  63.   headerString[HEADER_TYPE_LEN] = '\0';
  64.  
  65.   printf("Header string: \"%s\"\n",headerString);
  66.  
  67.   rewind(infile);
  68.  
  69.   for (i=0 ; i < HEADER_INFO_LEN; i++)
  70.     headerString[i] = getc(infile);
  71.   headerString[HEADER_INFO_LEN] = '\0';
  72.  
  73.   printf("Header Info...\n");
  74.   printf("%s>\n", headerString);
  75.  
  76.   copy_substring(elementType,headerString,32,40);
  77.   printf("Element type: <%s>\n", elementType);
  78.  
  79.   elementSize = read_int_from_string(headerString,56,64);
  80.   printf("Element size: %d\n", elementSize);
  81.  
  82.   elementBytes = (int)(elementSize / BYTESIZE);
  83.   printf("Bytes per element: %d\n", elementBytes);
  84.  
  85.   imageXdim = read_int_from_string(headerString,64,72);
  86.   printf("X dimension: %d\n", imageXdim);
  87.  
  88.   imageYdim = read_int_from_string(headerString,72,80);
  89.   printf("Y dimension: %d\n", imageYdim);
  90.  
  91. /*;; testbed format gives the number of BYTES horizontally in block */
  92.   itmp = read_int_from_string(headerString,80,88);
  93.   blockXdim = (int) ((itmp * BYTESIZE) / elementSize);
  94.   if (string_equal("RL",&headerString[24]))
  95.     dx = (- dx);
  96.   printf("X blocksize: %d\n", (dx * blockXdim));
  97.  
  98.   blockYdim = read_int_from_string(headerString,88,96);
  99.   if (string_equal("TB",&headerString[26]))
  100.     dy = (- dy);
  101.   printf("Y blocksize: %d\n", (dy * blockYdim));
  102.  
  103.   numXblocks = ceiling(imageXdim,blockXdim);
  104.   numYblocks = ceiling(imageYdim,blockYdim);
  105.   printf("Num X blocks: %d\n", numXblocks);
  106.   printf("Num Y blocks: %d\n", numYblocks);
  107.  
  108.   itmp = read_int_from_string(headerString,112,120);
  109.   jtmp = blockXdim * blockYdim;
  110.   blockSize = ((itmp < jtmp) ? jtmp : itmp);
  111.   printf("Block size: %d\n", blockSize);
  112.  
  113.   headerLen = read_int_from_string(headerString,16,24);
  114.   printf("Header length: %d\n", headerLen);
  115.  
  116.   fclose(infile);
  117.   return;
  118. }
  119.  
  120.