汇编大全 中国矿业大学计算机学院 汇编实验5

源代码在线查看: decode.c

软件大小: 13766 K
上传用户: zzxt
关键词: 汇编 大学 实验 计算机
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*$Source: /usr/home/dhesi/zoo/RCS/decode.c,v $*/
				/*$Id: decode.c,v 1.6 91/07/09 01:39:49 dhesi Exp $*/
				/***********************************************************
					decode.c
				
				Adapted from "ar" archiver written by Haruhiko Okumura.
				***********************************************************/
				
				#include "options.h"
				#include "zoo.h"
				#include "ar.h"
				#include "lzh.h"
				
				extern int decoded;		/* from huf.c */
				
				static int j;  /* remaining bytes to copy */
				
				void decode_start()
				{
					huf_decode_start();
					j = 0;
					decoded = 0;
				}
				
				/*
				decodes; returns no. of chars decoded 
				*/
				
				int decode(count, buffer)
				uint count;
				uchar buffer[];
					/* The calling function must keep the number of
					   bytes to be processed.  This function decodes
					   either 'count' bytes or 'DICSIZ' bytes, whichever
					   is smaller, into the array 'buffer[]' of size
					   'DICSIZ' or more.
					   Call decode_start() once for each new file
					   before calling this function. */
				{
					static uint i;
					uint r, c;
				
					r = 0;
					while (--j >= 0) {
						buffer[r] = buffer[i];
						i = (i + 1) & (DICSIZ - 1);
						if (++r == count)
							return r;
					}
					for ( ; ; ) {
						c = decode_c();
						if (decoded)
							return r;
						if (c 							buffer[r] = c;
							if (++r == count) 
								return r;
						} else {
							j = c - (UCHAR_MAX + 1 - THRESHOLD);
							i = (r - decode_p() - 1) & (DICSIZ - 1);
							while (--j >= 0) {
								buffer[r] = buffer[i];
								i = (i + 1) & (DICSIZ - 1);
								if (++r == count)
									return r;
							}
						}
					}
				}
							

相关资源