113 lines · 2.8 KB · Objective-C
RawDownload
Zip: module{	PATH:	con "/dis/lib/zip.dis"; 	dflag:	int;	init:	fn(): string; 	# compression methods.  only plain & deflate supported.	Mplain,	Mshrunk,	Mreduced1, Mreduced2, Mreduced3, Mreduced4,	Mimplode, Mtokenize,	Mdeflate, Mdeflate64,	Mpkwareimplode,	Mreserved0,	Mbzip2,	Mreserved1,	Mlzma:		con iota+0;	Mibmterse,	Mlz77z:		con iota+18;	Mwavpack,	Mppmdi1:	con iota+97; 	# general purpose flags	Fencrypted:		con 1<<0;	Flocaldatadescr:	con 1<<3;  # crc & sizes in fhdr are 0, use "data descriptor" following fhdr	Fcompressedpatched:	con 1<<5;	Fstrongcrypto:		con 1<<6;	Futf8:			con 1<<11;	Fcdirencrypted:		con 1<<13; 	# internal file attributes	IFArecord:	con 1<<1; 	Version: con 20;	# supported for reading 	Extra: adt {		l:	list of ref (int, array of byte); 		parse:	fn(d: array of byte): (ref Extra, string);		pack:	fn(e: self ref Extra): array of byte;		text:	fn(e: self ref Extra): string;	}; 	Fhdr: adt {		versneeded:	int;		flags:		int;		comprmethod:	int;		filemtime:	int;		filemdate:	int;		mtime:		int;  # not in file, unix epoch mtime based on filemtime & filemdate		crc32:		big;		comprsize:	big;		uncomprsize:	big;		filename:	string;		extra:		ref Extra;		dataoff:	big;  # not in file 		mk:	fn(f: ref CDFhdr): ref Fhdr;		parse:	fn(buf: array of byte, off: big): (ref Fhdr, string);		read:	fn(fd: ref Sys->FD, off: big): (ref Fhdr, string);		pack:	fn(f: self ref Fhdr): array of byte;		text:	fn(f: self ref Fhdr): string;	}; 	CDFhdr: adt {		versmadeby:	int;		versneeded:	int;		flags:		int;		comprmethod:	int;		filemtime:	int;		filemdate:	int;		mtime:		int;  # not in file, unix epoch mtime based on filemtime & filemdate		crc32:		big;		comprsize:	big;		uncomprsize:	big;		filename:	string;		extra:		ref Extra;		comment:	string;		disknrstart:	int;		intattr:	int;		extattr:	big;		reloffset:	big; 		mk:	fn(f: ref Fhdr, off: big): ref CDFhdr;		parse:	fn(buf: array of byte): (ref CDFhdr, string);		read:	fn(b: ref Bufio->Iobuf): (ref CDFhdr, string);		pack:	fn(f: self ref CDFhdr): array of byte;		text:	fn(f: self ref CDFhdr): string;	}; 	Endofcdir: adt {		disknr:		int;		diskcdir:	int;		diskcdirentries:	int;		cdirentries:	int;		cdirsize:	big;		cdiroffset:	big;		comment:	array of byte; 		parse:	fn(buf: array of byte): (ref Endofcdir, string);		pack:	fn(e: self ref Endofcdir): array of byte;		text:	fn(e: self ref Endofcdir): string;	}; 	comprmethod:	fn(m: int): string;	open:		fn(fd: ref Sys->FD): (ref Endofcdir, array of ref CDFhdr, string);	openfile:	fn(fd: ref Sys->FD, f: ref CDFhdr): (ref Sys->FD, ref Fhdr, string);	readfhdr:	fn(fd: ref Sys->FD, f: ref CDFhdr): (ref Fhdr, string);	pread:		fn(fd: ref Sys->FD, f: ref Fhdr, buf: array of byte, n: int, off: big): int;	sanitizepath:	fn(s: string): string;	crc32:		fn(crc: int, buf: array of byte): int;};