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

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

?? archiver.cpp

?? 非常好用的五子棋游戲源碼
?? CPP
字號:
// Created:11-16-98
// By Jeff Connelly

// An archiver using ComprLib

#if 0
************************** Archive structure ******************************
This header is present only at the beginning:
OFFSET              Count TYPE   Description
0x0000                   4 char   ID="ARCH"
0x0004                   4 char   ID="IVE" followed by 1Ah
0x0008                   1 dword  Files in archive (up to over a million!)

For each file, there is:
OFFSET              Count TYPE   Description
0x0000                  1 byte   Misc flags, bitmapped:
                                 Bits numbered: 7654 3210
                                 0 - Compressed
                                 1 - CRC-32 stored
                                 2 - Comment
                                 3 - File is deleted
                                 4 to 7 - Compression method if compressed
                                 (see table 0x0000)
0x0000                  1 dword   Size of file in the archive (not orig size)
????                    1 dword   If compressed: original size
????                    1 dword   If CRC-32 stored: CRC-32
????                    1 word    If comment: comment length
????                    ? char    If comment: comment text
????                    ? char    Filename, ASCIIZ
????                    ? byte    File contents

TABLE 0x0000: Compression methods
0000 - Not used, set if not compressed
0001 - RLE method 1
0010 - RLE method 2
0011 - LZSS
0100 - LZW
0101 - Inverted (encryption sort of)
#endif

#include "comprlib.h"
#include <stdio.h>
#include <stdlib.h>
#include <io.h>

FILE* arc;                               // The archive
char* archive;                           // Filename of archive
bool flag_recover_deleted = false;       // Extract deleted files?
bool flag_verbose = true;                // Verbose output?

// Class representing a file in this archive
struct Member
{
public:
    Member():flags(0), size(0), origsize(0), crc32(0), commentlen(0),
             comment(NULL), data(NULL) { };
    void Destroy();
    ~Member() { Destroy(); };
    void Write();
    void Read();

    // 'flags' can be ANDed with these values to see if the bits are set:
    #define FLAG_COMPRESSED    0x01
    #define FLAG_CRC32         0x02
    #define FLAG_COMMENT       0x04
    #define FLAG_DELETED       0x08
    unsigned char flags;
    unsigned long size;
    unsigned long origsize;
    unsigned long crc32;
    unsigned short commentlen;
    char* comment;
    char* filename;
    char* data;
};

// Free memory allocated by this
void Member::Destroy()
{
    xfree(data);
    xfree(filename);
    xfree(comment);
}

// Write this member to the archive
void Member::Write()
{
    fwrite (&flags, 1, 1, arc);
    fwrite (&size, 1, 4, arc);
    if (flags & FLAG_COMPRESSED)
        fwrite (&origsize, 1, 4, arc);
    if (flags & FLAG_CRC32)
        fwrite (&crc32, 1, 4, arc);
    if (flags & FLAG_COMMENT)
    {
        fwrite (&commentlen, 1, 2, arc);
        fwrite (comment, 1, commentlen, arc);
    }
    fwrite (filename, 1, strlen(filename) + 1, arc);
    fwrite (data, 1, size, arc);
}

// Read the member from the archive
void Member::Read()
{
    register char c;
    int i;

    fread (&flags, 1, 1, arc);
    fread (&size, 1, 4, arc);
    if (flags & FLAG_COMPRESSED)
        fread (&origsize, 1, 4, arc);
    if (flags & FLAG_CRC32)
        fread (&crc32, 1, 4, arc);
    if (flags & FLAG_COMMENT)
    {
        fread (&commentlen, 1, 2, arc);
        fread (comment, 1, commentlen, arc);
    }

    // Read the null-terminated filename
    {
        int i = 0;
        register char c;
        filename = NULL;
        filename = (char*)xmalloc(1);
        do
        {
            c = getc(arc);
            filename[i] = c;
            filename = (char*)xrealloc(filename, (i++) + 1);
        } while (c);
        filename[i - 2] = 0;
    }
    fread (data, 1, size, arc);
}

// Deturmine size of file 'fp'
long file_size(FILE* fp)
{
    unsigned long pos, ret;
    pos = ftell(fp);
    fseek (fp, 0, SEEK_END);
    ret = ftell(fp);
    fseek (fp, pos, SEEK_SET);
    return ret;
}

// Does the option 'opt'
void CheckOption(char* opt)
{
    if (opt[0] != '-' && opt[0] != '/')
        return;
    switch (tolower(opt[1]))
    {
    case 'R': flag_recover_deleted = true; break;
    case 'V': flag_verbose = true; break;
    case 'Q': flag_verbose = false; break;
    }
}

void add_files(int count, char* files[])
{
    int i;
    FILE* fp;
    Member file;

    arc = fopen(archive, "ab");

    if (!file_size(arc))         // New archive
    {
        {
            char* sig = (char*)xmalloc(8);
            int count = 0;          // Initialized to zero
            strcpy (sig, "ARCHIVE\032");
            fwrite(sig, 1, 8, arc);
            fwrite(&count, 1, 4, arc);
        }
    }

    for (i = 0; i < count && files[i]; ++i)
    {
        if (files[i][0] == '-' || files[i][0] == '/')
        {
            CheckOption(files[i]);
            continue;
        }
        printf ("\nArchiving %s...\n", files[i]);
        fp = fopen(files[i], "rb");
        if (!fp)
        {
            printf ("Cannot open %s\n", files[i]);
            exit (2);
        }

        // Read the entire file
        file.size = file_size(fp);
        file.data = (char*)xmalloc(file.size);
        fread(file.data, 1, file.size, fp);
        fclose(fp);

        // Set the filename
        file.filename = (char*)xmalloc(strlen(files[i]));
        strcpy (file.filename, files[i]);

        file.Write();             // Archive the file
    }
    // We're not done yet.  We need to write the file count.
    fseek(arc, 9, SEEK_SET);
    fwrite(&count, 1, 4, arc);
}

// Extracts all the files
void extract_files()
{
    FILE* fp;
    unsigned long count;
    Member file;
    register int i;

    arc = fopen(archive, "rb");
    if (!arc)
    {
        printf ("Cannot open %s\n", archive);
        exit (2);
    }

    // Read the header
    {
        char* sig = (char*)xmalloc(9);
        fread (sig, 1, 8, arc);
        sig[8] = 0;
        if (strcmp(sig, "ARCHIVE\032"))
        {
            printf ("Invalid archive\n");
            exit (3);
        }
        fread (&count, 1, 4, arc);
    }

    // Read the files
    for (i = 0; i < count && !feof(arc); ++i)
    {
        file.Read();
        if (file.flags & FLAG_DELETED)
        {
            if (!flag_recover_deleted)
            {
                // Not to be extracted
                printf ("\nIgnoring %s\n", file.filename);
                continue;
            }
        }
        printf ("\nExtracting %s...", file.filename);
        fp = fopen(file.filename, "wb");
        if (!fp)
        {
            printf ("Cannot open %s\n", file.filename);
            exit (1);
        }
        fwrite (file.data, 1, file.size, fp);
        fclose(fp);
    }
}

// List all the files
void list_files()
{
    Member file;
    char* filename;
    unsigned long count;
    char deleted;
    char* comment;

    // Open and initialize archive
    {
        char* sig;

        arc = fopen(archive, "rb");
        if (!arc)
        {
            printf ("Cannot open %s\n", arc);
            exit (1);
        }
        sig = (char*)xmalloc(9);
        sig[8] = 0;         // Null-terminated string
        fread (sig, 1, 8, arc);
        if (strcmp(sig, "ARCHIVE\032"))
        {
            printf ("Invalid archive\n");
            exit (3);
        }
        xfree(sig);
        fread (&count, 1, 4, arc);
    }

    // Print the header
    printf ("    Filename    Size    Packed    Ratio    CRC32    Deleted    Comment");

    while(!feof(arc))
    {
        file.Read();

        // If the file is not compressed, 'origsize' will not be set, but
        // we need to know it to calculate the ratio
        if (!(file.flags & FLAG_COMPRESSED))
            file.origsize = file.size;
        if (file.flags & FLAG_COMMENT)
        {
            comment = (char*)xmalloc(file.commentlen + 1);
            strcpy (comment, file.comment);
            comment[file.commentlen + 1] = 0;   // Null-terminated
        }
        if (file.flags & FLAG_DELETED)
            deleted = '*';
        else
            deleted = ' ';
        printf ("    %s    %U    %U    %d    %x    %s    %c\n",
            file.filename,
            file.size,
            file.origsize,
            (double)file.size / (double)file.origsize,
            file.crc32,
            deleted,
            comment);
        xfree(comment);
    }
}

const char* help = "Archives files to archives\n"
                   "\tARCHIVE command archive [files]\n"
                   "Commands are: \n"
                   "a       Add files (no files specified -> create archive)\n"
                   "x       Extract files\n"
                   "l       List files\n"
                   "Options can be specified within the file list: \n"
                   "\n";

int main(int argc, char* argv[])
{
    register int i;

    if (argc == 1)
    {                 
        printf(help);
        exit(0);
    }

    char cmd;

    cmd = tolower(argv[1][0]);
    archive = (char*)xmalloc(strlen(argv[2]));
    strcpy (archive, argv[2]);

    // Parse the flags
    for (i = 3; i < argc; ++i)
    {
         CheckOption(argv[i]);
    }

    switch(cmd)
    {
    case 'a': add_files(argc - 2, &argv[3]); break;
    case 'x': extract_files(); break;
    case 'l': list_files(); break;
    default: printf ("Bad command '%c'\n", cmd); exit (3); break;
    }

    return 0;
}



    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚州韩日在线看免费版国语版| 色综合久久久久综合体| 亚洲欧美另类综合偷拍| 欧美一级一区二区| 色999日韩国产欧美一区二区| 日韩中文字幕91| 亚洲精品中文字幕在线观看| 久久久久久免费| 欧美精品视频www在线观看| 成人精品gif动图一区| 麻豆一区二区三区| 日韩精品一卡二卡三卡四卡无卡| 自拍偷在线精品自拍偷无码专区| 精品国产乱子伦一区| 9191久久久久久久久久久| 一本大道久久精品懂色aⅴ| 国产精品综合一区二区三区| 日韩二区三区在线观看| 亚洲色图丝袜美腿| 国产婷婷精品av在线| 亚洲精品一区二区三区福利| 5858s免费视频成人| 欧美亚洲精品一区| 色综合久久中文字幕| 91网站最新地址| 成人免费观看av| 成人午夜在线播放| 成人h版在线观看| 91麻豆精品国产| 欧美午夜免费电影| 欧美日韩国产精品自在自线| 欧美午夜一区二区| 欧美狂野另类xxxxoooo| 欧美精品精品一区| 欧美三日本三级三级在线播放| 日本高清无吗v一区| 欧洲中文字幕精品| 欧美日本在线播放| 欧美日本一道本| 正在播放一区二区| 欧美电视剧免费全集观看| 精品久久久久av影院| 久久综合精品国产一区二区三区| 欧美精品一区男女天堂| 久久美女高清视频| 国产亚洲欧美色| 国产精品免费视频一区| 亚洲人成影院在线观看| 成人欧美一区二区三区1314| 亚洲欧美视频一区| 亚洲一区二区三区视频在线| 日韩精品一卡二卡三卡四卡无卡| 美女视频网站久久| 岛国av在线一区| 91亚洲精品久久久蜜桃网站| 欧美日韩在线播放三区四区| 欧美一区二区三区四区久久 | 欧美一区2区视频在线观看| 欧美日韩在线综合| 日韩美女主播在线视频一区二区三区| 日韩精品一区二区三区视频播放 | 日韩精品电影在线观看| 美腿丝袜亚洲综合| 丁香啪啪综合成人亚洲小说| 91成人看片片| 日韩精品一区二区三区在线| 久久精品水蜜桃av综合天堂| 最新中文字幕一区二区三区 | 久久综合色婷婷| 中日韩免费视频中文字幕| 亚洲国产人成综合网站| 美女久久久精品| 99久久国产综合色|国产精品| 欧洲精品视频在线观看| 日韩精品中文字幕在线不卡尤物| 中文字幕的久久| 日韩专区在线视频| hitomi一区二区三区精品| 欧美日韩一区二区电影| 国产亚洲精品7777| 天堂av在线一区| 成人app网站| 日韩欧美一级二级三级| 国产精品久久久久久一区二区三区| 午夜婷婷国产麻豆精品| 成熟亚洲日本毛茸茸凸凹| 欧美区在线观看| 精品一区二区三区不卡| 日本精品一区二区三区高清 | ...中文天堂在线一区| 日本亚洲欧美天堂免费| 91年精品国产| 久久精品一区二区三区av| 天堂成人国产精品一区| av电影在线观看一区| 日韩精品一区二区三区在线观看| 亚洲精品一卡二卡| 国产成人亚洲综合a∨婷婷图片 | 精品国产亚洲一区二区三区在线观看| 中文字幕亚洲不卡| 国产精品资源站在线| 欧美日韩国产免费一区二区| 国产精品美日韩| 极品少妇一区二区三区精品视频| 欧美在线一区二区| 日韩美女久久久| 国产福利一区二区三区视频在线| 91精品国产一区二区三区| 亚洲精品久久7777| 成人99免费视频| 国产亚洲精品资源在线26u| 日本成人在线网站| 欧美三级乱人伦电影| 亚洲免费视频成人| 成人视屏免费看| 久久久91精品国产一区二区精品| 麻豆免费精品视频| 日韩一级大片在线| 日韩精品亚洲一区| 91麻豆精品91久久久久同性| 亚洲动漫第一页| 欧美亚洲国产一卡| 亚洲在线中文字幕| 欧美色网站导航| 亚洲一区在线视频观看| 91免费在线看| 一区二区三区**美女毛片| 91影视在线播放| 国产麻豆91精品| 久久久蜜桃精品| 国产成人一区二区精品非洲| 久久久99精品免费观看不卡| 国产一区美女在线| 国产午夜亚洲精品理论片色戒| 国产美女娇喘av呻吟久久| 26uuu国产电影一区二区| 国产一区二区三区在线观看免费| 精品国产99国产精品| 极品美女销魂一区二区三区| 日韩免费高清av| 精品夜夜嗨av一区二区三区| 久久久久久电影| eeuss鲁一区二区三区| 亚洲免费观看视频| 欧美三级电影在线观看| 日韩精品久久理论片| 欧美va亚洲va国产综合| 国产一区二区三区高清播放| 国产蜜臀97一区二区三区| av在线不卡免费看| 一区二区三区电影在线播| 欧美日韩国产高清一区二区| 日韩制服丝袜av| 久久九九久久九九| 色综合视频在线观看| 亚洲小少妇裸体bbw| 日韩视频一区二区三区| 国产精品一二二区| 国产精品久久久久久久久搜平片| 欧美伊人精品成人久久综合97| 日韩精品午夜视频| 国产亚洲欧美色| 欧美在线一二三| 精品一区二区三区免费视频| 国产精品蜜臀在线观看| 精品视频999| 国产精品456露脸| 亚洲精品乱码久久久久久日本蜜臀| 欧美在线free| 精品一区二区三区不卡| 日韩毛片一二三区| 欧美一级国产精品| 成人美女在线观看| 一个色综合av| 精品成人一区二区| 日本高清视频一区二区| 久久电影网电视剧免费观看| 国产精品国产三级国产普通话99 | 国产一区二区三区免费播放| 中文字幕在线观看不卡视频| 欧美日韩在线亚洲一区蜜芽| 国产大陆a不卡| 亚洲国产一区二区三区 | 日韩高清不卡一区二区三区| 国产欧美一区二区在线| 欧美日韩日日夜夜| 成人精品小蝌蚪| 奇米亚洲午夜久久精品| 成人免费一区二区三区视频| 欧美大片在线观看一区| 91福利国产成人精品照片| 国产成人在线视频网站| 日韩av中文字幕一区二区三区| 国产精品久久久久久妇女6080 | 一区二区三区在线观看欧美| 精品福利在线导航| 欧美优质美女网站| 成人美女视频在线观看| 国产在线播放一区三区四| 午夜精品福利一区二区三区蜜桃|