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 / FileInfo.c < prev    next >
Text File  |  1993-11-18  |  9KB  |  301 lines

  1.  
  2. #ifdef MPW3
  3. #    pragma segment FINFO
  4. #endif
  5.  
  6. /*
  7. ** This source code was written by Tim Endres
  8. ** Email: time@ice.com.
  9. ** USMail: 8840 Main Street, Whitmore Lake, MI  48189
  10. **
  11. ** Some portions of this application utilize sources
  12. ** that are copyrighted by ICE Engineering, Inc., and
  13. ** ICE Engineering retains all rights to those sources.
  14. **
  15. ** Neither ICE Engineering, Inc., nor Tim Endres, 
  16. ** warrants this source code for any reason, and neither
  17. ** party assumes any responsbility for the use of these
  18. ** sources, libraries, or applications. The user of these
  19. ** sources and binaries assumes all responsbilities for
  20. ** any resulting consequences.
  21. */
  22.  
  23. #include "tickle.h"
  24. #include <fcntl.h>
  25. #include <string.h>
  26. #include <traps.h>
  27. #include "tge.h"
  28.  
  29. SFFileInfo()
  30.     {
  31.     Point        mypoint;
  32.     SFReply        myreply;
  33.     SFTypeList    mytypes;
  34.     
  35.     mypoint.h = mypoint.v = 75;
  36.     MyGetFile(mypoint, "\pInformation For File…", NULL, -1, mytypes, NULL, &myreply);
  37.     if (myreply.good)
  38.         FileInfo(&myreply);
  39.     }
  40.  
  41. #define FINFO_DIALOG    3098
  42.  
  43. #define dtitle1item        3
  44. #define dtitle2item        4
  45. #define dstypeitem        5
  46. #define dscreatoritem    6
  47. #define dtypeitem        7
  48. #define dcreatoritem    8
  49. #define lkdItem            9
  50. #define visItem            10
  51. #define bunItem            11
  52. #define dskItem            12
  53. #define initItem        13
  54. #define bozoItem        14
  55. #define sysItem            15
  56. #define chgItem            16
  57. #define shrItem            17
  58. #define cachItem        18
  59. #define dataItem        19 
  60. #define rsrcItem        20
  61. #define rdoItem            21
  62. #define dfolderitem        22
  63.  
  64. FileInfo(myReply)
  65. SFReply        *myReply;
  66. {
  67. short            itemhit, done, save, i, myerr, myflags;
  68. DialogPtr        mydialog;
  69. GrafPtr            saveport;
  70. char            mystr[256], cstr[50], mstr[50];
  71. /*char            pathname[256];*/
  72. ParamBlockRec    myparm;
  73. CInfoPBRec        cparm;        /* Used for New ROM HFS File Manager. */
  74.  
  75. extern pascal Boolean UniversalFilter();
  76.  
  77.     GetPort(&saveport);
  78.  
  79.     InitCursor();
  80.     mydialog = GetNewDialog(FINFO_DIALOG, NULL, inFront);
  81.     if (mydialog == NULL) {
  82.         return 0;
  83.         }
  84.     
  85.     myparm.fileParam.ioNamePtr = myReply->fName;
  86.     myparm.fileParam.ioVRefNum = myReply->vRefNum;
  87.     myparm.fileParam.ioFVersNum = 0;
  88.     myparm.fileParam.ioFDirIndex = 0;
  89.     myerr = PBGetFInfo(&myparm, false);
  90.     
  91.     myReply->fName[myReply->fName[0] + 1] = '\0';
  92.     
  93.     /* fullname(pathname, myReply->vRefNum, &myReply->fName[1]); */
  94.     SetPort(mydialog);
  95.     /* ellipses_path_name( pathname,
  96.                         (mydialog->portRect.right - mydialog->portRect.left) - 8 ); */
  97.     
  98.     MySetText(mydialog, dtitle1item, &myReply->fName[1]);
  99.     
  100.     if (myerr == noErr) {
  101.         sprintf(mystr, "%-4.4s", &myparm.fileParam.ioFlFndrInfo.fdType);
  102.         MySetText(mydialog, dtypeitem, mystr);
  103.         sprintf(mystr, "%-4.4s", &myparm.fileParam.ioFlFndrInfo.fdCreator);
  104.         MySetText(mydialog, dcreatoritem, mystr);
  105.         IUTimeString(myparm.fileParam.ioFlCrDat, -1, cstr);
  106.         p2cstr(cstr);
  107.         IUDateString(myparm.fileParam.ioFlCrDat, 1, mstr);
  108.         p2cstr(mstr);
  109.         strcat(cstr, " on ");
  110.         strcat(cstr, mstr);
  111.         IUTimeString(myparm.fileParam.ioFlMdDat, -1, mstr);
  112.         p2cstr(mstr);
  113.         IUDateString(myparm.fileParam.ioFlMdDat, 1, mystr);
  114.         p2cstr(mystr);
  115.         strcat(mstr, " on ");
  116.         strcat(mstr, mystr);
  117.         sprintf(mystr, "Data fork size = %ld bytes.\015",
  118.                     myparm.fileParam.ioFlLgLen);
  119.         sprintf(&mystr[strlen(mystr)], "Resource fork size = %ld bytes.\015",
  120.                     myparm.fileParam.ioFlRLgLen);
  121.         sprintf(&mystr[strlen(mystr)], "Total file size = %ld bytes.\015",
  122.                     myparm.fileParam.ioFlLgLen + myparm.fileParam.ioFlRLgLen);
  123.         sprintf(&mystr[strlen(mystr)], "Created: %s.\015Modified: %s.",
  124.                     cstr, mstr);
  125.         mystr[239] = '\0';
  126.         MySetText(mydialog, dtitle2item, mystr);
  127.  
  128.         cparm.hFileInfo.ioCompletion = 0;
  129.         cparm.hFileInfo.ioNamePtr = myReply->fName;
  130.         cparm.hFileInfo.ioVRefNum = myReply->vRefNum;
  131.         cparm.hFileInfo.ioFVersNum = 0;
  132.         cparm.hFileInfo.ioFDirIndex = 0;
  133.         cparm.hFileInfo.ioDirID = 0;
  134.         myerr = PBGetCatInfo(&cparm, (Boolean)false);
  135.         myReply->fName[myReply->fName[0]+1] = '\0';
  136.         if (myerr == noErr)    
  137.             sprintf(mystr, "%d", cparm.hFileInfo.ioFlParID);
  138.         else
  139.             mystr[0] = '\0';
  140.  
  141.         MySetText(mydialog, dfolderitem, mystr);
  142.         if ((myparm.fileParam.ioFlAttrib&0x01) != 0) MySetControl(mydialog, rdoItem, 1);
  143.         if ((myparm.fileParam.ioFlAttrib&0x08) != 0) MySetControl(mydialog, dataItem, 1);
  144.         if ((myparm.fileParam.ioFlAttrib&0x04) != 0) MySetControl(mydialog, rsrcItem, 1);
  145.         if ((myparm.fileParam.ioFlFndrInfo.fdFlags&0x8000) != 0) MySetControl(mydialog, lkdItem, 1);
  146.         if ((myparm.fileParam.ioFlFndrInfo.fdFlags&0x4000) != 0) MySetControl(mydialog, visItem, 1);
  147.         if ((myparm.fileParam.ioFlFndrInfo.fdFlags&0x2000) != 0) MySetControl(mydialog, bunItem, 1);
  148.         if ((myparm.fileParam.ioFlFndrInfo.fdFlags&0x1000) != 0) MySetControl(mydialog, sysItem, 1);
  149.         if ((myparm.fileParam.ioFlFndrInfo.fdFlags&0x0800) != 0) MySetControl(mydialog, bozoItem, 1);
  150. /*        if ((myparm.fileParam.ioFlFndrInfo.fdFlags&0x0400) != 0) MySetControl(mydialog, busyItem, 1); */
  151.         if ((myparm.fileParam.ioFlFndrInfo.fdFlags&0x0200) != 0) MySetControl(mydialog, chgItem, 1);
  152.         if ((myparm.fileParam.ioFlFndrInfo.fdFlags&0x0100) != 0) MySetControl(mydialog, initItem, 1);
  153.         if ((myparm.fileParam.ioFlFndrInfo.fdFlags&0x0080) != 0) MySetControl(mydialog, shrItem, 1);
  154.         if ((myparm.fileParam.ioFlFndrInfo.fdFlags&0x0040) != 0) MySetControl(mydialog, cachItem, 1);
  155.         if ((myparm.fileParam.ioFlFndrInfo.fdFlags&0x0001) != 0) MySetControl(mydialog, dskItem, 1);
  156.         }
  157.     else
  158.         MySetText(mydialog, dtitle2item, "Couldn't open file.\015No additional information.");
  159.     
  160.     SelIText(mydialog, dtypeitem, 0, 8);
  161.     for (save=done=false,i=0; ! done; ) {
  162.         SetPort(mydialog);
  163.         FrameButton(mydialog, 1);
  164.         ModalDialog((ModalFilterProcPtr)UniversalFilter, &itemhit);
  165.         switch (itemhit) {
  166.             case cancel:
  167.                 done = true; save = true;
  168.                 break;
  169.             case ok:
  170.                 done = true; save = false;
  171.                 break;
  172.             case lkdItem:
  173.             case visItem:
  174.             case bozoItem:
  175.             case chgItem:
  176.             case bunItem:
  177.             case dskItem:
  178.             case initItem:
  179.             case sysItem:
  180.             case shrItem:
  181.             case cachItem:
  182.             case rdoItem:
  183.                 MySetControl(mydialog, itemhit,
  184.                                 ! MyGetControl(mydialog, itemhit));
  185.                 break;
  186.             }
  187.         }
  188.     
  189.     if (save) {
  190.         myflags = 0;
  191.         if (MyGetControl(mydialog, rdoItem))
  192.             SetFLock(myReply->fName, myReply->vRefNum);
  193.         else
  194.             RstFLock(myReply->fName, myReply->vRefNum);
  195.         if (MyGetControl(mydialog, lkdItem))    myflags |= 0x8000;
  196.         if (MyGetControl(mydialog, visItem))    myflags |= 0x4000;
  197.         if (MyGetControl(mydialog, bunItem))    myflags |= 0x2000;
  198.         if (MyGetControl(mydialog, sysItem))    myflags |= 0x1000;
  199.         if (MyGetControl(mydialog, bozoItem))    myflags |= 0x0800;
  200. /*        if (MyGetControl(mydialog, busyItem))    myflags |= 0x0400; */
  201.         if (MyGetControl(mydialog, chgItem))    myflags |= 0x0200;
  202.         if (MyGetControl(mydialog, initItem))    myflags |= 0x0100;
  203.         if (MyGetControl(mydialog, shrItem))    myflags |= 0x0080;
  204.         if (MyGetControl(mydialog, cachItem))    myflags |= 0x0040;
  205.         if (MyGetControl(mydialog, dskItem))    myflags |= 0x0001;
  206.         myparm.fileParam.ioFlFndrInfo.fdFlags = myflags;
  207.         MyGetText(mydialog, dtypeitem, mystr);
  208.         memcpy(&myparm.fileParam.ioFlFndrInfo.fdType, mystr, 4);
  209.         MyGetText(mydialog, dcreatoritem, mystr);
  210.         memcpy(&myparm.fileParam.ioFlFndrInfo.fdCreator, mystr, 4);
  211.  
  212.         myparm.fileParam.ioNamePtr = myReply->fName;
  213.         myparm.fileParam.ioVRefNum = myReply->vRefNum;
  214.         myparm.fileParam.ioFVersNum = 0;
  215.         myparm.fileParam.ioFDirIndex = 0;
  216.         myerr = PBSetFInfo(&myparm, false);
  217.         if (myerr != noErr) {
  218.             message_alert("Error #%d setting file information.", myerr);
  219.             }
  220.         myerr = FlushVol(NULL, myReply->vRefNum);
  221.         if (myerr != noErr) {
  222.             message_alert("Error #%d flushing volume.", myerr);
  223.             }
  224.         }
  225.     
  226.     DisposeDialog(mydialog);
  227.     SetPort(saveport);
  228.     }
  229.  
  230.  
  231. #ifdef NEVER_DEFINED
  232.  
  233. ellipses_path_name(pathname, width)
  234. char        *pathname;
  235. int            width;
  236.     {
  237.     int        lwidth = 0, rwidth = 0, ewidth = 0;
  238.     char    lpath[256], *lptr, rpath[256], *rptr;
  239.     
  240.     c2pstr(pathname);
  241.     lwidth = StringWidth(pathname);
  242.     p2cstr(pathname);
  243.     if (lwidth <= width)
  244.         return;
  245.     
  246.     ewidth = StringWidth("\p…");
  247.     lptr = pathname;
  248.     rptr = &pathname[strlen(pathname)];
  249.     lpath[0] = '\0';
  250.     rpath[0] = '\0';
  251.     for ( ; ewidth + lwidth + rwidth <= width ; )
  252.         {
  253.         for ( ; *lptr && *lptr != ':' ; ++lptr)
  254.             ;
  255.         if (*lptr != ':')
  256.             break;
  257.         *lptr = '\0';
  258.         c2pstr(pathname);
  259.         lwidth = StringWidth(pathname);
  260.         p2cstr(pathname);
  261.         *lptr = ':';
  262.         
  263.         for ( ; rptr > pathname && *rptr != ':' ; --rptr)
  264.             ;
  265.         if (*rptr != ':')
  266.             break;
  267.         *lptr = '\0';
  268.         c2pstr(rptr + 1);
  269.         rwidth = StringWidth(rptr + 1);
  270.         p2cstr(rptr + 1);
  271.         }
  272.     
  273.     if (*lptr == ':' && *rptr == ':' && rptr > lptr)
  274.         {
  275.         *lptr = '\0';
  276.         sprintf(tempstr, "%s:…:%s", pathname, rptr + 1);
  277.         strcpy(pathname, tempstr);
  278.         *lptr = ':';
  279.         }
  280.     else if (lptr == rptr)
  281.         {
  282.         /* leave alone... */
  283.         }
  284.     else if (*rptr == ':' && rptr < lptr)
  285.         {
  286.         sprintf(tempstr, "…:%s", rptr + 1);
  287.         strcpy(pathname, tempstr);
  288.         }
  289.     else if (*lptr == ':' && rptr < lptr)
  290.         {
  291.         sprintf(tempstr, "%s:…:%s", pathname, rptr + 1);
  292.         strcpy(pathname, tempstr);
  293.         }
  294.     else
  295.         {
  296.         /* leave alone... */
  297.         }
  298.     }
  299.  
  300. #endif
  301.