From 6657b88758ca6584ce59a9c762a32c30b2e8fcaf Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Mon, 5 Sep 2011 00:11:06 -0500 Subject: [PATCH 01/43] adding xml/json spec as sub-project --- .gitmodules | 3 +++ protocols | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 protocols diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..ed057dc --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "protocols"] + path = protocols + url = git://github.com/CrypticSwarm/XProto2JSON.git diff --git a/protocols b/protocols new file mode 160000 index 0000000..bf4e682 --- /dev/null +++ b/protocols @@ -0,0 +1 @@ +Subproject commit bf4e682b046c525697dac1f947b3936885e8c318 From 49ae09cdd13412a08bcc71eef6befd085f11beaa Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Mon, 5 Sep 2011 00:12:15 -0500 Subject: [PATCH 02/43] moving/modifing pack value mask helper to seperate file. --- lib/x11/valuemask.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 lib/x11/valuemask.js diff --git a/lib/x11/valuemask.js b/lib/x11/valuemask.js new file mode 100644 index 0000000..de76d86 --- /dev/null +++ b/lib/x11/valuemask.js @@ -0,0 +1,30 @@ +module.exports = packValueMask + +function orderValueMask(a, b) { + return a[0] < b[0] ? -1 + : a[0] > b[0] ? 1 + : 0 +} + +function getValue(item) { + return item[1] +} + +function packValueMask(maskList, values) +{ + var bitmask = 0; + , masksList = []; + , v + , valueBit + , args + + for (var v in values) { + valueBit = reqValueMask[v]; + if (!valueBit) throw new Error(reqname + ': incorrect value param ' + v); + masksList.push([valueBit, v]); + bitmask |= valueBit; + } + args = masksList.sort(orderValueMask).map(getValue); + return [bitmask, args] +} + From d8b3b8abd77fa85e943f2951d25b9427a6b3e3b9 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Mon, 5 Sep 2011 00:16:41 -0500 Subject: [PATCH 03/43] quick mockup of generating x requests. --- generateFiles.js | 63 +++ lib/x11/autogen/requests.js | 896 ++++++++++++++++++++++++++++++++++++ stubs/requests.tpl | 37 ++ 3 files changed, 996 insertions(+) create mode 100644 generateFiles.js create mode 100644 lib/x11/autogen/requests.js create mode 100644 stubs/requests.tpl diff --git a/generateFiles.js b/generateFiles.js new file mode 100644 index 0000000..9907491 --- /dev/null +++ b/generateFiles.js @@ -0,0 +1,63 @@ +var fs = require('fs') + , jqtpl = require("jqtpl") + , typeLookup = JSON.parse(fs.readFileSync('protocols/xTypes.json')) + , xProto = JSON.parse(fs.readFileSync('protocols/xProtocol.json')) + , data = { requests: xProto.request + , getValueMask: getValueMask + , getDelim: getDelim + , enumVal: enumVal + , getBufPack: getBufPack + , isListType: isListType + , prepPropName: prepPropName + , firstType: firstType + , prePackFirst: prePackFirst + } + +;['requests'].forEach(function(name) { + var tplFile = fs.readFileSync('stubs/' + name + '.tpl').toString().replace(/\n\s*{{/g, '{{').replace(/}}\s*$/g, '}}') + fs.writeFileSync('lib/x11/autogen/' + name + '.js', jqtpl.tmpl(tplFile, data)) +}) + +function getValueMask(requestName) { + return typeLookup.valuemaskEnum[requestName] && xProto.enum[typeLookup.valuemaskEnum[requestName]].field +} + +function getDelim(i, ch) { + return i == 0 ? (ch || '{') : ',' +} + +function enumVal(val) { + return val.value ? val.value + : val.bit ? 1 << val.bit + : 0 +} + +function isListType(field) { + return field.fieldType === 'list' || field.fieldType === 'valueparam' +} + +function getBufPack(field) { + return !field ? 'x' + : field.fieldType === 'pad' ? new Array(parseInt(field.bytes) + 1).join('x') + : isListType(field) ? '' + : typeLookup.packTypes[field.type] +} + +function prepPropName(short) { + return short === 'new' ? '_new' + : short === 'class' ? '_class' + : short === 'delete' ? '_delete' + : short +} + +function firstType(field, type) { + var f + return field.some(function(field) { + f = field + return field.fieldType == type + }) && f +} + +function prePackFirst(request) { + return request.opcode < 128 +} diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js new file mode 100644 index 0000000..bbe0e97 --- /dev/null +++ b/lib/x11/autogen/requests.js @@ -0,0 +1,896 @@ +var packMask = require('./valuemask') + , valueMask = { + CreateWindow: + { BackPixmap: 1 + , BackPixel: 2 + , BorderPixmap: 4 + , BorderPixel: 8 + , BitGravity: 16 + , WinGravity: 32 + , BackingStore: 64 + , BackingPlanes: 128 + , BackingPixel: 256 + , OverrideRedirect: 512 + , SaveUnder: 1024 + , EventMask: 2048 + , DontPropagate: 4096 + , Colormap: 8192 + , Cursor: 16384 + } + CreateGC: + { Function: 1 + , PlaneMask: 2 + , Foreground: 4 + , Background: 8 + , LineWidth: 16 + , LineStyle: 32 + , CapStyle: 64 + , JoinStyle: 128 + , FillStyle: 256 + , FillRule: 512 + , Tile: 1024 + , Stipple: 2048 + , TileStippleOriginX: 4096 + , TileStippleOriginY: 8192 + , Font: 16384 + , SubwindowMode: 32768 + , GraphicsExposures: 65536 + , ClipOriginX: 131072 + , ClipOriginY: 262144 + , ClipMask: 524288 + , DashOffset: 1048576 + , DashList: 2097152 + , ArcMode: 4194304 + } +} + +function parameterOrder(params, obj) { + return params.map(function(name) { + return obj[name] + }) +} + +module.exports = +{ CreateWindow: + [ function(obj, cb) { + var format = 'CCSLLssSSSSL' + , args = parameterOrder( [ 'depth' , 'wid' , 'parent' , 'x' , 'y' , 'width' , 'height' , 'border_width' , '_class' , 'visual' ], obj) + , packed = packMask(valueMask[CreateWindow], obj.) + } + ] +, ChangeWindowAttributes: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + ] +, GetWindowAttributes: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + , function(buf, format) { + + } + ] +, DestroyWindow: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + ] +, DestroySubwindows: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + ] +, ChangeSaveSet: + [ function(obj, cb) { + var format = 'CCSL' + , args = parameterOrder( [ 'mode' , 'window' ], obj) + } + ] +, ReparentWindow: + [ function(obj, cb) { + var format = 'CxSLLss' + , args = parameterOrder( [ 'window' , 'parent' , 'x' , 'y' ], obj) + } + ] +, MapWindow: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + ] +, MapSubwindows: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + ] +, UnmapWindow: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + ] +, UnmapSubwindows: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + ] +, ConfigureWindow: + [ function(obj, cb) { + var format = 'CxSLSxx' + , args = parameterOrder( [ 'window' , 'value_mask' ], obj) + } + ] +, CirculateWindow: + [ function(obj, cb) { + var format = 'CCSL' + , args = parameterOrder( [ 'direction' , 'window' ], obj) + } + ] +, GetGeometry: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'drawable' ], obj) + } + , function(buf, format) { + + } + ] +, QueryTree: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + , function(buf, format) { + + } + ] +, InternAtom: + [ function(obj, cb) { + var format = 'CCSSxx' + , args = parameterOrder( [ 'only_if_exists' , 'name_len' ], obj) + } + , function(buf, format) { + + } + ] +, GetAtomName: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'atom' ], obj) + } + , function(buf, format) { + + } + ] +, ChangeProperty: + [ function(obj, cb) { + var format = 'CCSLLLCxxxL' + , args = parameterOrder( [ 'mode' , 'window' , 'property' , 'type' , 'format' , 'data_len' ], obj) + } + ] +, DeleteProperty: + [ function(obj, cb) { + var format = 'CxSLL' + , args = parameterOrder( [ 'window' , 'property' ], obj) + } + ] +, GetProperty: + [ function(obj, cb) { + var format = 'CCSLLLLL' + , args = parameterOrder( [ '_delete' , 'window' , 'property' , 'type' , 'long_offset' , 'long_length' ], obj) + } + , function(buf, format) { + + } + ] +, ListProperties: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + , function(buf, format) { + + } + ] +, SetSelectionOwner: + [ function(obj, cb) { + var format = 'CxSLLundefined' + , args = parameterOrder( [ 'owner' , 'selection' , 'time' ], obj) + } + ] +, GetSelectionOwner: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'selection' ], obj) + } + , function(buf, format) { + + } + ] +, ConvertSelection: + [ function(obj, cb) { + var format = 'CxSLLLLundefined' + , args = parameterOrder( [ 'requestor' , 'selection' , 'target' , 'property' , 'time' ], obj) + } + ] +, SendEvent: + [ function(obj, cb) { + var format = 'CCSLL' + , args = parameterOrder( [ 'propagate' , 'destination' , 'event_mask' ], obj) + } + ] +, GrabPointer: + [ function(obj, cb) { + var format = 'CCSLSCCLLundefined' + , args = parameterOrder( [ 'owner_events' , 'grab_window' , 'event_mask' , 'pointer_mode' , 'keyboard_mode' , 'confine_to' , 'cursor' , 'time' ], obj) + } + , function(buf, format) { + + } + ] +, UngrabPointer: + [ function(obj, cb) { + var format = 'CxSundefined' + , args = parameterOrder( [ 'time' ], obj) + } + ] +, GrabButton: + [ function(obj, cb) { + var format = 'CCSLSCCLLCxS' + , args = parameterOrder( [ 'owner_events' , 'grab_window' , 'event_mask' , 'pointer_mode' , 'keyboard_mode' , 'confine_to' , 'cursor' , 'button' , 'modifiers' ], obj) + } + ] +, UngrabButton: + [ function(obj, cb) { + var format = 'CCSLSxx' + , args = parameterOrder( [ 'button' , 'grab_window' , 'modifiers' ], obj) + } + ] +, ChangeActivePointerGrab: + [ function(obj, cb) { + var format = 'CxSLundefinedSxx' + , args = parameterOrder( [ 'cursor' , 'time' , 'event_mask' ], obj) + } + ] +, GrabKeyboard: + [ function(obj, cb) { + var format = 'CCSLundefinedCCxx' + , args = parameterOrder( [ 'owner_events' , 'grab_window' , 'time' , 'pointer_mode' , 'keyboard_mode' ], obj) + } + , function(buf, format) { + + } + ] +, UngrabKeyboard: + [ function(obj, cb) { + var format = 'CxSundefined' + , args = parameterOrder( [ 'time' ], obj) + } + ] +, GrabKey: + [ function(obj, cb) { + var format = 'CCSLSCCCxxx' + , args = parameterOrder( [ 'owner_events' , 'grab_window' , 'modifiers' , 'key' , 'pointer_mode' , 'keyboard_mode' ], obj) + } + ] +, UngrabKey: + [ function(obj, cb) { + var format = 'CCSLSxx' + , args = parameterOrder( [ 'key' , 'grab_window' , 'modifiers' ], obj) + } + ] +, AllowEvents: + [ function(obj, cb) { + var format = 'CCSundefined' + , args = parameterOrder( [ 'mode' , 'time' ], obj) + } + ] +, GrabServer: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + ] +, UngrabServer: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + ] +, QueryPointer: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + , function(buf, format) { + + } + ] +, GetMotionEvents: + [ function(obj, cb) { + var format = 'CxSLundefinedundefined' + , args = parameterOrder( [ 'window' , 'start' , 'stop' ], obj) + } + , function(buf, format) { + + } + ] +, TranslateCoordinates: + [ function(obj, cb) { + var format = 'CxSLLss' + , args = parameterOrder( [ 'src_window' , 'dst_window' , 'src_x' , 'src_y' ], obj) + } + , function(buf, format) { + + } + ] +, WarpPointer: + [ function(obj, cb) { + var format = 'CxSLLssSSss' + , args = parameterOrder( [ 'src_window' , 'dst_window' , 'src_x' , 'src_y' , 'src_width' , 'src_height' , 'dst_x' , 'dst_y' ], obj) + } + ] +, SetInputFocus: + [ function(obj, cb) { + var format = 'CCSLundefined' + , args = parameterOrder( [ 'revert_to' , 'focus' , 'time' ], obj) + } + ] +, GetInputFocus: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + , function(buf, format) { + + } + ] +, QueryKeymap: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + , function(buf, format) { + + } + ] +, OpenFont: + [ function(obj, cb) { + var format = 'CxSLSxx' + , args = parameterOrder( [ 'fid' , 'name_len' ], obj) + } + ] +, CloseFont: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'font' ], obj) + } + ] +, QueryFont: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'font' ], obj) + } + , function(buf, format) { + + } + ] +, QueryTextExtents: + [ function(obj, cb) { + var format = 'CCSL' + , args = parameterOrder( [ 'font' ], obj) + } + , function(buf, format) { + + } + ] +, ListFonts: + [ function(obj, cb) { + var format = 'CxSSS' + , args = parameterOrder( [ 'max_names' , 'pattern_len' ], obj) + } + , function(buf, format) { + + } + ] +, ListFontsWithInfo: + [ function(obj, cb) { + var format = 'CxSSS' + , args = parameterOrder( [ 'max_names' , 'pattern_len' ], obj) + } + , function(buf, format) { + + } + ] +, SetFontPath: + [ function(obj, cb) { + var format = 'CxSS' + , args = parameterOrder( [ 'font_qty' ], obj) + } + ] +, GetFontPath: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + , function(buf, format) { + + } + ] +, CreatePixmap: + [ function(obj, cb) { + var format = 'CCSLLSS' + , args = parameterOrder( [ 'depth' , 'pid' , 'drawable' , 'width' , 'height' ], obj) + } + ] +, FreePixmap: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'pixmap' ], obj) + } + ] +, CreateGC: + [ function(obj, cb) { + var format = 'CxSLL' + , args = parameterOrder( [ 'cid' , 'drawable' ], obj) + , packed = packMask(valueMask[CreateGC], obj.) + } + ] +, ChangeGC: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'gc' ], obj) + } + ] +, CopyGC: + [ function(obj, cb) { + var format = 'CxSLLL' + , args = parameterOrder( [ 'src_gc' , 'dst_gc' , 'value_mask' ], obj) + } + ] +, SetDashes: + [ function(obj, cb) { + var format = 'CxSLSS' + , args = parameterOrder( [ 'gc' , 'dash_offset' , 'dashes_len' ], obj) + } + ] +, SetClipRectangles: + [ function(obj, cb) { + var format = 'CCSLss' + , args = parameterOrder( [ 'ordering' , 'gc' , 'clip_x_origin' , 'clip_y_origin' ], obj) + } + ] +, FreeGC: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'gc' ], obj) + } + ] +, ClearArea: + [ function(obj, cb) { + var format = 'CCSLssSS' + , args = parameterOrder( [ 'exposures' , 'window' , 'x' , 'y' , 'width' , 'height' ], obj) + } + ] +, CopyArea: + [ function(obj, cb) { + var format = 'CxSLLLssssSS' + , args = parameterOrder( [ 'src_drawable' , 'dst_drawable' , 'gc' , 'src_x' , 'src_y' , 'dst_x' , 'dst_y' , 'width' , 'height' ], obj) + } + ] +, CopyPlane: + [ function(obj, cb) { + var format = 'CxSLLLssssSSL' + , args = parameterOrder( [ 'src_drawable' , 'dst_drawable' , 'gc' , 'src_x' , 'src_y' , 'dst_x' , 'dst_y' , 'width' , 'height' , 'bit_plane' ], obj) + } + ] +, PolyPoint: + [ function(obj, cb) { + var format = 'CCSLL' + , args = parameterOrder( [ 'coordinate_mode' , 'drawable' , 'gc' ], obj) + } + ] +, PolyLine: + [ function(obj, cb) { + var format = 'CCSLL' + , args = parameterOrder( [ 'coordinate_mode' , 'drawable' , 'gc' ], obj) + } + ] +, PolySegment: + [ function(obj, cb) { + var format = 'CxSLL' + , args = parameterOrder( [ 'drawable' , 'gc' ], obj) + } + ] +, PolyRectangle: + [ function(obj, cb) { + var format = 'CxSLL' + , args = parameterOrder( [ 'drawable' , 'gc' ], obj) + } + ] +, PolyArc: + [ function(obj, cb) { + var format = 'CxSLL' + , args = parameterOrder( [ 'drawable' , 'gc' ], obj) + } + ] +, FillPoly: + [ function(obj, cb) { + var format = 'CxSLLCCxx' + , args = parameterOrder( [ 'drawable' , 'gc' , 'shape' , 'coordinate_mode' ], obj) + } + ] +, PolyFillRectangle: + [ function(obj, cb) { + var format = 'CxSLL' + , args = parameterOrder( [ 'drawable' , 'gc' ], obj) + } + ] +, PolyFillArc: + [ function(obj, cb) { + var format = 'CxSLL' + , args = parameterOrder( [ 'drawable' , 'gc' ], obj) + } + ] +, PutImage: + [ function(obj, cb) { + var format = 'CCSLLSSssCCxx' + , args = parameterOrder( [ 'format' , 'drawable' , 'gc' , 'width' , 'height' , 'dst_x' , 'dst_y' , 'left_pad' , 'depth' ], obj) + } + ] +, GetImage: + [ function(obj, cb) { + var format = 'CCSLssSSL' + , args = parameterOrder( [ 'format' , 'drawable' , 'x' , 'y' , 'width' , 'height' , 'plane_mask' ], obj) + } + , function(buf, format) { + + } + ] +, PolyText8: + [ function(obj, cb) { + var format = 'CxSLLss' + , args = parameterOrder( [ 'drawable' , 'gc' , 'x' , 'y' ], obj) + } + ] +, PolyText16: + [ function(obj, cb) { + var format = 'CxSLLss' + , args = parameterOrder( [ 'drawable' , 'gc' , 'x' , 'y' ], obj) + } + ] +, ImageText8: + [ function(obj, cb) { + var format = 'CCSLLss' + , args = parameterOrder( [ 'string_len' , 'drawable' , 'gc' , 'x' , 'y' ], obj) + } + ] +, ImageText16: + [ function(obj, cb) { + var format = 'CCSLLss' + , args = parameterOrder( [ 'string_len' , 'drawable' , 'gc' , 'x' , 'y' ], obj) + } + ] +, CreateColormap: + [ function(obj, cb) { + var format = 'CCSLLL' + , args = parameterOrder( [ 'alloc' , 'mid' , 'window' , 'visual' ], obj) + } + ] +, FreeColormap: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'cmap' ], obj) + } + ] +, CopyColormapAndFree: + [ function(obj, cb) { + var format = 'CxSLL' + , args = parameterOrder( [ 'mid' , 'src_cmap' ], obj) + } + ] +, InstallColormap: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'cmap' ], obj) + } + ] +, UninstallColormap: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'cmap' ], obj) + } + ] +, ListInstalledColormaps: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'window' ], obj) + } + , function(buf, format) { + + } + ] +, AllocColor: + [ function(obj, cb) { + var format = 'CxSLSSSxx' + , args = parameterOrder( [ 'cmap' , 'red' , 'green' , 'blue' ], obj) + } + , function(buf, format) { + + } + ] +, AllocNamedColor: + [ function(obj, cb) { + var format = 'CxSLSxx' + , args = parameterOrder( [ 'cmap' , 'name_len' ], obj) + } + , function(buf, format) { + + } + ] +, AllocColorCells: + [ function(obj, cb) { + var format = 'CCSLSS' + , args = parameterOrder( [ 'contiguous' , 'cmap' , 'colors' , 'planes' ], obj) + } + , function(buf, format) { + + } + ] +, AllocColorPlanes: + [ function(obj, cb) { + var format = 'CCSLSSSS' + , args = parameterOrder( [ 'contiguous' , 'cmap' , 'colors' , 'reds' , 'greens' , 'blues' ], obj) + } + , function(buf, format) { + + } + ] +, FreeColors: + [ function(obj, cb) { + var format = 'CxSLL' + , args = parameterOrder( [ 'cmap' , 'plane_mask' ], obj) + } + ] +, StoreColors: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'cmap' ], obj) + } + ] +, StoreNamedColor: + [ function(obj, cb) { + var format = 'CCSLLSxx' + , args = parameterOrder( [ 'flags' , 'cmap' , 'pixel' , 'name_len' ], obj) + } + ] +, QueryColors: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'cmap' ], obj) + } + , function(buf, format) { + + } + ] +, LookupColor: + [ function(obj, cb) { + var format = 'CxSLSxx' + , args = parameterOrder( [ 'cmap' , 'name_len' ], obj) + } + , function(buf, format) { + + } + ] +, CreateCursor: + [ function(obj, cb) { + var format = 'CxSLLLSSSSSSSS' + , args = parameterOrder( [ 'cid' , 'source' , 'mask' , 'fore_red' , 'fore_green' , 'fore_blue' , 'back_red' , 'back_green' , 'back_blue' , 'x' , 'y' ], obj) + } + ] +, CreateGlyphCursor: + [ function(obj, cb) { + var format = 'CxSLLLSSSSSSSS' + , args = parameterOrder( [ 'cid' , 'source_font' , 'mask_font' , 'source_char' , 'mask_char' , 'fore_red' , 'fore_green' , 'fore_blue' , 'back_red' , 'back_green' , 'back_blue' ], obj) + } + ] +, FreeCursor: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'cursor' ], obj) + } + ] +, RecolorCursor: + [ function(obj, cb) { + var format = 'CxSLSSSSSS' + , args = parameterOrder( [ 'cursor' , 'fore_red' , 'fore_green' , 'fore_blue' , 'back_red' , 'back_green' , 'back_blue' ], obj) + } + ] +, QueryBestSize: + [ function(obj, cb) { + var format = 'CCSLSS' + , args = parameterOrder( [ '_class' , 'drawable' , 'width' , 'height' ], obj) + } + , function(buf, format) { + + } + ] +, QueryExtension: + [ function(obj, cb) { + var format = 'CxSSxx' + , args = parameterOrder( [ 'name_len' ], obj) + } + , function(buf, format) { + + } + ] +, ListExtensions: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + , function(buf, format) { + + } + ] +, ChangeKeyboardMapping: + [ function(obj, cb) { + var format = 'CCSCC' + , args = parameterOrder( [ 'keycode_count' , 'first_keycode' , 'keysyms_per_keycode' ], obj) + } + ] +, GetKeyboardMapping: + [ function(obj, cb) { + var format = 'CxSCC' + , args = parameterOrder( [ 'first_keycode' , 'count' ], obj) + } + , function(buf, format) { + + } + ] +, ChangeKeyboardControl: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + ] +, GetKeyboardControl: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + , function(buf, format) { + + } + ] +, Bell: + [ function(obj, cb) { + var format = 'CCS' + , args = parameterOrder( [ 'percent' ], obj) + } + ] +, ChangePointerControl: + [ function(obj, cb) { + var format = 'CxSsssCC' + , args = parameterOrder( [ 'acceleration_numerator' , 'acceleration_denominator' , 'threshold' , 'do_acceleration' , 'do_threshold' ], obj) + } + ] +, GetPointerControl: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + , function(buf, format) { + + } + ] +, SetScreenSaver: + [ function(obj, cb) { + var format = 'CxSssCC' + , args = parameterOrder( [ 'timeout' , 'interval' , 'prefer_blanking' , 'allow_exposures' ], obj) + } + ] +, GetScreenSaver: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + , function(buf, format) { + + } + ] +, ChangeHosts: + [ function(obj, cb) { + var format = 'CCSCxS' + , args = parameterOrder( [ 'mode' , 'family' , 'address_len' ], obj) + } + ] +, ListHosts: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + , function(buf, format) { + + } + ] +, SetAccessControl: + [ function(obj, cb) { + var format = 'CCS' + , args = parameterOrder( [ 'mode' ], obj) + } + ] +, SetCloseDownMode: + [ function(obj, cb) { + var format = 'CCS' + , args = parameterOrder( [ 'mode' ], obj) + } + ] +, KillClient: + [ function(obj, cb) { + var format = 'CxSL' + , args = parameterOrder( [ 'resource' ], obj) + } + ] +, RotateProperties: + [ function(obj, cb) { + var format = 'CxSLSs' + , args = parameterOrder( [ 'window' , 'atoms_len' , 'delta' ], obj) + } + ] +, ForceScreenSaver: + [ function(obj, cb) { + var format = 'CCS' + , args = parameterOrder( [ 'mode' ], obj) + } + ] +, SetPointerMapping: + [ function(obj, cb) { + var format = 'CCS' + , args = parameterOrder( [ 'map_len' ], obj) + } + , function(buf, format) { + + } + ] +, GetPointerMapping: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + , function(buf, format) { + + } + ] +, SetModifierMapping: + [ function(obj, cb) { + var format = 'CCS' + , args = parameterOrder( [ 'keycodes_per_modifier' ], obj) + } + , function(buf, format) { + + } + ] +, GetModifierMapping: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + , function(buf, format) { + + } + ] +, NoOperation: + [ function(obj, cb) { + var format = 'CxS' + , args = parameterOrder( ], obj) + } + ] +} \ No newline at end of file diff --git a/stubs/requests.tpl b/stubs/requests.tpl new file mode 100644 index 0000000..b4da379 --- /dev/null +++ b/stubs/requests.tpl @@ -0,0 +1,37 @@ +var packMask = require('./valuemask') + , valueMask = { +{{each(requestName, request) requests}} +{{if getValueMask(requestName) }} + ${requestName}: + {{each(i, value) getValueMask(requestName)}} + ${getDelim(i)} ${value.name}: ${enumVal(value)} + {{/each}} + } +{{/if}} +{{/each}} +} + +function parameterOrder(params, obj) { + return params.map(function(name) { + return obj[name] + }) +} + +module.exports = +{{each(i, reqName) Object.keys(requests)}} +${getDelim(i)} ${reqName}: + [ function(obj, cb) { + var format = '{{if prePackFirst(requests[reqName])}}C${getBufPack(requests[reqName].field && requests[reqName].field[0])}{{else}}S{{/if}}S{{each(j, field) requests[reqName].field}}{{if !(prePackFirst(requests[reqName]) && j === 0)}}${getBufPack(field)}{{/if}}{{/each}}' + , args = parameterOrder({{each(j, field) requests[reqName].field}}{{if field.fieldType == 'field'}} ${getDelim(firstType(requests[reqName].field, 'field') != field, '[')} '${prepPropName(field.name)}'{{/if}}{{/each}} ], obj) + {{if getValueMask(reqName)}} + , packed = packMask(valueMask[${reqName}], obj.${getValueMaskName(requests)}) + {{/if}} + } + {{if requests[reqName].reply}} + , function(buf, format) { + + } + {{/if}} + ] +{{/each}} +} From e7a4e89e4f213eaddc2b86d89b6c485847d91145 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Mon, 5 Sep 2011 02:54:33 -0500 Subject: [PATCH 04/43] updates info for valuemasks. Still need to calculate the length. Still need to handle normal list types. --- generateFiles.js | 45 +- lib/x11/autogen/requests.js | 1321 +++++++++++++++++++++++++++++++---- stubs/requests.tpl | 35 +- 3 files changed, 1273 insertions(+), 128 deletions(-) diff --git a/generateFiles.js b/generateFiles.js index 9907491..d66d4b0 100644 --- a/generateFiles.js +++ b/generateFiles.js @@ -11,6 +11,11 @@ var fs = require('fs') , prepPropName: prepPropName , firstType: firstType , prePackFirst: prePackFirst + , isValueMask: isValueMask + , isListAccountedFor: isListAccountedFor + , bufPackType: bufPackType + , requestLengthIndex: requestLengthIndex + , listLenIndex: listLenIndex } ;['requests'].forEach(function(name) { @@ -43,6 +48,10 @@ function getBufPack(field) { : typeLookup.packTypes[field.type] } +function bufPackType(type) { + return typeLookup.packTypes[type] +} + function prepPropName(short) { return short === 'new' ? '_new' : short === 'class' ? '_class' @@ -58,6 +67,40 @@ function firstType(field, type) { }) && f } -function prePackFirst(request) { +function prePackFirst(request, j) { + if (j != null) console.log(request.opcode < 128, j, request.field[0]) return request.opcode < 128 } + +function requestLengthIndex(request) { + return prePackFirst(request) && request.field && request.field[0].fieldType != 'pad' ? 2 : 1 +} + +function isValueMask(field) { + return field.fieldType == 'valueparam' +} + +function listLenName(field) { + return field.fieldType == 'list' ? field.name + '_len' + : field['value-mask-name'] +} + +function isListAccountedFor(request, field) { + var name = listLenName(field) + return field.name == 'keysyms' + || field.name == 'keycodes' + || field.name == 'event' + || !request.field.every(function(f) { + return name != f.name + }) +} + +function listLenIndex(request, field) { + var index = 1 + , name = listLenName(field) + for (var i = 0, len = request.field.length; i < len; ++i) { + if (request.field[i].name == name) return index + if (request.field[i].fieldType == 'field') index++; + } +} + diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index bbe0e97..899754d 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -46,7 +46,7 @@ var packMask = require('./valuemask') function parameterOrder(params, obj) { return params.map(function(name) { - return obj[name] + return name && obj[name] }) } @@ -54,20 +54,59 @@ module.exports = { CreateWindow: [ function(obj, cb) { var format = 'CCSLLssSSSSL' - , args = parameterOrder( [ 'depth' , 'wid' , 'parent' , 'x' , 'y' , 'width' , 'height' , 'border_width' , '_class' , 'visual' ], obj) - , packed = packMask(valueMask[CreateWindow], obj.) + , args = parameterOrder([ null + , 'depth' + , null + , 'wid' + , 'parent' + , 'x' + , 'y' + , 'width' + , 'height' + , 'border_width' + , '_class' + , 'visual' + ], obj) + , packed = packMask(valueMask[CreateWindow], obj.value_mask) + format += "L" + args.push(packed[0]) + args = args.concat(packed[1]) + format += new Array(packed[1].length + 1).join("L") + args[0] = 1 + args[2] = 123//get to this later + + return [format, args] } ] , ChangeWindowAttributes: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + , packed = packMask(valueMask[ChangeWindowAttributes], obj.value_mask) + format += "L" + args.push(packed[0]) + args = args.concat(packed[1]) + format += new Array(packed[1].length + 1).join("L") + args[0] = 2 + args[1] = 123//get to this later + + return [format, args] } ] , GetWindowAttributes: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + args[0] = 3 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -76,67 +115,154 @@ module.exports = , DestroyWindow: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + args[0] = 4 + args[1] = 123//get to this later + + return [format, args] } ] , DestroySubwindows: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + args[0] = 5 + args[1] = 123//get to this later + + return [format, args] } ] , ChangeSaveSet: [ function(obj, cb) { var format = 'CCSL' - , args = parameterOrder( [ 'mode' , 'window' ], obj) + , args = parameterOrder([ null + , 'mode' + , null + , 'window' + ], obj) + args[0] = 6 + args[2] = 123//get to this later + + return [format, args] } ] , ReparentWindow: [ function(obj, cb) { var format = 'CxSLLss' - , args = parameterOrder( [ 'window' , 'parent' , 'x' , 'y' ], obj) + , args = parameterOrder([ null + , null + , 'window' + , 'parent' + , 'x' + , 'y' + ], obj) + args[0] = 7 + args[1] = 123//get to this later + + return [format, args] } ] , MapWindow: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + args[0] = 8 + args[1] = 123//get to this later + + return [format, args] } ] , MapSubwindows: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + args[0] = 9 + args[1] = 123//get to this later + + return [format, args] } ] , UnmapWindow: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + args[0] = 10 + args[1] = 123//get to this later + + return [format, args] } ] , UnmapSubwindows: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + args[0] = 11 + args[1] = 123//get to this later + + return [format, args] } ] , ConfigureWindow: [ function(obj, cb) { var format = 'CxSLSxx' - , args = parameterOrder( [ 'window' , 'value_mask' ], obj) + , args = parameterOrder([ null + , null + , 'window' + , 'value_mask' + ], obj) + , packed = packMask(valueMask[ConfigureWindow], obj.value_mask) + args[2] = packed[0] + args = args.concat(packed[1]) + format += new Array(packed[1].length + 1).join("L") + args[0] = 12 + args[1] = 123//get to this later + + return [format, args] } ] , CirculateWindow: [ function(obj, cb) { var format = 'CCSL' - , args = parameterOrder( [ 'direction' , 'window' ], obj) + , args = parameterOrder([ null + , 'direction' + , null + , 'window' + ], obj) + args[0] = 13 + args[2] = 123//get to this later + + return [format, args] } ] , GetGeometry: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'drawable' ], obj) + , args = parameterOrder([ null + , null + , 'drawable' + ], obj) + args[0] = 14 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -145,7 +271,14 @@ module.exports = , QueryTree: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + args[0] = 15 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -154,7 +287,15 @@ module.exports = , InternAtom: [ function(obj, cb) { var format = 'CCSSxx' - , args = parameterOrder( [ 'only_if_exists' , 'name_len' ], obj) + , args = parameterOrder([ null + , 'only_if_exists' + , null + , 'name_len' + ], obj) + args[0] = 16 + args[2] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -163,7 +304,14 @@ module.exports = , GetAtomName: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'atom' ], obj) + , args = parameterOrder([ null + , null + , 'atom' + ], obj) + args[0] = 17 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -172,19 +320,51 @@ module.exports = , ChangeProperty: [ function(obj, cb) { var format = 'CCSLLLCxxxL' - , args = parameterOrder( [ 'mode' , 'window' , 'property' , 'type' , 'format' , 'data_len' ], obj) + , args = parameterOrder([ null + , 'mode' + , null + , 'window' + , 'property' + , 'type' + , 'format' + , 'data_len' + ], obj) + args[0] = 18 + args[2] = 123//get to this later + + return [format, args] } ] , DeleteProperty: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder( [ 'window' , 'property' ], obj) + , args = parameterOrder([ null + , null + , 'window' + , 'property' + ], obj) + args[0] = 19 + args[1] = 123//get to this later + + return [format, args] } ] , GetProperty: [ function(obj, cb) { var format = 'CCSLLLLL' - , args = parameterOrder( [ '_delete' , 'window' , 'property' , 'type' , 'long_offset' , 'long_length' ], obj) + , args = parameterOrder([ null + , '_delete' + , null + , 'window' + , 'property' + , 'type' + , 'long_offset' + , 'long_length' + ], obj) + args[0] = 20 + args[2] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -193,7 +373,14 @@ module.exports = , ListProperties: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + args[0] = 21 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -202,13 +389,29 @@ module.exports = , SetSelectionOwner: [ function(obj, cb) { var format = 'CxSLLundefined' - , args = parameterOrder( [ 'owner' , 'selection' , 'time' ], obj) + , args = parameterOrder([ null + , null + , 'owner' + , 'selection' + , 'time' + ], obj) + args[0] = 22 + args[1] = 123//get to this later + + return [format, args] } ] , GetSelectionOwner: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'selection' ], obj) + , args = parameterOrder([ null + , null + , 'selection' + ], obj) + args[0] = 23 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -217,19 +420,53 @@ module.exports = , ConvertSelection: [ function(obj, cb) { var format = 'CxSLLLLundefined' - , args = parameterOrder( [ 'requestor' , 'selection' , 'target' , 'property' , 'time' ], obj) + , args = parameterOrder([ null + , null + , 'requestor' + , 'selection' + , 'target' + , 'property' + , 'time' + ], obj) + args[0] = 24 + args[1] = 123//get to this later + + return [format, args] } ] , SendEvent: [ function(obj, cb) { var format = 'CCSLL' - , args = parameterOrder( [ 'propagate' , 'destination' , 'event_mask' ], obj) + , args = parameterOrder([ null + , 'propagate' + , null + , 'destination' + , 'event_mask' + ], obj) + args[0] = 25 + args[2] = 123//get to this later + + return [format, args] } ] , GrabPointer: [ function(obj, cb) { var format = 'CCSLSCCLLundefined' - , args = parameterOrder( [ 'owner_events' , 'grab_window' , 'event_mask' , 'pointer_mode' , 'keyboard_mode' , 'confine_to' , 'cursor' , 'time' ], obj) + , args = parameterOrder([ null + , 'owner_events' + , null + , 'grab_window' + , 'event_mask' + , 'pointer_mode' + , 'keyboard_mode' + , 'confine_to' + , 'cursor' + , 'time' + ], obj) + args[0] = 26 + args[2] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -238,31 +475,82 @@ module.exports = , UngrabPointer: [ function(obj, cb) { var format = 'CxSundefined' - , args = parameterOrder( [ 'time' ], obj) + , args = parameterOrder([ null + , null + , 'time' + ], obj) + args[0] = 27 + args[1] = 123//get to this later + + return [format, args] } ] , GrabButton: [ function(obj, cb) { var format = 'CCSLSCCLLCxS' - , args = parameterOrder( [ 'owner_events' , 'grab_window' , 'event_mask' , 'pointer_mode' , 'keyboard_mode' , 'confine_to' , 'cursor' , 'button' , 'modifiers' ], obj) + , args = parameterOrder([ null + , 'owner_events' + , null + , 'grab_window' + , 'event_mask' + , 'pointer_mode' + , 'keyboard_mode' + , 'confine_to' + , 'cursor' + , 'button' + , 'modifiers' + ], obj) + args[0] = 28 + args[2] = 123//get to this later + + return [format, args] } ] , UngrabButton: [ function(obj, cb) { var format = 'CCSLSxx' - , args = parameterOrder( [ 'button' , 'grab_window' , 'modifiers' ], obj) + , args = parameterOrder([ null + , 'button' + , null + , 'grab_window' + , 'modifiers' + ], obj) + args[0] = 29 + args[2] = 123//get to this later + + return [format, args] } ] , ChangeActivePointerGrab: [ function(obj, cb) { var format = 'CxSLundefinedSxx' - , args = parameterOrder( [ 'cursor' , 'time' , 'event_mask' ], obj) + , args = parameterOrder([ null + , null + , 'cursor' + , 'time' + , 'event_mask' + ], obj) + args[0] = 30 + args[1] = 123//get to this later + + return [format, args] } ] , GrabKeyboard: [ function(obj, cb) { var format = 'CCSLundefinedCCxx' - , args = parameterOrder( [ 'owner_events' , 'grab_window' , 'time' , 'pointer_mode' , 'keyboard_mode' ], obj) + , args = parameterOrder([ null + , 'owner_events' + , null + , 'grab_window' + , 'time' + , 'pointer_mode' + , 'keyboard_mode' + ], obj) + args[0] = 31 + args[2] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -271,43 +559,98 @@ module.exports = , UngrabKeyboard: [ function(obj, cb) { var format = 'CxSundefined' - , args = parameterOrder( [ 'time' ], obj) + , args = parameterOrder([ null + , null + , 'time' + ], obj) + args[0] = 32 + args[1] = 123//get to this later + + return [format, args] } ] , GrabKey: [ function(obj, cb) { var format = 'CCSLSCCCxxx' - , args = parameterOrder( [ 'owner_events' , 'grab_window' , 'modifiers' , 'key' , 'pointer_mode' , 'keyboard_mode' ], obj) + , args = parameterOrder([ null + , 'owner_events' + , null + , 'grab_window' + , 'modifiers' + , 'key' + , 'pointer_mode' + , 'keyboard_mode' + ], obj) + args[0] = 33 + args[2] = 123//get to this later + + return [format, args] } ] , UngrabKey: [ function(obj, cb) { var format = 'CCSLSxx' - , args = parameterOrder( [ 'key' , 'grab_window' , 'modifiers' ], obj) + , args = parameterOrder([ null + , 'key' + , null + , 'grab_window' + , 'modifiers' + ], obj) + args[0] = 34 + args[2] = 123//get to this later + + return [format, args] } ] , AllowEvents: [ function(obj, cb) { var format = 'CCSundefined' - , args = parameterOrder( [ 'mode' , 'time' ], obj) + , args = parameterOrder([ null + , 'mode' + , null + , 'time' + ], obj) + args[0] = 35 + args[2] = 123//get to this later + + return [format, args] } ] , GrabServer: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 36 + args[1] = 123//get to this later + + return [format, args] } ] , UngrabServer: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 37 + args[1] = 123//get to this later + + return [format, args] } ] , QueryPointer: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + args[0] = 38 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -316,7 +659,16 @@ module.exports = , GetMotionEvents: [ function(obj, cb) { var format = 'CxSLundefinedundefined' - , args = parameterOrder( [ 'window' , 'start' , 'stop' ], obj) + , args = parameterOrder([ null + , null + , 'window' + , 'start' + , 'stop' + ], obj) + args[0] = 39 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -325,7 +677,17 @@ module.exports = , TranslateCoordinates: [ function(obj, cb) { var format = 'CxSLLss' - , args = parameterOrder( [ 'src_window' , 'dst_window' , 'src_x' , 'src_y' ], obj) + , args = parameterOrder([ null + , null + , 'src_window' + , 'dst_window' + , 'src_x' + , 'src_y' + ], obj) + args[0] = 40 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -334,19 +696,48 @@ module.exports = , WarpPointer: [ function(obj, cb) { var format = 'CxSLLssSSss' - , args = parameterOrder( [ 'src_window' , 'dst_window' , 'src_x' , 'src_y' , 'src_width' , 'src_height' , 'dst_x' , 'dst_y' ], obj) + , args = parameterOrder([ null + , null + , 'src_window' + , 'dst_window' + , 'src_x' + , 'src_y' + , 'src_width' + , 'src_height' + , 'dst_x' + , 'dst_y' + ], obj) + args[0] = 41 + args[1] = 123//get to this later + + return [format, args] } ] , SetInputFocus: [ function(obj, cb) { var format = 'CCSLundefined' - , args = parameterOrder( [ 'revert_to' , 'focus' , 'time' ], obj) + , args = parameterOrder([ null + , 'revert_to' + , null + , 'focus' + , 'time' + ], obj) + args[0] = 42 + args[2] = 123//get to this later + + return [format, args] } ] , GetInputFocus: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 43 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -355,7 +746,13 @@ module.exports = , QueryKeymap: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 44 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -364,19 +761,41 @@ module.exports = , OpenFont: [ function(obj, cb) { var format = 'CxSLSxx' - , args = parameterOrder( [ 'fid' , 'name_len' ], obj) + , args = parameterOrder([ null + , null + , 'fid' + , 'name_len' + ], obj) + args[0] = 45 + args[1] = 123//get to this later + + return [format, args] } ] , CloseFont: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'font' ], obj) + , args = parameterOrder([ null + , null + , 'font' + ], obj) + args[0] = 46 + args[1] = 123//get to this later + + return [format, args] } ] , QueryFont: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'font' ], obj) + , args = parameterOrder([ null + , null + , 'font' + ], obj) + args[0] = 47 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -385,7 +804,15 @@ module.exports = , QueryTextExtents: [ function(obj, cb) { var format = 'CCSL' - , args = parameterOrder( [ 'font' ], obj) + , args = parameterOrder([ null + , 'odd_length' + , null + , 'font' + ], obj) + args[0] = 48 + args[2] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -394,7 +821,15 @@ module.exports = , ListFonts: [ function(obj, cb) { var format = 'CxSSS' - , args = parameterOrder( [ 'max_names' , 'pattern_len' ], obj) + , args = parameterOrder([ null + , null + , 'max_names' + , 'pattern_len' + ], obj) + args[0] = 49 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -403,7 +838,15 @@ module.exports = , ListFontsWithInfo: [ function(obj, cb) { var format = 'CxSSS' - , args = parameterOrder( [ 'max_names' , 'pattern_len' ], obj) + , args = parameterOrder([ null + , null + , 'max_names' + , 'pattern_len' + ], obj) + args[0] = 50 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -412,13 +855,26 @@ module.exports = , SetFontPath: [ function(obj, cb) { var format = 'CxSS' - , args = parameterOrder( [ 'font_qty' ], obj) + , args = parameterOrder([ null + , null + , 'font_qty' + ], obj) + args[0] = 51 + args[1] = 123//get to this later + + return [format, args] } ] , GetFontPath: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 52 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -427,128 +883,344 @@ module.exports = , CreatePixmap: [ function(obj, cb) { var format = 'CCSLLSS' - , args = parameterOrder( [ 'depth' , 'pid' , 'drawable' , 'width' , 'height' ], obj) + , args = parameterOrder([ null + , 'depth' + , null + , 'pid' + , 'drawable' + , 'width' + , 'height' + ], obj) + args[0] = 53 + args[2] = 123//get to this later + + return [format, args] } ] , FreePixmap: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'pixmap' ], obj) + , args = parameterOrder([ null + , null + , 'pixmap' + ], obj) + args[0] = 54 + args[1] = 123//get to this later + + return [format, args] } ] , CreateGC: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder( [ 'cid' , 'drawable' ], obj) - , packed = packMask(valueMask[CreateGC], obj.) + , args = parameterOrder([ null + , null + , 'cid' + , 'drawable' + ], obj) + , packed = packMask(valueMask[CreateGC], obj.value_mask) + format += "L" + args.push(packed[0]) + args = args.concat(packed[1]) + format += new Array(packed[1].length + 1).join("L") + args[0] = 55 + args[1] = 123//get to this later + + return [format, args] } ] , ChangeGC: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'gc' ], obj) + , args = parameterOrder([ null + , null + , 'gc' + ], obj) + , packed = packMask(valueMask[ChangeGC], obj.value_mask) + format += "L" + args.push(packed[0]) + args = args.concat(packed[1]) + format += new Array(packed[1].length + 1).join("L") + args[0] = 56 + args[1] = 123//get to this later + + return [format, args] } ] , CopyGC: [ function(obj, cb) { var format = 'CxSLLL' - , args = parameterOrder( [ 'src_gc' , 'dst_gc' , 'value_mask' ], obj) + , args = parameterOrder([ null + , null + , 'src_gc' + , 'dst_gc' + , 'value_mask' + ], obj) + args[0] = 57 + args[1] = 123//get to this later + + return [format, args] } ] , SetDashes: [ function(obj, cb) { var format = 'CxSLSS' - , args = parameterOrder( [ 'gc' , 'dash_offset' , 'dashes_len' ], obj) + , args = parameterOrder([ null + , null + , 'gc' + , 'dash_offset' + , 'dashes_len' + ], obj) + args[0] = 58 + args[1] = 123//get to this later + + return [format, args] } ] , SetClipRectangles: [ function(obj, cb) { var format = 'CCSLss' - , args = parameterOrder( [ 'ordering' , 'gc' , 'clip_x_origin' , 'clip_y_origin' ], obj) + , args = parameterOrder([ null + , 'ordering' + , null + , 'gc' + , 'clip_x_origin' + , 'clip_y_origin' + ], obj) + args[0] = 59 + args[2] = 123//get to this later + + return [format, args] } ] , FreeGC: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'gc' ], obj) + , args = parameterOrder([ null + , null + , 'gc' + ], obj) + args[0] = 60 + args[1] = 123//get to this later + + return [format, args] } ] , ClearArea: [ function(obj, cb) { var format = 'CCSLssSS' - , args = parameterOrder( [ 'exposures' , 'window' , 'x' , 'y' , 'width' , 'height' ], obj) + , args = parameterOrder([ null + , 'exposures' + , null + , 'window' + , 'x' + , 'y' + , 'width' + , 'height' + ], obj) + args[0] = 61 + args[2] = 123//get to this later + + return [format, args] } ] , CopyArea: [ function(obj, cb) { var format = 'CxSLLLssssSS' - , args = parameterOrder( [ 'src_drawable' , 'dst_drawable' , 'gc' , 'src_x' , 'src_y' , 'dst_x' , 'dst_y' , 'width' , 'height' ], obj) + , args = parameterOrder([ null + , null + , 'src_drawable' + , 'dst_drawable' + , 'gc' + , 'src_x' + , 'src_y' + , 'dst_x' + , 'dst_y' + , 'width' + , 'height' + ], obj) + args[0] = 62 + args[1] = 123//get to this later + + return [format, args] } ] , CopyPlane: [ function(obj, cb) { var format = 'CxSLLLssssSSL' - , args = parameterOrder( [ 'src_drawable' , 'dst_drawable' , 'gc' , 'src_x' , 'src_y' , 'dst_x' , 'dst_y' , 'width' , 'height' , 'bit_plane' ], obj) + , args = parameterOrder([ null + , null + , 'src_drawable' + , 'dst_drawable' + , 'gc' + , 'src_x' + , 'src_y' + , 'dst_x' + , 'dst_y' + , 'width' + , 'height' + , 'bit_plane' + ], obj) + args[0] = 63 + args[1] = 123//get to this later + + return [format, args] } ] , PolyPoint: [ function(obj, cb) { var format = 'CCSLL' - , args = parameterOrder( [ 'coordinate_mode' , 'drawable' , 'gc' ], obj) + , args = parameterOrder([ null + , 'coordinate_mode' + , null + , 'drawable' + , 'gc' + ], obj) + args[0] = 64 + args[2] = 123//get to this later + + return [format, args] } ] , PolyLine: [ function(obj, cb) { var format = 'CCSLL' - , args = parameterOrder( [ 'coordinate_mode' , 'drawable' , 'gc' ], obj) + , args = parameterOrder([ null + , 'coordinate_mode' + , null + , 'drawable' + , 'gc' + ], obj) + args[0] = 65 + args[2] = 123//get to this later + + return [format, args] } ] , PolySegment: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder( [ 'drawable' , 'gc' ], obj) + , args = parameterOrder([ null + , null + , 'drawable' + , 'gc' + ], obj) + args[0] = 66 + args[1] = 123//get to this later + + return [format, args] } ] , PolyRectangle: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder( [ 'drawable' , 'gc' ], obj) + , args = parameterOrder([ null + , null + , 'drawable' + , 'gc' + ], obj) + args[0] = 67 + args[1] = 123//get to this later + + return [format, args] } ] , PolyArc: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder( [ 'drawable' , 'gc' ], obj) + , args = parameterOrder([ null + , null + , 'drawable' + , 'gc' + ], obj) + args[0] = 68 + args[1] = 123//get to this later + + return [format, args] } ] , FillPoly: [ function(obj, cb) { var format = 'CxSLLCCxx' - , args = parameterOrder( [ 'drawable' , 'gc' , 'shape' , 'coordinate_mode' ], obj) + , args = parameterOrder([ null + , null + , 'drawable' + , 'gc' + , 'shape' + , 'coordinate_mode' + ], obj) + args[0] = 69 + args[1] = 123//get to this later + + return [format, args] } ] , PolyFillRectangle: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder( [ 'drawable' , 'gc' ], obj) + , args = parameterOrder([ null + , null + , 'drawable' + , 'gc' + ], obj) + args[0] = 70 + args[1] = 123//get to this later + + return [format, args] } ] , PolyFillArc: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder( [ 'drawable' , 'gc' ], obj) + , args = parameterOrder([ null + , null + , 'drawable' + , 'gc' + ], obj) + args[0] = 71 + args[1] = 123//get to this later + + return [format, args] } ] , PutImage: [ function(obj, cb) { var format = 'CCSLLSSssCCxx' - , args = parameterOrder( [ 'format' , 'drawable' , 'gc' , 'width' , 'height' , 'dst_x' , 'dst_y' , 'left_pad' , 'depth' ], obj) + , args = parameterOrder([ null + , 'format' + , null + , 'drawable' + , 'gc' + , 'width' + , 'height' + , 'dst_x' + , 'dst_y' + , 'left_pad' + , 'depth' + ], obj) + args[0] = 72 + args[2] = 123//get to this later + + return [format, args] } ] , GetImage: [ function(obj, cb) { var format = 'CCSLssSSL' - , args = parameterOrder( [ 'format' , 'drawable' , 'x' , 'y' , 'width' , 'height' , 'plane_mask' ], obj) + , args = parameterOrder([ null + , 'format' + , null + , 'drawable' + , 'x' + , 'y' + , 'width' + , 'height' + , 'plane_mask' + ], obj) + args[0] = 73 + args[2] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -557,61 +1229,149 @@ module.exports = , PolyText8: [ function(obj, cb) { var format = 'CxSLLss' - , args = parameterOrder( [ 'drawable' , 'gc' , 'x' , 'y' ], obj) + , args = parameterOrder([ null + , null + , 'drawable' + , 'gc' + , 'x' + , 'y' + ], obj) + args[0] = 74 + args[1] = 123//get to this later + + return [format, args] } ] , PolyText16: [ function(obj, cb) { var format = 'CxSLLss' - , args = parameterOrder( [ 'drawable' , 'gc' , 'x' , 'y' ], obj) + , args = parameterOrder([ null + , null + , 'drawable' + , 'gc' + , 'x' + , 'y' + ], obj) + args[0] = 75 + args[1] = 123//get to this later + + return [format, args] } ] , ImageText8: [ function(obj, cb) { var format = 'CCSLLss' - , args = parameterOrder( [ 'string_len' , 'drawable' , 'gc' , 'x' , 'y' ], obj) + , args = parameterOrder([ null + , 'string_len' + , null + , 'drawable' + , 'gc' + , 'x' + , 'y' + ], obj) + args[0] = 76 + args[2] = 123//get to this later + + return [format, args] } ] , ImageText16: [ function(obj, cb) { var format = 'CCSLLss' - , args = parameterOrder( [ 'string_len' , 'drawable' , 'gc' , 'x' , 'y' ], obj) + , args = parameterOrder([ null + , 'string_len' + , null + , 'drawable' + , 'gc' + , 'x' + , 'y' + ], obj) + args[0] = 77 + args[2] = 123//get to this later + + return [format, args] } ] , CreateColormap: [ function(obj, cb) { var format = 'CCSLLL' - , args = parameterOrder( [ 'alloc' , 'mid' , 'window' , 'visual' ], obj) + , args = parameterOrder([ null + , 'alloc' + , null + , 'mid' + , 'window' + , 'visual' + ], obj) + args[0] = 78 + args[2] = 123//get to this later + + return [format, args] } ] , FreeColormap: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'cmap' ], obj) + , args = parameterOrder([ null + , null + , 'cmap' + ], obj) + args[0] = 79 + args[1] = 123//get to this later + + return [format, args] } ] , CopyColormapAndFree: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder( [ 'mid' , 'src_cmap' ], obj) + , args = parameterOrder([ null + , null + , 'mid' + , 'src_cmap' + ], obj) + args[0] = 80 + args[1] = 123//get to this later + + return [format, args] } ] , InstallColormap: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'cmap' ], obj) + , args = parameterOrder([ null + , null + , 'cmap' + ], obj) + args[0] = 81 + args[1] = 123//get to this later + + return [format, args] } ] , UninstallColormap: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'cmap' ], obj) + , args = parameterOrder([ null + , null + , 'cmap' + ], obj) + args[0] = 82 + args[1] = 123//get to this later + + return [format, args] } ] , ListInstalledColormaps: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'window' ], obj) + , args = parameterOrder([ null + , null + , 'window' + ], obj) + args[0] = 83 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -620,7 +1380,17 @@ module.exports = , AllocColor: [ function(obj, cb) { var format = 'CxSLSSSxx' - , args = parameterOrder( [ 'cmap' , 'red' , 'green' , 'blue' ], obj) + , args = parameterOrder([ null + , null + , 'cmap' + , 'red' + , 'green' + , 'blue' + ], obj) + args[0] = 84 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -629,7 +1399,15 @@ module.exports = , AllocNamedColor: [ function(obj, cb) { var format = 'CxSLSxx' - , args = parameterOrder( [ 'cmap' , 'name_len' ], obj) + , args = parameterOrder([ null + , null + , 'cmap' + , 'name_len' + ], obj) + args[0] = 85 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -638,7 +1416,17 @@ module.exports = , AllocColorCells: [ function(obj, cb) { var format = 'CCSLSS' - , args = parameterOrder( [ 'contiguous' , 'cmap' , 'colors' , 'planes' ], obj) + , args = parameterOrder([ null + , 'contiguous' + , null + , 'cmap' + , 'colors' + , 'planes' + ], obj) + args[0] = 86 + args[2] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -647,7 +1435,19 @@ module.exports = , AllocColorPlanes: [ function(obj, cb) { var format = 'CCSLSSSS' - , args = parameterOrder( [ 'contiguous' , 'cmap' , 'colors' , 'reds' , 'greens' , 'blues' ], obj) + , args = parameterOrder([ null + , 'contiguous' + , null + , 'cmap' + , 'colors' + , 'reds' + , 'greens' + , 'blues' + ], obj) + args[0] = 87 + args[2] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -656,25 +1456,57 @@ module.exports = , FreeColors: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder( [ 'cmap' , 'plane_mask' ], obj) + , args = parameterOrder([ null + , null + , 'cmap' + , 'plane_mask' + ], obj) + args[0] = 88 + args[1] = 123//get to this later + + return [format, args] } ] , StoreColors: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'cmap' ], obj) + , args = parameterOrder([ null + , null + , 'cmap' + ], obj) + args[0] = 89 + args[1] = 123//get to this later + + return [format, args] } ] , StoreNamedColor: [ function(obj, cb) { var format = 'CCSLLSxx' - , args = parameterOrder( [ 'flags' , 'cmap' , 'pixel' , 'name_len' ], obj) + , args = parameterOrder([ null + , 'flags' + , null + , 'cmap' + , 'pixel' + , 'name_len' + ], obj) + args[0] = 90 + args[2] = 123//get to this later + + return [format, args] } ] , QueryColors: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'cmap' ], obj) + , args = parameterOrder([ null + , null + , 'cmap' + ], obj) + args[0] = 91 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -683,7 +1515,15 @@ module.exports = , LookupColor: [ function(obj, cb) { var format = 'CxSLSxx' - , args = parameterOrder( [ 'cmap' , 'name_len' ], obj) + , args = parameterOrder([ null + , null + , 'cmap' + , 'name_len' + ], obj) + args[0] = 92 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -692,31 +1532,95 @@ module.exports = , CreateCursor: [ function(obj, cb) { var format = 'CxSLLLSSSSSSSS' - , args = parameterOrder( [ 'cid' , 'source' , 'mask' , 'fore_red' , 'fore_green' , 'fore_blue' , 'back_red' , 'back_green' , 'back_blue' , 'x' , 'y' ], obj) + , args = parameterOrder([ null + , null + , 'cid' + , 'source' + , 'mask' + , 'fore_red' + , 'fore_green' + , 'fore_blue' + , 'back_red' + , 'back_green' + , 'back_blue' + , 'x' + , 'y' + ], obj) + args[0] = 93 + args[1] = 123//get to this later + + return [format, args] } ] , CreateGlyphCursor: [ function(obj, cb) { var format = 'CxSLLLSSSSSSSS' - , args = parameterOrder( [ 'cid' , 'source_font' , 'mask_font' , 'source_char' , 'mask_char' , 'fore_red' , 'fore_green' , 'fore_blue' , 'back_red' , 'back_green' , 'back_blue' ], obj) + , args = parameterOrder([ null + , null + , 'cid' + , 'source_font' + , 'mask_font' + , 'source_char' + , 'mask_char' + , 'fore_red' + , 'fore_green' + , 'fore_blue' + , 'back_red' + , 'back_green' + , 'back_blue' + ], obj) + args[0] = 94 + args[1] = 123//get to this later + + return [format, args] } ] , FreeCursor: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'cursor' ], obj) + , args = parameterOrder([ null + , null + , 'cursor' + ], obj) + args[0] = 95 + args[1] = 123//get to this later + + return [format, args] } ] , RecolorCursor: [ function(obj, cb) { var format = 'CxSLSSSSSS' - , args = parameterOrder( [ 'cursor' , 'fore_red' , 'fore_green' , 'fore_blue' , 'back_red' , 'back_green' , 'back_blue' ], obj) + , args = parameterOrder([ null + , null + , 'cursor' + , 'fore_red' + , 'fore_green' + , 'fore_blue' + , 'back_red' + , 'back_green' + , 'back_blue' + ], obj) + args[0] = 96 + args[1] = 123//get to this later + + return [format, args] } ] , QueryBestSize: [ function(obj, cb) { var format = 'CCSLSS' - , args = parameterOrder( [ '_class' , 'drawable' , 'width' , 'height' ], obj) + , args = parameterOrder([ null + , '_class' + , null + , 'drawable' + , 'width' + , 'height' + ], obj) + args[0] = 97 + args[2] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -725,7 +1629,14 @@ module.exports = , QueryExtension: [ function(obj, cb) { var format = 'CxSSxx' - , args = parameterOrder( [ 'name_len' ], obj) + , args = parameterOrder([ null + , null + , 'name_len' + ], obj) + args[0] = 98 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -734,7 +1645,13 @@ module.exports = , ListExtensions: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 99 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -743,13 +1660,30 @@ module.exports = , ChangeKeyboardMapping: [ function(obj, cb) { var format = 'CCSCC' - , args = parameterOrder( [ 'keycode_count' , 'first_keycode' , 'keysyms_per_keycode' ], obj) + , args = parameterOrder([ null + , 'keycode_count' + , null + , 'first_keycode' + , 'keysyms_per_keycode' + ], obj) + args[0] = 100 + args[2] = 123//get to this later + + return [format, args] } ] , GetKeyboardMapping: [ function(obj, cb) { var format = 'CxSCC' - , args = parameterOrder( [ 'first_keycode' , 'count' ], obj) + , args = parameterOrder([ null + , null + , 'first_keycode' + , 'count' + ], obj) + args[0] = 101 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -758,13 +1692,30 @@ module.exports = , ChangeKeyboardControl: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + , packed = packMask(valueMask[ChangeKeyboardControl], obj.value_mask) + format += "L" + args.push(packed[0]) + args = args.concat(packed[1]) + format += new Array(packed[1].length + 1).join("L") + args[0] = 102 + args[1] = 123//get to this later + + return [format, args] } ] , GetKeyboardControl: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 103 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -773,19 +1724,43 @@ module.exports = , Bell: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder( [ 'percent' ], obj) + , args = parameterOrder([ null + , 'percent' + , null + ], obj) + args[0] = 104 + args[2] = 123//get to this later + + return [format, args] } ] , ChangePointerControl: [ function(obj, cb) { var format = 'CxSsssCC' - , args = parameterOrder( [ 'acceleration_numerator' , 'acceleration_denominator' , 'threshold' , 'do_acceleration' , 'do_threshold' ], obj) + , args = parameterOrder([ null + , null + , 'acceleration_numerator' + , 'acceleration_denominator' + , 'threshold' + , 'do_acceleration' + , 'do_threshold' + ], obj) + args[0] = 105 + args[1] = 123//get to this later + + return [format, args] } ] , GetPointerControl: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 106 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -794,13 +1769,29 @@ module.exports = , SetScreenSaver: [ function(obj, cb) { var format = 'CxSssCC' - , args = parameterOrder( [ 'timeout' , 'interval' , 'prefer_blanking' , 'allow_exposures' ], obj) + , args = parameterOrder([ null + , null + , 'timeout' + , 'interval' + , 'prefer_blanking' + , 'allow_exposures' + ], obj) + args[0] = 107 + args[1] = 123//get to this later + + return [format, args] } ] , GetScreenSaver: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 108 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -809,13 +1800,28 @@ module.exports = , ChangeHosts: [ function(obj, cb) { var format = 'CCSCxS' - , args = parameterOrder( [ 'mode' , 'family' , 'address_len' ], obj) + , args = parameterOrder([ null + , 'mode' + , null + , 'family' + , 'address_len' + ], obj) + args[0] = 109 + args[2] = 123//get to this later + + return [format, args] } ] , ListHosts: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 110 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -824,37 +1830,81 @@ module.exports = , SetAccessControl: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder( [ 'mode' ], obj) + , args = parameterOrder([ null + , 'mode' + , null + ], obj) + args[0] = 111 + args[2] = 123//get to this later + + return [format, args] } ] , SetCloseDownMode: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder( [ 'mode' ], obj) + , args = parameterOrder([ null + , 'mode' + , null + ], obj) + args[0] = 112 + args[2] = 123//get to this later + + return [format, args] } ] , KillClient: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder( [ 'resource' ], obj) + , args = parameterOrder([ null + , null + , 'resource' + ], obj) + args[0] = 113 + args[1] = 123//get to this later + + return [format, args] } ] , RotateProperties: [ function(obj, cb) { var format = 'CxSLSs' - , args = parameterOrder( [ 'window' , 'atoms_len' , 'delta' ], obj) + , args = parameterOrder([ null + , null + , 'window' + , 'atoms_len' + , 'delta' + ], obj) + args[0] = 114 + args[1] = 123//get to this later + + return [format, args] } ] , ForceScreenSaver: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder( [ 'mode' ], obj) + , args = parameterOrder([ null + , 'mode' + , null + ], obj) + args[0] = 115 + args[2] = 123//get to this later + + return [format, args] } ] , SetPointerMapping: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder( [ 'map_len' ], obj) + , args = parameterOrder([ null + , 'map_len' + , null + ], obj) + args[0] = 116 + args[2] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -863,7 +1913,13 @@ module.exports = , GetPointerMapping: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 117 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -872,7 +1928,14 @@ module.exports = , SetModifierMapping: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder( [ 'keycodes_per_modifier' ], obj) + , args = parameterOrder([ null + , 'keycodes_per_modifier' + , null + ], obj) + args[0] = 118 + args[2] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -881,7 +1944,13 @@ module.exports = , GetModifierMapping: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 119 + args[1] = 123//get to this later + + return [format, args] } , function(buf, format) { @@ -890,7 +1959,13 @@ module.exports = , NoOperation: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder( ], obj) + , args = parameterOrder([ null + , null + ], obj) + args[0] = 127 + args[1] = 123//get to this later + + return [format, args] } ] } \ No newline at end of file diff --git a/stubs/requests.tpl b/stubs/requests.tpl index b4da379..dd96799 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -13,7 +13,7 @@ var packMask = require('./valuemask') function parameterOrder(params, obj) { return params.map(function(name) { - return obj[name] + return name && obj[name] }) } @@ -22,10 +22,37 @@ module.exports = ${getDelim(i)} ${reqName}: [ function(obj, cb) { var format = '{{if prePackFirst(requests[reqName])}}C${getBufPack(requests[reqName].field && requests[reqName].field[0])}{{else}}S{{/if}}S{{each(j, field) requests[reqName].field}}{{if !(prePackFirst(requests[reqName]) && j === 0)}}${getBufPack(field)}{{/if}}{{/each}}' - , args = parameterOrder({{each(j, field) requests[reqName].field}}{{if field.fieldType == 'field'}} ${getDelim(firstType(requests[reqName].field, 'field') != field, '[')} '${prepPropName(field.name)}'{{/if}}{{/each}} ], obj) - {{if getValueMask(reqName)}} - , packed = packMask(valueMask[${reqName}], obj.${getValueMaskName(requests)}) + , args = parameterOrder([ null + {{if prePackFirst(requests[reqName]) && requests[reqName].field && requests[reqName].field[0].name}} + , '${prepPropName(requests[reqName].field[0].name)}' + {{/if}} + , null + {{each(j, field) requests[reqName].field}} + {{if field.fieldType == 'field' && !(j === 0 && prePackFirst(requests[reqName]))}} + , '${prepPropName(field.name)}' + {{/if}} + {{/each}} + ], obj) + {{each(j, field) requests[reqName].field}} + {{if isListType(field)}} + {{if isValueMask(field)}} + , packed = packMask(valueMask[${reqName}], obj.${prepPropName(field['value-mask-name'])}) + + {{if isListAccountedFor(requests[reqName], field)}} + args[${listLenIndex(requests[reqName], field)}] = packed[0] + {{else}} + format += "${bufPackType(field['value-mask-type'])}" + args.push(packed[0]) + {{/if}} + args = args.concat(packed[1]) + format += new Array(packed[1].length + 1).join("${bufPackType('CARD32')}") + {{/if}} {{/if}} + {{/each}} + args[0] = ${requests[reqName].opcode} + args[${requestLengthIndex(requests[reqName])}] = 123//get to this later + + return [format, args] } {{if requests[reqName].reply}} , function(buf, format) { From 65c74b19001873077eb3df182ace60c056246177 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Mon, 5 Sep 2011 04:31:03 -0500 Subject: [PATCH 05/43] fix a few errors and calulate size of request. --- lib/x11/autogen/requests.js | 403 ++++++++++++++---------------------- lib/x11/valuemask.js | 12 +- stubs/requests.tpl | 36 +++- 3 files changed, 188 insertions(+), 263 deletions(-) diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 899754d..ffeba17 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -1,6 +1,6 @@ -var packMask = require('./valuemask') - , valueMask = { - CreateWindow: +var packMask = require('../valuemask') + , valueMask = + { CreateWindow: { BackPixmap: 1 , BackPixel: 2 , BorderPixmap: 4 @@ -17,7 +17,7 @@ var packMask = require('./valuemask') , Colormap: 8192 , Cursor: 16384 } - CreateGC: + , CreateGC: { Function: 1 , PlaneMask: 2 , Foreground: 4 @@ -50,6 +50,29 @@ function parameterOrder(params, obj) { }) } +function size(str) { + var i = str.length + , size = 0 + while(i--) { + switch(str[i]) { + case 'C': + case 'c': + case 'x': + size += 1 + break; + case 'S': + case 's': + size += 2 + break; + case 'L': + case 'l': + size += 4 + break; + } + } + return size / 4 +} + module.exports = { CreateWindow: [ function(obj, cb) { @@ -67,14 +90,13 @@ module.exports = , '_class' , 'visual' ], obj) - , packed = packMask(valueMask[CreateWindow], obj.value_mask) + , packed = packMask(valueMask['CreateWindow'], obj.value_mask) format += "L" args.push(packed[0]) args = args.concat(packed[1]) format += new Array(packed[1].length + 1).join("L") args[0] = 1 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -85,14 +107,13 @@ module.exports = , null , 'window' ], obj) - , packed = packMask(valueMask[ChangeWindowAttributes], obj.value_mask) + , packed = packMask(valueMask['ChangeWindowAttributes'], obj.value_mask) format += "L" args.push(packed[0]) args = args.concat(packed[1]) format += new Array(packed[1].length + 1).join("L") args[0] = 2 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -104,8 +125,7 @@ module.exports = , 'window' ], obj) args[0] = 3 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -120,8 +140,7 @@ module.exports = , 'window' ], obj) args[0] = 4 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -133,8 +152,7 @@ module.exports = , 'window' ], obj) args[0] = 5 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -147,8 +165,7 @@ module.exports = , 'window' ], obj) args[0] = 6 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -163,8 +180,7 @@ module.exports = , 'y' ], obj) args[0] = 7 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -176,8 +192,7 @@ module.exports = , 'window' ], obj) args[0] = 8 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -189,8 +204,7 @@ module.exports = , 'window' ], obj) args[0] = 9 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -202,8 +216,7 @@ module.exports = , 'window' ], obj) args[0] = 10 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -215,8 +228,7 @@ module.exports = , 'window' ], obj) args[0] = 11 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -228,13 +240,12 @@ module.exports = , 'window' , 'value_mask' ], obj) - , packed = packMask(valueMask[ConfigureWindow], obj.value_mask) + , packed = packMask(valueMask['ConfigureWindow'], obj.value_mask) args[2] = packed[0] args = args.concat(packed[1]) format += new Array(packed[1].length + 1).join("L") args[0] = 12 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -247,8 +258,7 @@ module.exports = , 'window' ], obj) args[0] = 13 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -260,8 +270,7 @@ module.exports = , 'drawable' ], obj) args[0] = 14 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -276,8 +285,7 @@ module.exports = , 'window' ], obj) args[0] = 15 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -293,8 +301,7 @@ module.exports = , 'name_len' ], obj) args[0] = 16 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } , function(buf, format) { @@ -309,8 +316,7 @@ module.exports = , 'atom' ], obj) args[0] = 17 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -330,8 +336,7 @@ module.exports = , 'data_len' ], obj) args[0] = 18 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -344,8 +349,7 @@ module.exports = , 'property' ], obj) args[0] = 19 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -362,8 +366,7 @@ module.exports = , 'long_length' ], obj) args[0] = 20 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } , function(buf, format) { @@ -378,8 +381,7 @@ module.exports = , 'window' ], obj) args[0] = 21 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -396,8 +398,7 @@ module.exports = , 'time' ], obj) args[0] = 22 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -409,8 +410,7 @@ module.exports = , 'selection' ], obj) args[0] = 23 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -429,8 +429,7 @@ module.exports = , 'time' ], obj) args[0] = 24 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -444,8 +443,7 @@ module.exports = , 'event_mask' ], obj) args[0] = 25 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -464,8 +462,7 @@ module.exports = , 'time' ], obj) args[0] = 26 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } , function(buf, format) { @@ -480,8 +477,7 @@ module.exports = , 'time' ], obj) args[0] = 27 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -501,8 +497,7 @@ module.exports = , 'modifiers' ], obj) args[0] = 28 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -516,8 +511,7 @@ module.exports = , 'modifiers' ], obj) args[0] = 29 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -531,8 +525,7 @@ module.exports = , 'event_mask' ], obj) args[0] = 30 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -548,8 +541,7 @@ module.exports = , 'keyboard_mode' ], obj) args[0] = 31 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } , function(buf, format) { @@ -564,8 +556,7 @@ module.exports = , 'time' ], obj) args[0] = 32 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -582,8 +573,7 @@ module.exports = , 'keyboard_mode' ], obj) args[0] = 33 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -597,8 +587,7 @@ module.exports = , 'modifiers' ], obj) args[0] = 34 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -611,8 +600,7 @@ module.exports = , 'time' ], obj) args[0] = 35 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -623,8 +611,7 @@ module.exports = , null ], obj) args[0] = 36 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -635,8 +622,7 @@ module.exports = , null ], obj) args[0] = 37 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -648,8 +634,7 @@ module.exports = , 'window' ], obj) args[0] = 38 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -666,8 +651,7 @@ module.exports = , 'stop' ], obj) args[0] = 39 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -685,8 +669,7 @@ module.exports = , 'src_y' ], obj) args[0] = 40 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -708,8 +691,7 @@ module.exports = , 'dst_y' ], obj) args[0] = 41 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -723,8 +705,7 @@ module.exports = , 'time' ], obj) args[0] = 42 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -735,8 +716,7 @@ module.exports = , null ], obj) args[0] = 43 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -750,8 +730,7 @@ module.exports = , null ], obj) args[0] = 44 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -767,8 +746,7 @@ module.exports = , 'name_len' ], obj) args[0] = 45 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -780,8 +758,7 @@ module.exports = , 'font' ], obj) args[0] = 46 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -793,8 +770,7 @@ module.exports = , 'font' ], obj) args[0] = 47 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -810,8 +786,7 @@ module.exports = , 'font' ], obj) args[0] = 48 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } , function(buf, format) { @@ -827,8 +802,7 @@ module.exports = , 'pattern_len' ], obj) args[0] = 49 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -844,8 +818,7 @@ module.exports = , 'pattern_len' ], obj) args[0] = 50 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -860,8 +833,7 @@ module.exports = , 'font_qty' ], obj) args[0] = 51 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -872,8 +844,7 @@ module.exports = , null ], obj) args[0] = 52 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -892,8 +863,7 @@ module.exports = , 'height' ], obj) args[0] = 53 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -905,8 +875,7 @@ module.exports = , 'pixmap' ], obj) args[0] = 54 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -918,14 +887,13 @@ module.exports = , 'cid' , 'drawable' ], obj) - , packed = packMask(valueMask[CreateGC], obj.value_mask) + , packed = packMask(valueMask['CreateGC'], obj.value_mask) format += "L" args.push(packed[0]) args = args.concat(packed[1]) format += new Array(packed[1].length + 1).join("L") args[0] = 55 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -936,14 +904,13 @@ module.exports = , null , 'gc' ], obj) - , packed = packMask(valueMask[ChangeGC], obj.value_mask) + , packed = packMask(valueMask['ChangeGC'], obj.value_mask) format += "L" args.push(packed[0]) args = args.concat(packed[1]) format += new Array(packed[1].length + 1).join("L") args[0] = 56 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -957,8 +924,7 @@ module.exports = , 'value_mask' ], obj) args[0] = 57 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -972,8 +938,7 @@ module.exports = , 'dashes_len' ], obj) args[0] = 58 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -988,8 +953,7 @@ module.exports = , 'clip_y_origin' ], obj) args[0] = 59 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1001,8 +965,7 @@ module.exports = , 'gc' ], obj) args[0] = 60 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1019,8 +982,7 @@ module.exports = , 'height' ], obj) args[0] = 61 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1040,8 +1002,7 @@ module.exports = , 'height' ], obj) args[0] = 62 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1062,8 +1023,7 @@ module.exports = , 'bit_plane' ], obj) args[0] = 63 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1077,8 +1037,7 @@ module.exports = , 'gc' ], obj) args[0] = 64 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1092,8 +1051,7 @@ module.exports = , 'gc' ], obj) args[0] = 65 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1106,8 +1064,7 @@ module.exports = , 'gc' ], obj) args[0] = 66 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1120,8 +1077,7 @@ module.exports = , 'gc' ], obj) args[0] = 67 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1134,8 +1090,7 @@ module.exports = , 'gc' ], obj) args[0] = 68 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1150,8 +1105,7 @@ module.exports = , 'coordinate_mode' ], obj) args[0] = 69 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1164,8 +1118,7 @@ module.exports = , 'gc' ], obj) args[0] = 70 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1178,8 +1131,7 @@ module.exports = , 'gc' ], obj) args[0] = 71 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1199,8 +1151,7 @@ module.exports = , 'depth' ], obj) args[0] = 72 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1218,8 +1169,7 @@ module.exports = , 'plane_mask' ], obj) args[0] = 73 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } , function(buf, format) { @@ -1237,8 +1187,7 @@ module.exports = , 'y' ], obj) args[0] = 74 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1253,8 +1202,7 @@ module.exports = , 'y' ], obj) args[0] = 75 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1270,8 +1218,7 @@ module.exports = , 'y' ], obj) args[0] = 76 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1287,8 +1234,7 @@ module.exports = , 'y' ], obj) args[0] = 77 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1303,8 +1249,7 @@ module.exports = , 'visual' ], obj) args[0] = 78 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1316,8 +1261,7 @@ module.exports = , 'cmap' ], obj) args[0] = 79 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1330,8 +1274,7 @@ module.exports = , 'src_cmap' ], obj) args[0] = 80 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1343,8 +1286,7 @@ module.exports = , 'cmap' ], obj) args[0] = 81 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1356,8 +1298,7 @@ module.exports = , 'cmap' ], obj) args[0] = 82 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1369,8 +1310,7 @@ module.exports = , 'window' ], obj) args[0] = 83 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1388,8 +1328,7 @@ module.exports = , 'blue' ], obj) args[0] = 84 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1405,8 +1344,7 @@ module.exports = , 'name_len' ], obj) args[0] = 85 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1424,8 +1362,7 @@ module.exports = , 'planes' ], obj) args[0] = 86 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } , function(buf, format) { @@ -1445,8 +1382,7 @@ module.exports = , 'blues' ], obj) args[0] = 87 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } , function(buf, format) { @@ -1462,8 +1398,7 @@ module.exports = , 'plane_mask' ], obj) args[0] = 88 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1475,8 +1410,7 @@ module.exports = , 'cmap' ], obj) args[0] = 89 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1491,8 +1425,7 @@ module.exports = , 'name_len' ], obj) args[0] = 90 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1504,8 +1437,7 @@ module.exports = , 'cmap' ], obj) args[0] = 91 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1521,8 +1453,7 @@ module.exports = , 'name_len' ], obj) args[0] = 92 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1547,8 +1478,7 @@ module.exports = , 'y' ], obj) args[0] = 93 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1570,8 +1500,7 @@ module.exports = , 'back_blue' ], obj) args[0] = 94 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1583,8 +1512,7 @@ module.exports = , 'cursor' ], obj) args[0] = 95 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1602,8 +1530,7 @@ module.exports = , 'back_blue' ], obj) args[0] = 96 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1618,8 +1545,7 @@ module.exports = , 'height' ], obj) args[0] = 97 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } , function(buf, format) { @@ -1634,8 +1560,7 @@ module.exports = , 'name_len' ], obj) args[0] = 98 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1649,8 +1574,7 @@ module.exports = , null ], obj) args[0] = 99 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1667,8 +1591,7 @@ module.exports = , 'keysyms_per_keycode' ], obj) args[0] = 100 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1681,8 +1604,7 @@ module.exports = , 'count' ], obj) args[0] = 101 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1695,14 +1617,13 @@ module.exports = , args = parameterOrder([ null , null ], obj) - , packed = packMask(valueMask[ChangeKeyboardControl], obj.value_mask) + , packed = packMask(valueMask['ChangeKeyboardControl'], obj.value_mask) format += "L" args.push(packed[0]) args = args.concat(packed[1]) format += new Array(packed[1].length + 1).join("L") args[0] = 102 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1713,8 +1634,7 @@ module.exports = , null ], obj) args[0] = 103 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1729,8 +1649,7 @@ module.exports = , null ], obj) args[0] = 104 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1746,8 +1665,7 @@ module.exports = , 'do_threshold' ], obj) args[0] = 105 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1758,8 +1676,7 @@ module.exports = , null ], obj) args[0] = 106 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1777,8 +1694,7 @@ module.exports = , 'allow_exposures' ], obj) args[0] = 107 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1789,8 +1705,7 @@ module.exports = , null ], obj) args[0] = 108 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1807,8 +1722,7 @@ module.exports = , 'address_len' ], obj) args[0] = 109 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1819,8 +1733,7 @@ module.exports = , null ], obj) args[0] = 110 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1835,8 +1748,7 @@ module.exports = , null ], obj) args[0] = 111 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1848,8 +1760,7 @@ module.exports = , null ], obj) args[0] = 112 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1861,8 +1772,7 @@ module.exports = , 'resource' ], obj) args[0] = 113 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1876,8 +1786,7 @@ module.exports = , 'delta' ], obj) args[0] = 114 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] @@ -1889,8 +1798,7 @@ module.exports = , null ], obj) args[0] = 115 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } ] @@ -1902,8 +1810,7 @@ module.exports = , null ], obj) args[0] = 116 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } , function(buf, format) { @@ -1917,8 +1824,7 @@ module.exports = , null ], obj) args[0] = 117 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1933,8 +1839,7 @@ module.exports = , null ], obj) args[0] = 118 - args[2] = 123//get to this later - + args[2] = size(format) return [format, args] } , function(buf, format) { @@ -1948,8 +1853,7 @@ module.exports = , null ], obj) args[0] = 119 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } , function(buf, format) { @@ -1963,8 +1867,7 @@ module.exports = , null ], obj) args[0] = 127 - args[1] = 123//get to this later - + args[1] = size(format) return [format, args] } ] diff --git a/lib/x11/valuemask.js b/lib/x11/valuemask.js index de76d86..d2e44aa 100644 --- a/lib/x11/valuemask.js +++ b/lib/x11/valuemask.js @@ -10,18 +10,18 @@ function getValue(item) { return item[1] } -function packValueMask(maskList, values) +function packValueMask(list, values) { - var bitmask = 0; - , masksList = []; + var bitmask = 0 + , masksList = [] , v , valueBit , args for (var v in values) { - valueBit = reqValueMask[v]; - if (!valueBit) throw new Error(reqname + ': incorrect value param ' + v); - masksList.push([valueBit, v]); + valueBit = list[v] + if (valueBit == null) throw new Error(': incorrect value param ' + v); + masksList.push([valueBit, values[v]]); bitmask |= valueBit; } args = masksList.sort(orderValueMask).map(getValue); diff --git a/stubs/requests.tpl b/stubs/requests.tpl index dd96799..a0765ff 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -1,8 +1,8 @@ -var packMask = require('./valuemask') - , valueMask = { -{{each(requestName, request) requests}} +var packMask = require('../valuemask') + , valueMask = +{{each(i, requestName) Object.keys(requests)}} {{if getValueMask(requestName) }} - ${requestName}: + ${getDelim(i)} ${requestName}: {{each(i, value) getValueMask(requestName)}} ${getDelim(i)} ${value.name}: ${enumVal(value)} {{/each}} @@ -17,6 +17,29 @@ function parameterOrder(params, obj) { }) } +function size(str) { + var i = str.length + , size = 0 + while(i--) { + switch(str[i]) { + case 'C': + case 'c': + case 'x': + size += 1 + break; + case 'S': + case 's': + size += 2 + break; + case 'L': + case 'l': + size += 4 + break; + } + } + return size / 4 +} + module.exports = {{each(i, reqName) Object.keys(requests)}} ${getDelim(i)} ${reqName}: @@ -36,7 +59,7 @@ ${getDelim(i)} ${reqName}: {{each(j, field) requests[reqName].field}} {{if isListType(field)}} {{if isValueMask(field)}} - , packed = packMask(valueMask[${reqName}], obj.${prepPropName(field['value-mask-name'])}) + , packed = packMask(valueMask['${reqName}'], obj.${prepPropName(field['value-mask-name'])}) {{if isListAccountedFor(requests[reqName], field)}} args[${listLenIndex(requests[reqName], field)}] = packed[0] @@ -50,8 +73,7 @@ ${getDelim(i)} ${reqName}: {{/if}} {{/each}} args[0] = ${requests[reqName].opcode} - args[${requestLengthIndex(requests[reqName])}] = 123//get to this later - + args[${requestLengthIndex(requests[reqName])}] = size(format) return [format, args] } {{if requests[reqName].reply}} From 804be9aa13bce3d988497a017096fe82304c61d3 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Mon, 5 Sep 2011 04:31:37 -0500 Subject: [PATCH 06/43] convert a test to use the new request format. --- lib/x11/xcore.js | 2 +- test/map_unmap.js | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/x11/xcore.js b/lib/x11/xcore.js index 25d77cd..a4fe480 100644 --- a/lib/x11/xcore.js +++ b/lib/x11/xcore.js @@ -16,7 +16,7 @@ require('./unpackbuffer').addUnpack(Buffer); var os = require('os'); var xerrors = require('./xerrors'); -var coreRequests = require('./corereqs'); +var coreRequests = require('./autogen/requests'); var stdatoms = require('./stdatoms'); function XClient(stream, displayNum, screenNum) diff --git a/test/map_unmap.js b/test/map_unmap.js index 6ccf232..278e901 100644 --- a/test/map_unmap.js +++ b/test/map_unmap.js @@ -11,15 +11,16 @@ xclient.on('connect', function(display) { var white = display.screen[0].white_pixel; var black = display.screen[0].black_pixel; - X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: PointerMotion }); - X.MapWindow(wid); + X.CreateWindow({ depth: 0, wid: wid, parent: root, x: 10, y: 10, width: 400, height: 300, border_width: 1, _class: 1, visual: 0, + value_mask: { BackPixel: white, EventMask: PointerMotion } }); + X.MapWindow({ window: wid }); setInterval(function() { if (!mapped) { - X.MapWindow(wid); + X.MapWindow({window: wid }); } else { - X.UnmapWindow(wid); + X.UnmapWindow({ window: wid }); } mapped = !mapped; }, 1000); -}); \ No newline at end of file +}); From 7d3b211c08389d55c1ba74761a97e3e4da9f06cb Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Mon, 5 Sep 2011 07:50:39 -0500 Subject: [PATCH 07/43] update request generator to give simple responses. --- generateFiles.js | 10 +- lib/x11/autogen/requests.js | 309 +++++++++++++++++++++++++++++++----- stubs/requests.tpl | 18 ++- 3 files changed, 295 insertions(+), 42 deletions(-) diff --git a/generateFiles.js b/generateFiles.js index d66d4b0..a5916a2 100644 --- a/generateFiles.js +++ b/generateFiles.js @@ -16,6 +16,7 @@ var fs = require('fs') , bufPackType: bufPackType , requestLengthIndex: requestLengthIndex , listLenIndex: listLenIndex + , realIndex: realIndex } ;['requests'].forEach(function(name) { @@ -28,7 +29,7 @@ function getValueMask(requestName) { } function getDelim(i, ch) { - return i == 0 ? (ch || '{') : ',' + return i == 0 ? (ch != null ? ch : '{') : ',' } function enumVal(val) { @@ -104,3 +105,10 @@ function listLenIndex(request, field) { } } +function realIndex(request, field) { + var index = 0 + for (var i = 0, len = request.field.length; i < len; ++i) { + if (request.field[i] == field) return index + if (request.field[i].fieldType == 'field') index++; + } +} diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index ffeba17..1ed6b83 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -73,6 +73,14 @@ function size(str) { return size / 4 } +function associate(arr1, arr2) { + var ret = {} + for(var i = 0, len = Math.min(arr1.length, arr2.length); i < len; ++i) { + ret[arr1[i]] = arr2[i] + } + return ret +} + module.exports = { CreateWindow: [ function(obj, cb) { @@ -129,7 +137,24 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'backing_store' + , 'visual' + , 'class' + , 'bit_gravity' + , 'win_gravity' + , 'backing_planes' + , 'backing_pixel' + , 'save_under' + , 'map_is_installed' + , 'map_state' + , 'override_redirect' + , 'colormap' + , 'all_event_masks' + , 'your_event_mask' + , 'do_not_propagate_mask' ] + , format = "CLSCCLLCCCCLLLS" + return associate(reply, buf.unpack(format)) } ] , DestroyWindow: @@ -274,7 +299,16 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'depth' + , 'root' + , 'x' + , 'y' + , 'width' + , 'height' + , 'border_width' ] + , format = "CLssSSS" + return associate(reply, buf.unpack(format)) } ] , QueryTree: @@ -289,7 +323,12 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'root' + , 'parent' + , 'children_len' ] + , format = "LLS" + return associate(reply, buf.unpack(format)) } ] , InternAtom: @@ -305,7 +344,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'atom' ] + , format = "L" + return associate(reply, buf.unpack(format)) } ] , GetAtomName: @@ -320,7 +362,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'name_len' ] + , format = "S" + return associate(reply, buf.unpack(format)) } ] , ChangeProperty: @@ -370,7 +415,13 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'format' + , 'type' + , 'bytes_after' + , 'value_len' ] + , format = "CLLL" + return associate(reply, buf.unpack(format)) } ] , ListProperties: @@ -385,7 +436,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'atoms_len' ] + , format = "S" + return associate(reply, buf.unpack(format)) } ] , SetSelectionOwner: @@ -414,7 +468,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'owner' ] + , format = "L" + return associate(reply, buf.unpack(format)) } ] , ConvertSelection: @@ -466,7 +523,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'status' ] + , format = "C" + return associate(reply, buf.unpack(format)) } ] , UngrabPointer: @@ -545,7 +605,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'status' ] + , format = "C" + return associate(reply, buf.unpack(format)) } ] , UngrabKeyboard: @@ -638,7 +701,17 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'same_screen' + , 'root' + , 'child' + , 'root_x' + , 'root_y' + , 'win_x' + , 'win_y' + , 'mask' ] + , format = "CLLssssS" + return associate(reply, buf.unpack(format)) } ] , GetMotionEvents: @@ -655,7 +728,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'events_len' ] + , format = "L" + return associate(reply, buf.unpack(format)) } ] , TranslateCoordinates: @@ -673,7 +749,13 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'same_screen' + , 'child' + , 'dst_x' + , 'dst_y' ] + , format = "CLss" + return associate(reply, buf.unpack(format)) } ] , WarpPointer: @@ -720,7 +802,11 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'revert_to' + , 'focus' ] + , format = "CL" + return associate(reply, buf.unpack(format)) } ] , QueryKeymap: @@ -734,7 +820,9 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply + , format = "" + return associate(reply, buf.unpack(format)) } ] , OpenFont: @@ -774,7 +862,22 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'min_bounds' + , 'max_bounds' + , 'min_char_or_byte2' + , 'max_char_or_byte2' + , 'default_char' + , 'properties_len' + , 'draw_direction' + , 'min_byte1' + , 'max_byte1' + , 'all_chars_exist' + , 'font_ascent' + , 'font_descent' + , 'char_infos_len' ] + , format = "undefinedundefinedSSSSCCCCssL" + return associate(reply, buf.unpack(format)) } ] , QueryTextExtents: @@ -790,7 +893,17 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'draw_direction' + , 'font_ascent' + , 'font_descent' + , 'overall_ascent' + , 'overall_descent' + , 'overall_width' + , 'overall_left' + , 'overall_right' ] + , format = "Csssslll" + return associate(reply, buf.unpack(format)) } ] , ListFonts: @@ -806,7 +919,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'names_len' ] + , format = "S" + return associate(reply, buf.unpack(format)) } ] , ListFontsWithInfo: @@ -822,7 +938,23 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'name_len' + , 'min_bounds' + , 'max_bounds' + , 'min_char_or_byte2' + , 'max_char_or_byte2' + , 'default_char' + , 'properties_len' + , 'draw_direction' + , 'min_byte1' + , 'max_byte1' + , 'all_chars_exist' + , 'font_ascent' + , 'font_descent' + , 'replies_hint' ] + , format = "CundefinedundefinedSSSSCCCCssL" + return associate(reply, buf.unpack(format)) } ] , SetFontPath: @@ -848,7 +980,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'path_len' ] + , format = "S" + return associate(reply, buf.unpack(format)) } ] , CreatePixmap: @@ -1173,7 +1308,11 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'depth' + , 'visual' ] + , format = "CL" + return associate(reply, buf.unpack(format)) } ] , PolyText8: @@ -1314,7 +1453,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'cmaps_len' ] + , format = "S" + return associate(reply, buf.unpack(format)) } ] , AllocColor: @@ -1332,7 +1474,13 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'red' + , 'green' + , 'blue' + , 'pixel' ] + , format = "SSSL" + return associate(reply, buf.unpack(format)) } ] , AllocNamedColor: @@ -1348,7 +1496,16 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'pixel' + , 'exact_red' + , 'exact_green' + , 'exact_blue' + , 'visual_red' + , 'visual_green' + , 'visual_blue' ] + , format = "LSSSSSS" + return associate(reply, buf.unpack(format)) } ] , AllocColorCells: @@ -1366,7 +1523,11 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'pixels_len' + , 'masks_len' ] + , format = "SS" + return associate(reply, buf.unpack(format)) } ] , AllocColorPlanes: @@ -1386,7 +1547,13 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'pixels_len' + , 'red_mask' + , 'green_mask' + , 'blue_mask' ] + , format = "SLLL" + return associate(reply, buf.unpack(format)) } ] , FreeColors: @@ -1441,7 +1608,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'colors_len' ] + , format = "S" + return associate(reply, buf.unpack(format)) } ] , LookupColor: @@ -1457,7 +1627,15 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'exact_red' + , 'exact_green' + , 'exact_blue' + , 'visual_red' + , 'visual_green' + , 'visual_blue' ] + , format = "SSSSSS" + return associate(reply, buf.unpack(format)) } ] , CreateCursor: @@ -1549,7 +1727,11 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'width' + , 'height' ] + , format = "SS" + return associate(reply, buf.unpack(format)) } ] , QueryExtension: @@ -1564,7 +1746,13 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'present' + , 'major_opcode' + , 'first_event' + , 'first_error' ] + , format = "CCCC" + return associate(reply, buf.unpack(format)) } ] , ListExtensions: @@ -1578,7 +1766,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'names_len' ] + , format = "C" + return associate(reply, buf.unpack(format)) } ] , ChangeKeyboardMapping: @@ -1608,7 +1799,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'keysyms_per_keycode' ] + , format = "C" + return associate(reply, buf.unpack(format)) } ] , ChangeKeyboardControl: @@ -1638,7 +1832,15 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'global_auto_repeat' + , 'led_mask' + , 'key_click_percent' + , 'bell_percent' + , 'bell_pitch' + , 'bell_duration' ] + , format = "CLCCSS" + return associate(reply, buf.unpack(format)) } ] , Bell: @@ -1680,7 +1882,12 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'acceleration_numerator' + , 'acceleration_denominator' + , 'threshold' ] + , format = "SSS" + return associate(reply, buf.unpack(format)) } ] , SetScreenSaver: @@ -1709,7 +1916,13 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'timeout' + , 'interval' + , 'prefer_blanking' + , 'allow_exposures' ] + , format = "SSCC" + return associate(reply, buf.unpack(format)) } ] , ChangeHosts: @@ -1737,7 +1950,11 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'mode' + , 'hosts_len' ] + , format = "CS" + return associate(reply, buf.unpack(format)) } ] , SetAccessControl: @@ -1814,7 +2031,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'status' ] + , format = "C" + return associate(reply, buf.unpack(format)) } ] , GetPointerMapping: @@ -1828,7 +2048,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'map_len' ] + , format = "C" + return associate(reply, buf.unpack(format)) } ] , SetModifierMapping: @@ -1843,7 +2066,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'status' ] + , format = "C" + return associate(reply, buf.unpack(format)) } ] , GetModifierMapping: @@ -1857,7 +2083,10 @@ module.exports = return [format, args] } , function(buf, format) { - + var reply = + [ 'keycodes_per_modifier' ] + , format = "C" + return associate(reply, buf.unpack(format)) } ] , NoOperation: diff --git a/stubs/requests.tpl b/stubs/requests.tpl index a0765ff..51d0f91 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -40,6 +40,14 @@ function size(str) { return size / 4 } +function associate(arr1, arr2) { + var ret = {} + for(var i = 0, len = Math.min(arr1.length, arr2.length); i < len; ++i) { + ret[arr1[i]] = arr2[i] + } + return ret +} + module.exports = {{each(i, reqName) Object.keys(requests)}} ${getDelim(i)} ${reqName}: @@ -78,7 +86,15 @@ ${getDelim(i)} ${reqName}: } {{if requests[reqName].reply}} , function(buf, format) { - + var reply{{if firstType(requests[reqName].reply.field, 'field')}} = + {{each(j, field) requests[reqName].reply.field}} + {{if field.fieldType == 'field'}} + ${getDelim(realIndex(requests[reqName].reply, field), '[')} '${field.name}' + {{/if}} + {{/each}} ] + {{/if}} + , format = "{{each(j, field) requests[reqName].reply.field}}{{if field.fieldType == 'field' }}${getBufPack(field)}{{/if}}{{/each}}" + return associate(reply, buf.unpack(format)) } {{/if}} ] From ab3ad6e7036053827a95989bc40bd64455bc0a73 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Mon, 5 Sep 2011 07:50:58 -0500 Subject: [PATCH 08/43] show QueryTree response. --- test/map_unmap.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/map_unmap.js b/test/map_unmap.js index 278e901..3750ac7 100644 --- a/test/map_unmap.js +++ b/test/map_unmap.js @@ -22,5 +22,8 @@ xclient.on('connect', function(display) { } mapped = !mapped; }, 1000); + X.QueryTree({ window: root }, function(resp) { + console.log('QueryTree', resp) + }) }); From 8597bd8675289e1ad12b5f53d9290ba1cbb4a397 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Wed, 7 Sep 2011 03:28:43 -0500 Subject: [PATCH 09/43] added char list packing / unpacking. --- generateFiles.js | 64 +- lib/x11/autogen/requests.js | 1672 +++++++++++++++++++++++------------ lib/x11/unpackbuffer.js | 1 + stubs/packList.tpl | 15 + stubs/requests.tpl | 55 +- stubs/unpackList.tpl | 9 + 6 files changed, 1237 insertions(+), 579 deletions(-) create mode 100644 stubs/packList.tpl create mode 100644 stubs/unpackList.tpl diff --git a/generateFiles.js b/generateFiles.js index a5916a2..a8fdb93 100644 --- a/generateFiles.js +++ b/generateFiles.js @@ -10,6 +10,7 @@ var fs = require('fs') , isListType: isListType , prepPropName: prepPropName , firstType: firstType + , shiftedFirstType: shiftedFirstType , prePackFirst: prePackFirst , isValueMask: isValueMask , isListAccountedFor: isListAccountedFor @@ -17,6 +18,11 @@ var fs = require('fs') , requestLengthIndex: requestLengthIndex , listLenIndex: listLenIndex , realIndex: realIndex + , unpackList: unpackList + , packList: packList + , getFieldRef: getFieldRef + , isFieldFirst: isFieldFirst + , listLengthName: listLengthName } ;['requests'].forEach(function(name) { @@ -68,8 +74,11 @@ function firstType(field, type) { }) && f } -function prePackFirst(request, j) { - if (j != null) console.log(request.opcode < 128, j, request.field[0]) +function shiftedFirstType(field, type) { + return firstType(field.slice(1), 'field') +} + +function prePackFirst(request) { return request.opcode < 128 } @@ -107,8 +116,53 @@ function listLenIndex(request, field) { function realIndex(request, field) { var index = 0 - for (var i = 0, len = request.field.length; i < len; ++i) { - if (request.field[i] == field) return index - if (request.field[i].fieldType == 'field') index++; + for (var i = 0, len = request.length; i < len; ++i) { + if (request[i] == field) return index + if (request[i].fieldType == 'field') index++; } } + +function unpackList(obj, buf, offset, list, name) { + var subData = {} //Object.create(data) + , key + for (key in data) subData[key] = data[key] + subData.buf = buf + subData.offset = offset + subData.obj = obj + subData.list = list + subData.theName = name + var tplFile = fs.readFileSync('stubs/unpackList.tpl').toString().replace(/\n\s*{{/g, '{{').replace(/}}\s*$/g, '}}') + return jqtpl.tmpl(tplFile, subData) +} + +function packList(args, format, list, name) { + var subData = {} //Object.create(data) + , key + for (key in data) subData[key] = data[key] + subData.args = args + subData.format = format + subData.list = list + subData.theName = name + var tplFile = fs.readFileSync('stubs/packList.tpl').toString().replace(/\n\s*{{/g, '{{').replace(/}}\s*$/g, '}}') + return jqtpl.tmpl(tplFile, subData) +} + +function getFieldRef(name, field, obj) { //todo read operators appropriately + return field.fieldType == 'valueparam' ? field['value-mask-name'] + : field.fieldref ? field.fieldref + : field.value ? field.value + : name == 'GetProperty' ? obj + ".format / 8 * " + obj + ".value_len" + : name == 'GetModifierMapping' ? obj + ".keycodes_per_modifier * 8" + : "0" +} + +function listLengthName(field) { + return field.fieldType == 'valueparam' ? field['value-mask-name'] + : field.fieldref ? field.fieldref + : field.value ? field.value + : field.name + '_len' +} + +function isFieldFirst(fields) { + return fields[0].fieldType == 'field' +} diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 1ed6b83..1ba337b 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -1,4 +1,5 @@ var packMask = require('../valuemask') + , xutil = require('../xutil') , valueMask = { CreateWindow: { BackPixmap: 1 @@ -45,9 +46,12 @@ var packMask = require('../valuemask') } function parameterOrder(params, obj) { - return params.map(function(name) { - return name && obj[name] + var ret = [] + params.forEach(function(name, i) { + if (Array.isArray(obj[name])) return ret = ret.concat(obj[name]) + else ret[i] = name && obj[name] }) + return ret; } function size(str) { @@ -85,7 +89,7 @@ module.exports = { CreateWindow: [ function(obj, cb) { var format = 'CCSLLssSSSSL' - , args = parameterOrder([ null + , args = [ null , 'depth' , null , 'wid' @@ -97,49 +101,60 @@ module.exports = , 'border_width' , '_class' , 'visual' - ], obj) + , 'value_mask' + , 'value_list' + ] + , addSize = 0 , packed = packMask(valueMask['CreateWindow'], obj.value_mask) + + obj.value_mask = packed[0] format += "L" - args.push(packed[0]) - args = args.concat(packed[1]) + obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") + args = parameterOrder(args, obj) args[0] = 1 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , ChangeWindowAttributes: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + , 'value_mask' + , 'value_list' + ] + , addSize = 0 , packed = packMask(valueMask['ChangeWindowAttributes'], obj.value_mask) + + obj.value_mask = packed[0] format += "L" - args.push(packed[0]) - args = args.concat(packed[1]) + obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") + args = parameterOrder(args, obj) args[0] = 2 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , GetWindowAttributes: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 3 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'backing_store' - , 'visual' + , function(buf, prop) { + var fields = + [ 'visual' , 'class' , 'bit_gravity' , 'win_gravity' @@ -153,225 +168,293 @@ module.exports = , 'all_event_masks' , 'your_event_mask' , 'do_not_propagate_mask' ] - , format = "CLSCCLLCCCCLLLS" - return associate(reply, buf.unpack(format)) + , format = "LSCCLLCCCCLLLSxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.backing_store = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , DestroyWindow: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 4 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , DestroySubwindows: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 5 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , ChangeSaveSet: [ function(obj, cb) { var format = 'CCSL' - , args = parameterOrder([ null + , args = [ null , 'mode' , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 6 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , ReparentWindow: [ function(obj, cb) { var format = 'CxSLLss' - , args = parameterOrder([ null + , args = [ null , null , 'window' , 'parent' , 'x' , 'y' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 7 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , MapWindow: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 8 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , MapSubwindows: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 9 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , UnmapWindow: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 10 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , UnmapSubwindows: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 11 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , ConfigureWindow: [ function(obj, cb) { var format = 'CxSLSxx' - , args = parameterOrder([ null + , args = [ null , null , 'window' , 'value_mask' - ], obj) + , 'value_list' + ] + , addSize = 0 , packed = packMask(valueMask['ConfigureWindow'], obj.value_mask) - args[2] = packed[0] - args = args.concat(packed[1]) + + obj.value_mask = packed[0] + obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") + args = parameterOrder(args, obj) args[0] = 12 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , CirculateWindow: [ function(obj, cb) { var format = 'CCSL' - , args = parameterOrder([ null + , args = [ null , 'direction' , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 13 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , GetGeometry: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'drawable' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 14 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'depth' - , 'root' + , function(buf, prop) { + var fields = + [ 'root' , 'x' , 'y' , 'width' , 'height' , 'border_width' ] - , format = "CLssSSS" - return associate(reply, buf.unpack(format)) + , format = "LssSSSxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.depth = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , QueryTree: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 15 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'root' , 'parent' , 'children_len' ] - , format = "LLS" - return associate(reply, buf.unpack(format)) + , format = "LLSxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , InternAtom: [ function(obj, cb) { var format = 'CCSSxx' - , args = parameterOrder([ null + , args = [ null , 'only_if_exists' , null , 'name_len' - ], obj) + , 'name' + ] + , addSize = 0 +var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) +obj.name_len = Buffer.byteLength(obj.name) +buf_name.write(obj.name) +obj.name = buf_name +format += 'a' +addSize += (len / 4) + args = parameterOrder(args, obj) args[0] = 16 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'atom' ] , format = "L" - return associate(reply, buf.unpack(format)) + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , GetAtomName: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'atom' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 17 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'name_len' ] - , format = "S" - return associate(reply, buf.unpack(format)) + , format = "Sxxxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset +console.log(buf.slice(unpacked.offset, unpacked.offset + reply.name_len), unpacked.offset, reply.name_len) + +reply.name = buf.slice(unpacked.offset, unpacked.offset + reply.name_len).toString() +unpacked.offset += reply.name_len + return reply + } ] , ChangeProperty: [ function(obj, cb) { var format = 'CCSLLLCxxxL' - , args = parameterOrder([ null + , args = [ null , 'mode' , null , 'window' @@ -379,29 +462,33 @@ module.exports = , 'type' , 'format' , 'data_len' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 18 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , DeleteProperty: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder([ null + , args = [ null , null , 'window' , 'property' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 19 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , GetProperty: [ function(obj, cb) { var format = 'CCSLLLLL' - , args = parameterOrder([ null + , args = [ null , '_delete' , null , 'window' @@ -409,105 +496,133 @@ module.exports = , 'type' , 'long_offset' , 'long_length' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 20 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'format' - , 'type' + , function(buf, prop) { + var fields = + [ 'type' , 'bytes_after' , 'value_len' ] - , format = "CLLL" - return associate(reply, buf.unpack(format)) + , format = "LLLxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.format = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , ListProperties: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 21 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'atoms_len' ] - , format = "S" - return associate(reply, buf.unpack(format)) + , format = "Sxxxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , SetSelectionOwner: [ function(obj, cb) { var format = 'CxSLLundefined' - , args = parameterOrder([ null + , args = [ null , null , 'owner' , 'selection' , 'time' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 22 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , GetSelectionOwner: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'selection' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 23 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'owner' ] , format = "L" - return associate(reply, buf.unpack(format)) + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , ConvertSelection: [ function(obj, cb) { var format = 'CxSLLLLundefined' - , args = parameterOrder([ null + , args = [ null , null , 'requestor' , 'selection' , 'target' , 'property' , 'time' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 24 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , SendEvent: [ function(obj, cb) { var format = 'CCSLL' - , args = parameterOrder([ null + , args = [ null , 'propagate' , null , 'destination' , 'event_mask' - ], obj) + , 'event' + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 25 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , GrabPointer: [ function(obj, cb) { var format = 'CCSLSCCLLundefined' - , args = parameterOrder([ null + , args = [ null , 'owner_events' , null , 'grab_window' @@ -517,34 +632,43 @@ module.exports = , 'confine_to' , 'cursor' , 'time' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 26 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'status' ] - , format = "C" - return associate(reply, buf.unpack(format)) + , function(buf, prop) { + var fields + , format = "" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.status = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , UngrabPointer: [ function(obj, cb) { var format = 'CxSundefined' - , args = parameterOrder([ null + , args = [ null , null , 'time' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 27 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , GrabButton: [ function(obj, cb) { var format = 'CCSLSCCLLCxS' - , args = parameterOrder([ null + , args = [ null , 'owner_events' , null , 'grab_window' @@ -555,78 +679,93 @@ module.exports = , 'cursor' , 'button' , 'modifiers' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 28 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , UngrabButton: [ function(obj, cb) { var format = 'CCSLSxx' - , args = parameterOrder([ null + , args = [ null , 'button' , null , 'grab_window' , 'modifiers' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 29 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , ChangeActivePointerGrab: [ function(obj, cb) { var format = 'CxSLundefinedSxx' - , args = parameterOrder([ null + , args = [ null , null , 'cursor' , 'time' , 'event_mask' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 30 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , GrabKeyboard: [ function(obj, cb) { var format = 'CCSLundefinedCCxx' - , args = parameterOrder([ null + , args = [ null , 'owner_events' , null , 'grab_window' , 'time' , 'pointer_mode' , 'keyboard_mode' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 31 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'status' ] - , format = "C" - return associate(reply, buf.unpack(format)) + , function(buf, prop) { + var fields + , format = "" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.status = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , UngrabKeyboard: [ function(obj, cb) { var format = 'CxSundefined' - , args = parameterOrder([ null + , args = [ null , null , 'time' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 32 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , GrabKey: [ function(obj, cb) { var format = 'CCSLSCCCxxx' - , args = parameterOrder([ null + , args = [ null , 'owner_events' , null , 'grab_window' @@ -634,134 +773,165 @@ module.exports = , 'key' , 'pointer_mode' , 'keyboard_mode' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 33 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , UngrabKey: [ function(obj, cb) { var format = 'CCSLSxx' - , args = parameterOrder([ null + , args = [ null , 'key' , null , 'grab_window' , 'modifiers' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 34 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , AllowEvents: [ function(obj, cb) { var format = 'CCSundefined' - , args = parameterOrder([ null + , args = [ null , 'mode' , null , 'time' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 35 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , GrabServer: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 36 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , UngrabServer: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 37 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , QueryPointer: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 38 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'same_screen' - , 'root' + , function(buf, prop) { + var fields = + [ 'root' , 'child' , 'root_x' , 'root_y' , 'win_x' , 'win_y' , 'mask' ] - , format = "CLLssssS" - return associate(reply, buf.unpack(format)) + , format = "LLssssSxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.same_screen = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , GetMotionEvents: [ function(obj, cb) { var format = 'CxSLundefinedundefined' - , args = parameterOrder([ null + , args = [ null , null , 'window' , 'start' , 'stop' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 39 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'events_len' ] - , format = "L" - return associate(reply, buf.unpack(format)) + , format = "Lxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , TranslateCoordinates: [ function(obj, cb) { var format = 'CxSLLss' - , args = parameterOrder([ null + , args = [ null , null , 'src_window' , 'dst_window' , 'src_x' , 'src_y' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 40 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'same_screen' - , 'child' + , function(buf, prop) { + var fields = + [ 'child' , 'dst_x' , 'dst_y' ] - , format = "CLss" - return associate(reply, buf.unpack(format)) + , format = "Lss" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.same_screen = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , WarpPointer: [ function(obj, cb) { var format = 'CxSLLssSSss' - , args = parameterOrder([ null + , args = [ null , null , 'src_window' , 'dst_window' @@ -771,98 +941,130 @@ module.exports = , 'src_height' , 'dst_x' , 'dst_y' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 41 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , SetInputFocus: [ function(obj, cb) { var format = 'CCSLundefined' - , args = parameterOrder([ null + , args = [ null , 'revert_to' , null , 'focus' , 'time' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 42 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , GetInputFocus: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 43 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'revert_to' - , 'focus' ] - , format = "CL" - return associate(reply, buf.unpack(format)) + , function(buf, prop) { + var fields = + [ 'focus' ] + , format = "L" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.revert_to = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , QueryKeymap: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 44 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply + , function(buf, prop) { + var fields , format = "" - return associate(reply, buf.unpack(format)) + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , OpenFont: [ function(obj, cb) { var format = 'CxSLSxx' - , args = parameterOrder([ null + , args = [ null , null , 'fid' , 'name_len' - ], obj) + , 'name' + ] + , addSize = 0 +var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) +obj.name_len = Buffer.byteLength(obj.name) +buf_name.write(obj.name) +obj.name = buf_name +format += 'a' +addSize += (len / 4) + args = parameterOrder(args, obj) args[0] = 45 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , CloseFont: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'font' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 46 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , QueryFont: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'font' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 47 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'min_bounds' , 'max_bounds' , 'min_char_or_byte2' @@ -876,71 +1078,107 @@ module.exports = , 'font_ascent' , 'font_descent' , 'char_infos_len' ] - , format = "undefinedundefinedSSSSCCCCssL" - return associate(reply, buf.unpack(format)) + , format = "undefinedxxxxundefinedxxxxSSSSCCCCssL" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , QueryTextExtents: [ function(obj, cb) { var format = 'CCSL' - , args = parameterOrder([ null + , args = [ null , 'odd_length' , null , 'font' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 48 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'draw_direction' - , 'font_ascent' + , function(buf, prop) { + var fields = + [ 'font_ascent' , 'font_descent' , 'overall_ascent' , 'overall_descent' , 'overall_width' , 'overall_left' , 'overall_right' ] - , format = "Csssslll" - return associate(reply, buf.unpack(format)) + , format = "sssslll" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.draw_direction = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , ListFonts: [ function(obj, cb) { var format = 'CxSSS' - , args = parameterOrder([ null + , args = [ null , null , 'max_names' , 'pattern_len' - ], obj) + , 'pattern' + ] + , addSize = 0 +var len = xutil.padded_length(obj.pattern.length) + , buf_name = new Buffer(len) +obj.pattern_len = Buffer.byteLength(obj.pattern) +buf_name.write(obj.pattern) +obj.pattern = buf_name +format += 'a' +addSize += (len / 4) + args = parameterOrder(args, obj) args[0] = 49 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'names_len' ] - , format = "S" - return associate(reply, buf.unpack(format)) + , format = "Sxxxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , ListFontsWithInfo: [ function(obj, cb) { var format = 'CxSSS' - , args = parameterOrder([ null + , args = [ null , null , 'max_names' , 'pattern_len' - ], obj) + , 'pattern' + ] + , addSize = 0 +var len = xutil.padded_length(obj.pattern.length) + , buf_name = new Buffer(len) +obj.pattern_len = Buffer.byteLength(obj.pattern) +buf_name.write(obj.pattern) +obj.pattern = buf_name +format += 'a' +addSize += (len / 4) + args = parameterOrder(args, obj) args[0] = 50 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'name_len' - , 'min_bounds' + , function(buf, prop) { + var fields = + [ 'min_bounds' , 'max_bounds' , 'min_char_or_byte2' , 'max_char_or_byte2' @@ -953,161 +1191,210 @@ module.exports = , 'font_ascent' , 'font_descent' , 'replies_hint' ] - , format = "CundefinedundefinedSSSSCCCCssL" - return associate(reply, buf.unpack(format)) + , format = "undefinedxxxxundefinedxxxxSSSSCCCCssL" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.name_len = prop + reply._raw = buf + reply._offset = unpacked.offset +console.log(buf.slice(unpacked.offset, unpacked.offset + reply.name_len), unpacked.offset, reply.name_len) + +reply.name = buf.slice(unpacked.offset, unpacked.offset + reply.name_len).toString() +unpacked.offset += reply.name_len + return reply + } ] , SetFontPath: [ function(obj, cb) { var format = 'CxSS' - , args = parameterOrder([ null + , args = [ null , null , 'font_qty' - ], obj) + , 'path' + ] + , addSize = 0 +var len = xutil.padded_length(obj.path.length) + , buf_name = new Buffer(len) +obj.path_len = Buffer.byteLength(obj.path) +buf_name.write(obj.path) +obj.path = buf_name +format += 'a' +addSize += (len / 4) + args = parameterOrder(args, obj) args[0] = 51 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , GetFontPath: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 52 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'path_len' ] - , format = "S" - return associate(reply, buf.unpack(format)) + , format = "Sxxxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , CreatePixmap: [ function(obj, cb) { var format = 'CCSLLSS' - , args = parameterOrder([ null + , args = [ null , 'depth' , null , 'pid' , 'drawable' , 'width' , 'height' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 53 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , FreePixmap: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'pixmap' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 54 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , CreateGC: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder([ null + , args = [ null , null , 'cid' , 'drawable' - ], obj) + , 'value_mask' + , 'value_list' + ] + , addSize = 0 , packed = packMask(valueMask['CreateGC'], obj.value_mask) + + obj.value_mask = packed[0] format += "L" - args.push(packed[0]) - args = args.concat(packed[1]) + obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") + args = parameterOrder(args, obj) args[0] = 55 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , ChangeGC: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'gc' - ], obj) + , 'value_mask' + , 'value_list' + ] + , addSize = 0 , packed = packMask(valueMask['ChangeGC'], obj.value_mask) + + obj.value_mask = packed[0] format += "L" - args.push(packed[0]) - args = args.concat(packed[1]) + obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") + args = parameterOrder(args, obj) args[0] = 56 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , CopyGC: [ function(obj, cb) { var format = 'CxSLLL' - , args = parameterOrder([ null + , args = [ null , null , 'src_gc' , 'dst_gc' , 'value_mask' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 57 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , SetDashes: [ function(obj, cb) { var format = 'CxSLSS' - , args = parameterOrder([ null + , args = [ null , null , 'gc' , 'dash_offset' , 'dashes_len' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 58 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , SetClipRectangles: [ function(obj, cb) { var format = 'CCSLss' - , args = parameterOrder([ null + , args = [ null , 'ordering' , null , 'gc' , 'clip_x_origin' , 'clip_y_origin' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 59 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , FreeGC: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'gc' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 60 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , ClearArea: [ function(obj, cb) { var format = 'CCSLssSS' - , args = parameterOrder([ null + , args = [ null , 'exposures' , null , 'window' @@ -1115,16 +1402,18 @@ module.exports = , 'y' , 'width' , 'height' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 61 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , CopyArea: [ function(obj, cb) { var format = 'CxSLLLssssSS' - , args = parameterOrder([ null + , args = [ null , null , 'src_drawable' , 'dst_drawable' @@ -1135,16 +1424,18 @@ module.exports = , 'dst_y' , 'width' , 'height' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 62 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , CopyPlane: [ function(obj, cb) { var format = 'CxSLLLssssSSL' - , args = parameterOrder([ null + , args = [ null , null , 'src_drawable' , 'dst_drawable' @@ -1156,124 +1447,142 @@ module.exports = , 'width' , 'height' , 'bit_plane' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 63 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , PolyPoint: [ function(obj, cb) { var format = 'CCSLL' - , args = parameterOrder([ null + , args = [ null , 'coordinate_mode' , null , 'drawable' , 'gc' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 64 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , PolyLine: [ function(obj, cb) { var format = 'CCSLL' - , args = parameterOrder([ null + , args = [ null , 'coordinate_mode' , null , 'drawable' , 'gc' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 65 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , PolySegment: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder([ null + , args = [ null , null , 'drawable' , 'gc' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 66 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , PolyRectangle: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder([ null + , args = [ null , null , 'drawable' , 'gc' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 67 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , PolyArc: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder([ null + , args = [ null , null , 'drawable' , 'gc' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 68 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , FillPoly: [ function(obj, cb) { var format = 'CxSLLCCxx' - , args = parameterOrder([ null + , args = [ null , null , 'drawable' , 'gc' , 'shape' , 'coordinate_mode' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 69 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , PolyFillRectangle: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder([ null + , args = [ null , null , 'drawable' , 'gc' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 70 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , PolyFillArc: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder([ null + , args = [ null , null , 'drawable' , 'gc' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 71 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , PutImage: [ function(obj, cb) { var format = 'CCSLLSSssCCxx' - , args = parameterOrder([ null + , args = [ null , 'format' , null , 'drawable' @@ -1284,16 +1593,18 @@ module.exports = , 'dst_y' , 'left_pad' , 'depth' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 72 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , GetImage: [ function(obj, cb) { var format = 'CCSLssSSL' - , args = parameterOrder([ null + , args = [ null , 'format' , null , 'drawable' @@ -1302,201 +1613,258 @@ module.exports = , 'width' , 'height' , 'plane_mask' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 73 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'depth' - , 'visual' ] - , format = "CL" - return associate(reply, buf.unpack(format)) + , function(buf, prop) { + var fields = + [ 'visual' ] + , format = "Lxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.depth = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , PolyText8: [ function(obj, cb) { var format = 'CxSLLss' - , args = parameterOrder([ null + , args = [ null , null , 'drawable' , 'gc' , 'x' , 'y' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 74 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , PolyText16: [ function(obj, cb) { var format = 'CxSLLss' - , args = parameterOrder([ null + , args = [ null , null , 'drawable' , 'gc' , 'x' , 'y' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 75 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , ImageText8: [ function(obj, cb) { var format = 'CCSLLss' - , args = parameterOrder([ null + , args = [ null , 'string_len' , null , 'drawable' , 'gc' , 'x' , 'y' - ], obj) + , 'string' + ] + , addSize = 0 +var len = xutil.padded_length(obj.string.length) + , buf_name = new Buffer(len) +obj.string_len = Buffer.byteLength(obj.string) +buf_name.write(obj.string) +obj.string = buf_name +format += 'a' +addSize += (len / 4) + args = parameterOrder(args, obj) args[0] = 76 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , ImageText16: [ function(obj, cb) { var format = 'CCSLLss' - , args = parameterOrder([ null + , args = [ null , 'string_len' , null , 'drawable' , 'gc' , 'x' , 'y' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 77 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , CreateColormap: [ function(obj, cb) { var format = 'CCSLLL' - , args = parameterOrder([ null + , args = [ null , 'alloc' , null , 'mid' , 'window' , 'visual' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 78 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , FreeColormap: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'cmap' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 79 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , CopyColormapAndFree: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder([ null + , args = [ null , null , 'mid' , 'src_cmap' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 80 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , InstallColormap: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'cmap' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 81 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , UninstallColormap: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'cmap' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 82 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , ListInstalledColormaps: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'window' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 83 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'cmaps_len' ] - , format = "S" - return associate(reply, buf.unpack(format)) + , format = "Sxxxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , AllocColor: [ function(obj, cb) { var format = 'CxSLSSSxx' - , args = parameterOrder([ null + , args = [ null , null , 'cmap' , 'red' , 'green' , 'blue' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 84 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'red' , 'green' , 'blue' , 'pixel' ] - , format = "SSSL" - return associate(reply, buf.unpack(format)) + , format = "SSSxxL" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , AllocNamedColor: [ function(obj, cb) { var format = 'CxSLSxx' - , args = parameterOrder([ null + , args = [ null , null , 'cmap' , 'name_len' - ], obj) + , 'name' + ] + , addSize = 0 +var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) +obj.name_len = Buffer.byteLength(obj.name) +buf_name.write(obj.name) +obj.name = buf_name +format += 'a' +addSize += (len / 4) + args = parameterOrder(args, obj) args[0] = 85 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'pixel' , 'exact_red' , 'exact_green' @@ -1505,35 +1873,47 @@ module.exports = , 'visual_green' , 'visual_blue' ] , format = "LSSSSSS" - return associate(reply, buf.unpack(format)) + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , AllocColorCells: [ function(obj, cb) { var format = 'CCSLSS' - , args = parameterOrder([ null + , args = [ null , 'contiguous' , null , 'cmap' , 'colors' , 'planes' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 86 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'pixels_len' , 'masks_len' ] - , format = "SS" - return associate(reply, buf.unpack(format)) + , format = "SSxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , AllocColorPlanes: [ function(obj, cb) { var format = 'CCSLSSSS' - , args = parameterOrder([ null + , args = [ null , 'contiguous' , null , 'cmap' @@ -1541,93 +1921,131 @@ module.exports = , 'reds' , 'greens' , 'blues' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 87 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'pixels_len' , 'red_mask' , 'green_mask' , 'blue_mask' ] - , format = "SLLL" - return associate(reply, buf.unpack(format)) + , format = "SxxLLLxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , FreeColors: [ function(obj, cb) { var format = 'CxSLL' - , args = parameterOrder([ null + , args = [ null , null , 'cmap' , 'plane_mask' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 88 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , StoreColors: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'cmap' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 89 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , StoreNamedColor: [ function(obj, cb) { var format = 'CCSLLSxx' - , args = parameterOrder([ null + , args = [ null , 'flags' , null , 'cmap' , 'pixel' , 'name_len' - ], obj) + , 'name' + ] + , addSize = 0 +var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) +obj.name_len = Buffer.byteLength(obj.name) +buf_name.write(obj.name) +obj.name = buf_name +format += 'a' +addSize += (len / 4) + args = parameterOrder(args, obj) args[0] = 90 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , QueryColors: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'cmap' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 91 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'colors_len' ] - , format = "S" - return associate(reply, buf.unpack(format)) + , format = "Sxxxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , LookupColor: [ function(obj, cb) { var format = 'CxSLSxx' - , args = parameterOrder([ null + , args = [ null , null , 'cmap' , 'name_len' - ], obj) + , 'name' + ] + , addSize = 0 +var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) +obj.name_len = Buffer.byteLength(obj.name) +buf_name.write(obj.name) +obj.name = buf_name +format += 'a' +addSize += (len / 4) + args = parameterOrder(args, obj) args[0] = 92 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'exact_red' , 'exact_green' , 'exact_blue' @@ -1635,13 +2053,18 @@ module.exports = , 'visual_green' , 'visual_blue' ] , format = "SSSSSS" - return associate(reply, buf.unpack(format)) + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , CreateCursor: [ function(obj, cb) { var format = 'CxSLLLSSSSSSSS' - , args = parameterOrder([ null + , args = [ null , null , 'cid' , 'source' @@ -1654,16 +2077,18 @@ module.exports = , 'back_blue' , 'x' , 'y' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 93 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , CreateGlyphCursor: [ function(obj, cb) { var format = 'CxSLLLSSSSSSSS' - , args = parameterOrder([ null + , args = [ null , null , 'cid' , 'source_font' @@ -1676,28 +2101,32 @@ module.exports = , 'back_red' , 'back_green' , 'back_blue' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 94 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , FreeCursor: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'cursor' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 95 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , RecolorCursor: [ function(obj, cb) { var format = 'CxSLSSSSSS' - , args = parameterOrder([ null + , args = [ null , null , 'cursor' , 'fore_red' @@ -1706,397 +2135,526 @@ module.exports = , 'back_red' , 'back_green' , 'back_blue' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 96 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , QueryBestSize: [ function(obj, cb) { var format = 'CCSLSS' - , args = parameterOrder([ null + , args = [ null , '_class' , null , 'drawable' , 'width' , 'height' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 97 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'width' , 'height' ] , format = "SS" - return associate(reply, buf.unpack(format)) + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , QueryExtension: [ function(obj, cb) { var format = 'CxSSxx' - , args = parameterOrder([ null + , args = [ null , null , 'name_len' - ], obj) + , 'name' + ] + , addSize = 0 +var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) +obj.name_len = Buffer.byteLength(obj.name) +buf_name.write(obj.name) +obj.name = buf_name +format += 'a' +addSize += (len / 4) + args = parameterOrder(args, obj) args[0] = 98 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'present' , 'major_opcode' , 'first_event' , 'first_error' ] , format = "CCCC" - return associate(reply, buf.unpack(format)) + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , ListExtensions: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 99 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'names_len' ] - , format = "C" - return associate(reply, buf.unpack(format)) + , function(buf, prop) { + var fields + , format = "xxxxxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.names_len = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , ChangeKeyboardMapping: [ function(obj, cb) { var format = 'CCSCC' - , args = parameterOrder([ null + , args = [ null , 'keycode_count' , null , 'first_keycode' , 'keysyms_per_keycode' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 100 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , GetKeyboardMapping: [ function(obj, cb) { var format = 'CxSCC' - , args = parameterOrder([ null + , args = [ null , null , 'first_keycode' , 'count' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 101 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'keysyms_per_keycode' ] - , format = "C" - return associate(reply, buf.unpack(format)) + , function(buf, prop) { + var fields + , format = "xxxxxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.keysyms_per_keycode = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , ChangeKeyboardControl: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + , 'value_mask' + , 'value_list' + ] + , addSize = 0 , packed = packMask(valueMask['ChangeKeyboardControl'], obj.value_mask) + + obj.value_mask = packed[0] format += "L" - args.push(packed[0]) - args = args.concat(packed[1]) + obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") + args = parameterOrder(args, obj) args[0] = 102 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , GetKeyboardControl: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 103 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'global_auto_repeat' - , 'led_mask' + , function(buf, prop) { + var fields = + [ 'led_mask' , 'key_click_percent' , 'bell_percent' , 'bell_pitch' , 'bell_duration' ] - , format = "CLCCSS" - return associate(reply, buf.unpack(format)) + , format = "LCCSSxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.global_auto_repeat = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , Bell: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder([ null + , args = [ null , 'percent' , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 104 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , ChangePointerControl: [ function(obj, cb) { var format = 'CxSsssCC' - , args = parameterOrder([ null + , args = [ null , null , 'acceleration_numerator' , 'acceleration_denominator' , 'threshold' , 'do_acceleration' , 'do_threshold' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 105 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , GetPointerControl: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 106 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'acceleration_numerator' , 'acceleration_denominator' , 'threshold' ] - , format = "SSS" - return associate(reply, buf.unpack(format)) + , format = "SSSxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , SetScreenSaver: [ function(obj, cb) { var format = 'CxSssCC' - , args = parameterOrder([ null + , args = [ null , null , 'timeout' , 'interval' , 'prefer_blanking' , 'allow_exposures' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 107 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , GetScreenSaver: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 108 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = + , function(buf, prop) { + var fields = [ 'timeout' , 'interval' , 'prefer_blanking' , 'allow_exposures' ] - , format = "SSCC" - return associate(reply, buf.unpack(format)) + , format = "SSCCxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , ChangeHosts: [ function(obj, cb) { var format = 'CCSCxS' - , args = parameterOrder([ null + , args = [ null , 'mode' , null , 'family' , 'address_len' - ], obj) + , 'address' + ] + , addSize = 0 +var len = xutil.padded_length(obj.address.length) + , buf_name = new Buffer(len) +obj.address_len = Buffer.byteLength(obj.address) +buf_name.write(obj.address) +obj.address = buf_name +format += 'a' +addSize += (len / 4) + args = parameterOrder(args, obj) args[0] = 109 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , ListHosts: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 110 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'mode' - , 'hosts_len' ] - , format = "CS" - return associate(reply, buf.unpack(format)) + , function(buf, prop) { + var fields = + [ 'hosts_len' ] + , format = "Sxxxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.mode = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , SetAccessControl: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder([ null + , args = [ null , 'mode' , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 111 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , SetCloseDownMode: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder([ null + , args = [ null , 'mode' , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 112 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , KillClient: [ function(obj, cb) { var format = 'CxSL' - , args = parameterOrder([ null + , args = [ null , null , 'resource' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 113 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , RotateProperties: [ function(obj, cb) { var format = 'CxSLSs' - , args = parameterOrder([ null + , args = [ null , null , 'window' , 'atoms_len' , 'delta' - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 114 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] , ForceScreenSaver: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder([ null + , args = [ null , 'mode' , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 115 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } ] , SetPointerMapping: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder([ null + , args = [ null , 'map_len' , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 116 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'status' ] - , format = "C" - return associate(reply, buf.unpack(format)) + , function(buf, prop) { + var fields + , format = "" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.status = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , GetPointerMapping: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 117 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'map_len' ] - , format = "C" - return associate(reply, buf.unpack(format)) + , function(buf, prop) { + var fields + , format = "xxxxxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.map_len = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , SetModifierMapping: [ function(obj, cb) { var format = 'CCS' - , args = parameterOrder([ null + , args = [ null , 'keycodes_per_modifier' , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 118 - args[2] = size(format) + args[2] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'status' ] - , format = "C" - return associate(reply, buf.unpack(format)) + , function(buf, prop) { + var fields + , format = "" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.status = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , GetModifierMapping: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 119 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } - , function(buf, format) { - var reply = - [ 'keycodes_per_modifier' ] - , format = "C" - return associate(reply, buf.unpack(format)) + , function(buf, prop) { + var fields + , format = "xxxxxxxxxxxxxxxxxxxxxxxx" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + reply.keycodes_per_modifier = prop + reply._raw = buf + reply._offset = unpacked.offset + return reply + } ] , NoOperation: [ function(obj, cb) { var format = 'CxS' - , args = parameterOrder([ null + , args = [ null , null - ], obj) + ] + , addSize = 0 + args = parameterOrder(args, obj) args[0] = 127 - args[1] = size(format) + args[1] = size(format) + addSize return [format, args] } ] diff --git a/lib/x11/unpackbuffer.js b/lib/x11/unpackbuffer.js index 706fcd8..b1f00ce 100644 --- a/lib/x11/unpackbuffer.js +++ b/lib/x11/unpackbuffer.js @@ -50,6 +50,7 @@ module.exports.addUnpack = function(Buffer) } current_arg++; } + data.offset = offset return data; } diff --git a/stubs/packList.tpl b/stubs/packList.tpl new file mode 100644 index 0000000..36729fe --- /dev/null +++ b/stubs/packList.tpl @@ -0,0 +1,15 @@ +{{each(i, field) list}} +{{if isListType(field)}} + {{if field.type == 'char' }} + {{if field.value == null }} +var len = xutil.padded_length(obj.${prepPropName(field.name)}.length) + , buf_name = new Buffer(len) +obj.${listLengthName(field)} = Buffer.byteLength(obj.${prepPropName(field.name)}) +buf_name.write(obj.${field.name}) +obj.${field.name} = buf_name +format += 'a' +addSize += (len / 4) + {{/if}} + {{/if}} +{{/if}} +{{/each}} diff --git a/stubs/requests.tpl b/stubs/requests.tpl index 51d0f91..4baa549 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -1,4 +1,5 @@ var packMask = require('../valuemask') + , xutil = require('../xutil') , valueMask = {{each(i, requestName) Object.keys(requests)}} {{if getValueMask(requestName) }} @@ -12,9 +13,12 @@ var packMask = require('../valuemask') } function parameterOrder(params, obj) { - return params.map(function(name) { - return name && obj[name] + var ret = [] + params.forEach(function(name, i) { + if (Array.isArray(obj[name])) return ret = ret.concat(obj[name]) + else ret[i] = name && obj[name] }) + return ret; } function size(str) { @@ -53,48 +57,65 @@ module.exports = ${getDelim(i)} ${reqName}: [ function(obj, cb) { var format = '{{if prePackFirst(requests[reqName])}}C${getBufPack(requests[reqName].field && requests[reqName].field[0])}{{else}}S{{/if}}S{{each(j, field) requests[reqName].field}}{{if !(prePackFirst(requests[reqName]) && j === 0)}}${getBufPack(field)}{{/if}}{{/each}}' - , args = parameterOrder([ null + , args = [ null {{if prePackFirst(requests[reqName]) && requests[reqName].field && requests[reqName].field[0].name}} , '${prepPropName(requests[reqName].field[0].name)}' {{/if}} , null {{each(j, field) requests[reqName].field}} - {{if field.fieldType == 'field' && !(j === 0 && prePackFirst(requests[reqName]))}} + {{if (field.fieldType == 'field' || field.fieldType == 'valueparam' || field.type == 'char') && !(j === 0 && prePackFirst(requests[reqName]))}} + {{if field.fieldType == 'valueparam'}} + {{if !(isListAccountedFor(requests[reqName], field))}} + , '${listLengthName(field)}' + {{/if}} + , '${field['value-list-name']}' + {{else}} , '${prepPropName(field.name)}' + {{/if}} {{/if}} {{/each}} - ], obj) + ] + , addSize = 0 {{each(j, field) requests[reqName].field}} {{if isListType(field)}} {{if isValueMask(field)}} , packed = packMask(valueMask['${reqName}'], obj.${prepPropName(field['value-mask-name'])}) - {{if isListAccountedFor(requests[reqName], field)}} - args[${listLenIndex(requests[reqName], field)}] = packed[0] - {{else}} + obj.${field['value-mask-name']} = packed[0] + {{if !(isListAccountedFor(requests[reqName], field))}} format += "${bufPackType(field['value-mask-type'])}" - args.push(packed[0]) {{/if}} - args = args.concat(packed[1]) + obj.${field['value-list-name']} = packed[1] format += new Array(packed[1].length + 1).join("${bufPackType('CARD32')}") {{/if}} {{/if}} {{/each}} + {{html packList("args", "format", requests[reqName].field, reqName)}} + args = parameterOrder(args, obj) args[0] = ${requests[reqName].opcode} - args[${requestLengthIndex(requests[reqName])}] = size(format) + args[${requestLengthIndex(requests[reqName])}] = size(format) + addSize return [format, args] } {{if requests[reqName].reply}} - , function(buf, format) { - var reply{{if firstType(requests[reqName].reply.field, 'field')}} = - {{each(j, field) requests[reqName].reply.field}} + , function(buf, prop) { + var fields{{if shiftedFirstType(requests[reqName].reply.field, 'field')}} = + {{each(j, field) requests[reqName].reply.field.slice(1)}} {{if field.fieldType == 'field'}} - ${getDelim(realIndex(requests[reqName].reply, field), '[')} '${field.name}' + ${getDelim(realIndex(requests[reqName].reply.field.slice(1), field), '[')} '${field.name}' {{/if}} {{/each}} ] {{/if}} - , format = "{{each(j, field) requests[reqName].reply.field}}{{if field.fieldType == 'field' }}${getBufPack(field)}{{/if}}{{/each}}" - return associate(reply, buf.unpack(format)) + , format = "{{each(j, field) requests[reqName].reply.field.slice(1)}}${getBufPack(field)}{{/each}}" + , unpacked = buf.unpack(format) + , reply = associate(fields, unpacked) + {{if isFieldFirst(requests[reqName].reply.field)}} + reply.${requests[reqName].reply.field[0].name} = prop + {{/if}} + reply._raw = buf + reply._offset = unpacked.offset + {{html unpackList("reply", "buf", "unpacked.offset", requests[reqName].reply.field, reqName)}} + return reply + } {{/if}} ] diff --git a/stubs/unpackList.tpl b/stubs/unpackList.tpl new file mode 100644 index 0000000..2be3a9a --- /dev/null +++ b/stubs/unpackList.tpl @@ -0,0 +1,9 @@ +{{each(i, field) list}} + {{if isListType(field)}} + {{if field.type == 'char' }} +${obj}.${prepPropName(field.name)} = ${buf}.slice(${offset}, ${offset} + ${obj}.${listLengthName(field)}).toString() +${offset} += ${obj}.${listLengthName(field)} + + {{/if}} + {{/if}} +{{/each}} From ff58ea51f0cf24bf2ee618898405aa7deb2cff85 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Wed, 7 Sep 2011 03:39:16 -0500 Subject: [PATCH 10/43] changed atoms test. --- test/atoms.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/test/atoms.js b/test/atoms.js index 0cd4ec6..21c1fdd 100644 --- a/test/atoms.js +++ b/test/atoms.js @@ -3,11 +3,12 @@ var x11 = require('../lib/x11'); var xclient = x11.createClient(); xclient.on('connect', function(display) { - var X = this; - var hello = 'Hello, node.js'; - X.InternAtom(false, hello, function(atomId) { - X.GetAtomName(atomId, function(str) { - console.log('Value for atom ' + atomId + ' is \"' + str + '\"'); - }); - }); + var X = this; + var hello = 'Hello, node.js'; + X.InternAtom({ only_if_exists: false, name: hello }, function(internResp) { + console.log(internResp) + X.GetAtomName({ atom: internResp.atom }, function(atomNameResp) { + console.log(atomNameResp); + }); + }); }); From bd20afb1cc4a454b2df2206f3ef652210f4f17b7 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Wed, 7 Sep 2011 03:39:57 -0500 Subject: [PATCH 11/43] make hidden props non enumerable. --- lib/x11/autogen/requests.js | 164 ++++++++++++++++++------------------ stubs/requests.tpl | 4 +- 2 files changed, 82 insertions(+), 86 deletions(-) diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 1ba337b..383f6c9 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -172,8 +172,8 @@ module.exports = , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.backing_store = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -355,8 +355,8 @@ module.exports = , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.depth = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -382,8 +382,8 @@ module.exports = , format = "LLSxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -416,8 +416,8 @@ addSize += (len / 4) , format = "L" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -441,10 +441,8 @@ addSize += (len / 4) , format = "Sxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset -console.log(buf.slice(unpacked.offset, unpacked.offset + reply.name_len), unpacked.offset, reply.name_len) - + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) reply.name = buf.slice(unpacked.offset, unpacked.offset + reply.name_len).toString() unpacked.offset += reply.name_len return reply @@ -512,8 +510,8 @@ unpacked.offset += reply.name_len , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.format = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -537,8 +535,8 @@ unpacked.offset += reply.name_len , format = "Sxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -578,8 +576,8 @@ unpacked.offset += reply.name_len , format = "L" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -645,8 +643,8 @@ unpacked.offset += reply.name_len , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.status = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -742,8 +740,8 @@ unpacked.offset += reply.name_len , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.status = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -864,8 +862,8 @@ unpacked.offset += reply.name_len , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.same_screen = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -891,8 +889,8 @@ unpacked.offset += reply.name_len , format = "Lxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -922,8 +920,8 @@ unpacked.offset += reply.name_len , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.same_screen = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -984,8 +982,8 @@ unpacked.offset += reply.name_len , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.revert_to = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -1007,8 +1005,8 @@ unpacked.offset += reply.name_len , format = "" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -1081,8 +1079,8 @@ addSize += (len / 4) , format = "undefinedxxxxundefinedxxxxSSSSCCCCssL" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -1114,8 +1112,8 @@ addSize += (len / 4) , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.draw_direction = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -1148,8 +1146,8 @@ addSize += (len / 4) , format = "Sxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -1195,10 +1193,8 @@ addSize += (len / 4) , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.name_len = prop - reply._raw = buf - reply._offset = unpacked.offset -console.log(buf.slice(unpacked.offset, unpacked.offset + reply.name_len), unpacked.offset, reply.name_len) - + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) reply.name = buf.slice(unpacked.offset, unpacked.offset + reply.name_len).toString() unpacked.offset += reply.name_len return reply @@ -1245,8 +1241,8 @@ addSize += (len / 4) , format = "Sxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -1627,8 +1623,8 @@ addSize += (len / 4) , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.depth = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -1804,8 +1800,8 @@ addSize += (len / 4) , format = "Sxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -1835,8 +1831,8 @@ addSize += (len / 4) , format = "SSSxxL" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -1875,8 +1871,8 @@ addSize += (len / 4) , format = "LSSSSSS" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -1904,8 +1900,8 @@ addSize += (len / 4) , format = "SSxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -1937,8 +1933,8 @@ addSize += (len / 4) , format = "SxxLLLxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2016,8 +2012,8 @@ addSize += (len / 4) , format = "Sxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2055,8 +2051,8 @@ addSize += (len / 4) , format = "SSSSSS" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2166,8 +2162,8 @@ addSize += (len / 4) , format = "SS" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2202,8 +2198,8 @@ addSize += (len / 4) , format = "CCCC" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2226,8 +2222,8 @@ addSize += (len / 4) , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.names_len = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2268,8 +2264,8 @@ addSize += (len / 4) , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.keysyms_per_keycode = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2318,8 +2314,8 @@ addSize += (len / 4) , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.global_auto_repeat = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2376,8 +2372,8 @@ addSize += (len / 4) , format = "SSSxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2420,8 +2416,8 @@ addSize += (len / 4) , format = "SSCCxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2469,8 +2465,8 @@ addSize += (len / 4) , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.mode = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2566,8 +2562,8 @@ addSize += (len / 4) , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.status = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2590,8 +2586,8 @@ addSize += (len / 4) , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.map_len = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2615,8 +2611,8 @@ addSize += (len / 4) , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.status = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } @@ -2639,8 +2635,8 @@ addSize += (len / 4) , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.keycodes_per_modifier = prop - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) return reply } diff --git a/stubs/requests.tpl b/stubs/requests.tpl index 4baa549..ea3ea32 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -111,8 +111,8 @@ ${getDelim(i)} ${reqName}: {{if isFieldFirst(requests[reqName].reply.field)}} reply.${requests[reqName].reply.field[0].name} = prop {{/if}} - reply._raw = buf - reply._offset = unpacked.offset + Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) + Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) {{html unpackList("reply", "buf", "unpacked.offset", requests[reqName].reply.field, reqName)}} return reply From db524a73d94687d8aece9dda752dda6a8ac20e99 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Wed, 7 Sep 2011 04:22:17 -0500 Subject: [PATCH 12/43] rearranging and properly indenting generated code. --- generateFiles.js | 15 ++- lib/x11/autogen/requests.js | 192 +++++++++++++++++------------------- stubs/packList.tpl | 15 ++- stubs/requests.tpl | 18 +--- 4 files changed, 118 insertions(+), 122 deletions(-) diff --git a/generateFiles.js b/generateFiles.js index a8fdb93..30a5009 100644 --- a/generateFiles.js +++ b/generateFiles.js @@ -122,7 +122,7 @@ function realIndex(request, field) { } } -function unpackList(obj, buf, offset, list, name) { +function unpackList(indents, obj, buf, offset, list, name) { var subData = {} //Object.create(data) , key for (key in data) subData[key] = data[key] @@ -132,10 +132,10 @@ function unpackList(obj, buf, offset, list, name) { subData.list = list subData.theName = name var tplFile = fs.readFileSync('stubs/unpackList.tpl').toString().replace(/\n\s*{{/g, '{{').replace(/}}\s*$/g, '}}') - return jqtpl.tmpl(tplFile, subData) + return indent(indents, jqtpl.tmpl(tplFile, subData)) } -function packList(args, format, list, name) { +function packList(indents, args, format, list, name) { var subData = {} //Object.create(data) , key for (key in data) subData[key] = data[key] @@ -144,7 +144,14 @@ function packList(args, format, list, name) { subData.list = list subData.theName = name var tplFile = fs.readFileSync('stubs/packList.tpl').toString().replace(/\n\s*{{/g, '{{').replace(/}}\s*$/g, '}}') - return jqtpl.tmpl(tplFile, subData) + return indent(indents, jqtpl.tmpl(tplFile, subData)) +} + +function indent(num, lines) { + var indent = new Array(num + 1).join(' ') + return lines.split('\n').map(function(line) { + return line ? indent + line : '' + }).join('\n') } function getFieldRef(name, field, obj) { //todo read operators appropriately diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 383f6c9..7ac3c48 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -105,9 +105,8 @@ module.exports = , 'value_list' ] , addSize = 0 - , packed = packMask(valueMask['CreateWindow'], obj.value_mask) - - obj.value_mask = packed[0] + var packed = packMask(valueMask['CreateWindow'], obj.value_mask) + obj.value_mask = packed[0] format += "L" obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") @@ -127,9 +126,8 @@ module.exports = , 'value_list' ] , addSize = 0 - , packed = packMask(valueMask['ChangeWindowAttributes'], obj.value_mask) - - obj.value_mask = packed[0] + var packed = packMask(valueMask['ChangeWindowAttributes'], obj.value_mask) + obj.value_mask = packed[0] format += "L" obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") @@ -304,9 +302,8 @@ module.exports = , 'value_list' ] , addSize = 0 - , packed = packMask(valueMask['ConfigureWindow'], obj.value_mask) - - obj.value_mask = packed[0] + var packed = packMask(valueMask['ConfigureWindow'], obj.value_mask) + obj.value_mask = packed[0] obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") args = parameterOrder(args, obj) @@ -398,13 +395,13 @@ module.exports = , 'name' ] , addSize = 0 -var len = xutil.padded_length(obj.name.length) - , buf_name = new Buffer(len) -obj.name_len = Buffer.byteLength(obj.name) -buf_name.write(obj.name) -obj.name = buf_name -format += 'a' -addSize += (len / 4) + var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) + obj.name_len = Buffer.byteLength(obj.name) + buf_name.write(obj.name) + obj.name = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 16 args[2] = size(format) + addSize @@ -443,8 +440,8 @@ addSize += (len / 4) , reply = associate(fields, unpacked) Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) -reply.name = buf.slice(unpacked.offset, unpacked.offset + reply.name_len).toString() -unpacked.offset += reply.name_len + reply.name = buf.slice(unpacked.offset, unpacked.offset + reply.name_len).toString() + unpacked.offset += reply.name_len return reply } @@ -1021,13 +1018,13 @@ unpacked.offset += reply.name_len , 'name' ] , addSize = 0 -var len = xutil.padded_length(obj.name.length) - , buf_name = new Buffer(len) -obj.name_len = Buffer.byteLength(obj.name) -buf_name.write(obj.name) -obj.name = buf_name -format += 'a' -addSize += (len / 4) + var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) + obj.name_len = Buffer.byteLength(obj.name) + buf_name.write(obj.name) + obj.name = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 45 args[1] = size(format) + addSize @@ -1128,13 +1125,13 @@ addSize += (len / 4) , 'pattern' ] , addSize = 0 -var len = xutil.padded_length(obj.pattern.length) - , buf_name = new Buffer(len) -obj.pattern_len = Buffer.byteLength(obj.pattern) -buf_name.write(obj.pattern) -obj.pattern = buf_name -format += 'a' -addSize += (len / 4) + var len = xutil.padded_length(obj.pattern.length) + , buf_name = new Buffer(len) + obj.pattern_len = Buffer.byteLength(obj.pattern) + buf_name.write(obj.pattern) + obj.pattern = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 49 args[1] = size(format) + addSize @@ -1162,13 +1159,13 @@ addSize += (len / 4) , 'pattern' ] , addSize = 0 -var len = xutil.padded_length(obj.pattern.length) - , buf_name = new Buffer(len) -obj.pattern_len = Buffer.byteLength(obj.pattern) -buf_name.write(obj.pattern) -obj.pattern = buf_name -format += 'a' -addSize += (len / 4) + var len = xutil.padded_length(obj.pattern.length) + , buf_name = new Buffer(len) + obj.pattern_len = Buffer.byteLength(obj.pattern) + buf_name.write(obj.pattern) + obj.pattern = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 50 args[1] = size(format) + addSize @@ -1195,8 +1192,8 @@ addSize += (len / 4) reply.name_len = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) -reply.name = buf.slice(unpacked.offset, unpacked.offset + reply.name_len).toString() -unpacked.offset += reply.name_len + reply.name = buf.slice(unpacked.offset, unpacked.offset + reply.name_len).toString() + unpacked.offset += reply.name_len return reply } @@ -1210,13 +1207,13 @@ unpacked.offset += reply.name_len , 'path' ] , addSize = 0 -var len = xutil.padded_length(obj.path.length) - , buf_name = new Buffer(len) -obj.path_len = Buffer.byteLength(obj.path) -buf_name.write(obj.path) -obj.path = buf_name -format += 'a' -addSize += (len / 4) + var len = xutil.padded_length(obj.path.length) + , buf_name = new Buffer(len) + obj.path_len = Buffer.byteLength(obj.path) + buf_name.write(obj.path) + obj.path = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 51 args[1] = size(format) + addSize @@ -1290,9 +1287,8 @@ addSize += (len / 4) , 'value_list' ] , addSize = 0 - , packed = packMask(valueMask['CreateGC'], obj.value_mask) - - obj.value_mask = packed[0] + var packed = packMask(valueMask['CreateGC'], obj.value_mask) + obj.value_mask = packed[0] format += "L" obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") @@ -1312,9 +1308,8 @@ addSize += (len / 4) , 'value_list' ] , addSize = 0 - , packed = packMask(valueMask['ChangeGC'], obj.value_mask) - - obj.value_mask = packed[0] + var packed = packMask(valueMask['ChangeGC'], obj.value_mask) + obj.value_mask = packed[0] format += "L" obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") @@ -1676,13 +1671,13 @@ addSize += (len / 4) , 'string' ] , addSize = 0 -var len = xutil.padded_length(obj.string.length) - , buf_name = new Buffer(len) -obj.string_len = Buffer.byteLength(obj.string) -buf_name.write(obj.string) -obj.string = buf_name -format += 'a' -addSize += (len / 4) + var len = xutil.padded_length(obj.string.length) + , buf_name = new Buffer(len) + obj.string_len = Buffer.byteLength(obj.string) + buf_name.write(obj.string) + obj.string = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 76 args[2] = size(format) + addSize @@ -1847,13 +1842,13 @@ addSize += (len / 4) , 'name' ] , addSize = 0 -var len = xutil.padded_length(obj.name.length) - , buf_name = new Buffer(len) -obj.name_len = Buffer.byteLength(obj.name) -buf_name.write(obj.name) -obj.name = buf_name -format += 'a' -addSize += (len / 4) + var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) + obj.name_len = Buffer.byteLength(obj.name) + buf_name.write(obj.name) + obj.name = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 85 args[1] = size(format) + addSize @@ -1980,13 +1975,13 @@ addSize += (len / 4) , 'name' ] , addSize = 0 -var len = xutil.padded_length(obj.name.length) - , buf_name = new Buffer(len) -obj.name_len = Buffer.byteLength(obj.name) -buf_name.write(obj.name) -obj.name = buf_name -format += 'a' -addSize += (len / 4) + var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) + obj.name_len = Buffer.byteLength(obj.name) + buf_name.write(obj.name) + obj.name = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 90 args[2] = size(format) + addSize @@ -2028,13 +2023,13 @@ addSize += (len / 4) , 'name' ] , addSize = 0 -var len = xutil.padded_length(obj.name.length) - , buf_name = new Buffer(len) -obj.name_len = Buffer.byteLength(obj.name) -buf_name.write(obj.name) -obj.name = buf_name -format += 'a' -addSize += (len / 4) + var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) + obj.name_len = Buffer.byteLength(obj.name) + buf_name.write(obj.name) + obj.name = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 92 args[1] = size(format) + addSize @@ -2177,13 +2172,13 @@ addSize += (len / 4) , 'name' ] , addSize = 0 -var len = xutil.padded_length(obj.name.length) - , buf_name = new Buffer(len) -obj.name_len = Buffer.byteLength(obj.name) -buf_name.write(obj.name) -obj.name = buf_name -format += 'a' -addSize += (len / 4) + var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) + obj.name_len = Buffer.byteLength(obj.name) + buf_name.write(obj.name) + obj.name = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 98 args[1] = size(format) + addSize @@ -2279,9 +2274,8 @@ addSize += (len / 4) , 'value_list' ] , addSize = 0 - , packed = packMask(valueMask['ChangeKeyboardControl'], obj.value_mask) - - obj.value_mask = packed[0] + var packed = packMask(valueMask['ChangeKeyboardControl'], obj.value_mask) + obj.value_mask = packed[0] format += "L" obj.value_list = packed[1] format += new Array(packed[1].length + 1).join("L") @@ -2433,13 +2427,13 @@ addSize += (len / 4) , 'address' ] , addSize = 0 -var len = xutil.padded_length(obj.address.length) - , buf_name = new Buffer(len) -obj.address_len = Buffer.byteLength(obj.address) -buf_name.write(obj.address) -obj.address = buf_name -format += 'a' -addSize += (len / 4) + var len = xutil.padded_length(obj.address.length) + , buf_name = new Buffer(len) + obj.address_len = Buffer.byteLength(obj.address) + buf_name.write(obj.address) + obj.address = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 109 args[2] = size(format) + addSize diff --git a/stubs/packList.tpl b/stubs/packList.tpl index 36729fe..73bcf57 100644 --- a/stubs/packList.tpl +++ b/stubs/packList.tpl @@ -1,7 +1,16 @@ {{each(i, field) list}} {{if isListType(field)}} - {{if field.type == 'char' }} - {{if field.value == null }} + {{if isValueMask(field)}} +var packed = packMask(valueMask['${theName}'], obj.${prepPropName(field['value-mask-name'])}) +obj.${field['value-mask-name']} = packed[0] + {{if !(isListAccountedFor(requests[theName], field))}} +format += "${bufPackType(field['value-mask-type'])}" + {{/if}} +obj.${field['value-list-name']} = packed[1] +format += new Array(packed[1].length + 1).join("${bufPackType('CARD32')}") + + {{else field.type == 'char' }} + {{if field.value == null }} var len = xutil.padded_length(obj.${prepPropName(field.name)}.length) , buf_name = new Buffer(len) obj.${listLengthName(field)} = Buffer.byteLength(obj.${prepPropName(field.name)}) @@ -9,7 +18,7 @@ buf_name.write(obj.${field.name}) obj.${field.name} = buf_name format += 'a' addSize += (len / 4) - {{/if}} + {{/if}} {{/if}} {{/if}} {{/each}} diff --git a/stubs/requests.tpl b/stubs/requests.tpl index ea3ea32..f193977 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -76,21 +76,7 @@ ${getDelim(i)} ${reqName}: {{/each}} ] , addSize = 0 - {{each(j, field) requests[reqName].field}} - {{if isListType(field)}} - {{if isValueMask(field)}} - , packed = packMask(valueMask['${reqName}'], obj.${prepPropName(field['value-mask-name'])}) - - obj.${field['value-mask-name']} = packed[0] - {{if !(isListAccountedFor(requests[reqName], field))}} - format += "${bufPackType(field['value-mask-type'])}" - {{/if}} - obj.${field['value-list-name']} = packed[1] - format += new Array(packed[1].length + 1).join("${bufPackType('CARD32')}") - {{/if}} - {{/if}} - {{/each}} - {{html packList("args", "format", requests[reqName].field, reqName)}} + {{html packList(3, "args", "format", requests[reqName].field, reqName)}} args = parameterOrder(args, obj) args[0] = ${requests[reqName].opcode} args[${requestLengthIndex(requests[reqName])}] = size(format) + addSize @@ -113,7 +99,7 @@ ${getDelim(i)} ${reqName}: {{/if}} Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) - {{html unpackList("reply", "buf", "unpacked.offset", requests[reqName].reply.field, reqName)}} + {{html unpackList(3, "reply", "buf", "unpacked.offset", requests[reqName].reply.field, reqName)}} return reply } From 5d8ae42bb08e753b720273ceb77ddd30e1ad1ddc Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Thu, 8 Sep 2011 12:43:03 -0500 Subject: [PATCH 13/43] move some util functions out of the auto generated file. --- lib/x11/autogen/requests.js | 42 +++--------------------------------- lib/x11/xutil.js | 43 +++++++++++++++++++++++++++++++++++++ stubs/requests.tpl | 42 +++--------------------------------- 3 files changed, 49 insertions(+), 78 deletions(-) diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 7ac3c48..5f299c8 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -44,46 +44,10 @@ var packMask = require('../valuemask') , ArcMode: 4194304 } } + , parameterOrder = xutil.parameterOrder + , size = xutil.formatSize + , associate = xutil.associate -function parameterOrder(params, obj) { - var ret = [] - params.forEach(function(name, i) { - if (Array.isArray(obj[name])) return ret = ret.concat(obj[name]) - else ret[i] = name && obj[name] - }) - return ret; -} - -function size(str) { - var i = str.length - , size = 0 - while(i--) { - switch(str[i]) { - case 'C': - case 'c': - case 'x': - size += 1 - break; - case 'S': - case 's': - size += 2 - break; - case 'L': - case 'l': - size += 4 - break; - } - } - return size / 4 -} - -function associate(arr1, arr2) { - var ret = {} - for(var i = 0, len = Math.min(arr1.length, arr2.length); i < len; ++i) { - ret[arr1[i]] = arr2[i] - } - return ret -} module.exports = { CreateWindow: diff --git a/lib/x11/xutil.js b/lib/x11/xutil.js index d75b2b6..ce28689 100644 --- a/lib/x11/xutil.js +++ b/lib/x11/xutil.js @@ -25,5 +25,48 @@ function padded_string(str) return res; } +function parameterOrder(params, obj) { + var ret = [] + params.forEach(function(name, i) { + if (Array.isArray(obj[name])) return ret = ret.concat(obj[name]) + else ret[i] = name && obj[name] + }) + return ret; +} + +function size(str) { + var i = str.length + , size = 0 + while(i--) { + switch(str[i]) { + case 'C': + case 'c': + case 'x': + size += 1 + break; + case 'S': + case 's': + size += 2 + break; + case 'L': + case 'l': + size += 4 + break; + } + } + return size / 4 +} + +function associate(arr1, arr2) { + var ret = {} + for(var i = 0, len = Math.min(arr1.length, arr2.length); i < len; ++i) { + ret[arr1[i]] = arr2[i] + } + return ret +} + module.exports.padded_length = padded_length; module.exports.padded_string = padded_string; +module.exports.formatSize = size; +module.exports.associate = associate; +module.exports.parameterOrder = parameterOrder; diff --git a/stubs/requests.tpl b/stubs/requests.tpl index f193977..ba9ad6f 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -11,46 +11,10 @@ var packMask = require('../valuemask') {{/if}} {{/each}} } + , parameterOrder = xutil.parameterOrder + , size = xutil.formatSize + , associate = xutil.associate -function parameterOrder(params, obj) { - var ret = [] - params.forEach(function(name, i) { - if (Array.isArray(obj[name])) return ret = ret.concat(obj[name]) - else ret[i] = name && obj[name] - }) - return ret; -} - -function size(str) { - var i = str.length - , size = 0 - while(i--) { - switch(str[i]) { - case 'C': - case 'c': - case 'x': - size += 1 - break; - case 'S': - case 's': - size += 2 - break; - case 'L': - case 'l': - size += 4 - break; - } - } - return size / 4 -} - -function associate(arr1, arr2) { - var ret = {} - for(var i = 0, len = Math.min(arr1.length, arr2.length); i < len; ++i) { - ret[arr1[i]] = arr2[i] - } - return ret -} module.exports = {{each(i, reqName) Object.keys(requests)}} From ebbbbcc5fcac5751f36719100144189ae10e299a Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Thu, 8 Sep 2011 12:44:28 -0500 Subject: [PATCH 14/43] makes the offset added to result of buf.unpack array non enumerable --- lib/x11/unpackbuffer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/x11/unpackbuffer.js b/lib/x11/unpackbuffer.js index b1f00ce..aa6bf9f 100644 --- a/lib/x11/unpackbuffer.js +++ b/lib/x11/unpackbuffer.js @@ -50,7 +50,7 @@ module.exports.addUnpack = function(Buffer) } current_arg++; } - data.offset = offset + Object.defineProperty(data, 'offset', { enumerable: false, value: offset }) return data; } From e6da58a4dcf64311d8f809a649d3d14c6f06b5a6 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Thu, 8 Sep 2011 12:46:26 -0500 Subject: [PATCH 15/43] update protocols sub project --- protocols | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols b/protocols index bf4e682..27a52b2 160000 --- a/protocols +++ b/protocols @@ -1 +1 @@ -Subproject commit bf4e682b046c525697dac1f947b3936885e8c318 +Subproject commit 27a52b227e0fc375b682a9dacc1596e2a8bbc71d From cd2891192d748a83f776ea10eff5ccf055c0ce60 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Thu, 8 Sep 2011 12:49:19 -0500 Subject: [PATCH 16/43] added a pack/unpack struct template file --- generateFiles.js | 22 +++++++++++++++++++--- stubs/structs.tpl | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 stubs/structs.tpl diff --git a/generateFiles.js b/generateFiles.js index 30a5009..00bd7a8 100644 --- a/generateFiles.js +++ b/generateFiles.js @@ -3,6 +3,7 @@ var fs = require('fs') , typeLookup = JSON.parse(fs.readFileSync('protocols/xTypes.json')) , xProto = JSON.parse(fs.readFileSync('protocols/xProtocol.json')) , data = { requests: xProto.request + , structs: xProto.struct , getValueMask: getValueMask , getDelim: getDelim , enumVal: enumVal @@ -23,9 +24,11 @@ var fs = require('fs') , getFieldRef: getFieldRef , isFieldFirst: isFieldFirst , listLengthName: listLengthName + , fieldName: fieldName + , nonPad: nonPad } -;['requests'].forEach(function(name) { +;['requests', 'structs'].forEach(function(name) { var tplFile = fs.readFileSync('stubs/' + name + '.tpl').toString().replace(/\n\s*{{/g, '{{').replace(/}}\s*$/g, '}}') fs.writeFileSync('lib/x11/autogen/' + name + '.js', jqtpl.tmpl(tplFile, data)) }) @@ -34,8 +37,8 @@ function getValueMask(requestName) { return typeLookup.valuemaskEnum[requestName] && xProto.enum[typeLookup.valuemaskEnum[requestName]].field } -function getDelim(i, ch) { - return i == 0 ? (ch != null ? ch : '{') : ',' +function getDelim(i, first, rest) { + return i == 0 ? (first != null ? first : '{') : (rest != null ? rest : ',') } function enumVal(val) { @@ -173,3 +176,16 @@ function listLengthName(field) { function isFieldFirst(fields) { return fields[0].fieldType == 'field' } + +function fieldName(field) { + return prepPropName( + field.fieldType == 'valueparam' ? field['value-list-name'] + : field.name + ) +} + +function nonPad(fields){ + return fields.filter(function(field){ + return field.fieldType != 'pad' + }) +} diff --git a/stubs/structs.tpl b/stubs/structs.tpl new file mode 100644 index 0000000..0ce7f20 --- /dev/null +++ b/stubs/structs.tpl @@ -0,0 +1,42 @@ +var structs = exports + , xutil = require('../xutil') + , parameterOrder = xutil.parameterOrder + , size = xutil.formatSize + , associate = xutil.associate + +{{each(structName, attr) structs}} + +structs.${structName} = {} + +structs.${structName}.pack = function pack${structName}(obj, format) { + format = format || "" + format += '{{each(j, field) structs[structName].field}}${getBufPack(field)}{{/each}}' + var args = [ {{each(i, field) nonPad(attr.field)}} + {{if isListValue(field) && !(isListAccountedFor(structs[structName], field))}} + ${getDelim(i, " ", ", ")}'${listLengthName(field)}' + {{/if}} + ${getDelim(i, " ", ", ")}'${fieldName(field)}' + {{/each}} ] + , addSize = 0 + {{html packList(1, "args", "format", structs[structName].field, structName)}} + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.${structName}.unpack = function unpack${structName}(buf, offset) { + offset = offset || 0 + var fields{{if shiftedFirstType(structs[structName].field, 'field')}} = + {{each(j, field) structs[structName].field}} + {{if field.fieldType == 'field'}} + ${getDelim(realIndex(structs[structName].field, field), '[')} '${field.name}' + {{/if}} + {{/each}} ] + {{/if}} + , format = "{{each(j, field) structs[structName].field}}${getBufPack(field)}{{/each}}" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + {{html unpackList(1, "ret", "buf", "offset", structs[structName].field, structName)}} + return [ret, offset] +} +{{/each}} From 545ca432e861a34edb68830e9b44e6c01d422261 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Thu, 8 Sep 2011 12:50:03 -0500 Subject: [PATCH 17/43] fleshed out pack and unpack sub templates --- stubs/packList.tpl | 22 ++++++++++++++++++++++ stubs/unpackList.tpl | 21 ++++++++++++++++++--- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/stubs/packList.tpl b/stubs/packList.tpl index 73bcf57..d7f2025 100644 --- a/stubs/packList.tpl +++ b/stubs/packList.tpl @@ -18,6 +18,28 @@ buf_name.write(obj.${field.name}) obj.${field.name} = buf_name format += 'a' addSize += (len / 4) + {{else}} + +var buf_name = new Buffer(${field.value}) +buffer.write(obj.${field.name}) +addSize += ${field.value} / 4 +format += 'a' + {{/if}} + {{else}} + {{if bufPackType(field.type)}} +var len = obj.${prepPropName(field.name)}.length +format += new Array(len + 1).join("${bufPackType(field.type)}") +obj.${listLengthName(field)} = len + {{else}} +var i = 0 + , len = obj.${prepPropName(field.name)}.length +obj.${listLengthName(field)} = len +for (; i < len; ++i) { + var result = structs.${field.type}.pack(obj.${prepPropName(field.name)}[i], format) + format = result[0] + obj.${prepPropName(field.name)}[i] = result[1] + addSize += result[2] +} {{/if}} {{/if}} {{/if}} diff --git a/stubs/unpackList.tpl b/stubs/unpackList.tpl index 2be3a9a..2caeb93 100644 --- a/stubs/unpackList.tpl +++ b/stubs/unpackList.tpl @@ -1,9 +1,24 @@ {{each(i, field) list}} - {{if isListType(field)}} - {{if field.type == 'char' }} +{{if isListType(field)}} + {{if field.type == 'char' }} ${obj}.${prepPropName(field.name)} = ${buf}.slice(${offset}, ${offset} + ${obj}.${listLengthName(field)}).toString() ${offset} += ${obj}.${listLengthName(field)} - + {{else}} + {{if field.value != null}} + {{else bufPackType(field.type)}} +var len = ${obj}.${listLengthName(field)} +${obj}.${prepPropName(field.name)} = ${buf}.unpack(new Array(len + 1).join("${bufPackType(field.type)}"), ${offset}) +${offset} = ${obj}.${prepPropName(field.name)}.offset + {{else}} +var i = 0 + , len = ${obj}.${listLengthName(field)} +${obj}.${prepPropName(field.name)} = [] +for (; i < len; ++i) { + var result = structs.${field.type}.unpack(${buf}, ${offset}) + ${obj}.${prepPropName(field.name)}.push(result[0]) + ${offset} = result[1] +} {{/if}} {{/if}} +{{/if}} {{/each}} From cc7899910bd4b5134b44d31f6c597f1e4cfe26cc Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Thu, 8 Sep 2011 12:50:59 -0500 Subject: [PATCH 18/43] generated the requests and structs with new templates. result: should now be able to handle requests with nested structs. --- lib/x11/autogen/requests.js | 272 ++++++++++++- lib/x11/autogen/structs.js | 759 ++++++++++++++++++++++++++++++++++++ stubs/requests.tpl | 1 + 3 files changed, 1022 insertions(+), 10 deletions(-) create mode 100644 lib/x11/autogen/structs.js diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 5f299c8..1bcc8a2 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -1,5 +1,6 @@ var packMask = require('../valuemask') , xutil = require('../xutil') + , structs = require('./structs') , valueMask = { CreateWindow: { BackPixmap: 1 @@ -345,6 +346,9 @@ module.exports = , reply = associate(fields, unpacked) Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var len = reply.children_len + reply.children = buf.unpack(new Array(len + 1).join("L"), unpacked.offset) + unpacked.offset = reply.children.offset return reply } @@ -423,6 +427,9 @@ module.exports = , 'data_len' ] , addSize = 0 + var len = obj.data.length + format += new Array(len + 1).join("char") + obj.data_len = len args = parameterOrder(args, obj) args[0] = 18 args[2] = size(format) + addSize @@ -473,6 +480,9 @@ module.exports = reply.format = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var len = reply.value_len + reply.value = buf.unpack(new Array(len + 1).join("char"), unpacked.offset) + unpacked.offset = reply.value.offset return reply } @@ -498,13 +508,16 @@ module.exports = , reply = associate(fields, unpacked) Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var len = reply.atoms_len + reply.atoms = buf.unpack(new Array(len + 1).join("L"), unpacked.offset) + unpacked.offset = reply.atoms.offset return reply } ] , SetSelectionOwner: [ function(obj, cb) { - var format = 'CxSLLundefined' + var format = 'CxSLLL' , args = [ null , null , 'owner' @@ -545,7 +558,7 @@ module.exports = ] , ConvertSelection: [ function(obj, cb) { - var format = 'CxSLLLLundefined' + var format = 'CxSLLLLL' , args = [ null , null , 'requestor' @@ -572,6 +585,11 @@ module.exports = , 'event' ] , addSize = 0 + + var buf_name = new Buffer(32) + buffer.write(obj.event) + addSize += 32 / 4 + format += 'a' args = parameterOrder(args, obj) args[0] = 25 args[2] = size(format) + addSize @@ -580,7 +598,7 @@ module.exports = ] , GrabPointer: [ function(obj, cb) { - var format = 'CCSLSCCLLundefined' + var format = 'CCSLSCCLLL' , args = [ null , 'owner_events' , null @@ -612,7 +630,7 @@ module.exports = ] , UngrabPointer: [ function(obj, cb) { - var format = 'CxSundefined' + var format = 'CxSL' , args = [ null , null , 'time' @@ -664,7 +682,7 @@ module.exports = ] , ChangeActivePointerGrab: [ function(obj, cb) { - var format = 'CxSLundefinedSxx' + var format = 'CxSLLSxx' , args = [ null , null , 'cursor' @@ -680,7 +698,7 @@ module.exports = ] , GrabKeyboard: [ function(obj, cb) { - var format = 'CCSLundefinedCCxx' + var format = 'CCSLLCCxx' , args = [ null , 'owner_events' , null @@ -709,7 +727,7 @@ module.exports = ] , UngrabKeyboard: [ function(obj, cb) { - var format = 'CxSundefined' + var format = 'CxSL' , args = [ null , null , 'time' @@ -758,7 +776,7 @@ module.exports = ] , AllowEvents: [ function(obj, cb) { - var format = 'CCSundefined' + var format = 'CCSL' , args = [ null , 'mode' , null @@ -831,7 +849,7 @@ module.exports = ] , GetMotionEvents: [ function(obj, cb) { - var format = 'CxSLundefinedundefined' + var format = 'CxSLLL' , args = [ null , null , 'window' @@ -852,6 +870,14 @@ module.exports = , reply = associate(fields, unpacked) Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var i = 0 + , len = reply.events_len + reply.events = [] + for (; i < len; ++i) { + var result = structs.TIMECOORD.unpack(buf, unpacked.offset) + reply.events.push(result[0]) + unpacked.offset = result[1] + } return reply } @@ -910,7 +936,7 @@ module.exports = ] , SetInputFocus: [ function(obj, cb) { - var format = 'CCSLundefined' + var format = 'CCSLL' , args = [ null , 'revert_to' , null @@ -1042,6 +1068,22 @@ module.exports = , reply = associate(fields, unpacked) Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var i = 0 + , len = reply.properties_len + reply.properties = [] + for (; i < len; ++i) { + var result = structs.FONTPROP.unpack(buf, unpacked.offset) + reply.properties.push(result[0]) + unpacked.offset = result[1] + } + var i = 0 + , len = reply.char_infos_len + reply.char_infos = [] + for (; i < len; ++i) { + var result = structs.CHARINFO.unpack(buf, unpacked.offset) + reply.char_infos.push(result[0]) + unpacked.offset = result[1] + } return reply } @@ -1055,6 +1097,15 @@ module.exports = , 'font' ] , addSize = 0 + var i = 0 + , len = obj.string.length + obj.string_len = len + for (; i < len; ++i) { + var result = structs.CHAR2B.pack(obj.string[i], format) + format = result[0] + obj.string[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 48 args[2] = size(format) + addSize @@ -1109,6 +1160,14 @@ module.exports = , reply = associate(fields, unpacked) Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var i = 0 + , len = reply.names_len + reply.names = [] + for (; i < len; ++i) { + var result = structs.STR.unpack(buf, unpacked.offset) + reply.names.push(result[0]) + unpacked.offset = result[1] + } return reply } @@ -1156,6 +1215,14 @@ module.exports = reply.name_len = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var i = 0 + , len = reply.properties_len + reply.properties = [] + for (; i < len; ++i) { + var result = structs.FONTPROP.unpack(buf, unpacked.offset) + reply.properties.push(result[0]) + unpacked.offset = result[1] + } reply.name = buf.slice(unpacked.offset, unpacked.offset + reply.name_len).toString() unpacked.offset += reply.name_len return reply @@ -1204,6 +1271,14 @@ module.exports = , reply = associate(fields, unpacked) Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var i = 0 + , len = reply.path_len + reply.path = [] + for (; i < len; ++i) { + var result = structs.STR.unpack(buf, unpacked.offset) + reply.path.push(result[0]) + unpacked.offset = result[1] + } return reply } @@ -1309,6 +1384,9 @@ module.exports = , 'dashes_len' ] , addSize = 0 + var len = obj.dashes.length + format += new Array(len + 1).join("C") + obj.dashes_len = len args = parameterOrder(args, obj) args[0] = 58 args[1] = size(format) + addSize @@ -1326,6 +1404,15 @@ module.exports = , 'clip_y_origin' ] , addSize = 0 + var i = 0 + , len = obj.rectangles.length + obj.rectangles_len = len + for (; i < len; ++i) { + var result = structs.RECTANGLE.pack(obj.rectangles[i], format) + format = result[0] + obj.rectangles[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 59 args[2] = size(format) + addSize @@ -1420,6 +1507,15 @@ module.exports = , 'gc' ] , addSize = 0 + var i = 0 + , len = obj.points.length + obj.points_len = len + for (; i < len; ++i) { + var result = structs.POINT.pack(obj.points[i], format) + format = result[0] + obj.points[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 64 args[2] = size(format) + addSize @@ -1436,6 +1532,15 @@ module.exports = , 'gc' ] , addSize = 0 + var i = 0 + , len = obj.points.length + obj.points_len = len + for (; i < len; ++i) { + var result = structs.POINT.pack(obj.points[i], format) + format = result[0] + obj.points[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 65 args[2] = size(format) + addSize @@ -1451,6 +1556,15 @@ module.exports = , 'gc' ] , addSize = 0 + var i = 0 + , len = obj.segments.length + obj.segments_len = len + for (; i < len; ++i) { + var result = structs.SEGMENT.pack(obj.segments[i], format) + format = result[0] + obj.segments[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 66 args[1] = size(format) + addSize @@ -1466,6 +1580,15 @@ module.exports = , 'gc' ] , addSize = 0 + var i = 0 + , len = obj.rectangles.length + obj.rectangles_len = len + for (; i < len; ++i) { + var result = structs.RECTANGLE.pack(obj.rectangles[i], format) + format = result[0] + obj.rectangles[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 67 args[1] = size(format) + addSize @@ -1481,6 +1604,15 @@ module.exports = , 'gc' ] , addSize = 0 + var i = 0 + , len = obj.arcs.length + obj.arcs_len = len + for (; i < len; ++i) { + var result = structs.ARC.pack(obj.arcs[i], format) + format = result[0] + obj.arcs[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 68 args[1] = size(format) + addSize @@ -1498,6 +1630,15 @@ module.exports = , 'coordinate_mode' ] , addSize = 0 + var i = 0 + , len = obj.points.length + obj.points_len = len + for (; i < len; ++i) { + var result = structs.POINT.pack(obj.points[i], format) + format = result[0] + obj.points[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 69 args[1] = size(format) + addSize @@ -1513,6 +1654,15 @@ module.exports = , 'gc' ] , addSize = 0 + var i = 0 + , len = obj.rectangles.length + obj.rectangles_len = len + for (; i < len; ++i) { + var result = structs.RECTANGLE.pack(obj.rectangles[i], format) + format = result[0] + obj.rectangles[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 70 args[1] = size(format) + addSize @@ -1528,6 +1678,15 @@ module.exports = , 'gc' ] , addSize = 0 + var i = 0 + , len = obj.arcs.length + obj.arcs_len = len + for (; i < len; ++i) { + var result = structs.ARC.pack(obj.arcs[i], format) + format = result[0] + obj.arcs[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 71 args[1] = size(format) + addSize @@ -1550,6 +1709,9 @@ module.exports = , 'depth' ] , addSize = 0 + var len = obj.data.length + format += new Array(len + 1).join("C") + obj.data_len = len args = parameterOrder(args, obj) args[0] = 72 args[2] = size(format) + addSize @@ -1584,6 +1746,9 @@ module.exports = reply.depth = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var len = reply.data_len + reply.data = buf.unpack(new Array(len + 1).join("C"), unpacked.offset) + unpacked.offset = reply.data.offset return reply } @@ -1599,6 +1764,9 @@ module.exports = , 'y' ] , addSize = 0 + var len = obj.items.length + format += new Array(len + 1).join("C") + obj.items_len = len args = parameterOrder(args, obj) args[0] = 74 args[1] = size(format) + addSize @@ -1616,6 +1784,9 @@ module.exports = , 'y' ] , addSize = 0 + var len = obj.items.length + format += new Array(len + 1).join("C") + obj.items_len = len args = parameterOrder(args, obj) args[0] = 75 args[1] = size(format) + addSize @@ -1660,6 +1831,15 @@ module.exports = , 'y' ] , addSize = 0 + var i = 0 + , len = obj.string.length + obj.string_len = len + for (; i < len; ++i) { + var result = structs.CHAR2B.pack(obj.string[i], format) + format = result[0] + obj.string[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 77 args[2] = size(format) + addSize @@ -1761,6 +1941,9 @@ module.exports = , reply = associate(fields, unpacked) Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var len = reply.cmaps_len + reply.cmaps = buf.unpack(new Array(len + 1).join("L"), unpacked.offset) + unpacked.offset = reply.cmaps.offset return reply } @@ -1861,6 +2044,12 @@ module.exports = , reply = associate(fields, unpacked) Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var len = reply.pixels_len + reply.pixels = buf.unpack(new Array(len + 1).join("L"), unpacked.offset) + unpacked.offset = reply.pixels.offset + var len = reply.masks_len + reply.masks = buf.unpack(new Array(len + 1).join("L"), unpacked.offset) + unpacked.offset = reply.masks.offset return reply } @@ -1894,6 +2083,9 @@ module.exports = , reply = associate(fields, unpacked) Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var len = reply.pixels_len + reply.pixels = buf.unpack(new Array(len + 1).join("L"), unpacked.offset) + unpacked.offset = reply.pixels.offset return reply } @@ -1907,6 +2099,9 @@ module.exports = , 'plane_mask' ] , addSize = 0 + var len = obj.pixels.length + format += new Array(len + 1).join("L") + obj.pixels_len = len args = parameterOrder(args, obj) args[0] = 88 args[1] = size(format) + addSize @@ -1921,6 +2116,15 @@ module.exports = , 'cmap' ] , addSize = 0 + var i = 0 + , len = obj.items.length + obj.items_len = len + for (; i < len; ++i) { + var result = structs.COLORITEM.pack(obj.items[i], format) + format = result[0] + obj.items[i] = result[1] + addSize += result[2] + } args = parameterOrder(args, obj) args[0] = 89 args[1] = size(format) + addSize @@ -1960,6 +2164,9 @@ module.exports = , 'cmap' ] , addSize = 0 + var len = obj.pixels.length + format += new Array(len + 1).join("L") + obj.pixels_len = len args = parameterOrder(args, obj) args[0] = 91 args[1] = size(format) + addSize @@ -1973,6 +2180,14 @@ module.exports = , reply = associate(fields, unpacked) Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var i = 0 + , len = reply.colors_len + reply.colors = [] + for (; i < len; ++i) { + var result = structs.RGB.unpack(buf, unpacked.offset) + reply.colors.push(result[0]) + unpacked.offset = result[1] + } return reply } @@ -2183,6 +2398,14 @@ module.exports = reply.names_len = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var i = 0 + , len = reply.names_len + reply.names = [] + for (; i < len; ++i) { + var result = structs.STR.unpack(buf, unpacked.offset) + reply.names.push(result[0]) + unpacked.offset = result[1] + } return reply } @@ -2197,6 +2420,9 @@ module.exports = , 'keysyms_per_keycode' ] , addSize = 0 + var len = obj.keysyms.length + format += new Array(len + 1).join("L") + obj.keysyms_len = len args = parameterOrder(args, obj) args[0] = 100 args[2] = size(format) + addSize @@ -2225,6 +2451,9 @@ module.exports = reply.keysyms_per_keycode = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var len = reply.length + reply.keysyms = buf.unpack(new Array(len + 1).join("L"), unpacked.offset) + unpacked.offset = reply.keysyms.offset return reply } @@ -2425,6 +2654,14 @@ module.exports = reply.mode = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var i = 0 + , len = reply.hosts_len + reply.hosts = [] + for (; i < len; ++i) { + var result = structs.HOST.unpack(buf, unpacked.offset) + reply.hosts.push(result[0]) + unpacked.offset = result[1] + } return reply } @@ -2481,6 +2718,9 @@ module.exports = , 'delta' ] , addSize = 0 + var len = obj.atoms.length + format += new Array(len + 1).join("L") + obj.atoms_len = len args = parameterOrder(args, obj) args[0] = 114 args[1] = size(format) + addSize @@ -2509,6 +2749,9 @@ module.exports = , null ] , addSize = 0 + var len = obj.map.length + format += new Array(len + 1).join("C") + obj.map_len = len args = parameterOrder(args, obj) args[0] = 116 args[2] = size(format) + addSize @@ -2546,6 +2789,9 @@ module.exports = reply.map_len = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var len = reply.map_len + reply.map = buf.unpack(new Array(len + 1).join("C"), unpacked.offset) + unpacked.offset = reply.map.offset return reply } @@ -2558,6 +2804,9 @@ module.exports = , null ] , addSize = 0 + var len = obj.keycodes.length + format += new Array(len + 1).join("C") + obj.keycodes_len = len args = parameterOrder(args, obj) args[0] = 118 args[2] = size(format) + addSize @@ -2595,6 +2844,9 @@ module.exports = reply.keycodes_per_modifier = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) + var len = reply.keycodes_len + reply.keycodes = buf.unpack(new Array(len + 1).join("C"), unpacked.offset) + unpacked.offset = reply.keycodes.offset return reply } diff --git a/lib/x11/autogen/structs.js b/lib/x11/autogen/structs.js new file mode 100644 index 0000000..4348c28 --- /dev/null +++ b/lib/x11/autogen/structs.js @@ -0,0 +1,759 @@ +var structs = exports + , xutil = require('../xutil') + , parameterOrder = xutil.parameterOrder + , size = xutil.formatSize + , associate = xutil.associate + +structs.CHAR2B = {} + +structs.CHAR2B.pack = function packCHAR2B(obj, format) { + format = format || "" + format += 'CC' + var args = [ + 'byte1' + , 'byte2' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.CHAR2B.unpack = function unpackCHAR2B(buf, offset) { + offset = offset || 0 + var fields = + [ 'byte1' + , 'byte2' ] + , format = "CC" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.POINT = {} + +structs.POINT.pack = function packPOINT(obj, format) { + format = format || "" + format += 'ss' + var args = [ + 'x' + , 'y' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.POINT.unpack = function unpackPOINT(buf, offset) { + offset = offset || 0 + var fields = + [ 'x' + , 'y' ] + , format = "ss" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.RECTANGLE = {} + +structs.RECTANGLE.pack = function packRECTANGLE(obj, format) { + format = format || "" + format += 'ssSS' + var args = [ + 'x' + , 'y' + , 'width' + , 'height' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.RECTANGLE.unpack = function unpackRECTANGLE(buf, offset) { + offset = offset || 0 + var fields = + [ 'x' + , 'y' + , 'width' + , 'height' ] + , format = "ssSS" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.ARC = {} + +structs.ARC.pack = function packARC(obj, format) { + format = format || "" + format += 'ssSSss' + var args = [ + 'x' + , 'y' + , 'width' + , 'height' + , 'angle1' + , 'angle2' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.ARC.unpack = function unpackARC(buf, offset) { + offset = offset || 0 + var fields = + [ 'x' + , 'y' + , 'width' + , 'height' + , 'angle1' + , 'angle2' ] + , format = "ssSSss" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.FORMAT = {} + +structs.FORMAT.pack = function packFORMAT(obj, format) { + format = format || "" + format += 'CCCxxxxx' + var args = [ + 'depth' + , 'bits_per_pixel' + , 'scanline_pad' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.FORMAT.unpack = function unpackFORMAT(buf, offset) { + offset = offset || 0 + var fields = + [ 'depth' + , 'bits_per_pixel' + , 'scanline_pad' ] + , format = "CCCxxxxx" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.VISUALTYPE = {} + +structs.VISUALTYPE.pack = function packVISUALTYPE(obj, format) { + format = format || "" + format += 'LCCSLLLxxxx' + var args = [ + 'visual_id' + , '_class' + , 'bits_per_rgb_value' + , 'colormap_entries' + , 'red_mask' + , 'green_mask' + , 'blue_mask' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.VISUALTYPE.unpack = function unpackVISUALTYPE(buf, offset) { + offset = offset || 0 + var fields = + [ 'visual_id' + , 'class' + , 'bits_per_rgb_value' + , 'colormap_entries' + , 'red_mask' + , 'green_mask' + , 'blue_mask' ] + , format = "LCCSLLLxxxx" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.DEPTH = {} + +structs.DEPTH.pack = function packDEPTH(obj, format) { + format = format || "" + format += 'CxSxxxx' + var args = [ + 'depth' + , 'visuals_len' + , 'visuals' ] + , addSize = 0 + var i = 0 + , len = obj.visuals.length + obj.visuals_len = len + for (; i < len; ++i) { + var result = structs.VISUALTYPE.pack(obj.visuals[i], format) + format = result[0] + obj.visuals[i] = result[1] + addSize += result[2] + } + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.DEPTH.unpack = function unpackDEPTH(buf, offset) { + offset = offset || 0 + var fields = + [ 'depth' + , 'visuals_len' ] + , format = "CxSxxxx" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + var i = 0 + , len = ret.visuals_len + ret.visuals = [] + for (; i < len; ++i) { + var result = structs.VISUALTYPE.unpack(buf, offset) + ret.visuals.push(result[0]) + offset = result[1] + } + return [ret, offset] +} + +structs.SCREEN = {} + +structs.SCREEN.pack = function packSCREEN(obj, format) { + format = format || "" + format += 'LLLLLSSSSSSLCCCC' + var args = [ + 'root' + , 'default_colormap' + , 'white_pixel' + , 'black_pixel' + , 'current_input_masks' + , 'width_in_pixels' + , 'height_in_pixels' + , 'width_in_millimeters' + , 'height_in_millimeters' + , 'min_installed_maps' + , 'max_installed_maps' + , 'root_visual' + , 'backing_stores' + , 'save_unders' + , 'root_depth' + , 'allowed_depths_len' + , 'allowed_depths' ] + , addSize = 0 + var i = 0 + , len = obj.allowed_depths.length + obj.allowed_depths_len = len + for (; i < len; ++i) { + var result = structs.DEPTH.pack(obj.allowed_depths[i], format) + format = result[0] + obj.allowed_depths[i] = result[1] + addSize += result[2] + } + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.SCREEN.unpack = function unpackSCREEN(buf, offset) { + offset = offset || 0 + var fields = + [ 'root' + , 'default_colormap' + , 'white_pixel' + , 'black_pixel' + , 'current_input_masks' + , 'width_in_pixels' + , 'height_in_pixels' + , 'width_in_millimeters' + , 'height_in_millimeters' + , 'min_installed_maps' + , 'max_installed_maps' + , 'root_visual' + , 'backing_stores' + , 'save_unders' + , 'root_depth' + , 'allowed_depths_len' ] + , format = "LLLLLSSSSSSLCCCC" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + var i = 0 + , len = ret.allowed_depths_len + ret.allowed_depths = [] + for (; i < len; ++i) { + var result = structs.DEPTH.unpack(buf, offset) + ret.allowed_depths.push(result[0]) + offset = result[1] + } + return [ret, offset] +} + +structs.SetupRequest = {} + +structs.SetupRequest.pack = function packSetupRequest(obj, format) { + format = format || "" + format += 'CxSSSSxx' + var args = [ + 'byte_order' + , 'protocol_major_version' + , 'protocol_minor_version' + , 'authorization_protocol_name_len' + , 'authorization_protocol_data_len' + , 'authorization_protocol_name' + , 'authorization_protocol_data' ] + , addSize = 0 + var len = xutil.padded_length(obj.authorization_protocol_name.length) + , buf_name = new Buffer(len) + obj.authorization_protocol_name_len = Buffer.byteLength(obj.authorization_protocol_name) + buf_name.write(obj.authorization_protocol_name) + obj.authorization_protocol_name = buf_name + format += 'a' + addSize += (len / 4) + var len = xutil.padded_length(obj.authorization_protocol_data.length) + , buf_name = new Buffer(len) + obj.authorization_protocol_data_len = Buffer.byteLength(obj.authorization_protocol_data) + buf_name.write(obj.authorization_protocol_data) + obj.authorization_protocol_data = buf_name + format += 'a' + addSize += (len / 4) + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.SetupRequest.unpack = function unpackSetupRequest(buf, offset) { + offset = offset || 0 + var fields = + [ 'byte_order' + , 'protocol_major_version' + , 'protocol_minor_version' + , 'authorization_protocol_name_len' + , 'authorization_protocol_data_len' ] + , format = "CxSSSSxx" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + ret.authorization_protocol_name = buf.slice(offset, offset + ret.authorization_protocol_name_len).toString() + offset += ret.authorization_protocol_name_len + ret.authorization_protocol_data = buf.slice(offset, offset + ret.authorization_protocol_data_len).toString() + offset += ret.authorization_protocol_data_len + return [ret, offset] +} + +structs.SetupFailed = {} + +structs.SetupFailed.pack = function packSetupFailed(obj, format) { + format = format || "" + format += 'CCSSS' + var args = [ + 'status' + , 'reason_len' + , 'protocol_major_version' + , 'protocol_minor_version' + , 'length' + , 'reason' ] + , addSize = 0 + var len = xutil.padded_length(obj.reason.length) + , buf_name = new Buffer(len) + obj.reason_len = Buffer.byteLength(obj.reason) + buf_name.write(obj.reason) + obj.reason = buf_name + format += 'a' + addSize += (len / 4) + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.SetupFailed.unpack = function unpackSetupFailed(buf, offset) { + offset = offset || 0 + var fields = + [ 'status' + , 'reason_len' + , 'protocol_major_version' + , 'protocol_minor_version' + , 'length' ] + , format = "CCSSS" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + ret.reason = buf.slice(offset, offset + ret.reason_len).toString() + offset += ret.reason_len + return [ret, offset] +} + +structs.SetupAuthenticate = {} + +structs.SetupAuthenticate.pack = function packSetupAuthenticate(obj, format) { + format = format || "" + format += 'CxxxxxS' + var args = [ + 'status' + , 'length' + , 'reason' ] + , addSize = 0 + var len = xutil.padded_length(obj.reason.length) + , buf_name = new Buffer(len) + obj.reason_len = Buffer.byteLength(obj.reason) + buf_name.write(obj.reason) + obj.reason = buf_name + format += 'a' + addSize += (len / 4) + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.SetupAuthenticate.unpack = function unpackSetupAuthenticate(buf, offset) { + offset = offset || 0 + var fields = + [ 'status' + , 'length' ] + , format = "CxxxxxS" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + ret.reason = buf.slice(offset, offset + ret.reason_len).toString() + offset += ret.reason_len + return [ret, offset] +} + +structs.Setup = {} + +structs.Setup.pack = function packSetup(obj, format) { + format = format || "" + format += 'CxSSSLLLLSSCCCCCCCCxxxx' + var args = [ + 'status' + , 'protocol_major_version' + , 'protocol_minor_version' + , 'length' + , 'release_number' + , 'resource_id_base' + , 'resource_id_mask' + , 'motion_buffer_size' + , 'vendor_len' + , 'maximum_request_length' + , 'roots_len' + , 'pixmap_formats_len' + , 'image_byte_order' + , 'bitmap_format_bit_order' + , 'bitmap_format_scanline_unit' + , 'bitmap_format_scanline_pad' + , 'min_keycode' + , 'max_keycode' + , 'vendor' + , 'pixmap_formats' + , 'roots' ] + , addSize = 0 + var len = xutil.padded_length(obj.vendor.length) + , buf_name = new Buffer(len) + obj.vendor_len = Buffer.byteLength(obj.vendor) + buf_name.write(obj.vendor) + obj.vendor = buf_name + format += 'a' + addSize += (len / 4) + var i = 0 + , len = obj.pixmap_formats.length + obj.pixmap_formats_len = len + for (; i < len; ++i) { + var result = structs.FORMAT.pack(obj.pixmap_formats[i], format) + format = result[0] + obj.pixmap_formats[i] = result[1] + addSize += result[2] + } + var i = 0 + , len = obj.roots.length + obj.roots_len = len + for (; i < len; ++i) { + var result = structs.SCREEN.pack(obj.roots[i], format) + format = result[0] + obj.roots[i] = result[1] + addSize += result[2] + } + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.Setup.unpack = function unpackSetup(buf, offset) { + offset = offset || 0 + var fields = + [ 'status' + , 'protocol_major_version' + , 'protocol_minor_version' + , 'length' + , 'release_number' + , 'resource_id_base' + , 'resource_id_mask' + , 'motion_buffer_size' + , 'vendor_len' + , 'maximum_request_length' + , 'roots_len' + , 'pixmap_formats_len' + , 'image_byte_order' + , 'bitmap_format_bit_order' + , 'bitmap_format_scanline_unit' + , 'bitmap_format_scanline_pad' + , 'min_keycode' + , 'max_keycode' ] + , format = "CxSSSLLLLSSCCCCCCCCxxxx" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + ret.vendor = buf.slice(offset, offset + ret.vendor_len).toString() + offset += ret.vendor_len + var i = 0 + , len = ret.pixmap_formats_len + ret.pixmap_formats = [] + for (; i < len; ++i) { + var result = structs.FORMAT.unpack(buf, offset) + ret.pixmap_formats.push(result[0]) + offset = result[1] + } + var i = 0 + , len = ret.roots_len + ret.roots = [] + for (; i < len; ++i) { + var result = structs.SCREEN.unpack(buf, offset) + ret.roots.push(result[0]) + offset = result[1] + } + return [ret, offset] +} + +structs.TIMECOORD = {} + +structs.TIMECOORD.pack = function packTIMECOORD(obj, format) { + format = format || "" + format += 'Lss' + var args = [ + 'time' + , 'x' + , 'y' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.TIMECOORD.unpack = function unpackTIMECOORD(buf, offset) { + offset = offset || 0 + var fields = + [ 'time' + , 'x' + , 'y' ] + , format = "Lss" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.FONTPROP = {} + +structs.FONTPROP.pack = function packFONTPROP(obj, format) { + format = format || "" + format += 'LL' + var args = [ + 'name' + , 'value' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.FONTPROP.unpack = function unpackFONTPROP(buf, offset) { + offset = offset || 0 + var fields = + [ 'name' + , 'value' ] + , format = "LL" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.CHARINFO = {} + +structs.CHARINFO.pack = function packCHARINFO(obj, format) { + format = format || "" + format += 'sssssS' + var args = [ + 'left_side_bearing' + , 'right_side_bearing' + , 'character_width' + , 'ascent' + , 'descent' + , 'attributes' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.CHARINFO.unpack = function unpackCHARINFO(buf, offset) { + offset = offset || 0 + var fields = + [ 'left_side_bearing' + , 'right_side_bearing' + , 'character_width' + , 'ascent' + , 'descent' + , 'attributes' ] + , format = "sssssS" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.STR = {} + +structs.STR.pack = function packSTR(obj, format) { + format = format || "" + format += 'C' + var args = [ + 'name_len' + , 'name' ] + , addSize = 0 + var len = xutil.padded_length(obj.name.length) + , buf_name = new Buffer(len) + obj.name_len = Buffer.byteLength(obj.name) + buf_name.write(obj.name) + obj.name = buf_name + format += 'a' + addSize += (len / 4) + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.STR.unpack = function unpackSTR(buf, offset) { + offset = offset || 0 + var fields + , format = "C" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + ret.name = buf.slice(offset, offset + ret.name_len).toString() + offset += ret.name_len + return [ret, offset] +} + +structs.SEGMENT = {} + +structs.SEGMENT.pack = function packSEGMENT(obj, format) { + format = format || "" + format += 'ssss' + var args = [ + 'x1' + , 'y1' + , 'x2' + , 'y2' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.SEGMENT.unpack = function unpackSEGMENT(buf, offset) { + offset = offset || 0 + var fields = + [ 'x1' + , 'y1' + , 'x2' + , 'y2' ] + , format = "ssss" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.COLORITEM = {} + +structs.COLORITEM.pack = function packCOLORITEM(obj, format) { + format = format || "" + format += 'LSSSCx' + var args = [ + 'pixel' + , 'red' + , 'green' + , 'blue' + , 'flags' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.COLORITEM.unpack = function unpackCOLORITEM(buf, offset) { + offset = offset || 0 + var fields = + [ 'pixel' + , 'red' + , 'green' + , 'blue' + , 'flags' ] + , format = "LSSSCx" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.RGB = {} + +structs.RGB.pack = function packRGB(obj, format) { + format = format || "" + format += 'SSSxx' + var args = [ + 'red' + , 'green' + , 'blue' ] + , addSize = 0 + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.RGB.unpack = function unpackRGB(buf, offset) { + offset = offset || 0 + var fields = + [ 'red' + , 'green' + , 'blue' ] + , format = "SSSxx" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + return [ret, offset] +} + +structs.HOST = {} + +structs.HOST.pack = function packHOST(obj, format) { + format = format || "" + format += 'CxS' + var args = [ + 'family' + , 'address_len' + , 'address' ] + , addSize = 0 + var len = obj.address.length + format += new Array(len + 1).join("C") + obj.address_len = len + args = parameterOrder(args, obj) + return [format, args, addSize] +} + +structs.HOST.unpack = function unpackHOST(buf, offset) { + offset = offset || 0 + var fields = + [ 'family' + , 'address_len' ] + , format = "CxS" + , unpacked = buf.unpack(format, offset) + , ret = associate(fields, unpacked) + offset = unpacked.offset + var len = ret.address_len + ret.address = buf.unpack(new Array(len + 1).join("C"), offset) + offset = ret.address.offset + return [ret, offset] +} \ No newline at end of file diff --git a/stubs/requests.tpl b/stubs/requests.tpl index ba9ad6f..5c94ff1 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -1,5 +1,6 @@ var packMask = require('../valuemask') , xutil = require('../xutil') + , structs = require('./structs') , valueMask = {{each(i, requestName) Object.keys(requests)}} {{if getValueMask(requestName) }} From 37ff1d0c7b3fdb1aa4e1023bbf44f705b6b1d48b Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Thu, 8 Sep 2011 12:55:45 -0500 Subject: [PATCH 19/43] added a ListHosts test/example mainly because the result has a nested struct and I wanted to make sure that it was working. --- test/hosts.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 test/hosts.js diff --git a/test/hosts.js b/test/hosts.js new file mode 100644 index 0000000..3cd762d --- /dev/null +++ b/test/hosts.js @@ -0,0 +1,9 @@ +var x11 = require('../lib/x11'); + +var xclient = x11.createClient(); +xclient.on('connect', function(display) { + var X = this; + X.ListHosts(function(resp) { + console.log('ListHosts', JSON.stringify(resp, null, 2)) + }) +}); From d529073afa61cec0d818ac6091c080c86c5cd297 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Thu, 8 Sep 2011 21:56:49 -0500 Subject: [PATCH 20/43] requests requiring lists the fields are now added appropriately. --- generateFiles.js | 2 +- lib/x11/autogen/requests.js | 40 +++++++++++++++++++++++++++++++++++++ lib/x11/xutil.js | 16 ++++++++++----- stubs/requests.tpl | 10 +++------- 4 files changed, 55 insertions(+), 13 deletions(-) diff --git a/generateFiles.js b/generateFiles.js index 00bd7a8..c55191f 100644 --- a/generateFiles.js +++ b/generateFiles.js @@ -185,7 +185,7 @@ function fieldName(field) { } function nonPad(fields){ - return fields.filter(function(field){ + return fields && fields.filter(function(field){ return field.fieldType != 'pad' }) } diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 1bcc8a2..7361e66 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -425,6 +425,7 @@ module.exports = , 'type' , 'format' , 'data_len' + , 'data' ] , addSize = 0 var len = obj.data.length @@ -1095,6 +1096,8 @@ module.exports = , 'odd_length' , null , 'font' + , 'string_len' + , 'string' ] , addSize = 0 var i = 0 @@ -1235,6 +1238,7 @@ module.exports = , args = [ null , null , 'font_qty' + , 'path_len' , 'path' ] , addSize = 0 @@ -1382,6 +1386,7 @@ module.exports = , 'gc' , 'dash_offset' , 'dashes_len' + , 'dashes' ] , addSize = 0 var len = obj.dashes.length @@ -1402,6 +1407,8 @@ module.exports = , 'gc' , 'clip_x_origin' , 'clip_y_origin' + , 'rectangles_len' + , 'rectangles' ] , addSize = 0 var i = 0 @@ -1505,6 +1512,8 @@ module.exports = , null , 'drawable' , 'gc' + , 'points_len' + , 'points' ] , addSize = 0 var i = 0 @@ -1530,6 +1539,8 @@ module.exports = , null , 'drawable' , 'gc' + , 'points_len' + , 'points' ] , addSize = 0 var i = 0 @@ -1554,6 +1565,8 @@ module.exports = , null , 'drawable' , 'gc' + , 'segments_len' + , 'segments' ] , addSize = 0 var i = 0 @@ -1578,6 +1591,8 @@ module.exports = , null , 'drawable' , 'gc' + , 'rectangles_len' + , 'rectangles' ] , addSize = 0 var i = 0 @@ -1602,6 +1617,8 @@ module.exports = , null , 'drawable' , 'gc' + , 'arcs_len' + , 'arcs' ] , addSize = 0 var i = 0 @@ -1628,6 +1645,8 @@ module.exports = , 'gc' , 'shape' , 'coordinate_mode' + , 'points_len' + , 'points' ] , addSize = 0 var i = 0 @@ -1652,6 +1671,8 @@ module.exports = , null , 'drawable' , 'gc' + , 'rectangles_len' + , 'rectangles' ] , addSize = 0 var i = 0 @@ -1676,6 +1697,8 @@ module.exports = , null , 'drawable' , 'gc' + , 'arcs_len' + , 'arcs' ] , addSize = 0 var i = 0 @@ -1707,6 +1730,8 @@ module.exports = , 'dst_y' , 'left_pad' , 'depth' + , 'data_len' + , 'data' ] , addSize = 0 var len = obj.data.length @@ -1762,6 +1787,8 @@ module.exports = , 'gc' , 'x' , 'y' + , 'items_len' + , 'items' ] , addSize = 0 var len = obj.items.length @@ -1782,6 +1809,8 @@ module.exports = , 'gc' , 'x' , 'y' + , 'items_len' + , 'items' ] , addSize = 0 var len = obj.items.length @@ -1829,6 +1858,7 @@ module.exports = , 'gc' , 'x' , 'y' + , 'string' ] , addSize = 0 var i = 0 @@ -2097,6 +2127,8 @@ module.exports = , null , 'cmap' , 'plane_mask' + , 'pixels_len' + , 'pixels' ] , addSize = 0 var len = obj.pixels.length @@ -2114,6 +2146,8 @@ module.exports = , args = [ null , null , 'cmap' + , 'items_len' + , 'items' ] , addSize = 0 var i = 0 @@ -2162,6 +2196,8 @@ module.exports = , args = [ null , null , 'cmap' + , 'pixels_len' + , 'pixels' ] , addSize = 0 var len = obj.pixels.length @@ -2418,6 +2454,7 @@ module.exports = , null , 'first_keycode' , 'keysyms_per_keycode' + , 'keysyms' ] , addSize = 0 var len = obj.keysyms.length @@ -2716,6 +2753,7 @@ module.exports = , 'window' , 'atoms_len' , 'delta' + , 'atoms' ] , addSize = 0 var len = obj.atoms.length @@ -2747,6 +2785,7 @@ module.exports = , args = [ null , 'map_len' , null + , 'map' ] , addSize = 0 var len = obj.map.length @@ -2802,6 +2841,7 @@ module.exports = , args = [ null , 'keycodes_per_modifier' , null + , 'keycodes' ] , addSize = 0 var len = obj.keycodes.length diff --git a/lib/x11/xutil.js b/lib/x11/xutil.js index ce28689..6fbf5d7 100644 --- a/lib/x11/xutil.js +++ b/lib/x11/xutil.js @@ -25,13 +25,19 @@ function padded_string(str) return res; } -function parameterOrder(params, obj) { +function flatten(arr) { var ret = [] - params.forEach(function(name, i) { - if (Array.isArray(obj[name])) return ret = ret.concat(obj[name]) - else ret[i] = name && obj[name] + arr.forEach(function(item, i) { + if (Array.isArray(item)) ret = ret.concat(flatten(item)) + else ret[i] = item }) - return ret; + return ret +} + +function parameterOrder(params, obj) { + return flatten(params.map(function(name, i) { + return name && obj[name] + })) } function size(str) { diff --git a/stubs/requests.tpl b/stubs/requests.tpl index 5c94ff1..53e2005 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -28,15 +28,11 @@ ${getDelim(i)} ${reqName}: {{/if}} , null {{each(j, field) requests[reqName].field}} - {{if (field.fieldType == 'field' || field.fieldType == 'valueparam' || field.type == 'char') && !(j === 0 && prePackFirst(requests[reqName]))}} - {{if field.fieldType == 'valueparam'}} - {{if !(isListAccountedFor(requests[reqName], field))}} + {{if field.fieldType != 'pad' && !(j === 0 && prePackFirst(requests[reqName]))}} + {{if isListType(field) && !(isListAccountedFor(requests[reqName], field))}} , '${listLengthName(field)}' - {{/if}} - , '${field['value-list-name']}' - {{else}} - , '${prepPropName(field.name)}' {{/if}} + , '${fieldName(field)}' {{/if}} {{/each}} ] From bd976234e22dc68225334b68f00324875f635593 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Thu, 8 Sep 2011 22:05:25 -0500 Subject: [PATCH 21/43] added a rectangles test. pretty messed up. --- test/rects.js | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 test/rects.js diff --git a/test/rects.js b/test/rects.js new file mode 100644 index 0000000..9d6fd79 --- /dev/null +++ b/test/rects.js @@ -0,0 +1,58 @@ +var x11 = require('../lib/x11'); +x11.createClient().on('connect', function(display) { + var X = this + , rects = + [ { rect: { x: 50, y: 50, width: 100, height: 100 }, dir: 1, range: [0, 100] } + , { rect: { x: 100, y: 200, width: 90, height: 90 }, dir: 2, range: [80, 120] } + , { rect: { x: 20, y: 30, width: 15, height: 15 }, dir: 3, range: [10, 50] } + ] + , windows = [X.AllocID()] + , draw = [X.AllocID(), X.AllocID(), X.AllocID(), X.AllocID()] + , borderWidth = 5 + , width = 800 + , split = 400 + , dir = 5 + , screen = display.screen[0]; + + windows.forEach(function(window, i) { + X.CreateWindow( + { depth: 0 + , wid: window + , parent: screen.root + , x: 400 * (i % 2) + , y: 300 * Math.floor(i/2) + , width: 400 - borderWidth + , height: 300 - borderWidth + , border_width: borderWidth + , 'class': 1 + , value_mask: { BackPixel: screen.white_pixel, EventMask: x11.eventMask.PointerMotion } + }) + X.CreateGC({ cid: draw[i], drawable: window }) + setTimeout(function(){ + X.MapWindow({ window: window }) + }, 1000 * i + 1000) + }) + setInterval(function() { + windows.forEach(function(window, i) { + X.ClearArea( + { exposures: false + , window: window + , x: 0 + , y: 0 + , width: 400 + , height: 400}) + rects.forEach(function(rect, i) { + rect.rect.x += rect.dir + rect.rect.y += rect.dir + //rect.rect.width += rect.dir + //rect.rect.height += rect.dir + if (rect.rect.x >= rect.range[1] || rect.rect.x <= rect.range[0]) rect.dir *= -1 + }) + var rectList = rects.map(function(r) { return r.rect }) + X.PolyRectangle({ drawable: window, gc: draw[i], rectangles_len: rectList.length, rectangles: rectList }) + }) + split += dir + if (split > 500 || split < 300) dir *= -1 + }, 100); + +}) From fae0e8b3424a9893e21fbb25df7a5f68bda22b9c Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Thu, 8 Sep 2011 22:53:52 -0500 Subject: [PATCH 22/43] removing unneeded rectangle_len in test/rect --- test/rects.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/rects.js b/test/rects.js index 9d6fd79..ced1dca 100644 --- a/test/rects.js +++ b/test/rects.js @@ -49,7 +49,7 @@ x11.createClient().on('connect', function(display) { if (rect.rect.x >= rect.range[1] || rect.rect.x <= rect.range[0]) rect.dir *= -1 }) var rectList = rects.map(function(r) { return r.rect }) - X.PolyRectangle({ drawable: window, gc: draw[i], rectangles_len: rectList.length, rectangles: rectList }) + X.PolyFillRectangle({ drawable: window, gc: draw[i], rectangles: rectList }) }) split += dir if (split > 500 || split < 300) dir *= -1 From 4f1a8a78e5837bbae7bd30504a4c374ddc18834f Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 00:43:32 -0500 Subject: [PATCH 23/43] fixes adding length specifier when shouldn't. --- lib/x11/autogen/requests.js | 17 ----------------- stubs/requests.tpl | 2 +- stubs/structs.tpl | 2 +- 3 files changed, 2 insertions(+), 19 deletions(-) diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 7361e66..0786c07 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -1096,7 +1096,6 @@ module.exports = , 'odd_length' , null , 'font' - , 'string_len' , 'string' ] , addSize = 0 @@ -1238,7 +1237,6 @@ module.exports = , args = [ null , null , 'font_qty' - , 'path_len' , 'path' ] , addSize = 0 @@ -1407,7 +1405,6 @@ module.exports = , 'gc' , 'clip_x_origin' , 'clip_y_origin' - , 'rectangles_len' , 'rectangles' ] , addSize = 0 @@ -1512,7 +1509,6 @@ module.exports = , null , 'drawable' , 'gc' - , 'points_len' , 'points' ] , addSize = 0 @@ -1539,7 +1535,6 @@ module.exports = , null , 'drawable' , 'gc' - , 'points_len' , 'points' ] , addSize = 0 @@ -1565,7 +1560,6 @@ module.exports = , null , 'drawable' , 'gc' - , 'segments_len' , 'segments' ] , addSize = 0 @@ -1591,7 +1585,6 @@ module.exports = , null , 'drawable' , 'gc' - , 'rectangles_len' , 'rectangles' ] , addSize = 0 @@ -1617,7 +1610,6 @@ module.exports = , null , 'drawable' , 'gc' - , 'arcs_len' , 'arcs' ] , addSize = 0 @@ -1645,7 +1637,6 @@ module.exports = , 'gc' , 'shape' , 'coordinate_mode' - , 'points_len' , 'points' ] , addSize = 0 @@ -1671,7 +1662,6 @@ module.exports = , null , 'drawable' , 'gc' - , 'rectangles_len' , 'rectangles' ] , addSize = 0 @@ -1697,7 +1687,6 @@ module.exports = , null , 'drawable' , 'gc' - , 'arcs_len' , 'arcs' ] , addSize = 0 @@ -1730,7 +1719,6 @@ module.exports = , 'dst_y' , 'left_pad' , 'depth' - , 'data_len' , 'data' ] , addSize = 0 @@ -1787,7 +1775,6 @@ module.exports = , 'gc' , 'x' , 'y' - , 'items_len' , 'items' ] , addSize = 0 @@ -1809,7 +1796,6 @@ module.exports = , 'gc' , 'x' , 'y' - , 'items_len' , 'items' ] , addSize = 0 @@ -2127,7 +2113,6 @@ module.exports = , null , 'cmap' , 'plane_mask' - , 'pixels_len' , 'pixels' ] , addSize = 0 @@ -2146,7 +2131,6 @@ module.exports = , args = [ null , null , 'cmap' - , 'items_len' , 'items' ] , addSize = 0 @@ -2196,7 +2180,6 @@ module.exports = , args = [ null , null , 'cmap' - , 'pixels_len' , 'pixels' ] , addSize = 0 diff --git a/stubs/requests.tpl b/stubs/requests.tpl index 53e2005..c07b009 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -29,7 +29,7 @@ ${getDelim(i)} ${reqName}: , null {{each(j, field) requests[reqName].field}} {{if field.fieldType != 'pad' && !(j === 0 && prePackFirst(requests[reqName]))}} - {{if isListType(field) && !(isListAccountedFor(requests[reqName], field))}} + {{if field.fieldType == 'valueparam' && !(isListAccountedFor(requests[reqName], field))}} , '${listLengthName(field)}' {{/if}} , '${fieldName(field)}' diff --git a/stubs/structs.tpl b/stubs/structs.tpl index 0ce7f20..751b3ef 100644 --- a/stubs/structs.tpl +++ b/stubs/structs.tpl @@ -12,7 +12,7 @@ structs.${structName}.pack = function pack${structName}(obj, format) { format = format || "" format += '{{each(j, field) structs[structName].field}}${getBufPack(field)}{{/each}}' var args = [ {{each(i, field) nonPad(attr.field)}} - {{if isListValue(field) && !(isListAccountedFor(structs[structName], field))}} + {{if field.fieldType == 'valueparam' && !(isListAccountedFor(structs[structName], field))}} ${getDelim(i, " ", ", ")}'${listLengthName(field)}' {{/if}} ${getDelim(i, " ", ", ")}'${fieldName(field)}' From 225e12438e0e8a65bc810214fb70a4f4617795ed Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 01:37:07 -0500 Subject: [PATCH 24/43] allows lists of items to be either a single or array of items. --- lib/x11/autogen/requests.js | 46 +++++++++++++++++++++++++++++++++++++ lib/x11/autogen/structs.js | 10 ++++++++ stubs/packList.tpl | 2 ++ 3 files changed, 58 insertions(+) diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 0786c07..7d39674 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -428,6 +428,8 @@ module.exports = , 'data' ] , addSize = 0 + + obj.data = Array.isArray(obj.data) ? obj.data : [obj.data] var len = obj.data.length format += new Array(len + 1).join("char") obj.data_len = len @@ -1099,6 +1101,8 @@ module.exports = , 'string' ] , addSize = 0 + + obj.string = Array.isArray(obj.string) ? obj.string : [obj.string] var i = 0 , len = obj.string.length obj.string_len = len @@ -1387,6 +1391,8 @@ module.exports = , 'dashes' ] , addSize = 0 + + obj.dashes = Array.isArray(obj.dashes) ? obj.dashes : [obj.dashes] var len = obj.dashes.length format += new Array(len + 1).join("C") obj.dashes_len = len @@ -1408,6 +1414,8 @@ module.exports = , 'rectangles' ] , addSize = 0 + + obj.rectangles = Array.isArray(obj.rectangles) ? obj.rectangles : [obj.rectangles] var i = 0 , len = obj.rectangles.length obj.rectangles_len = len @@ -1512,6 +1520,8 @@ module.exports = , 'points' ] , addSize = 0 + + obj.points = Array.isArray(obj.points) ? obj.points : [obj.points] var i = 0 , len = obj.points.length obj.points_len = len @@ -1538,6 +1548,8 @@ module.exports = , 'points' ] , addSize = 0 + + obj.points = Array.isArray(obj.points) ? obj.points : [obj.points] var i = 0 , len = obj.points.length obj.points_len = len @@ -1563,6 +1575,8 @@ module.exports = , 'segments' ] , addSize = 0 + + obj.segments = Array.isArray(obj.segments) ? obj.segments : [obj.segments] var i = 0 , len = obj.segments.length obj.segments_len = len @@ -1588,6 +1602,8 @@ module.exports = , 'rectangles' ] , addSize = 0 + + obj.rectangles = Array.isArray(obj.rectangles) ? obj.rectangles : [obj.rectangles] var i = 0 , len = obj.rectangles.length obj.rectangles_len = len @@ -1613,6 +1629,8 @@ module.exports = , 'arcs' ] , addSize = 0 + + obj.arcs = Array.isArray(obj.arcs) ? obj.arcs : [obj.arcs] var i = 0 , len = obj.arcs.length obj.arcs_len = len @@ -1640,6 +1658,8 @@ module.exports = , 'points' ] , addSize = 0 + + obj.points = Array.isArray(obj.points) ? obj.points : [obj.points] var i = 0 , len = obj.points.length obj.points_len = len @@ -1665,6 +1685,8 @@ module.exports = , 'rectangles' ] , addSize = 0 + + obj.rectangles = Array.isArray(obj.rectangles) ? obj.rectangles : [obj.rectangles] var i = 0 , len = obj.rectangles.length obj.rectangles_len = len @@ -1690,6 +1712,8 @@ module.exports = , 'arcs' ] , addSize = 0 + + obj.arcs = Array.isArray(obj.arcs) ? obj.arcs : [obj.arcs] var i = 0 , len = obj.arcs.length obj.arcs_len = len @@ -1722,6 +1746,8 @@ module.exports = , 'data' ] , addSize = 0 + + obj.data = Array.isArray(obj.data) ? obj.data : [obj.data] var len = obj.data.length format += new Array(len + 1).join("C") obj.data_len = len @@ -1778,6 +1804,8 @@ module.exports = , 'items' ] , addSize = 0 + + obj.items = Array.isArray(obj.items) ? obj.items : [obj.items] var len = obj.items.length format += new Array(len + 1).join("C") obj.items_len = len @@ -1799,6 +1827,8 @@ module.exports = , 'items' ] , addSize = 0 + + obj.items = Array.isArray(obj.items) ? obj.items : [obj.items] var len = obj.items.length format += new Array(len + 1).join("C") obj.items_len = len @@ -1847,6 +1877,8 @@ module.exports = , 'string' ] , addSize = 0 + + obj.string = Array.isArray(obj.string) ? obj.string : [obj.string] var i = 0 , len = obj.string.length obj.string_len = len @@ -2116,6 +2148,8 @@ module.exports = , 'pixels' ] , addSize = 0 + + obj.pixels = Array.isArray(obj.pixels) ? obj.pixels : [obj.pixels] var len = obj.pixels.length format += new Array(len + 1).join("L") obj.pixels_len = len @@ -2134,6 +2168,8 @@ module.exports = , 'items' ] , addSize = 0 + + obj.items = Array.isArray(obj.items) ? obj.items : [obj.items] var i = 0 , len = obj.items.length obj.items_len = len @@ -2183,6 +2219,8 @@ module.exports = , 'pixels' ] , addSize = 0 + + obj.pixels = Array.isArray(obj.pixels) ? obj.pixels : [obj.pixels] var len = obj.pixels.length format += new Array(len + 1).join("L") obj.pixels_len = len @@ -2440,6 +2478,8 @@ module.exports = , 'keysyms' ] , addSize = 0 + + obj.keysyms = Array.isArray(obj.keysyms) ? obj.keysyms : [obj.keysyms] var len = obj.keysyms.length format += new Array(len + 1).join("L") obj.keysyms_len = len @@ -2739,6 +2779,8 @@ module.exports = , 'atoms' ] , addSize = 0 + + obj.atoms = Array.isArray(obj.atoms) ? obj.atoms : [obj.atoms] var len = obj.atoms.length format += new Array(len + 1).join("L") obj.atoms_len = len @@ -2771,6 +2813,8 @@ module.exports = , 'map' ] , addSize = 0 + + obj.map = Array.isArray(obj.map) ? obj.map : [obj.map] var len = obj.map.length format += new Array(len + 1).join("C") obj.map_len = len @@ -2827,6 +2871,8 @@ module.exports = , 'keycodes' ] , addSize = 0 + + obj.keycodes = Array.isArray(obj.keycodes) ? obj.keycodes : [obj.keycodes] var len = obj.keycodes.length format += new Array(len + 1).join("C") obj.keycodes_len = len diff --git a/lib/x11/autogen/structs.js b/lib/x11/autogen/structs.js index 4348c28..400b47a 100644 --- a/lib/x11/autogen/structs.js +++ b/lib/x11/autogen/structs.js @@ -188,6 +188,8 @@ structs.DEPTH.pack = function packDEPTH(obj, format) { , 'visuals_len' , 'visuals' ] , addSize = 0 + + obj.visuals = Array.isArray(obj.visuals) ? obj.visuals : [obj.visuals] var i = 0 , len = obj.visuals.length obj.visuals_len = len @@ -245,6 +247,8 @@ structs.SCREEN.pack = function packSCREEN(obj, format) { , 'allowed_depths_len' , 'allowed_depths' ] , addSize = 0 + + obj.allowed_depths = Array.isArray(obj.allowed_depths) ? obj.allowed_depths : [obj.allowed_depths] var i = 0 , len = obj.allowed_depths.length obj.allowed_depths_len = len @@ -454,6 +458,8 @@ structs.Setup.pack = function packSetup(obj, format) { obj.vendor = buf_name format += 'a' addSize += (len / 4) + + obj.pixmap_formats = Array.isArray(obj.pixmap_formats) ? obj.pixmap_formats : [obj.pixmap_formats] var i = 0 , len = obj.pixmap_formats.length obj.pixmap_formats_len = len @@ -463,6 +469,8 @@ structs.Setup.pack = function packSetup(obj, format) { obj.pixmap_formats[i] = result[1] addSize += result[2] } + + obj.roots = Array.isArray(obj.roots) ? obj.roots : [obj.roots] var i = 0 , len = obj.roots.length obj.roots_len = len @@ -736,6 +744,8 @@ structs.HOST.pack = function packHOST(obj, format) { , 'address_len' , 'address' ] , addSize = 0 + + obj.address = Array.isArray(obj.address) ? obj.address : [obj.address] var len = obj.address.length format += new Array(len + 1).join("C") obj.address_len = len diff --git a/stubs/packList.tpl b/stubs/packList.tpl index d7f2025..0d96c38 100644 --- a/stubs/packList.tpl +++ b/stubs/packList.tpl @@ -26,6 +26,8 @@ addSize += ${field.value} / 4 format += 'a' {{/if}} {{else}} + +obj.${prepPropName(field.name)} = Array.isArray(obj.${prepPropName(field.name)}) ? obj.${prepPropName(field.name)} : [obj.${prepPropName(field.name)}] {{if bufPackType(field.type)}} var len = obj.${prepPropName(field.name)}.length format += new Array(len + 1).join("${bufPackType(field.type)}") From 6d5b414a333a958c4a560ed3349d55082a79a5b7 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 02:11:24 -0500 Subject: [PATCH 25/43] updated alloccolor test --- test/alloccolor.js | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/test/alloccolor.js b/test/alloccolor.js index 0e9afb1..12c634e 100644 --- a/test/alloccolor.js +++ b/test/alloccolor.js @@ -13,32 +13,32 @@ xclient.on('connect', function(display) { var wid = X.AllocID(); X.CreateWindow( - wid, root, - 10, 10, 400, 300, - 1, 1, 0, - { - backgroundPixel: white, eventMask: Exposure|PointerMotion - } - ); - X.MapWindow(wid); + { depth: 0 + , wid: wid + , parent: root + , x: 10 + , y: 10 + , width: 400 + , height: 300 + , border_width: 1 + , _class: 1 + , visual: 0 + , value_mask: { BackPixel: white, EventMask: Exposure|PointerMotion } + }); + X.MapWindow({ window: wid }); var gc = X.AllocID(); - X.AllocColor(display.screen[0].default_colormap, 0xffff, 0, 0, function(redcolor) { + X.AllocColor({ cmap: display.screen[0].default_colormap, red: 0xffff, blue: 0, green: 0 }, function(redcolor) { // todo: it is possible for PolyLine to be called before CreateGC! console.log(redcolor); - X.CreateGC(gc, wid, { foreground: redcolor.pixel, background: white } ); + X.CreateGC({ cid: gc, drawable: wid, value_mask: { Foreground: redcolor.pixel, Background: white } }); }); X.on('event', function(ev) { - if (ev.type == 12) - { - if (pts.length > 4) - X.PolyLine(0, wid, gc, pts); - } else if (ev.type == 6) { - pts.push(ev.x); - pts.push(ev.y); - if (pts.length > 4) - X.PolyLine(0, wid, gc, pts.slice(-4)); + if (ev.type == 12 && pts.length > 1) X.PolyLine({ coordinate_mode: 0, drawable: wid, gc: gc, points: pts }); + else if (ev.type == 6) { + pts.push({ x: ev.x, y: ev.y }); + if (pts.length > 1) X.PolyLine({ coordinate_mode: 0, drawable: wid, gc: gc, points: pts.slice(-2) }); } }); From 5478a6a5ebed2f80f83274a2620189f5e9097f9e Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 02:30:25 -0500 Subject: [PATCH 26/43] fixes problem with void data incorrectly packed/unpacked. --- lib/x11/autogen/requests.js | 17 +++++++++-------- stubs/packList.tpl | 2 +- stubs/unpackList.tpl | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 7d39674..33300d7 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -428,11 +428,13 @@ module.exports = , 'data' ] , addSize = 0 - - obj.data = Array.isArray(obj.data) ? obj.data : [obj.data] - var len = obj.data.length - format += new Array(len + 1).join("char") - obj.data_len = len + var len = xutil.padded_length(obj.data.length) + , buf_name = new Buffer(len) + obj.data_len = Buffer.byteLength(obj.data) + buf_name.write(obj.data) + obj.data = buf_name + format += 'a' + addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 18 args[2] = size(format) + addSize @@ -483,9 +485,8 @@ module.exports = reply.format = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) - var len = reply.value_len - reply.value = buf.unpack(new Array(len + 1).join("char"), unpacked.offset) - unpacked.offset = reply.value.offset + reply.value = buf.slice(unpacked.offset, unpacked.offset + reply.value_len).toString() + unpacked.offset += reply.value_len return reply } diff --git a/stubs/packList.tpl b/stubs/packList.tpl index 0d96c38..c361d2d 100644 --- a/stubs/packList.tpl +++ b/stubs/packList.tpl @@ -9,7 +9,7 @@ format += "${bufPackType(field['value-mask-type'])}" obj.${field['value-list-name']} = packed[1] format += new Array(packed[1].length + 1).join("${bufPackType('CARD32')}") - {{else field.type == 'char' }} + {{else field.type == 'char' || field.type == 'void' }} {{if field.value == null }} var len = xutil.padded_length(obj.${prepPropName(field.name)}.length) , buf_name = new Buffer(len) diff --git a/stubs/unpackList.tpl b/stubs/unpackList.tpl index 2caeb93..84b7382 100644 --- a/stubs/unpackList.tpl +++ b/stubs/unpackList.tpl @@ -1,6 +1,6 @@ {{each(i, field) list}} {{if isListType(field)}} - {{if field.type == 'char' }} + {{if field.type == 'char' || field.type == 'void' }} ${obj}.${prepPropName(field.name)} = ${buf}.slice(${offset}, ${offset} + ${obj}.${listLengthName(field)}).toString() ${offset} += ${obj}.${listLengthName(field)} {{else}} From edc1fc613e002b3eabb098b43cfc22c66fe38c67 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 02:31:31 -0500 Subject: [PATCH 27/43] brings test/changeproperty to the new api --- test/changeprop.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/changeprop.js b/test/changeprop.js index a70eb94..1b77f4a 100644 --- a/test/changeprop.js +++ b/test/changeprop.js @@ -10,13 +10,14 @@ xclient.on('connect', function(display) { var white = display.screen[0].white_pixel; var black = display.screen[0].black_pixel; - X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: PointerMotion }); - X.MapWindow(wid); + X.CreateWindow({ depth: 0, wid: wid, parent: root, x: 10, y: 10, width: 400, height: 300, border_width: 1, _class: 1, visual: 0, + value_mask: { BackPixel: white, EventMask: PointerMotion } }); + X.MapWindow({ window: wid }); // mode: 0 replace, 1 prepend, 2 append // mode, wid, name, type, format, data - X.ChangeProperty(0, wid, xclient.atoms.WM_NAME, xclient.atoms.STRING, 8, 'Hello, NodeJS'); + X.ChangeProperty({ mode: 0, window: wid, property: xclient.atoms.WM_NAME, type: xclient.atoms.STRING, format: 8, data: 'Hello, NodeJS' }); setInterval(function() { - X.ChangeProperty(0, wid, xclient.atoms.WM_NAME, xclient.atoms.STRING, 8, 'Hello, NodeJS ' + new Date()); + X.ChangeProperty({ mode: 0, window: wid, property: xclient.atoms.WM_NAME, type: xclient.atoms.STRING, format: 8, data: 'Hello, NodeJS ' + new Date() }); }, 100); -}); \ No newline at end of file +}); From d7830e33829befd4adf1dc9852aac1d46b9510c1 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 02:36:52 -0500 Subject: [PATCH 28/43] brings test/creategc to new api --- test/creategc.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/creategc.js b/test/creategc.js index d5b052b..7ca2867 100644 --- a/test/creategc.js +++ b/test/creategc.js @@ -11,7 +11,8 @@ xclient.on('connect', function(display) { var black = display.screen[0].black_pixel; var wid = X.AllocID(); - X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: PointerMotion }); + X.CreateWindow({ depth: 0, wid: wid, parent: root, x: 10, y: 10, width: 400, height: 300, border_width: 1, _class: 1, visual: 0, + value_mask: { BackPixel: white, EventMask: PointerMotion } }); var cid = X.AllocID(); - X.CreateGC(cid, wid); -}); \ No newline at end of file + X.CreateGC({ cid: cid, drawable: wid }); +}); From eaaa2f99c3c2e075ca62e8116884e2632e3b096c Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 02:37:01 -0500 Subject: [PATCH 29/43] brings test/createwindow to new api --- test/createwindow.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/createwindow.js b/test/createwindow.js index 9bab395..75681f9 100644 --- a/test/createwindow.js +++ b/test/createwindow.js @@ -23,10 +23,11 @@ xclient.on('connect', function(display) { var white = display.screen[0].white_pixel; var black = display.screen[0].black_pixel; - X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: mask }); - X.MapWindow(wid); + X.CreateWindow({ depth: 0, wid: wid, parent: root, x: 10, y: 10, width: 400, height: 300, border_width: 1, _class: 1, visual: 0, + value_mask: { BackPixel: white, EventMask: mask } }); + X.MapWindow({ window: wid }); }); xclient.on('event', function(ev) { console.log(ev); -}); \ No newline at end of file +}); From 3b70fcfe9189e3a0a9105209e461e20cefe2d32a Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 02:43:43 -0500 Subject: [PATCH 30/43] brings test/genstdatoms to new api --- test/genstdatoms.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/genstdatoms.js b/test/genstdatoms.js index 795a96e..08da4e4 100644 --- a/test/genstdatoms.js +++ b/test/genstdatoms.js @@ -8,13 +8,13 @@ xclient.on('connect', function(display) { { function getAtom(a) { - X.GetAtomName(a, function(str) { + X.GetAtomName({ atom: a }, function(str) { if (a == 1) console.log('module.exports = {') if (a != 68) - console.log(' %s: %d,', str, a); + console.log(' %s: %d,', str.name, a); else - console.log(' %s: %d\n}', str, a); + console.log(' %s: %d\n}', str.name, a); listAtoms(); }); } From 8cd04d34c48b8dd7fd56d6505724226e6f09cbc0 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 02:45:15 -0500 Subject: [PATCH 31/43] cleanup delete unused c-test files --- test/c-tests/Makefile | 3 --- test/c-tests/simplewin.c | 42 ---------------------------------------- 2 files changed, 45 deletions(-) delete mode 100644 test/c-tests/Makefile delete mode 100644 test/c-tests/simplewin.c diff --git a/test/c-tests/Makefile b/test/c-tests/Makefile deleted file mode 100644 index 9b00c85..0000000 --- a/test/c-tests/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -LDFLAGS=-lX11 - -simplewin: simplewin.o diff --git a/test/c-tests/simplewin.c b/test/c-tests/simplewin.c deleted file mode 100644 index a3f3926..0000000 --- a/test/c-tests/simplewin.c +++ /dev/null @@ -1,42 +0,0 @@ -#include -#include -#include -#include - -int main(void) { - Display *d; - Window w, w1; - XEvent e; - char *msg = "Hello, world!"; - int s; - - d = XOpenDisplay(NULL); - if (d == NULL) { - fprintf(stderr, "Cannot open display\n"); - exit(1); - } - - s = DefaultScreen(d); - w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 100, 100, 1, - BlackPixel(d, s), WhitePixel(d, s)); - - w1 = XCreateSimpleWindow(d, RootWindow(d, s), 50, 50, 50, 50, 1, - BlackPixel(d, s), WhitePixel(d, s)); - XSelectInput(d, w, ExposureMask | KeyPressMask); - XSelectInput(d, w1, ExposureMask); - XMapWindow(d, w); - XMapWindow(d, w1); - - while (1) { - XNextEvent(d, &e); - if (e.type == Expose) { - XFillRectangle(e.xany.display, e.xany.window, DefaultGC(d, s), 20, 20, 10, 10); - XDrawString(e.xany.display, e.xany.window, DefaultGC(d, s), 10, 50, msg, strlen(msg)); - } - if (e.type == KeyPress) - break; - } - - XCloseDisplay(d); - return 0; -} From 00fc7c3b11711bdcd6a8da0909a301dd85b27ac3 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 04:37:16 -0500 Subject: [PATCH 32/43] fixes issues that GetKeyboardMapping had - sometimes end of request needs to be padded to 4 byte align - some requests reference the request Length (may have issues with a few others that do operations on req Length) - makes sure variable is set to empty array even when no fields. --- lib/x11/autogen/requests.js | 386 +++++++++++++----------------------- stubs/requests.tpl | 10 +- stubs/unpackList.tpl | 4 + 3 files changed, 148 insertions(+), 252 deletions(-) diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 33300d7..197d442 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -49,6 +49,12 @@ var packMask = require('../valuemask') , size = xutil.formatSize , associate = xutil.associate +function padEnd(form, addSize, index) { + var s = size(form[0]) + addSize + form[0] += new Array(s * 4 % 4 + 1).join('x') + form[1][index] = Math.ceil(s) + return form +} module.exports = { CreateWindow: @@ -77,8 +83,7 @@ module.exports = format += new Array(packed[1].length + 1).join("L") args = parameterOrder(args, obj) args[0] = 1 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , ChangeWindowAttributes: @@ -98,8 +103,7 @@ module.exports = format += new Array(packed[1].length + 1).join("L") args = parameterOrder(args, obj) args[0] = 2 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , GetWindowAttributes: @@ -112,8 +116,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 3 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -151,8 +154,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 4 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , DestroySubwindows: @@ -165,8 +167,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 5 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , ChangeSaveSet: @@ -180,8 +181,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 6 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , ReparentWindow: @@ -197,8 +197,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 7 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , MapWindow: @@ -211,8 +210,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 8 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , MapSubwindows: @@ -225,8 +223,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 9 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , UnmapWindow: @@ -239,8 +236,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 10 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , UnmapSubwindows: @@ -253,8 +249,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 11 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , ConfigureWindow: @@ -273,8 +268,7 @@ module.exports = format += new Array(packed[1].length + 1).join("L") args = parameterOrder(args, obj) args[0] = 12 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , CirculateWindow: @@ -288,8 +282,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 13 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , GetGeometry: @@ -302,8 +295,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 14 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -333,8 +325,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 15 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -372,8 +363,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 16 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } , function(buf, prop) { var fields = @@ -397,8 +387,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 17 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -437,8 +426,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 18 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , DeleteProperty: @@ -452,8 +440,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 19 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , GetProperty: @@ -471,8 +458,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 20 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } , function(buf, prop) { var fields = @@ -501,8 +487,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 21 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -531,8 +516,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 22 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , GetSelectionOwner: @@ -545,8 +529,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 23 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -574,8 +557,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 24 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , SendEvent: @@ -596,8 +578,7 @@ module.exports = format += 'a' args = parameterOrder(args, obj) args[0] = 25 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , GrabPointer: @@ -617,11 +598,10 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 26 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } , function(buf, prop) { - var fields + var fields = [] , format = "" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) @@ -642,8 +622,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 27 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , GrabButton: @@ -664,8 +643,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 28 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , UngrabButton: @@ -680,8 +658,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 29 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , ChangeActivePointerGrab: @@ -696,8 +673,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 30 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , GrabKeyboard: @@ -714,11 +690,10 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 31 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } , function(buf, prop) { - var fields + var fields = [] , format = "" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) @@ -739,8 +714,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 32 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , GrabKey: @@ -758,8 +732,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 33 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , UngrabKey: @@ -774,8 +747,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 34 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , AllowEvents: @@ -789,8 +761,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 35 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , GrabServer: @@ -802,8 +773,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 36 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , UngrabServer: @@ -815,8 +785,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 37 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , QueryPointer: @@ -829,8 +798,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 38 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -863,8 +831,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 39 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -899,8 +866,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 40 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -934,8 +900,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 41 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , SetInputFocus: @@ -950,8 +915,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 42 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , GetInputFocus: @@ -963,8 +927,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 43 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -988,11 +951,10 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 44 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { - var fields + var fields = [] , format = "" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) @@ -1021,8 +983,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 45 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , CloseFont: @@ -1035,8 +996,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 46 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , QueryFont: @@ -1049,8 +1009,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 47 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -1115,8 +1074,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 48 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } , function(buf, prop) { var fields = @@ -1156,8 +1114,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 49 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -1198,8 +1155,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 50 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -1254,8 +1210,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 51 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , GetFontPath: @@ -1267,8 +1222,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 52 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -1304,8 +1258,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 53 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , FreePixmap: @@ -1318,8 +1271,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 54 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , CreateGC: @@ -1340,8 +1292,7 @@ module.exports = format += new Array(packed[1].length + 1).join("L") args = parameterOrder(args, obj) args[0] = 55 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , ChangeGC: @@ -1361,8 +1312,7 @@ module.exports = format += new Array(packed[1].length + 1).join("L") args = parameterOrder(args, obj) args[0] = 56 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , CopyGC: @@ -1377,8 +1327,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 57 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , SetDashes: @@ -1399,8 +1348,7 @@ module.exports = obj.dashes_len = len args = parameterOrder(args, obj) args[0] = 58 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , SetClipRectangles: @@ -1428,8 +1376,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 59 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , FreeGC: @@ -1442,8 +1389,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 60 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , ClearArea: @@ -1461,8 +1407,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 61 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , CopyArea: @@ -1483,8 +1428,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 62 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , CopyPlane: @@ -1506,8 +1450,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 63 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , PolyPoint: @@ -1534,8 +1477,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 64 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , PolyLine: @@ -1562,8 +1504,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 65 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , PolySegment: @@ -1589,8 +1530,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 66 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , PolyRectangle: @@ -1616,8 +1556,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 67 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , PolyArc: @@ -1643,8 +1582,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 68 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , FillPoly: @@ -1672,8 +1610,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 69 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , PolyFillRectangle: @@ -1699,8 +1636,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 70 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , PolyFillArc: @@ -1726,8 +1662,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 71 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , PutImage: @@ -1754,8 +1689,7 @@ module.exports = obj.data_len = len args = parameterOrder(args, obj) args[0] = 72 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , GetImage: @@ -1774,8 +1708,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 73 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } , function(buf, prop) { var fields = @@ -1812,8 +1745,7 @@ module.exports = obj.items_len = len args = parameterOrder(args, obj) args[0] = 74 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , PolyText16: @@ -1835,8 +1767,7 @@ module.exports = obj.items_len = len args = parameterOrder(args, obj) args[0] = 75 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , ImageText8: @@ -1861,8 +1792,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 76 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , ImageText16: @@ -1891,8 +1821,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 77 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , CreateColormap: @@ -1908,8 +1837,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 78 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , FreeColormap: @@ -1922,8 +1850,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 79 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , CopyColormapAndFree: @@ -1937,8 +1864,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 80 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , InstallColormap: @@ -1951,8 +1877,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 81 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , UninstallColormap: @@ -1965,8 +1890,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 82 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , ListInstalledColormaps: @@ -1979,8 +1903,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 83 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -2010,8 +1933,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 84 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -2047,8 +1969,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 85 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -2081,8 +2002,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 86 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } , function(buf, prop) { var fields = @@ -2118,8 +2038,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 87 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } , function(buf, prop) { var fields = @@ -2156,8 +2075,7 @@ module.exports = obj.pixels_len = len args = parameterOrder(args, obj) args[0] = 88 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , StoreColors: @@ -2182,8 +2100,7 @@ module.exports = } args = parameterOrder(args, obj) args[0] = 89 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , StoreNamedColor: @@ -2207,8 +2124,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 90 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , QueryColors: @@ -2227,8 +2143,7 @@ module.exports = obj.pixels_len = len args = parameterOrder(args, obj) args[0] = 91 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -2269,8 +2184,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 92 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -2309,8 +2223,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 93 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , CreateGlyphCursor: @@ -2333,8 +2246,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 94 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , FreeCursor: @@ -2347,8 +2259,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 95 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , RecolorCursor: @@ -2367,8 +2278,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 96 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , QueryBestSize: @@ -2384,8 +2294,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 97 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } , function(buf, prop) { var fields = @@ -2418,8 +2327,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 98 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -2445,11 +2353,10 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 99 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { - var fields + var fields = [] , format = "xxxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) @@ -2486,8 +2393,7 @@ module.exports = obj.keysyms_len = len args = parameterOrder(args, obj) args[0] = 100 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , GetKeyboardMapping: @@ -2501,18 +2407,17 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 101 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { - var fields + var fields = [] , format = "xxxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) reply.keysyms_per_keycode = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) - var len = reply.length + var len = (buf.length - 24) / 4 reply.keysyms = buf.unpack(new Array(len + 1).join("L"), unpacked.offset) unpacked.offset = reply.keysyms.offset return reply @@ -2535,8 +2440,7 @@ module.exports = format += new Array(packed[1].length + 1).join("L") args = parameterOrder(args, obj) args[0] = 102 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , GetKeyboardControl: @@ -2548,8 +2452,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 103 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -2578,8 +2481,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 104 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , ChangePointerControl: @@ -2596,8 +2498,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 105 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , GetPointerControl: @@ -2609,8 +2510,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 106 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -2639,8 +2539,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 107 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , GetScreenSaver: @@ -2652,8 +2551,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 108 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -2690,8 +2588,7 @@ module.exports = addSize += (len / 4) args = parameterOrder(args, obj) args[0] = 109 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , ListHosts: @@ -2703,8 +2600,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 110 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { var fields = @@ -2737,8 +2633,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 111 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , SetCloseDownMode: @@ -2751,8 +2646,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 112 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , KillClient: @@ -2765,8 +2659,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 113 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , RotateProperties: @@ -2787,8 +2680,7 @@ module.exports = obj.atoms_len = len args = parameterOrder(args, obj) args[0] = 114 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] , ForceScreenSaver: @@ -2801,8 +2693,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 115 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } ] , SetPointerMapping: @@ -2821,11 +2712,10 @@ module.exports = obj.map_len = len args = parameterOrder(args, obj) args[0] = 116 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } , function(buf, prop) { - var fields + var fields = [] , format = "" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) @@ -2845,11 +2735,10 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 117 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { - var fields + var fields = [] , format = "xxxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) @@ -2879,11 +2768,10 @@ module.exports = obj.keycodes_len = len args = parameterOrder(args, obj) args[0] = 118 - args[2] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 2) } , function(buf, prop) { - var fields + var fields = [] , format = "" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) @@ -2903,11 +2791,10 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 119 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } , function(buf, prop) { - var fields + var fields = [] , format = "xxxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) , reply = associate(fields, unpacked) @@ -2930,8 +2817,7 @@ module.exports = , addSize = 0 args = parameterOrder(args, obj) args[0] = 127 - args[1] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, 1) } ] } \ No newline at end of file diff --git a/stubs/requests.tpl b/stubs/requests.tpl index c07b009..a8e0eae 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -16,6 +16,12 @@ var packMask = require('../valuemask') , size = xutil.formatSize , associate = xutil.associate +function padEnd(form, addSize, index) { + var s = size(form[0]) + addSize + form[0] += new Array(s * 4 % 4 + 1).join('x') + form[1][index] = Math.ceil(s) + return form +} module.exports = {{each(i, reqName) Object.keys(requests)}} @@ -40,8 +46,7 @@ ${getDelim(i)} ${reqName}: {{html packList(3, "args", "format", requests[reqName].field, reqName)}} args = parameterOrder(args, obj) args[0] = ${requests[reqName].opcode} - args[${requestLengthIndex(requests[reqName])}] = size(format) + addSize - return [format, args] + return padEnd([format, args], addSize, ${requestLengthIndex(requests[reqName])}) } {{if requests[reqName].reply}} , function(buf, prop) { @@ -51,6 +56,7 @@ ${getDelim(i)} ${reqName}: ${getDelim(realIndex(requests[reqName].reply.field.slice(1), field), '[')} '${field.name}' {{/if}} {{/each}} ] + {{else}} = [] {{/if}} , format = "{{each(j, field) requests[reqName].reply.field.slice(1)}}${getBufPack(field)}{{/each}}" , unpacked = buf.unpack(format) diff --git a/stubs/unpackList.tpl b/stubs/unpackList.tpl index 84b7382..86a9d7f 100644 --- a/stubs/unpackList.tpl +++ b/stubs/unpackList.tpl @@ -6,7 +6,11 @@ ${offset} += ${obj}.${listLengthName(field)} {{else}} {{if field.value != null}} {{else bufPackType(field.type)}} + {{if listLengthName(field) == 'length' }} +var len = (${buf}.length - 24) / 4 + {{else}} var len = ${obj}.${listLengthName(field)} + {{/if}} ${obj}.${prepPropName(field.name)} = ${buf}.unpack(new Array(len + 1).join("${bufPackType(field.type)}"), ${offset}) ${offset} = ${obj}.${prepPropName(field.name)}.offset {{else}} From 9a84a4deb4f940ff94fa9be4d62bbee7322de07f Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 04:37:43 -0500 Subject: [PATCH 33/43] brings test/getkeyboardmapping to new api --- test/getkeyboardmapping.js | 41 +++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/test/getkeyboardmapping.js b/test/getkeyboardmapping.js index 6def7af..8c68d51 100644 --- a/test/getkeyboardmapping.js +++ b/test/getkeyboardmapping.js @@ -7,27 +7,28 @@ for (var key in ks) var kk2Name = {}; x11.createClient(function(display) { - var X = display.client; - var min = display.min_keycode; - var max = display.max_keycode; - X.GetKeyboardMapping(min, max-min, function(list) { - for (var i=0; i < list.length; ++i) - { - var name = kk2Name[i+min] = []; - var sublist = list[i]; - for (var j =0; j < sublist.length; ++j) - name.push(ks2Name[sublist[j]]); - } + var X = display.client; + var min = display.min_keycode; + var max = display.max_keycode; + X.GetKeyboardMapping({ first_keycode: min, count: max-min }, function(list) { + console.log(list) + for (var i=0; i < list.length; ++i) + { + var name = kk2Name[i+min] = []; + var sublist = list[i]; + for (var j =0; j < sublist.length; ++j) name.push(ks2Name[sublist[j]]); + } - var root = display.screen[0].root; - var wid = X.AllocID(); - var white = display.screen[0].white_pixel; - var black = display.screen[0].black_pixel; - X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: x11.eventMask.KeyPress}); - X.MapWindow(wid); + var root = display.screen[0].root; + var wid = X.AllocID(); + var white = display.screen[0].white_pixel; + var black = display.screen[0].black_pixel; + X.CreateWindow({ depth: 0, wid: wid, parent: root, x: 10, y: 10, width: 400, height: 300, border_width: 1, _class: 1, visual: 0, + value_mask: { BackPixel: white, EventMask: x11.eventMask.KeyPress } }); + X.MapWindow({ window: wid }); - X.on('event', function(ev) { - console.log(kk2Name[ev.keycode]); - }); + X.on('event', function(ev) { + console.log(kk2Name[ev.keycode]); }); + }); }); From 6fa0d517cebede4d8dc234ea7849819b093b5bc7 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 06:55:09 -0500 Subject: [PATCH 34/43] fixes reply lists with operators and body length usage. - sends body length to all reply handler functions. - handle operators and nested operators for list length. --- generateFiles.js | 20 +++++++++ lib/x11/autogen/requests.js | 86 ++++++++++++++++++------------------- lib/x11/xcore.js | 2 +- stubs/requests.tpl | 2 +- stubs/unpackList.tpl | 4 +- 5 files changed, 68 insertions(+), 46 deletions(-) diff --git a/generateFiles.js b/generateFiles.js index c55191f..4ceccb3 100644 --- a/generateFiles.js +++ b/generateFiles.js @@ -26,6 +26,7 @@ var fs = require('fs') , listLengthName: listLengthName , fieldName: fieldName , nonPad: nonPad + , constructOp: constructOp } ;['requests', 'structs'].forEach(function(name) { @@ -189,3 +190,22 @@ function nonPad(fields){ return field.fieldType != 'pad' }) } + +function constructOp(field, obj) { + function prependObj(item) { + return item == 'length' ? item : obj + '.' + item + } + + function handleOp(op) { + var params = [] + if (op.value) params.push(op.value) + if (op.fieldref) { + if (Array.isArray(op.fieldref)) params.concat(op.fieldref.map(prependObj)) + else params.push(prependObj(op.fieldref)) + } + if (op.op) params.push(handleOp(op.op)) + return params.join(op.operation) + } + + return handleOp(field.op) +} diff --git a/lib/x11/autogen/requests.js b/lib/x11/autogen/requests.js index 197d442..3e997e5 100644 --- a/lib/x11/autogen/requests.js +++ b/lib/x11/autogen/requests.js @@ -118,7 +118,7 @@ module.exports = args[0] = 3 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'visual' , 'class' @@ -297,7 +297,7 @@ module.exports = args[0] = 14 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'root' , 'x' @@ -327,7 +327,7 @@ module.exports = args[0] = 15 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'root' , 'parent' @@ -365,7 +365,7 @@ module.exports = args[0] = 16 return padEnd([format, args], addSize, 2) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'atom' ] , format = "L" @@ -389,7 +389,7 @@ module.exports = args[0] = 17 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'name_len' ] , format = "Sxxxxxxxxxxxxxxxxxxxxxx" @@ -460,7 +460,7 @@ module.exports = args[0] = 20 return padEnd([format, args], addSize, 2) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'type' , 'bytes_after' @@ -489,7 +489,7 @@ module.exports = args[0] = 21 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'atoms_len' ] , format = "Sxxxxxxxxxxxxxxxxxxxxxx" @@ -531,7 +531,7 @@ module.exports = args[0] = 23 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'owner' ] , format = "L" @@ -600,7 +600,7 @@ module.exports = args[0] = 26 return padEnd([format, args], addSize, 2) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [] , format = "" , unpacked = buf.unpack(format) @@ -692,7 +692,7 @@ module.exports = args[0] = 31 return padEnd([format, args], addSize, 2) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [] , format = "" , unpacked = buf.unpack(format) @@ -800,7 +800,7 @@ module.exports = args[0] = 38 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'root' , 'child' @@ -833,7 +833,7 @@ module.exports = args[0] = 39 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'events_len' ] , format = "Lxxxxxxxxxxxxxxxxxxxx" @@ -868,7 +868,7 @@ module.exports = args[0] = 40 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'child' , 'dst_x' @@ -929,7 +929,7 @@ module.exports = args[0] = 43 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'focus' ] , format = "L" @@ -953,7 +953,7 @@ module.exports = args[0] = 44 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [] , format = "" , unpacked = buf.unpack(format) @@ -1011,7 +1011,7 @@ module.exports = args[0] = 47 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'min_bounds' , 'max_bounds' @@ -1076,7 +1076,7 @@ module.exports = args[0] = 48 return padEnd([format, args], addSize, 2) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'font_ascent' , 'font_descent' @@ -1116,7 +1116,7 @@ module.exports = args[0] = 49 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'names_len' ] , format = "Sxxxxxxxxxxxxxxxxxxxxxx" @@ -1157,7 +1157,7 @@ module.exports = args[0] = 50 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'min_bounds' , 'max_bounds' @@ -1224,7 +1224,7 @@ module.exports = args[0] = 52 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'path_len' ] , format = "Sxxxxxxxxxxxxxxxxxxxxxx" @@ -1710,7 +1710,7 @@ module.exports = args[0] = 73 return padEnd([format, args], addSize, 2) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'visual' ] , format = "Lxxxxxxxxxxxxxxxxxxxx" @@ -1719,7 +1719,7 @@ module.exports = reply.depth = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) - var len = reply.data_len + var len = 4*length reply.data = buf.unpack(new Array(len + 1).join("C"), unpacked.offset) unpacked.offset = reply.data.offset return reply @@ -1905,7 +1905,7 @@ module.exports = args[0] = 83 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'cmaps_len' ] , format = "Sxxxxxxxxxxxxxxxxxxxxxx" @@ -1935,7 +1935,7 @@ module.exports = args[0] = 84 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'red' , 'green' @@ -1971,7 +1971,7 @@ module.exports = args[0] = 85 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'pixel' , 'exact_red' @@ -2004,7 +2004,7 @@ module.exports = args[0] = 86 return padEnd([format, args], addSize, 2) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'pixels_len' , 'masks_len' ] @@ -2040,7 +2040,7 @@ module.exports = args[0] = 87 return padEnd([format, args], addSize, 2) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'pixels_len' , 'red_mask' @@ -2145,7 +2145,7 @@ module.exports = args[0] = 91 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'colors_len' ] , format = "Sxxxxxxxxxxxxxxxxxxxxxx" @@ -2186,7 +2186,7 @@ module.exports = args[0] = 92 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'exact_red' , 'exact_green' @@ -2296,7 +2296,7 @@ module.exports = args[0] = 97 return padEnd([format, args], addSize, 2) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'width' , 'height' ] @@ -2329,7 +2329,7 @@ module.exports = args[0] = 98 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'present' , 'major_opcode' @@ -2355,7 +2355,7 @@ module.exports = args[0] = 99 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [] , format = "xxxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) @@ -2409,7 +2409,7 @@ module.exports = args[0] = 101 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [] , format = "xxxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) @@ -2417,7 +2417,7 @@ module.exports = reply.keysyms_per_keycode = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) - var len = (buf.length - 24) / 4 + var len = length reply.keysyms = buf.unpack(new Array(len + 1).join("L"), unpacked.offset) unpacked.offset = reply.keysyms.offset return reply @@ -2454,7 +2454,7 @@ module.exports = args[0] = 103 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'led_mask' , 'key_click_percent' @@ -2512,7 +2512,7 @@ module.exports = args[0] = 106 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'acceleration_numerator' , 'acceleration_denominator' @@ -2553,7 +2553,7 @@ module.exports = args[0] = 108 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'timeout' , 'interval' @@ -2602,7 +2602,7 @@ module.exports = args[0] = 110 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [ 'hosts_len' ] , format = "Sxxxxxxxxxxxxxxxxxxxxxx" @@ -2714,7 +2714,7 @@ module.exports = args[0] = 116 return padEnd([format, args], addSize, 2) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [] , format = "" , unpacked = buf.unpack(format) @@ -2737,7 +2737,7 @@ module.exports = args[0] = 117 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [] , format = "xxxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) @@ -2770,7 +2770,7 @@ module.exports = args[0] = 118 return padEnd([format, args], addSize, 2) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [] , format = "" , unpacked = buf.unpack(format) @@ -2793,7 +2793,7 @@ module.exports = args[0] = 119 return padEnd([format, args], addSize, 1) } - , function(buf, prop) { + , function(buf, prop, length) { var fields = [] , format = "xxxxxxxxxxxxxxxxxxxxxxxx" , unpacked = buf.unpack(format) @@ -2801,7 +2801,7 @@ module.exports = reply.keycodes_per_modifier = prop Object.defineProperty(reply, '_raw', { value: buf, enumerable: false }) Object.defineProperty(reply, '_offset', { value: unpacked.offset, enumerable: false }) - var len = reply.keycodes_len + var len = 8*reply.keycodes_per_modifier reply.keycodes = buf.unpack(new Array(len + 1).join("C"), unpacked.offset) unpacked.offset = reply.keycodes.offset return reply diff --git a/lib/x11/xcore.js b/lib/x11/xcore.js index a4fe480..b879393 100644 --- a/lib/x11/xcore.js +++ b/lib/x11/xcore.js @@ -271,7 +271,7 @@ XClient.prototype.expectReplyHeader = function() var handler = client.replies[seq_num]; if (handler) { var unpack = handler[0]; - var result = unpack( data, opt_data ); + var result = unpack( data, opt_data, bodylength ); var callback = handler[1]; callback(result); // TODO: add multiple replies flag and delete handler only after last reply (eg ListFontsWithInfo) diff --git a/stubs/requests.tpl b/stubs/requests.tpl index a8e0eae..31d6259 100644 --- a/stubs/requests.tpl +++ b/stubs/requests.tpl @@ -49,7 +49,7 @@ ${getDelim(i)} ${reqName}: return padEnd([format, args], addSize, ${requestLengthIndex(requests[reqName])}) } {{if requests[reqName].reply}} - , function(buf, prop) { + , function(buf, prop, length) { var fields{{if shiftedFirstType(requests[reqName].reply.field, 'field')}} = {{each(j, field) requests[reqName].reply.field.slice(1)}} {{if field.fieldType == 'field'}} diff --git a/stubs/unpackList.tpl b/stubs/unpackList.tpl index 86a9d7f..14e1bb1 100644 --- a/stubs/unpackList.tpl +++ b/stubs/unpackList.tpl @@ -7,7 +7,9 @@ ${offset} += ${obj}.${listLengthName(field)} {{if field.value != null}} {{else bufPackType(field.type)}} {{if listLengthName(field) == 'length' }} -var len = (${buf}.length - 24) / 4 +var len = length + {{else field.op}} +var len = ${constructOp(field, obj)} {{else}} var len = ${obj}.${listLengthName(field)} {{/if}} From 08b6d12288baa7e06d3882f9b1af0c292b9fbba2 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 06:55:43 -0500 Subject: [PATCH 35/43] brings test/getprop to new api --- test/getprop.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/getprop.js b/test/getprop.js index b350d00..bb35107 100644 --- a/test/getprop.js +++ b/test/getprop.js @@ -10,21 +10,21 @@ xclient.on('connect', function(display) { var white = display.screen[0].white_pixel; var black = display.screen[0].black_pixel; - X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: PropertyChange }); - X.MapWindow(wid); + X.CreateWindow({ depth: 0, wid: wid, parent: root, x: 10, y: 10, width: 400, height: 300, border_width: 1, _class: 1, visual: 0, + value_mask: { BackPixel: white, EventMask: PropertyChange } }); + X.MapWindow({ window: wid }); // mode: 0 replace, 1 prepend, 2 append // mode, wid, name, type, format, data - X.ChangeProperty(0, wid, xclient.atoms.WM_NAME, xclient.atoms.STRING, 8, 'Hello, NodeJS'); + X.ChangeProperty({ mode: 0, window: wid, property: xclient.atoms.WM_NAME, type: xclient.atoms.STRING, format: 8, data: 'Hello, NodeJS' }); setInterval(function() { - X.ChangeProperty(0, wid, xclient.atoms.WM_NAME, xclient.atoms.STRING, 8, 'Hello, NodeJS ' + new Date()); + X.ChangeProperty({ mode: 0, window: wid, property: xclient.atoms.WM_NAME, type: xclient.atoms.STRING, format: 8, data: 'Hello, NodeJS' + new Date() }); }, 1000); xclient.on('event', function(ev) { - X.GetProperty(0, wid, xclient.atoms.WM_NAME, xclient.atoms.STRING, 0, 10000000, function(prop) { - if (prop.type == xclient.atoms.STRING) - prop.data = prop.data.toString(); - console.log(prop.data); + X.GetProperty({ _delete: 0, window: wid, property: xclient.atoms.WM_NAME, type: xclient.atoms.STRING, long_offset: 0, long_length: 10000000 }, function(prop) { + if (prop.type == xclient.atoms.STRING) prop.data = prop.value.toString(); + console.log(prop.value); }); }); -}); \ No newline at end of file +}); From a8432ffc6d5eb111d6fef969d315e2a4aa601954 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 07:14:49 -0500 Subject: [PATCH 36/43] fixes prop not being added for unpacking toa struct in some situations --- lib/x11/autogen/structs.js | 3 ++- stubs/structs.tpl | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/x11/autogen/structs.js b/lib/x11/autogen/structs.js index 400b47a..7bc2aa1 100644 --- a/lib/x11/autogen/structs.js +++ b/lib/x11/autogen/structs.js @@ -637,7 +637,8 @@ structs.STR.pack = function packSTR(obj, format) { structs.STR.unpack = function unpackSTR(buf, offset) { offset = offset || 0 - var fields + var fields = + [ 'name_len' ] , format = "C" , unpacked = buf.unpack(format, offset) , ret = associate(fields, unpacked) diff --git a/stubs/structs.tpl b/stubs/structs.tpl index 751b3ef..08eeace 100644 --- a/stubs/structs.tpl +++ b/stubs/structs.tpl @@ -25,12 +25,13 @@ structs.${structName}.pack = function pack${structName}(obj, format) { structs.${structName}.unpack = function unpack${structName}(buf, offset) { offset = offset || 0 - var fields{{if shiftedFirstType(structs[structName].field, 'field')}} = + var fields{{if structs[structName].field}} = {{each(j, field) structs[structName].field}} {{if field.fieldType == 'field'}} ${getDelim(realIndex(structs[structName].field, field), '[')} '${field.name}' {{/if}} {{/each}} ] + {{else}} {{/if}} , format = "{{each(j, field) structs[structName].field}}${getBufPack(field)}{{/each}}" , unpacked = buf.unpack(format, offset) From b007587d0352d3a225a31c4d998381d1a89760be Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 07:15:48 -0500 Subject: [PATCH 37/43] makes Buffer.offset writeable. --- lib/x11/unpackbuffer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/x11/unpackbuffer.js b/lib/x11/unpackbuffer.js index aa6bf9f..b592b9c 100644 --- a/lib/x11/unpackbuffer.js +++ b/lib/x11/unpackbuffer.js @@ -50,7 +50,7 @@ module.exports.addUnpack = function(Buffer) } current_arg++; } - Object.defineProperty(data, 'offset', { enumerable: false, value: offset }) + Object.defineProperty(data, 'offset', { enumerable: false, value: offset, writable: true }) return data; } From 437f9b1270586d6acb3a0cd42be2975240b02084 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 07:16:20 -0500 Subject: [PATCH 38/43] brings test/testext to new api --- test/listext.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/listext.js b/test/listext.js index 0ec2fe6..ae5f4fb 100644 --- a/test/listext.js +++ b/test/listext.js @@ -1,10 +1,10 @@ var x11 = require('../lib/x11'); var X = x11.createClient(); X.on('connect', function(display) { - X.ListExtensions(function(list) { - list.forEach(function(ext) { - console.log(ext); - }); - X.terminate(); + X.ListExtensions(function(list) { + list.names.forEach(function(ext) { + console.log(ext.name); }); + X.terminate(); + }); }); From 5edff65e9bf182fd68b078af97f8709d97d5e346 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 08:39:01 -0500 Subject: [PATCH 39/43] brings test/polyfillrect to new api why draw multiple rects ontop of eachother? Solution turn one of them red. --- test/polyfillrect.js | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/test/polyfillrect.js b/test/polyfillrect.js index 6b2d70f..dab3a71 100644 --- a/test/polyfillrect.js +++ b/test/polyfillrect.js @@ -11,25 +11,27 @@ xclient.on('connect', function(display) { var black = display.screen[0].black_pixel; var wid = X.AllocID(); - X.CreateWindow( - wid, root, - 10, 10, 400, 300, - 1, 1, 0, - { - backgroundPixel: white, eventMask: Exposure|PointerMotion - } - ); - X.MapWindow(wid); + X.CreateWindow({ depth: 0, wid: wid, parent: root, x: 10, y: 10, width: 400, height: 300, border_width: 1, _class: 1, visual: 0, + value_mask: { BackPixel: white, EventMask: Exposure|PointerMotion } }); + X.MapWindow({ window: wid }); var gc = X.AllocID(); - X.CreateGC(gc, wid, { foreground: black, background: white } ); + X.CreateGC({ cid: gc, drawable: wid, value_mask: { Foreground: black, Background: white } }); + + var gc2 + X.AllocColor({ cmap: display.screen[0].default_colormap, red: 0xffff, blue: 0, green: 0 }, function(redcolor) { + gc2 = X.AllocID(); + X.CreateGC({ cid: gc2, drawable: wid, value_mask: { Foreground: redcolor.pixel, Background: white } }); + }) X.on('event', function(ev) { if (ev.type == 12) { - X.PolyFillRectangle(wid, gc, [20, 30, 50, 90]); - X.PolyFillRectangle(wid, gc, [40, 50, 90, 10]); - X.PolyFillRectangle(wid, gc, [20, 80, 50, 30]); + X.PolyFillRectangle({ drawable: wid, gc: gc, rectangles: + [ { x: 20, y: 30, width: 50, height: 90} + , { x: 40, y: 50, width: 90, height: 10} + ]}) + X.PolyFillRectangle({ drawable: wid, gc: gc2 || gc, rectangles: { x: 20, y: 80, width: 50, height: 30} }) } else if (ev.type == 6) { //console.log(ev.x, ev.y); @@ -40,4 +42,4 @@ xclient.on('connect', function(display) { X.on('error', function(e) { console.log(e); }); -}); \ No newline at end of file +}); From abaade728d6ad1f9c760b246573298b7accd0693 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 08:43:16 -0500 Subject: [PATCH 40/43] brings test/polyline to new api --- test/polyline.js | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/test/polyline.js b/test/polyline.js index 1509ac0..22971dd 100644 --- a/test/polyline.js +++ b/test/polyline.js @@ -3,7 +3,7 @@ var x11 = require('../lib/x11'); var xclient = x11.createClient(); var Exposure = x11.eventMask.Exposure; var PointerMotion = x11.eventMask.PointerMotion; -var pts = [100, 1000, 10, 20, 10, 0, 0, 3]; +var pts = []; var prevPoint; @@ -14,30 +14,19 @@ xclient.on('connect', function(display) { var black = display.screen[0].black_pixel; var wid = X.AllocID(); - X.CreateWindow( - wid, root, - 10, 10, 400, 300, - 1, 1, 0, - { - backgroundPixel: white, eventMask: Exposure|PointerMotion - } - ); - X.MapWindow(wid); + X.CreateWindow({ depth: 0, wid: wid, parent: root, x: 10, y: 10, width: 400, height: 300, border_width: 1, _class: 1, visual: 0, + value_mask: { BackPixel: white, EventMask: Exposure|PointerMotion } }); + X.MapWindow({ window: wid }); var gc = X.AllocID(); - X.CreateGC(gc, wid, { foreground: black, background: white } ); + X.CreateGC({ cid: gc, drawable: wid, value_mask: { Foreground: black, Background: white } }); X.on('event', function(ev) { - if (ev.type == 12) - { - if (pts.length > 4) - X.PolyLine(0, wid, gc, pts); - } else if (ev.type == 6) { - pts.push(ev.x); - pts.push(ev.y); - if (pts.length > 4) - X.PolyLine(0, wid, gc, pts.slice(-4)); - } + if (ev.type == 12 && pts.length > 1) X.PolyLine({ coordinate_mode: 0, drawable: wid, gc: gc, points: pts }); + else if (ev.type == 6) { + pts.push({ x: ev.x, y: ev.y }); + if (pts.length > 1) X.PolyLine({ coordinate_mode: 0, drawable: wid, gc: gc, points: pts.slice(-2) }); + } }); X.on('error', function(e) { From 005095df8264ae1f006af98d259889c49cfc85e2 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 08:49:11 -0500 Subject: [PATCH 41/43] brings test/polyline to new api --- test/polypoint.js | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/test/polypoint.js b/test/polypoint.js index d5764d1..fcdde0d 100644 --- a/test/polypoint.js +++ b/test/polypoint.js @@ -12,27 +12,19 @@ xclient.on('connect', function(display) { var black = display.screen[0].black_pixel; var wid = X.AllocID(); - X.CreateWindow( - wid, root, - 10, 10, 400, 300, - 1, 1, 0, - { - backgroundPixel: white, eventMask: Exposure|PointerMotion - } - ); - X.MapWindow(wid); + X.CreateWindow({ depth: 0, wid: wid, parent: root, x: 10, y: 10, width: 400, height: 300, border_width: 1, _class: 1, visual: 0, + value_mask: { BackPixel: white, EventMask: Exposure|PointerMotion } }); + X.MapWindow({ window: wid }); var gc = X.AllocID(); - X.CreateGC(gc, wid, { foreground: black, background: white } ); + X.CreateGC({ cid: gc, drawable: wid, value_mask: { Foreground: black, Background: white } }); X.on('event', function(ev) { if (ev.type == 12) { //X.PolyPoint(0, wid, gc, pts); } else if (ev.type == 6) { - //pts.push(ev.x); - //pts.push(ev.y); - X.PolyPoint(0, wid, gc, [ev.x, ev.y]); + X.PolyPoint({ coordinate_mode: 0, drawable: wid, gc: gc, points: { x: ev.x, y: ev.y} }); } }); From c50529693dcdd7672e4c4849d54bad8d60f84659 Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 09:10:21 -0500 Subject: [PATCH 42/43] brings test/query_ext to new api --- test/query_ext.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/query_ext.js b/test/query_ext.js index 52a539a..eb0a0fc 100644 --- a/test/query_ext.js +++ b/test/query_ext.js @@ -4,9 +4,10 @@ var numExt = 0; X.on('connect', function(display) { X.ListExtensions(function(list) { console.log(list); - list.forEach(function(ext) { + list.names.forEach(function(ext) { numExt++; - X.QueryExtension(ext, function(e) { + X.QueryExtension({ name: ext.name }, function(e) { + console.log(e) e.name = ext; console.log(e); if (--numExt == 0) From f5290b64deb1e04613af83a968ef47aa3c229b0a Mon Sep 17 00:00:00 2001 From: CrypticSwarm Date: Fri, 9 Sep 2011 09:14:57 -0500 Subject: [PATCH 43/43] brings test/query_pointer to new api --- test/query_pointer.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/query_pointer.js b/test/query_pointer.js index ccc18a2..18bef7c 100644 --- a/test/query_pointer.js +++ b/test/query_pointer.js @@ -5,10 +5,11 @@ X.on('connect', function(display) { var screen = display.screen[0]; var wid = X.AllocID(); - X.CreateWindow(wid, screen.root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: screen.white_pixel }); - X.MapWindow(wid); + X.CreateWindow({ depth: 0, wid: wid, parent: screen.root, x: 10, y: 10, width: 400, height: 300, border_width: 1, _class: 1, visual: 0, + value_mask: { BackPixel: screen.white_pixel } }); + X.MapWindow({ window: wid }); setInterval( function() { - X.QueryPointer(wid, function(res) { + X.QueryPointer({ window: wid }, function(res) { console.log(res); }); }, 1000);