⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dm642main.c

📁 gzip解压缩算法在tic64x核上的移植。在dm642上测试过。工程中含测试源码
💻 C
字号:
/********************************************************************/
/*  Copyright 2004 by SEED Incorporated.							*/
/*  All rights reserved. Property of SEED Incorporated.				*/
/*  Restricted rights to use, duplicate or disclose this code are	*/
/*  granted through contract.									    */
/*  															    */
/********************************************************************/
/*
 *---------dm642main.c---------
 * This example uses a timer to read and write the ESAM.
 */


#include <stdio.h>
#include <csl.h>
#include <std.h>
#include <csl_emifa.h>
#include <csl_irq.h>
#include <csl_chip.h>
#include <csl_timer.h>

#include "seeddm642.h"
#include "gzip.h"

#pragma	DATA_SECTION(fin, "extern_fin");
unsigned char fin[71418];
int fin_index=0;
int fin_left ;

#pragma	DATA_SECTION(fout, "extern_fout");
unsigned char fout[512*1024];
int fout_index=0;
int fout_left;
/*
int decompress=1;
int part_nb=0;
int method = 8;
int level = 6;   
long bytes_in;            
long bytes_out;            
long total_in = 0;         
long total_out = 0;        
unsigned insize=0;           
unsigned inptr=0;         
unsigned outcnt=0; */          
long header_bytes=0;

int ascii = 0;        /* convert end-of-lines to local OS conventions */
int to_stdout = 0;    /* output to stdout (-c) */
int decompress = 0;   /* decompress (-d) */
int force = 0;        /* don't ask questions, compress links (-f) */
int no_name = -1;     /* don't save or restore the original file name */
int no_time = -1;     /* don't save or restore the original file time */
int recursive = 0;    /* recurse through directories (-r) */
int list = 0;         /* list the file contents (-l) */
int verbose = 0;      /* be verbose (-v) */
int quiet = 0;        /* be very quiet (-q) */
int do_lzw = 0;       /* generate output compatible with old compress (-Z) */
int test = 0;         /* test .gz file integrity */
int foreground;       /* set if program run in foreground */
char *progname;       /* program name */
//int maxbits = BITS;   /* max bits per code for LZW */
int method = DEFLATED;/* compression method */
int level = 6;        /* compression level */
int exit_code = OK;   /* program exit code */
int save_orig_name;   /* set if original name must be saved */
int last_member;      /* set for .zip and .Z files */
int part_nb;          /* number of parts in .gz file */
long time_stamp;      /* original time stamp (modification time) */
long ifile_size;      /* input file size, -1 for devices (debug only) */
char *env;            /* contents of GZIP env variable */
char **args = NULL;   /* argv pointer if GZIP env variable defined */
//char z_suffix[MAX_SUFFIX+1]; /* default suffix (can be set with --suffix) */
int  z_len;           /* strlen(z_suffix) */

long bytes_in;             /* number of input bytes */
long bytes_out;            /* number of output bytes */
long total_in = 0;         /* input bytes for all files */
long total_out = 0;        /* output bytes for all files */
int  remove_ofname = 0;	   /* remove output file on error */
//struct stat istat;         /* status for input file */
int  ifd;                  /* input file descriptor */
int  ofd;                  /* output file descriptor */
unsigned insize;           /* valid bytes in inbuf */
unsigned inptr;            /* index of next byte to be processed in inbuf */
unsigned outcnt;           /* bytes in output buffer */


#pragma	DATA_SECTION(inbuf, "extern_inbuf");
unsigned char inbuf[INBUFSIZ +INBUF_EXTRA];
#pragma	DATA_SECTION(outbuf, "extern_outbuf");
unsigned char outbuf[OUTBUFSIZ+OUTBUF_EXTRA];
#pragma	DATA_SECTION(d_buf, "extern_dbuf");
unsigned short d_buf[DIST_BUFSIZE];
#pragma	DATA_SECTION(window, "extern_window");
unsigned char window[2L*WSIZE];

extern Start_SlaveSerial();
void clear_bufs();

void main()
{
	CSL_init();
	memcpy(fin,(char*)0x9006e906,71481);
    memset(fout,0,512*1024);
//	decompress = 1;
    fin_left = 71418;
    clear_bufs(); 
    part_nb = 0;

	method = get_method(); /* updates ofname if original given */
	 
	unzip();
	//////
    GPIO_RSET(GPGC,0x0);
    GPIO_RSET(GPEN,0x610a);
    GPIO_RSET(GPDIR,0x210a);
    GPIO_RSET(GPVAL,0x0000);
    
	Start_SlaveSerial();

}     

int get_method(in)
    int in;        /* input file descriptor */
{
    uch flags;     /* compression flags */
    char magic[2]; /* magic header */
    ulg stamp;     /* time stamp */
  char c; 
	magic[0] = (char)get_byte();
	magic[1] = (char)get_byte();
  
    method = -1;                 /* unknown yet */
    part_nb++;                   /* number of parts in gzip file */
    header_bytes = 0;
 //   last_member = RECORD_IO;

    if (memcmp(magic, GZIP_MAGIC, 2) == 0
        || memcmp(magic, OLD_GZIP_MAGIC, 2) == 0) {

	method = (int)get_byte();
	
	flags  = (uch)get_byte();

	stamp  = (ulg)get_byte();
	stamp |= ((ulg)get_byte()) << 8;
	stamp |= ((ulg)get_byte()) << 16;
	stamp |= ((ulg)get_byte()) << 24;

	(void)get_byte();  /* Ignore extra flags for the moment */
	(void)get_byte();  /* Ignore OS type for the moment */

	if ((flags & CONTINUATION) != 0) {
	    unsigned part = (unsigned)get_byte();
	    part |= ((unsigned)get_byte())<<8;
	    
	}
	if ((flags & EXTRA_FIELD) != 0) {
	    unsigned len = (unsigned)get_byte();
	    len |= ((unsigned)get_byte())<<8;
	    while (len--) (void)get_byte();
	}

	if ((flags & ORIG_NAME) != 0) {
		do {c=get_byte();} while (c != 0);
	} 


	if ((flags & COMMENT) != 0) {
	    while (get_char() != 0) /* null */ ;
	}
	if (part_nb == 1) {
	    header_bytes = inptr + 2*4; /* include crc and size */
	}

    } 
    return method;

   
}


void clear_bufs()
{
    outcnt = 0;
    insize = inptr = 0;
    bytes_in = bytes_out = 0L;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -