?? configure.c
字號(hào):
/* * sound/configure.c - Configuration program for the Linux Sound Driver * * Copyright by Hannu Savolainen 1993 * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. 2. * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */#include <stdio.h>#define B(x) (1 << (x))/* * Option numbers */#define OPT_PAS 0#define OPT_SB 1#define OPT_ADLIB 2#define OPT_LAST_MUTUAL 2#define OPT_GUS 3#define OPT_MPU401 4#define OPT_HIGHLEVEL 5#define OPT_SBPRO 5#define OPT_SB16 6#define OPT_AUDIO 7#define OPT_MIDI_AUTO 8#define OPT_MIDI 9#define OPT_YM3812_AUTO 10 /* Select this automaticly if user selects * MIDI or AdLib driver */#define OPT_YM3812 11 /* Select this if the previous one was not * selected */#define OPT_SEQUENCER 12#define OPT_CHIP_MIDI 13 /* New support added at UW - Milwauklee UW - * Milwauklee */#define OPT_LAST 12#define ANY_DEVS (B(OPT_AUDIO)|B(OPT_MIDI)|B(OPT_SEQUENCER)|B(OPT_GUS)|B(OPT_MPU401))typedef struct { unsigned long conditions; unsigned long exclusive_options; char macro[20]; int verify; int alias; int default_answ; }hw_entry;/* * The rule table for the driver options. The first field defines a set of * options which must be selected before this entry can be selected. The * second field is a set of options which are not allowed with this one. If * the fourth field is zero, the option is selected without asking * confirmation from the user. * * With this version of the rule table it is possible to select just one type of * hardware. * * NOTE! Keep the following table and the questions array in sync with the * option numbering! */hw_entry hw_table[] ={/* 0 */ {0, 0, "PAS", 1, 0, 0}, {0, 0, "SB", 1, 0, 0}, {0, B (OPT_PAS) | B (OPT_SB), "ADLIB", 1, 0, 0},/* 3 */ {0, 0, "GUS", 1, 0, 0}, {0, 0, "MPU401", 1, 0, 0}, {B (OPT_SB), B (OPT_PAS), "SBPRO", 1, 0, 1}, {B (OPT_SB) | B (OPT_SBPRO), B (OPT_PAS), "SB16", 1, 0, 1}, {B (OPT_SB) | B (OPT_PAS) | B (OPT_GUS), 0, "AUDIO", 1, 0, 1}, {B (OPT_MPU401), 0, "MIDI_AUTO", 0, OPT_MIDI, 0}, {B (OPT_SB) | B (OPT_PAS) | B (OPT_MPU401) | B (OPT_GUS), 0, "MIDI", 1, 0, 1}, {B (OPT_ADLIB), 0, "YM3812_AUTO", 0, OPT_YM3812, 0}, {B (OPT_SB) | B (OPT_PAS) | B (OPT_ADLIB), B (OPT_YM3812_AUTO), "YM3812", 1, 0, 1},/* 10 */ {B (OPT_MIDI) | B (OPT_YM3812) | B (OPT_YM3812_AUTO) | B (OPT_GUS), 0, "SEQUENCER", 0, 0, 1}, {0, 0, "CHIP_MIDI", 1, 0, 0}};char *questions[] ={ "ProAudioSpectrum 16 support", "SoundBlaster support", "AdLib support", "Gravis Ultrasound support", "MPU-401 support (NOT for SB16)", "SoundBlaster Pro support", "SoundBlaster 16 support", "digitized voice support", "This should not be asked", "MIDI interface support", "This should not be asked", "FM synthesizer (YM3812/OPL-3) support", "/dev/sequencer support", "MIDI on CHIP support"};unsigned long selected_options = 0;int sb_dma = 0;intcan_select_option (int nr){ switch (nr) { case 0: fprintf (stderr, "The SoundBlaster, AdLib and ProAudioSpectrum\n" "cards cannot be installed at the same time\n"); fprintf (stderr, "\nSelect at most one of them:\n"); fprintf (stderr, " - ProAudioSpectrum 16\n"); fprintf (stderr, " - SoundBlaster / SB Pro\n"); fprintf (stderr, " (Could be selected with PAS16 also\n" " since there is a SB emulation on it)\n"); fprintf (stderr, " - AdLib\n"); fprintf (stderr, "\nDon't enable SoundBlaster if you have GUS at 0x220!\n\n"); break; case OPT_LAST_MUTUAL + 1: fprintf (stderr, "\nThe following cards should work with any other cards.\n" "CAUTION! Don't enable MPU-401 if you don't have it.\n"); break; case OPT_HIGHLEVEL: fprintf (stderr, "\nSelect one or more of the following options\n"); break; } if (hw_table[nr].conditions) if (!(hw_table[nr].conditions & selected_options)) return 0; if (hw_table[nr].exclusive_options) if (hw_table[nr].exclusive_options & selected_options) return 0; return 1;}intthink_positively (int def_answ){ char answ[512]; int len; if ((len = read (0, &answ, sizeof (answ))) < 1) { fprintf (stderr, "\n\nERROR! Cannot read stdin\n"); perror ("stdin"); printf ("#undef CONFIGURE_SOUNDCARD\n"); printf ("#undef KERNEL_SOUNDCARD\n"); exit (-1); } if (len < 2) /* There is an additional LF at the end */ return def_answ; answ[len - 1] = 0; if (!strcmp (answ, "y") || !strcmp (answ, "Y")) return 1; return 0;}intask_value (char *format, int default_answer){ char answ[512]; int len, num;play_it_again_Sam: if ((len = read (0, &answ, sizeof (answ))) < 1) { fprintf (stderr, "\n\nERROR! Cannot read stdin\n"); perror ("stdin"); printf ("#undef CONFIGURE_SOUNDCARD\n"); printf ("#undef KERNEL_SOUNDCARD\n"); exit (-1); } if (len < 2) /* There is an additional LF at the end */ return default_answer; answ[len - 1] = 0; if (sscanf (answ, format, &num) != 1) { fprintf (stderr, "Illegal format. Try again: "); goto play_it_again_Sam; } return num;}intmain (int argc, char *argv[]){ int i, num, def_size, full_driver = 1; char answ[10]; printf ("/*\tGenerated by configure. Don't edit!!!!\t*/\n\n"); fprintf (stderr, "\nConfiguring the sound support\n\n"); fprintf (stderr, "Do you want to include full version of the sound driver (n/y) ? "); if (think_positively (0)) { selected_options = 0xffffffff & ~B (OPT_MPU401); fprintf (stderr, "Note! MPU-401 driver was not enabled\n"); full_driver = 1; } else { fprintf (stderr, "Do you want to DISABLE the Sound Driver (n/y) ?"); if (think_positively (0)) { printf ("#undef CONFIGURE_SOUNDCARD\n"); printf ("#undef KERNEL_SOUNDCARD\n"); exit (0); } /* Partial driver */ full_driver = 0; for (i = 0; i <= OPT_LAST; i++) if (can_select_option (i)) { if (!(selected_options & B (i))) /* Not selected yet */ if (!hw_table[i].verify) { if (hw_table[i].alias) selected_options |= B (hw_table[i].alias); else selected_options |= B (i); } else { int def_answ = hw_table[i].default_answ;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -