📄 zipinfo.c
字号:
Info(slide, 0, ((char *)slide, LoadFarString(MinOSCompReq), varmsg_str)); Info(slide, 0, ((char *)slide, LoadFarString(MinSWVerReq), extver/10, extver%10)); if (methnum >= NUM_METHODS) { sprintf(unkn, LoadFarString(UnknownNo), G.crec.compression_method); varmsg_str = unkn; } else { varmsg_str = LoadFarStringSmall(method[methnum]); } Info(slide, 0, ((char *)slide, LoadFarString(CompressMethod), varmsg_str)); if (methnum == IMPLODED) { Info(slide, 0, ((char *)slide, LoadFarString(SlideWindowSizeImplode), (G.crec.general_purpose_bit_flag & 2)? '8' : '4')); Info(slide, 0, ((char *)slide, LoadFarString(ShannonFanoTrees), (G.crec.general_purpose_bit_flag & 4)? '3' : '2')); } else if (methnum == DEFLATED) { ush dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3); Info(slide, 0, ((char *)slide, LoadFarString(CompressSubtype), LoadFarStringSmall(dtypelng[dnum]))); } Info(slide, 0, ((char *)slide, LoadFarString(FileSecurity), (G.crec.general_purpose_bit_flag & 1) ? nullStr : "not ")); Info(slide, 0, ((char *)slide, LoadFarString(ExtendedLocalHdr), (G.crec.general_purpose_bit_flag & 8) ? "yes" : "no")); /* print upper 3 bits for amusement? */ /* For printing of date & time, a "char d_t_buf[21]" is required. * To save stack space, we reuse the "char attribs[22]" buffer which * is not used yet. */# define d_t_buf attribs zi_time(__G__ &G.crec.last_mod_dos_datetime, NULL, d_t_buf); Info(slide, 0, ((char *)slide, LoadFarString(FileModDate), d_t_buf));#ifdef USE_EF_UT_TIME if (G.extra_field &&#ifdef IZ_CHECK_TZ G.tz_is_valid &&#endif (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, G.crec.last_mod_dos_datetime, &z_utime, NULL) & EB_UT_FL_MTIME)) { TIMET_TO_NATIVE(z_utime.mtime) /* NOP unless MSC 7.0 or Macintosh */ d_t_buf[0] = (char)0; /* signal "show local time" */ zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf); Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate), d_t_buf, LoadFarStringSmall(LocalTime)));#ifndef NO_GMTIME d_t_buf[0] = (char)1; /* signal "show UTC (GMT) time" */ zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf); Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate), d_t_buf, LoadFarStringSmall(GMTime)));#endif /* !NO_GMTIME */ }#endif /* USE_EF_UT_TIME */ Info(slide, 0, ((char *)slide, LoadFarString(CRC32Value), G.crec.crc32)); Info(slide, 0, ((char *)slide, LoadFarString(CompressedFileSize), G.crec.csize)); Info(slide, 0, ((char *)slide, LoadFarString(UncompressedFileSize), G.crec.ucsize)); Info(slide, 0, ((char *)slide, LoadFarString(FilenameLength), G.crec.filename_length)); Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldLength), G.crec.extra_field_length)); Info(slide, 0, ((char *)slide, LoadFarString(FileCommentLength), G.crec.file_comment_length)); Info(slide, 0, ((char *)slide, LoadFarString(FileDiskNum), G.crec.disk_number_start + 1)); Info(slide, 0, ((char *)slide, LoadFarString(ApparentFileType), (G.crec.internal_file_attributes & 1)? "text" : (G.crec.internal_file_attributes & 2)? "ebcdic" : "binary")); /* changed to accept EBCDIC */#ifdef ATARI printf(" external file attributes (hex): %.8lx\n", G.crec.external_file_attributes);#endif xattr = (ush)((G.crec.external_file_attributes >> 16) & 0xFFFF); if (hostnum == VMS_) { char *p=attribs, *q=attribs+1; int i, j, k; for (k = 0; k < 12; ++k) workspace[k] = 0; if (xattr & VMS_IRUSR) workspace[0] = 'R'; if (xattr & VMS_IWUSR) { workspace[1] = 'W'; workspace[3] = 'D'; } if (xattr & VMS_IXUSR) workspace[2] = 'E'; if (xattr & VMS_IRGRP) workspace[4] = 'R'; if (xattr & VMS_IWGRP) { workspace[5] = 'W'; workspace[7] = 'D'; } if (xattr & VMS_IXGRP) workspace[6] = 'E'; if (xattr & VMS_IROTH) workspace[8] = 'R'; if (xattr & VMS_IWOTH) { workspace[9] = 'W'; workspace[11] = 'D'; } if (xattr & VMS_IXOTH) workspace[10] = 'E'; *p++ = '('; for (k = j = 0; j < 3; ++j) { /* loop over groups of permissions */ for (i = 0; i < 4; ++i, ++k) /* loop over perms within a group */ if (workspace[k]) *p++ = workspace[k]; *p++ = ','; /* group separator */ if (j == 0) while ((*p++ = *q++) != ',') ; /* system, owner perms are same */ } *p-- = 0; *p = ')'; /* overwrite last comma */ Info(slide, 0, ((char *)slide, LoadFarString(VMSFileAttributes), xattr, attribs)); } else if (hostnum == AMIGA_) { switch (xattr & AMI_IFMT) { case AMI_IFDIR: attribs[0] = 'd'; break; case AMI_IFREG: attribs[0] = '-'; break; default: attribs[0] = '?'; break; } attribs[1] = (xattr & AMI_IHIDDEN)? 'h' : '-'; attribs[2] = (xattr & AMI_ISCRIPT)? 's' : '-'; attribs[3] = (xattr & AMI_IPURE)? 'p' : '-'; attribs[4] = (xattr & AMI_IARCHIVE)? 'a' : '-'; attribs[5] = (xattr & AMI_IREAD)? 'r' : '-'; attribs[6] = (xattr & AMI_IWRITE)? 'w' : '-'; attribs[7] = (xattr & AMI_IEXECUTE)? 'e' : '-'; attribs[8] = (xattr & AMI_IDELETE)? 'd' : '-'; attribs[9] = 0; /* better dlm the string */ Info(slide, 0, ((char *)slide, LoadFarString(AmigaFileAttributes), xattr, attribs)); } 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=(ush)(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));/*--------------------------------------------------------------------------- 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_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 (G.crec.version_made_by[1] == 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_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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -