home *** CD-ROM | disk | FTP | other *** search
- /* generic.h: */
-
- #ifndef _GENERIC_H_
- #define _GENERIC_H_
-
- #include "cdrom.h"
-
- typedef unsigned long t_ulong;
- typedef unsigned short t_ushort;
- typedef unsigned char t_uchar;
- typedef int t_bool;
-
- typedef struct path_node *t_path_list;
-
- typedef enum protocol {
- PRO_UNKNOWN,
- PRO_ISO,
- PRO_HIGH_SIERRA,
- PRO_ROCK,
- PRO_HFS
- } t_protocol;
-
- typedef struct VOLUME {
- CDROM *cd; /* Pointer to CDROM structure */
- t_protocol protocol; /* Protocol used */
- struct handler *handler; /* Pointer to handler struct */
- void *vol_info; /* Depends on protocol */
- size_t vol_info_size; /* Size of vol_info structure */
- t_bool mixed_char_filenames; /* Filenames may contain upper
- and lower case characters */
- /* for use by the device handler: */
- #if 0
- t_bool valid; /* Is the volume valid? */
- #endif
- int locks; /* Number of locks on this vol. */
- int file_handles; /* Number of file handles on */
- /* this volume */
- } VOLUME;
-
- typedef struct CDROM_OBJ {
- t_bool directory_f; /* TRUE iff object is a directory */
- t_bool symlink_f; /* TRUE iff object is a symbolic link */
- VOLUME *volume; /* Pointer to volume node */
- unsigned long pos; /* Current position (for read & seek) */
- t_path_list pathlist; /* List containing full path name */
- void *obj_info; /* Depends on protocol */
- } CDROM_OBJ;
-
- typedef struct CDROM_INFO {
- t_bool directory_f; /* TRUE if object is a directory */
- t_bool symlink_f; /* TRUE if object is a symbolic link */
- int name_length; /* length of file name */
- char name[256]; /* file name */
- unsigned long date; /* creation date */
- unsigned long file_length; /* length of file */
- void *suppl_info; /* supplementary information */
- } CDROM_INFO;
-
- /* Codes: M=mandatory,
- * O=optional (may be NULL)
- */
-
- typedef struct handler {
- /*M*/ void (*close_vol_info)(VOLUME *);
- /*M*/ CDROM_OBJ *(*open_top_level_directory)(VOLUME *);
- /*M*/ CDROM_OBJ *(*open_obj_in_directory)(CDROM_OBJ *, char *);
- /*M*/ CDROM_OBJ *(*find_parent)(CDROM_OBJ *);
- /*M*/ void (*close_obj)(CDROM_OBJ *);
- /*M*/ int (*read_from_file)(CDROM_OBJ *, char *, int);
- /*M*/ t_bool (*cdrom_info)(CDROM_OBJ *, CDROM_INFO *);
- /*M*/ t_bool (*examine_next)(CDROM_OBJ *, CDROM_INFO *, unsigned long *);
- /*M*/ void *(*clone_obj_info)(void *);
- /*M*/ t_bool (*is_top_level_obj)(CDROM_OBJ *);
- /*M*/ t_bool (*same_objects)(CDROM_OBJ *, CDROM_OBJ *);
- /*O*/ t_ulong (*creation_date)(VOLUME *);
- /*M*/ t_ulong (*volume_size)(VOLUME *);
- /*M*/ void (*volume_id)(VOLUME *, char *, int);
- /*M*/ t_ulong (*location)(CDROM_OBJ *);
- /*M*/ t_ulong (*file_length)(CDROM_OBJ *);
- /*M*/ t_ulong (*block_size)(VOLUME *);
- } t_handler;
-
- #define ISOERR_NO_MEMORY 1 /* out of memory */
- #define ISOERR_SCSI_ERROR 2 /* scsi command return with err */
- #define ISOERR_NO_PVD 3 /* prim volume descr not found */
- #define ISOERR_ILLEGAL_NAME 4 /* illegal path name */
- #define ISOERR_NO_SUCH_RECORD 5 /* no such record in path table */
- #define ISOERR_NOT_FOUND 6 /* file not found */
- #define ISOERR_OFF_BOUNDS 7 /* bad seek operation */
- #define ISOERR_BAD_ARGUMENTS 8 /* bad arguments */
- #define ISOERR_IS_SYMLINK 9 /* cannot open symbolic links */
- #define ISOERR_INTERNAL 10 /* reason unknown */
-
- #define SEEK_FROM_START -1 /* values for */
- #define SEEK_FROM_CURRENT_POS 0 /* the 'Seek_Position' */
- #define SEEK_FROM_END 1 /* function */
-
- extern int iso_errno;
-
- t_protocol Which_Protocol (CDROM *p_cdrom, t_bool p_use_rock_ridge, int *p_skip,
- t_ulong *p_offset);
-
- VOLUME *Open_Volume (CDROM *p_cdrom, t_bool p_use_rock_ridge);
- void Close_Volume (VOLUME *p_volume);
-
- CDROM_OBJ *Open_Top_Level_Directory (VOLUME *p_volume);
- CDROM_OBJ *Open_Object (CDROM_OBJ *p_current_dir, char *p_path_name);
- void Close_Object (CDROM_OBJ *p_object);
-
- int Read_From_File (CDROM_OBJ *p_file, char *p_buffer, int p_buffer_length);
-
- int CDROM_Info (CDROM_OBJ *p_obj, CDROM_INFO *p_info);
- t_bool Examine_Next (CDROM_OBJ *p_dir, CDROM_INFO *p_info, unsigned long *p_offset);
-
- CDROM_OBJ *Clone_Object (CDROM_OBJ *p_object);
- CDROM_OBJ *Find_Parent (CDROM_OBJ *p_object);
-
- t_bool Is_Top_Level_Object (CDROM_OBJ *p_object);
-
- int Seek_Position (CDROM_OBJ *p_object, long p_offset, int p_mode);
-
- t_bool Same_Objects (CDROM_OBJ *p_object1, CDROM_OBJ *p_object2);
- t_ulong Volume_Creation_Date (VOLUME *p_volume);
- t_ulong Volume_Size (VOLUME *p_volume);
- t_ulong Block_Size (VOLUME *p_volume);
- void Volume_ID (VOLUME *p_volume, char *p_buffer, int p_buf_length);
- t_ulong Location (CDROM_OBJ *p_object);
- int Full_Path_Name (CDROM_OBJ *p_obj, char *p_buf, int p_buf_length);
-
- int Strncasecmp (char *p_str1, char *p_str2, int p_length);
-
- t_path_list Append_Path_List (t_path_list, char *);
- t_path_list Copy_Path_List (t_path_list, int);
- void Free_Path_List (t_path_list);
- t_bool Path_Name_From_Path_List (t_path_list, char*, int);
-
- #endif /* _GENERIC_H_ */
-