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

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

?? ar.c

?? 使用LZ壓縮算法的完整應(yīng)用
?? C
字號(hào):
/***********************************************************
	ar.c -- main file
***********************************************************/

static char *usage =
	"ar -- compression archiver -- written by Haruhiko Okumura\n"
	"  PC-VAN:SCIENCE        CompuServe:74050,1022\n"
	"  NIFTY-Serve:PAF01022  INTERNET:74050.1022@compuserve.com\n"
	"Usage: ar command archive [file ...]\n"
	"Commands:\n"
	"   a: Add files to archive (replace if present)\n"
	"   x: Extract files from archive\n"
	"   r: Replace files in archive\n"
	"   d: Delete files from archive\n"
	"   p: Print files on standard output\n"
	"   l: List contents of archive\n"
	"If no files are named, all files in archive are processed,\n"
	"   except for commands 'a' and 'd'.\n"
	"You may copy, distribute, and rewrite this program freely.\n";

/***********************************************************

Structure of archive block (low order byte first):
-----preheader
 1	basic header size
		= 25 + strlen(filename) (= 0 if end of archive)
 1	basic header algebraic sum (mod 256)
-----basic header
 5	method ("-lh0-" = stored, "-lh5-" = compressed)
 4	compressed size (including extended headers)
 4	original size
 4	not used
 1	0x20
 1	0x01
 1	filename length (x)
 x	filename
 2	original file's CRC
 1	0x20
 2	first extended header size (0 if none)
-----first extended header, etc.
-----compressed file

***********************************************************/

#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "ar.h"

#define FNAME_MAX (255 - 25) /* max strlen(filename) */
#define namelen  header[19]
#define filename ((char *)&header[20])

int unpackable;            /* global, set in io.c */
ulong compsize, origsize;  /* global */

static uchar buffer[DICSIZ];
static uchar header[255];
static uchar headersize, headersum;
static uint  file_crc;
static char  *temp_name;

static uint ratio(ulong a, ulong b)  /* [(1000a + [b/2]) / b] */
{
	int i;

	for (i = 0; i < 3; i++)
		if (a <= ULONG_MAX / 10) a *= 10;  else b /= 10;
	if ((ulong)(a + (b >> 1)) < a) {  a >>= 1;  b >>= 1;  }
	if (b == 0) return 0;
	return (uint)((a + (b >> 1)) / b);
}

static void put_to_header(int i, int n, ulong x)
{
	while (--n >= 0) {
		header[i++] = (uchar)((uint)x & 0xFF);  x >>= 8;
	}
}

static ulong get_from_header(int i, int n)
{
	ulong s;

	s = 0;
	while (--n >= 0) s = (s << 8) + header[i + n];  /* little endian */
	return s;
}

static uint calc_headersum(void)
{
	int i;
	uint s;

	s = 0;
	for (i = 0; i < headersize; i++) s += header[i];
	return s & 0xFF;
}

static int read_header(void)
{
	headersize = (uchar) fgetc(arcfile);
	if (headersize == 0) return 0;  /* end of archive */
	headersum  = (uchar) fgetc(arcfile);
	fread_crc(header, headersize, arcfile);  /* CRC not used */
	if (calc_headersum() != headersum) error("Header sum error");
	compsize = get_from_header(5, 4);
	origsize = get_from_header(9, 4);
	file_crc = (uint)get_from_header(headersize - 5, 2);
	filename[namelen] = '\0';
	return 1;  /* success */
}

static void write_header(void)
{
	fputc(headersize, outfile);
	/* We've destroyed file_crc by null-terminating filename. */
	put_to_header(headersize - 5, 2, (ulong)file_crc);
	fputc(calc_headersum(), outfile);
	fwrite_crc(header, headersize, outfile);  /* CRC not used */
}

static void skip(void)
{
	fseek(arcfile, compsize, SEEK_CUR);
}

static void copy(void)
{
	uint n;

	write_header();
	while (compsize != 0) {
		n = (uint)((compsize > DICSIZ) ? DICSIZ : compsize);
		if (fread ((char *)buffer, 1, n, arcfile) != n)
			error("Can't read");
		if (fwrite((char *)buffer, 1, n, outfile) != n)
			error("Can't write");
		compsize -= n;
	}
}

static void store(void)
{
	uint n;

	origsize = 0;
	crc = INIT_CRC;
	while ((n = fread((char *)buffer, 1, DICSIZ, infile)) != 0) {
		fwrite_crc(buffer, n, outfile);  origsize += n;
	}
	compsize = origsize;
}

static int add(int replace_flag)
{
	long headerpos, arcpos;
	uint r;

	if ((infile = fopen(filename, "rb")) == NULL) {
		fprintf(stderr, "Can't open %s\n", filename);
		return 0;  /* failure */
	}
	if (replace_flag) {
		printf("Replacing %s ", filename);  skip();
	} else
		printf("Adding %s ", filename);
	headerpos = ftell(outfile);
	namelen = strlen(filename);
	headersize = 25 + namelen;
	memcpy(header, "-lh5-", 5);  /* compress */
	write_header();  /* temporarily */
	arcpos = ftell(outfile);
	origsize = compsize = 0;  unpackable = 0;
	crc = INIT_CRC;  encode();
	if (unpackable) {
		header[3] = '0';  /* store */
		rewind(infile);
		fseek(outfile, arcpos, SEEK_SET);
		store();
	}
	file_crc = crc ^ INIT_CRC;
	fclose(infile);
	put_to_header(5, 4, compsize);
	put_to_header(9, 4, origsize);
	memcpy(header + 13, "\0\0\0\0\x20\x01", 6);
	memcpy(header + headersize - 3, "\x20\0\0", 3);
	fseek(outfile, headerpos, SEEK_SET);
	write_header();  /* true header */
	fseek(outfile, 0L, SEEK_END);
	r = ratio(compsize, origsize);
	printf(" %d.%d%%\n", r / 10, r % 10);
	return 1;  /* success */
}

int get_line(char *s, int n)
{
	int i, c;

	i = 0;
	while ((c = getchar()) != EOF && c != '\n')
		if (i < n) s[i++] = (char)c;
	s[i] = '\0';
	return i;
}

static void extract(int to_file)
{
	int n, method;
	uint ext_headersize;

	if (to_file) {
		while ((outfile = fopen(filename, "wb")) == NULL) {
			fprintf(stderr, "Can't open %s\nNew filename: ", filename);
			if (get_line(filename, FNAME_MAX) == 0) {
				fprintf(stderr, "Not extracted\n");
				skip();  return;
			}
			namelen = strlen(filename);
		}
		printf("Extracting %s ", filename);
	} else {
		outfile = stdout;
		printf("===== %s =====\n", filename);
	}
	crc = INIT_CRC;
	method = header[3];  header[3] = ' ';
	if (! strchr("045", method) || memcmp("-lh -", header, 5)) {
		fprintf(stderr, "Unknown method: %u\n", method);
		skip();
	} else {
		ext_headersize = (uint)get_from_header(headersize - 2, 2);
		while (ext_headersize != 0) {
			fprintf(stderr, "There's an extended header of size %u.\n",
				ext_headersize);
			compsize -= ext_headersize;
			if (fseek(arcfile, ext_headersize - 2, SEEK_CUR))
				error("Can't read");
			ext_headersize = fgetc(arcfile);
			ext_headersize += (uint)fgetc(arcfile) << 8;
		}
		crc = INIT_CRC;
		if (method != '0') decode_start();
		while (origsize != 0) {
			n = (uint)((origsize > DICSIZ) ? DICSIZ : origsize);
			if (method != '0') decode(n, buffer);
			else if (fread((char *)buffer, 1, n, arcfile) != n)
				error("Can't read");
			fwrite_crc(buffer, n, outfile);
			if (outfile != stdout) putc('.', stderr);
			origsize -= n;
		}
	}
	if (to_file) fclose(outfile);  else outfile = NULL;
	printf("\n");
	if ((crc ^ INIT_CRC) != file_crc)
		fprintf(stderr, "CRC error\n");
}

static void list_start(void)
{
	printf("Filename         Original Compressed Ratio CRC Method\n");
}

static void list(void)
{
	uint r;

	printf("%-14s", filename);
	if (namelen > 14) printf("\n              ");
	r = ratio(compsize, origsize);
	printf(" %10lu %10lu %u.%03u %04X %5.5s\n",
		origsize, compsize, r / 1000, r % 1000, file_crc, header);
}

static int match(char *s1, char *s2)
{
	for ( ; ; ) {
		while (*s2 == '*' || *s2 == '?') {
			if (*s2++ == '*')
				while (*s1 && *s1 != *s2) s1++;
			else if (*s1 == 0)
				return 0;
			else s1++;
		}
		if (*s1 != *s2) return 0;
		if (*s1 == 0  ) return 1;
		s1++;  s2++;
	}
}

static int search(int argc, char *argv[])
{
	int i;

	if (argc == 3) return 1;
	for (i = 3; i < argc; i++)
		if (match(filename, argv[i])) return 1;
	return 0;
}

static void exitfunc(void)
{
	fclose(outfile);  remove(temp_name);
}

int main(int argc, char *argv[])
{
	int i, j, cmd, count, nfiles, found, done;

	/* Check command line arguments. */
	if (argc < 3
	 || argv[1][1] != '\0'
	 || ! strchr("AXRDPL", cmd = toupper(argv[1][0]))
	 || (argc == 3 && strchr("AD", cmd)))
		error(usage);

	/* Wildcards used? */
	for (i = 3; i < argc; i++)
		if (strpbrk(argv[i], "*?")) break;
	if (cmd == 'A' && i < argc)
		error("Filenames may not contain '*' and '?'");
	if (i < argc) nfiles = -1;  /* contains wildcards */
	else nfiles = argc - 3;     /* number of files to process */

	/* Open archive. */
	arcfile = fopen(argv[2], "rb");
	if (arcfile == NULL && cmd != 'A')
		error("Can't open archive '%s'", argv[2]);

	/* Open temporary file. */
	if (strchr("ARD", cmd)) {
		temp_name = tmpnam(NULL);
		outfile = fopen(temp_name, "wb");
		if (outfile == NULL)
			error("Can't open temporary file");
		atexit(exitfunc);
	} else temp_name = NULL;

	make_crctable();  count = done = 0;

	if (cmd == 'A') {
		for (i = 3; i < argc; i++) {
			for (j = 3; j < i; j++)
				if (strcmp(argv[j], argv[i]) == 0) break;
			if (j == i) {
				strcpy(filename, argv[i]);
				if (add(0)) count++;  else argv[i][0] = 0;
			} else nfiles--;
		}
		if (count == 0 || arcfile == NULL) done = 1;
	}

	while (! done && read_header()) {
		found = search(argc, argv);
		switch (cmd) {
		case 'R':
			if (found) {
				if (add(1)) count++;  else copy();
			} else copy();
			break;
		case 'A':  case 'D':
			if (found) {
				count += (cmd == 'D');  skip();
			} else copy();
			break;
		case 'X':  case 'P':
			if (found) {
				extract(cmd == 'X');
				if (++count == nfiles) done = 1;
			} else skip();
			break;
		case 'L':
			if (found) {
				if (count == 0) list_start();
				list();
				if (++count == nfiles) done = 1;
			}
			skip();  break;
		}
	}

	if (temp_name != NULL && count != 0) {
		fputc(0, outfile);  /* end of archive */
		if (ferror(outfile) || fclose(outfile) == EOF)
			error("Can't write");
		remove(argv[2]);  rename(temp_name, argv[2]);
	}

	printf("  %d files\n", count);
	return EXIT_SUCCESS;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图欧洲色图婷婷| 亚洲女人的天堂| 日韩一区二区三区电影在线观看| 色女孩综合影院| 99国产欧美另类久久久精品| 国产高清精品在线| 国产99久久久久久免费看农村| 国产一区不卡在线| 国产精品99久久久久久有的能看| 黑人巨大精品欧美一区| 国产真实乱偷精品视频免| 国内精品久久久久影院薰衣草| 久久精品国产99国产精品| 男女男精品网站| 极品少妇一区二区| 国产不卡高清在线观看视频| 成人黄色小视频| 成人av动漫网站| 色狠狠综合天天综合综合| 在线一区二区三区| 在线不卡中文字幕| 日韩精品一区国产麻豆| 亚洲欧美二区三区| 亚洲一区二区三区四区不卡| 亚洲永久免费av| 青青青伊人色综合久久| 久久成人麻豆午夜电影| 国产黄色精品视频| 99精品国产一区二区三区不卡| 欧美主播一区二区三区美女| 337p亚洲精品色噜噜| 2021中文字幕一区亚洲| 国产精品美女久久久久aⅴ国产馆| 亚洲欧美激情插| 亚洲电影你懂得| 国内精品写真在线观看| 91美女福利视频| 7777女厕盗摄久久久| 久久蜜桃av一区二区天堂| 亚洲欧洲日产国码二区| 亚洲福利国产精品| 久99久精品视频免费观看| 成年人网站91| 在线成人小视频| 国产精品乱人伦| 日韩黄色免费电影| 国产69精品久久99不卡| 欧洲视频一区二区| 2021久久国产精品不只是精品| 亚洲色图视频网站| 久久99精品国产91久久来源| 97久久超碰国产精品| 8x8x8国产精品| 国产精品福利av| 美女在线观看视频一区二区| 波多野洁衣一区| 日韩一区二区电影在线| 中文字幕一区二区三区乱码在线 | 青娱乐精品在线视频| av在线播放不卡| 欧美电视剧在线观看完整版| 亚洲另类在线制服丝袜| 国产在线精品一区二区三区不卡| 色综合久久综合网97色综合 | 亚洲码国产岛国毛片在线| 麻豆91在线播放免费| 91免费在线看| 久久精品一区八戒影视| 视频一区二区欧美| 99久久伊人精品| 欧美精品一区二区三区视频| 亚洲国产日韩精品| 不卡一区中文字幕| 精品国产乱码久久久久久1区2区| 亚洲网友自拍偷拍| 成人综合婷婷国产精品久久免费| 91精品婷婷国产综合久久| 亚洲丝袜自拍清纯另类| 国产高清成人在线| 日韩一级成人av| 午夜精品国产更新| 色狠狠桃花综合| 国产精品福利一区| 风流少妇一区二区| 亚洲精品一区二区三区香蕉| 日本欧美在线看| 欧美色综合网站| 一区二区三区影院| av在线一区二区| 国产欧美精品一区| 在线免费不卡视频| 国产精品视频yy9299一区| 国产一本一道久久香蕉| 精品久久一区二区| 蜜乳av一区二区| 日韩一区二区三区在线观看| 亚洲成人av一区二区三区| 色综合一个色综合亚洲| 中文字幕亚洲欧美在线不卡| 国产成a人亚洲精| 国产亚洲短视频| 国产精品18久久久久久久网站| 精品少妇一区二区| 精品一区二区免费视频| 精品欧美乱码久久久久久1区2区| 欧美a一区二区| 精品国产sm最大网站| 蜜桃av噜噜一区| 精品国产伦理网| 国产一区二区三区在线观看免费 | 欧美日韩视频不卡| 午夜a成v人精品| 91精品国产一区二区三区香蕉| 日韩国产一二三区| 欧美一二三四区在线| 久久99精品一区二区三区| 精品国产一区二区三区四区四| 久久国产精品第一页| 久久久久久亚洲综合| 国产福利不卡视频| 中文字幕日韩精品一区| 色综合天天综合网国产成人综合天 | 成人黄色在线看| 亚洲美女视频在线观看| 欧美色爱综合网| 青青青爽久久午夜综合久久午夜 | 日本午夜精品视频在线观看| 精品日韩一区二区三区免费视频| 国产美女精品人人做人人爽| 国产欧美一区视频| 色哟哟国产精品| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲国产精品一区二区久久恐怖片| 欧美日韩卡一卡二| 免费成人美女在线观看.| 久久亚洲一级片| 欧美电视剧免费全集观看| 国产精品538一区二区在线| 国产精品传媒入口麻豆| 欧美体内she精高潮| 久久99国产精品麻豆| 国产精品久久久久久久久久久免费看| 色综合久久久久综合体| 日本强好片久久久久久aaa| 国产目拍亚洲精品99久久精品| 一本大道久久a久久精二百| 日韩中文字幕1| 欧美激情一区二区三区全黄| 在线免费不卡电影| 国产一区二区日韩精品| 亚洲视频 欧洲视频| 日韩欧美www| 91在线视频免费91| 免费的国产精品| 中文字幕一区免费在线观看| 在线成人午夜影院| 成人美女视频在线观看18| 五月天亚洲精品| 国产精品久久久久一区二区三区共 | 午夜精品福利一区二区蜜股av| 精品少妇一区二区三区在线播放 | 午夜精品久久一牛影视| 国产校园另类小说区| 欧美在线观看视频一区二区| 国产一区二区伦理| 亚洲成人精品一区| 中文字幕av不卡| 日韩欧美国产综合| 色婷婷久久久综合中文字幕 | 91成人国产精品| 国产成人一级电影| 欧美aa在线视频| 亚洲午夜视频在线观看| 久久久www成人免费毛片麻豆| 欧美群妇大交群的观看方式| 成人av手机在线观看| 韩国毛片一区二区三区| 亚洲mv在线观看| 亚洲九九爱视频| 中文字幕电影一区| 精品999在线播放| 欧美精品色综合| 色婷婷综合久久久| 波多野洁衣一区| 成人一道本在线| 韩国成人精品a∨在线观看| av电影在线观看一区| 国产美女精品在线| 精品午夜一区二区三区在线观看| 亚洲国产精品麻豆| 亚洲精品va在线观看| 国产精品毛片无遮挡高清| 久久久综合九色合综国产精品| 欧美一区二区三区色| 欧美三级在线看| 欧美视频在线一区| 在线中文字幕一区| 色婷婷综合视频在线观看| 99精品久久只有精品| 成人教育av在线|