Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
540 lines (447 sloc) 7.15 KB
//
// 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;
}
Something went wrong with that request. Please try again.