Mercurial > sdl-ios-xcode
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 } |