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 / XTCL_setfile.c < prev    next >
Text File  |  1993-11-18  |  5KB  |  170 lines

  1. /*
  2. ** This source code was written by Tim Endres
  3. ** Email: time@ice.com.
  4. ** USMail: 8840 Main Street, Whitmore Lake, MI  48189
  5. **
  6. ** Some portions of this application utilize sources
  7. ** that are copyrighted by ICE Engineering, Inc., and
  8. ** ICE Engineering retains all rights to those sources.
  9. **
  10. ** Neither ICE Engineering, Inc., nor Tim Endres, 
  11. ** warrants this source code for any reason, and neither
  12. ** party assumes any responsbility for the use of these
  13. ** sources, libraries, or applications. The user of these
  14. ** sources and binaries assumes all responsbilities for
  15. ** any resulting consequences.
  16. */
  17.  
  18. #include <Types.h>
  19. #include <Resources.h>
  20. #include <QuickDraw.h>
  21. #include <Windows.h>
  22. #include <Memory.h>
  23. #include <Files.h>
  24. #include "tcl.h"
  25. #include "xtcl.h"
  26.  
  27. #define sprintf        sprintf_drvr
  28. #define FALSE        (Boolean)0
  29.  
  30. void
  31. XTCLEntry(argc, argv, xpb)
  32. int            argc;
  33. char        **argv;
  34. XTCLParmBlk    *xpb;
  35. {
  36. char    *ptr;
  37. int        i, j;
  38. Handle    resultH;
  39. char    buffer[256];
  40. char    pascal_name[256];
  41. ParamBlockRec    pb;
  42.  
  43.     resultH = xpb->resultH;
  44.     
  45.     strcpy(pascal_name, argv[1]);
  46.     c2pstr(pascal_name);
  47.     
  48.     pb.fileParam.ioCompletion = 0;
  49.     pb.fileParam.ioVRefNum = 0;
  50.     pb.fileParam.ioNamePtr = pascal_name;
  51.     pb.fileParam.ioFDirIndex = 0;
  52.     pb.fileParam.ioFVersNum = 0;
  53.     PBGetFInfo(&pb, FALSE);
  54.     if (pb.fileParam.ioResult != noErr) {
  55.         sprintf(buffer, "error #%d retrieving info for '%.32s'.",
  56.                     pb.fileParam.ioResult, argv[1]);
  57.         SetHandleSize(resultH, strlen(buffer) + 1);
  58.         if (MemError() == noErr)
  59.             strcpy(*resultH, buffer);
  60.         xpb->result = TCL_ERROR;
  61.         }
  62.     else {
  63.         xpb->result = TCL_OK;
  64.         for (i = 2 ; i < argc ; i+=2) {
  65.             if (argv[i][0] == '-') {
  66.                 switch (argv[i][1]) {
  67.                     case 'a':    /* attributes (lowercase = 0, uppercase = 1) [*] */
  68.                         ptr = argv[i+1];
  69.                         for (ptr = argv[i+1] ; *ptr ; ptr++) {
  70.                             switch (*ptr) {
  71.                                 case 'L': case 'l':    /* Locked / Not */
  72.                                     if (*ptr == 'L')
  73.                                         pb.fileParam.ioFlFndrInfo.fdFlags |= 0x8000;
  74.                                     else
  75.                                         pb.fileParam.ioFlFndrInfo.fdFlags &= ~0x8000;
  76.                                     break;
  77.                                 case 'V': case 'v':    /* Invisible / Visible */
  78.                                     if (*ptr == 'V')
  79.                                         pb.fileParam.ioFlFndrInfo.fdFlags |= fInvisible;
  80.                                     else
  81.                                         pb.fileParam.ioFlFndrInfo.fdFlags &= ~fInvisible;
  82.                                     break;
  83.                                 case 'B': case 'b':    /* Bundled / Not */
  84.                                     if (*ptr == 'B')
  85.                                         pb.fileParam.ioFlFndrInfo.fdFlags |= fHasBundle;
  86.                                     else
  87.                                         pb.fileParam.ioFlFndrInfo.fdFlags &= ~fHasBundle;
  88.                                     break;
  89.                                 case 'S': case 's':    /* System / Not */
  90.                                     if (*ptr == 'S')
  91.                                         pb.fileParam.ioFlFndrInfo.fdFlags |= 0x1000;
  92.                                     else
  93.                                         pb.fileParam.ioFlFndrInfo.fdFlags &= ~0x1000;
  94.                                     break;
  95.                                 case 'I': case 'i':    /* Inited / Not */
  96.                                     if (*ptr == 'I')
  97.                                         pb.fileParam.ioFlFndrInfo.fdFlags |= 0x0100;
  98.                                     else
  99.                                         pb.fileParam.ioFlFndrInfo.fdFlags &= ~0x0100;
  100.                                     break;
  101.                                 case 'D': case 'd':    /* 0x0001 Desktop / Not */
  102.                                     if (*ptr == 'D')
  103.                                         pb.fileParam.ioFlFndrInfo.fdFlags |= fOnDesk;
  104.                                     else
  105.                                         pb.fileParam.ioFlFndrInfo.fdFlags &= ~fOnDesk;
  106.                                     break;
  107.                                 case 'M': case 'm':    /* Sharable / Not */
  108.                                     if (*ptr == 'M')
  109.                                         pb.fileParam.ioFlFndrInfo.fdFlags |= 0x0080;
  110.                                     else
  111.                                         pb.fileParam.ioFlFndrInfo.fdFlags &= ~0x0080;
  112.                                     break;
  113.                                 case 'Z': case 'z':    /* Always Switch / Do Not */
  114. #ifdef NEVER_DEFINED
  115.                                     if (*ptr == 'Z')
  116.                                         pb.fileParam.ioFlFndrInfo.fdFlags |= fHasBundle;
  117.                                     else
  118.                                         pb.fileParam.ioFlFndrInfo.fdFlags &= ~fHasBundle;
  119. #endif
  120.                                     break;
  121.                                 }
  122.                             }
  123.                         break;
  124.                     case 'c':    /* file creator */
  125.                         ptr = (char *) &pb.fileParam.ioFlFndrInfo.fdCreator;
  126.                         for (j = 0 ; argv[i+1][j] ; j++)
  127.                             *ptr++ = argv[i+1][j];
  128.                         for ( ; j < 4 ; j++)
  129.                             *ptr++ = ' ';
  130.                         break;
  131.                     case 'd':    /* creation date (mm/dd/yy [hh:mm[:ss] [AM | PM]]) [*] */
  132.                         break;
  133.                     case 'l':    /* ICON location (horizontal,vertical) [*] */
  134.                         break;
  135.                     case 'm':    /* modification date (mm/dd/yy [hh:mm[:ss] [AM | PM]]) [*] */
  136.                         break;
  137.                     case 't':    /* file type */
  138.                         ptr = (char *) &pb.fileParam.ioFlFndrInfo.fdType;
  139.                         for (j = 0 ; argv[i+1][j] ; j++)
  140.                             *ptr++ = argv[i+1][j];
  141.                         for ( ; j < 4 ; j++)
  142.                             *ptr++ = ' ';
  143.                         break;
  144.                     }
  145.                 }
  146.             else {
  147.                 sprintf(buffer, "option %s invalid.", argv[i]);
  148.                 SetHandleSize(resultH, strlen(buffer) + 1);
  149.                 if (MemError() == noErr)
  150.                     strcpy(*resultH, buffer);
  151.                 xpb->result = TCL_ERROR;
  152.                 break;
  153.                 }
  154.             }
  155.         
  156.         if (xpb->result == TCL_OK) {
  157.             PBSetFInfo(&pb, FALSE);
  158.             if (pb.fileParam.ioResult != noErr) {
  159.                 sprintf(buffer, "error #%d setting info for '%.32s'.",
  160.                         pb.fileParam.ioResult, argv[1]);
  161.                 SetHandleSize(resultH, strlen(buffer) + 1);
  162.                 if (MemError() == noErr)
  163.                     strcpy(*resultH, buffer);
  164.                 xpb->result = TCL_ERROR;
  165.                 }
  166.             }
  167.         }
  168.     }
  169.  
  170.