home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 4 / FreshFish_May-June1994.bin / useful / dist / disk / cdrom / amicdrom / cdrom.h < prev    next >
C/C++ Source or Header  |  1994-04-28  |  3KB  |  106 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. #ifndef _DCC
  12. #define __unaligned /* empty */
  13. #endif
  14.  
  15. #define VERSION "CDROM-Handler 1.10 (28.04.94)"
  16.  
  17. #define SCSI_BUFSIZE 2048
  18.  
  19. typedef enum drive_type {
  20.   DRIVE_ANY,
  21.   DRIVE_TOSHIBA_3401,
  22.   DRIVE_SCSI_2
  23. } t_drive_type;
  24.  
  25. typedef struct CDROM {
  26.   unsigned char     *buffer;
  27.   unsigned char        **buffers;
  28.   unsigned char     *buffer_data;
  29.   unsigned char        sense[20];
  30.   t_drive_type        drive_type;
  31.   short            use_trackdisk;
  32.   short            lun;
  33.   short            std_buffers;
  34.   short            file_buffers;
  35.   unsigned long        t_changeint;
  36.   unsigned long        t_changeint2;
  37.   long             *current_sectors;
  38.   unsigned long        *last_used;
  39.   unsigned long        tick;
  40.   struct MsgPort     *port;
  41.   struct IOStdReq    *scsireq;
  42.   struct SCSICmd    cmd;
  43.   unsigned short    block_length;
  44.   unsigned short    blocking_factor;
  45.   short            device_open;
  46. } CDROM;
  47.  
  48. typedef __unaligned struct inquiry_data {
  49.   char        peripheral_type;
  50.   char        modifier;
  51.   char        version;
  52.   char        flags1;
  53.   char        additional_length;
  54.   char        reserved[2];
  55.   char        flags2;
  56.   char        vendor[8];
  57.   char        product[16];
  58.   char        revision[4];
  59. } t_inquiry_data;
  60.  
  61. typedef __unaligned struct toc_header {
  62.   unsigned short length;
  63.   unsigned char  first_track;
  64.   unsigned char  last_track;
  65. } t_toc_header;
  66.  
  67. typedef __unaligned struct toc_data {
  68.   char        reserved1;
  69.   unsigned char flags;
  70.   unsigned char    track_number;
  71.   char        reserved2;
  72.   unsigned long address;
  73. } t_toc_data;
  74.  
  75. CDROM *Open_CDROM (char *p_device, int p_scsi_id, int p_use_trackdisk,
  76.            unsigned long p_memory_type, int p_std_buffers,
  77.            int p_file_buffers);
  78. int Read_Sector (CDROM *p_cd, long p_sector);
  79. int Read_Contiguous_Sectors (CDROM *p_cd, long p_sector, long p_last_sector);
  80. void Cleanup_CDROM (CDROM *p_cd);
  81. int Test_Unit_Ready (CDROM *p_cd);
  82. int Mode_Select (CDROM *p_cd, int p_on, int p_block_length);
  83. int Inquire (CDROM *p_cd, t_inquiry_data *p_data);
  84. int Is_XA_Mode_Disk (CDROM *p_cd);
  85. t_toc_data *Read_TOC (CDROM *p_cd, t_toc_header *p_toc_header);
  86. int Has_Audio_Tracks (CDROM *p_cd);
  87. int Data_Tracks (CDROM *p_cd, unsigned long** p_buf);
  88. int Start_Play_Audio (CDROM *p_cd);
  89. int Stop_Play_Audio (CDROM *p_cd);
  90. int Block_Length (CDROM *p_cd);
  91. void Clear_Sector_Buffers (CDROM *p_cd);
  92.  
  93. extern int g_cdrom_errno;
  94. extern int g_ignore_blocklength;
  95.  
  96. enum {
  97.   CDROMERR_OK = 0,    /* no error            */
  98.   CDROMERR_NO_MEMORY,    /* out of memory        */
  99.   CDROMERR_MSGPORT,    /* cannot create message port    */
  100.   CDROMERR_IOREQ,    /* cannot create I/O request    */
  101.   CDROMERR_DEVICE,    /* cannot open scsi device    */
  102.   CDROMERR_BLOCKSIZE    /* illegal blocksize        */
  103. };
  104.  
  105. #endif /* _CDROM_H_ */
  106.