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

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

?? word.c

?? 用c語言編寫用于數據壓縮的源程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************************
File: 		word.c

Authors: 	John Carpinelli   (johnfc@ecr.mu.oz.au)
	 	Wayne Salamonsen  (wbs@mundil.cs.mu.oz.au)

Purpose:	Data compression using a word-based model and revised 
		arithmetic coding method.

Based on: 	A. Moffat, R. Neal, I.H. Witten, "Arithmetic Coding Revisted",
		Proc. IEEE Data Compression Conference, Snowbird, Utah, 
		March 1995.


Copyright 1995 John Carpinelli and Wayne Salamonsen, All Rights Reserved.

These programs are supplied free of charge for research purposes only,
and may not sold or incorporated into any commercial product.  There is
ABSOLUTELY NO WARRANTY of any sort, nor any undertaking that they are
fit for ANY PURPOSE WHATSOEVER.  Use them at your own risk.  If you do
happen to find a bug, or have modifications to suggest, please report
the same to Alistair Moffat, alistair@cs.mu.oz.au.  The copyright
notice above and this statement of conditions must remain an integral
part of each and every copy made of these files.

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "hashtable.h"
#include "stats.h"
#include "coder.h"
#ifdef SYSV
#include <sys/times.h>
#include <limits.h>
#endif

#define ENCODE          0
#define DECODE          1
#define	WORD		0		/* flag to process a word */
#define NON_WORD	1		/* flag to process a non-word */

#define INIT_CONTEXT	1023		/* initial size of word contexts */
#define CHAR_CONTEXT	256		/* length of character contexts */

#define BUFFER_SIZE	512		/* size of file input buffer */
#define MEGABYTE	(1 << 20)	/* size of one megabyte */

#define DEFAULT_MEM	1		/* default 1 megabyte limit */
#define MIN_MBYTES      1	       	/* minimum allowable memory size */
#define MAX_MBYTES      255		/* maximum no for 8 bit int */
#define MAGICNO         "123w"         	/* Magic Number for files */
#define MAGICNO_LENGTH	4		/* length of magic number */


/* Macro to specify what a word is */
#define ISWORD(c) (((c >= 'A') && (c <= 'Z')) || \
                   ((c >= 'a') && (c <= 'z')) || \
                   ((c >= '0') && (c <= '9')))


/* function prototypes */
void init_word_model(hash_table *tables[], context *words[]);
void purge_word_model(hash_table *tables[], context *words[]);
void init_char_model(context *characters[], context *lengths[]);
void encode_file(unsigned char tempstore[], int templength);
void decode_file();
void read_word(char buffer[], int *buffer_length, int *curr_pos, 
	       string *pWord, int type);
void print_results(int operation);


/* global variables */
int mbytes = DEFAULT_MEM; 	/* stores no. megabytes allowable for mem */
int total_memory;		/* total memory used by all models */
int base_memory;	       	/* memory used by character model */
int verbose = 0;		/* flag set if stats are to be printed */
int purge_counter=0;		/* counts number of memory purges */
unsigned int nWords[2]; 	/* counts number of words */
unsigned int nDistinctWords[2];	/* counts number of distinct words */


/* 
 * parse command line arguments. Decide whether to decode or encode
 * and optional memory size. Also sets filename to stdin if none specified 
 */
int 
main(int argc, char *argv[])
{	
    int i;			/* loop counter */
    int what = ENCODE;		/* flag as to whether to encode or decode */
    unsigned char tempstore[MAGICNO_LENGTH];	/* stores magic no */
    int templength = 0;		/* number of bytes read for magic number */
    int	selected = -1;		/* stores if decode set at command line */
    
    /*
     * parse command line arguments. Sets up whether to decode or encode
     * and optional memory limit. Also replaces stdin with input file 
     */
    for (i = 1; i < argc; ) 
    {
	if (argv[i][0] == '-') 
	{
	    switch(argv[i][1]) 
	    {
	      case 'e':		/* do encode */
		selected = ENCODE;
		i++;
		break;
	      case 'd':		/* do decode */
		selected = DECODE;
		i++;
		break;
	      case 'm':		/* set memory size */
		i++;
		mbytes = atoi(argv[i]);
		i++;
		break;
	      case 'v':		/* set verbose flag to print stats */
		verbose = 1;
		i++;
		break;
	      case 'f':		/* set number of F bits */
		i++;
		f_bits = atoi(argv[i]);
		max_frequency = 1<<f_bits;
		i++;
		break;
	      default:		/* incorrect args */
		fprintf(stderr, 
		   "Usage: %s [-e [-m n] | -d] [-v] [-f n] [file]\n", argv[0]);
		exit(1);
	    }
	}
	else if (freopen(argv[i++], "r", stdin) == (FILE *)NULL) 
	{
	    fprintf(stderr, "%s: cannot read %s\n",
		    argv[0], argv[--i]);
	    exit(1);
	}
    }
    
    /* check if memory limit is within allowable range */ 
    if (mbytes < MIN_MBYTES || mbytes > MAX_MBYTES)
    {
	fprintf(stderr, "memory limit must be between %d and %d\n", 
		MIN_MBYTES, MAX_MBYTES);
	exit(1);
    }
    
    /* check if f_bits is within allowable range */
    if (f_bits < MIN_F_BITS || f_bits > MAX_F_BITS)
    {
	fprintf(stderr, "number of f bits must be between %d and %d\n",
		MIN_F_BITS, MAX_F_BITS);
	exit(1);
    }

    /* Check input file for Magic Number. */
    if (selected != ENCODE)
    {
	templength = fread(tempstore, 1, MAGICNO_LENGTH, stdin);
        bytes_input += templength; 
	if (memcmp(tempstore, MAGICNO, MAGICNO_LENGTH) == 0)
	    what = DECODE;
	else if (selected == DECODE)
	{
	    fprintf(stderr, "Bad Magic Number\n");
	    exit(1);
	}
    }
	
    if (what == ENCODE)					/* do ENCODE */
    {
	/* write magic number to output file */
	fwrite(MAGICNO, 1, MAGICNO_LENGTH, stdout);
	bytes_output += MAGICNO_LENGTH;

	/* store memory limit being used in output */
	putc(mbytes, stdout);
	bytes_output += 1;

	/* store number of f_bits being used in output */
	putc(f_bits, stdout);
	bytes_output += 1;

	encode_file(tempstore, templength);
    }
    else						/* do DECODE */
    {
	/* read memory limit to be used and store in mbytes */
	mbytes = getc(stdin);
        bytes_input += 1;
	
	/* get number of f_bits to be used and store in f_bits */
	f_bits = getc(stdin);
	max_frequency = 1<<f_bits;
        bytes_input++;
	decode_file();
    }
    
    /* statistics section if using verbose flag */
    if (verbose)
	print_results(what);
    return 0;			/* exited cleanly */
}


/*
 *
 * print the results of compressing/decompressing a file
 *
 */
void print_results(int operation)
{
    if (operation == ENCODE)
    {
	fprintf(stderr, 
		"                              words           non-words\n");
	fprintf(stderr, "Words read             : %10u          %10u\n", 
		nWords[0], nWords[1]);
	fprintf(stderr, "Distinct words         : %10u          %10u\n",
		nDistinctWords[0], nDistinctWords[1]);
	fprintf(stderr, "Input file size        : %10u bytes\n", bytes_input);
    }
    fprintf(stderr, "Output file size       : %10u bytes\n", bytes_output);
    if (purge_counter != 0)
	fprintf(stderr, "Memory purges          : %10d times\n", purge_counter);
    if ((operation == ENCODE) && (bytes_input > 0))
	fprintf(stderr, "Compression rate       : %10.3f bpc (%0.2f%%) \n", 
		8.0 * bytes_output / bytes_input, 
		(float)bytes_output/bytes_input*100);

    /* only provide timing details if "times" function is available */
#ifdef 	SYSV
{
    struct tms cpu_usage;
    float cpu_used, comp_rate;

    times(&cpu_usage);    	/* determine the cpu time used */
    cpu_used = ((float) cpu_usage.tms_utime) / sysconf(_SC_CLK_TCK);

    if (cpu_used == 0)
	comp_rate = 0;
    else
    {
        if (operation == ENCODE)
	    comp_rate = ((float) bytes_input) / (1024 * cpu_used);
        else
	    comp_rate = ((float) bytes_output) / (1024 * cpu_used);
    }

    fprintf(stderr, "Compression time       : %10.2f seconds (%0.2f Kb/s)\n",
	    cpu_used, comp_rate);
}
#endif
}

/*
 *
 * call the standard C function realloc after checking that the memory
 * limit isn't exceeded. If limit is exceeded return NULL
 *
 */
void 
*do_realloc(void *ptr, size_t size)
{
    total_memory += size;
    if ((total_memory / MEGABYTE) >= mbytes)
	return NULL;
    else
        return (realloc(ptr, size));
}


/*
 *
 * call the standard C function malloc after checking against the memory
 * limit. If the limit is exceeded return NULL

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三免费高清| 中文字幕一区av| 一区精品在线播放| 天天色天天操综合| 国产.欧美.日韩| 精品少妇一区二区三区在线播放| 日韩一区在线看| 国产美女视频一区| 91麻豆精品国产无毒不卡在线观看 | 日本不卡不码高清免费观看| 国产最新精品精品你懂的| 欧美日韩一区在线观看| 亚洲视频在线一区| 国产成人在线观看| 精品久久久久久综合日本欧美| 亚洲精品国产一区二区精华液 | 久久99精品一区二区三区三区| 91亚洲国产成人精品一区二区三| 精品国产电影一区二区| 亚洲成国产人片在线观看| 成人免费视频一区二区| 久久综合九色综合久久久精品综合| 天天色天天爱天天射综合| 91网页版在线| 亚洲欧美经典视频| 成人妖精视频yjsp地址| 精品久久久久久久人人人人传媒| 麻豆高清免费国产一区| 欧美bbbbb| 一区二区理论电影在线观看| 国产一区二区不卡| 精品国产一区二区三区忘忧草| 亚洲成人动漫在线免费观看| 色偷偷一区二区三区| 亚洲丝袜自拍清纯另类| 91麻豆免费观看| 亚洲欧美日韩成人高清在线一区| 99久久精品国产导航| 最新不卡av在线| 一本久久a久久精品亚洲| 亚洲图片你懂的| 在线看日本不卡| 日日骚欧美日韩| 6080日韩午夜伦伦午夜伦| 男男视频亚洲欧美| 久久精品一区蜜桃臀影院| 国产a久久麻豆| 亚洲欧洲精品一区二区三区| 97超碰欧美中文字幕| 亚洲一区在线视频观看| 欧美精品电影在线播放| 美女在线视频一区| 国产偷国产偷亚洲高清人白洁| 成人综合婷婷国产精品久久蜜臀| 18欧美乱大交hd1984| 欧美午夜电影一区| 麻豆国产精品777777在线| 久久精品人人做| 欧美曰成人黄网| 精品影院一区二区久久久| 欧美激情一区三区| 在线视频中文字幕一区二区| 蜜臀av国产精品久久久久| 欧美国产精品劲爆| 欧美性色综合网| 蜜桃精品视频在线| 亚洲女爱视频在线| 精品乱码亚洲一区二区不卡| 91视频www| 狠狠色狠狠色综合系列| 亚洲色欲色欲www在线观看| 欧美老年两性高潮| 成人午夜免费av| 午夜精品福利一区二区蜜股av| 久久久久国色av免费看影院| 欧美视频一区二区在线观看| 国产福利精品一区| 午夜伦欧美伦电影理论片| 亚洲国产精品成人综合| 91精品免费观看| 99re这里只有精品首页| 国内久久精品视频| 婷婷久久综合九色综合绿巨人| 国产亚洲欧美日韩日本| 8v天堂国产在线一区二区| 成人a级免费电影| 另类小说视频一区二区| 亚洲一区二区3| 中文字幕一区二| 精品毛片乱码1区2区3区| 欧美性猛片xxxx免费看久爱| 国产91精品在线观看| 免费精品视频在线| 亚洲一区自拍偷拍| 亚洲日本在线天堂| 国产色产综合产在线视频| 日韩一区二区三区电影| 欧美综合一区二区| 成人av电影免费在线播放| 国产精品中文字幕日韩精品| 日韩电影在线一区| 午夜视频在线观看一区二区| 亚洲免费观看高清完整| 国产精品三级av| 国产亚洲一区字幕| 久久综合九色综合久久久精品综合| 欧美日韩国产一二三| 在线日韩一区二区| 欧洲av一区二区嗯嗯嗯啊| 91日韩一区二区三区| 99久久伊人精品| 国产成人欧美日韩在线电影| 国产精品18久久久久久久网站| 美女诱惑一区二区| 精品一区二区三区免费观看| 日本成人中文字幕在线视频| 丝袜a∨在线一区二区三区不卡| 亚洲18色成人| 午夜一区二区三区在线观看| 亚洲国产精品精华液网站| 一区二区三区资源| 性久久久久久久久| 日本女人一区二区三区| 蜜桃av一区二区在线观看| 久久精品国产秦先生| 国内精品国产成人国产三级粉色 | 国产精品成人免费| 日韩一区中文字幕| 樱花草国产18久久久久| 亚洲成av人片一区二区三区| 日韩专区一卡二卡| 国产又黄又大久久| www.成人在线| 欧美性视频一区二区三区| 欧美一区二区国产| 久久婷婷综合激情| 中文字幕亚洲一区二区av在线| 亚洲视频 欧洲视频| 亚洲成年人网站在线观看| 麻豆精品视频在线观看视频| 国产一区 二区| 一本在线高清不卡dvd| 91麻豆精品国产91久久久更新时间 | 欧美日韩一级二级三级| 欧美一区二区三区播放老司机| 精品久久国产字幕高潮| 亚洲国产精品精华液2区45| 亚洲精品乱码久久久久久日本蜜臀| 亚洲国产日韩av| 精久久久久久久久久久| 99久久久免费精品国产一区二区| 欧美日韩亚洲综合在线| 日韩精品一区二区三区四区视频| 国产日韩成人精品| 亚洲成人高清在线| 成人午夜在线免费| 欧美精品乱码久久久久久按摩| 久久女同精品一区二区| 亚洲一区二三区| 国产精品一区三区| 精品视频在线视频| 欧美国产欧美综合| 欧美a级理论片| 色偷偷一区二区三区| 国产日韩高清在线| 日韩 欧美一区二区三区| 成人午夜激情视频| 日韩免费看网站| 一区二区在线观看免费 | 日韩精品一区二区三区蜜臀| 国产精品三级在线观看| 麻豆成人久久精品二区三区小说| 99re热这里只有精品免费视频| 日韩一二三四区| 亚洲综合丝袜美腿| 成人国产在线观看| 2023国产精品自拍| 日韩av一区二区三区| 日本电影欧美片| 中文av一区二区| 国产老女人精品毛片久久| 91精品国产一区二区三区香蕉| 亚洲欧美欧美一区二区三区| 国产成人自拍在线| 精品国产乱码久久久久久图片 | 国产亚洲欧美日韩在线一区| 日本成人在线看| 欧美精品久久久久久久多人混战| 亚洲色图欧洲色图| 99久久精品一区| 国产精品网站在线| 国产aⅴ精品一区二区三区色成熟| 日韩一区二区不卡| 免费看欧美美女黄的网站| 91精品国产免费久久综合| 天天操天天综合网| 欧美精品久久99| 奇米四色…亚洲| 日韩一级免费观看| 韩国精品在线观看|