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 / Fullpath.c < prev    next >
C/C++ Source or Header  |  1993-11-18  |  6KB  |  287 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 <files.h>
  20.  
  21. #ifndef TRUE
  22. #    define TRUE    ((Boolean) 1)
  23. #    define FALSE    ((Boolean) 0)
  24. #endif
  25.  
  26. #define TSigWord    0x4244
  27.  
  28. unsigned char *prepstr( unsigned char *s1, unsigned char *s2 );
  29.  
  30. char    *
  31. fullname(name, vrefnum, filename)
  32.     unsigned char    *name;
  33.     int                vrefnum;
  34.     char            *filename;
  35.     {
  36.     Str32            volname;
  37.     HVolumeParam    pb;
  38.     
  39.     strcpy(name, filename);
  40.  
  41.     pb.ioVRefNum = vrefnum;
  42.     pb.ioNamePtr = volname; volname[0] = '\0';
  43.     pb.ioVolIndex = 0;
  44.     PBHGetVInfo((HParmBlkPtr)&pb, FALSE);    /* Works with 64K ROMs as well. */
  45.     p2cstr(volname);
  46.     if (pb.ioVSigWord == 0x4244)
  47.         _prep_hfs_name(name, vrefnum);
  48.     else
  49.         prepstr(name, volname);
  50.     return (char *)name;
  51.     }
  52.  
  53. char    *
  54. pathname(pathname, vrefnum)
  55.     unsigned char    *pathname;
  56.     int                vrefnum;
  57.     {
  58.     Str32            volname;
  59.     HVolumeParam    pb;
  60.  
  61.     pathname[0] = '\0';
  62.     
  63.     pb.ioVRefNum = vrefnum;
  64.     pb.ioNamePtr = volname; volname[0] = '\0';
  65.     pb.ioVolIndex = 0;
  66.     PBHGetVInfo((HParmBlkPtr)&pb, FALSE);    /* Works with 64K ROMs as well. */
  67.     p2cstr(volname);
  68.     if (pb.ioVSigWord == 0x4244)
  69.         _prep_hfs_name(pathname, vrefnum);
  70.     else
  71.         prepstr(pathname, volname);
  72.     return (char *)pathname;
  73.     }
  74.  
  75. _prep_hfs_name(fullname, vrefnum)
  76.     unsigned char    *fullname;
  77.     int                vrefnum;
  78.     {
  79.     CInfoPBRec    cpb;
  80.     WDPBRec        wpb;
  81.     Str255        myname;
  82.  
  83.     wpb.ioNamePtr = myname; myname[0] = '\0';
  84.     wpb.ioVRefNum = vrefnum;
  85.     wpb.ioWDIndex = 0;
  86.     wpb.ioWDProcID = (long) 0;
  87.     PBGetWDInfo(&wpb, FALSE);
  88.     
  89.     cpb.dirInfo.ioVRefNum = vrefnum;
  90.     cpb.dirInfo.ioNamePtr = myname; myname[0] = '\0';
  91.     cpb.dirInfo.ioDrDirID = wpb.ioWDDirID;
  92.     cpb.dirInfo.ioFDirIndex = -1;
  93.     PBGetCatInfo(&cpb, FALSE);
  94.     p2cstr(myname);
  95.     prepstr(fullname, myname);
  96.     
  97.     while (cpb.dirInfo.ioDrDirID != 2)    
  98.         {
  99.         cpb.dirInfo.ioDrDirID = cpb.dirInfo.ioDrParID;
  100.         cpb.dirInfo.ioNamePtr = myname; myname[0] = '\0';
  101.         cpb.dirInfo.ioFDirIndex = -1;
  102.         PBGetCatInfo(&cpb, FALSE);
  103.         p2cstr(myname);
  104.         prepstr(fullname, myname);
  105.         }
  106.     }
  107.  
  108. char    *
  109. dirpathname(pathname, vrefnum, dirid)
  110.     unsigned char    *pathname;
  111.     int                vrefnum;
  112.     long            dirid;
  113.     {
  114.     Str32            volname;
  115.     HVolumeParam    pb;
  116.  
  117.     pathname[0] = '\0';
  118.     
  119.     pb.ioVRefNum = vrefnum;
  120.     pb.ioNamePtr = volname; volname[0] = '\0';
  121.     pb.ioVolIndex = 0;
  122.     PBHGetVInfo((HParmBlkPtr)&pb, FALSE);
  123.     p2cstr(volname);
  124.     if (pb.ioVSigWord == 0x4244)
  125.         _dir_prep_hfs_name(pathname, vrefnum, dirid);
  126.     else
  127.         prepstr(pathname, volname);
  128.     return (char *)pathname;
  129.     }
  130.  
  131. _dir_prep_hfs_name(fullname, vrefnum, dirid)
  132.     unsigned char    *fullname;
  133.     int                vrefnum;
  134.     long            dirid;
  135.     {
  136.     CInfoPBRec    cpb;
  137.     Str255        myname;
  138.  
  139.     cpb.dirInfo.ioVRefNum = vrefnum;
  140.     cpb.dirInfo.ioNamePtr = myname; myname[0] = '\0';
  141.     cpb.dirInfo.ioDrDirID = dirid;
  142.     cpb.dirInfo.ioFDirIndex = -1;
  143.     PBGetCatInfo(&cpb, FALSE);
  144.     p2cstr(myname);
  145.     prepstr(fullname, myname);
  146.     
  147.     while (cpb.dirInfo.ioDrDirID != 2) {
  148.         cpb.dirInfo.ioDrDirID = cpb.dirInfo.ioDrParID;
  149.         cpb.dirInfo.ioNamePtr = myname; myname[0] = '\0';
  150.         cpb.dirInfo.ioFDirIndex = -1;
  151.         PBGetCatInfo(&cpb, FALSE);
  152.         p2cstr(myname);
  153.         prepstr(fullname, myname);
  154.         }
  155.     }
  156.  
  157. unsigned char *
  158. prepstr( unsigned char *s1, unsigned char *s2 )
  159.     {
  160.     unsigned char    *ptr1, *ptr2;
  161.     unsigned char    tempstr[256];
  162.     
  163.     ptr1 = tempstr;
  164.     ptr2 = s2;
  165.     while (*ptr1++ = *ptr2++) ;
  166.     ptr1--; *ptr1++ = ':';
  167.     ptr2 = s1;
  168.     while (*ptr1++ = *ptr2++) ;
  169.     ptr1 = tempstr; ptr2 = s1;
  170.     while (*ptr2++ = *ptr1++) ;
  171.     return s1;
  172.     }
  173.  
  174. #ifdef STAND_ALONE_TOOL
  175.  
  176. #include <quickdraw.h>
  177. #include <packages.h>
  178. #include <stdio.h>
  179.  
  180. static char        myfullname[1024];
  181.  
  182. main(argc, argv)
  183.     int        argc;
  184.     char    *argv[];
  185.     {
  186.     short        vRefNum;
  187.     SFReply        myreply;
  188.     Point        mypoint;
  189.     char        volname[32];
  190.     SFTypeList    mytypes;
  191.  
  192.     InitGraf(&qd.thePort);
  193.     InitCursor();
  194.     
  195.     if ( argc > 1 )
  196.         {
  197.         if ( strcmp(argv[1], "-curdir") == 0 )
  198.             {
  199.             GetVol(volname, &vRefNum);
  200.             pathname(myfullname, vRefNum);
  201.             printf("PathName: '%s'\n", myfullname);
  202.             }
  203.         }
  204.     else
  205.         {
  206.         mypoint.h = mypoint.v = 75;
  207.         SFGetFile(mypoint, "", NULL, -1, mytypes, NULL, &myreply);
  208.         if (myreply.good)
  209.             {
  210.             myreply.fName[myreply.fName[0]+1] = '\0';
  211.             fullname(myfullname, myreply.vRefNum, &myreply.fName[1]);
  212.             printf("FullName: '%s'\n", myfullname);
  213.             pathname(myfullname, myreply.vRefNum);
  214.             printf("PathName: '%s'\n", myfullname);
  215.             }
  216.         }
  217.     }
  218.  
  219.  
  220. #ifdef NEVER_DEFINED
  221.  
  222. cd {src}lib
  223. C -mbg full -d STAND_ALONE_TOOL {active}
  224. Link -t "MPST" -c "MPS "        ∂
  225.     -o fullpath                    ∂
  226.     {active}.o                    ∂
  227.     {libraries}RunTime.o        ∂
  228.     {libraries}Interface.o        ∂
  229.     {Clibraries}StdCLib.o
  230.  
  231. fullpath -curdir
  232. PathName: 'Fire:MPW:src:lib:'
  233.  
  234. FullName: 'Fire:MPW:src:lib:chdir.c'
  235. PathName: 'Fire:MPW:src:lib:'
  236.  
  237.  
  238. FullName: 'Blue:MPW:Sources:basic:src:bas1.c.o'
  239. PathName: 'Blue:MPW:Sources:basic:src:'
  240.  
  241. #endif
  242.  
  243.  
  244. #endif STAND_ALONE_TOOL
  245.  
  246. #ifdef NEVER_DEFINED
  247.  
  248. char    *
  249. dirpathname(pathname, vrefnum, dirid)
  250. char        *pathname;
  251. int            vrefnum;
  252. long        dirid;
  253. {
  254. char            volname[32];
  255. HVolumeParam    pb;
  256. CInfoPBRec        cpb;
  257. WDPBRec            wpb;
  258. Str255            myname[256];
  259.  
  260.     pathname[0] = '\0';
  261.     
  262.     wpb.ioNamePtr = myname; myname[0] = '\0';
  263.     wpb.ioVRefNum = vrefnum;
  264.     wpb.ioWDIndex = 0;
  265.     wpb.ioWDProcID = (long) 0;
  266.     PBGetWDInfo(&wpb, FALSE);
  267.     
  268.     cpb.dirInfo.ioVRefNum = vrefnum;
  269.     cpb.dirInfo.ioNamePtr = myname; myname[0] = '\0';
  270.     cpb.dirInfo.ioDrDirID = dirid;
  271.     cpb.dirInfo.ioFDirIndex = -1;
  272.     PBGetCatInfo(&cpb, FALSE);
  273.     p2cstr(myname);
  274.     prepstr(pathname, myname);
  275.     
  276.     while (cpb.dirInfo.ioDrDirID != 2) {
  277.         cpb.dirInfo.ioDrDirID = cpb.dirInfo.ioDrParID;
  278.         cpb.dirInfo.ioNamePtr = myname; myname[0] = '\0';
  279.         cpb.dirInfo.ioFDirIndex = -1;
  280.         PBGetCatInfo(&cpb, FALSE);
  281.         p2cstr(myname);
  282.         prepstr(pathname, myname);
  283.         }
  284.     }
  285.  
  286. #endif
  287.