1*a8453668SDavid du Colombier typedef struct ZipHead ZipHead; 2*a8453668SDavid du Colombier 3*a8453668SDavid du Colombier enum 4*a8453668SDavid du Colombier { 5*a8453668SDavid du Colombier /* 6*a8453668SDavid du Colombier * magic numbers 7*a8453668SDavid du Colombier */ 8*a8453668SDavid du Colombier ZHeader = 0x04034b50, 9*a8453668SDavid du Colombier ZCHeader = 0x02014b50, 10*a8453668SDavid du Colombier ZECHeader = 0x06054b50, 11*a8453668SDavid du Colombier 12*a8453668SDavid du Colombier /* 13*a8453668SDavid du Colombier * "general purpose flag" bits 14*a8453668SDavid du Colombier */ 15*a8453668SDavid du Colombier ZEncrypted = 1 << 0, 16*a8453668SDavid du Colombier ZTrailInfo = 1 << 3, /* uncsize, csize, and crc are in trailer */ 17*a8453668SDavid du Colombier ZCompPatch = 1 << 5, /* compression patched data */ 18*a8453668SDavid du Colombier 19*a8453668SDavid du Colombier ZCrcPoly = 0xedb88320, 20*a8453668SDavid du Colombier 21*a8453668SDavid du Colombier /* 22*a8453668SDavid du Colombier * compression method 23*a8453668SDavid du Colombier */ 24*a8453668SDavid du Colombier ZDeflate = 8, 25*a8453668SDavid du Colombier 26*a8453668SDavid du Colombier /* 27*a8453668SDavid du Colombier * internal file attributes 28*a8453668SDavid du Colombier */ 29*a8453668SDavid du Colombier ZIsText = 1 << 0, 30*a8453668SDavid du Colombier 31*a8453668SDavid du Colombier /* 32*a8453668SDavid du Colombier * file attribute interpretation, from high byte of version 33*a8453668SDavid du Colombier */ 34*a8453668SDavid du Colombier ZDos = 0, 35*a8453668SDavid du Colombier ZAmiga = 1, 36*a8453668SDavid du Colombier ZVMS = 2, 37*a8453668SDavid du Colombier ZUnix = 3, 38*a8453668SDavid du Colombier ZVMCMS = 4, 39*a8453668SDavid du Colombier ZAtariST = 5, 40*a8453668SDavid du Colombier ZOS2HPFS = 6, 41*a8453668SDavid du Colombier ZMac = 7, 42*a8453668SDavid du Colombier ZZsys = 8, 43*a8453668SDavid du Colombier ZCPM = 9, 44*a8453668SDavid du Colombier ZNtfs = 10, 45*a8453668SDavid du Colombier 46*a8453668SDavid du Colombier /* 47*a8453668SDavid du Colombier * external attribute flags for ZDos 48*a8453668SDavid du Colombier */ 49*a8453668SDavid du Colombier ZDROnly = 0x01, 50*a8453668SDavid du Colombier ZDHidden = 0x02, 51*a8453668SDavid du Colombier ZDSystem = 0x04, 52*a8453668SDavid du Colombier ZDVLable = 0x08, 53*a8453668SDavid du Colombier ZDDir = 0x10, 54*a8453668SDavid du Colombier ZDArch = 0x20, 55*a8453668SDavid du Colombier 56*a8453668SDavid du Colombier ZHeadSize = 4 + 2 + 2 + 2 + 2 + 2 + 4 + 4 + 4 + 2 + 2, 57*a8453668SDavid du Colombier ZHeadCrc = 4 + 2 + 2 + 2 + 2 + 2, 58*a8453668SDavid du Colombier ZTrailSize = 4 + 4 + 4, 59*a8453668SDavid du Colombier ZCHeadSize = 4 + 2 + 2 + 2 + 2 + 2 + 2 + 4 + 4 + 4 + 2 + 2 + 2 + 2 + 2 + 4 + 4, 60*a8453668SDavid du Colombier ZECHeadSize = 4 + 2 + 2 + 2 + 2 + 4 + 4 + 2, 61*a8453668SDavid du Colombier }; 62*a8453668SDavid du Colombier 63*a8453668SDavid du Colombier /* 64*a8453668SDavid du Colombier * interesting info from a zip header 65*a8453668SDavid du Colombier */ 66*a8453668SDavid du Colombier struct ZipHead 67*a8453668SDavid du Colombier { 68*a8453668SDavid du Colombier int madeos; /* version made by */ 69*a8453668SDavid du Colombier int madevers; 70*a8453668SDavid du Colombier int extos; /* version needed to extract */ 71*a8453668SDavid du Colombier int extvers; 72*a8453668SDavid du Colombier int flags; /* general purpose bit flag */ 73*a8453668SDavid du Colombier int meth; 74*a8453668SDavid du Colombier int modtime; 75*a8453668SDavid du Colombier int moddate; 76*a8453668SDavid du Colombier ulong crc; 77*a8453668SDavid du Colombier ulong csize; 78*a8453668SDavid du Colombier ulong uncsize; 79*a8453668SDavid du Colombier int iattr; 80*a8453668SDavid du Colombier ulong eattr; 81*a8453668SDavid du Colombier ulong off; 82*a8453668SDavid du Colombier char *file; 83*a8453668SDavid du Colombier }; 84