Mercurial > sdl-ios-xcode
diff src/cdrom/osf/SDL_syscdrom.c @ 1019:e3b3130f3af8
Date: Fri, 31 Dec 2004 04:14:09 +0900
From: Hayashi Naoyuki
Subject: SDL patch for Tru64 UNIX 4.0X
SDL-1.2.8 support only Tru64 5.X.
This patch is for Tru64 UNIX 4.X.(tested on Tru64 UNIX 4.0G and 5.1B)
SDL-1.2.8/configure.in:
ld doesn't accept -pthread option.
cc -pthread has same effect as -D_REENTRANT when compiling,
and has same effect as -lpthread -lexc when linking.
SDL-1.2.8/include/begin_code.h:
Old Compaq C Compiler accept not inline but __inline.
SDL-1.2.8/src/audio/SDL_mixer_MMX.c:
SDL-1.2.8/src/audio/SDL_mixer_MMX.h:
Old Compaq C Compiler doesn't accept //.
SDL-1.2.8/src/cdrom/osf/SDL_syscdrom.c:
When becoming Tru64 v5.0 from Tru64 v4.0,
the arrangement of the cd-rom device was changed.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 02 Jan 2005 05:05:21 +0000 |
parents | 9719e7f51a3a |
children | 3692456e7b0f |
line wrap: on
line diff
--- a/src/cdrom/osf/SDL_syscdrom.c Mon Dec 27 20:03:53 2004 +0000 +++ b/src/cdrom/osf/SDL_syscdrom.c Sun Jan 02 05:05:21 2005 +0000 @@ -22,9 +22,10 @@ /* Functions for system-level CD-ROM audio control */ -//#define DEBUG_CDROM 1 +/* #define DEBUG_CDROM 1 */ #include <sys/types.h> +#include <dirent.h> #include <sys/stat.h> #include <fcntl.h> #include <io/cam/cdrom.h> @@ -141,11 +142,22 @@ int SDL_SYS_CDInit(void) { - /* checklist: /dev/rdisk/cdrom?c + /* checklist: + * + * Tru64 5.X (/dev/rdisk/cdrom?c) + * dir: /dev/rdisk, name: cdrom + * + * Digital UNIX 4.0X (/dev/rrz?c) + * dir: /dev, name: rrz * */ - static char *checklist[] = { - "?0 rdisk/cdrom?",NULL}; + struct { + char *dir; + char *name; + } checklist[] = { + {"/dev/rdisk", "cdrom"}, + {"/dev", "rrz"}, + {NULL, NULL}}; char drive[32]; char *SDLcdrom; int i, j, exists; @@ -195,37 +207,32 @@ } } /* Scan the system for CD-ROM drives */ - for ( i=0; checklist[i]; ++i ) { - if ( checklist[i][0] == '?' ) { - char *insert; - exists = 1; - for ( j=checklist[i][1]; exists; ++j ) { - sprintf(drive, "/dev/%sc", &checklist[i][3]); - insert = strchr(drive, '?'); - if ( insert != NULL ) { - *insert = j; - } - switch (CheckDrive(drive, &stbuf)) { - /* Drive exists and is a CD-ROM */ - case 1: - AddDrive(drive, &stbuf); - break; - /* Drive exists, but isn't a CD-ROM */ - case 0: - break; - /* Drive doesn't exist */ - case -1: - exists = 0; - break; - } - } + for ( i = 0; checklist[i].dir; ++i) { + DIR *devdir; + struct dirent *devent; + int name_len; + + devdir = opendir(checklist[i].dir); + if (devdir) { + name_len = strlen(checklist[i].name); + while (devent = readdir(devdir)) + if (memcmp(checklist[i].name, devent->d_name, name_len) == 0) + if (devent->d_name[devent->d_namlen-1] == 'c') { + sprintf(drive, "%s/%s", checklist[i].dir, devent->d_name); +#ifdef DEBUG_CDROM + fprintf(stderr, "Try to add drive: %s\n", drive); +#endif + if ( CheckDrive(drive, &stbuf) > 0 ) + AddDrive(drive, &stbuf); + } + closedir(devdir); } else { - sprintf(drive, "/dev/%s", checklist[i]); - if ( CheckDrive(drive, &stbuf) > 0 ) { - AddDrive(drive, &stbuf); - } +#ifdef DEBUG_CDROM + fprintf(stderr, "cannot open dir: %s\n", checklist[i].dir); +#endif } } + /* SDLcdrom=malloc(sizeof(char) * 32); strcpy(SDLcdrom,"/dev/rdisk/cdrom0c");