home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / CMDS / mtools_3.6.src.lzh / MTOOLS_3.6 / vfat.h < prev    next >
Text File  |  1997-11-12  |  2KB  |  103 lines

  1. #ifndef MTOOLS_VFAT_H
  2. #define MTOOLS_VFAT_H
  3.  
  4. #include "msdos.h"
  5. #include "stream.h"
  6.  
  7. /*
  8.  * VFAT-related common header file
  9.  */
  10.  
  11. #define VFAT_SUPPORT
  12.  
  13. struct unicode_char {
  14.     char lchar;
  15.     char uchar;
  16. };
  17.  
  18.  
  19. /* #define MAX_VFAT_SUBENTRIES 32 */ /* Theoretical max # of VSEs */
  20. #define MAX_VFAT_SUBENTRIES 20        /* Max useful # of VSEs */
  21. #define VSE_NAMELEN 13
  22.  
  23. #define VSE1SIZE 5
  24. #define VSE2SIZE 6
  25. #define VSE3SIZE 2
  26.  
  27. struct vfat_subentry {
  28.     unsigned char id;        /* 0x40 = last; & 0x1f = VSE ID */
  29.     struct unicode_char text1[VSE1SIZE] PACKED;
  30.     unsigned char attribute;    /* 0x0f for VFAT */
  31.     unsigned char hash1;        /* Always 0? */
  32.     unsigned char sum;        /* Checksum of short name */
  33.     struct unicode_char text2[VSE2SIZE] PACKED;
  34.     unsigned char sector_l;        /* 0 for VFAT */
  35.     unsigned char sector_u;        /* 0 for VFAT */
  36.     struct unicode_char text3[VSE3SIZE] PACKED;
  37. };
  38.  
  39. /* Enough size for a worst case number of full VSEs plus a null */
  40. #define VBUFSIZE ((MAX_VFAT_SUBENTRIES*VSE_NAMELEN) + 1)
  41.  
  42. /* Max legal length of a VFAT long name */
  43. #define MAX_VNAMELEN (255)
  44.  
  45. #define VSE_PRESENT 0x01
  46. #define VSE_LAST 0x40
  47. #define VSE_MASK 0x1f
  48.  
  49. struct vfat_state {
  50.     char name[VBUFSIZE];
  51.     int status; /* is now a bit map of 32 bits */
  52.     int subentries;
  53.     unsigned char sum; /* no need to remember the sum for each entry,
  54.                 * it is the same anyways */
  55. };
  56.  
  57.  
  58. struct scan_state {
  59.     int match_free;
  60.     int shortmatch;
  61.     int longmatch;
  62.     int free_start;
  63.     int free_size;
  64.     int slot;
  65.     int got_slots;
  66.     int size_needed;
  67.     int max_entry;
  68. };
  69.  
  70.  
  71. void clear_vfat(struct vfat_state  *);
  72. int check_vfat(struct vfat_state *v, struct directory *dir);
  73. int unicode_read(struct unicode_char *, char *, int num);
  74. int unicode_write(char *, struct unicode_char *, int num, int *end);
  75. unsigned char sum_shortname(char *);
  76. int write_vfat(Stream_t *, char *, char *, int);
  77. void clear_vses(Stream_t *, int, size_t);
  78. void autorename_short(char *, int);
  79. void autorename_long(char *, int);
  80.  
  81. int vfat_lookup(Stream_t *Dir,
  82.         struct directory *dir, int *entry,
  83.         int *beginpos,
  84.         const char *filename,
  85.         int flags, char *outname,
  86.         char *shortname, char *longname);
  87.  
  88. struct directory *dir_read(Stream_t *Stream,
  89.                struct directory *dir, 
  90.                int num, 
  91.                struct vfat_state *v);
  92.  
  93. #define DO_OPEN 1
  94. #define ACCEPT_NO_DOTS 0x4
  95. #define ACCEPT_PLAIN 0x20
  96. #define ACCEPT_DIR 0x10
  97. #define ACCEPT_LABEL 0x08
  98. #define SINGLE 2
  99. #define MATCH_ANY 0x40
  100. #define NO_MSG 0x80
  101. #define NO_DOTS 0x100
  102. #endif
  103.