home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / new / disk / cdrom / amicdrom / generic.h < prev    next >
C/C++ Source or Header  |  1994-05-21  |  5KB  |  138 lines

  1. /* generic.h: */
  2.  
  3. #ifndef _GENERIC_H_
  4. #define _GENERIC_H_
  5.  
  6. #include "cdrom.h"
  7.  
  8. typedef unsigned long t_ulong;
  9. typedef unsigned short t_ushort;
  10. typedef unsigned char t_uchar;
  11. typedef int t_bool;
  12.  
  13. typedef struct path_node *t_path_list;
  14.  
  15. typedef enum protocol {
  16.   PRO_UNKNOWN,
  17.   PRO_ISO,
  18.   PRO_HIGH_SIERRA,
  19.   PRO_ROCK,
  20.   PRO_HFS
  21. } t_protocol;
  22.  
  23. typedef struct VOLUME {
  24.   CDROM         *cd;            /* Pointer to CDROM structure    */
  25.   t_protocol     protocol;        /* Protocol used        */
  26.   struct handler *handler;        /* Pointer to handler struct    */
  27.   void         *vol_info;        /* Depends on protocol        */
  28.   size_t     vol_info_size;        /* Size of vol_info structure    */
  29.   t_bool     mixed_char_filenames;    /* Filenames may contain upper
  30.                          and lower case characters    */
  31.   /* for use by the device handler: */
  32. #if 0
  33.   t_bool     valid;            /* Is the volume valid?        */
  34. #endif
  35.   int         locks;            /* Number of locks on this vol. */
  36.   int         file_handles;        /* Number of file handles on    */
  37.                       /* this volume            */
  38. } VOLUME;
  39.  
  40. typedef struct CDROM_OBJ {
  41.   t_bool        directory_f;    /* TRUE iff object is a directory     */
  42.   t_bool        symlink_f;    /* TRUE iff object is a symbolic link */
  43.   VOLUME        *volume;    /* Pointer to volume node          */
  44.   unsigned long        pos;        /* Current position (for read & seek) */
  45.   t_path_list        pathlist;    /* List containing full path name     */
  46.   void            *obj_info;    /* Depends on protocol              */
  47. } CDROM_OBJ;
  48.  
  49. typedef struct CDROM_INFO {
  50.   t_bool        directory_f;    /* TRUE if object is a directory     */
  51.   t_bool        symlink_f;    /* TRUE if object is a symbolic link */
  52.   int            name_length;    /* length of file name             */
  53.   char            name[256];    /* file name                 */
  54.   unsigned long        date;        /* creation date             */
  55.   unsigned long        file_length;    /* length of file             */
  56.   void            *suppl_info;    /* supplementary information         */
  57. } CDROM_INFO;
  58.  
  59. /* Codes: M=mandatory,
  60.  *        O=optional (may be NULL)
  61.  */
  62.  
  63. typedef struct handler {
  64.   /*M*/ void      (*close_vol_info)(VOLUME *);
  65.   /*M*/ CDROM_OBJ *(*open_top_level_directory)(VOLUME *);
  66.   /*M*/ CDROM_OBJ *(*open_obj_in_directory)(CDROM_OBJ *, char *);
  67.   /*M*/ CDROM_OBJ *(*find_parent)(CDROM_OBJ *);
  68.   /*M*/ void      (*close_obj)(CDROM_OBJ *);
  69.   /*M*/ int      (*read_from_file)(CDROM_OBJ *, char *, int);
  70.   /*M*/ t_bool      (*cdrom_info)(CDROM_OBJ *, CDROM_INFO *);
  71.   /*M*/ t_bool      (*examine_next)(CDROM_OBJ *, CDROM_INFO *, unsigned long *);
  72.   /*M*/ void      *(*clone_obj_info)(void *);
  73.   /*M*/ t_bool      (*is_top_level_obj)(CDROM_OBJ *);
  74.   /*M*/ t_bool      (*same_objects)(CDROM_OBJ *, CDROM_OBJ *);
  75.   /*O*/    t_ulong      (*creation_date)(VOLUME *);
  76.   /*M*/ t_ulong   (*volume_size)(VOLUME *);
  77.   /*M*/ void      (*volume_id)(VOLUME *, char *, int);
  78.   /*M*/ t_ulong      (*location)(CDROM_OBJ *);
  79.   /*M*/ t_ulong      (*file_length)(CDROM_OBJ *);
  80.   /*M*/ t_ulong   (*block_size)(VOLUME *);
  81. } t_handler;
  82.  
  83. #define ISOERR_NO_MEMORY        1       /* out of memory                */
  84. #define ISOERR_SCSI_ERROR       2       /* scsi command return with err */
  85. #define ISOERR_NO_PVD           3       /* prim volume descr not found  */
  86. #define ISOERR_ILLEGAL_NAME     4       /* illegal path name            */
  87. #define ISOERR_NO_SUCH_RECORD   5       /* no such record in path table */
  88. #define ISOERR_NOT_FOUND        6       /* file not found               */
  89. #define ISOERR_OFF_BOUNDS       7       /* bad seek operation           */
  90. #define ISOERR_BAD_ARGUMENTS    8       /* bad arguments                */
  91. #define ISOERR_IS_SYMLINK       9       /* cannot open symbolic links   */
  92. #define ISOERR_INTERNAL        10       /* reason unknown               */
  93.  
  94. #define SEEK_FROM_START         -1      /* values for                   */
  95. #define SEEK_FROM_CURRENT_POS   0       /* the 'Seek_Position'          */
  96. #define SEEK_FROM_END           1       /* function                     */
  97.  
  98. extern int iso_errno;
  99.  
  100. t_protocol Which_Protocol (CDROM *p_cdrom, t_bool p_use_rock_ridge, int *p_skip,
  101.                t_ulong *p_offset);
  102.  
  103. VOLUME *Open_Volume (CDROM *p_cdrom, t_bool p_use_rock_ridge);
  104. void Close_Volume (VOLUME *p_volume);
  105.  
  106. CDROM_OBJ *Open_Top_Level_Directory (VOLUME *p_volume);
  107. CDROM_OBJ *Open_Object (CDROM_OBJ *p_current_dir, char *p_path_name);
  108. void Close_Object (CDROM_OBJ *p_object);
  109.  
  110. int Read_From_File (CDROM_OBJ *p_file, char *p_buffer, int p_buffer_length);
  111.  
  112. int CDROM_Info (CDROM_OBJ *p_obj, CDROM_INFO *p_info);
  113. t_bool Examine_Next (CDROM_OBJ *p_dir, CDROM_INFO *p_info, unsigned long *p_offset);
  114.  
  115. CDROM_OBJ *Clone_Object (CDROM_OBJ *p_object);
  116. CDROM_OBJ *Find_Parent (CDROM_OBJ *p_object);
  117.  
  118. t_bool Is_Top_Level_Object (CDROM_OBJ *p_object);
  119.  
  120. int Seek_Position (CDROM_OBJ *p_object, long p_offset, int p_mode);
  121.  
  122. t_bool Same_Objects (CDROM_OBJ *p_object1, CDROM_OBJ *p_object2);
  123. t_ulong Volume_Creation_Date (VOLUME *p_volume);
  124. t_ulong Volume_Size (VOLUME *p_volume);
  125. t_ulong Block_Size (VOLUME *p_volume);
  126. void Volume_ID (VOLUME *p_volume, char *p_buffer, int p_buf_length);
  127. t_ulong Location (CDROM_OBJ *p_object);
  128. int Full_Path_Name (CDROM_OBJ *p_obj, char *p_buf, int p_buf_length);
  129.  
  130. int Strncasecmp (char *p_str1, char *p_str2, int p_length);
  131.  
  132. t_path_list Append_Path_List (t_path_list, char *);
  133. t_path_list Copy_Path_List (t_path_list, int);
  134. void Free_Path_List (t_path_list);
  135. t_bool Path_Name_From_Path_List (t_path_list, char*, int);
  136.  
  137. #endif /* _GENERIC_H_ */
  138.