📄 zipinfo.c
字号:
} 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 + -