Commit a2d4d4bc authored by Sam Lantinga's avatar Sam Lantinga

Fixed IDE and SCSI CD-ROM detection on BeOS (thanks Caz!)

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40154
parent 2f77d42d
......@@ -1237,7 +1237,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, linux, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS linux"
CDROM_DRIVERS="$CDROM_DRIVERS linux/libcdrom_linux.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1302,7 +1303,8 @@ case "$target" in
# Set up files for the cdrom library
# (No cdrom support yet)
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, dummy, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS dummy"
CDROM_DRIVERS="$CDROM_DRIVERS dummy/libcdrom_dummy.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1353,7 +1355,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, freebsd, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS freebsd"
CDROM_DRIVERS="$CDROM_DRIVERS freebsd/libcdrom_freebsd.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1404,7 +1407,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, openbsd, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS openbsd"
CDROM_DRIVERS="$CDROM_DRIVERS openbsd/libcdrom_openbsd.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1463,7 +1467,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, openbsd, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS openbsd"
CDROM_DRIVERS="$CDROM_DRIVERS openbsd/libcdrom_openbsd.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1517,7 +1522,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, dummy, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS dummy"
CDROM_DRIVERS="$CDROM_DRIVERS dummy/libcdrom_dummy.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1566,7 +1572,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, linux, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS linux"
CDROM_DRIVERS="$CDROM_DRIVERS linux/libcdrom_linux.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1612,7 +1619,8 @@ case "$target" in
# Set up files for the cdrom library
# (No CD-ROM support yet)
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, dummy, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS dummy"
CDROM_DRIVERS="$CDROM_DRIVERS dummy/libcdrom_dummy.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1673,7 +1681,8 @@ case "$target" in
# Set up files for the cdrom library
# (No CD-ROM support yet)
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, dummy, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS dummy"
CDROM_DRIVERS="$CDROM_DRIVERS dummy/libcdrom_dummy.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1717,7 +1726,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, aix, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS aix"
CDROM_DRIVERS="$CDROM_DRIVERS aix/libcdrom_aix.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1762,7 +1772,8 @@ case "$target" in
# Set up files for the cdrom library
# (No cdrom support yet)
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, dummy, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS dummy"
CDROM_DRIVERS="$CDROM_DRIVERS dummy/libcdrom_dummy.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1806,7 +1817,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, qnx, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS qnx"
CDROM_DRIVERS="$CDROM_DRIVERS qnx/libcdrom_qnx.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1858,7 +1870,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, win32, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS win32"
CDROM_DRIVERS="$CDROM_DRIVERS win32/libcdrom_win32.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1913,7 +1926,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, beos, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS beos"
CDROM_DRIVERS="$CDROM_DRIVERS beos/libcdrom_beos.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -1956,7 +1970,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, macos, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS macos"
CDROM_DRIVERS="$CDROM_DRIVERS macos/libcdrom_macos.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -2002,7 +2017,8 @@ case "$target" in
fi
# Set up files for the cdrom library
if test x$enable_cdrom = xyes; then
COPY_ARCH_SRC(src/cdrom, dummy, SDL_syscdrom.c)
CDROM_SUBDIRS="$CDROM_SUBDIRS dummy"
CDROM_DRIVERS="$CDROM_DRIVERS dummy/libcdrom_dummy.la"
fi
# Set up files for the thread library
if test x$enable_threads = xyes; then
......@@ -2077,6 +2093,8 @@ AC_SUBST(VIDEO_SUBDIRS)
AC_SUBST(VIDEO_DRIVERS)
AC_SUBST(JOYSTICK_SUBDIRS)
AC_SUBST(JOYSTICK_DRIVERS)
AC_SUBST(CDROM_SUBDIRS)
AC_SUBST(CDROM_DRIVERS)
AC_SUBST(SDL_EXTRADIRS)
AC_SUBST(SDL_EXTRALIBS)
AC_SUBST(SYSTEM_LIBS)
......@@ -2164,6 +2182,15 @@ src/joystick/linux/Makefile
src/joystick/macos/Makefile
src/joystick/win32/Makefile
src/cdrom/Makefile
src/cdrom/aix/Makefile
src/cdrom/beos/Makefile
src/cdrom/dummy/Makefile
src/cdrom/freebsd/Makefile
src/cdrom/linux/Makefile
src/cdrom/macos/Makefile
src/cdrom/openbsd/Makefile
src/cdrom/qnx/Makefile
src/cdrom/win32/Makefile
src/thread/Makefile
src/timer/Makefile
src/endian/Makefile
......
......@@ -16,6 +16,7 @@ be found at the <A HREF="http://www.libsdl.org/"> main SDL page</A>.
Major changes since SDL 1.0.0:
</H2>
<UL>
<LI> 1.2.3: Fixed IDE and SCSI CD-ROM detection on BeOS (thanks Caz!)
<LI> 1.2.3: Fixed the system dependent SDL_WINDOWID hack on Windows
<LI> 1.2.3: Added 640x480 as a scaled resolution for NTSC/PAL output
<LI> 1.2.3: Added support for TV output on the Linux PlayStation Beta
......
......@@ -3,27 +3,17 @@
noinst_LTLIBRARIES = libcdrom.la
ARCH_SUBDIRS = $(srcdir)/dummy $(srcdir)/beos $(srcdir)/freebsd \
$(srcdir)/linux $(srcdir)/macos $(srcdir)/openbsd \
$(srcdir)/qnx $(srcdir)/win32
# Define which subdirectories need to be built
SUBDIRS = @CDROM_SUBDIRS@
DIST_SUBDIRS = aix beos dummy freebsd linux macos openbsd qnx win32
# Include the architecture-independent sources
COMMON_SRCS = SDL_cdrom.c SDL_syscdrom.h
# Include the architecture-specific sources
ARCH_SRCS = SDL_syscdrom.c
libcdrom_la_SOURCES = $(COMMON_SRCS) $(ARCH_SRCS)
DRIVERS = @CDROM_DRIVERS@
## Let automake know that it shouldn't distribute linked sources
BUILT_SOURCES = $(ARCH_SRCS)
## Let automake know that it should remove these for distribution
DISTCLEANFILES = $(ARCH_SRCS)
# Include the architecture-independent sources
COMMON_SRCS = \
SDL_cdrom.c \
SDL_syscdrom.h
# The architecture specific directories need to be copied into place
# when building a distribution.
dist-hook:
(cd $(distdir) && rm -f $(BUILT_SOURCES))
cp -rp $(ARCH_SUBDIRS) $(distdir)
(cd $(distdir) && rm -rf `find . -name CVS`)
libcdrom_la_SOURCES = $(COMMON_SRCS)
libcdrom_la_LIBADD = $(DRIVERS)
libcdrom_la_DEPENDENCIES = $(DRIVERS)
Makefile.in
Makefile
.libs
*.o
*.lo
*.la
## Makefile.am for the AIX cdrom driver for SDL
noinst_LTLIBRARIES = libcdrom_aix.la
libcdrom_aix_la_SOURCES = $(SRCS)
# The SDL cdrom driver sources
SRCS = SDL_syscdrom.c
Makefile.in
Makefile
.libs
*.o
*.lo
*.la
## Makefile.am for the BeOS cdrom driver for SDL
noinst_LTLIBRARIES = libcdrom_beos.la
libcdrom_beos_la_SOURCES = $(SRCS)
# The SDL cdrom driver sources
SRCS = SDL_syscdrom.cc
......@@ -37,10 +37,15 @@ static char rcsid =
#include <unistd.h>
#include <scsi.h>
#include <Directory.h>
#include <Entry.h>
#include <Path.h>
#include "SDL_error.h"
#include "SDL_cdrom.h"
extern "C" {
#include "SDL_syscdrom.h"
}
/* Constants to help us get at the SCSI table-of-contents info */
#define CD_NUMTRACKS(toc) toc.toc_data[3]
......@@ -76,6 +81,7 @@ static int SDL_SYS_CDResume(SDL_CD *cdrom);
static int SDL_SYS_CDStop(SDL_CD *cdrom);
static int SDL_SYS_CDEject(SDL_CD *cdrom);
static void SDL_SYS_CDClose(SDL_CD *cdrom);
int try_dir(const char *directory);
/* Check a drive to see if it is a CD-ROM */
......@@ -128,32 +134,6 @@ static void AddDrive(char *drive)
}
}
# if 0 /* Save this for later, when I can test it */
/* SCSI bus scanning magic */
static int CheckSCSI(int path, int id, int lun)
{
int is_cd;
int fd;
scsiprobe_inquiry inquiry;
is_cd = 0;
fd = open("/dev/scsiprobe", 0);
if ( fd >= 0 ) {
inquiry.path = path;
inquiry.id = id;
inquiry.lun = lun;
inquiry.len = sizeof(inquiry);
if ( ioctl(fd, B_SCSIPROBE_INQUIRY, &inquiry) == B_NO_ERROR ) {
if ( (inquiry.data[0]&0x1F) == B_SCSI_CD ) {
is_cd = 1;
}
}
close(fd);
}
return(is_cd);
}
#endif
/* IDE bus scanning magic */
enum {
IDE_GET_DEVICES_INFO = B_DEVICE_OP_CODES_END + 50,
......@@ -193,7 +173,7 @@ int SDL_SYS_CDInit(void)
SDLcdrom = getenv("SDL_CDROM"); /* ':' separated list of devices */
if ( SDLcdrom != NULL ) {
char *cdpath, *delim;
cdpath = malloc(strlen(SDLcdrom)+1);
cdpath = (char *)malloc(strlen(SDLcdrom)+1);
if ( cdpath != NULL ) {
strcpy(cdpath, SDLcdrom);
SDLcdrom = cdpath;
......@@ -219,29 +199,65 @@ int SDL_SYS_CDInit(void)
return(0);
}
}
/* Scan the system for CD-ROM drives */
raw_fd = open("/dev/disk/ide/rescan", 0);
if ( raw_fd >= 0 ) {
if (ioctl(raw_fd, IDE_GET_DEVICES_INFO, &info) == B_NO_ERROR) {
if ( info.ide_0_master_type == B_CD ) {
AddDrive("/dev/disk/ide/0/master/raw");
}
if ( info.ide_0_slave_type == B_CD ) {
AddDrive("/dev/disk/ide/0/slave/raw");
}
if ( info.ide_1_master_type == B_CD ) {
AddDrive("/dev/disk/ide/1/master/raw");
}
if ( info.ide_1_slave_type == B_CD ) {
AddDrive("/dev/disk/ide/1/slave/raw");
try_dir("/dev/disk");
return 0;
}
int try_dir(const char *directory)
{
BDirectory dir;
dir.SetTo(directory);
if(dir.InitCheck() != B_NO_ERROR) {
return false;
}
dir.Rewind();
BEntry entry;
while(dir.GetNextEntry(&entry) >= 0) {
BPath path;
const char *name;
entry_ref e;
if(entry.GetPath(&path) != B_NO_ERROR)
continue;
name = path.Path();
if(entry.GetRef(&e) != B_NO_ERROR)
continue;
if(entry.IsDirectory()) {
if(strcmp(e.name, "floppy") == 0)
continue; /* ignore floppy (it is not silent) */
int devfd = try_dir(name);
if(devfd >= 0)
return devfd;
}
else {
int devfd;
device_geometry g;
if(strcmp(e.name, "raw") != 0)
continue; /* ignore partitions */
devfd = open(name, O_RDONLY);
if(devfd < 0)
continue;
if(ioctl(devfd, B_GET_GEOMETRY, &g, sizeof(g)) >= 0) {
if(g.device_type == B_CD)
{
AddDrive(strdup(name));
}
}
}
close(raw_fd);
close(devfd);
}
}
return(0);
return B_ERROR;
}
/* General ioctl() CD-ROM command function */
static int SDL_SYS_CDioctl(int index, int command, void *arg)
{
......@@ -381,7 +397,7 @@ static int SDL_SYS_CDEject(SDL_CD *cdrom)
/* Close the CD-ROM handle */
static void SDL_SYS_CDClose(SDL_CD *cdrom)
{
free(cdrom);
close(cdrom->id);
}
void SDL_SYS_CDQuit(void)
......
Makefile.in
Makefile
.libs
*.o
*.lo
*.la
## Makefile.am for the dummy cdrom driver for SDL
noinst_LTLIBRARIES = libcdrom_dummy.la
libcdrom_dummy_la_SOURCES = $(SRCS)
# The SDL cdrom driver sources
SRCS = SDL_syscdrom.c
Makefile.in
Makefile
.libs
*.o
*.lo
*.la
## Makefile.am for the FreeBSD cdrom driver for SDL
noinst_LTLIBRARIES = libcdrom_freebsd.la
libcdrom_freebsd_la_SOURCES = $(SRCS)
# The SDL cdrom driver sources
SRCS = SDL_syscdrom.c
Makefile.in
Makefile
.libs
*.o
*.lo
*.la
## Makefile.am for the Linux cdrom driver for SDL
noinst_LTLIBRARIES = libcdrom_linux.la
libcdrom_linux_la_SOURCES = $(SRCS)
# The SDL cdrom driver sources
SRCS = SDL_syscdrom.c
Makefile.in
Makefile
.libs
*.o
*.lo
*.la
## Makefile.am for the MacOS Classic cdrom driver for SDL
noinst_LTLIBRARIES = libcdrom_macos.la
libcdrom_macos_la_SOURCES = $(SRCS)
# The SDL cdrom driver sources
SRCS = SDL_syscdrom.c SDL_syscdrom_c.h
Makefile.in
Makefile
.libs
*.o
*.lo
*.la
## Makefile.am for the OpenBSD cdrom driver for SDL
noinst_LTLIBRARIES = libcdrom_openbsd.la
libcdrom_openbsd_la_SOURCES = $(SRCS)
# The SDL cdrom driver sources
SRCS = SDL_syscdrom.c
Makefile.in
Makefile
.libs
*.o
*.lo
*.la
## Makefile.am for the QNX cdrom driver for SDL
noinst_LTLIBRARIES = libcdrom_qnx.la
libcdrom_qnx_la_SOURCES = $(SRCS)
# The SDL cdrom driver sources
SRCS = SDL_syscdrom.c
Makefile.in
Makefile
.libs
*.o
*.lo
*.la
## Makefile.am for the Windows cdrom driver for SDL
noinst_LTLIBRARIES = libcdrom_win32.la
libcdrom_win32_la_SOURCES = $(SRCS)
# The SDL cdrom driver sources
SRCS = SDL_syscdrom.c
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment