#ifndef CDIO_XA_H_
#define CDIO_XA_H_
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
ISO_XA_MARKER_OFFSET = 1024,
XA_PERM_RSYS = (1 << 0),
XA_PERM_XSYS = (1 << 2),
XA_PERM_RUSR = (1 << 0),
XA_PERM_XUSR = (1 << 2),
XA_PERM_RGRP = (1 << 4),
XA_PERM_XGRP = (1 << 6),
XA_PERM_ROTH = (1 << 8),
XA_PERM_XOTH = (1 << 10),
XA_ATTR_MODE2FORM1 = (1 << 11),
XA_ATTR_MODE2FORM2 = (1 << 12),
XA_ATTR_INTERLEAVED = (1 << 13),
XA_ATTR_CDDA = (1 << 14),
XA_ATTR_DIRECTORY = (1 << 15),
XA_PERM_ALL_READ = (XA_PERM_RUSR | XA_PERM_RGRP | XA_PERM_ROTH),
XA_PERM_ALL_EXEC = (XA_PERM_XUSR | XA_PERM_XGRP | XA_PERM_XOTH),
XA_PERM_ALL_ALL = (XA_PERM_ALL_READ | XA_PERM_ALL_EXEC),
XA_FORM1_DIR = (XA_ATTR_DIRECTORY | XA_ATTR_MODE2FORM1 | XA_PERM_ALL_ALL),
XA_FORM1_FILE = (XA_ATTR_MODE2FORM1 | XA_PERM_ALL_ALL),
XA_FORM2_FILE = (XA_ATTR_MODE2FORM2 | XA_PERM_ALL_ALL)
} xa_misc_enum_t;
extern const char ISO_XA_MARKER_STRING[sizeof("CD-XA001")-1];
#define ISO_XA_MARKER_STRING "CD-XA001"
typedef struct iso9660_xa_s
{
uint16_t group_id;
uint16_t user_id;
uint16_t attributes;
char signature[2];
uint8_t filenum;
uint8_t reserved[5];
} GNUC_PACKED iso9660_xa_t;
posix_mode_t iso9660_get_posix_filemode_from_xa(uint16_t i_perms);
const char *
iso9660_get_xa_attr_str (uint16_t xa_attr);
iso9660_xa_t *
iso9660_xa_init (iso9660_xa_t *_xa, uint16_t uid, uint16_t gid, uint16_t attr,
uint8_t filenum);
void
iso9660_xa_free (iso9660_xa_t *_xa);
#ifdef __cplusplus
}
extern xa_misc_enum_t debugger_xa_misc_enum;
#endif
#endif