annotate src/cdrom/bsdi/SDL_syscdrom.c @ 1032:c1c2efca4548

Date: Mon, 24 Jan 2005 21:37:56 +0800 From: Chris Taylor Subject: Patch to put back dynamic OpenGL loading for MPW I sent a patch a while ago that removes dynamic OpenGL loading for Macintosh Programmer's Workshop. Dynamic loading DOES actually work when an SDL program is built with MPW, it just has to be set up for it. (Whoops!!) This is the ideal way to get OpenGL extensions to work, which D2X uses quite a few of. This patch puts dynamic loading back in SDL for Mac OS 9. It applies to current CVS. I noticed that two members need to be set when DrawSprocket is used.
author Sam Lantinga <slouken@libsdl.org>
date Tue, 25 Jan 2005 16:57:11 +0000
parents e8157fcb3114
children c9b51268668f
rev   line source
178
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1 /*
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
3 Copyright (C) 1997, 1998, 1999, 2000 Sam Lantinga
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
4
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
6 modify it under the terms of the GNU Library General Public
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
8 version 2 of the License, or (at your option) any later version.
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
9
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
13 Library General Public License for more details.
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
14
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
15 You should have received a copy of the GNU Library General Public
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
16 License along with this library; if not, write to the Free
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
18
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
19 Sam Lantinga
252
e8157fcb3114 Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents: 178
diff changeset
20 slouken@libsdl.org
178
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
21 */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
22
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
23 #ifdef SAVE_RCSID
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
24 static char rcsid =
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
25 "@(#) $Id$";
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
26 #endif
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
27
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
28 /*
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
29 * Functions for system-level CD-ROM audio control for BSD/OS 4.x
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
30 * This started life out as a copy of the freebsd/SDL_cdrom.c file but was
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
31 * heavily modified. Works for standard (MMC) SCSI and ATAPI CDrom drives.
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
32 *
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
33 * Steven Schultz - sms@to.gd-es.com
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
34 */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
35
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
36 #include <sys/types.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
37 #include <stdlib.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
38 #include <sys/stat.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
39 #include <fcntl.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
40 #include <stdio.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
41 #include <string.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
42 #include <errno.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
43 #include <err.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
44 #include <unistd.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
45 #include <sys/ioctl.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
46 #include </sys/dev/scsi/scsi.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
47 #include </sys/dev/scsi/scsi_ioctl.h>
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
48
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
49 #include "SDL_error.h"
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
50 #include "SDL_cdrom.h"
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
51 #include "SDL_syscdrom.h"
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
52
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
53 /*
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
54 * The msf_to_frame and frame_to_msf were yanked from libcdrom and inlined
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
55 * here so that -lcdrom doesn't have to be dragged in for something so simple.
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
56 */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
57
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
58 #define FRAMES_PER_SECOND 75
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
59 #define FRAMES_PER_MINUTE (FRAMES_PER_SECOND * 60)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
60
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
61 int
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
62 msf_to_frame(int minute, int second, int frame)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
63 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
64 return(minute * FRAMES_PER_MINUTE + second * FRAMES_PER_SECOND + frame);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
65 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
66
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
67 void
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
68 frame_to_msf(int frame, int *minp, int *secp, int *framep)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
69 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
70 *minp = frame / FRAMES_PER_MINUTE;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
71 *secp = (frame % FRAMES_PER_MINUTE) / FRAMES_PER_SECOND;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
72 *framep = frame % FRAMES_PER_SECOND;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
73 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
74
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
75 /* The maximum number of CD-ROM drives we'll detect */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
76 #define MAX_DRIVES 16
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
77
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
78 /* A list of available CD-ROM drives */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
79 static char *SDL_cdlist[MAX_DRIVES];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
80 static dev_t SDL_cdmode[MAX_DRIVES];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
81
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
82 /* The system-dependent CD control functions */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
83 static const char *SDL_SYS_CDName(int drive);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
84 static int SDL_SYS_CDOpen(int drive);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
85 static int SDL_SYS_CDGetTOC(SDL_CD *cdrom);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
86 static CDstatus SDL_SYS_CDStatus(SDL_CD *cdrom, int *position);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
87 static int SDL_SYS_CDPlay(SDL_CD *cdrom, int start, int length);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
88 static int SDL_SYS_CDPause(SDL_CD *cdrom);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
89 static int SDL_SYS_CDResume(SDL_CD *cdrom);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
90 static int SDL_SYS_CDStop(SDL_CD *cdrom);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
91 static int SDL_SYS_CDEject(SDL_CD *cdrom);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
92 static void SDL_SYS_CDClose(SDL_CD *cdrom);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
93
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
94 typedef struct scsi_cdb cdb_t;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
95
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
96 static int scsi_cmd(int fd,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
97 struct scsi_cdb *cdb,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
98 int cdblen,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
99 int rw,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
100 caddr_t data,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
101 int datalen,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
102 struct scsi_user_cdb *sus)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
103 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
104 int scsistatus;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
105 unsigned char *cp;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
106 struct scsi_user_cdb suc;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
107
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
108 /* safety checks */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
109 if (!cdb) return(-1);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
110 if (rw != SUC_READ && rw != SUC_WRITE) return(-1);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
111
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
112 suc.suc_flags = rw;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
113 suc.suc_cdblen = cdblen;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
114 bcopy(cdb, suc.suc_cdb, cdblen);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
115 suc.suc_datalen = datalen;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
116 suc.suc_data = data;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
117 suc.suc_timeout = 10; /* 10 secs max for TUR or SENSE */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
118 if (ioctl(fd, SCSIRAWCDB, &suc) == -1)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
119 return(-11);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
120 scsistatus = suc.suc_sus.sus_status;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
121 cp = suc.suc_sus.sus_sense;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
122
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
123 /*
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
124 * If a place to copy the sense data back to has been provided then the
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
125 * caller is responsible for checking the errors and printing any information
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
126 * out if the status was not successful.
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
127 */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
128 if (scsistatus != 0 && !sus)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
129 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
130 fprintf(stderr,"scsistatus = %x cmd = %x\n",
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
131 scsistatus, cdb[0]);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
132 fprintf(stderr, "sense %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x\n",
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
133 cp[0], cp[1], cp[2], cp[3], cp[4], cp[5],
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
134 cp[6], cp[7], cp[8], cp[9], cp[10], cp[11],
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
135 cp[12], cp[13], cp[14], cp[15]);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
136 return(1);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
137 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
138 if (sus)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
139 bcopy(&suc, sus, sizeof (struct scsi_user_cdb));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
140 if (scsistatus)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
141 return(1); /* Return non-zero for unsuccessful status */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
142 return(0);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
143 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
144
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
145 /* request vendor brand and model */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
146 unsigned char *Inquiry(int fd)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
147 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
148 static struct scsi_cdb6 cdb =
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
149 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
150 0x12,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
151 0, 0, 0,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
152 56,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
153 0
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
154 };
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
155 static unsigned char Inqbuffer[56];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
156
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
157 if (scsi_cmd(fd, (cdb_t *)&cdb, 6, SUC_READ, Inqbuffer,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
158 sizeof(Inqbuffer), 0))
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
159 return("\377");
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
160 return(Inqbuffer);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
161 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
162
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
163 #define ADD_SENSECODE 12
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
164 #define ADD_SC_QUALIFIER 13
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
165
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
166 int TestForMedium(int fd)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
167 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
168 int sts, asc, ascq;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
169 struct scsi_user_cdb sus;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
170 static struct scsi_cdb6 cdb =
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
171 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
172 CMD_TEST_UNIT_READY, /* command */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
173 0, /* reserved */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
174 0, /* reserved */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
175 0, /* reserved */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
176 0, /* reserved */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
177 0 /* reserved */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
178 };
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
179
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
180 again: sts = scsi_cmd(fd, (cdb_t *)&cdb, 6, SUC_READ, 0, 0, &sus);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
181 asc = sus.suc_sus.sus_sense[ADD_SENSECODE];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
182 ascq = sus.suc_sus.sus_sense[ADD_SC_QUALIFIER];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
183 if (asc == 0x3a && ascq == 0x0) /* no medium */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
184 return(0);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
185 if (asc == 0x28 && ascq == 0x0) /* medium changed */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
186 goto again;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
187 if (asc == 0x4 && ascq == 0x1 ) /* coming ready */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
188 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
189 sleep(2);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
190 goto again;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
191 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
192 return(1);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
193 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
194
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
195 /* Check a drive to see if it is a CD-ROM */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
196 static int CheckDrive(char *drive, struct stat *stbuf)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
197 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
198 int is_cd = 0, cdfd;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
199 char *p;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
200
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
201 /* If it doesn't exist, return -1 */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
202 if ( stat(drive, stbuf) < 0 ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
203 return(-1);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
204 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
205
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
206 /* If it does exist, verify that it's an available CD-ROM */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
207 cdfd = open(drive, (O_RDONLY|O_EXCL|O_NONBLOCK), 0);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
208 if ( cdfd >= 0 ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
209 p = Inquiry(cdfd);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
210 if (*p == TYPE_ROM)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
211 is_cd = 1;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
212 close(cdfd);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
213 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
214 return(is_cd);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
215 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
216
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
217 /* Add a CD-ROM drive to our list of valid drives */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
218 static void AddDrive(char *drive, struct stat *stbuf)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
219 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
220 int i;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
221
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
222 if ( SDL_numcds < MAX_DRIVES ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
223 /* Check to make sure it's not already in our list.
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
224 This can happen when we see a drive via symbolic link.
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
225 */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
226 for ( i=0; i<SDL_numcds; ++i ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
227 if ( stbuf->st_rdev == SDL_cdmode[i] ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
228 #ifdef DEBUG_CDROM
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
229 fprintf(stderr, "Duplicate drive detected: %s == %s\n", drive, SDL_cdlist[i]);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
230 #endif
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
231 return;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
232 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
233 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
234
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
235 /* Add this drive to our list */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
236 i = SDL_numcds;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
237 SDL_cdlist[i] = (char *)malloc(strlen(drive)+1);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
238 if ( SDL_cdlist[i] == NULL ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
239 SDL_OutOfMemory();
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
240 return;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
241 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
242 strcpy(SDL_cdlist[i], drive);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
243 SDL_cdmode[i] = stbuf->st_rdev;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
244 ++SDL_numcds;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
245 #ifdef DEBUG_CDROM
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
246 fprintf(stderr, "Added CD-ROM drive: %s\n", drive);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
247 #endif
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
248 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
249 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
250
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
251 int SDL_SYS_CDInit(void)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
252 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
253 /* checklist: /dev/rsr?c */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
254 static char *checklist[] = {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
255 "?0 rsr?", NULL
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
256 };
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
257 char *SDLcdrom;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
258 int i, j, exists;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
259 char drive[32];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
260 struct stat stbuf;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
261
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
262 /* Fill in our driver capabilities */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
263 SDL_CDcaps.Name = SDL_SYS_CDName;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
264 SDL_CDcaps.Open = SDL_SYS_CDOpen;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
265 SDL_CDcaps.GetTOC = SDL_SYS_CDGetTOC;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
266 SDL_CDcaps.Status = SDL_SYS_CDStatus;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
267 SDL_CDcaps.Play = SDL_SYS_CDPlay;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
268 SDL_CDcaps.Pause = SDL_SYS_CDPause;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
269 SDL_CDcaps.Resume = SDL_SYS_CDResume;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
270 SDL_CDcaps.Stop = SDL_SYS_CDStop;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
271 SDL_CDcaps.Eject = SDL_SYS_CDEject;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
272 SDL_CDcaps.Close = SDL_SYS_CDClose;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
273
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
274 /* Look in the environment for our CD-ROM drive list */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
275 SDLcdrom = getenv("SDL_CDROM"); /* ':' separated list of devices */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
276 if ( SDLcdrom != NULL ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
277 char *cdpath, *delim;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
278 cdpath = malloc(strlen(SDLcdrom)+1);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
279 if ( cdpath != NULL ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
280 strcpy(cdpath, SDLcdrom);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
281 SDLcdrom = cdpath;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
282 do {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
283 delim = strchr(SDLcdrom, ':');
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
284 if ( delim ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
285 *delim++ = '\0';
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
286 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
287 if ( CheckDrive(SDLcdrom, &stbuf) > 0 ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
288 AddDrive(SDLcdrom, &stbuf);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
289 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
290 if ( delim ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
291 SDLcdrom = delim;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
292 } else {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
293 SDLcdrom = NULL;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
294 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
295 } while ( SDLcdrom );
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
296 free(cdpath);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
297 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
298
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
299 /* If we found our drives, there's nothing left to do */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
300 if ( SDL_numcds > 0 ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
301 return(0);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
302 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
303 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
304
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
305 /* Scan the system for CD-ROM drives */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
306 for ( i=0; checklist[i]; ++i ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
307 if ( checklist[i][0] == '?' ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
308 char *insert;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
309 exists = 1;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
310 for ( j=checklist[i][1]; exists; ++j ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
311 sprintf(drive, "/dev/%sc", &checklist[i][3]);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
312 insert = strchr(drive, '?');
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
313 if ( insert != NULL ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
314 *insert = j;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
315 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
316 switch (CheckDrive(drive, &stbuf)) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
317 /* Drive exists and is a CD-ROM */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
318 case 1:
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
319 AddDrive(drive, &stbuf);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
320 break;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
321 /* Drive exists, but isn't a CD-ROM */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
322 case 0:
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
323 break;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
324 /* Drive doesn't exist */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
325 case -1:
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
326 exists = 0;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
327 break;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
328 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
329 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
330 } else {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
331 sprintf(drive, "/dev/%s", checklist[i]);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
332 if ( CheckDrive(drive, &stbuf) > 0 ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
333 AddDrive(drive, &stbuf);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
334 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
335 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
336 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
337 return(0);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
338 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
339
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
340 static const char *SDL_SYS_CDName(int drive)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
341 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
342 return(SDL_cdlist[drive]);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
343 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
344
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
345 static int SDL_SYS_CDOpen(int drive)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
346 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
347 return(open(SDL_cdlist[drive], O_RDONLY | O_NONBLOCK | O_EXCL, 0));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
348 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
349
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
350 static int SDL_SYS_CDGetTOC(SDL_CD *cdrom)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
351 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
352 u_char cdb[10], buf[4], *p, *toc;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
353 struct scsi_user_cdb sus;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
354 int i, sts, first_track, last_track, ntracks, toc_size;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
355
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
356 bzero(cdb, sizeof (cdb));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
357 cdb[0] = 0x43; /* Read TOC */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
358 cdb[1] = 0x2; /* MSF */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
359 cdb[8] = 4; /* size TOC header */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
360 sts = scsi_cmd(cdrom->id, (cdb_t *)cdb, 10, SUC_READ, buf, 4, &sus);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
361 if (sts < 0)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
362 return(-1);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
363 first_track = buf[2];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
364 last_track = buf[3];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
365 ntracks = last_track - first_track + 1;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
366 cdrom->numtracks = ntracks;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
367 toc_size = 4 + (ntracks + 1) * 8;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
368 toc = (u_char *)malloc(toc_size);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
369 if (toc == NULL)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
370 return(-1);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
371 bzero(cdb, sizeof (cdb));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
372 cdb[0] = 0x43;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
373 cdb[1] = 0x2;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
374 cdb[6] = first_track;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
375 cdb[7] = toc_size >> 8;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
376 cdb[8] = toc_size & 0xff;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
377 sts = scsi_cmd(cdrom->id, (cdb_t *)cdb, 10, SUC_READ, toc, toc_size,
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
378 &sus);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
379 if (sts < 0)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
380 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
381 free(toc);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
382 return(-1);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
383 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
384
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
385 for (i = 0, p = toc+4; i <= ntracks; i++, p+= 8)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
386 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
387 if (i == ntracks)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
388 cdrom->track[i].id = 0xAA; /* Leadout */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
389 else
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
390 cdrom->track[i].id = first_track + i;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
391 if (p[1] & 0x20)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
392 cdrom->track[i].type = SDL_DATA_TRACK;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
393 else
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
394 cdrom->track[i].type = SDL_AUDIO_TRACK;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
395 cdrom->track[i].offset = msf_to_frame(p[5], p[6], p[7]);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
396 cdrom->track[i].length = 0;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
397 if (i > 0)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
398 cdrom->track[i-1].length = cdrom->track[i].offset -
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
399 cdrom->track[i-1].offset;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
400 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
401 free(toc);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
402 return(0);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
403 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
404
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
405 /* Get CD-ROM status */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
406 static CDstatus SDL_SYS_CDStatus(SDL_CD *cdrom, int *position)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
407 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
408 CDstatus status;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
409 u_char cdb[10], buf[16];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
410 int sts;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
411 struct scsi_user_cdb sus;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
412
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
413 bzero(cdb, sizeof (cdb));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
414 cdb[0] = 0x42; /* read subq */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
415 cdb[1] = 0x2; /* MSF */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
416 cdb[2] = 0x40; /* q channel */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
417 cdb[3] = 1; /* current pos */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
418 cdb[7] = sizeof (buf) >> 8;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
419 cdb[8] = sizeof (buf) & 0xff;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
420 sts = scsi_cmd(cdrom->id, (cdb_t *)cdb, 10, SUC_READ, buf, sizeof (buf),
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
421 &sus);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
422 if (sts < 0)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
423 return(-1);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
424 if (sts)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
425 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
426 if (TestForMedium(cdrom->id) == 0)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
427 status = CD_TRAYEMPTY;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
428 else
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
429 status = CD_ERROR;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
430 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
431 else
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
432 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
433 switch (buf[1])
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
434 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
435 case 0x11:
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
436 status = CD_PLAYING;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
437 break;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
438 case 0x12:
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
439 status = CD_PAUSED;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
440 break;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
441 case 0x13:
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
442 case 0x14:
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
443 case 0x15:
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
444 status = CD_STOPPED;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
445 break;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
446 default:
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
447 status = CD_ERROR;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
448 break;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
449 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
450 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
451 if (position)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
452 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
453 if ( status == CD_PLAYING || (status == CD_PAUSED) )
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
454 *position = msf_to_frame(buf[9], buf[10], buf[11]);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
455 else
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
456 *position = 0;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
457 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
458 return(status);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
459 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
460
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
461 /* Start play */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
462 static int SDL_SYS_CDPlay(SDL_CD *cdrom, int start, int length)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
463 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
464 u_char cdb[10];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
465 int sts, minute, second, frame, eminute, esecond, eframe;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
466 struct scsi_user_cdb sus;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
467
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
468 bzero(cdb, sizeof(cdb));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
469 cdb[0] = 0x47; /* Play */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
470 frame_to_msf(start, &minute, &second, &frame);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
471 frame_to_msf(start + length, &eminute, &esecond, &eframe);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
472 cdb[3] = minute;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
473 cdb[4] = second;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
474 cdb[5] = frame;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
475 cdb[6] = eminute;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
476 cdb[7] = esecond;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
477 cdb[8] = eframe;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
478 sts = scsi_cmd(cdrom->id, (cdb_t *)cdb, 10, SUC_READ, 0, 0, &sus);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
479 return(sts);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
480 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
481
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
482 static int
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
483 pauseresume(SDL_CD *cdrom, int flag)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
484 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
485 u_char cdb[10];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
486 struct scsi_user_cdb sus;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
487
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
488 bzero(cdb, sizeof (cdb));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
489 cdb[0] = 0x4b;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
490 cdb[8] = flag & 0x1;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
491 return(scsi_cmd(cdrom->id, (cdb_t *)cdb, 10, SUC_READ, 0, 0, &sus));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
492 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
493
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
494 /* Pause play */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
495 static int SDL_SYS_CDPause(SDL_CD *cdrom)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
496 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
497 return(pauseresume(cdrom, 0));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
498 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
499
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
500 /* Resume play */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
501 static int SDL_SYS_CDResume(SDL_CD *cdrom)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
502 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
503 return(pauseresume(cdrom, 1));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
504 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
505
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
506 /* Stop play */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
507 static int SDL_SYS_CDStop(SDL_CD *cdrom)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
508 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
509 u_char cdb[6];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
510 struct scsi_user_cdb sus;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
511
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
512 bzero(cdb, sizeof (cdb));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
513 cdb[0] = 0x1b; /* stop */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
514 cdb[1] = 1; /* immediate */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
515 return(scsi_cmd(cdrom->id, (cdb_t *)cdb, 6, SUC_READ, 0, 0, &sus));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
516 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
517
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
518 /* Eject the CD-ROM */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
519 static int SDL_SYS_CDEject(SDL_CD *cdrom)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
520 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
521 u_char cdb[6];
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
522 struct scsi_user_cdb sus;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
523
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
524 bzero(cdb, sizeof (cdb));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
525 cdb[0] = 0x1b; /* stop */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
526 cdb[1] = 1; /* immediate */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
527 cdb[4] = 2; /* eject */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
528 return(scsi_cmd(cdrom->id, (cdb_t *)cdb, 6, SUC_READ, 0, 0, &sus));
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
529 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
530
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
531 /* Close the CD-ROM handle */
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
532 static void SDL_SYS_CDClose(SDL_CD *cdrom)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
533 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
534 close(cdrom->id);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
535 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
536
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
537 void SDL_SYS_CDQuit(void)
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
538 {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
539 int i;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
540
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
541 if ( SDL_numcds > 0 ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
542 for ( i=0; i<SDL_numcds; ++i ) {
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
543 free(SDL_cdlist[i]);
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
544 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
545 }
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
546 SDL_numcds = 0;
1fc1a101bf23 Added CD-ROM support for BSD/OS (thanks Steven!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
547 }