Simon Krajewski 12 年 前
コミット
98888361a7
7 ファイル変更5 行追加903 行削除
  1. 0 242
      std/haxe/Md5.hx
  2. 0 154
      std/haxe/SHA1.hx
  3. 0 27
      std/haxe/Stack.hx
  4. 5 7
      std/haxe/ds/GenericStack.hx
  5. 0 54
      std/neko/zip/CRC32.hx
  6. 0 284
      std/neko/zip/Reader.hx
  7. 0 135
      std/neko/zip/Writer.hx

+ 0 - 242
std/haxe/Md5.hx

@@ -1,242 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package haxe;
-
-#if !haxe3
-
-/**
-	Creates a MD5 of a String.
-**/
-class Md5 {
-
-	public static function encode( s : String ) : String {
-		#if neko
-			return untyped new String(base_encode(make_md5(s.__s),"0123456789abcdef".__s));
-		#elseif php
-			return untyped __call__("md5", s);
-		#else
-			return new Md5().doEncode(s);
-		#end
-	}
-
-	#if neko
-	static var base_encode = neko.Lib.load("std","base_encode",2);
-	static var make_md5 = neko.Lib.load("std","make_md5",1);
-	#elseif !php
-
-/*
- * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
- * Digest Algorithm, as defined in RFC 1321.
- * Copyright (C) Paul Johnston 1999 - 2000.
- * Updated by Greg Holt 2000 - 2001.
- * See http://pajhome.org.uk/site/legal.html for details.
- */
-
-	function new() {
-	}
-
-	function bitOR(a, b){
-		var lsb = (a & 0x1) | (b & 0x1);
-		var msb31 = (a >>> 1) | (b >>> 1);
-		return (msb31 << 1) | lsb;
-	}
-
-	function bitXOR(a, b){
-		var lsb = (a & 0x1) ^ (b & 0x1);
-		var msb31 = (a >>> 1) ^ (b >>> 1);
-		return (msb31 << 1) | lsb;
-	}
-
-	function bitAND(a, b){
-		var lsb = (a & 0x1) & (b & 0x1);
-		var msb31 = (a >>> 1) & (b >>> 1);
-		return (msb31 << 1) | lsb;
-	}
-
-	function addme(x, y) {
-		var lsw = (x & 0xFFFF)+(y & 0xFFFF);
-		var msw = (x >> 16)+(y >> 16)+(lsw >> 16);
-		return (msw << 16) | (lsw & 0xFFFF);
-	}
-
-	function rhex( num ){
-		var str = "";
-		var hex_chr = "0123456789abcdef";
-		for( j in 0...4 ){
-			str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) +
-						 hex_chr.charAt((num >> (j * 8)) & 0x0F);
-		}
-		return str;
-	}
-
-	function str2blks( str : String ){
-		var nblk = ((str.length + 8) >> 6) + 1;
-		var blks = new Array();
-
-		//preallocate size
-		var blksSize = nblk * 16;
-		#if (neko || cs || cpp || java)
-		blks[blksSize - 1] = 0;
-		#end
-
-		#if !(cpp || cs) //C++ and C# will already initialize them with zeroes.
-		for( i in 0...blksSize ) blks[i] = 0;
-		#end
-
-		var i = 0;
-		while( i < str.length ) {
-			blks[i >> 2] |= str.charCodeAt(i) << (((str.length * 8 + i) % 4) * 8);
-			i++;
-		}
-		blks[i >> 2] |= 0x80 << (((str.length * 8 + i) % 4) * 8);
-		var l = str.length * 8;
-		var k = nblk * 16 - 2;
-		blks[k] = (l & 0xFF);
-		blks[k] |= ((l >>> 8) & 0xFF) << 8;
-		blks[k] |= ((l >>> 16) & 0xFF) << 16;
-		blks[k] |= ((l >>> 24) & 0xFF) << 24;
-		return blks;
-	}
-
-	function rol(num, cnt){
-		return (num << cnt) | (num >>> (32 - cnt));
-	}
-
-	function cmn(q, a, b, x, s, t){
-		return addme(rol((addme(addme(a, q), addme(x, t))), s), b);
-	}
-
-	function ff(a, b, c, d, x, s, t){
-		return cmn(bitOR(bitAND(b, c), bitAND((~b), d)), a, b, x, s, t);
-	}
-
-	function gg(a, b, c, d, x, s, t){
-		return cmn(bitOR(bitAND(b, d), bitAND(c, (~d))), a, b, x, s, t);
-	}
-
-	function hh(a, b, c, d, x, s, t){
-		return cmn(bitXOR(bitXOR(b, c), d), a, b, x, s, t);
-	}
-
-	function ii(a, b, c, d, x, s, t){
-		return cmn(bitXOR(c, bitOR(b, (~d))), a, b, x, s, t);
-	}
-
-	function doEncode( str:String ) : String {
-
-		var x = str2blks(str);
-		var a =  1732584193;
-		var b = -271733879;
-		var c = -1732584194;
-		var d =  271733878;
-
-		var step;
-
-		var i = 0;
-		while( i < x.length )  {
-			var olda = a;
-			var oldb = b;
-			var oldc = c;
-			var oldd = d;
-
-			step = 0;
-			a = ff(a, b, c, d, x[i+ 0], 7 , -680876936);
-			d = ff(d, a, b, c, x[i+ 1], 12, -389564586);
-			c = ff(c, d, a, b, x[i+ 2], 17,  606105819);
-			b = ff(b, c, d, a, x[i+ 3], 22, -1044525330);
-			a = ff(a, b, c, d, x[i+ 4], 7 , -176418897);
-			d = ff(d, a, b, c, x[i+ 5], 12,  1200080426);
-			c = ff(c, d, a, b, x[i+ 6], 17, -1473231341);
-			b = ff(b, c, d, a, x[i+ 7], 22, -45705983);
-			a = ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
-			d = ff(d, a, b, c, x[i+ 9], 12, -1958414417);
-			c = ff(c, d, a, b, x[i+10], 17, -42063);
-			b = ff(b, c, d, a, x[i+11], 22, -1990404162);
-			a = ff(a, b, c, d, x[i+12], 7 ,  1804603682);
-			d = ff(d, a, b, c, x[i+13], 12, -40341101);
-			c = ff(c, d, a, b, x[i+14], 17, -1502002290);
-			b = ff(b, c, d, a, x[i+15], 22,  1236535329);
-			a = gg(a, b, c, d, x[i+ 1], 5 , -165796510);
-			d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
-			c = gg(c, d, a, b, x[i+11], 14,  643717713);
-			b = gg(b, c, d, a, x[i+ 0], 20, -373897302);
-			a = gg(a, b, c, d, x[i+ 5], 5 , -701558691);
-			d = gg(d, a, b, c, x[i+10], 9 ,  38016083);
-			c = gg(c, d, a, b, x[i+15], 14, -660478335);
-			b = gg(b, c, d, a, x[i+ 4], 20, -405537848);
-			a = gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
-			d = gg(d, a, b, c, x[i+14], 9 , -1019803690);
-			c = gg(c, d, a, b, x[i+ 3], 14, -187363961);
-			b = gg(b, c, d, a, x[i+ 8], 20,  1163531501);
-			a = gg(a, b, c, d, x[i+13], 5 , -1444681467);
-			d = gg(d, a, b, c, x[i+ 2], 9 , -51403784);
-			c = gg(c, d, a, b, x[i+ 7], 14,  1735328473);
-			b = gg(b, c, d, a, x[i+12], 20, -1926607734);
-			a = hh(a, b, c, d, x[i+ 5], 4 , -378558);
-			d = hh(d, a, b, c, x[i+ 8], 11, -2022574463);
-			c = hh(c, d, a, b, x[i+11], 16,  1839030562);
-			b = hh(b, c, d, a, x[i+14], 23, -35309556);
-			a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
-			d = hh(d, a, b, c, x[i+ 4], 11,  1272893353);
-			c = hh(c, d, a, b, x[i+ 7], 16, -155497632);
-			b = hh(b, c, d, a, x[i+10], 23, -1094730640);
-			a = hh(a, b, c, d, x[i+13], 4 ,  681279174);
-			d = hh(d, a, b, c, x[i+ 0], 11, -358537222);
-			c = hh(c, d, a, b, x[i+ 3], 16, -722521979);
-			b = hh(b, c, d, a, x[i+ 6], 23,  76029189);
-			a = hh(a, b, c, d, x[i+ 9], 4 , -640364487);
-			d = hh(d, a, b, c, x[i+12], 11, -421815835);
-			c = hh(c, d, a, b, x[i+15], 16,  530742520);
-			b = hh(b, c, d, a, x[i+ 2], 23, -995338651);
-			a = ii(a, b, c, d, x[i+ 0], 6 , -198630844);
-			d = ii(d, a, b, c, x[i+ 7], 10,  1126891415);
-			c = ii(c, d, a, b, x[i+14], 15, -1416354905);
-			b = ii(b, c, d, a, x[i+ 5], 21, -57434055);
-			a = ii(a, b, c, d, x[i+12], 6 ,  1700485571);
-			d = ii(d, a, b, c, x[i+ 3], 10, -1894986606);
-			c = ii(c, d, a, b, x[i+10], 15, -1051523);
-			b = ii(b, c, d, a, x[i+ 1], 21, -2054922799);
-			a = ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
-			d = ii(d, a, b, c, x[i+15], 10, -30611744);
-			c = ii(c, d, a, b, x[i+ 6], 15, -1560198380);
-			b = ii(b, c, d, a, x[i+13], 21,  1309151649);
-			a = ii(a, b, c, d, x[i+ 4], 6 , -145523070);
-			d = ii(d, a, b, c, x[i+11], 10, -1120210379);
-			c = ii(c, d, a, b, x[i+ 2], 15,  718787259);
-			b = ii(b, c, d, a, x[i+ 9], 21, -343485551);
-
-			a = addme(a, olda);
-			b = addme(b, oldb);
-			c = addme(c, oldc);
-			d = addme(d, oldd);
-
-			i += 16;
-		}
-		return rhex(a) + rhex(b) + rhex(c) + rhex(d);
-	}
-
-	#end
-
-
-}
-
-#end

+ 0 - 154
std/haxe/SHA1.hx

@@ -1,154 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package haxe;
-
-#if !haxe3
-
-import haxe.Int32;
-
-class SHA1 {
-
-	static var hex_chr = "0123456789abcdef";
-
-	inline static function newInt32( left:Int, right:Int ) : Int32 {
-		var result = Int32.ofInt(left);
-		result = Int32.shl(result, 16);
-		return Int32.add(result, Int32.ofInt(right));
-	}
-
-	public static function encode( s:String ) : String {
-		var x = str2blks_SHA1( s );
-		var w = new Array<Int32>();
-
-		var a = newInt32(0x6745, 0x2301);
-		var b = newInt32(0xEFCD, 0xAB89);
-		var c = newInt32(0x98BA, 0xDCFE);
-		var d = newInt32(0x1032, 0x5476);
-		var e = newInt32(0xC3D2, 0xE1F0);
-
-		var i = 0;
-		while( i < x.length ) {
-			var olda = a;
-			var oldb = b;
-			var oldc = c;
-			var oldd = d;
-			var olde = e;
-
-			var j = 0;
-			while( j < 80 ) {
-				if(j < 16)
-					w[j] = x[i + j];
-				else
-					w[j] = rol(Int32.xor(Int32.xor(Int32.xor(w[j-3], w[j-8]), w[j-14]), w[j-16]), 1);
-				var t = add(add(rol(a, 5), ft(Int32.ofInt(j), b, c, d)), add(add(e, w[j]), kt(Int32.ofInt(j))));
-				e = d;
-				d = c;
-				c = rol(b, 30);
-				b = a;
-				a = t;
-
-				j++;
-			}
-			a = add( a, olda );
-			b = add( b, oldb );
-			c = add( c, oldc );
-			d = add( d, oldd );
-			e = add( e, olde );
-			i += 16;
-		}
-		return hex(a) + hex(b) + hex(c) + hex(d) + hex(e);
-	}
-
-	static function hex( num : Int32 ) : String {
-		var str = "";
-		var j = 7;
-		while( j >= 0 ) {
-			str += hex_chr.charAt( Int32.toInt( Int32.and((Int32.shr(num, j*4)), Int32.ofInt(0x0F)) ) );
-			j--;
-		}
-		return str;
-	}
-
-	/**
-		Convert a string to a sequence of 16-word blocks, stored as an array.
-		Append padding bits and the length, as described in the SHA1 standard.
-	 */
-	static function str2blks_SHA1( s :String ) : Array<Int32> {
-		var nblk = ((s.length + 8) >> 6) + 1;
-		var blks = new Array<Int32>();
-
-		for (i in 0...nblk*16)
-			blks[i] = Int32.ofInt(0);
-		for (i in 0...s.length){
-			var p = i >> 2;
-			var c = Int32.ofInt(s.charCodeAt(i));
-			blks[p] = Int32.or(blks[p], Int32.shl(c, (24 - (i % 4) * 8)));
-		}
-		var i = s.length;
-		var p = i >> 2;
-		blks[p] = Int32.or(blks[p], Int32.shl(Int32.ofInt(0x80), (24 - (i % 4) * 8)));
-		blks[nblk * 16 - 1] = Int32.ofInt(s.length * 8);
-		return blks;
-	}
-
-	/**
-		Add integers, wrapping at 2^32.
-	 */
-	static function add( x : Int32, y : Int32 ) : Int32 {
-		var lsw = Int32.add(Int32.and(x, Int32.ofInt(0xFFFF)), Int32.and(y, Int32.ofInt(0xFFFF)));
-		var msw = Int32.add(Int32.add(Int32.shr(x, 16), Int32.shr(y, 16)), Int32.shr(lsw, 16));
-		return Int32.or(Int32.shl(msw, 16), Int32.and(lsw, Int32.ofInt(0xFFFF)));
-	}
-
-	/**
-		Bitwise rotate a 32-bit number to the left
-	 */
-	static function rol( num : Int32, cnt : Int ) : Int32 {
-		return Int32.or(Int32.shl(num, cnt), Int32.ushr(num, (32 - cnt)));
-	}
-
-	/**
-		Perform the appropriate triplet combination function for the current iteration
-	*/
-	static function ft( t : Int32, b : Int32, c : Int32, d : Int32 ) : Int32 {
-		if (Int32.compare(t, Int32.ofInt(20)) <0) return Int32.or(Int32.and(b, c), Int32.and((Int32.complement(b)), d));
-		if (Int32.compare(t, Int32.ofInt(40)) <0) return Int32.xor(Int32.xor(b, c), d);
-		if (Int32.compare(t, Int32.ofInt(60)) <0) return Int32.or(Int32.or(Int32.and(b, c), Int32.and(b, d)), Int32.and(c, d));
-		return Int32.xor(Int32.xor(b, c), d);
-	}
-
-	/**
-		Determine the appropriate additive constant for the current iteration
-	*/
-	static function kt( t : Int32 ) : Int32 {
-		if (Int32.compare(t,Int32.ofInt(20)) < 0)
-			return newInt32(0x5A82, 0x7999);
-		if (Int32.compare(t,Int32.ofInt(40)) < 0)
-			return newInt32(0x6ed9, 0xeba1);
-		if (Int32.compare(t,Int32.ofInt(60)) < 0)
-			return newInt32(0x8f1b, 0xbcdc);
-		return newInt32(0xca62, 0xc1d6);
-	}
-
-}
-
-#end

+ 0 - 27
std/haxe/Stack.hx

@@ -1,27 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package haxe;
-
-#if !haxe3
-typedef ImportStackItem = CallStack.StackItem;
-typedef Stack = CallStack;
-#end

+ 5 - 7
std/haxe/ds/GenericStack.hx

@@ -21,20 +21,18 @@
  */
 package haxe.ds;
 
-#if (haxe3 && (flash9 || cpp))
+#if (flash9 || cpp)
 @:generic
 #end
-class FastCell<T> #if (!haxe3 && (flash9 || cpp)) implements haxe.rtti.Generic #end {
+class FastCell<T> {
 	public var elt : T;
 	public var next : FastCell<T>;
 	public function new(elt,next) { this.elt = elt; this.next = next; }
 }
 
 #if cpp
-#if haxe3
 @:generic
-#end
-private class GenericStackIterator<T> extends cpp.FastIterator<T>#if !haxe3 , implements haxe.rtti.Generic #end {
+private class GenericStackIterator<T> extends cpp.FastIterator<T> {
 	public var current : FastCell<T>;
 	override public function hasNext():Bool { return current!=null; }
 	override public function next():T { var result = current.elt; current = current.next; return result; }
@@ -47,10 +45,10 @@ private class GenericStackIterator<T> extends cpp.FastIterator<T>#if !haxe3 , im
 /**
 	A linked-list of elements. A different class is created for each container used in platforms where it matters
 **/
-#if (haxe3 && (flash9 || cpp))
+#if (flash9 || cpp)
 @:generic
 #end
-class GenericStack<T> #if (!haxe3 && (flash9 || cpp)) implements haxe.rtti.Generic #end {
+class GenericStack<T> {
 
 	public var head : FastCell<T>;
 

+ 0 - 54
std/neko/zip/CRC32.hx

@@ -1,54 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package neko.zip;
-
-#if !haxe3
-
-import haxe.Int32;
-
-class CRC32 {
-
-	/*
-	 *  Function computes CRC32 code of a given string.
-	 *  Warning: returns Int32 as result uses all 32 bits
-	 *  UTF - 8 coding is not supported
-	 */
-	public static function encode(str : haxe.io.Bytes) : Int32 {
-		var init = Int32.make(0xFFFF, 0xFFFF);
-		var polynom = Int32.make(0xEDB8, 0x8320);
-		var crc = init;
-		var s = str.getData();
-		for( i in 0...str.length ) {
-			var tmp = Int32.and( Int32.xor(crc,untyped __dollar__sget(s,i)), cast 0xFF );
-			for( j in 0...8 ) {
-				if( Int32.and(tmp,cast 1) == cast 1 )
-					tmp = Int32.xor(Int32.ushr(tmp,1),polynom);
-				else
-					tmp = Int32.ushr(tmp,1);
-			}
-			crc = Int32.xor(Int32.ushr(crc,8), tmp);
-		}
-		return Int32.xor(crc, init);
-	}
-}
-
-#end

+ 0 - 284
std/neko/zip/Reader.hx

@@ -1,284 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package neko.zip;
-
-#if !haxe3
-
-typedef ZipEntry = {
-	var fileName : String;
-	var fileSize : Int;
-	var fileTime : Date;
-	var compressed : Bool;
-	var compressedSize : Int;
-	var data : haxe.io.Bytes;
-	var crc32 : Null<haxe.Int32>;
-}
-
-// see http://www.pkware.com/documents/casestudies/APPNOTE.TXT
-
-class Reader {
-
-	public static function unzip( f : ZipEntry ) : haxe.io.Bytes {
-		if( !f.compressed )
-			return f.data;
-		var c = new Uncompress(-15);
-		var s = haxe.io.Bytes.alloc(f.fileSize);
-		var r = c.execute(f.data,0,s,0);
-		c.close();
-		if( !r.done || r.read != f.data.length || r.write != f.fileSize )
-			throw "Invalid compressed data for "+f.fileName;
-		return s;
-	}
-
-	static function readZipDate( i : haxe.io.Input ) {
-		var t = i.readUInt16();
-		var hour = (t >> 11) & 31;
-		var min = (t >> 5) & 63;
-		var sec = t & 31;
-		var d = i.readUInt16();
-		var year = d >> 9;
-		var month = (d >> 5) & 15;
-		var day = d & 31;
-		return new Date(year + 1980, month-1, day, hour, min, sec << 1);
-	}
-
-	public static function readZipEntry( i : haxe.io.Input ) : ZipEntry {
-		var h = i.readInt31();
-		if( h == 0x02014B50 || h == 0x06054B50 )
-			return null;
-		if( h != 0x04034B50 )
-			throw "Invalid Zip Data";
-		var version = i.readUInt16();
-		var flags = i.readUInt16();
-		var extraFields = (flags & 8) != 0;
-		if( (flags & 0xFFF7) != 0 )
-			throw "Unsupported flags "+flags;
-		var compression = i.readUInt16();
-		var compressed = (compression != 0);
-		if( compressed && compression != 8 )
-			throw "Unsupported compression "+compression;
-		var mtime = readZipDate(i);
-		var crc32 = i.readInt32();
-		var csize = i.readUInt30();
-		var usize = i.readUInt30();
-		var fnamelen = i.readInt16();
-		var elen = i.readInt16();
-		var fname = i.readString(fnamelen);
-		var ename = i.readString(elen);
-		var data;
-		if( extraFields ) {
-			// TODO : it is needed to directly read the compressed
-			// data streamed from the input (needs additional neko apis)
-			// then, we can set "compressed" to false, and then follows
-			// 12 bytes with real crc, csize and usize
-			throw "Zip format with extrafields is currently not supported";
-		} else
-			data = i.read(csize);
-		return {
-			fileName : fname,
-			fileSize : usize,
-			fileTime : mtime,
-			compressed : compressed,
-			compressedSize : csize,
-			data : data,
-			crc32 : crc32,
-		};
-	}
-
-	public static function readZip( i : haxe.io.Input ) : List<ZipEntry> {
-		var l = new List();
-		while( true ) {
-			var e = readZipEntry(i);
-			if( e == null )
-				break;
-			l.add(e);
-		}
-		return l;
-	}
-
-	public static function readTar( i : haxe.io.Input, ?gz : Bool ) : List<ZipEntry> {
-		if( gz ) {
-			var tmp = new haxe.io.BytesOutput();
-			readGZHeader(i);
-			readGZData(i,tmp);
-			i = new haxe.io.BytesInput(tmp.getBytes());
-		}
-		var l = new List();
-		while( true ) {
-			var e = readTarEntry(i);
-			if( e == null )
-				break;
-			var pad = Math.ceil(e.fileSize / 512) * 512 - e.fileSize;
-			var data = i.read(e.fileSize);
-			i.read(pad);
-			l.add({
-				fileName : e.fileName,
-				fileSize : e.fileSize,
-				fileTime : e.fileTime,
-				compressed : false,
-				compressedSize : e.fileSize,
-				data : data,
-				crc32 : null,
-			});
-		}
-		return l;
-	}
-
-	public static function readGZHeader( i : haxe.io.Input ) : String {
-		if( i.readByte() != 0x1F || i.readByte() != 0x8B )
-			throw "Invalid GZ header";
-		if( i.readByte() != 8 )
-			throw "Invalid compression method";
-		var flags = i.readByte();
-		var mtime = i.read(4);
-		var xflags = i.readByte();
-		var os = i.readByte();
-		var fname = null;
-		var comments = null;
-		if( flags & 4 != 0 ) {
-			var xlen = i.readUInt16();
-			var xdata = i.read(xlen);
-		}
-		if( flags & 8 != 0 )
-			fname = i.readUntil(0);
-		if( flags & 16 != 0 )
-			comments = i.readUntil(0);
-		if( flags & 2 != 0 ) {
-			var hcrc = i.readUInt16();
-			// does not check header crc
-		}
-		return fname;
-	}
-
-	public static function readGZData( i : haxe.io.Input, o : haxe.io.Output, ?bufsize : Int ) : Int {
-		if( bufsize == null ) bufsize = (1 << 16); // 65Ks
-		var u = new Uncompress(-15);
-		u.setFlushMode(Flush.SYNC);
-		var buf = haxe.io.Bytes.alloc(bufsize);
-		var out = haxe.io.Bytes.alloc(bufsize);
-		var bufpos = bufsize;
-		var tsize = 0;
-		while( true ) {
-			if( bufpos == buf.length ) {
-				buf = refill(i,buf,0);
-				bufpos = 0;
-			}
-			var r = u.execute(buf,bufpos,out,0);
-			if( r.read == 0 ) {
-				if( bufpos == 0 )
-					throw new haxe.io.Eof();
-				var len = buf.length - bufpos;
-				buf.blit(0,buf,bufpos,len);
-				buf = refill(i,buf,len);
-				bufpos = 0;
-			} else {
-				bufpos += r.read;
-				tsize += r.read;
-				o.writeFullBytes(out,0,r.write);
-				if( r.done )
-					break;
-			}
-		}
-		return tsize;
-	}
-
-	static function refill( i, buf : haxe.io.Bytes, pos : Int ) {
-		try {
-			while( pos != buf.length ) {
-				var k = i.readBytes(buf,pos,buf.length-pos);
-				pos += k;
-			}
-		} catch( e : haxe.io.Eof ) {
-		}
-		if( pos == 0 )
-			throw new haxe.io.Eof();
-		if( pos != buf.length )
-			buf = buf.sub(0,pos);
-		return buf;
-	}
-
-	public static function readTarEntry( i : haxe.io.Input ) {
-		var fname = i.readUntil(0);
-		if( fname.length == 0 ) {
-			for( x in 0...511+512 )
-				if( i.readByte() != 0 )
-					throw "Invalid TAR end";
-			return null;
-		}
-		i.read(99 - fname.length); // skip
-		var fmod = parseOctal(i.read(8));
-		var uid = parseOctal(i.read(8));
-		var gid = parseOctal(i.read(8));
-		var fsize = parseOctal(i.read(12));
-		// read in two parts in order to prevent overflow
-		var mtime : Float = parseOctal(i.read(8));
-		mtime = mtime * 512.0 + parseOctal(i.read(4));
-		var crc = i.read(8);
-		var type = i.readByte();
-		var lname = i.readUntil(0);
-		i.read(99 - lname.length); // skip
-		var ustar = i.readString(8);
-		var uname = i.readUntil(0);
-		i.read(31 - uname.length);
-		var gname = i.readUntil(0);
-		i.read(31 - gname.length);
-		var devmaj = parseOctal(i.read(8));
-		var devmin = parseOctal(i.read(8));
-		var prefix = i.readUntil(0);
-		i.read(166 - prefix.length);
-		return {
-			fileName : fname,
-			fileSize : fsize,
-			fileTime : Date.fromTime(mtime * 1000.0),
-		};
-	}
-
-	public static function readTarData( i : haxe.io.Input, o : haxe.io.Output, size : Int, ?bufsize ) {
-		if( bufsize == null ) bufsize = (1 << 16); // 65Ks
-		var buf = haxe.io.Bytes.alloc(bufsize);
-		var pad = Math.ceil(size / 512) * 512 - size;
-		while( size > 0 ) {
-			var n = i.readBytes(buf,0,if( size > bufsize ) bufsize else size);
-			size -= n;
-			o.writeFullBytes(buf,0,n);
-		}
-		i.read(pad);
-	}
-
-	static function parseOctal( n : haxe.io.Bytes ) {
-		var i = 0;
-		for( p in 0...n.length ) {
-			var c = n.get(p);
-			if( c == 0 )
-				break;
-			if( c == 32 )
-				continue;
-			if( c < 48 || c > 55 )
-				throw "Invalid octal char";
-			i = (i * 8) + (c - 48);
-		}
-		return i;
-	}
-
-}
-
-#end

+ 0 - 135
std/neko/zip/Writer.hx

@@ -1,135 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package neko.zip;
-
-#if !haxe3
-
-class Writer {
-
-	/*
-	* The next constant is required for computing the Central
-	* Directory Record(CDR) size. CDR consists of some fields
-	* of constant size and a filename. Constant represents
-	* total length of all fields with constant size for each
-	* file in archive
-	*/
-	private static var CENTRAL_DIRECTORY_RECORD_FIELDS_SIZE = 46;
-
-	/*
-	* The following constant is the total size of all fields
-	* of Local File Header. It's required for calculating
-	* offset of start of central directory record
-	*/
-	private static var LOCAL_FILE_HEADER_FIELDS_SIZE = 30;
-
-	static function writeZipDate( o : haxe.io.Output, date : Date ) {
-		var hour = date.getHours();
-		var min = date.getMinutes();
-		var sec = date.getSeconds() >> 1;
-		o.writeUInt16( (hour << 11) | (min << 5) | sec );
-		var year = date.getFullYear() - 1980;
-		var month = date.getMonth() + 1;
-		var day = date.getDate();
-		o.writeUInt16( (year << 9) | (month << 5) | day );
-	}
-
-	static function writeZipEntry( o : haxe.io.Output, level, f : { data : haxe.io.Bytes, fileName : String, fileTime : Date } ) {
-		var fdata = f.data, cdata = null, crc32, compressed = true;
-		o.writeUInt30(0x04034B50);
-		o.writeUInt16(0x0014); // version
-		o.writeUInt16(0); // flags
-		if( fdata == null ) {
-			fdata = haxe.io.Bytes.alloc(0);
-			cdata = haxe.io.Bytes.ofString("XXXXXX");
-			crc32 = haxe.Int32.ofInt(0);
-			compressed = false;
-		} else {
-			crc32 = CRC32.encode(f.data);
-			cdata = Compress.run( f.data, level );
-		}
-		o.writeUInt16(compressed?8:0);
-		writeZipDate(o,f.fileTime);
-		o.writeInt32(crc32);
-		o.writeUInt30(cdata.length - 6);
-		o.writeUInt30(fdata.length);
-		o.writeUInt16(f.fileName.length);
-		o.writeUInt16(0);
-		o.writeString(f.fileName);
-		if( cdata != null ) o.writeFullBytes(cdata,2,cdata.length-6);
-		return {
-			compressed : compressed,
-			fileName : f.fileName,
-			dlen : fdata.length,
-			clen : cdata.length - 6,
-			date : f.fileTime,
-			crc32 : crc32,
-		};
-	}
-
-	public static function writeZip( o : haxe.io.Output, files, compressionLevel : Int ) {
-		var files = Lambda.map(files,callback(writeZipEntry,o,compressionLevel));
-		var cdr_size = 0;
-		var cdr_offset = 0;
-		for( f in files ) {
-			var namelen = f.fileName.length;
-			o.writeUInt30(0x02014B50); // header
-			o.writeUInt16(0x0014); // version made-by
-			o.writeUInt16(0x0014); // version
-			o.writeUInt16(0); // flags
-			o.writeUInt16(f.compressed?8:0);
-			writeZipDate(o,f.date);
-			o.writeInt32(f.crc32);
-			o.writeUInt30(f.clen);
-			o.writeUInt30(f.dlen);
-			o.writeUInt16(namelen);
-			o.writeUInt16(0); //extra field length always 0
-			o.writeUInt16(0); //comment length always 0
-			o.writeUInt16(0); //disk number start
-			o.writeUInt16(0); //internal file attributes
-			o.writeUInt30(0);	//external file attributes
-			o.writeUInt30(cdr_offset); //relative offset of local header
-			o.writeString(f.fileName);
-			cdr_size += CENTRAL_DIRECTORY_RECORD_FIELDS_SIZE + namelen;
-			cdr_offset += LOCAL_FILE_HEADER_FIELDS_SIZE + namelen + f.clen;
-		}
-		//end of central dir signature
-		o.writeUInt30(0x06054B50);
-		//number of this disk
-		o.writeUInt16(0);
-		//number of the disk with the start of the central directory
-		o.writeUInt16(0);
-		//total number of entries in the central directory on this disk
-		o.writeUInt16(files.length);
-		//total number of entries in the central directory
-		o.writeUInt16(files.length);
-		//size of the central directory record
-		o.writeUInt30(cdr_size);
-		//offset of start of central directory with respect to the starting disk number
-		o.writeUInt30(cdr_offset);
-		// .ZIP file comment length
-		o.writeUInt16(0);
-	}
-
-
-}
-
-#end