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

📄 zipinfo.c

📁 压缩解压,是unzip540的升级,这个外国网站摘来的源码,是evb编写.
💻 C
📖 第 1 页 / 共 5 页
字号:
    } else if (hostnum == FS_VFAT_ && hostver == 20) {        /* process old non-official THEOS port zip archive */        ZCONST char Far *fpFtyp;        switch (xattr & _THS_IFMT) {            case _THS_IFLIB:  fpFtyp = TheosFTypLib;  break;            case _THS_IFDIR:  fpFtyp = TheosFTypDir;  break;            case _THS_IFREG:  fpFtyp = TheosFTypReg;  break;            case _THS_IODRC:  fpFtyp = TheosFTypRel;  break;            case _THS_IOKEY:  fpFtyp = TheosFTypKey;  break;            case _THS_IOIND:  fpFtyp = TheosFTypInd;  break;            case _THS_IOPRG:  fpFtyp = TheosFTypR16;  break;            case _THS_IO286:  fpFtyp = TheosFTypP16;  break;            case _THS_IO386:  fpFtyp = TheosFTypP32;  break;            default:         fpFtyp = TheosFTypUkn;  break;        }        strcpy(attribs, LoadFarStringSmall(fpFtyp));        attribs[12] = (xattr & _THS_HIDDN) ? 'H' : '.';        attribs[13] = (xattr & _THS_IXOTH) ? '.' : 'X';        attribs[14] = (xattr & _THS_IWOTH) ? '.' : 'W';        attribs[15] = (xattr & _THS_IROTH) ? '.' : 'R';        attribs[16] = (xattr & _THS_IEUSR) ? '.' : 'E';        attribs[17] = (xattr & _THS_IXUSR) ? '.' : 'X';        attribs[18] = (xattr & _THS_IWUSR) ? '.' : 'W';        attribs[19] = (xattr & _THS_IRUSR) ? '.' : 'R';        attribs[20] = 0;        Info(slide, 0, ((char *)slide, LoadFarString(TheosFileAttributes),          xattr, attribs));#endif /* OLD_THEOS_EXTRA */    } else if ((hostnum != FS_FAT_) && (hostnum != FS_HPFS_) &&               (hostnum != FS_NTFS_) && (hostnum != FS_VFAT_) &&               (hostnum != ACORN_) &&               (hostnum != VM_CMS_) && (hostnum != MVS_))    {                                 /* assume Unix-like */        switch ((unsigned)(xattr & UNX_IFMT)) {            case (unsigned)UNX_IFDIR:   attribs[0] = 'd';  break;            case (unsigned)UNX_IFREG:   attribs[0] = '-';  break;            case (unsigned)UNX_IFLNK:   attribs[0] = 'l';  break;            case (unsigned)UNX_IFBLK:   attribs[0] = 'b';  break;            case (unsigned)UNX_IFCHR:   attribs[0] = 'c';  break;            case (unsigned)UNX_IFIFO:   attribs[0] = 'p';  break;            case (unsigned)UNX_IFSOCK:  attribs[0] = 's';  break;            default:          attribs[0] = '?';  break;        }        attribs[1] = (xattr & UNX_IRUSR)? 'r' : '-';        attribs[4] = (xattr & UNX_IRGRP)? 'r' : '-';        attribs[7] = (xattr & UNX_IROTH)? 'r' : '-';        attribs[2] = (xattr & UNX_IWUSR)? 'w' : '-';        attribs[5] = (xattr & UNX_IWGRP)? 'w' : '-';        attribs[8] = (xattr & UNX_IWOTH)? 'w' : '-';        if (xattr & UNX_IXUSR)            attribs[3] = (xattr & UNX_ISUID)? 's' : 'x';        else            attribs[3] = (xattr & UNX_ISUID)? 'S' : '-';   /* S = undefined */        if (xattr & UNX_IXGRP)            attribs[6] = (xattr & UNX_ISGID)? 's' : 'x';   /* == UNX_ENFMT */        else            attribs[6] = (xattr & UNX_ISGID)? 'l' : '-';        if (xattr & UNX_IXOTH)            attribs[9] = (xattr & UNX_ISVTX)? 't' : 'x';   /* "sticky bit" */        else            attribs[9] = (xattr & UNX_ISVTX)? 'T' : '-';   /* T = undefined */        attribs[10] = 0;        Info(slide, 0, ((char *)slide, LoadFarString(UnixFileAttributes), xattr,          attribs));    } else {        Info(slide, 0, ((char *)slide, LoadFarString(NonMSDOSFileAttributes),            G.crec.external_file_attributes >> 8));    } /* endif (hostnum: external attributes format) */    if ((xattr=(unsigned)(G.crec.external_file_attributes & 0xFF)) == 0)        Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributes),          xattr));    else if (xattr == 1)        Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesRO),          xattr));    else        Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesAlpha),          xattr, (xattr&1)? "rdo " : nullStr,          (xattr&2)? "hid " : nullStr,          (xattr&4)? "sys " : nullStr,          (xattr&8)? "lab " : nullStr,          (xattr&16)? "dir " : nullStr,          (xattr&32)? "arc " : nullStr,          (xattr&64)? "lnk " : nullStr,          (xattr&128)? "exe" : nullStr));/*---------------------------------------------------------------------------    Analyze the extra field, if any, and print the file comment, if any (the    filename has already been printed, above).  That finishes up this file    entry...  ---------------------------------------------------------------------------*/    if (G.crec.extra_field_length > 0) {        uch *ef_ptr = G.extra_field;        ush ef_len = G.crec.extra_field_length;        ush eb_id, eb_datalen;        ZCONST char Far *ef_fieldname;        if (error_in_archive > PK_WARN)   /* fatal:  can't continue */            /* delayed "fatal error" return from extra field reading */            return error;        if (G.extra_field == (uch *)NULL)            return PK_ERR;   /* not consistent with crec length */        Info(slide, 0, ((char *)slide, LoadFarString(ExtraFields)));        while (ef_len >= EB_HEADSIZE) {            eb_id = makeword(&ef_ptr[EB_ID]);            eb_datalen = makeword(&ef_ptr[EB_LEN]);            ef_ptr += EB_HEADSIZE;            ef_len -= EB_HEADSIZE;            if (eb_datalen > (ush)ef_len) {                Info(slide, 0x421, ((char *)slide,                  LoadFarString(ExtraFieldTrunc), eb_id, eb_datalen, ef_len));                eb_datalen = ef_len;            }            switch (eb_id) {                case EF_PKSZ64:                    ef_fieldname = efPKSZ64;                    break;                case EF_AV:                    ef_fieldname = efAV;                    break;                case EF_OS2:                    ef_fieldname = efOS2;                    break;                case EF_ACL:                    ef_fieldname = efACL;                    break;                case EF_NTSD:                    ef_fieldname = efNTSD;                    break;                case EF_PKVMS:                    ef_fieldname = efPKVMS;                    break;                case EF_IZVMS:                    ef_fieldname = efIZVMS;                    break;                case EF_PKW32:                    ef_fieldname = efPKWin32;                    break;                case EF_PKUNIX:                    ef_fieldname = efPKUnix;                    break;                case EF_IZUNIX:                    ef_fieldname = efIZUnix;                    if (hostnum == UNIX_ && *pEndprev > 0L)                        *pEndprev += 4L;  /* also have UID/GID in local copy */                    break;                case EF_IZUNIX2:                    ef_fieldname = efIZUnix2;                    if (*pEndprev > 0L)                        *pEndprev += 4L;  /* 4 byte UID/GID in local copy */                    break;                case EF_TIME:                    ef_fieldname = efTime;                    break;                case EF_MAC3:                    ef_fieldname = efMac3;                    break;                case EF_JLMAC:                    ef_fieldname = efJLMac;                    break;                case EF_ZIPIT:                    ef_fieldname = efZipIt;                    break;                case EF_ZIPIT2:                    ef_fieldname = efZipIt2;                    break;                case EF_VMCMS:                    ef_fieldname = efVMCMS;                    break;                case EF_MVS:                    ef_fieldname = efMVS;                    break;                case EF_ATHEOS:                    ef_fieldname = efAtheOS;                    break;                case EF_BEOS:                    ef_fieldname = efBeOS;                    break;                case EF_QDOS:                    ef_fieldname = efQDOS;                    break;                case EF_AOSVS:                    ef_fieldname = efAOSVS;                    break;                case EF_SPARK:   /* from RISC OS */                    ef_fieldname = efSpark;                    break;                case EF_MD5:                    ef_fieldname = efMD5;                    break;                case EF_ASIUNIX:                    ef_fieldname = efASiUnix;                    break;                case EF_TANDEM:                    ef_fieldname = efTandem;                    break;                case EF_SMARTZIP:                    ef_fieldname = efSmartZip;                    break;                case EF_THEOS:#ifdef OLD_THEOS_EXTRA                case EF_THEOSO:#endif                    ef_fieldname = efTheos;                    break;                default:                    ef_fieldname = efUnknown;                    break;            }            Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldType),                 eb_id, LoadFarStringSmall(ef_fieldname), eb_datalen));            /* additional, field-specific information: */            switch (eb_id) {                case EF_OS2:                case EF_ACL:                    if (eb_datalen >= EB_OS2_HLEN) {                        if (eb_id == EF_OS2)                            ef_fieldname = OS2EAs;                        else                            ef_fieldname = ACLdata;                        Info(slide, 0, ((char *)slide,                          LoadFarString(ef_fieldname), makelong(ef_ptr)));                        *pEndprev = 0L;   /* no clue about csize of local */                    }                    break;                case EF_NTSD:                    if (eb_datalen >= EB_NTSD_C_LEN) {                        Info(slide, 0, ((char *)slide, LoadFarString(NTSDData),                          makelong(ef_ptr)));                        *pEndprev = 0L;   /* no clue about csize of local */                    }                    break;                case EF_IZVMS:                    if (eb_datalen >= 8) {                        char *p, q[8];                        unsigned compr = makeword(ef_ptr+EB_IZVMS_FLGS)                                        & EB_IZVMS_BCMASK;                        *q = '\0';                        if (compr > 3)                            compr = 3;                        switch (makelong(ef_ptr)) {                            case 0x42414656: /* "VFAB" */                                p = "FAB"; break;                            case 0x4C4C4156: /* "VALL" */                                p = "XABALL"; break;                            case 0x43484656: /* "VFHC" */                                p = "XABFHC"; break;                            case 0x54414456: /* "VDAT" */                                p = "XABDAT"; break;                            case 0x54445256: /* "VRDT" */                                p = "XABRDT"; break;                            case 0x4F525056: /* "VPRO" */                                p = "XABPRO"; break;                            case 0x59454B56: /* "VKEY" */                                p = "XABKEY"; break;                            case 0x56534D56: /* "VMSV" */                                p = "version";                                if (eb_datalen >= 16) {                                    /* put termitation first, for A_TO_N() */                                    q[7] = '\0';                                    q[0] = ' ';                                    q[1] = '(';                                    strncpy(q+2,                                            (char *)ef_ptr+EB_IZVMS_HLEN, 4);                                    A_TO_N(q+2);                                    q[6] = ')';                                }                                break;                            default:                                p = "unknown";                        }                        Info(slide, 0, ((char *)slide,                          LoadFarString(izVMSdata),                          LoadFarStringSmall(izVMScomp[compr]),                          makeword(ef_ptr+EB_IZVMS_UCSIZ), p, q));                    }                    break;                case EF_TIME:                    if (eb_datalen >= 1) {                        char types[80];                        int num = 0, len;                        *types = '\0';                        if (*ef_ptr & 1) {                            strcpy(types, LoadFarString(UTmodification));                            ++num;                        }                        if (*ef_ptr & 2) {                            len = strlen(types);                            if (num)                                types[len++] = '/';                      

⌨️ 快捷键说明

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