SoundStream.st
changeset 594 0d62900b49c8
parent 593 719f9d1c7bbb
child 595 fcff6c911d4a
--- a/SoundStream.st	Mon Dec 15 11:35:37 1997 +0100
+++ b/SoundStream.st	Mon Dec 15 11:54:20 1997 +0100
@@ -31,8 +31,16 @@
 #endif
 
 #ifdef LINUX
+# define DEV_AUDIO
+# include <sys/soundcard.h>
+#endif
+
+#if defined(sunos) || defined(solaris)
+# define DEV_AUDIO
+#endif
+
+#ifdef DEV_AUDIO
 # include <stdio.h>
-# include <sys/soundcard.h>
 #endif
 %}
 ! !
@@ -576,7 +584,8 @@
     int __stereo = 0;
     int __channels = 0;
 
-#ifdef LINUX
+#if defined(DEV_AUDIO) 
+# if defined(LINUX)
     if (ioctl(f, SNDCTL_DSP_GETBLKSIZE, &__blockSize) >= 0) {
 	blockSize = __MKSMALLINT(__blockSize);
     }
@@ -592,8 +601,8 @@
     if (ioctl(f, SNDCTL_DSP_GETFMTS, &__audioFormatMask) >= 0) {
 	audioFormatMask = __MKSMALLINT(__audioFormatMask);
     }
-
-#endif
+# endif /* LINUX */
+#endif /* DEV_AUDIO */
 %}.
     blockSize notNil ifTrue:[
 	Transcript show:'blockSize: '; showCR:blockSize
@@ -653,7 +662,8 @@
     int f = __intVal(fd);
     int __audioFormatMask = 0;
 
-#ifdef LINUX
+#if defined(DEV_AUDIO)
+# if defined(LINUX)
     if (ioctl(f, SNDCTL_DSP_GETFMTS, &__audioFormatMask) >= 0) {
 	audioFormatMask = __MKSMALLINT(__audioFormatMask);
 
@@ -668,7 +678,9 @@
 	supports_U16_BE = (__audioFormatMask & AFMT_U16_BE) ? true : false;
 	supports_MPEG = (__audioFormatMask & AFMT_MPEG) ? true : false;
     }
-#endif
+# endif
+#endif /* DEV_AUDIO */
+
 #ifdef IRIS_AUDIO
 	supports_U8 = true;
 	supports_U16_BE = true;
@@ -738,7 +750,7 @@
     int f = __intVal(fd);
     int __dummy;
 
-#ifdef LINUX
+#if defined(DEV_AUDIO) && defined(LINUX)
     if (ioctl(f, SNDCTL_DSP_RESET, &__dummy) >= 0) {
 	RETURN (true);
     }
@@ -770,7 +782,7 @@
 	unsigned char ub[2];
     } u;
 
-#ifdef LINUX
+#if defined(DEV_AUDIO) && defined(LINUX)
     if (__isSymbol(aSymbol)) {
 
 	if (aSymbol == @symbol(U16)) {
@@ -843,7 +855,7 @@
     int f = __intVal(fd);
     int __nCh = 0;
 
-#ifdef LINUX
+#if defined(DEV_AUDIO) && defined(LINUX)
     if (__isSmallInteger(nChannels)) {
 	__nCh = __intVal(nChannels);
 	if (ioctl(f, SOUND_PCM_WRITE_CHANNELS, &__nCh) >= 0) {
@@ -878,7 +890,7 @@
     int f = __intVal(fd);
     int __blockSize = 0;
 
-#ifdef LINUX
+#if defined(DEV_AUDIO) && defined(LINUX)
     if (__isSmallInteger(blockSize)) {
 	__blockSize = __intVal(blockSize);
 	if (ioctl(f, SNDCTL_DSP_SETFRAGMENT, &__blockSize) >= 0) {
@@ -908,7 +920,7 @@
     int __rate = 0;
     int __rateWant;
 
-#ifdef LINUX
+#if defined(DEV_AUDIO) && defined(LINUX)
     if (__isSmallInteger(hz)) {
 	__rate = __rateWant = __intVal(hz);
 	if (ioctl(f, SOUND_PCM_WRITE_RATE, &__rate) >= 0) {
@@ -1026,38 +1038,35 @@
 closeFile
     "a stream has been collected - close the file"
 
-    OperatingSystem getOSType = 'irix' ifTrue:[
-%{ 
+%{
 #ifdef IRIS_AUDIO
-	ALcloseport(_ALportVal(__INST(filePointer)));
+    ALcloseport(_ALportVal(__INST(filePointer)));
 #endif
-%}
-    ] ifFalse:[
-%{
-	OBJ fp;
-	int fd;
-	FILE *f;
+#if defined(DEV_AUDIO)
+    OBJ fp;
+    int fd;
+    FILE *f;
 
-	if ((fp = __INST(filePointer)) != nil) {
-	    f = __FILEVal(fp);
-	    __INST(filePointer) = nil;
-#ifdef LINUX
-	    sigsetmask(~0);
-#endif
-	    if (__INST(buffered) == true) {
-		fflush(f);
-		fclose(f);
-	    } else {
-		fd = fileno(f);
-		close(fd);
-		fclose(f);
-	    }
-#ifdef LINUX
-	    sigsetmask(0);
-#endif
+    if ((fp = __INST(filePointer)) != nil) {
+	f = __FILEVal(fp);
+	__INST(filePointer) = nil;
+# ifdef LINUX
+	sigsetmask(~0);
+# endif
+	if (__INST(buffered) == true) {
+	    fflush(f);
+	    fclose(f);
+	} else {
+	    fd = fileno(f);
+	    close(fd);
+	    fclose(f);
 	}
+# ifdef LINUX
+	sigsetmask(0);
+# endif
+    }
+#endif /* DEV_AUDIO */
 %}
-    ]
 !
 
 flush
@@ -1079,7 +1088,7 @@
     RETURN(self);
 #endif
 
-#ifdef LINUX
+#if defined(DEV_AUDIO) && defined(LINUX)
     if (__isSmallInteger(fd)) {
 	int f = __intVal(fd);
 	/* ... */
@@ -1171,7 +1180,7 @@
   }
 #endif
 
-#ifdef LINUX
+#if defined(DEV_AUDIO)
    /*
     * redefine to work around a bug in the linux sound driver;
     * if a write is interrupted (EINTR), it is not defined, how many
@@ -1199,7 +1208,9 @@
 		if ( (offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs)) ) {
 		    cp = (char *)__InstPtr(anObject) + OHDR_SIZE + offs;
 
+# ifdef LINUX
 		    sigsetmask(~0);
+# endif
 		    do {
 			n = cnt;
 			if (n > 4096) n = 4096;
@@ -1214,7 +1225,9 @@
 			    cnt -= n;
 			}
 		    } while (cnt);
+# ifdef LINUX
 		    sigsetmask(0);
+# endif
 		}
 		RETURN (count);
 	    }
@@ -1227,11 +1240,6 @@
 !
 
 openWithMode:aMode
-    OperatingSystem getOSType = 'irix' ifFalse:[
-	"its a regular file open"
-	^ super openWithMode:aMode
-    ].
-
     ((aMode = 'r') or:[aMode = 'w']) ifFalse:[
 	self error:'invalid mode'.
 	^ nil
@@ -1302,10 +1310,12 @@
     __INST(sampleRate) = __MKSMALLINT(params[3]);
 
     ALfreeconfig(config);
+    RETURN (self);
   }
 #endif
 %}.
-    ^ self
+    "its a regular file open (i.e. /dev/audio) "
+    ^ super openWithMode:aMode
 ! !
 
 !SoundStream methodsFor:'sine wave generation'!
@@ -1378,4 +1388,4 @@
 !SoundStream class methodsFor:'documentation'!
 
 version
-^ '$Header: /cvs/stx/stx/libbasic2/SoundStream.st,v 1.27 1997-12-15 10:35:37 cg Exp $'! !
+^ '$Header: /cvs/stx/stx/libbasic2/SoundStream.st,v 1.28 1997-12-15 10:54:20 cg Exp $'! !