UNPKG

reified

Version:

JS Binary Data API. Structs, arrays, bitfields, and numbers. Reify and Reference like nobody's business.

135 lines (118 loc) 5.99 kB
var inspect = require('util').inspect; //delete Buffer.prototype.inspect; var reified = require('../') var Numerics = reified.NumericType; var ArrayType = reified.ArrayType; var StructType = reified.StructType; var BitfieldType = reified.BitfieldType; // local scope ahoy for (var k in Numerics) eval('var '+k+' = Numerics.'+k); function showCode(code, result){ console.log('//-->'); console.log(result); } function section(label, codeArray){ console.log('### '+label); while (codeArray.length) { var item = codeArray.shift(); console.log('\n#### '+item[0]); console.log('```'); var codes = Array.isArray(item[1]) ? item[1] : [item[1]]; while (codes.length) { var code = codes.shift(); var result = eval(code); if (code.slice(0,3) === 'var') { result = eval(code.split(' ')[1]); } result = inspect(result, false, 6, process.stdout._type === 'tty'); if (!~result.indexOf('\n') && result.length + code.length < 80) { console.log(code + '\n '+result+'\n'); } else { console.log(code + '\n//-->\n'+result+'\n\n'); } } console.log('```'); } console.log(''); } section("NumericType", [ [ "Instances", [ "var int32 = new reified('Uint32', 10000000)", "var int16 = new reified('Uint16', int32)", "var int8 = new reified('Uint8', int16)" ] ], [ "Shared Data", [ "int8.write(100)", "int32", "int16", "int8" ] ] ]); section("ArrayType", [ [ "Simple", [ "var RGBarray = reified('RGBarray', 'Uint8[3]')", "new RGBarray([0, 150, 255])" ] ], [ "Multidimension", [ "var int32x4x4x2 = reified('Int32[4][4][2]')", "var inst = new reified('Int32[4][4][2]')", "inst.reify()"] ] ]); section("StructType", [ [ "Simple", [ "var RGB = reified('RGB', { r: 'Uint8', g: 'Uint8', b: 'Uint8' })", "var fuschia = new RGB({ r: 255, g: 0, b: 255 })", "var deepSkyBlue = new reified('RGB', { r: 0, g: 150, b: 255 })" ] ], [ "Nested", [ "var Border = reified('Border', { top: RGB, right: RGB, bottom: RGB, left: RGB })", "new Border({ top: fuschia, right: deepSkyBlue, bottom: fuschia, left: deepSkyBlue })" ] ], ]); section("Bitfield", [ [ "Indexed", [ "var bitfield = reified('bits', 2)", "var bits = new bitfield", "bits.write(0); bits", "bits[12] = true; bits[1] = true; bits;", "bits.read()", "bits.reify()" ] ], [ "Flags", [ "var Desc = reified('DescriptorFlags', "+ "['ENUMERABLE','CONFIGURABLE','WRITABLE'])", "inst = new Desc", "inst.ENUMERABLE = true; inst", "inst._data", "inst.read()", "inst.write(1 << 2 | 1 << 4)", "inst.read()" ] ] ]); section("Cominations", [ [ ".lnk File Format", [ "var CLSID = new ArrayType('CLSID', 'Uint8', 16)", "var LinkFlags = new BitfieldType('LinkFlags', ['HasLinkTargetIDList','HasLinkInfo','HasName','HasRelativePath',\n"+ " 'HasWorkingDir','HasArguments','HasIconLocation','IsUnicode','ForceNoLinkInfo','HasExpString','RunInSeparateProcess',\n"+ " 'UNUSED1','HasDarwinID','RunAsUser','HasExpIcon','NoPidAlias','UNUSED2','RunWithShimLayer','ForceNoLinkTrack',\n"+ " 'EnableTargetMetadata','DisableLinkPathTracking','DisableKnownFolderTracking','DisableKnownFolderAlias',\n"+ " 'AllowLinkToLink','UnaliasOnSave','PreferEnvironmentPath','KeepLocalIDListForUNCTarget'\n]);", "var FileAttributesFlags = new BitfieldType('FileAttributesFlags', ['READONLY','HIDDEN','SYSTEM','UNUSED1','DIRECTORY','ARCHIVE',\n"+ " 'UNUSED2','NORMAL','TEMPORARY','SPARSE_FILE','REPARSE_POINT','COMPRESSED','OFFLINE','NOT_CONTENT_INDEXED','ENCRYPTED'\n])", "var FILETIME = new StructType('FILETIME', { Low: Uint32, High: Uint32 })", ["var ShellLinkHeader = new StructType('ShellLinkHeader', {", " HeaderSize: Uint32,", " LinkCLSID: CLSID,", " LinkFlags: LinkFlags,", " FileAttributes: FileAttributesFlags,", " CreationTime: FILETIME,", " AccessTime: 'FILETIME',", " WriteTime: FILETIME,", " FileSize: Uint32,", " IconIndex: Int32,", " ShowCommand: Uint32", "});"].join('\n'), "new ShellLinkHeader"]], [ "Graphics", [ "var Point = reified('Point', { x: Uint32, y: Uint32 });", "var Color = reified('Color', { r: Uint8, g: Uint8, b: Uint8 });", "var Pixel = reified('Pixel', { point: Point, color: Color });", "var Triangle = reified('Triangle', Pixel[3]);", "var white = new Color({ r: 255, g: 255, b: 255 });", "var red = new Color({ r: 255, g: 0, b: 0 });", "var origin = new Point({ x: 0, y: 0 });", "var defaults = new Pixel({ point: origin, color: white });", ["var tri = new Triangle([", " defaults,", " { point: { x: 5, y: 5 }, color: red },", " { point: { x: 10, y: 0 }, color: { r: 0, g: 0, b: 128 } }", "])"].join('\n'), "var tri2 = tri.clone()", "tri2[0].point.x = 500; tri", "tri.reify()", "tri2.reify()", ]] ]);