home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / disk / cdrom / amicdfs / src / generic.h < prev    next >
C/C++ Source or Header  |  1995-02-27  |  4KB  |  110 lines

  1. /* generic.h: */
  2.  
  3. #ifndef _GENERIC_H_
  4. #define _GENERIC_H_
  5.  
  6. typedef unsigned long t_ulong;
  7. typedef unsigned short t_ushort;
  8. typedef unsigned char t_uchar;
  9. typedef int t_bool;
  10.  
  11. typedef enum protocol {
  12.   PRO_UNKNOWN,
  13.   PRO_ISO,
  14.   PRO_HIGH_SIERRA,
  15.   PRO_ROCK,
  16.   PRO_HFS
  17. } t_protocol;
  18.  
  19. typedef struct VOLUME {
  20.   CDROM         *cd;            /* Pointer to CDROM structure    */
  21.   t_protocol     protocol;        /* Protocol used        */
  22.   struct handler *handler;        /* Pointer to handler struct    */
  23.   void         *vol_info;        /* Depends on protocol        */
  24.   size_t     vol_info_size;        /* Size of vol_info structure    */
  25. } VOLUME;
  26.  
  27. typedef struct CDROM_OBJ {
  28.   t_bool        directory_f;    /* TRUE iff object is a directory     */
  29.   t_bool        symlink_f;    /* TRUE iff object is a symbolic link */
  30.   struct handler *handler;        /* Pointer to handler struct    */
  31.   unsigned long        pos;        /* Current position (for read & seek) */
  32.   void            *obj_info;    /* Depends on protocol              */
  33. } CDROM_OBJ;
  34.  
  35. typedef struct CDROM_INFO {
  36.   t_bool        directory_f;    /* TRUE if object is a directory     */
  37.   t_bool        symlink_f;    /* TRUE if object is a symbolic link */
  38.   int            name_length;    /* length of file name             */
  39.   char            name[256];    /* file name                 */
  40.   unsigned long        date;        /* creation date             */
  41.   unsigned long        file_length;    /* length of file             */
  42.   void            *suppl_info;    /* supplementary information         */
  43. } CDROM_INFO;
  44.  
  45. /* Codes: M=mandatory,
  46.  *        O=optional (may be NULL)
  47.  */
  48.  
  49. typedef struct handler {
  50.   /*M*/ void      (*close_vol_info)(VOLUME *);
  51.   /*M*/ CDROM_OBJ *(*open_top_level_directory)(VOLUME *);
  52.   /*M*/ CDROM_OBJ *(*open_obj_in_directory)(VOLUME *,CDROM_OBJ *, char *);
  53.   /*M*/ CDROM_OBJ *(*find_parent)(VOLUME *,CDROM_OBJ *);
  54.   /*M*/ void      (*close_obj)(CDROM_OBJ *);
  55.   /*M*/ int      (*read_from_file)(VOLUME *,CDROM_OBJ *, char *, int);
  56.   /*M*/ LONG      (*cdrom_info)(VOLUME *,CDROM_OBJ *, CDROM_INFO *);
  57.   /*M*/ LONG      (*examine_next)(VOLUME *,CDROM_OBJ *, CDROM_INFO *, unsigned long *);
  58.   /*M*/ void      *(*clone_obj_info)(void *);
  59.   /*M*/ t_bool      (*is_top_level_obj)(VOLUME *,CDROM_OBJ *);
  60.   /*M*/ t_bool      (*same_objects)(CDROM_OBJ *, CDROM_OBJ *);
  61.   /*O*/    t_ulong      (*creation_date)(VOLUME *);
  62.   /*M*/ t_ulong   (*volume_size)(VOLUME *);
  63.   /*M*/ t_ulong   (*volume_free)(VOLUME *);
  64.   /*M*/ void      (*volume_id)(VOLUME *, char *, int);
  65.   /*M*/ t_ulong      (*location)(VOLUME *,CDROM_OBJ *);
  66.   /*M*/ t_ulong      (*file_length)(CDROM_OBJ *);
  67.   /*M*/ t_ulong   (*block_size)(VOLUME *);
  68. } t_handler;
  69.  
  70. #define ISOERR_NO_PVD           3       /* prim volume descr not found  */
  71. #define ISOERR_ILLEGAL_NAME     ERROR_INVALID_COMPONENT_NAME       /* illegal path name            */
  72. #define ISOERR_NO_SUCH_RECORD   5       /* no such record in path table */
  73. #define ISOERR_NOT_FOUND        ERROR_OBJECT_NOT_FOUND       /* file not found               */
  74. #define ISOERR_BAD_ARGUMENTS    8       /* bad arguments                */
  75. #define ISOERR_IS_SYMLINK       ERROR_IS_SOFT_LINK       /* cannot open symbolic links   */
  76. #define ISOERR_INTERNAL        10       /* reason unknown               */
  77.  
  78.  
  79.  
  80. VOLUME *Open_Volume (CDROM *p_cdrom, t_bool lowercase);
  81. void Close_Volume (VOLUME *p_volume);
  82.  
  83. CDROM_OBJ *Open_Top_Level_Directory (VOLUME *p_volume);
  84. CDROM_OBJ *Open_Object (VOLUME *p_volume,CDROM_OBJ *p_current_dir, char *p_path_name);
  85. void Close_Object (CDROM_OBJ *p_object);
  86.  
  87. int Read_From_File (VOLUME *p_volume,CDROM_OBJ *p_file, char *p_buffer, int p_buffer_length);
  88.  
  89. LONG CDROM_Info (VOLUME *p_volume,CDROM_OBJ *p_obj, CDROM_INFO *p_info);
  90. LONG Examine_Next (VOLUME *p_volume,CDROM_OBJ *p_dir, CDROM_INFO *p_info, unsigned long *p_offset);
  91.  
  92. CDROM_OBJ *Clone_Object (CDROM_OBJ *p_object);
  93. CDROM_OBJ *Find_Parent (VOLUME *p_volume,CDROM_OBJ *p_object);
  94.  
  95. t_bool Is_Top_Level_Object (VOLUME *p_volume,CDROM_OBJ *p_object);
  96.  
  97. LONG Seek_Position (CDROM_OBJ *p_object, long p_offset, int p_mode);
  98.  
  99. t_bool Same_Objects (CDROM_OBJ *p_object1, CDROM_OBJ *p_object2);
  100. t_ulong Volume_Creation_Date (VOLUME *p_volume);
  101. t_ulong Volume_Size (VOLUME *p_volume);
  102. t_ulong Volume_Free (VOLUME *p_volume);
  103. t_ulong Block_Size (VOLUME *p_volume);
  104. void Volume_ID (VOLUME *p_volume, char *p_buffer, int p_buf_length);
  105. t_ulong Location (VOLUME *p_volume,CDROM_OBJ *p_object);
  106. int Full_Path_Name (VOLUME *p_volume,CDROM_OBJ *p_obj, char *p_buf, int p_buf_length);
  107.  
  108.  
  109. #endif /* _GENERIC_H_ */
  110.