*** soundbyte.c.orig Wed Mar 5 23:04:49 1997 --- soundbyte.c Wed Sep 24 02:39:23 1997 *************** *** 15,21 **** --- 15,23 ---- #ifdef Solaris #include #else + #ifndef __FreeBSD__ #include + #endif #include #endif *************** *** 72,77 **** --- 74,81 ---- static unsigned char *playbuf= NULL; /* Current play pointer */ static int squelch = 0; /* Squelch value */ + void soundplayvol(); + /* Convert local gain into device parameters */ static unsigned scale_gain(g) *************** *** 96,101 **** --- 100,110 ---- } #endif + #ifndef sun + #ifdef HALF_DUPLEX + static int oldvol = -1; + #endif + #endif /* SOUNDINIT -- Open the sound peripheral and initialise for access. Return TRUE if successful, FALSE *************** *** 145,150 **** --- 154,174 ---- } ioctl(Audio_fd, AUDIO_SETINFO, &Audio_info); #endif + #ifndef sun + #ifdef HALF_DUPLEX + if (iomode == O_RDONLY) { + if (oldvol == -1) + oldvol = soundgetvol(); + soundplayvol(0); + } else if ( iomode == O_WRONLY + && oldvol != -1 + ) { + if (soundgetvol() == 0) + soundplayvol(oldvol); + oldvol = -1; + } + #endif + #endif return TRUE; } if (errno != EINTR) { *************** *** 160,165 **** --- 184,198 ---- void soundterm() { if (audiof >= 0) { + #ifndef sun + #ifdef HALF_DUPLEX + if (oldvol != -1) { + if (soundgetvol() == 0) + soundplayvol(oldvol); + oldvol = -1; + } + #endif + #endif if (close(audiof) < 0) { perror("closing audio device"); } *************** *** 210,219 **** arg = (value << 8) | value; ! if (ioctl(Audio_fd, MIXER_WRITE(SOUND_MIXER_PCM), &arg) < 0) ! perror("SOUND_MIXER_PCM"); #endif } /* SOUNDRECGAIN -- Set recording gain from 0 (minimum) to 100 (maximum). */ --- 243,272 ---- arg = (value << 8) | value; ! if (ioctl(Audio_fd, SOUND_MIXER_WRITE_PCM, &arg) < 0) ! perror("SOUND_MIXER_WRITE_PCM"); #endif } + + #ifndef sun + #ifdef HALF_DUPLEX + + /* SOUNDGETVOL -- Get current playback volume. */ + + int soundgetvol() + { + int arg, v1, v2; + + if (ioctl(Audio_fd, SOUND_MIXER_READ_PCM, &arg) < 0) { + perror("SOUND_MIXER_READ_PCM"); + return -1; + } + v1 = arg & 0xFF; + v2 = (arg >> 8) & 0xFF; + return (v1 > v2) ? v1 : v2; + } + #endif + #endif /* SOUNDRECGAIN -- Set recording gain from 0 (minimum) to 100 (maximum). */