From 966603e424664a26b890f2bb9dad20f1d5081898 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Tue, 6 May 2014 22:30:28 +0300 Subject: [PATCH 1/2] Add definitions for jDataView. --- CONTRIBUTORS.md | 1 + jdataview/jdataview-tests.ts | 74 +++++++++++++++++++++++++++ jdataview/jdataview.d.ts | 96 ++++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 jdataview/jdataview-tests.ts create mode 100644 jdataview/jdataview.d.ts diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index bc62882748..f897e263ef 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -117,6 +117,7 @@ All definitions files include a header with the author and editors, so at some p * [jake](https://github.com/mde/jake) (by [Kon](http://phyzkit.net/)) * [Jasmine](http://pivotal.github.com/jasmine/) (by [Boris Yankov](https://github.com/borisyankov)) * [Jasmine-jQuery](https://github.com/velesin/jasmine-jquery) (by [Gregor Stamac](https://github.com/gstamac)) +* [jDataView](https://github.com/jDataView/jDataView) (by [Ingvar Stepanyan](https://github.com/RReverser)) * [JointJS](http://www.jointjs.com/) (by [Aidan Reel](http://github.com/areel)) * [jQRangeSlider](http://ghusse.github.com/jQRangeSlider) (by [Dániel Tar](https://github.com/qcz)) * [jQuery](http://jquery.com/) (from TypeScript samples) diff --git a/jdataview/jdataview-tests.ts b/jdataview/jdataview-tests.ts new file mode 100644 index 0000000000..273db3ea39 --- /dev/null +++ b/jdataview/jdataview-tests.ts @@ -0,0 +1,74 @@ +/// +/// + +interface TARMetaData { + name: string; + mode: number; + owner: number; + group: number; + size: number; + modtime: number; + checksum: number; + link: string; + name_linked: string; + ustar: string; + ustar_version: number; + owner_name: string; + group_name: string; + device: number[]; + name_prefix: string; +} + +// Download the file +$.get('jquery.tar', function (data) { + // Make a view on the data + var view = new jDataView(data); + + // console.log(view.getUint32(0, true)); + // console.log(view.getUint32(0, false)); + // view.seek(0); + + while (view.tell() < view.byteLength) { + // Parse the file meta data + var metadata: TARMetaData = { + name: view.getString(100).replace(/\0+$/, ''), + mode: parseInt(view.getString(8), 8), + owner: parseInt(view.getString(8), 8), + group: parseInt(view.getString(8), 8), + size: parseInt(view.getString(12), 8), + modtime: parseInt(view.getString(12), 8), + checksum: parseInt(view.getString(8), 8), + link: view.getChar(), + name_linked: view.getString(100).replace(/\0+$/, ''), + ustar: view.getString(6), + ustar_version: parseInt(view.getString(2), 8), + owner_name: view.getString(32).replace(/\0+$/, ''), + group_name: view.getString(32).replace(/\0+$/, ''), + device: [parseInt(view.getString(8), 8), parseInt(view.getString(8), 8)], + name_prefix: view.getString(155).replace(/\0+$/, '') + }; + + // Padding + if (view.tell() % 512 !== 0) { + view.seek(view.tell() + 512 - (view.tell() % 512)); + } + + // Get the file + if (isNaN(metadata.size)) { + break; + } + var content = view.getString(metadata.size); + + // Padding + if (view.tell() % 512 != 0) { + view.seek(view.tell() + 512 - (view.tell() % 512)); + } + + // Print the file + $(document.body).append($('
').html(JSON.stringify(metadata, null, '  ')));
+
+		if (metadata.size) {
+			$('body').append($('').val(content));
+		}
+	}
+});
\ No newline at end of file
diff --git a/jdataview/jdataview.d.ts b/jdataview/jdataview.d.ts
new file mode 100644
index 0000000000..6368b4196d
--- /dev/null
+++ b/jdataview/jdataview.d.ts
@@ -0,0 +1,96 @@
+// Type definitions for jDataView
+// Project: https://github.com/jDataView/jBinary
+// Definitions by: Ingvar Stepanyan 
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare class jDataView implements DataView {
+	constructor(buffer: any, offset?: number, length?: number, littleEndian?: boolean)
+	buffer: any
+	byteOffset: number
+	byteLength: number
+
+	// 64 bit integers
+	getInt64(byteOffset?: number, littleEndian?: boolean): jDataView.Int64
+	setInt64(byteOffset: number, value: jDataView.Int64, littleEndian?: boolean): void
+	writeInt64(value: jDataView.Int64, littleEndian?: boolean): void
+	getUint64(byteOffset?: number, littleEndian?: boolean): jDataView.Uint64
+	setUint64(byteOffset: number, value: jDataView.Uint64, littleEndian?: boolean): void
+	writeUint64(value: jDataView.Uint64, littleEndian?: boolean): void
+
+	// Bitfields
+	getSigned(bitLength: number, byteOffset?: number): number
+	setSigned(byteOffset: number, value: number, bitLength: number): void
+	writeSigned(value: number, bitLength: number): void
+	getUnsigned(bitLength: number, byteOffset?: number): number
+	setUnsigned(byteOffset: number, value: number, bitLength: number): void
+	writeUnsigned(value: number, bitLength: number): void
+
+	// Internal utilities
+	wrapBuffer(string_or_bytes_or_byteCount: any): number[]
+	createBuffer(...bytes: number[]): number[]
+
+	// Operation control
+	seek(byteOffset: number): number
+	tell(): number
+	skip(byteLength: number): number
+	slice(start: number, end?: number, forceCopy?: boolean): jDataView
+
+	// Specification getters
+	getInt8(byteOffset?: number): number
+	getUint8(byteOffset?: number): number
+	getInt16(byteOffset?: number, littleEndian?: boolean): number
+	getUint16(byteOffset?: number, littleEndian?: boolean): number
+	getInt32(byteOffset?: number, littleEndian?: boolean): number
+	getUint32(byteOffset?: number, littleEndian?: boolean): number
+	getFloat32(byteOffset?: number, littleEndian?: boolean): number
+	getFloat64(byteOffset?: number, littleEndian?: boolean): number
+
+	// Specification setters
+	setInt8(byteOffset: number, value: number): void
+	setUint8(byteOffset: number, value: number): void
+	setInt16(byteOffset: number, value: number, littleEndian?: boolean): void
+	setUint16(byteOffset: number, value: number, littleEndian?: boolean): void
+	setInt32(byteOffset: number, value: number, littleEndian?: boolean): void
+	setUint32(byteOffset: number, value: number, littleEndian?: boolean): void
+	setFloat32(byteOffset: number, value: number, littleEndian?: boolean): void
+	setFloat64(byteOffset: number, value: number, littleEndian?: boolean): void
+
+	// Strings and Blobs
+	getChar(byteOffset?: number): string
+	setChar(byteOffset: number, char: string): void
+	writeChar(char: string): void
+	getString(byteLength: number, byteOffset?: number, encoding?: string): string
+	setString(byteOffset: number, chars: string, encoding?: string): void
+	writeString(chars: string, encoding?: string): void
+	getBytes(length: number, byteOffset?: number, littleEndian?: boolean, toArray?: boolean): number[]
+	setBytes(byteOffset: number, bytes: number[], littleEndian?: boolean): void
+	writeBytes(bytes: number[], littleEndian?: boolean): void
+
+	// writeXXX methods
+	writeInt8(value: number): void
+	writeUint8(value: number): void
+	writeInt16(value: number, littleEndian?: boolean): void
+	writeUint16(value: number, littleEndian?: boolean): void
+	writeInt32(value: number, littleEndian?: boolean): void
+	writeUint32(value: number, littleEndian?: boolean): void
+	writeFloat32(value: number, littleEndian?: boolean): void
+	writeFloat64(value: number, littleEndian?: boolean): void
+}
+
+declare module jDataView {
+	class Number64 {
+		lo: number
+		hi: number
+		constructor(lo: number, hi: number)
+		valueOf(): number
+		static fromNumber(number: number): Number64
+	}
+
+	class Uint64 extends Number64 {
+		static fromNumber(number: number): Uint64
+	}
+
+	class Int64 extends Number64 {
+		static fromNumber(number: number): Int64
+	}
+}
\ No newline at end of file

From a869337eedd992dc919183ade95ff3ac6e4220ab Mon Sep 17 00:00:00 2001
From: Ingvar Stepanyan 
Date: Thu, 8 May 2014 12:47:03 +0300
Subject: [PATCH 2/2] Fixed header + added more strict types.

---
 jdataview/jdataview.d.ts | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/jdataview/jdataview.d.ts b/jdataview/jdataview.d.ts
index 6368b4196d..cff1160326 100644
--- a/jdataview/jdataview.d.ts
+++ b/jdataview/jdataview.d.ts
@@ -1,10 +1,12 @@
 // Type definitions for jDataView
-// Project: https://github.com/jDataView/jBinary
+// Project: https://github.com/jDataView/jDataView
 // Definitions by: Ingvar Stepanyan 
 // Definitions: https://github.com/borisyankov/DefinitelyTyped
 
 declare class jDataView implements DataView {
-	constructor(buffer: any, offset?: number, length?: number, littleEndian?: boolean)
+	constructor(byteCount: number, offset?: number, length?: number, littleEndian?: boolean)
+	constructor(buffer: string, offset?: number, length?: number, littleEndian?: boolean)
+	constructor(buffer: jDataView.Bytes, offset?: number, length?: number, littleEndian?: boolean)
 	buffer: any
 	byteOffset: number
 	byteLength: number
@@ -26,8 +28,10 @@ declare class jDataView implements DataView {
 	writeUnsigned(value: number, bitLength: number): void
 
 	// Internal utilities
-	wrapBuffer(string_or_bytes_or_byteCount: any): number[]
-	createBuffer(...bytes: number[]): number[]
+	wrapBuffer(string: string): jDataView.Buffer
+	wrapBuffer(bytes: jDataView.Bytes): jDataView.Buffer
+	wrapBuffer(byteCount: number): jDataView.Buffer
+	createBuffer(...bytes: number[]): jDataView.Buffer
 
 	// Operation control
 	seek(byteOffset: number): number
@@ -78,19 +82,24 @@ declare class jDataView implements DataView {
 }
 
 declare module jDataView {
-	class Number64 {
+	interface Bytes {
+		length: number;
+		[index: number]: number;
+	}
+
+	interface Buffer extends Bytes {
+		byteLength: number;
+	}
+
+	class Uint64 {
 		lo: number
 		hi: number
 		constructor(lo: number, hi: number)
 		valueOf(): number
-		static fromNumber(number: number): Number64
-	}
-
-	class Uint64 extends Number64 {
 		static fromNumber(number: number): Uint64
 	}
 
-	class Int64 extends Number64 {
+	class Int64 extends Uint64 {
 		static fromNumber(number: number): Int64
 	}
 }
\ No newline at end of file