📄 configure.c
字号:
/*
* 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;
int
can_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;
}
int
think_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;
}
int
ask_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;
}
int
main (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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -