$OpenBSD: patch-src_drivers_solaris_c,v 1.1 2001/04/05 19:31:42 espie Exp $
--- src/drivers/solaris.c.orig	Mon May 18 06:21:17 1998
+++ src/drivers/solaris.c	Thu Apr  5 21:23:52 2001
@@ -55,7 +55,9 @@ static void dummy () { }
 
 static char *help[] = {
     "gain=val", "Audio output gain (0 to 255)",
+#if !defined(__OpenBSD__)
     "port={s|h|l}", "Audio port (s[peaker], h[eadphones], l[ineout])",
+#endif
     "buffer=val", "Audio buffer size (default is 32768)",
     NULL
 };
@@ -86,6 +88,50 @@ struct xmp_drv_info drv_solaris = {
     NULL
 };
 
+#if defined(__OpenBSD__)
+static int setaudio (struct drv_config *cfg)
+{
+    audio_info_t ainfo;
+    int gain = 128;
+    int bsize = 32 * 1024;
+    char *token;
+    char **parm = cfg->parm;
+
+    parm_init ();
+    chkparm1 ("gain", gain = atoi (token));
+    chkparm1 ("buffer", bsize = atoi (token));
+    parm_end ();
+
+    if (gain < AUDIO_MIN_GAIN)
+	gain = AUDIO_MIN_GAIN;
+    if (gain > AUDIO_MAX_GAIN)
+	gain = AUDIO_MAX_GAIN;
+
+    AUDIO_INITINFO (&ainfo);
+
+    ainfo.play.sample_rate = cfg->rate;
+    ainfo.play.channels = cfg->mode + 1;
+    ainfo.play.precision = cfg->fmt & MIX_16BIT ? 16 : 8;
+    ainfo.play.encoding = cfg->fmt & MIX_16BIT ? AUDIO_ENCODING_SLINEAR : AUDIO_ENCODING_ULINEAR;
+    ainfo.play.buffer_size = bsize;
+
+    if (ioctl (audio_fd, AUDIO_SETINFO, &ainfo) == -1) {
+	close (audio_fd);
+	return 0;
+    }
+	
+    AUDIO_INITINFO (&ainfo);
+    ainfo.play.gain = gain;
+    ioctl(audio_fd, AUDIO_SETINFO, &ainfo);
+
+    drv_solaris.description = "OpenBSD Generic Audio";
+
+    cfg->mode++;
+
+    return 1;
+}
+
+#else
 
 static int setaudio (struct drv_config *cfg)
 {
@@ -150,10 +196,15 @@ static int setaudio (struct drv_config *
     return 1;
 }
 
+#endif
 
 static int init (struct drv_config *cfg)
 {
+#if defined(__OpenBSD__)
+    audio_fd = open ("/dev/sound", O_WRONLY);
+#else
     audio_fd = open ("/dev/audio", O_WRONLY);
+#endif
 
     if (audio_fd == -1)
 	return 0;
