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