mirror of
https://github.com/id-Software/idsetup.git
synced 2026-03-19 08:29:45 +01:00
540 lines
7.1 KiB
C
540 lines
7.1 KiB
C
//
|
|
// Handle all SFX card menus
|
|
//
|
|
#include "main.h"
|
|
|
|
enum
|
|
{
|
|
DCARD_GUS,
|
|
DCARD_PAS,
|
|
DCARD_SB,
|
|
#ifndef HERETIC
|
|
DCARD_PC,
|
|
#endif
|
|
DCARD_NONE,
|
|
DCARD_MAX
|
|
};
|
|
|
|
item_t idcarditems[]=
|
|
{
|
|
{DCARD_GUS, 27,10,25, -1,-1},
|
|
{DCARD_PAS, 27,11,25, -1,-1},
|
|
{DCARD_SB, 27,12,25, -1,-1},
|
|
#ifdef HERETIC
|
|
{DCARD_NONE,27,13,25, -1,-1}
|
|
#else
|
|
{DCARD_PC, 27,13,25, -1,-1},
|
|
{DCARD_NONE,27,14,25, -1,-1}
|
|
#endif
|
|
};
|
|
|
|
menu_t idcardmenu=
|
|
{
|
|
&idcarditems[0],
|
|
DCARD_NONE,
|
|
DCARD_MAX,
|
|
0x7f
|
|
};
|
|
|
|
int ChooseFxCard (void)
|
|
{
|
|
short field;
|
|
short key;
|
|
int rval = 0;
|
|
|
|
switch ( newc.d.card )
|
|
{
|
|
default:
|
|
case M_NONE:
|
|
field = DCARD_NONE;
|
|
break;
|
|
|
|
#ifndef HERETIC
|
|
case M_PC:
|
|
field = DCARD_PC;
|
|
break;
|
|
#endif
|
|
|
|
case M_GUS:
|
|
field = DCARD_GUS;
|
|
break;
|
|
|
|
case M_SB:
|
|
field = DCARD_SB;
|
|
break;
|
|
|
|
case M_PAS:
|
|
field = DCARD_PAS;
|
|
break;
|
|
|
|
case M_WAVE:
|
|
field = DCARD_SB;
|
|
break;
|
|
}
|
|
|
|
SaveScreen();
|
|
DrawPup(&idcard);
|
|
idcardmenu.startitem = field;
|
|
|
|
while(1)
|
|
{
|
|
SetupMenu(&idcardmenu);
|
|
field = GetMenuInput();
|
|
key = menukey;
|
|
switch ( key )
|
|
{
|
|
case KEY_ESC:
|
|
rval = -1;
|
|
goto func_exit;
|
|
|
|
case KEY_ENTER:
|
|
case KEY_F10:
|
|
switch ( field )
|
|
{
|
|
case DCARD_PAS:
|
|
newc.d.card = M_PAS;
|
|
goto func_exit;
|
|
|
|
case DCARD_SB:
|
|
newc.d.card = M_SB;
|
|
goto func_exit;
|
|
|
|
case DCARD_GUS:
|
|
newc.d.card = M_GUS;
|
|
newc.d.midiport = -1;
|
|
goto func_exit;
|
|
|
|
#ifndef HERETIC
|
|
case DCARD_PC:
|
|
newc.d.card = M_PC;
|
|
newc.d.port = -1;
|
|
newc.d.midiport = -1;
|
|
newc.d.irq = -1;
|
|
newc.d.dma = -1;
|
|
goto func_exit;
|
|
#endif
|
|
case DCARD_NONE:
|
|
newc.d.card = M_NONE;
|
|
newc.d.port = -1;
|
|
newc.d.midiport = -1;
|
|
newc.d.irq = -1;
|
|
newc.d.dma = -1;
|
|
goto func_exit;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
func_exit:
|
|
|
|
RestoreScreen();
|
|
return ( rval );
|
|
}
|
|
|
|
//
|
|
// Choose SB DMA channel
|
|
//
|
|
enum
|
|
{
|
|
SB_DMA_0,
|
|
SB_DMA_1,
|
|
SB_DMA_3,
|
|
SB_DMA_5,
|
|
SB_DMA_6,
|
|
SB_DMA_7,
|
|
SB_DMA_MAX
|
|
};
|
|
|
|
item_t sbdmaitems[]=
|
|
{
|
|
{SB_DMA_0, 35,9,7, -1,-1},
|
|
{SB_DMA_1, 35,10,7, -1,-1},
|
|
{SB_DMA_3, 35,11,7, -1,-1},
|
|
{SB_DMA_5, 35,12,7, -1,-1},
|
|
{SB_DMA_6, 35,13,7, -1,-1},
|
|
{SB_DMA_7, 35,14,7, -1,-1}
|
|
};
|
|
|
|
menu_t sbdmamenu=
|
|
{
|
|
&sbdmaitems[0],
|
|
SB_DMA_5,
|
|
SB_DMA_MAX,
|
|
0x7f
|
|
};
|
|
|
|
int ChooseSbDma (DMXCARD * card)
|
|
{
|
|
short key;
|
|
short field;
|
|
int rval = 0;
|
|
|
|
switch ( card->dma )
|
|
{
|
|
case 0:
|
|
field = SB_DMA_0;
|
|
break;
|
|
|
|
default:
|
|
case 1:
|
|
field = SB_DMA_1;
|
|
break;
|
|
|
|
case 3:
|
|
field = SB_DMA_3;
|
|
break;
|
|
|
|
case 5:
|
|
field = SB_DMA_5;
|
|
break;
|
|
|
|
case 6:
|
|
field = SB_DMA_6;
|
|
break;
|
|
|
|
case 7:
|
|
field = SB_DMA_7;
|
|
break;
|
|
}
|
|
|
|
SaveScreen();
|
|
DrawPup(&sbdma);
|
|
sbdmamenu.startitem = field;
|
|
|
|
while(1)
|
|
{
|
|
SetupMenu(&sbdmamenu);
|
|
field = GetMenuInput();
|
|
key = menukey;
|
|
switch ( key )
|
|
{
|
|
case KEY_ESC:
|
|
rval = -1;
|
|
goto func_exit;
|
|
|
|
case KEY_ENTER:
|
|
case KEY_F10:
|
|
switch ( field )
|
|
{
|
|
case SB_DMA_0:
|
|
card->dma = 0;
|
|
goto func_exit;
|
|
|
|
case SB_DMA_1:
|
|
card->dma = 1;
|
|
goto func_exit;
|
|
|
|
case SB_DMA_3:
|
|
card->dma = 3;
|
|
goto func_exit;
|
|
|
|
case SB_DMA_5:
|
|
card->dma = 5;
|
|
goto func_exit;
|
|
|
|
case SB_DMA_6:
|
|
card->dma = 6;
|
|
goto func_exit;
|
|
|
|
case SB_DMA_7:
|
|
card->dma = 7;
|
|
goto func_exit;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
func_exit:
|
|
|
|
RestoreScreen();
|
|
return ( rval );
|
|
}
|
|
|
|
//
|
|
// Choose SB IRQ channel
|
|
//
|
|
|
|
enum { SB_IRQ_2, SB_IRQ_5, SB_IRQ_7, SB_IRQ_MAX };
|
|
item_t sbirqitems[]=
|
|
{
|
|
{SB_IRQ_2, 35,11,7, -1,-1},
|
|
{SB_IRQ_5, 35,12,7, -1,-1},
|
|
{SB_IRQ_7, 35,13,7, -1,-1}
|
|
};
|
|
menu_t sbirqmenu=
|
|
{
|
|
&sbirqitems[0],
|
|
SB_IRQ_5,
|
|
SB_IRQ_MAX,
|
|
0x7f
|
|
};
|
|
|
|
int ChooseSbIrq (DMXCARD * card)
|
|
{
|
|
short field;
|
|
short key;
|
|
int rval = 0;
|
|
|
|
if ( card->irq > 8 )
|
|
ErrorWindow(&irqerr);
|
|
|
|
switch ( card->irq )
|
|
{
|
|
case 2:
|
|
field = SB_IRQ_2;
|
|
break;
|
|
|
|
default:
|
|
case 5:
|
|
field = SB_IRQ_5;
|
|
break;
|
|
|
|
case 7:
|
|
field = SB_IRQ_7;
|
|
break;
|
|
|
|
}
|
|
|
|
SaveScreen();
|
|
DrawPup(&sbirq);
|
|
sbirqmenu.startitem = field;
|
|
|
|
while(1)
|
|
{
|
|
SetupMenu(&sbirqmenu);
|
|
field = GetMenuInput();
|
|
key = menukey;
|
|
switch ( key )
|
|
{
|
|
case KEY_ESC:
|
|
rval = -1;
|
|
goto func_exit;
|
|
|
|
case KEY_ENTER:
|
|
case KEY_F10:
|
|
switch ( field )
|
|
{
|
|
case SB_IRQ_2:
|
|
card->irq = 2;
|
|
goto func_exit;
|
|
|
|
case SB_IRQ_5:
|
|
card->irq = 5;
|
|
goto func_exit;
|
|
|
|
case SB_IRQ_7:
|
|
card->irq = 7;
|
|
goto func_exit;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
func_exit:
|
|
|
|
RestoreScreen();
|
|
return ( rval );
|
|
}
|
|
|
|
//
|
|
// Choose # of simultaneous digital channels
|
|
//
|
|
|
|
enum {DIG_1,DIG_2,DIG_3,DIG_4,DIG_5,DIG_6,DIG_7,DIG_8,DIG_MAX};
|
|
item_t numdigitems[]=
|
|
{
|
|
{DIG_1, 36,8,7, -1,-1},
|
|
{DIG_2, 36,9,7, -1,-1},
|
|
{DIG_3, 36,10,7, -1,-1},
|
|
{DIG_4, 36,11,7, -1,-1},
|
|
{DIG_5, 36,12,7, -1,-1},
|
|
{DIG_6, 36,13,7, -1,-1},
|
|
{DIG_7, 36,14,7, -1,-1},
|
|
{DIG_8, 36,15,7, -1,-1}
|
|
};
|
|
menu_t numdigmenu=
|
|
{
|
|
&numdigitems[0],
|
|
DIG_4,
|
|
DIG_MAX,
|
|
0x7f
|
|
};
|
|
|
|
int ChooseNumDig (void)
|
|
{
|
|
short key;
|
|
short field;
|
|
int rval = 0;
|
|
|
|
SaveScreen();
|
|
DrawPup(&numdig);
|
|
|
|
// DEFAULT FIELD ========================================
|
|
|
|
switch ( newc.numdig )
|
|
{
|
|
default:
|
|
field = DIG_4;
|
|
break;
|
|
|
|
case 1:
|
|
field = DIG_1;
|
|
break;
|
|
|
|
case 2:
|
|
field = DIG_2;
|
|
break;
|
|
|
|
case 3:
|
|
field = DIG_3;
|
|
break;
|
|
|
|
case 4:
|
|
field = DIG_4;
|
|
break;
|
|
|
|
case 5:
|
|
field = DIG_5;
|
|
break;
|
|
|
|
case 6:
|
|
field = DIG_6;
|
|
break;
|
|
|
|
case 7:
|
|
field = DIG_7;
|
|
break;
|
|
|
|
case 8:
|
|
field = DIG_8;
|
|
break;
|
|
}
|
|
numdigmenu.startitem = field;
|
|
|
|
while(1)
|
|
{
|
|
SetupMenu(&numdigmenu);
|
|
field = GetMenuInput();
|
|
key = menukey;
|
|
switch ( key )
|
|
{
|
|
case KEY_ESC:
|
|
rval = -1;
|
|
goto func_exit;
|
|
|
|
case KEY_ENTER:
|
|
case KEY_F10:
|
|
switch ( field )
|
|
{
|
|
case DIG_1:
|
|
newc.numdig = 1;
|
|
goto func_exit;
|
|
|
|
case DIG_2:
|
|
newc.numdig = 2;
|
|
goto func_exit;
|
|
|
|
case DIG_3:
|
|
newc.numdig = 3;
|
|
goto func_exit;
|
|
|
|
case DIG_4:
|
|
newc.numdig = 4;
|
|
goto func_exit;
|
|
|
|
case DIG_5:
|
|
newc.numdig = 5;
|
|
goto func_exit;
|
|
|
|
case DIG_6:
|
|
newc.numdig = 6;
|
|
goto func_exit;
|
|
|
|
case DIG_7:
|
|
newc.numdig = 7;
|
|
goto func_exit;
|
|
|
|
case DIG_8:
|
|
newc.numdig = 8;
|
|
goto func_exit;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
func_exit:
|
|
|
|
RestoreScreen();
|
|
return ( rval );
|
|
}
|
|
|
|
//
|
|
// Setup Sound Effects card
|
|
//
|
|
int SetupFX (void)
|
|
{
|
|
if ( ChooseFxCard() == -1 ) return ( -1 );
|
|
|
|
DrawCurrentConfig();
|
|
|
|
switch ( newc.d.card )
|
|
{
|
|
default:
|
|
savefx = FALSE;
|
|
break;
|
|
|
|
case M_NONE:
|
|
savefx = TRUE;
|
|
break;
|
|
|
|
#ifndef HERETIC
|
|
case M_PC:
|
|
savefx = TRUE;
|
|
break;
|
|
#endif
|
|
case M_ADLIB:
|
|
savefx = TRUE;
|
|
break;
|
|
|
|
case M_PAS:
|
|
case M_GUS:
|
|
ChooseNumDig();
|
|
savefx = TRUE;
|
|
break;
|
|
|
|
case M_WAVE:
|
|
case M_SB:
|
|
if ( ChooseSbPort ( &newc.d ) == -1 ) return ( -1 );
|
|
if ( ChooseSbIrq ( &newc.d ) == -1 ) return ( -1 );
|
|
if ( ChooseSbDma ( &newc.d ) == -1 ) return ( -1 );
|
|
ChooseNumDig();
|
|
savefx = TRUE;
|
|
break;
|
|
|
|
case M_CANVAS:
|
|
newc.d.midiport = 0x330;
|
|
if ( ChooseMidiPort ( &newc.d ) == -1 ) return ( -1 );
|
|
savefx = TRUE;
|
|
break;
|
|
|
|
case M_GMIDI:
|
|
if ( ChooseMidiPort ( &newc.d ) == -1 ) return ( -1 );
|
|
savefx = TRUE;
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|