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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? id_ca.c

?? wolf3d游戲源代碼!非常不錯(cuò)! 與大家共享! 如果大家又相關(guān)資料還請(qǐng)多多上傳!
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
// ID_CA.C

// this has been customized for WOLF

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

Id Software Caching Manager
---------------------------

Must be started BEFORE the memory manager, because it needs to get the headers
loaded into the data segment

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

#include "ID_HEADS.H"
#pragma hdrstop

#pragma warn -pro
#pragma warn -use

#define THREEBYTEGRSTARTS

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

						 LOCAL CONSTANTS

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

typedef struct
{
  unsigned bit0,bit1;	// 0-255 is a character, > is a pointer to a node
} huffnode;


typedef struct
{
	unsigned	RLEWtag;
	long		headeroffsets[100];
	byte		tileinfo[];
} mapfiletype;


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

						 GLOBAL VARIABLES

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

byte 		_seg	*tinf;
int			mapon;

unsigned	_seg	*mapsegs[MAPPLANES];
maptype		_seg	*mapheaderseg[NUMMAPS];
byte		_seg	*audiosegs[NUMSNDCHUNKS];
void		_seg	*grsegs[NUMCHUNKS];

byte		far	grneeded[NUMCHUNKS];
byte		ca_levelbit,ca_levelnum;

int			profilehandle,debughandle;

char		audioname[13]="AUDIO.";

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

						 LOCAL VARIABLES

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

extern	long	far	CGAhead;
extern	long	far	EGAhead;
extern	byte	CGAdict;
extern	byte	EGAdict;
extern	byte	far	maphead;
extern	byte	mapdict;
extern	byte	far	audiohead;
extern	byte	audiodict;


char extension[5],	// Need a string, not constant to change cache files
     gheadname[10]=GREXT"HEAD.",
     gfilename[10]=GREXT"GRAPH.",
     gdictname[10]=GREXT"DICT.",
     mheadname[10]="MAPHEAD.",
     mfilename[10]="MAPTEMP.",
     aheadname[10]="AUDIOHED.",
     afilename[10]="AUDIOT.";

void CA_CannotOpen(char *string);

long		_seg *grstarts;	// array of offsets in egagraph, -1 for sparse
long		_seg *audiostarts;	// array of offsets in audio / audiot

#ifdef GRHEADERLINKED
huffnode	*grhuffman;
#else
huffnode	grhuffman[255];
#endif

#ifdef AUDIOHEADERLINKED
huffnode	*audiohuffman;
#else
huffnode	audiohuffman[255];
#endif


int			grhandle;		// handle to EGAGRAPH
int			maphandle;		// handle to MAPTEMP / GAMEMAPS
int			audiohandle;	// handle to AUDIOT / AUDIO

long		chunkcomplen,chunkexplen;

SDMode		oldsoundmode;



void	CAL_CarmackExpand (unsigned far *source, unsigned far *dest,
		unsigned length);


#ifdef THREEBYTEGRSTARTS
#define FILEPOSSIZE	3
//#define	GRFILEPOS(c) (*(long far *)(((byte far *)grstarts)+(c)*3)&0xffffff)
long GRFILEPOS(int c)
{
	long value;
	int	offset;

	offset = c*3;

	value = *(long far *)(((byte far *)grstarts)+offset);

	value &= 0x00ffffffl;

	if (value == 0xffffffl)
		value = -1;

	return value;
};
#else
#define FILEPOSSIZE	4
#define	GRFILEPOS(c) (grstarts[c])
#endif

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

					   LOW LEVEL ROUTINES

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

/*
============================
=
= CA_OpenDebug / CA_CloseDebug
=
= Opens a binary file with the handle "debughandle"
=
============================
*/

void CA_OpenDebug (void)
{
	unlink ("DEBUG.TXT");
	debughandle = open("DEBUG.TXT", O_CREAT | O_WRONLY | O_TEXT);
}

void CA_CloseDebug (void)
{
	close (debughandle);
}



/*
============================
=
= CAL_GetGrChunkLength
=
= Gets the length of an explicit length chunk (not tiles)
= The file pointer is positioned so the compressed data can be read in next.
=
============================
*/

void CAL_GetGrChunkLength (int chunk)
{
	lseek(grhandle,GRFILEPOS(chunk),SEEK_SET);
	read(grhandle,&chunkexplen,sizeof(chunkexplen));
	chunkcomplen = GRFILEPOS(chunk+1)-GRFILEPOS(chunk)-4;
}


/*
==========================
=
= CA_FarRead
=
= Read from a file to a far pointer
=
==========================
*/

boolean CA_FarRead (int handle, byte far *dest, long length)
{
	if (length>0xffffl)
		Quit ("CA_FarRead doesn't support 64K reads yet!");

asm		push	ds
asm		mov	bx,[handle]
asm		mov	cx,[WORD PTR length]
asm		mov	dx,[WORD PTR dest]
asm		mov	ds,[WORD PTR dest+2]
asm		mov	ah,0x3f				// READ w/handle
asm		int	21h
asm		pop	ds
asm		jnc	good
	errno = _AX;
	return	false;
good:
asm		cmp	ax,[WORD PTR length]
asm		je	done
	errno = EINVFMT;			// user manager knows this is bad read
	return	false;
done:
	return	true;
}


/*
==========================
=
= CA_SegWrite
=
= Write from a file to a far pointer
=
==========================
*/

boolean CA_FarWrite (int handle, byte far *source, long length)
{
	if (length>0xffffl)
		Quit ("CA_FarWrite doesn't support 64K reads yet!");

asm		push	ds
asm		mov	bx,[handle]
asm		mov	cx,[WORD PTR length]
asm		mov	dx,[WORD PTR source]
asm		mov	ds,[WORD PTR source+2]
asm		mov	ah,0x40			// WRITE w/handle
asm		int	21h
asm		pop	ds
asm		jnc	good
	errno = _AX;
	return	false;
good:
asm		cmp	ax,[WORD PTR length]
asm		je	done
	errno = ENOMEM;				// user manager knows this is bad write
	return	false;

done:
	return	true;
}


/*
==========================
=
= CA_ReadFile
=
= Reads a file into an allready allocated buffer
=
==========================
*/

boolean CA_ReadFile (char *filename, memptr *ptr)
{
	int handle;
	long size;

	if ((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1)
		return false;

	size = filelength (handle);
	if (!CA_FarRead (handle,*ptr,size))
	{
		close (handle);
		return false;
	}
	close (handle);
	return true;
}


/*
==========================
=
= CA_WriteFile
=
= Writes a file from a memory buffer
=
==========================
*/

boolean CA_WriteFile (char *filename, void far *ptr, long length)
{
	int handle;
	long size;

	handle = open(filename,O_CREAT | O_BINARY | O_WRONLY,
				S_IREAD | S_IWRITE | S_IFREG);

	if (handle == -1)
		return false;

	if (!CA_FarWrite (handle,ptr,length))
	{
		close (handle);
		return false;
	}
	close (handle);
	return true;
}



/*
==========================
=
= CA_LoadFile
=
= Allocate space for and load a file
=
==========================
*/

boolean CA_LoadFile (char *filename, memptr *ptr)
{
	int handle;
	long size;

	if ((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1)
		return false;

	size = filelength (handle);
	MM_GetPtr (ptr,size);
	if (!CA_FarRead (handle,*ptr,size))
	{
		close (handle);
		return false;
	}
	close (handle);
	return true;
}

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

		COMPRESSION routines, see JHUFF.C for more

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



/*
===============
=
= CAL_OptimizeNodes
=
= Goes through a huffman table and changes the 256-511 node numbers to the
= actular address of the node.  Must be called before CAL_HuffExpand
=
===============
*/

void CAL_OptimizeNodes (huffnode *table)
{
  huffnode *node;
  int i;

  node = table;

  for (i=0;i<255;i++)
  {
	if (node->bit0 >= 256)
	  node->bit0 = (unsigned)(table+(node->bit0-256));
	if (node->bit1 >= 256)
	  node->bit1 = (unsigned)(table+(node->bit1-256));
	node++;
  }
}



/*
======================
=
= CAL_HuffExpand
=
= Length is the length of the EXPANDED data
= If screenhack, the data is decompressed in four planes directly
= to the screen
=
======================
*/

void CAL_HuffExpand (byte huge *source, byte huge *dest,
  long length,huffnode *hufftable, boolean screenhack)
{
//  unsigned bit,byte,node,code;
  unsigned sourceseg,sourceoff,destseg,destoff,endoff;
  huffnode *headptr;
  byte		mapmask;
//  huffnode *nodeon;

  headptr = hufftable+254;	// head node is allways node 254

  source++;	// normalize
  source--;
  dest++;
  dest--;

  if (screenhack)
  {
	mapmask = 1;
asm	mov	dx,SC_INDEX
asm	mov	ax,SC_MAPMASK + 256
asm	out	dx,ax
	length >>= 2;
  }

  sourceseg = FP_SEG(source);
  sourceoff = FP_OFF(source);
  destseg = FP_SEG(dest);
  destoff = FP_OFF(dest);
  endoff = destoff+length;

//
// ds:si source
// es:di dest
// ss:bx node pointer
//

	if (length <0xfff0)
	{

//--------------------------
// expand less than 64k of data
//--------------------------

asm mov	bx,[headptr]

asm	mov	si,[sourceoff]
asm	mov	di,[destoff]
asm	mov	es,[destseg]
asm	mov	ds,[sourceseg]
asm	mov	ax,[endoff]

asm	mov	ch,[si]				// load first byte
asm	inc	si
asm	mov	cl,1

expandshort:
asm	test	ch,cl			// bit set?
asm	jnz	bit1short
asm	mov	dx,[ss:bx]			// take bit0 path from node
asm	shl	cl,1				// advance to next bit position
asm	jc	newbyteshort
asm	jnc	sourceupshort

bit1short:
asm	mov	dx,[ss:bx+2]		// take bit1 path
asm	shl	cl,1				// advance to next bit position
asm	jnc	sourceupshort

newbyteshort:
asm	mov	ch,[si]				// load next byte
asm	inc	si
asm	mov	cl,1				// back to first bit

sourceupshort:
asm	or	dh,dh				// if dx<256 its a byte, else move node
asm	jz	storebyteshort
asm	mov	bx,dx				// next node = (huffnode *)code
asm	jmp	expandshort

storebyteshort:
asm	mov	[es:di],dl
asm	inc	di					// write a decopmpressed byte out
asm	mov	bx,[headptr]		// back to the head node for next bit

asm	cmp	di,ax				// done?
asm	jne	expandshort

//
// perform screenhack if needed
//
asm	test	[screenhack],1
asm	jz	notscreen
asm	shl	[mapmask],1
asm	mov	ah,[mapmask]
asm	cmp	ah,16
asm	je	notscreen			// all four planes done
asm	mov	dx,SC_INDEX
asm	mov	al,SC_MAPMASK
asm	out	dx,ax
asm	mov	di,[destoff]
asm	mov	ax,[endoff]
asm	jmp	expandshort

notscreen:;
	}
	else
	{

//--------------------------
// expand more than 64k of data
//--------------------------

  length--;

asm mov	bx,[headptr]
asm	mov	cl,1

asm	mov	si,[sourceoff]
asm	mov	di,[destoff]
asm	mov	es,[destseg]
asm	mov	ds,[sourceseg]

asm	lodsb			// load first byte

expand:
asm	test	al,cl		// bit set?
asm	jnz	bit1
asm	mov	dx,[ss:bx]	// take bit0 path from node
asm	jmp	gotcode
bit1:
asm	mov	dx,[ss:bx+2]	// take bit1 path

gotcode:
asm	shl	cl,1		// advance to next bit position
asm	jnc	sourceup
asm	lodsb
asm	cmp	si,0x10		// normalize ds:si
asm  	jb	sinorm
asm	mov	cx,ds
asm	inc	cx
asm	mov	ds,cx
asm	xor	si,si
sinorm:
asm	mov	cl,1		// back to first bit

sourceup:
asm	or	dh,dh		// if dx<256 its a byte, else move node
asm	jz	storebyte
asm	mov	bx,dx		// next node = (huffnode *)code
asm	jmp	expand

storebyte:
asm	mov	[es:di],dl
asm	inc	di		// write a decopmpressed byte out
asm	mov	bx,[headptr]	// back to the head node for next bit

asm	cmp	di,0x10		// normalize es:di
asm  	jb	dinorm
asm	mov	dx,es
asm	inc	dx
asm	mov	es,dx
asm	xor	di,di
dinorm:

asm	sub	[WORD PTR ss:length],1
asm	jnc	expand
asm  	dec	[WORD PTR ss:length+2]
asm	jns	expand		// when length = ffff ffff, done

	}

asm	mov	ax,ss

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国产精品免费| 偷拍与自拍一区| 青青草国产成人av片免费| 成人午夜免费电影| 日韩欧美色综合| 亚洲夂夂婷婷色拍ww47| 狠狠色狠狠色综合系列| 51精品国自产在线| 精品国产污污免费网站入口 | 91麻豆福利精品推荐| 欧美一区二区精品| 樱花草国产18久久久久| 成人手机电影网| 成人免费一区二区三区在线观看| 91免费国产视频网站| 美腿丝袜亚洲三区| 亚洲线精品一区二区三区八戒| 久久久久久久久99精品| 6080亚洲精品一区二区| 91蜜桃网址入口| 成人黄色a**站在线观看| 日产国产欧美视频一区精品| 亚洲一区二区三区中文字幕| 成人欧美一区二区三区1314| 久久亚区不卡日本| 日韩三级电影网址| 欧美精品vⅰdeose4hd| 欧美伊人久久久久久久久影院| 成人丝袜18视频在线观看| 国产伦精品一区二区三区在线观看| 日韩成人精品视频| 亚洲成av人片一区二区梦乃| 一区二区三区四区在线播放 | 麻豆91免费看| 午夜精品久久久久久久99水蜜桃| 亚洲女厕所小便bbb| 中文字幕在线不卡一区二区三区| 亚洲国产电影在线观看| 国产日本欧美一区二区| 久久免费的精品国产v∧| 91精品综合久久久久久| 3751色影院一区二区三区| 欧美日韩久久不卡| 欧美精品少妇一区二区三区| 91精品黄色片免费大全| 91精品久久久久久蜜臀| 日韩视频在线你懂得| 日韩一区二区电影网| 日韩一级欧美一级| 久久新电视剧免费观看| 国产视频在线观看一区二区三区| 久久免费视频一区| 欧美国产视频在线| 中文字幕中文乱码欧美一区二区| 中文字幕一区二区三区av| 国内一区二区视频| 国产精品一区不卡| 成人av在线资源| 欧洲在线/亚洲| 欧美一区二区在线观看| 久久亚洲综合色| 国产精品美女视频| 一区二区三区欧美久久| 日韩成人午夜精品| 国产精品91xxx| av激情成人网| 在线视频亚洲一区| 91麻豆精品国产无毒不卡在线观看| 欧美一二三四区在线| 精品久久一区二区| 欧美国产欧美亚州国产日韩mv天天看完整 | 日韩av午夜在线观看| 九九精品一区二区| 91视视频在线直接观看在线看网页在线看| 91在线国产观看| 欧美狂野另类xxxxoooo| 久久久国产一区二区三区四区小说 | 激情综合色综合久久| 国产精品18久久久久久vr| 99久久精品免费精品国产| 欧美日韩在线播| 久久嫩草精品久久久精品 | 免费看黄色91| 成人在线视频一区| 91超碰这里只有精品国产| 久久麻豆一区二区| 亚洲精品日韩综合观看成人91| 蜜桃av噜噜一区| 风间由美一区二区三区在线观看| 在线观看亚洲成人| 亚洲午夜久久久久久久久久久 | 欧美一区二区黄色| 中文字幕五月欧美| 美女视频网站久久| 99久久99久久免费精品蜜臀| 欧美一区二区不卡视频| 日韩毛片在线免费观看| 久久99久久99精品免视看婷婷| 91蜜桃视频在线| 久久夜色精品一区| 日韩专区一卡二卡| 日本韩国精品在线| 国产喷白浆一区二区三区| 丝袜亚洲另类欧美| 91婷婷韩国欧美一区二区| 亚洲精品在线观看视频| 亚洲国产精品精华液网站 | 日韩欧美电影一区| 亚洲欧洲日韩综合一区二区| 精品中文字幕一区二区小辣椒| 欧美午夜影院一区| 国产精品国产自产拍在线| 久久97超碰国产精品超碰| 欧美私人免费视频| 亚洲乱码国产乱码精品精可以看 | 成人激情开心网| 日韩欧美一级精品久久| 亚洲一区二区三区四区五区黄 | 国产乱子伦一区二区三区国色天香| 色天天综合色天天久久| 欧美经典一区二区三区| 久久成人免费网站| 欧美精品久久99| 亚洲国产精品视频| 在线观看亚洲一区| 亚洲制服欧美中文字幕中文字幕| 91片在线免费观看| 亚洲精选视频在线| 99国产麻豆精品| 亚洲欧美日韩一区| 91在线看国产| 一区二区三区在线视频播放| 91视视频在线直接观看在线看网页在线看| 国产日韩欧美a| 国产精品伊人色| 久久久久久**毛片大全| 国产一区二区三区不卡在线观看 | 色综合激情五月| 亚洲视频中文字幕| 色就色 综合激情| 亚洲精品日产精品乱码不卡| 色婷婷国产精品综合在线观看| 亚洲乱码日产精品bd| 色婷婷激情久久| 亚洲一区二区视频在线观看| 欧美日韩欧美一区二区| 日韩国产精品久久久久久亚洲| 日韩一区二区在线观看视频| 久色婷婷小香蕉久久| 精品剧情v国产在线观看在线| 国产乱一区二区| 国产精品三级电影| 91免费国产视频网站| 成人综合婷婷国产精品久久蜜臀 | 亚洲成av人片一区二区三区| 欧美精品一二三四| 久久精品二区亚洲w码| 久久综合网色—综合色88| 国产盗摄精品一区二区三区在线 | 欧美人妖巨大在线| 蜜臀av一区二区三区| 亚洲精品在线电影| av在线不卡电影| 亚洲一区二区三区在线| 日韩欧美国产成人一区二区| 国产一区999| 中文字幕一区二区三区在线不卡 | 91精品国产综合久久福利| 另类小说图片综合网| 国产亚洲视频系列| eeuss鲁片一区二区三区| 亚洲va中文字幕| 精品剧情v国产在线观看在线| 成人激情免费视频| 午夜精品久久一牛影视| 久久久久久免费毛片精品| 99视频一区二区| 日韩在线一区二区三区| 久久一区二区视频| 在线观看日韩毛片| 精品一区中文字幕| 亚洲另类春色国产| 精品美女被调教视频大全网站| 成人99免费视频| 日本午夜一区二区| 国产精品国产三级国产普通话三级 | 激情文学综合丁香| 国产成人亚洲综合a∨婷婷| 亚洲男人天堂一区| 欧美va亚洲va| 欧美性色综合网| 粉嫩欧美一区二区三区高清影视| 香蕉乱码成人久久天堂爱免费| 久久午夜色播影院免费高清| 在线观看欧美精品| 国产福利一区二区三区视频| 五月天丁香久久| 亚洲视频你懂的| 久久久久久久久久久电影| 欧美男同性恋视频网站|