Merge pull request #2144 from RReverser/master

Add definitions for jDataView.
This commit is contained in:
Masahiro Wakame
2014-05-08 20:02:36 +09:00
3 changed files with 180 additions and 0 deletions
+1
View File
@@ -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)
+74
View File
@@ -0,0 +1,74 @@
/// <reference path="jdataview.d.ts" />
/// <reference path="../jquery/jquery.d.ts" />
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($('<pre></pre>').html(JSON.stringify(metadata, null, ' ')));
if (metadata.size) {
$('body').append($('<textarea></textarea>').val(content));
}
}
});
+105
View File
@@ -0,0 +1,105 @@
// Type definitions for jDataView
// Project: https://github.com/jDataView/jDataView
// Definitions by: Ingvar Stepanyan <https://github.com/RReverser>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
declare class jDataView implements DataView {
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
// 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: 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
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 {
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): Uint64
}
class Int64 extends Uint64 {
static fromNumber(number: number): Int64
}
}