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.
--- a/configure.in Mon Dec 27 20:03:53 2004 +0000
+++ b/configure.in Sun Jan 02 05:05:21 2005 +0000
@@ -1280,12 +1280,11 @@
pthread_lib=""
;;
*-*-osf*)
+ pthread_cflags="-D_REENTRANT"
if test x$ac_cv_prog_gcc = xyes; then
- pthread_cflags="-D_REENTRANT"
pthread_lib="-lpthread -lrt"
else
- pthread_cflags="-pthread"
- pthread_lib="-lpthread -lrt"
+ pthread_lib="-lpthread -lexc -lrt"
fi
;;
*)
--- a/include/begin_code.h Mon Dec 27 20:03:53 2004 +0000
+++ b/include/begin_code.h Sun Jan 02 05:05:21 2005 +0000
@@ -102,7 +102,8 @@
/* Add any special compiler-specific cases here */
#if defined(_MSC_VER) || defined(__BORLANDC__) || \
defined(__DMC__) || defined(__SC__) || \
- defined(__WATCOMC__) || defined(__LCC__)
+ defined(__WATCOMC__) || defined(__LCC__) || \
+ defined(__DECC)
#ifndef __inline__
#define __inline__ __inline
#endif
--- a/src/audio/SDL_mixer_MMX.c Mon Dec 27 20:03:53 2004 +0000
+++ b/src/audio/SDL_mixer_MMX.c Sun Jan 02 05:05:21 2005 +0000
@@ -1,14 +1,16 @@
-// MMX assembler version of SDL_MixAudio for signed little endian 16 bit samples and signed 8 bit samples
-// Copyright 2002 Stephane Marchesin (stephane.marchesin@wanadoo.fr)
-// This code is licensed under the LGPL (see COPYING for details)
-//
-// Assumes buffer size in bytes is a multiple of 16
-// Assumes SDL_MIX_MAXVOLUME = 128
+/*
+ MMX assembler version of SDL_MixAudio for signed little endian 16 bit samples and signed 8 bit samples
+ Copyright 2002 Stephane Marchesin (stephane.marchesin@wanadoo.fr)
+ This code is licensed under the LGPL (see COPYING for details)
+
+ Assumes buffer size in bytes is a multiple of 16
+ Assumes SDL_MIX_MAXVOLUME = 128
+*/
-////////////////////////////////////////////////
-// Mixing for 16 bit signed buffers
-////////////////////////////////////////////////
+/***********************************************
+* Mixing for 16 bit signed buffers
+***********************************************/
#if defined(i386) && defined(__GNUC__) && defined(USE_ASMBLIT)
void SDL_MixAudio_MMX_S16(char* dst,char* src,unsigned int size,int volume)
--- a/src/audio/SDL_mixer_MMX.h Mon Dec 27 20:03:53 2004 +0000
+++ b/src/audio/SDL_mixer_MMX.h Sun Jan 02 05:05:21 2005 +0000
@@ -1,9 +1,11 @@
-// headers for MMX assembler version of SDL_MixAudio
-// Copyright 2002 Stephane Marchesin (stephane.marchesin@wanadoo.fr)
-// This code is licensed under the LGPL (see COPYING for details)
-//
-// Assumes buffer size in bytes is a multiple of 16
-// Assumes SDL_MIX_MAXVOLUME = 128
+/*
+ headers for MMX assembler version of SDL_MixAudio
+ Copyright 2002 Stephane Marchesin (stephane.marchesin@wanadoo.fr)
+ This code is licensed under the LGPL (see COPYING for details)
+
+ Assumes buffer size in bytes is a multiple of 16
+ Assumes SDL_MIX_MAXVOLUME = 128
+*/
#if defined(i386) && defined(__GNUC__) && defined(USE_ASMBLIT)
--- 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");