annotate src/libsst.c @ 2367:ecf1ebac70d8

[xemacs-hg @ 2004-11-04 23:05:23 by ben] commit mega-patch configure.in: Turn off -Winline and -Wchar-subscripts. Use the right set of cflags when compiling modules. Rewrite ldap configuration to separate the inclusion of lber (needed in recent Cygwin) from the basic checks for the needed libraries. add a function for MAKE_JUNK_C; initially code was added to generate xemacs.def using this, but it will need to be rewritten. add an rm -f for junk.c to avoid weird Cygwin bug with cp -f onto an existing file. Sort list of auto-detected functions and eliminate unused checks for stpcpy, setlocale and getwd. Add autodetection of Cygwin scanf problems BETA: Rewrite section on configure to indicate what flags are important and what not. digest-doc.c, make-dump-id.c, profile.c, sorted-doc.c: Add proper decls for main(). make-msgfile.c: Document that this is old junk. Move proposal to text.c. make-msgfile.lex: Move proposal to text.c. make-mswin-unicode.pl: Convert error-generating code so that the entire message will be seen as a single unrecognized token. mule/mule-ccl.el: Update docs. lispref/mule.texi: Update CCL docs. ldap/eldap.c: Mule-ize. Use EXTERNAL_LIST_LOOP_2 instead of deleted EXTERNAL_LIST_LOOP. * XEmacs 21.5.18 "chestnut" is released. --------------------------------------------------------------- MULE-RELATED WORK: --------------------------------------------------------------- --------------------------- byte-char conversion --------------------------- buffer.c, buffer.h, insdel.c, text.c: Port FSF algorithm for byte-char conversion, replacing broken previous version. Track the char position of the gap. Add functions to do char-byte conversion downwards as well as upwards. Move comments about algorithm workings to internals manual. --------------------------- work on types --------------------------- alloc.c, console-x-impl.h, dump-data.c, dump-data.h, dumper.c, dialog-msw.c, dired-msw.c, doc.c, editfns.c, esd.c, event-gtk.h, event-msw.c, events.c, file-coding.c, file-coding.h, fns.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-shared.c, glyphs-x.c, glyphs.c, glyphs.h, gui.c, hpplay.c, imgproc.c, intl-win32.c, lrecord.h, lstream.c, keymap.c, lisp.h, libsst.c, linuxplay.c, miscplay.c, miscplay.h, mule-coding.c, nas.c, nt.c, ntheap.c, ntplay.c, objects-msw.c, objects-tty.c, objects-x.c, print.c, process-nt.c, process.c, redisplay.h, select-common.h, select-gtk.c, select-x.c, sgiplay.c, sound.c, sound.h, sunplay.c, sysfile.h, sysdep.c, syswindows.h, text.c, unexnt.c, win32.c, xgccache.c: Further work on types. This creates a full set of types for all the basic semantics of `char' that I have so far identified, so that its semantics can always be identified for the purposes of proper Mule-safe code, and the raw use of `char' always avoided. (1) More type renaming, for consistency of naming. Char_ASCII -> Ascbyte UChar_ASCII -> UAscbyte Char_Binary -> CBinbyte UChar_Binary -> Binbyte SChar_Binary -> SBinbyte (2) Introduce Rawbyte, CRawbyte, Boolbyte, Chbyte, UChbyte, and Bitbyte and use them. (3) New types Itext, Wexttext and Textcount for separating out the concepts of bytes and textual units (different under UTF-16 and UTF-32, which are potential internal encodings). (4) qxestr*_c -> qxestr*_ascii. lisp.h: New; goes with other qxe() functions. #### Maybe goes in a different section. lisp.h: Group generic int-type defs together with EMACS_INT defs. lisp.h: * lisp.h (WEXTTEXT_IS_WIDE) New defns. lisp.h: New type to replace places where int occurs as a boolean. It's signed because occasionally people may want to use -1 as an error value, and because unsigned ints are viral -- see comments in the internals manual against using them. dynarr.c: int -> Bytecount. --------------------------- Mule-izing --------------------------- device-x.c: Partially Mule-ize. dumper.c, dumper.h: Mule-ize. Use Rawbyte. Use stderr_out not printf. Use wext_*(). sysdep.c, syswindows.h, text.c: New Wexttext API for manipulation of external text that may be Unicode (e.g. startup code under Windows). emacs.c: Mule-ize. Properly deal with argv in external encoding. Use wext_*() and Wexttext. Use Rawbyte. #if 0 some old junk on SCO that is unlikely to be correct. Rewrite allocation code in run-temacs. emacs.c, symsinit.h, win32.c: Rename win32 init function and call it even earlier, to initialize mswindows_9x_p even earlier, for use in startup code (XEUNICODE_P). process.c: Use _wenviron not environ under Windows, to get Unicode environment variables. event-Xt.c: Mule-ize drag-n-drop related stuff. dragdrop.c, dragdrop.h, frame-x.c: Mule-ize. text.h: Add some more stand-in defines for particular kinds of conversion; use in Mule-ization work in frame-x.c etc. --------------------------- Freshening --------------------------- intl-auto-encap-win32.c, intl-auto-encap-win32.h: Regenerate. --------------------------- Unicode-work --------------------------- intl-win32.c, syswindows.h: Factor out common options to MultiByteToWideChar and WideCharToMultiByte. Add convert_unicode_to_multibyte_malloc() and convert_unicode_to_multibyte_dynarr() and use. Add stuff for alloca() conversion of multibyte/unicode. alloc.c: Use dfc_external_data_len() in case of unicode coding system. alloc.c, mule-charset.c: Don't zero out and reinit charset Unicode tables. This fucks up dump-time loading. Anyway, either we load them at dump time or run time, never both. unicode.c: Dump the blank tables as well. --------------------------------------------------------------- DOCUMENTATION, MOSTLY MULE-RELATED: --------------------------------------------------------------- EmacsFrame.c, emodules.c, event-Xt.c, fileio.c, input-method-xlib.c, mule-wnnfns.c, redisplay-gtk.c, redisplay-tty.c, redisplay-x.c, regex.c, sysdep.c: Add comment about Mule work needed. text.h: Add more documentation describing why DFC routines were not written to return their value. Add some other DFC documentation. console-msw.c, console-msw.h: Add pointer to docs in win32.c. emacs.c: Add comments on sources of doc info. text.c, charset.h, unicode.c, intl-win32.c, intl-encap-win32.c, text.h, file-coding.c, mule-coding.c: Collect background comments and related to text matters and internationalization, and proposals for work to be done, in text.c or Internals manual, stuff related to specific textual API's in text.h, and stuff related to internal implementation of Unicode conversion in unicode.c. Put lots of pointers to the comments to make them easier to find. s/mingw32.h, s/win32-common.h, s/win32-native.h, s/windowsnt.h, win32.c: Add bunches of new documentation on the different kinds of builds and environments under Windows and how they work. Collect this info in win32.c. Add pointers to these docs in the relevant s/* files. emacs.c: Document places with long comments. Remove comment about exiting, move to internals manual, put in pointer. event-stream.c: Move docs about event queues and focus to internals manual, put in pointer. events.h: Move docs about event stream callbacks to internals manual, put in pointer. profile.c, redisplay.c, signal.c: Move documentation to the Internals manual. process-nt.c: Add pointer to comment in win32-native.el. lisp.h: Add comments about some comment conventions. lisp.h: Add comment about the second argument. device-msw.c, redisplay-msw.c: @@#### comments are out-of-date. --------------------------------------------------------------- PDUMP WORK (MOTIVATED BY UNICODE CHANGES) --------------------------------------------------------------- alloc.c, buffer.c, bytecode.c, console-impl.h, console.c, device.c, dumper.c, lrecord.h, elhash.c, emodules.h, events.c, extents.c, frame.c, glyphs.c, glyphs.h, mule-charset.c, mule-coding.c, objects.c, profile.c, rangetab.c, redisplay.c, specifier.c, specifier.h, window.c, lstream.c, file-coding.h, file-coding.c: PDUMP: Properly implement dump_add_root_block(), which never worked before, and is necessary for dumping Unicode tables. Pdump name changes for accuracy: XD_STRUCT_PTR -> XD_BLOCK_PTR. XD_STRUCT_ARRAY -> XD_BLOCK_ARRAY. XD_C_STRING -> XD_ASCII_STRING. *_structure_* -> *_block_*. lrecord.h: some comments added about dump_add_root_block() vs dump_add_root_block_ptr(). extents.c: remove incorrect comment about pdump problems with gap array. --------------------------------------------------------------- ALLOCATION --------------------------------------------------------------- abbrev.c, alloc.c, bytecode.c, casefiddle.c, device-msw.c, device-x.c, dired-msw.c, doc.c, doprnt.c, dragdrop.c, editfns.c, emodules.c, file-coding.c, fileio.c, filelock.c, fns.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-x.c, gui-msw.c, gui-x.c, imgproc.c, intl-win32.c, lread.c, menubar-gtk.c, menubar.c, nt.c, objects-msw.c, objects-x.c, print.c, process-nt.c, process-unix.c, process.c, realpath.c, redisplay.c, search.c, select-common.c, symbols.c, sysdep.c, syswindows.h, text.c, text.h, ui-byhand.c: New macros {alloca,xnew}_{itext,{i,ext,raw,bin,asc}bytes} for more convenient allocation of these commonly requested items. Modify functions to use alloca_ibytes, alloca_array, alloca_extbytes, xnew_ibytes, etc. also XREALLOC_ARRAY, xnew. alloc.c: Rewrite the allocation functions to factor out repeated code. Add assertions for freeing dumped data. lisp.h: Moved down and consolidated with other allocation stuff. lisp.h, dynarr.c: New functions for allocation that's very efficient when mostly in LIFO order. lisp.h, text.c, text.h: Factor out some stuff for general use by alloca()-conversion funs. text.h, lisp.h: Fill out convenience routines for allocating various kinds of bytes and put them in lisp.h. Use them in place of xmalloc(), ALLOCA(). text.h: Fill out the convenience functions so the _MALLOC() kinds match the alloca() kinds. --------------------------------------------------------------- ERROR-CHECKING --------------------------------------------------------------- text.h: Create ASSERT_ASCTEXT_ASCII() and ASSERT_ASCTEXT_ASCII_LEN() from similar Eistring checkers and change the Eistring checkers to use them instead. --------------------------------------------------------------- MACROS IN LISP.H --------------------------------------------------------------- lisp.h: Redo GCPRO declarations. Create a "base" set of functions that can be used to generate any kind of gcpro sets -- regular, ngcpro, nngcpro, private ones used in GC_EXTERNAL_LIST_LOOP_2. buffer.c, callint.c, chartab.c, console-msw.c, device-x.c, dialog-msw.c, dired.c, extents.c, ui-gtk.c, rangetab.c, nt.c, mule-coding.c, minibuf.c, menubar-msw.c, menubar.c, menubar-gtk.c, lread.c, lisp.h, gutter.c, glyphs.c, glyphs-widget.c, fns.c, fileio.c, file-coding.c, specifier.c: Eliminate EXTERNAL_LIST_LOOP, which does not check for circularities. Use EXTERNAL_LIST_LOOP_2 instead or EXTERNAL_LIST_LOOP_3 or EXTERNAL_PROPERTY_LIST_LOOP_3 or GC_EXTERNAL_LIST_LOOP_2 (new macro). Removed/redid comments on EXTERNAL_LIST_LOOP. --------------------------------------------------------------- SPACING FIXES --------------------------------------------------------------- callint.c, hftctl.c, number-gmp.c, process-unix.c: Spacing fixes. --------------------------------------------------------------- FIX FOR GEOMETRY PROBLEM IN FIRST FRAME --------------------------------------------------------------- unicode.c: Add workaround for newlib bug in sscanf() [should be fixed by release 1.5.12 of Cygwin]. toolbar.c: bug fix for problem of initial frame being 77 chars wide on Windows. will be overridden by my other ws. --------------------------------------------------------------- FIX FOR LEAKING PROCESS HANDLES: --------------------------------------------------------------- process-nt.c: Fixes for leaking handles. Inspired by work done by Adrian Aichner <adrian@xemacs.org>. --------------------------------------------------------------- FIX FOR CYGWIN BUG (Unicode-related): --------------------------------------------------------------- unicode.c: Add workaround for newlib bug in sscanf() [should be fixed by release 1.5.12 of Cygwin]. --------------------------------------------------------------- WARNING FIXES: --------------------------------------------------------------- console-stream.c: `reinit' is unused. compiler.h, event-msw.c, frame-msw.c, intl-encap-win32.c, text.h: Add stuff to deal with ANSI-aliasing warnings I got. regex.c: Gather includes together to avoid warning. --------------------------------------------------------------- CHANGES TO INITIALIZATION ROUTINES: --------------------------------------------------------------- buffer.c, emacs.c, console.c, debug.c, device-x.c, device.c, dragdrop.c, emodules.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, events.c, extents.c, faces.c, file-coding.c, fileio.c, font-lock.c, frame-msw.c, glyphs-widget.c, glyphs.c, gui-x.c, insdel.c, lread.c, lstream.c, menubar-gtk.c, menubar-x.c, minibuf.c, mule-wnnfns.c, objects-msw.c, objects.c, print.c, scrollbar-x.c, search.c, select-x.c, text.c, undo.c, unicode.c, window.c, symsinit.h: Call reinit_*() functions directly from emacs.c, for clarity. Factor out some redundant init code. Move disallowed stuff that had crept into vars_of_glyphs() into complex_vars_of_glyphs(). Call init_eval_semi_early() from eval.c not in the middle of vars_of_() in emacs.c since there should be no order dependency in the latter calls. --------------------------------------------------------------- ARMAGEDDON: --------------------------------------------------------------- alloc.c, emacs.c, lisp.h, print.c: Rename inhibit_non_essential_printing_operations to inhibit_non_essential_conversion_operations. text.c: Assert on !inhibit_non_essential_conversion_operations. console-msw.c, print.c: Don't do conversion in SetConsoleTitle or FindWindow to avoid problems during armageddon. Put #errors for NON_ASCII_INTERNAL_FORMAT in places where problems would arise. --------------------------------------------------------------- CHANGES TO THE BUILD PROCEDURE: --------------------------------------------------------------- config.h.in, s/cxux.h, s/usg5-4-2.h, m/powerpc.h: Add comment about correct ordering of this file. Rearrange everything to follow this -- put all #undefs together and before the s&m files. Add undefs for HAVE_ALLOCA, C_ALLOCA, BROKEN_ALLOCA_IN_FUNCTION_CALLS, STACK_DIRECTION. Remove unused HAVE_STPCPY, HAVE_GETWD, HAVE_SETLOCALE. m/gec63.h: Deleted; totally broken, not used at all, not in FSF. m/7300.h, m/acorn.h, m/alliant-2800.h, m/alliant.h, m/altos.h, m/amdahl.h, m/apollo.h, m/att3b.h, m/aviion.h, m/celerity.h, m/clipper.h, m/cnvrgnt.h, m/convex.h, m/cydra5.h, m/delta.h, m/delta88k.h, m/dpx2.h, m/elxsi.h, m/ews4800r.h, m/gould.h, m/hp300bsd.h, m/hp800.h, m/hp9000s300.h, m/i860.h, m/ibmps2-aix.h, m/ibmrs6000.h, m/ibmrt-aix.h, m/ibmrt.h, m/intel386.h, m/iris4d.h, m/iris5d.h, m/iris6d.h, m/irist.h, m/isi-ov.h, m/luna88k.h, m/m68k.h, m/masscomp.h, m/mg1.h, m/mips-nec.h, m/mips-siemens.h, m/mips.h, m/news.h, m/nh3000.h, m/nh4000.h, m/ns32000.h, m/orion105.h, m/pfa50.h, m/plexus.h, m/pmax.h, m/powerpc.h, m/pyrmips.h, m/sequent-ptx.h, m/sequent.h, m/sgi-challenge.h, m/symmetry.h, m/tad68k.h, m/tahoe.h, m/targon31.h, m/tekxd88.h, m/template.h, m/tower32.h, m/tower32v3.h, m/ustation.h, m/vax.h, m/wicat.h, m/xps100.h: Delete C_ALLOCA, HAVE_ALLOCA, STACK_DIRECTION, BROKEN_ALLOCA_IN_FUNCTION_CALLS. All of this is auto-detected. When in doubt, I followed recent FSF sources, which also have these things deleted.
author ben
date Thu, 04 Nov 2004 23:08:28 +0000
parents 943eaba38521
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* libsst.c - SPARC sound tools library
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 **
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ** Copyright (C) 1989 by Jef Poskanzer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 **
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 ** Permission to use, copy, modify, and distribute this software and its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 ** documentation for any purpose and without fee is hereby granted, provided
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ** that the above copyright notice appear in all copies and that both that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 ** copyright notice and this permission notice appear in supporting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 ** documentation. This software is provided "as is" without express or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 ** implied warranty.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ** Hacked on by jwz for emacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
18 /* This file Mule-ized by Ben Wing, 5-15-01. */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
19
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 #include "lisp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
23 #include "sound.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 #include "libsst.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
27 #include "sysfile.h"
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
28
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
29
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 #define AUDBUF 1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 sst_open(play_level, record_level)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 int play_level, record_level;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 int fd, i, gr, ger, gx;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 struct audio_ioctl ai;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
38 Extbyte *ep;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 563
diff changeset
40 fd = open ("/dev/audio", O_RDWR);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 if ( fd < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
43 sound_perror( "sst_open: open /dev/audio" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 return( fd );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 #ifdef AUDIOSETQSIZE /* This no longer exists as of 4.1.2. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 /* Shrink audio device's queue size, to cut down time delay. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 i = AUDBUF;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 if ( ioctl( fd, AUDIOSETQSIZE, &i ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
53 sound_perror( "sst_open: SETQSIZE" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 return( fd );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 #endif /* AUDIOSETQSIZE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 /* Set gains. -10 <= ger <= 18, -18 <= gr <= 12, -18 <= gx <= 12. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 if (!play_level)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 play_level = 75;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 563
diff changeset
62 if ( (ep = egetenv( "SST_PLAY" )) != NULL )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 play_level = atoi( ep );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 if ( play_level < 0 || play_level > 99 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
67 sound_warn( "sst_open: SST_PLAY must be between 0 and 99" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 return( -1 );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 if (!record_level)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 record_level = 75;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 563
diff changeset
75 if ( (ep = egetenv( "SST_RECORD" )) != NULL )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 record_level = atoi( ep );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 if ( record_level < 0 || record_level > 99 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
80 sound_warn( "sst_open: SST_RECORD must be between 0 and 99" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 return( -1 );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 play_level = play_level * 59 / 100 - 28;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 ger = play_level / 2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 gr = play_level - ger;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 if ( ger < -10 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 ger = -10;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 gr = play_level - ger;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 if ( gr > 12 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 gr = 12;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 ger = play_level - gr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 gx = record_level * 31 / 100 - 18;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 sst_set_gr( fd, gr );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 sst_set_ger( fd, ger );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 sst_set_gx( fd, gx );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 /* Initialize the MMR2 register to send the output to either
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 ** the speaker or the earphone jack, depending on SST_EARPHONES.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 ai.control = AUDIO_MAP_MMR2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 if ( ioctl( fd, AUDIOGETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
110 sound_perror( "sst_open: GETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 return( -1 );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 }
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 563
diff changeset
113 if ( (ep = egetenv( "SST_EARPHONES" )) != NULL )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 ai.data[0] &= ~AUDIO_MMR2_BITS_LS;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 ai.data[0] |= AUDIO_MMR2_BITS_LS;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
119 sound_perror( "sst_open: SETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 return( fd );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 return fd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 sst_close( fd )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 int fd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 struct audio_ioctl ai;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 ai.control = AUDIO_MAP_MMR1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 ai.data[0] = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
136 sound_perror( "sst_close: SETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 ai.control = AUDIO_MAP_MMR2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 ai.data[0] = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
142 sound_perror( "sst_close: SETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 close( fd );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 /* These are tables of values to be loaded into various gain registers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 771
diff changeset
150 static Binbyte ger_table[][2] = {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 0xaa, 0xaa, /* -10db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 0x79, 0xac,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 0x41, 0x99,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 0x9c, 0xde,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 0x74, 0x9c, /* -6db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 0x6a, 0xae,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 0xab, 0xdf,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 0x64, 0xab,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 0x2a, 0xbd,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 0x5c, 0xce,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 0x00, 0x99, /* 0db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 0x43, 0xdd,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 0x52, 0xef,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 0x55, 0x42,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 0x31, 0xdd,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 0x43, 0x1f,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 0x40, 0xdd, /* 6db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 0x44, 0x0f,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 0x31, 0x1f,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 0x10, 0xdd,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 0x41, 0x0f,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 0x60, 0x0b,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 0x42, 0x10, /* 12db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 0x11, 0x0f,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 0x72, 0x00,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 0x21, 0x10,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 0x22, 0x00,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 0x00, 0x0b,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 0x00, 0x0f, /* 18db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 771
diff changeset
183 static Binbyte gr_gx_table[][2] = {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 0x8b, 0x7c, /* -18db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 0x8b, 0x35,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 0x8b, 0x24,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 0x91, 0x23,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 0x91, 0x2a,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 0x91, 0x3b,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 0x91, 0xf9, /* -12db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 0x91, 0xb6,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 0x91, 0xa4,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 0x92, 0x32,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 0x92, 0xaa,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 0x93, 0xb3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 0x9f, 0x91, /* -6db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 0x9b, 0xf9,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 0x9a, 0x4a,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 0xa2, 0xa2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 0xaa, 0xa3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 0xbb, 0x52,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 0x08, 0x08, /* 0db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 0x3d, 0xac,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 0x25, 0x33,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 0x21, 0x22,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 0x12, 0xa2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 0x11, 0x3b,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 0x10, 0xf2, /* 6db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 0x02, 0xca,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 0x01, 0x5a,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 0x01, 0x12,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 0x00, 0x32,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 0x00, 0x13,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 0x00, 0x0e, /* 12db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 sst_set_ger( fd, value )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 int fd, value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 struct audio_ioctl ai;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 if ( ( value < -10 ) || ( value > 18 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
225 Extbyte buf [255];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 sprintf (buf, "sst_set_ger: GER %d out of range", value);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
227 sound_warn(buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 /* Add 10 to the value to get the index into the table. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 ai.control = AUDIO_MAP_GER;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 ai.data[0] = ger_table[value + 10][1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 ai.data[1] = ger_table[value + 10][0];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
238 sound_perror( "sst_set_ger: SETREG GER" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 ai.control = AUDIO_MAP_MMR1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 if ( ioctl( fd, AUDIOGETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
244 sound_perror( "sst_set_ger: GETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 ai.data[0] |= AUDIO_MMR1_BITS_LOAD_GER;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
249 sound_perror( "sst_set_ger: SETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 sst_set_gr( fd, value )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 int fd, value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 struct audio_ioctl ai;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 if ( ( value < -18 ) || ( value > 12 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
261 Extbyte buf [255];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 sprintf (buf, "sst_set_gr: GR %d out of range", value);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
263 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 ai.control = AUDIO_MAP_GR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 ai.data[0] = gr_gx_table[value + 18][1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 ai.data[1] = gr_gx_table[value + 18][0];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
273 sound_perror( "sst_set_gr: SETREG GR" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 ai.control = AUDIO_MAP_MMR1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 if ( ioctl( fd, AUDIOGETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
279 sound_perror( "sst_set_gr: GETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 ai.data[0] |= AUDIO_MMR1_BITS_LOAD_GR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
284 sound_perror( "sst_set_gr: SETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 sst_set_gx( fd, value )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 int fd, value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 struct audio_ioctl ai;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
293 Extbyte buf [255];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 if ( ( value < -18 ) || ( value > 12 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 sprintf (buf, "sst_set_gx: GX %d out of range", value);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
298 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 /* We add 18 to get the index into the table, since entry 0 represents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 * -18db.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 ai.control = AUDIO_MAP_GX;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 ai.data[0] = gr_gx_table[value + 18][1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 ai.data[1] = gr_gx_table[value + 18][0];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
311 sound_perror( "sst_set_gx: SETREG GX" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 ai.control = AUDIO_MAP_MMR1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 if ( ioctl( fd, AUDIOGETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
317 sound_perror( "sst_set_gx: GETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 ai.data[0] |= AUDIO_MMR1_BITS_LOAD_GX;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
322 sound_perror( "sst_set_gx: SETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 sst_tones( fd, dhz1, dhz2, thz, rhz, usec )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 int fd, dhz1, dhz2, thz, rhz, usec;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
330 Extbyte buf [255];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 struct audio_ioctl ai;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 int dval1, dval2, tval, rval;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 771
diff changeset
333 Binbyte oldmmr2, newmmr2;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 if ( dhz1 == 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 dval1 = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 dval1 = ( dhz1 * 128 + 63 ) / 1000;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 if ( ( dval1 < 1 ) || ( dval1 > 255 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 sprintf(buf, "sst_tones: dhz1 %d out of range", dhz1 );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
343 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 if ( dhz2 == 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 dval2 = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 dval2 = ( dhz2 * 128 + 63 ) / 1000;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 if ( ( dval2 < 1 ) || ( dval2 > 255 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 sprintf(buf, "sst_tones: dhz2 %d out of range", dhz2 );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
356 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 if ( thz == 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 tval = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 tval = ( thz * 128 + 63 ) / 2000;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 if ( ( tval < 1 ) || ( tval > 255 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 sprintf(buf, "sst_tones: thz %d out of range", thz );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
369 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 if ( rhz == 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 rval = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 rval = ( rhz * 128 + 63 ) / 2000;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 if ( ( rval < 1 ) || ( rval > 255 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 sprintf(buf, "sst_tones: rhz %d out of range", dhz2 );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
382 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 if ( ( dval1 != 0 || dval2 != 0 ) && ( tval != 0 || rval != 0 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 sprintf(buf, "sst_tones: cannot use DTMF and TONE or RINGER at the same time", dhz2 );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
390 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 if ( tval != 0 && rval != 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 sprintf(buf, "sst_tones: cannot use TONE and RINGER at the same time", dhz2 );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
397 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 ai.control = AUDIO_MAP_MMR2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 if ( ioctl( fd, AUDIOGETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
404 sound_perror( "sst_tones: GETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 oldmmr2 = newmmr2 = ai.data[0];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 if ( dval1 != 0 || dval2 != 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 newmmr2 |= AUDIO_MMR2_BITS_DTMF;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 ai.control = AUDIO_MAP_FTGR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 ai.data[0] = dval1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 ai.data[1] = dval2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
416 sound_perror( "sst_tones: SETREG FTGR" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 if ( tval != 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 newmmr2 |= AUDIO_MMR2_BITS_TONE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 ai.control = AUDIO_MAP_FTGR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 ai.data[0] = tval;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 ai.data[1] = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
428 sound_perror( "sst_tones: SETREG FTGR" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 if ( rval != 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 newmmr2 |= AUDIO_MMR2_BITS_RINGER;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 ai.control = AUDIO_MAP_FTGR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 ai.data[0] = rval;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 ai.data[1] = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
440 sound_perror( "sst_tones: SETREG FTGR" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 ai.control = AUDIO_MAP_MMR2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 ai.data[0] = newmmr2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
448 sound_perror( "sst_tones: SETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 usleep( usec );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 ai.data[0] = oldmmr2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
456 sound_perror( "sst_tones: SETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 sst_dtmf( fd, dial, usecper, usecpause )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 int fd, usecper, usecpause;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
463 Extbyte *dial;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
465 Extbyte *cp;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 for ( cp = dial; *cp != '\0'; cp++ )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 switch ( *cp )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 case '1': sst_tones( fd, 703, 1211, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 case '2': sst_tones( fd, 703, 1336, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 case '3': sst_tones( fd, 703, 1492, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 case 'A': sst_tones( fd, 703, 1648, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 case '4': sst_tones( fd, 773, 1211, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 case '5': sst_tones( fd, 773, 1336, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 case '6': sst_tones( fd, 773, 1492, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 case 'B': sst_tones( fd, 773, 1648, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 case '7': sst_tones( fd, 859, 1211, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 case '8': sst_tones( fd, 859, 1336, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 case '9': sst_tones( fd, 859, 1492, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 case 'C': sst_tones( fd, 859, 1648, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 case '*': sst_tones( fd, 945, 1211, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 case '0': sst_tones( fd, 945, 1336, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 case '#': sst_tones( fd, 945, 1492, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 case 'D': sst_tones( fd, 945, 1648, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 case ' ': case '-': case '(': case ')': case '+':
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 continue; /* ignore */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 case ',': usleep( usecper ); break; /* big pause */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
495 Extbyte buf [255];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 sprintf( buf, "sst_dtmf: unknown dialing code '%c'", *cp );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
497 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 usleep( usecpause );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 }