home *** CD-ROM | disk | FTP | other *** search
/ Inside Multimedia 1995 July / IMM0795.ISO / share / tools / freeman / disk1 / fpath.h_ / fpath
Text File  |  1995-02-01  |  5KB  |  256 lines

  1. #define __FPATH_H
  2.  
  3.  
  4. #ifndef __IO_H
  5. #include "io.h"
  6. #endif
  7. #ifndef __DOS_H
  8. #include "dos.h"
  9. #endif
  10. #ifndef __STRING_H
  11. #include "string.h"
  12. #endif
  13. #ifndef __DSTRING_H
  14. #include "dstring.h"
  15. #endif
  16.  
  17.  
  18. #undef enable             /* we don't need the macro enable & disable in dos.h */
  19.  
  20. #undef disable
  21.  
  22.  
  23. #ifdef _MSC_VER                                                   /* microsoft */
  24. #undef  isborland
  25. #else                                                               /* borland */
  26. #define isborland
  27. #endif
  28.  
  29.  
  30. #ifdef isborland
  31.  
  32. typedef  find_t ffbuf; 
  33.  
  34. enum
  35. {
  36.    ffarch   = FA_ARCH,
  37.    ffdirec  = FA_DIREC,
  38.    ffhidden = FA_HIDDEN,
  39.    ffsystem = FA_SYSTEM,
  40.    ffrdonly = FA_RDONLY,
  41.    ffnormal = FA_NORMAL
  42. };
  43.  
  44. #else
  45.  
  46. typedef _find_t ffbuf;
  47.  
  48. enum
  49. {
  50.    ffarch   = _A_ARCH,
  51.    ffdirec  = _A_SUBDIR,
  52.    ffhidden = _A_HIDDEN,
  53.    ffsystem = _A_SYSTEM,
  54.    ffrdonly = _A_RDONLY,
  55.    ffnormal = _A_NORMAL
  56. };
  57.                              /* MS didn't define ftime. we copy borland's io.h */
  58. struct ftime
  59. {          
  60.    unsigned    ft_tsec  : 5;   /* Two second interval */
  61.    unsigned    ft_min   : 6;   /* Minutes */
  62.    unsigned    ft_hour  : 5;   /* Hours */
  63.    unsigned    ft_day   : 5;   /* Days */
  64.    unsigned    ft_month : 4;   /* Months */
  65.    unsigned    ft_year  : 7;   /* Year */
  66. };
  67.  
  68. #endif
  69.  
  70. typedef unsigned int UINT;
  71.  
  72.  
  73. class varpath;
  74.  
  75.  
  76. class abspath                                                 /* abstract path */
  77. {
  78.    public: 
  79.  
  80.    enum
  81.    {
  82.       maxpath = 128, maxdrive = 4, maxdir = 128, maxfile = 15, maxext = 5
  83.    };
  84.  
  85.    virtual char *getbuf() = 0;
  86.  
  87.    operator char*()
  88.    {
  89.       return getbuf();
  90.    }
  91.    char operator[](int i)
  92.    {
  93.       return getbuf()[i];
  94.    }
  95.    int del();
  96.    int chdir();
  97.    int mkdir();
  98.    int rmdir();
  99.    int chkdll();
  100.    int chsize(long l);
  101.    int access(int amode);
  102.    int rename(abspath &x);
  103.    int chkroot();
  104.    int chkexist();
  105.    int chkcanwrite();
  106.    int chkdiroccupied();
  107.    int multimkdir();
  108.    int getdad(varpath *dad);
  109.    int getd(varpath *d);
  110.    int getf(varpath *f);
  111.    int tostd(varpath *path);
  112.    int gettime(ftime *ft);
  113.    int settime(ftime &ft);
  114.    int chksame(abspath &x);
  115.    int comparetime(abspath &y);
  116.    int setfileattr(UINT flags);
  117.    int getfileattr(UINT *flags);
  118.    int findfirst(int flags, ffbuf *b);
  119.    int findnext(ffbuf *b);
  120.    void get(char path[]);
  121.    void getf(char f[]);
  122.    long getsize();
  123.    long locatestr(char s[]);
  124.  
  125.    #ifdef isborland
  126.    static struct  find_t fs;
  127.    #else
  128.    static struct _find_t fs;
  129.    #endif
  130.  
  131.    static int gethftime(int h, ftime *ft);
  132.    static int sethftime(int h, ftime &ft);
  133. };
  134.  
  135. class conpath;
  136.  
  137. class varpath:public abspath                                  /* variable path */
  138. {
  139.    public:
  140.  
  141.    virtual int set(char b[]) = 0;
  142.  
  143.    int tostd()
  144.    {
  145.       return abspath::tostd(this);
  146.    }
  147.    int setcwd();
  148.    int gethome();
  149.    int setroot(int drv);
  150.    int setdirwin();
  151.    int setdirsys();
  152.    int merge(char d[], char f[]);
  153.    int merge(abspath &d, abspath &f);
  154.    int rplfile(char f[]);
  155.    int rplfile(abspath &f);
  156.    int setlastc(char c);
  157.    int tmpindir(abspath &d, char prefix[]);
  158.    int tmpinsamedir(abspath &path, char prefix[]);
  159. };
  160.  
  161. class dynpath:public varpath                 /* variable path with dynamic buf */
  162. {
  163.    dstring s;
  164.  
  165.    public:
  166.  
  167.    dynpath()
  168.    {
  169.  
  170.    }
  171.    dynpath(char b[])
  172.    {
  173.       set(b);
  174.    }
  175.    int set(char b[])
  176.    {
  177.       return s.set(b);
  178.    }
  179.    int set(int n)
  180.    {
  181.       return s.set(n);
  182.    }
  183.    int getlen()
  184.    {
  185.       return s.getlen();
  186.    } 
  187.    char *getbuf()
  188.    {
  189.       return s;
  190.    }
  191. };
  192.  
  193. class borpath:public varpath                /* variable path with borrowed buf */
  194. {
  195.    char *s;                                 /* the buffer must be large enough */
  196.  
  197.    public:
  198.  
  199.    borpath(char sx[])
  200.    {
  201.       s = sx;
  202.    }
  203.    int set(char b[])
  204.    {
  205.       strcpy(s, b);
  206.  
  207.       return 1;
  208.    } 
  209.    char *getbuf()
  210.    {
  211.       return s;
  212.    }
  213. };
  214.  
  215. class stcpath:public varpath                  /* variable path with static buf */
  216. {
  217.    char s[maxpath];
  218.  
  219.    public:
  220.  
  221.    stcpath()
  222.    {
  223.       s[0] = '\0';
  224.    }
  225.    stcpath(char b[])
  226.    {
  227.       set(b);
  228.    }
  229.    int set(char b[])
  230.    {
  231.       strcpy(s, b);
  232.  
  233.       return 1;
  234.    } 
  235.    char *getbuf()
  236.    {
  237.       return s;
  238.    }
  239. };
  240.  
  241. class conpath:public abspath                     /* constant (invariable) path */
  242. {
  243.    char *s;
  244.  
  245.    public:
  246.  
  247.    conpath(char b[])
  248.    {
  249.       s = b;
  250.    }
  251.    char *getbuf()
  252.    {
  253.       return s;
  254.    }
  255. };
  256.