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

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

?? id_ca.c

?? wolf3d游戲源代碼!非常不錯! 與大家共享! 如果大家又相關資料還請多多上傳!
?? C
?? 第 1 頁 / 共 3 頁
字號:
asm	mov	ds,ax

}


/*
======================
=
= CAL_CarmackExpand
=
= Length is the length of the EXPANDED data
=
======================
*/

#define NEARTAG	0xa7
#define FARTAG	0xa8

void CAL_CarmackExpand (unsigned far *source, unsigned far *dest, unsigned length)
{
	unsigned	ch,chhigh,count,offset;
	unsigned	far *copyptr, far *inptr, far *outptr;

	length/=2;

	inptr = source;
	outptr = dest;

	while (length)
	{
		ch = *inptr++;
		chhigh = ch>>8;
		if (chhigh == NEARTAG)
		{
			count = ch&0xff;
			if (!count)
			{				// have to insert a word containing the tag byte
				ch |= *((unsigned char far *)inptr)++;
				*outptr++ = ch;
				length--;
			}
			else
			{
				offset = *((unsigned char far *)inptr)++;
				copyptr = outptr - offset;
				length -= count;
				while (count--)
					*outptr++ = *copyptr++;
			}
		}
		else if (chhigh == FARTAG)
		{
			count = ch&0xff;
			if (!count)
			{				// have to insert a word containing the tag byte
				ch |= *((unsigned char far *)inptr)++;
				*outptr++ = ch;
				length --;
			}
			else
			{
				offset = *inptr++;
				copyptr = dest + offset;
				length -= count;
				while (count--)
					*outptr++ = *copyptr++;
			}
		}
		else
		{
			*outptr++ = ch;
			length --;
		}
	}
}



/*
======================
=
= CA_RLEWcompress
=
======================
*/

long CA_RLEWCompress (unsigned huge *source, long length, unsigned huge *dest,
  unsigned rlewtag)
{
  long complength;
  unsigned value,count,i;
  unsigned huge *start,huge *end;

  start = dest;

  end = source + (length+1)/2;

//
// compress it
//
  do
  {
	count = 1;
	value = *source++;
	while (*source == value && source<end)
	{
	  count++;
	  source++;
	}
	if (count>3 || value == rlewtag)
	{
    //
    // send a tag / count / value string
    //
      *dest++ = rlewtag;
      *dest++ = count;
      *dest++ = value;
    }
    else
    {
    //
    // send word without compressing
    //
      for (i=1;i<=count;i++)
	*dest++ = value;
	}

  } while (source<end);

  complength = 2*(dest-start);
  return complength;
}


/*
======================
=
= CA_RLEWexpand
= length is EXPANDED length
=
======================
*/

void CA_RLEWexpand (unsigned huge *source, unsigned huge *dest,long length,
  unsigned rlewtag)
{
//  unsigned value,count,i;
  unsigned huge *end;
  unsigned sourceseg,sourceoff,destseg,destoff,endseg,endoff;


//
// expand it
//
#if 0
  do
  {
	value = *source++;
	if (value != rlewtag)
	//
	// uncompressed
	//
	  *dest++=value;
	else
	{
	//
	// compressed string
	//
	  count = *source++;
	  value = *source++;
	  for (i=1;i<=count;i++)
	*dest++ = value;
	}
  } while (dest<end);
#endif

  end = dest + (length)/2;
  sourceseg = FP_SEG(source);
  sourceoff = FP_OFF(source);
  destseg = FP_SEG(dest);
  destoff = FP_OFF(dest);
  endseg = FP_SEG(end);
  endoff = FP_OFF(end);


//
// ax = source value
// bx = tag value
// cx = repeat counts
// dx = scratch
//
// NOTE: A repeat count that produces 0xfff0 bytes can blow this!
//

asm	mov	bx,rlewtag
asm	mov	si,sourceoff
asm	mov	di,destoff
asm	mov	es,destseg
asm	mov	ds,sourceseg

expand:
asm	lodsw
asm	cmp	ax,bx
asm	je	repeat
asm	stosw
asm	jmp	next

repeat:
asm	lodsw
asm	mov	cx,ax		// repeat count
asm	lodsw			// repeat value
asm	rep stosw

next:

asm	cmp	si,0x10		// normalize ds:si
asm  	jb	sinorm
asm	mov	ax,si
asm	shr	ax,1
asm	shr	ax,1
asm	shr	ax,1
asm	shr	ax,1
asm	mov	dx,ds
asm	add	dx,ax
asm	mov	ds,dx
asm	and	si,0xf
sinorm:
asm	cmp	di,0x10		// normalize es:di
asm  	jb	dinorm
asm	mov	ax,di
asm	shr	ax,1
asm	shr	ax,1
asm	shr	ax,1
asm	shr	ax,1
asm	mov	dx,es
asm	add	dx,ax
asm	mov	es,dx
asm	and	di,0xf
dinorm:

asm	cmp     di,ss:endoff
asm	jne	expand
asm	mov	ax,es
asm	cmp	ax,ss:endseg
asm	jb	expand

asm	mov	ax,ss
asm	mov	ds,ax

}



/*
=============================================================================

					 CACHE MANAGER ROUTINES

=============================================================================
*/


/*
======================
=
= CAL_SetupGrFile
=
======================
*/

void CAL_SetupGrFile (void)
{
	char fname[13];
	int handle;
	memptr compseg;

#ifdef GRHEADERLINKED

	grhuffman = (huffnode *)&EGAdict;
	grstarts = (long _seg *)FP_SEG(&EGAhead);

	CAL_OptimizeNodes (grhuffman);

#else

//
// load ???dict.ext (huffman dictionary for graphics files)
//

	strcpy(fname,gdictname);
	strcat(fname,extension);

	if ((handle = open(fname,
		 O_RDONLY | O_BINARY, S_IREAD)) == -1)
		CA_CannotOpen(fname);

	read(handle, &grhuffman, sizeof(grhuffman));
	close(handle);
	CAL_OptimizeNodes (grhuffman);
//
// load the data offsets from ???head.ext
//
	MM_GetPtr (&(memptr)grstarts,(NUMCHUNKS+1)*FILEPOSSIZE);

	strcpy(fname,gheadname);
	strcat(fname,extension);

	if ((handle = open(fname,
		 O_RDONLY | O_BINARY, S_IREAD)) == -1)
		CA_CannotOpen(fname);

	CA_FarRead(handle, (memptr)grstarts, (NUMCHUNKS+1)*FILEPOSSIZE);

	close(handle);


#endif

//
// Open the graphics file, leaving it open until the game is finished
//
	strcpy(fname,gfilename);
	strcat(fname,extension);

	grhandle = open(fname, O_RDONLY | O_BINARY);
	if (grhandle == -1)
		CA_CannotOpen(fname);


//
// load the pic and sprite headers into the arrays in the data segment
//
	MM_GetPtr(&(memptr)pictable,NUMPICS*sizeof(pictabletype));
	CAL_GetGrChunkLength(STRUCTPIC);		// position file pointer
	MM_GetPtr(&compseg,chunkcomplen);
	CA_FarRead (grhandle,compseg,chunkcomplen);
	CAL_HuffExpand (compseg, (byte huge *)pictable,NUMPICS*sizeof(pictabletype),grhuffman,false);
	MM_FreePtr(&compseg);
}

//==========================================================================


/*
======================
=
= CAL_SetupMapFile
=
======================
*/

void CAL_SetupMapFile (void)
{
	int	i;
	int handle;
	long length,pos;
	char fname[13];

//
// load maphead.ext (offsets and tileinfo for map file)
//
#ifndef MAPHEADERLINKED
	strcpy(fname,mheadname);
	strcat(fname,extension);

	if ((handle = open(fname,
		 O_RDONLY | O_BINARY, S_IREAD)) == -1)
		CA_CannotOpen(fname);

	length = filelength(handle);
	MM_GetPtr (&(memptr)tinf,length);
	CA_FarRead(handle, tinf, length);
	close(handle);
#else

	tinf = (byte _seg *)FP_SEG(&maphead);

#endif

//
// open the data file
//
#ifdef CARMACIZED
	strcpy(fname,"GAMEMAPS.");
	strcat(fname,extension);

	if ((maphandle = open(fname,
		 O_RDONLY | O_BINARY, S_IREAD)) == -1)
		CA_CannotOpen(fname);
#else
	strcpy(fname,mfilename);
	strcat(fname,extension);

	if ((maphandle = open(fname,
		 O_RDONLY | O_BINARY, S_IREAD)) == -1)
		CA_CannotOpen(fname);
#endif

//
// load all map header
//
	for (i=0;i<NUMMAPS;i++)
	{
		pos = ((mapfiletype	_seg *)tinf)->headeroffsets[i];
		if (pos<0)						// $FFFFFFFF start is a sparse map
			continue;

		MM_GetPtr(&(memptr)mapheaderseg[i],sizeof(maptype));
		MM_SetLock(&(memptr)mapheaderseg[i],true);
		lseek(maphandle,pos,SEEK_SET);
		CA_FarRead (maphandle,(memptr)mapheaderseg[i],sizeof(maptype));
	}

//
// allocate space for 3 64*64 planes
//
	for (i=0;i<MAPPLANES;i++)
	{
		MM_GetPtr (&(memptr)mapsegs[i],64*64*2);
		MM_SetLock (&(memptr)mapsegs[i],true);
	}
}


//==========================================================================


/*
======================
=
= CAL_SetupAudioFile
=
======================
*/

void CAL_SetupAudioFile (void)
{
	int handle;
	long length;
	char fname[13];

//
// load maphead.ext (offsets and tileinfo for map file)
//
#ifndef AUDIOHEADERLINKED
	strcpy(fname,aheadname);
	strcat(fname,extension);

	if ((handle = open(fname,
		 O_RDONLY | O_BINARY, S_IREAD)) == -1)
		CA_CannotOpen(fname);

	length = filelength(handle);
	MM_GetPtr (&(memptr)audiostarts,length);
	CA_FarRead(handle, (byte far *)audiostarts, length);
	close(handle);
#else
	audiohuffman = (huffnode *)&audiodict;
	CAL_OptimizeNodes (audiohuffman);
	audiostarts = (long _seg *)FP_SEG(&audiohead);
#endif

//
// open the data file
//
#ifndef AUDIOHEADERLINKED
	strcpy(fname,afilename);
	strcat(fname,extension);

	if ((audiohandle = open(fname,
		 O_RDONLY | O_BINARY, S_IREAD)) == -1)
		CA_CannotOpen(fname);
#else
	if ((audiohandle = open("AUDIO."EXTENSION,
		 O_RDONLY | O_BINARY, S_IREAD)) == -1)
		Quit ("Can't open AUDIO."EXTENSION"!");
#endif
}

//==========================================================================


/*
======================
=
= CA_Startup
=
= Open all files and load in headers
=
======================
*/

void CA_Startup (void)
{
#ifdef PROFILE
	unlink ("PROFILE.TXT");
	profilehandle = open("PROFILE.TXT", O_CREAT | O_WRONLY | O_TEXT);
#endif

	CAL_SetupMapFile ();
	CAL_SetupGrFile ();
	CAL_SetupAudioFile ();

	mapon = -1;
	ca_levelbit = 1;
	ca_levelnum = 0;

}

//==========================================================================


/*
======================
=
= CA_Shutdown
=
= Closes all files
=
======================
*/

void CA_Shutdown (void)
{
#ifdef PROFILE
	close (profilehandle);
#endif

	close (maphandle);
	close (grhandle);
	close (audiohandle);
}

//===========================================================================

/*
======================
=
= CA_CacheAudioChunk
=
======================
*/

void CA_CacheAudioChunk (int chunk)
{
	long	pos,compressed;
#ifdef AUDIOHEADERLINKED
	long	expanded;
	memptr	bigbufferseg;
	byte	far *source;
#endif

	if (audiosegs[chunk])
	{
		MM_SetPurge (&(memptr)audiosegs[chunk],0);
		return;							// allready in memory
	}

//
// load the chunk into a buffer, either the miscbuffer if it fits, or allocate
// a larger buffer
//
	pos = audiostarts[chunk];
	compressed = audiostarts[chunk+1]-pos;

	lseek(audiohandle,pos,SEEK_SET);

#ifndef AUDIOHEADERLINKED

	MM_GetPtr (&(memptr)audiosegs[chunk],compressed);
	if (mmerror)
		return;

	CA_FarRead(audiohandle,audiosegs[chunk],compressed);

#else

	if (compressed<=BUFFERSIZE)
	{
		CA_FarRead(audiohandle,bufferseg,compressed);
		source = bufferseg;
	}
	else
	{
		MM_GetPtr(&bigbufferseg,compressed);
		if (mmerror)
			return;
		MM_SetLock (&bigbufferseg,true);
		CA_FarRead(audiohandle,bigbufferseg,compressed);
		source = bigbufferseg;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人8x视频一区二区 | 国产亚洲va综合人人澡精品| 91浏览器在线视频| 国产成人三级在线观看| 日本少妇一区二区| 一区二区三区高清在线| 亚洲欧洲日本在线| 国产无人区一区二区三区| 7777精品久久久大香线蕉| 91在线观看高清| 成人自拍视频在线观看| 久久精品国产99久久6| 天堂成人免费av电影一区| 亚洲图片另类小说| 国产精品免费免费| 日韩三级在线免费观看| 欧美精品xxxxbbbb| 欧美精品自拍偷拍动漫精品| 这里是久久伊人| 欧美日韩日日摸| 欧美日韩精品一区二区三区蜜桃 | 美女视频一区二区| 久久99精品国产.久久久久久| 91激情在线视频| 欧美日韩视频一区二区| 欧美一区二区三区性视频| 精品国产一区久久| 亚洲国产精品成人久久综合一区| 成人欧美一区二区三区黑人麻豆| 一个色综合网站| 日韩成人一区二区三区在线观看| 久久精品国产精品亚洲红杏| 成人性生交大片免费看视频在线| 色一区在线观看| 91.com视频| 国产亚洲综合av| 亚洲欧美日本在线| 蜜桃视频一区二区| 丁香天五香天堂综合| 一本一本久久a久久精品综合麻豆| 欧美日韩亚洲综合| 日韩精品一区二区三区四区| 久久精品无码一区二区三区| 亚洲欧美日本韩国| 免费高清成人在线| 99久久精品国产一区| 欧美一区二区在线视频| 国产精品三级av在线播放| 亚洲成在人线在线播放| 韩国av一区二区三区四区| 91美女在线视频| 欧美电影免费观看高清完整版在 | 国产精品人妖ts系列视频| 不卡视频在线看| 日本韩国欧美在线| 精品久久久久av影院 | 国产精品一二二区| 91黄色免费看| 欧美成人性福生活免费看| 亚洲视频一二三区| 日本v片在线高清不卡在线观看| 成人激情免费电影网址| 欧美老女人第四色| 中文一区在线播放| 免费看欧美美女黄的网站| 成人18视频在线播放| 日韩一级免费观看| 亚洲精品精品亚洲| 在线观看日韩国产| 国产欧美精品一区二区色综合| 婷婷夜色潮精品综合在线| www.66久久| 久久久欧美精品sm网站| 日韩中文字幕av电影| 成年人国产精品| 精品精品国产高清一毛片一天堂| 亚洲精品少妇30p| 国产精品伊人色| 91精品国产高清一区二区三区蜜臀| 国产亚洲欧洲997久久综合| 91丝袜美腿高跟国产极品老师 | 美国av一区二区| 在线一区二区三区四区| 久久久久青草大香线综合精品| 亚洲伊人伊色伊影伊综合网 | 精品不卡在线视频| 亚洲精品美腿丝袜| 成人av一区二区三区| 欧美变态tickle挠乳网站| 亚洲国产日韩一级| 成人午夜激情视频| 精品成人佐山爱一区二区| 亚洲主播在线观看| www.成人在线| 中文字幕精品一区二区精品绿巨人 | 视频一区免费在线观看| 67194成人在线观看| 久久男人中文字幕资源站| 亚洲国产精品久久人人爱| 99久久精品情趣| 中文字幕的久久| 国产精品综合网| 26uuu国产日韩综合| 久久成人av少妇免费| 日韩一区二区电影| 色噜噜夜夜夜综合网| 1000部国产精品成人观看| 成人美女视频在线观看18| 久久综合九色欧美综合狠狠| 九九精品一区二区| 久久综合九色综合97婷婷| 国产老妇另类xxxxx| 国产亚洲欧美在线| 成人免费毛片片v| 国产精品毛片a∨一区二区三区| 国产aⅴ精品一区二区三区色成熟| 国产午夜精品一区二区三区视频 | 精品国产一区二区三区av性色 | 97精品超碰一区二区三区| 久久久www成人免费无遮挡大片| 国产一区二区三区四区在线观看| 精品国产123| 粉嫩aⅴ一区二区三区四区| 中文字幕va一区二区三区| 色综合色综合色综合 | 91香蕉视频在线| 亚洲综合在线视频| 欧美精品1区2区| 久久99精品国产麻豆不卡| 欧美国产激情二区三区 | 中文字幕字幕中文在线中不卡视频| 91丨九色丨尤物| 亚洲高清免费视频| 欧美成人三级在线| 福利91精品一区二区三区| 怡红院av一区二区三区| 欧美日韩精品免费| 国产精品中文欧美| 亚洲男人天堂一区| 欧美一级在线视频| 国产91在线观看丝袜| 亚洲国产视频直播| www激情久久| 91麻豆国产自产在线观看| 强制捆绑调教一区二区| 亚洲主播在线观看| 欧美剧情片在线观看| 黑人精品欧美一区二区蜜桃| 国产精品久久国产精麻豆99网站| 一本到三区不卡视频| 蜜桃av一区二区在线观看| 国产精品国产三级国产a| 欧美日韩国产一区二区三区地区| 国产乱淫av一区二区三区| 玉足女爽爽91| 一区二区三区四区在线免费观看 | 欧美色电影在线| 国产美女av一区二区三区| 亚洲一区二区三区视频在线播放 | 三级亚洲高清视频| 欧美极品少妇xxxxⅹ高跟鞋| 欧美日本在线看| 99久久婷婷国产综合精品 | 欧美一区二区三区视频在线观看| 成人免费黄色大片| 日本aⅴ亚洲精品中文乱码| 日韩一区在线看| 精品电影一区二区| 欧美日本免费一区二区三区| 国产精品自在欧美一区| 婷婷六月综合亚洲| 欧美成人激情免费网| 99国产精品久久久久久久久久| 日韩不卡一区二区三区| 亚洲色图色小说| 亚洲精品一区二区三区影院| 欧美三级乱人伦电影| caoporm超碰国产精品| 国产在线精品一区二区三区不卡| 午夜精品成人在线视频| 亚洲天堂2016| 国产精品美女久久福利网站 | 亚洲mv在线观看| 中文字幕+乱码+中文字幕一区| 日韩欧美二区三区| 欧美丝袜丝交足nylons图片| 成人黄页毛片网站| 国产盗摄一区二区三区| 奇米精品一区二区三区四区| 亚洲一级在线观看| 亚洲综合久久久| 亚洲人成小说网站色在线| 中文字幕巨乱亚洲| 国产欧美日韩中文久久| 精品国产乱码久久久久久影片| 欧美一级夜夜爽| 欧美久久久久中文字幕| 欧美日韩视频在线一区二区| 欧洲在线/亚洲| 欧美色区777第一页|