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

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

?? id_sd.c

?? wolf3d游戲源代碼!非常不錯! 與大家共享! 如果大家又相關資料還請多多上傳!
?? 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一区二区三区免费野_久草精品视频
亚洲视频在线一区二区| 久久久国产精品麻豆| 精品一区二区久久| 自拍偷拍国产精品| 亚洲精品在线电影| 欧美日韩一区不卡| 成人免费看的视频| 免费人成在线不卡| 亚洲一区二区偷拍精品| 国产欧美在线观看一区| 日韩欧美国产一区二区在线播放| 色综合视频在线观看| 国产 欧美在线| 日韩av电影免费观看高清完整版| 一区二区三区在线视频观看 | 麻豆91精品视频| 亚洲黄色免费电影| 欧美激情艳妇裸体舞| 欧美成人激情免费网| 欧美老年两性高潮| 在线免费视频一区二区| 成人app网站| 国产69精品久久久久毛片| 久久精品国产精品亚洲综合| 午夜精品久久久久久久| 一区二区三区蜜桃网| 国产精品久久久久久久久晋中| 日韩欧美一级精品久久| 欧美精品久久久久久久久老牛影院| 91啪在线观看| 91美女片黄在线观看91美女| 成人av免费观看| 成人深夜视频在线观看| 成人国产亚洲欧美成人综合网| 经典三级视频一区| 国内精品伊人久久久久影院对白| 久久精品国产77777蜜臀| 日韩av中文字幕一区二区| 天天色天天操综合| 日精品一区二区| 婷婷综合久久一区二区三区| 午夜影视日本亚洲欧洲精品| 一区二区欧美国产| 亚洲aaa精品| 午夜激情久久久| 日本少妇一区二区| 免费视频一区二区| 狠狠色丁香九九婷婷综合五月| 激情图区综合网| 国产成人精品在线看| 成人97人人超碰人人99| 色哟哟亚洲精品| 精品视频1区2区| 日韩欧美资源站| 久久久久国色av免费看影院| 国产精品日日摸夜夜摸av| 国产精品久久久久7777按摩| 亚洲激情av在线| 亚洲高清三级视频| 男人的j进女人的j一区| 国产剧情一区二区| www.成人在线| 欧美日韩精品一区二区三区| 欧美成人猛片aaaaaaa| 国产视频一区二区在线| 亚洲伦理在线精品| 亚洲成人一区二区| 国内一区二区在线| 91在线视频免费观看| 4438成人网| 国产日韩欧美综合一区| 亚洲六月丁香色婷婷综合久久 | 亚洲一卡二卡三卡四卡无卡久久 | 一个色在线综合| 老司机精品视频在线| www.欧美.com| 欧美电影在线免费观看| 日本一区二区免费在线观看视频| 亚洲男女毛片无遮挡| 日韩国产精品91| 成人小视频在线观看| 欧美日韩国产精品自在自线| 久久九九国产精品| 夜夜嗨av一区二区三区四季av| 免费在线观看精品| 色综合天天狠狠| 精品粉嫩超白一线天av| 亚洲人成人一区二区在线观看 | 亚洲一区av在线| 国产福利精品一区| 欧美裸体一区二区三区| 国产精品视频第一区| 日韩高清在线观看| 91浏览器在线视频| 欧美精品一区二区三区一线天视频 | 91美女精品福利| 精品成人一区二区三区| 亚洲国产欧美在线人成| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 天天射综合影视| 成人午夜在线视频| 日韩精品最新网址| 亚洲电影欧美电影有声小说| 成人av手机在线观看| 2024国产精品| 日本系列欧美系列| 欧美视频在线一区| 亚洲三级在线观看| 成人听书哪个软件好| 久久综合久久综合久久综合| 日韩高清电影一区| 91精品福利视频| 中文字幕中文在线不卡住| 国内精品伊人久久久久影院对白| 欧美午夜免费电影| 一区二区三区在线视频免费| 成人免费观看视频| 国产免费观看久久| 国产精品资源网站| 精品国产伦理网| 美腿丝袜亚洲一区| 6080国产精品一区二区| 亚洲一级二级在线| 在线视频一区二区三| 亚洲男女毛片无遮挡| 91免费国产视频网站| 中文字幕一区二区在线播放| 国产精品综合久久| 久久精品人人做人人爽97| 国产一区二区精品久久| 精品国产污污免费网站入口| 麻豆精品新av中文字幕| 日韩一区二区影院| 久久精品免费看| 欧美成人精品1314www| 久久99精品国产麻豆婷婷洗澡| 日韩精品一区在线观看| 精品亚洲免费视频| 精品国产凹凸成av人导航| 黄页网站大全一区二区| 精品理论电影在线| 国产精品 欧美精品| 欧美高清在线一区| 91蜜桃免费观看视频| 一二三区精品视频| 制服丝袜成人动漫| 九色porny丨国产精品| 久久久久久久久久久久久女国产乱| 国产一区视频导航| 中文字幕欧美国产| 日本高清不卡视频| 日日欢夜夜爽一区| 久久青草国产手机看片福利盒子| 国产福利91精品一区| 国产精品国产三级国产| 91国模大尺度私拍在线视频| 亚洲大片在线观看| 精品乱人伦小说| 国产精品一卡二卡在线观看| 国产精品福利影院| 精品视频123区在线观看| 久久精品国产亚洲a| 中文字幕第一页久久| 在线欧美日韩精品| 欧美aⅴ一区二区三区视频| 国产日韩欧美综合在线| 91福利在线导航| 久久99久久99| 亚洲蜜臀av乱码久久精品| 制服.丝袜.亚洲.中文.综合| 国产盗摄女厕一区二区三区| 亚洲人成网站色在线观看| 久久午夜电影网| 95精品视频在线| 美女一区二区在线观看| 国产精品女主播av| 欧美日韩国产片| 成人免费看的视频| 日本91福利区| 国产精品久久久久久久蜜臀| 欧美一区二区视频观看视频| 成人午夜视频福利| 日本伊人色综合网| 中文字幕中文字幕在线一区| 91精品国产福利在线观看| av在线综合网| 精品制服美女久久| 一区二区三区免费| 国产欧美视频一区二区| 欧美日韩精品一区二区| 成人黄页毛片网站| 美女看a上一区| 一区二区三区视频在线看| 国产视频亚洲色图| 91精品国产91综合久久蜜臀| 一本色道久久加勒比精品| 国产精品一区二区久久不卡| 日韩av中文在线观看| 亚洲精品老司机| 国产精品网站在线观看|