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

📄 amiga.c

📁 给出了 zip 压缩算法的完整实现过程。
💻 C
字号:
/*  Copyright (c) 1990-2006 Info-ZIP.  All rights reserved.  See the accompanying file LICENSE, version 2005-Feb-10 or later  (the contents of which are also included in zip.h) for terms of use.  If, for some reason, all these files are missing, the Info-ZIP license  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html*//* OS specific routines for AMIGA platform. * * John Bush    <John.Bush@east.sun.com>  BIX: jbush * Paul Kienitz <kie@pacbell.net> * * History: * * Date     DoBee    Comments * -------  -------- ----------------------------------------------- * 21Jan93  JBush    Original coding. *                   Incorporated filedate.c (existing routine). * * 31Jan93  JBush    Made filedate.c include unconditional. * * 18Jul93  PaulK    Moved Aztec _abort() here from stat.c because we *                   can't share the same one between Zip and UnZip. *                   Added close_leftover_open_dirs() call to it. * * 17Apr95  PaulK    Added Amiga internal version string so that *                   installer programs can compare the version being *                   installed to see if the copy the user already has *                   is older or newer.  Added Prestart_Hook to support *                   debug tracing in deflate.a. * *  6May95  PaulK    Added GetComment() for filenote support. * * 12Nov95  PaulK    Added #define ZIP in front of filedate.c, for *                   new options in there; removed declare of set_con() *                   since echon() no longer expands to it (or anything). * * 12Feb96  PaulK    Removed call of echon() entirely. * * 12Jul97  PaulK    Made both Aztec and SAS define USE_TIME_LIB for filedate.c * * 26Aug97  PaulK    Added ClearIOErr_exit() * *  2Jan98  HWalt    Adapted for SAS/C using stat.c replacement functions * *  6Jun00  PaulK    Removed references to time_lib, since new filedate.c *                   supercedes it */#include <exec/memory.h>#ifdef AZTEC_C#  include <libraries/dos.h>#  include <libraries/dosextens.h>#  include <clib/exec_protos.h>#  include <clib/dos_protos.h>#  include <pragmas/exec_lib.h>#  include <pragmas/dos_lib.h>#else#  include <proto/exec.h>#  include <proto/dos.h>#endif#include <stdlib.h>#ifndef ZCONST#  define ZCONST const#endif#include "ziperr.h"void ziperr(int c, ZCONST char *h);#define ZIP#if !defined(UTIL)#  define NO_MKTIME#endif#ifdef AZTEC_C/* ============================================================= *//* filedate.c is an external file, since it's shared with UnZip. *//* Aztec includes it here, but SAS/C now compiles it separately. */#  include "amiga/filedate.c"/* the same applies to stat.c                                    */#  include "amiga/stat.c"#  define setenv BOGUS_INCOMPATIBLE_setenv#  include <fcntl.h>#  undef setenv#  ifdef DEBUG#    define PRESTART_HOOK#  endif#endifextern void close_leftover_open_dirs(void);/* the following handles cleanup when a ^C interrupt happens: */void _abort(void)               /* called when ^C is pressed */{    close_leftover_open_dirs();    ziperr(ZE_ABORT, "^C");}void ClearIOErr_exit(int e)     /* EXIT is defined as this */{    if (!e)        ((struct Process *) FindTask(NULL))->pr_Result2 = 0;    /* we clear IoErr() since we are successful, in a 1.x-compatible way */    exit(e);}/* Make sure the version number here matches the number in revision.h *//* as closely as possible in strict decimal "#.#" form:               */const char version_id[] = "\0$VER: Zip 2.3 ("#  include "env:VersionDate"")\r\n";/* call this with an arg of NULL to free storage: */char *GetComment(char *filename){    BPTR lk;    static struct FileInfoBlock *fib = NULL;    if (!filename) {        if (fib) FreeMem(fib, sizeof(*fib));        fib = NULL;        return NULL;    }    if (!fib) {        if (!(fib = AllocMem(sizeof(*fib), MEMF_PUBLIC)))            ziperr(ZE_MEM, "was checking filenotes");    }    if (!(lk = Lock(filename, ACCESS_READ)))        return NULL;    if (!Examine(lk, fib))        fib->fib_Comment[0] = '\0';    UnLock(lk);    return fib->fib_Comment[0] ? &fib->fib_Comment[0] : NULL;}

⌨️ 快捷键说明

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