home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / online / source / c / compilers / Tickle-4.0.sit.hqx / Tickle-4.0 / src / mbinfo.c < prev    next >
Text File  |  1993-11-18  |  3KB  |  138 lines

  1.  
  2. #pragma segment MACBIN
  3.  
  4. /*
  5. ** This source code was written by Tim Endres
  6. ** Email: time@ice.com.
  7. ** USMail: 8840 Main Street, Whitmore Lake, MI  48189
  8. **
  9. ** Some portions of this application utilize sources
  10. ** that are copyrighted by ICE Engineering, Inc., and
  11. ** ICE Engineering retains all rights to those sources.
  12. **
  13. ** Neither ICE Engineering, Inc., nor Tim Endres, 
  14. ** warrants this source code for any reason, and neither
  15. ** party assumes any responsbility for the use of these
  16. ** sources, libraries, or applications. The user of these
  17. ** sources and binaries assumes all responsbilities for
  18. ** any resulting consequences.
  19. */
  20.  
  21. #include <types.h>
  22. #include <standardfile.h>
  23. #include <stdio.h>
  24.  
  25. typedef struct { /* note everything is char to avoid alignment padding */
  26.     unsigned char zero1;
  27.     unsigned char nlen;
  28.     unsigned char name[63];
  29.     unsigned char type[4];
  30.     unsigned char creator[4];
  31.     unsigned char flags;
  32.     unsigned char zero2;
  33.     unsigned char location[6];
  34.     unsigned char protected;
  35.     unsigned char zero3;
  36.     unsigned char dflen[4];
  37.     unsigned char rflen[4];
  38.     unsigned char cdate[4];
  39.     unsigned char mdate[4];
  40.     } F_BLK, *F_BLK_PTR;
  41.  
  42. #define MAC_BINARY_HDR_SIZE        128
  43.  
  44. #define MAC_UNIX_TIME_DIFF        0x7c25b080
  45. #define MAC_TO_UNIX_TIME(time)    ((time) - MAC_UNIX_TIME_DIFF)
  46. #define UNIX_TO_MAC_TIME(time)    ((time) + MAC_UNIX_TIME_DIFF)
  47.  
  48.  
  49. #ifdef TCLAPPL
  50.  
  51. SF_mbinfo()
  52. {
  53. Point        mypoint;
  54. SFReply        myreply;
  55. SFTypeList    mytypes;
  56. FILE        *mbfile;
  57.  
  58. extern int errno;
  59.  
  60.     mypoint.h = mypoint.v = 75;
  61.     mytypes[0] = 'MacB';
  62.     MyGetFile(mypoint, "\p", NULL, (CheckOption()?-1:1), mytypes, NULL, &myreply);
  63.     if (myreply.good) {
  64.         p2cstr(myreply.fName);
  65.         SetVol(NULL, myreply.vRefNum);
  66.         mbfile = fopen(myreply.fName, "r");
  67.         if (mbfile != NULL) {
  68.             mbinfo(mbfile);
  69.             fclose(mbfile);
  70.             }
  71.         else
  72.             Feedback("Error #%d opening '%s'", errno, myreply.fName);
  73.         }
  74.     }
  75.  
  76. #endif /* TCLAPPL */
  77.  
  78. mbinfo(mbfile)
  79. FILE    *mbfile;
  80. {
  81. F_BLK_PTR    fptr;
  82. char        hdrbuffer[MAC_BINARY_HDR_SIZE];
  83. int            retcode;
  84. long        dlength = 0;
  85. long        rlength = 0;
  86. long        cdate = 0;
  87. long        mdate = 0;
  88.  
  89.     fptr = (F_BLK_PTR) &hdrbuffer[0];
  90.     retcode = fread(hdrbuffer, 1, MAC_BINARY_HDR_SIZE, mbfile);
  91.     if (retcode != MAC_BINARY_HDR_SIZE) {
  92.         Feedback("Warning - reading header bytes, needed %d, got %d.\n",
  93.                     MAC_BINARY_HDR_SIZE, retcode);
  94.         }
  95.  
  96.     dlength = 0;
  97.     dlength += fptr->dflen[0]; dlength <<= 8;
  98.     dlength += fptr->dflen[1]; dlength <<= 8;
  99.     dlength += fptr->dflen[2]; dlength <<= 8;
  100.     dlength += fptr->dflen[3];
  101.  
  102.     rlength = 0;
  103.     rlength += fptr->rflen[0]; rlength <<= 8;
  104.     rlength += fptr->rflen[1]; rlength <<= 8;
  105.     rlength += fptr->rflen[2]; rlength <<= 8;
  106.     rlength += fptr->rflen[3];
  107.  
  108.     cdate = 0;
  109.     cdate += fptr->cdate[0]; cdate <<= 8;
  110.     cdate += fptr->cdate[1]; cdate <<= 8;
  111.     cdate += fptr->cdate[2]; cdate <<= 8;
  112.     cdate += fptr->cdate[3];
  113.  
  114.     mdate = 0;
  115.     mdate += fptr->mdate[0]; mdate <<= 8;
  116.     mdate += fptr->mdate[1]; mdate <<= 8;
  117.     mdate += fptr->mdate[2]; mdate <<= 8;
  118.     mdate += fptr->mdate[3];
  119.  
  120.     Feedback("MacBinary file '%*.*s'",
  121.         fptr->nlen, fptr->nlen, fptr->name);
  122.  
  123.     Feedback("File Type '%4.4s'", fptr->type);
  124.     
  125.     Feedback("File Creator '%4.4s'", fptr->creator);
  126.     
  127.     Feedback("Data Fork %d bytes.", dlength);
  128.  
  129.     Feedback("Rsrc Fork %d bytes.", rlength);
  130.  
  131.     /*cdate = MAC_TO_UNIX_TIME(cdate);*/
  132.     Feedback("Creation Date [%d] %s", cdate, ctime(&cdate));
  133.  
  134.     /*mdate = MAC_TO_UNIX_TIME(mdate);*/
  135.     Feedback("Modification Date [%d] %s", mdate, ctime(&mdate));
  136.     }
  137.  
  138.