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

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

?? lzss.c

?? 一百個病毒的源代碼 包括熊貓燒香等 極其具有研究價值
?? C
字號:
/* Credits for lzss go to Haruhiko Okumura */

#include <stdio.h>
#include <stdlib.h>

/* #include <string.h>
#include <ctype.h> */

#include "globals.h"


void InitTree(void)  /* initialize trees */
{
	int  i;
	/* For i = 0 to N - 1, rson[i] and lson[i] will be the right and
	   left children of node i.  These nodes need not be initialized.
	   Also, dad[i] is the parent of node i.  These are initialized to
	   NIL (= N), which stands for 'not used.'
	   For i = 0 to 255, rson[N + i + 1] is the root of the tree
	   for strings that begin with character i.  These are initialized
	   to NIL.  Note there are 256 trees. */
	for (i = N + 1; i <= N + 256; i++) rson[i] = NIL;
	for (i = 0; i < N; i++) dad[i] = NIL;
}

void InsertNode(int r)
	/* Inserts string of length F, text_buf[r..r+F_SS-1], into one of the
	   trees (text_buf[r]'th tree) and returns the longest-match position
	   and length via the global variables match_position and match_length.
	   If match_length = F_SS, then removes the old node in favor of the new
	   one, because the old one will be deleted sooner.
	   Note r plays double role, as tree node and position in buffer. */
{
	int  i, p, cmp;
	unsigned char  *key;

	cmp = 1;  key = &text_buf[r];  p = N + 1 + key[0];
	rson[r] = lson[r] = NIL;  match_length = 0;
	for ( ; ; ) {
		if (cmp >= 0) {
			if (rson[p] != NIL) p = rson[p];
			else {  rson[p] = r;  dad[r] = p;  return;  }
		} else {
			if (lson[p] != NIL) p = lson[p];
			else {  lson[p] = r;  dad[r] = p;  return;  }
		}
		for (i = 1; i < F_SS; i++)
			if ((cmp = key[i] - text_buf[p + i]) != 0)  break;
		if (i > match_length) {
			match_position = p;
			if ((match_length = i) >= F_SS)  break;
		}
	}
	dad[r] = dad[p];  lson[r] = lson[p];  rson[r] = rson[p];
	dad[lson[p]] = r;  dad[rson[p]] = r;
	if (rson[dad[p]] == p) rson[dad[p]] = r;
	else                   lson[dad[p]] = r;
	dad[p] = NIL;  /* remove p */
}

void DeleteNode(int p)  /* deletes node p from tree */
{
	int  q;
	if (dad[p] == NIL) return;  /* not in tree */
	if (rson[p] == NIL) q = lson[p];
	else if (lson[p] == NIL) q = rson[p];
	else {
		q = lson[p];
		if (rson[q] != NIL) {
			do {  q = rson[q];  } while (rson[q] != NIL);
			rson[dad[q]] = lson[q];  dad[lson[q]] = dad[q];
			lson[q] = lson[p];  dad[lson[p]] = q;
		}
		rson[q] = rson[p];  dad[rson[p]] = q;
	}
	dad[q] = dad[p];
	if (rson[dad[p]] == p) rson[dad[p]] = q;  else lson[dad[p]] = q;
	dad[p] = NIL;
}

void Encode(void)
{
	int  i, c, len, r, s, last_match_length, code_buf_ptr;
	unsigned char  code_buf[17], mask;

	InitTree();  /* initialize trees */
	code_buf[0] = 0;  /* code_buf[1..16] saves eight units of code, and
		code_buf[0] works as eight flags, "1" representing that the unit
		is an unencoded letter (1 byte), "0" a position-and-length pair
		(2 bytes).  Thus, eight units require at most 16 bytes of code. */
	code_buf_ptr = mask = 1;
	s = 0;  r = N - F_SS;
	for (i = s; i < r; i++) text_buf[i] = ' ';  /* Clear the buffer with
		any character that will appear often. */
	for (len = 0; len < F_SS && (c = getc_buffer()) != EOF; len++)
		text_buf[r + len] = c;  /* Read F_SS bytes into the last F_SS bytes of
			the buffer */
	if ((textsize = len) == 0) return;  /* text of size zero */
	for (i = 1; i <= F_SS; i++) InsertNode(r - i);  /* Insert the F_SS strings,
		each of which begins with one or more 'space' characters.  Note
		the order in which these strings are inserted.  This way,
		degenerate trees will be less likely to occur. */
	InsertNode(r);  /* Finally, insert the whole string just read.  The
		global variables match_length and match_position are set. */
	do {
		if (match_length > len) match_length = len;  /* match_length
			may be spuriously long near the end of text. */
		if (match_length <= THRESHOLD) {
			match_length = 1;  /* Not long enough match.  Send one byte. */
			code_buf[0] |= mask;  /* 'send one byte' flag */
			code_buf[code_buf_ptr++] = text_buf[r];  /* Send uncoded. */
		} else {
			code_buf[code_buf_ptr++] = (unsigned char) match_position;
			code_buf[code_buf_ptr++] = (unsigned char)
				(((match_position >> 4) & 0xf0)
			  | (match_length - (THRESHOLD + 1)));  /* Send position and
					length pair. Note match_length > THRESHOLD. */
		}
		if ((mask <<= 1) == 0) {  /* Shift mask left one bit. */
			for (i = 0; i < code_buf_ptr; i++)  /* Send at most 8 units of */
				putc_buffer(code_buf[i]);     /* code together */
			codesize += code_buf_ptr;
			code_buf[0] = 0;  code_buf_ptr = mask = 1;
		}
		last_match_length = match_length;
		for (i = 0; i < last_match_length &&
				(c = getc_buffer()) != EOF; i++) {
			DeleteNode(s);		/* Delete old strings and */
			text_buf[s] = c;	/* read new bytes */
			if (s < F_SS - 1) text_buf[s + N] = c;  /* If the position is
				near the end of buffer, extend the buffer to make
				string comparison easier. */
			s = (s + 1) & (N - 1);  r = (r + 1) & (N - 1);
				/* Since this is a ring buffer, increment the position
				   modulo N. */
			InsertNode(r);	/* Register the string in text_buf[r..r+F_SS-1] */
		}
		if ((textsize += i) > printcount) {
			printf("%12ld\r", textsize);  printcount += 1024;
				/* Reports progress each time the textsize exceeds
				   multiples of 1024. */
		}
		while (i++ < last_match_length) {	/* After the end of text, */
			DeleteNode(s);					/* no need to read, but */
			s = (s + 1) & (N - 1);  r = (r + 1) & (N - 1);
			if (--len) InsertNode(r);		/* buffer may not be empty. */
		}
	} while (len > 0);	/* until length of string to be processed is zero */
	if (code_buf_ptr > 1) {		/* Send remaining code. */
		for (i = 0; i < code_buf_ptr; i++) putc_buffer(code_buf[i]);
		codesize += code_buf_ptr;
	}
	printf("original data: %ld bytes\n", textsize);	/* Encoding is done. */
	printf("compressed data: %ld bytes\n", codesize);
}

void Decode(void)	/* Just the reverse of Encode(). */
{
	int  i, j, k, r, c;
	unsigned int  flags;

	for (i = 0; i < N - F_SS; i++) text_buf[i] = ' ';
	r = N - F_SS;  flags = 0;
	for ( ; ; ) {
		if (((flags >>= 1) & 256) == 0) {
			if ((c = getc_buffer()) == EOF) break;
			flags = c | 0xff00;		/* uses higher byte cleverly */
		}							/* to count eight */
		if (flags & 1) {
			if ((c = getc_buffer()) == EOF) break;
			putc_buffer(c);  text_buf[r++] = c;  r &= (N - 1);
		} else {
			if ((i = getc_buffer()) == EOF) break;
			if ((j = getc_buffer()) == EOF) break;
			i |= ((j & 0xf0) << 4);  j = (j & 0x0f) + THRESHOLD;
			for (k = 0; k <= j; k++) {
				c = text_buf[(i + k) & (N - 1)];
				putc_buffer(c);  text_buf[r++] = c;  r &= (N - 1);
			}
		}
	}
}

long lzss_compress(unsigned char* tbuffer, unsigned char* fbuffer, long real_size)
{
  lz_init();
  from_buffer = fbuffer;
  to_buffer = tbuffer;
  from_max = real_size;
  Encode();
  return(codesize);
}

void lzss_decompress(unsigned char* fbuffer, unsigned char* tbuffer, long comp_size)
{
  lz_init();
  from_buffer = fbuffer;
  from_max = comp_size;
  to_buffer = tbuffer;
  Decode();
  return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av一区二区三区四区| 久久女同性恋中文字幕| 911国产精品| 久久久五月婷婷| 亚洲国产日韩a在线播放| 精品亚洲国内自在自线福利| 国产精品一线二线三线精华| 日本久久精品电影| 精品久久久久av影院| 亚洲成人av一区二区三区| 国产一区久久久| 国产凹凸在线观看一区二区| 91精品国产欧美一区二区18| 日本一区二区三区在线观看| 蜜臀av一区二区在线观看| 91亚洲国产成人精品一区二三| 91精品国产免费久久综合| 一区二区三区91| 国产激情视频一区二区在线观看| 欧美一区二区久久久| 国产精品久久久久久福利一牛影视 | 日日夜夜免费精品| 国产传媒久久文化传媒| 成人av网站在线观看| 日韩欧美一二区| 午夜天堂影视香蕉久久| 欧美专区亚洲专区| 国产色91在线| 日韩精品欧美成人高清一区二区| 国产a久久麻豆| 日韩欧美一级在线播放| 日本不卡一二三| 欧美性色欧美a在线播放| 一区二区三区欧美久久| 丰满少妇久久久久久久| 久久久99精品久久| 国产精品影音先锋| 精品国产成人在线影院| 激情综合色丁香一区二区| 337p亚洲精品色噜噜狠狠| 亚洲国产中文字幕| 欧美亚日韩国产aⅴ精品中极品| 国产精品久久久久婷婷二区次| 免费视频一区二区| 欧美精品一卡两卡| 一区二区三区中文在线| 欧美视频中文一区二区三区在线观看| 国产精品第13页| 99久久婷婷国产综合精品 | 国产激情一区二区三区四区 | 久久日韩精品一区二区五区| 日韩精品三区四区| 欧美另类一区二区三区| 天天免费综合色| 欧美日本一区二区在线观看| 久久国产免费看| 久久九九久久九九| 蜜桃视频在线观看一区| 中文字幕精品三区| 99久久精品久久久久久清纯| 亚洲国产精品人人做人人爽| 欧美女孩性生活视频| 另类小说色综合网站| 亚洲精品在线三区| 国产aⅴ综合色| 亚洲第一狼人社区| 欧美一区二区三区色| 激情文学综合网| 国产性天天综合网| 91在线小视频| 亚洲主播在线观看| wwwwww.欧美系列| 不卡的电视剧免费网站有什么| 国产午夜精品美女毛片视频| 欧美影片第一页| 免费不卡在线观看| 最新国产成人在线观看| 欧美卡1卡2卡| 亚洲福利一区二区| 久久精品免视看| 欧美在线视频你懂得| 国产精品影音先锋| 亚洲综合无码一区二区| 国产亚洲欧美色| 欧美日韩一区三区| 国产美女在线观看一区| 丝袜美腿高跟呻吟高潮一区| 欧美国产成人精品| 欧美电影免费观看高清完整版 | 欧美在线看片a免费观看| 蜜桃一区二区三区四区| 亚洲人妖av一区二区| 欧美浪妇xxxx高跟鞋交| 国产在线播放一区三区四| 亚洲aⅴ怡春院| 久久精品亚洲一区二区三区浴池 | 成人一区二区三区视频| 国产丝袜欧美中文另类| 欧美丰满一区二区免费视频| 成人av在线影院| 日本亚洲免费观看| 亚洲免费av高清| 久久久久九九视频| 欧美一级夜夜爽| 91一区在线观看| 日本v片在线高清不卡在线观看| 夜夜嗨av一区二区三区网页| 国产性色一区二区| 日韩欧美一区二区免费| 欧美日韩在线直播| 韩国精品久久久| 午夜精品视频在线观看| 亚洲女人小视频在线观看| 国产精品嫩草影院com| 久久这里只有精品6| 欧美成人a视频| 欧美日韩精品一区二区| 成人av先锋影音| 国产精品影视在线观看| 亚洲gay无套男同| 亚洲一二三四区| 亚洲综合色噜噜狠狠| 亚洲国产综合在线| 一区二区在线观看视频| 亚洲青青青在线视频| 亚洲欧美一区二区三区孕妇| 欧美mv日韩mv| 日本一区二区三区视频视频| 国产亚洲婷婷免费| 国产精品无码永久免费888| 国产人成一区二区三区影院| 中文字幕不卡的av| 欧美激情一区二区三区不卡| 精品国产自在久精品国产| 91精品国产综合久久久久久久| 在线精品国精品国产尤物884a| 在线免费精品视频| 在线影视一区二区三区| 欧美人体做爰大胆视频| 欧美综合视频在线观看| 色婷婷国产精品久久包臀| 一本色道久久综合亚洲精品按摩| 91麻豆123| 欧美一级片在线| 欧美xxxxxxxx| 亚洲欧美电影一区二区| 一区二区三区在线免费观看| 日本大胆欧美人术艺术动态| 免费xxxx性欧美18vr| 亚洲精选免费视频| 青青草国产成人av片免费| 免费成人美女在线观看| 丁香婷婷综合激情五月色| 99这里都是精品| 欧美一区二区在线观看| 欧美电影免费观看高清完整版| 国产精品传媒在线| 亚洲国产成人av网| 日韩高清欧美激情| 成人免费精品视频| 一本色道久久综合亚洲精品按摩| 日韩精品一区二区三区老鸭窝| 久久精品欧美一区二区三区不卡| 亚洲一级二级在线| 久久99国产乱子伦精品免费| 91在线你懂得| 欧美va亚洲va在线观看蝴蝶网| 日韩美女一区二区三区| 亚洲精品国产a久久久久久 | 99精品久久久久久| 欧美岛国在线观看| 成人免费一区二区三区在线观看| 美女视频一区二区| 99r国产精品| 久久综合九色综合欧美就去吻| 亚洲人一二三区| 国产成人免费视频一区| 欧美天天综合网| 日韩午夜在线观看视频| 国产精品久久久久影视| 亚洲一区二区欧美激情| 成人免费av网站| 日韩欧美国产电影| 男男成人高潮片免费网站| 97精品电影院| 国产精品私人影院| 另类小说一区二区三区| 91精品免费在线| 日韩码欧中文字| 成人av片在线观看| 欧美电视剧免费全集观看| 亚洲欧美欧美一区二区三区| 国产v综合v亚洲欧| 日韩午夜在线观看视频| 亚洲国产精品精华液ab| 青青草91视频| 欧美不卡一区二区三区| 日韩精品一级二级 | 九九精品视频在线看| 日韩一级黄色大片|