home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / cdrom / amicdrom / src / cdrom.h < prev    next >
C/C++ Source or Header  |  1977-12-31  |  3KB  |  104 lines

  1. /* cdrom.h: */
  2.  
  3. #ifndef _CDROM_H_
  4. #define _CDROM_H_
  5.  
  6. #include <exec/types.h>
  7. #include <exec/memory.h>
  8. #include <exec/io.h>
  9. #include <devices/scsidisk.h>
  10.  
  11. #define VERSION "CDROM-Handler 1.15 (03.11.94)"
  12.  
  13. #define SCSI_BUFSIZE 2048
  14.  
  15. typedef enum model {
  16.   MODEL_ANY,
  17.   MODEL_TOSHIBA_3401,
  18.   MODEL_CDU_8002,
  19. } t_model;
  20.  
  21. typedef struct CDROM {
  22.   unsigned char     *buffer;
  23.   unsigned char        **buffers;
  24.   unsigned char     *buffer_data;
  25.   unsigned char        sense[20];
  26.   short            scsi_compliance; /* 1 or 2 */
  27.   t_model        model;
  28.   short            use_trackdisk;
  29.   short            lun;
  30.   short            std_buffers;
  31.   short            file_buffers;
  32.   unsigned long        t_changeint;
  33.   unsigned long        t_changeint2;
  34.   long             *current_sectors;
  35.   unsigned long        *last_used;
  36.   unsigned long        tick;
  37.   struct MsgPort     *port;
  38.   struct IOStdReq    *scsireq;
  39.   struct SCSICmd    cmd;
  40.   unsigned short    block_length;
  41.   unsigned short    blocking_factor;
  42.   short            device_open;
  43. } CDROM;
  44.  
  45. typedef struct inquiry_data {
  46.   char        peripheral_type;
  47.   char        modifier;
  48.   char        version;
  49.   char        flags1;
  50.   char        additional_length;
  51.   char        reserved[2];
  52.   char        flags2;
  53.   char        vendor[8];
  54.   char        product[16];
  55.   char        revision[4];
  56. } t_inquiry_data;
  57.  
  58. typedef struct toc_header {
  59.   unsigned short length;
  60.   unsigned char  first_track;
  61.   unsigned char  last_track;
  62. } t_toc_header;
  63.  
  64. typedef struct toc_data {
  65.   char        reserved1;
  66.   unsigned char flags;
  67.   unsigned char    track_number;
  68.   char        reserved2;
  69.   unsigned long address;
  70. } t_toc_data;
  71.  
  72. CDROM *Open_CDROM (char *p_device, int p_scsi_id, int p_use_trackdisk,
  73.            unsigned long p_memory_type, int p_std_buffers,
  74.            int p_file_buffers);
  75. int Read_Sector (CDROM *p_cd, long p_sector);
  76. int Read_Contiguous_Sectors (CDROM *p_cd, long p_sector, long p_last_sector);
  77. void Cleanup_CDROM (CDROM *p_cd);
  78. int Test_Unit_Ready (CDROM *p_cd);
  79. int Mode_Select (CDROM *p_cd, int p_on, int p_block_length);
  80. int Inquire (CDROM *p_cd, t_inquiry_data *p_data);
  81. int Is_XA_Mode_Disk (CDROM *p_cd);
  82. t_toc_data *Read_TOC (CDROM *p_cd, t_toc_header *p_toc_header);
  83. int Has_Audio_Tracks (CDROM *p_cd);
  84. int Data_Tracks (CDROM *p_cd, unsigned long** p_buf);
  85. int Start_Play_Audio (CDROM *p_cd);
  86. int Stop_Play_Audio (CDROM *p_cd);
  87. int Block_Length (CDROM *p_cd);
  88. void Clear_Sector_Buffers (CDROM *p_cd);
  89. int Find_Last_Session (CDROM *p_cd, unsigned long *p_result);
  90.  
  91. extern int g_cdrom_errno;
  92. extern int g_ignore_blocklength;
  93.  
  94. enum {
  95.   CDROMERR_OK = 0,    /* no error            */
  96.   CDROMERR_NO_MEMORY,    /* out of memory        */
  97.   CDROMERR_MSGPORT,    /* cannot create message port    */
  98.   CDROMERR_IOREQ,    /* cannot create I/O request    */
  99.   CDROMERR_DEVICE,    /* cannot open scsi device    */
  100.   CDROMERR_BLOCKSIZE    /* illegal blocksize        */
  101. };
  102.  
  103. #endif /* _CDROM_H_ */
  104.