亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? id_sd.c

?? Wolf 3D official source code.
?? C
?? 第 1 頁 / 共 4 頁
字號:
	word	tableoffset;

	SD_StopSound();

#ifndef	_MUSE_
	if ((mode == sdm_AdLib) && !AdLibPresent)
		mode = sdm_PC;

	switch (mode)
	{
	case sdm_Off:
		NeedsDigitized = false;
		result = true;
		break;
	case sdm_PC:
		tableoffset = STARTPCSOUNDS;
		NeedsDigitized = false;
		result = true;
		break;
	case sdm_AdLib:
		if (AdLibPresent)
		{
			tableoffset = STARTADLIBSOUNDS;
			NeedsDigitized = false;
			result = true;
		}
		break;
	}
#else
	result = true;
#endif

	if (result && (mode != SoundMode))
	{
		SDL_ShutDevice();
		SoundMode = mode;
#ifndef	_MUSE_
		SoundTable = (word *)(&audiosegs[tableoffset]);
#endif
		SDL_StartDevice();
	}

	SDL_SetTimerSpeed();

	return(result);
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_SetMusicMode() - sets the device to use for background music
//
///////////////////////////////////////////////////////////////////////////
boolean
SD_SetMusicMode(SMMode mode)
{
	boolean	result = false;

	SD_FadeOutMusic();
	while (SD_MusicPlaying())
		;

	switch (mode)
	{
	case smm_Off:
		NeedsMusic = false;
		result = true;
		break;
	case smm_AdLib:
		if (AdLibPresent)
		{
			NeedsMusic = true;
			result = true;
		}
		break;
	}

	if (result)
		MusicMode = mode;

	SDL_SetTimerSpeed();

	return(result);
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_Startup() - starts up the Sound Mgr
//		Detects all additional sound hardware and installs my ISR
//
///////////////////////////////////////////////////////////////////////////
void
SD_Startup(void)
{
	int	i;

	if (SD_Started)
		return;

	SDL_SetDS();

	ssIsTandy = false;
	ssNoCheck = false;
	alNoCheck = false;
	sbNoCheck = false;
	sbNoProCheck = false;
#ifndef	_MUSE_
	for (i = 1;i < _argc;i++)
	{
		switch (US_CheckParm(_argv[i],ParmStrings))
		{
		case 0:						// No AdLib detection
			alNoCheck = true;
			break;
		case 1:						// No SoundBlaster detection
			sbNoCheck = true;
			break;
		case 2:						// No SoundBlaster Pro detection
			sbNoProCheck = true;
			break;
		case 3:
			ssNoCheck = true;		// No Sound Source detection
			break;
		case 4:						// Tandy Sound Source handling
			ssIsTandy = true;
			break;
		case 5:						// Sound Source present at LPT1
			ssPort = 1;
			ssNoCheck = SoundSourcePresent = true;
			break;
		case 6:                     // Sound Source present at LPT2
			ssPort = 2;
			ssNoCheck = SoundSourcePresent = true;
			break;
		case 7:                     // Sound Source present at LPT3
			ssPort = 3;
			ssNoCheck = SoundSourcePresent = true;
			break;
		}
	}
#endif

	SoundUserHook = 0;

	t0OldService = getvect(8);	// Get old timer 0 ISR

	LocalTime = TimeCount = alTimeCount = 0;

	SD_SetSoundMode(sdm_Off);
	SD_SetMusicMode(smm_Off);

	if (!ssNoCheck)
		SoundSourcePresent = SDL_DetectSoundSource();

	if (!alNoCheck)
	{
		AdLibPresent = SDL_DetectAdLib();
		if (AdLibPresent && !sbNoCheck)
		{
			int port = -1;
			char *env = getenv("BLASTER");
			if (env)
			{
				long temp;
				while (*env)
				{
					while (isspace(*env))
						env++;

					switch (toupper(*env))
					{
					case 'A':
						temp = strtol(env + 1,&env,16);
						if
						(
							(temp >= 0x210)
						&&	(temp <= 0x260)
						&&	(!(temp & 0x00f))
						)
							port = (temp - 0x200) >> 4;
						else
							Quit("SD_Startup: Unsupported address value in BLASTER");
						break;
					case 'I':
						temp = strtol(env + 1,&env,10);
						if
						(
							(temp >= 0)
						&&	(temp <= 10)
						&&	(sbIntVectors[temp] != -1)
						)
						{
							sbInterrupt = temp;
							sbIntVec = sbIntVectors[sbInterrupt];
						}
						else
							Quit("SD_Startup: Unsupported interrupt value in BLASTER");
						break;
					case 'D':
						temp = strtol(env + 1,&env,10);
						if ((temp == 0) || (temp == 1) || (temp == 3))
							SDL_SBSetDMA(temp);
						else
							Quit("SD_Startup: Unsupported DMA value in BLASTER");
						break;
					default:
						while (isspace(*env))
							env++;
						while (*env && !isspace(*env))
							env++;
						break;
					}
				}
			}
			SoundBlasterPresent = SDL_DetectSoundBlaster(port);
		}
	}

	for (i = 0;i < 255;i++)
		pcSoundLookup[i] = i * 60;

	if (SoundBlasterPresent)
		SDL_StartSB();

	SDL_SetupDigi();

	SD_Started = true;
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_Default() - Sets up the default behaviour for the Sound Mgr whether
//		the config file was present or not.
//
///////////////////////////////////////////////////////////////////////////
void
SD_Default(boolean gotit,SDMode sd,SMMode sm)
{
	boolean	gotsd,gotsm;

	gotsd = gotsm = gotit;

	if (gotsd)	// Make sure requested sound hardware is available
	{
		switch (sd)
		{
		case sdm_AdLib:
			gotsd = AdLibPresent;
			break;
		}
	}
	if (!gotsd)
	{
		if (AdLibPresent)
			sd = sdm_AdLib;
		else
			sd = sdm_PC;
	}
	if (sd != SoundMode)
		SD_SetSoundMode(sd);


	if (gotsm)	// Make sure requested music hardware is available
	{
		switch (sm)
		{
		case sdm_AdLib:
			gotsm = AdLibPresent;
			break;
		}
	}
	if (!gotsm)
	{
		if (AdLibPresent)
			sm = smm_AdLib;
	}
	if (sm != MusicMode)
		SD_SetMusicMode(sm);
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_Shutdown() - shuts down the Sound Mgr
//		Removes sound ISR and turns off whatever sound hardware was active
//
///////////////////////////////////////////////////////////////////////////
void
SD_Shutdown(void)
{
	if (!SD_Started)
		return;

	SD_MusicOff();
	SD_StopSound();
	SDL_ShutDevice();
	SDL_CleanDevice();

	if (SoundBlasterPresent)
		SDL_ShutSB();

	if (SoundSourcePresent)
		SDL_ShutSS();

	asm	pushf
	asm	cli

	SDL_SetTimer0(0);

	setvect(8,t0OldService);

	asm	popf

	SD_Started = false;
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_SetUserHook() - sets the routine that the Sound Mgr calls every 1/70th
//		of a second from its timer 0 ISR
//
///////////////////////////////////////////////////////////////////////////
void
SD_SetUserHook(void (* hook)(void))
{
	SoundUserHook = hook;
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_PositionSound() - Sets up a stereo imaging location for the next
//		sound to be played. Each channel ranges from 0 to 15.
//
///////////////////////////////////////////////////////////////////////////
void
SD_PositionSound(int leftvol,int rightvol)
{
	LeftPosition = leftvol;
	RightPosition = rightvol;
	nextsoundpos = true;
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_PlaySound() - plays the specified sound on the appropriate hardware
//
///////////////////////////////////////////////////////////////////////////
boolean
SD_PlaySound(soundnames sound)
{
	boolean		ispos;
	SoundCommon	far *s;
	int	lp,rp;

	lp = LeftPosition;
	rp = RightPosition;
	LeftPosition = 0;
	RightPosition = 0;

	ispos = nextsoundpos;
	nextsoundpos = false;

	if (sound == -1)
		return(false);

	s = MK_FP(SoundTable[sound],0);
	if ((SoundMode != sdm_Off) && !s)
		Quit("SD_PlaySound() - Uncached sound");

	if ((DigiMode != sds_Off) && (DigiMap[sound] != -1))
	{
		if ((DigiMode == sds_PC) && (SoundMode == sdm_PC))
		{
			if (s->priority < SoundPriority)
				return(false);

			SDL_PCStopSound();

			SD_PlayDigitized(DigiMap[sound],lp,rp);
			SoundPositioned = ispos;
			SoundNumber = sound;
			SoundPriority = s->priority;
		}
		else
		{
		asm	pushf
		asm	cli
			if (DigiPriority && !DigiNumber)
			{
			asm	popf
				Quit("SD_PlaySound: Priority without a sound");
			}
		asm	popf

			if (s->priority < DigiPriority)
				return(false);

			SD_PlayDigitized(DigiMap[sound],lp,rp);
			SoundPositioned = ispos;
			DigiNumber = sound;
			DigiPriority = s->priority;
		}

		return(true);
	}

	if (SoundMode == sdm_Off)
		return(false);
	if (!s->length)
		Quit("SD_PlaySound() - Zero length sound");
	if (s->priority < SoundPriority)
		return(false);

	switch (SoundMode)
	{
	case sdm_PC:
		SDL_PCPlaySound((void far *)s);
		break;
	case sdm_AdLib:
		SDL_ALPlaySound((void far *)s);
		break;
	}

	SoundNumber = sound;
	SoundPriority = s->priority;

	return(false);
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_SoundPlaying() - returns the sound number that's playing, or 0 if
//		no sound is playing
//
///////////////////////////////////////////////////////////////////////////
word
SD_SoundPlaying(void)
{
	boolean	result = false;

	switch (SoundMode)
	{
	case sdm_PC:
		result = pcSound? true : false;
		break;
	case sdm_AdLib:
		result = alSound? true : false;
		break;
	}

	if (result)
		return(SoundNumber);
	else
		return(false);
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_StopSound() - if a sound is playing, stops it
//
///////////////////////////////////////////////////////////////////////////
void
SD_StopSound(void)
{
	if (DigiPlaying)
		SD_StopDigitized();

	switch (SoundMode)
	{
	case sdm_PC:
		SDL_PCStopSound();
		break;
	case sdm_AdLib:
		SDL_ALStopSound();
		break;
	}

	SoundPositioned = false;

	SDL_SoundFinished();
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_WaitSoundDone() - waits until the current sound is done playing
//
///////////////////////////////////////////////////////////////////////////
void
SD_WaitSoundDone(void)
{
	while (SD_SoundPlaying())
		;
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_MusicOn() - turns on the sequencer
//
///////////////////////////////////////////////////////////////////////////
void
SD_MusicOn(void)
{
	sqActive = true;
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_MusicOff() - turns off the sequencer and any playing notes
//
///////////////////////////////////////////////////////////////////////////
void
SD_MusicOff(void)
{
	word	i;


	switch (MusicMode)
	{
	case smm_AdLib:
		alFXReg = 0;
		alOut(alEffects,0);
		for (i = 0;i < sqMaxTracks;i++)
			alOut(alFreqH + i + 1,0);
		break;
	}
	sqActive = false;
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_StartMusic() - starts playing the music pointed to
//
///////////////////////////////////////////////////////////////////////////
void
SD_StartMusic(MusicGroup far *music)
{
	SD_MusicOff();
asm	pushf
asm	cli

	if (MusicMode == smm_AdLib)
	{
		sqHackPtr = sqHack = music->values;
		sqHackSeqLen = sqHackLen = music->length;
		sqHackTime = 0;
		alTimeCount = 0;
		SD_MusicOn();
	}

asm	popf
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_FadeOutMusic() - starts fading out the music. Call SD_MusicPlaying()
//		to see if the fadeout is complete
//
///////////////////////////////////////////////////////////////////////////
void
SD_FadeOutMusic(void)
{
	switch (MusicMode)
	{
	case smm_AdLib:
		// DEBUG - quick hack to turn the music off
		SD_MusicOff();
		break;
	}
}

///////////////////////////////////////////////////////////////////////////
//
//	SD_MusicPlaying() - returns true if music is currently playing, false if
//		not
//
///////////////////////////////////////////////////////////////////////////
boolean
SD_MusicPlaying(void)
{
	boolean	result;

	switch (MusicMode)
	{
	case smm_AdLib:
		result = false;
		// DEBUG - not written
		break;
	default:
		result = false;
	}

	return(result);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区久久| 丁香网亚洲国际| 国产成a人亚洲精| 在线观看成人小视频| 国产亚洲精品bt天堂精选| 日韩中文字幕不卡| 成人黄色av网站在线| 日韩一本二本av| 亚洲一区二区三区中文字幕| 成人一级视频在线观看| 日韩免费观看2025年上映的电影| 一区二区不卡在线视频 午夜欧美不卡在| 日本午夜一区二区| 欧美色综合影院| 亚洲麻豆国产自偷在线| 国产成人综合视频| 欧美成va人片在线观看| 婷婷综合在线观看| 欧美日韩久久久| 亚洲国产欧美在线| 91黄色免费版| 亚洲欧美日韩国产手机在线| 成人永久aaa| 欧美激情一区二区在线| 国产精品一级黄| 2020日本不卡一区二区视频| 久久国产麻豆精品| 日韩一区二区视频| 日韩影院在线观看| 欧美日韩第一区日日骚| 亚洲成av人片在线观看| 欧美三级一区二区| 午夜视频久久久久久| 欧美精品乱人伦久久久久久| 亚洲一区二区视频在线观看| 欧美色精品在线视频| 亚洲国产成人91porn| 欧美久久一区二区| 青青草国产精品97视觉盛宴| 精品久久人人做人人爽| 国产精品一区二区久激情瑜伽| 久久精品一区蜜桃臀影院| 高清成人在线观看| 亚洲色图欧美激情| 蜜桃免费网站一区二区三区| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美精品一区二区三区在线| 国模大尺度一区二区三区| 国产免费观看久久| 色哟哟亚洲精品| 天堂久久久久va久久久久| 91精品在线一区二区| 国产乱码精品一区二区三区av | 色婷婷av一区二区三区gif| 亚洲黄色av一区| 欧美精品三级日韩久久| 精品无人码麻豆乱码1区2区 | 亚洲精品视频一区| 国产一区二区不卡在线| 久久久不卡网国产精品一区| 99r精品视频| 日韩av不卡一区二区| 国产亚洲精品中文字幕| 91偷拍与自偷拍精品| 日韩成人一级片| 中文字幕一区二区三区不卡| 欧美日韩黄色影视| 国产成人精品一区二区三区四区 | 9i看片成人免费高清| 午夜精品一区二区三区三上悠亚| 精品av久久707| 色综合天天在线| 激情小说亚洲一区| 亚洲国产日韩在线一区模特| 久久久不卡网国产精品二区| 欧美色大人视频| 不卡av电影在线播放| 日本va欧美va精品| 专区另类欧美日韩| 久久亚洲综合色| 欧美喷水一区二区| 成人黄色在线看| 狠狠色丁香婷婷综合久久片| 一区二区三区国产精华| 久久久精品国产99久久精品芒果| 欧美人狂配大交3d怪物一区| 91在线国产观看| 国产精品一二三区在线| 青青草成人在线观看| 一区二区三区不卡在线观看| 国产精品久久久久影院亚瑟 | 精品亚洲porn| 亚洲人成7777| 久久人人97超碰com| 欧美日本视频在线| 在线免费一区三区| 高清在线观看日韩| 国产毛片精品视频| 91日韩一区二区三区| 成人精品免费视频| 国产成人亚洲综合色影视| 久久超碰97中文字幕| 日本视频一区二区| 青青草精品视频| 日韩电影免费在线观看网站| 亚洲成人av一区二区| 一区二区三区影院| 中文字幕五月欧美| 国产精品白丝在线| 最新国产成人在线观看| 1区2区3区国产精品| 国产精品萝li| 国产精品欧美一级免费| 欧美国产日韩a欧美在线观看| 欧美精品一区二区在线播放| 久久久久久久综合色一本| 精品久久一区二区三区| 久久午夜电影网| 久久精品一区蜜桃臀影院| 国产视频一区不卡| 国产精品久久久久久久久免费丝袜| 久久久精品黄色| 国产精品毛片a∨一区二区三区| 国产欧美一区二区精品性色| 国产精品午夜久久| 亚洲婷婷在线视频| 亚洲mv在线观看| 日韩avvvv在线播放| 久久99精品久久只有精品| 激情五月播播久久久精品| 国产成人免费网站| 99久久免费视频.com| 91国产免费看| 欧美疯狂做受xxxx富婆| 欧美专区日韩专区| 91精品国产麻豆| 国产日韩v精品一区二区| 国产精品久久午夜| 一本色道a无线码一区v| 欧美日韩一区二区三区不卡| 日韩免费在线观看| 国产精品久久久久久久久久免费看| 亚洲码国产岛国毛片在线| 天天色综合天天| 国产精品亚洲综合一区在线观看| 91一区在线观看| 7777精品伊人久久久大香线蕉最新版 | 色系网站成人免费| 日韩三级视频中文字幕| 国产清纯在线一区二区www| 亚洲欧美二区三区| 久久国产欧美日韩精品| 色综合欧美在线视频区| 欧美电影免费观看高清完整版在| 中文av字幕一区| 日韩av一区二| 97se亚洲国产综合自在线不卡| 91精品国产综合久久久久久| 日本一区二区成人在线| 图片区小说区区亚洲影院| 粉嫩av一区二区三区粉嫩| 在线日韩一区二区| 久久久久久久综合色一本| 亚洲国产综合色| 国产福利一区二区三区视频在线 | av一区二区三区四区| 91麻豆精品国产| 亚洲区小说区图片区qvod| 看片的网站亚洲| 欧美天堂一区二区三区| 中文字幕精品三区| 精品在线视频一区| 欧美挠脚心视频网站| 自拍视频在线观看一区二区| 国产精华液一区二区三区| 91精品国产综合久久久久| 亚洲一区二区三区视频在线| 成人免费观看av| 久久综合九色综合97婷婷女人| 日韩精品一二三区| 在线视频欧美精品| 日韩一区中文字幕| 国产91综合网| 国产女主播一区| 韩国精品主播一区二区在线观看 | 久久久99精品免费观看| 免费精品视频在线| 欧美男人的天堂一二区| 亚洲自拍欧美精品| 一本色道**综合亚洲精品蜜桃冫 | 亚洲电影在线免费观看| 色一情一乱一乱一91av| 亚洲欧美偷拍卡通变态| 不卡一区二区三区四区| 国产精品网站一区| 成人av网站在线观看| 成人免费视频在线观看| 91美女视频网站| 伊人性伊人情综合网| 91福利国产成人精品照片|