home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / cdrom / amicdrom / src / generic.h < prev    next >
C/C++ Source or Header  |  1977-12-31  |  5KB  |  139 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.   struct DeviceList *devlist;        /* Associated DOS device list   */
  39. } VOLUME;
  40.  
  41. typedef struct CDROM_OBJ {
  42.   t_bool        directory_f;    /* TRUE iff object is a directory     */
  43.   t_bool        symlink_f;    /* TRUE iff object is a symbolic link */
  44.   VOLUME        *volume;    /* Pointer to volume node          */
  45.   unsigned long        pos;        /* Current position (for read & seek) */
  46.   t_path_list        pathlist;    /* List containing full path name     */
  47.   void            *obj_info;    /* Depends on protocol              */
  48. } CDROM_OBJ;
  49.  
  50. typedef struct CDROM_INFO {
  51.   t_bool        directory_f;    /* TRUE if object is a directory     */
  52.   t_bool        symlink_f;    /* TRUE if object is a symbolic link */
  53.   int            name_length;    /* length of file name             */
  54.   char            name[256];    /* file name                 */
  55.   unsigned long        date;        /* creation date             */
  56.   unsigned long        file_length;    /* length of file             */
  57.   void            *suppl_info;    /* supplementary information         */
  58. } CDROM_INFO;
  59.  
  60. /* Codes: M=mandatory,
  61.  *        O=optional (may be NULL)
  62.  */
  63.  
  64. typedef struct handler {
  65.   /*M*/ void      (*close_vol_info)(VOLUME *);
  66.   /*M*/ CDROM_OBJ *(*open_top_level_directory)(VOLUME *);
  67.   /*M*/ CDROM_OBJ *(*open_obj_in_directory)(CDROM_OBJ *, char *);
  68.   /*M*/ CDROM_OBJ *(*find_parent)(CDROM_OBJ *);
  69.   /*M*/ void      (*close_obj)(CDROM_OBJ *);
  70.   /*M*/ int      (*read_from_file)(CDROM_OBJ *, char *, int);
  71.   /*M*/ t_bool      (*cdrom_info)(CDROM_OBJ *, CDROM_INFO *);
  72.   /*M*/ t_bool      (*examine_next)(CDROM_OBJ *, CDROM_INFO *, unsigned long *);
  73.   /*M*/ void      *(*clone_obj_info)(void *);
  74.   /*M*/ t_bool      (*is_top_level_obj)(CDROM_OBJ *);
  75.   /*M*/ t_bool      (*same_objects)(CDROM_OBJ *, CDROM_OBJ *);
  76.   /*O*/    t_ulong      (*creation_date)(VOLUME *);
  77.   /*M*/ t_ulong   (*volume_size)(VOLUME *);
  78.   /*M*/ void      (*volume_id)(VOLUME *, char *, int);
  79.   /*M*/ t_ulong      (*location)(CDROM_OBJ *);
  80.   /*M*/ t_ulong      (*file_length)(CDROM_OBJ *);
  81.   /*M*/ t_ulong   (*block_size)(VOLUME *);
  82. } t_handler;
  83.  
  84. #define ISOERR_NO_MEMORY        1       /* out of memory                */
  85. #define ISOERR_SCSI_ERROR       2       /* scsi command return with err */
  86. #define ISOERR_NO_PVD           3       /* prim volume descr not found  */
  87. #define ISOERR_ILLEGAL_NAME     4       /* illegal path name            */
  88. #define ISOERR_NO_SUCH_RECORD   5       /* no such record in path table */
  89. #define ISOERR_NOT_FOUND        6       /* file not found               */
  90. #define ISOERR_OFF_BOUNDS       7       /* bad seek operation           */
  91. #define ISOERR_BAD_ARGUMENTS    8       /* bad arguments                */
  92. #define ISOERR_IS_SYMLINK       9       /* cannot open symbolic links   */
  93. #define ISOERR_INTERNAL        10       /* reason unknown               */
  94.  
  95. #define SEEK_FROM_START         -1      /* values for                   */
  96. #define SEEK_FROM_CURRENT_POS   0       /* the 'Seek_Position'          */
  97. #define SEEK_FROM_END           1       /* function                     */
  98.  
  99. extern int iso_errno;
  100.  
  101. t_protocol Which_Protocol (CDROM *p_cdrom, t_bool p_use_rock_ridge, int *p_skip,
  102.                t_ulong *p_offset);
  103.  
  104. VOLUME *Open_Volume (CDROM *p_cdrom, t_bool p_use_rock_ridge);
  105. void Close_Volume (VOLUME *p_volume);
  106.  
  107. CDROM_OBJ *Open_Top_Level_Directory (VOLUME *p_volume);
  108. CDROM_OBJ *Open_Object (CDROM_OBJ *p_current_dir, char *p_path_name);
  109. void Close_Object (CDROM_OBJ *p_object);
  110.  
  111. int Read_From_File (CDROM_OBJ *p_file, char *p_buffer, int p_buffer_length);
  112.  
  113. int CDROM_Info (CDROM_OBJ *p_obj, CDROM_INFO *p_info);
  114. t_bool Examine_Next (CDROM_OBJ *p_dir, CDROM_INFO *p_info, unsigned long *p_offset);
  115.  
  116. CDROM_OBJ *Clone_Object (CDROM_OBJ *p_object);
  117. CDROM_OBJ *Find_Parent (CDROM_OBJ *p_object);
  118.  
  119. t_bool Is_Top_Level_Object (CDROM_OBJ *p_object);
  120.  
  121. int Seek_Position (CDROM_OBJ *p_object, long p_offset, int p_mode);
  122.  
  123. t_bool Same_Objects (CDROM_OBJ *p_object1, CDROM_OBJ *p_object2);
  124. t_ulong Volume_Creation_Date (VOLUME *p_volume);
  125. t_ulong Volume_Size (VOLUME *p_volume);
  126. t_ulong Block_Size (VOLUME *p_volume);
  127. void Volume_ID (VOLUME *p_volume, char *p_buffer, int p_buf_length);
  128. t_ulong Location (CDROM_OBJ *p_object);
  129. int Full_Path_Name (CDROM_OBJ *p_obj, char *p_buf, int p_buf_length);
  130.  
  131. int Strncasecmp (char *p_str1, char *p_str2, int p_length);
  132.  
  133. t_path_list Append_Path_List (t_path_list, char *);
  134. t_path_list Copy_Path_List (t_path_list, int);
  135. void Free_Path_List (t_path_list);
  136. t_bool Path_Name_From_Path_List (t_path_list, char*, int);
  137.  
  138. #endif /* _GENERIC_H_ */
  139.