diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index b372875..8a1c48c 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -1858,7 +1858,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) // The following can be overriden by calling addModule() or by having a .js file in the module path // Clipboard. Refer to /modules folder for a human readable version - duk_peval_string_noresult(ctx, "addModule('clipboard', Buffer.from('DQpmdW5jdGlvbiBuYXRpdmVBZGRNb2R1bGUobmFtZSkNCnsNCiAgICB2YXIgdmFsdWUgPSBnZXRKU01vZHVsZShuYW1lKTsNCiAgICB2YXIgcmV0ID0gImR1a19wZXZhbF9zdHJpbmdfbm9yZXN1bHQoY3R4LCBcImFkZE1vZHVsZSgnIiArIG5hbWUgKyAiJywgQnVmZmVyLmZyb20oJyIgKyBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoJ2Jhc2U2NCcpICsgIicsICdiYXNlNjQnKS50b1N0cmluZygpKTtcIik7IjsNCiAgICBtb2R1bGUuZXhwb3J0cyhyZXQpOw0KfQ0KDQpmdW5jdGlvbiB3aW5fY29weXRleHQodHh0KQ0Kew0KICAgIHZhciBHTUVNX01PVkVBQkxFID0gMHgwMDAyOw0KICAgIHZhciBDRl9URVhUID0gMTsNCg0KICAgIHZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOw0KICAgIHZhciB1c2VyMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpOw0KICAgIHZhciBrZXJuZWwzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbEFsbG9jJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxMb2NrJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxVbmxvY2snKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdPcGVuQ2xpcGJvYXJkJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnRW1wdHlDbGlwYm9hcmQnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdDbG9zZUNsaXBib2FyZCcpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ1NldENsaXBib2FyZERhdGEnKTsNCg0KICAgIHZhciBoID0ga2VybmVsMzIuR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSwgdHh0Lmxlbmd0aCArIDIpOw0KICAgIGguYXV0b0ZyZWUoZmFsc2UpOw0KICAgIHZhciBoYnVmZmVyID0ga2VybmVsMzIuR2xvYmFsTG9jayhoKTsNCiAgICBoYnVmZmVyLmF1dG9GcmVlKGZhbHNlKTsNCiAgICB2YXIgdG1wID0gQnVmZmVyLmFsbG9jKHR4dC5sZW5ndGggKyAxKTsNCiAgICBCdWZmZXIuZnJvbSh0eHQpLmNvcHkodG1wKTsNCiAgICB0bXAuY29weShoYnVmZmVyLkRlcmVmKDAsIHR4dC5sZW5ndGggKyAxKS50b0J1ZmZlcigpKTsNCiAgICBrZXJuZWwzMi5HbG9iYWxVbmxvY2soaCk7DQoNCiAgICB1c2VyMzIuT3BlbkNsaXBib2FyZCgwKTsNCiAgICB1c2VyMzIuRW1wdHlDbGlwYm9hcmQoKTsNCiAgICB1c2VyMzIuU2V0Q2xpcGJvYXJkRGF0YShDRl9URVhULCBoKTsNCiAgICB1c2VyMzIuQ2xvc2VDbGlwYm9hcmQoKTsNCn0NCg0Kc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQp7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbl9jb3B5dGV4dDsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnbGludXgnOg0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICBicmVhazsNCn0NCm1vZHVsZS5leHBvcnRzLm5hdGl2ZUFkZE1vZHVsZSA9IG5hdGl2ZUFkZE1vZHVsZTs=', 'base64').toString());"); + duk_peval_string_noresult(ctx, "addModule('clipboard', Buffer.from('DQpmdW5jdGlvbiBuYXRpdmVBZGRNb2R1bGUobmFtZSkNCnsNCiAgICB2YXIgdmFsdWUgPSBnZXRKU01vZHVsZShuYW1lKTsNCiAgICB2YXIgcmV0ID0gImR1a19wZXZhbF9zdHJpbmdfbm9yZXN1bHQoY3R4LCBcImFkZE1vZHVsZSgnIiArIG5hbWUgKyAiJywgQnVmZmVyLmZyb20oJyIgKyBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoJ2Jhc2U2NCcpICsgIicsICdiYXNlNjQnKS50b1N0cmluZygpKTtcIik7IjsNCiAgICBtb2R1bGUuZXhwb3J0cyhyZXQpOw0KfQ0KDQoNCmZ1bmN0aW9uIHdpbl9yZWFkdGV4dCgpDQp7DQogICAgdmFyIHJldCA9ICcnOw0KICAgIHZhciBDRl9URVhUID0gMTsNCiAgICB2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsNCiAgICB2YXIgdXNlcjMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsNCiAgICB2YXIga2VybmVsMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgna2VybmVsMzIuZGxsJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxBbGxvYycpOw0KICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2xvYmFsTG9jaycpOw0KICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2xvYmFsVW5sb2NrJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnT3BlbkNsaXBib2FyZCcpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ0Nsb3NlQ2xpcGJvYXJkJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnR2V0Q2xpcGJvYXJkRGF0YScpOw0KDQogICAgdXNlcjMyLk9wZW5DbGlwYm9hcmQoMCk7DQogICAgdmFyIGggPSB1c2VyMzIuR2V0Q2xpcGJvYXJkRGF0YShDRl9URVhUKTsNCiAgICBpZihoLlZhbCE9MCkNCiAgICB7DQogICAgICAgIHZhciBoYnVmZmVyID0ga2VybmVsMzIuR2xvYmFsTG9jayhoKTsNCiAgICAgICAgcmV0ID0gaGJ1ZmZlci5TdHJpbmc7DQogICAgICAgIGtlcm5lbDMyLkdsb2JhbFVubG9jayhoKTsNCiAgICB9DQogICAgdXNlcjMyLkNsb3NlQ2xpcGJvYXJkKCk7DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiB3aW5fY29weXRleHQodHh0KQ0Kew0KICAgIHZhciBHTUVNX01PVkVBQkxFID0gMHgwMDAyOw0KICAgIHZhciBDRl9URVhUID0gMTsNCg0KICAgIHZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOw0KICAgIHZhciB1c2VyMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpOw0KICAgIHZhciBrZXJuZWwzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbEFsbG9jJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxMb2NrJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxVbmxvY2snKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdPcGVuQ2xpcGJvYXJkJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnRW1wdHlDbGlwYm9hcmQnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdDbG9zZUNsaXBib2FyZCcpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ1NldENsaXBib2FyZERhdGEnKTsNCg0KICAgIHZhciBoID0ga2VybmVsMzIuR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSwgdHh0Lmxlbmd0aCArIDIpOw0KICAgIGguYXV0b0ZyZWUoZmFsc2UpOw0KICAgIHZhciBoYnVmZmVyID0ga2VybmVsMzIuR2xvYmFsTG9jayhoKTsNCiAgICBoYnVmZmVyLmF1dG9GcmVlKGZhbHNlKTsNCiAgICB2YXIgdG1wID0gQnVmZmVyLmFsbG9jKHR4dC5sZW5ndGggKyAxKTsNCiAgICBCdWZmZXIuZnJvbSh0eHQpLmNvcHkodG1wKTsNCiAgICB0bXAuY29weShoYnVmZmVyLkRlcmVmKDAsIHR4dC5sZW5ndGggKyAxKS50b0J1ZmZlcigpKTsNCiAgICBrZXJuZWwzMi5HbG9iYWxVbmxvY2soaCk7DQoNCiAgICB1c2VyMzIuT3BlbkNsaXBib2FyZCgwKTsNCiAgICB1c2VyMzIuRW1wdHlDbGlwYm9hcmQoKTsNCiAgICB1c2VyMzIuU2V0Q2xpcGJvYXJkRGF0YShDRl9URVhULCBoKTsNCiAgICB1c2VyMzIuQ2xvc2VDbGlwYm9hcmQoKTsNCn0NCg0Kc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQp7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbl9jb3B5dGV4dDsNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMucmVhZCA9IHdpbl9yZWFkdGV4dDsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnbGludXgnOg0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICBicmVhazsNCn0NCm1vZHVsZS5leHBvcnRzLm5hdGl2ZUFkZE1vZHVsZSA9IG5hdGl2ZUFkZE1vZHVsZTs=', 'base64').toString());"); // Promise: This is very important, as it is used everywhere. Refer to /modules folder to see a human readable version of promise.js duk_peval_string_noresult(ctx, "addModule('promise', Buffer.from('LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCnZhciByZWZUYWJsZSA9IHt9OwoKZnVuY3Rpb24gZXZlbnRfc3dpdGNoZXJfaGVscGVyKGRlc2lyZWRfY2FsbGVlLCB0YXJnZXQpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ2V2ZW50X3N3aXRjaGVyJzsKICAgIHRoaXMuZnVuYyA9IGZ1bmN0aW9uIGZ1bmMoKQogICAgewogICAgICAgIHZhciBhcmdzID0gW107CiAgICAgICAgZm9yKHZhciBpIGluIGFyZ3VtZW50cykKICAgICAgICB7CiAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKGZ1bmMudGFyZ2V0LmFwcGx5KGZ1bmMuZGVzaXJlZCwgYXJncykpOwogICAgfTsKICAgIHRoaXMuZnVuYy5kZXNpcmVkID0gZGVzaXJlZF9jYWxsZWU7CiAgICB0aGlzLmZ1bmMudGFyZ2V0ID0gdGFyZ2V0OwogICAgdGhpcy5mdW5jLnNlbGYgPSB0aGlzOwp9CmZ1bmN0aW9uIGV2ZW50X3N3aXRjaGVyKGRlc2lyZWRfY2FsbGVlLCB0YXJnZXQpCnsKICAgIHJldHVybiAobmV3IGV2ZW50X3N3aXRjaGVyX2hlbHBlcihkZXNpcmVkX2NhbGxlZSwgdGFyZ2V0KSk7Cn0KCmZ1bmN0aW9uIFByb21pc2UocHJvbWlzZUZ1bmMpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ3Byb21pc2UnOwogICAgdGhpcy5wcm9taXNlID0gdGhpczsKICAgIHRoaXMuX2ludGVybmFsID0geyBfT2JqZWN0SUQ6ICdwcm9taXNlLmludGVybmFsJywgcHJvbWlzZTogdGhpcywgZnVuYzogcHJvbWlzZUZ1bmMsIGNvbXBsZXRlZDogZmFsc2UsIGVycm9yczogZmFsc2UsIGNvbXBsZXRlZEFyZ3M6IFtdIH07CiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzLl9pbnRlcm5hbCk7CiAgICB0aGlzLl9pbnRlcm5hbC5vbignX2V2ZW50SG9vaycsIGZ1bmN0aW9uIChldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2spCiAgICB7CiAgICAgICAgLy9jb25zb2xlLmxvZygnaG9vaycsIGV2ZW50TmFtZSwgJ2Vycm9ycy8nICsgdGhpcy5lcnJvcnMgKyAnIGNvbXBsZXRlZC8nICsgdGhpcy5jb21wbGV0ZWQpOwogICAgICAgIHZhciByID0gbnVsbDsKCiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PSAncmVzb2x2ZWQnICYmICF0aGlzLmVycm9ycyAmJiB0aGlzLmNvbXBsZXRlZCkKICAgICAgICB7CiAgICAgICAgICAgIHIgPSBldmVudENhbGxiYWNrLmFwcGx5KHRoaXMsIHRoaXMuY29tcGxldGVkQXJncyk7CiAgICAgICAgICAgIGlmKHIhPW51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMuZW1pdF9yZXR1cm5WYWx1ZSgncmVzb2x2ZWQnLCByKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoZXZlbnROYW1lID09ICdyZWplY3RlZCcgJiYgdGhpcy5lcnJvcnMgJiYgdGhpcy5jb21wbGV0ZWQpCiAgICAgICAgewogICAgICAgICAgICBldmVudENhbGxiYWNrLmFwcGx5KHRoaXMsIHRoaXMuY29tcGxldGVkQXJncyk7CiAgICAgICAgfQogICAgICAgIGlmIChldmVudE5hbWUgPT0gJ3NldHRsZWQnICYmIHRoaXMuY29tcGxldGVkKQogICAgICAgIHsKICAgICAgICAgICAgZXZlbnRDYWxsYmFjay5hcHBseSh0aGlzLCBbXSk7CiAgICAgICAgfQogICAgfSk7CiAgICB0aGlzLl9pbnRlcm5hbC5yZXNvbHZlciA9IGZ1bmN0aW9uIF9yZXNvbHZlcigpCiAgICB7CiAgICAgICAgX3Jlc29sdmVyLl9zZWxmLmVycm9ycyA9IGZhbHNlOwogICAgICAgIF9yZXNvbHZlci5fc2VsZi5jb21wbGV0ZWQgPSB0cnVlOwogICAgICAgIF9yZXNvbHZlci5fc2VsZi5jb21wbGV0ZWRBcmdzID0gW107CiAgICAgICAgdmFyIGFyZ3MgPSBbJ3Jlc29sdmVkJ107CiAgICAgICAgaWYgKHRoaXMuZW1pdF9yZXR1cm5WYWx1ZSAmJiB0aGlzLmVtaXRfcmV0dXJuVmFsdWUoJ3Jlc29sdmVkJykgIT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIF9yZXNvbHZlci5fc2VsZi5jb21wbGV0ZWRBcmdzLnB1c2godGhpcy5lbWl0X3JldHVyblZhbHVlKCdyZXNvbHZlZCcpKTsKICAgICAgICAgICAgYXJncy5wdXNoKHRoaXMuZW1pdF9yZXR1cm5WYWx1ZSgncmVzb2x2ZWQnKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGZvciAodmFyIGEgaW4gYXJndW1lbnRzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfcmVzb2x2ZXIuX3NlbGYuY29tcGxldGVkQXJncy5wdXNoKGFyZ3VtZW50c1thXSk7CiAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2FdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfcmVzb2x2ZXIuX3NlbGYuZW1pdC5hcHBseShfcmVzb2x2ZXIuX3NlbGYsIGFyZ3MpOwogICAgICAgIF9yZXNvbHZlci5fc2VsZi5lbWl0KCdzZXR0bGVkJyk7CiAgICB9OwogICAgdGhpcy5faW50ZXJuYWwucmVqZWN0b3IgPSBmdW5jdGlvbiBfcmVqZWN0b3IoKQogICAgewogICAgICAgIF9yZWplY3Rvci5fc2VsZi5lcnJvcnMgPSB0cnVlOwogICAgICAgIF9yZWplY3Rvci5fc2VsZi5jb21wbGV0ZWQgPSB0cnVlOwogICAgICAgIF9yZWplY3Rvci5fc2VsZi5jb21wbGV0ZWRBcmdzID0gW107CiAgICAgICAgdmFyIGFyZ3MgPSBbJ3JlamVjdGVkJ107CiAgICAgICAgZm9yICh2YXIgYSBpbiBhcmd1bWVudHMpCiAgICAgICAgewogICAgICAgICAgICBfcmVqZWN0b3IuX3NlbGYuY29tcGxldGVkQXJncy5wdXNoKGFyZ3VtZW50c1thXSk7CiAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbYV0pOwogICAgICAgIH0KCiAgICAgICAgX3JlamVjdG9yLl9zZWxmLmVtaXQuYXBwbHkoX3JlamVjdG9yLl9zZWxmLCBhcmdzKTsKICAgICAgICBfcmVqZWN0b3IuX3NlbGYuZW1pdCgnc2V0dGxlZCcpOwogICAgfTsKICAgIHRoaXMuY2F0Y2ggPSBmdW5jdGlvbihmdW5jKQogICAgewogICAgICAgIHRoaXMuX2ludGVybmFsLm9uY2UoJ3JlamVjdGVkJywgZXZlbnRfc3dpdGNoZXIodGhpcywgZnVuYykuZnVuYyk7CiAgICB9CiAgICB0aGlzLmZpbmFsbHkgPSBmdW5jdGlvbiAoZnVuYykKICAgIHsKICAgICAgICB0aGlzLl9pbnRlcm5hbC5vbmNlKCdzZXR0bGVkJywgZXZlbnRfc3dpdGNoZXIodGhpcywgZnVuYykuZnVuYyk7CiAgICB9OwogICAgdGhpcy50aGVuID0gZnVuY3Rpb24gKHJlc29sdmVkLCByZWplY3RlZCkKICAgIHsKICAgICAgICBpZiAocmVzb2x2ZWQpIHsgdGhpcy5faW50ZXJuYWwub25jZSgncmVzb2x2ZWQnLCBldmVudF9zd2l0Y2hlcih0aGlzLCByZXNvbHZlZCkuZnVuYyk7IH0KICAgICAgICBpZiAocmVqZWN0ZWQpIHsgdGhpcy5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCBldmVudF9zd2l0Y2hlcih0aGlzLCByZWplY3RlZCkuZnVuYyk7IH0KCiAgICAgICAgdmFyIHJldFZhbCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyLCBqKSB7IH0pOwogICAgICAgIHRoaXMuX2ludGVybmFsLm9uY2UoJ3Jlc29sdmVkJywgcmV0VmFsLl9pbnRlcm5hbC5yZXNvbHZlcik7CiAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgncmVqZWN0ZWQnLCByZXRWYWwuX2ludGVybmFsLnJlamVjdG9yKTsKICAgICAgICByZXRWYWwucGFyZW50UHJvbWlzZSA9IHRoaXM7CiAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgfTsKCiAgICB0aGlzLl9pbnRlcm5hbC5yZXNvbHZlci5fc2VsZiA9IHRoaXMuX2ludGVybmFsOwogICAgdGhpcy5faW50ZXJuYWwucmVqZWN0b3IuX3NlbGYgPSB0aGlzLl9pbnRlcm5hbDs7CgogICAgdHJ5CiAgICB7CiAgICAgICAgcHJvbWlzZUZ1bmMuY2FsbCh0aGlzLCB0aGlzLl9pbnRlcm5hbC5yZXNvbHZlciwgdGhpcy5faW50ZXJuYWwucmVqZWN0b3IpOwogICAgfQogICAgY2F0Y2goZSkKICAgIHsKICAgICAgICB0aGlzLl9pbnRlcm5hbC5lcnJvcnMgPSB0cnVlOwogICAgICAgIHRoaXMuX2ludGVybmFsLmNvbXBsZXRlZCA9IHRydWU7CiAgICAgICAgdGhpcy5faW50ZXJuYWwuY29tcGxldGVkQXJncyA9IFtlXTsKICAgICAgICB0aGlzLl9pbnRlcm5hbC5lbWl0KCdyZWplY3RlZCcsIGUpOwogICAgICAgIHRoaXMuX2ludGVybmFsLmVtaXQoJ3NldHRsZWQnKTsKICAgIH0KCiAgICBpZighdGhpcy5faW50ZXJuYWwuY29tcGxldGVkKQogICAgewogICAgICAgIC8vIFNhdmUgcmVmZXJlbmNlIG9mIHRoaXMgb2JqZWN0CiAgICAgICAgcmVmVGFibGVbdGhpcy5faW50ZXJuYWwuX2hhc2hDb2RlKCldID0gdGhpcy5faW50ZXJuYWw7CiAgICAgICAgdGhpcy5faW50ZXJuYWwub25jZSgnc2V0dGxlZCcsIGZ1bmN0aW9uICgpIHsgcmVmVGFibGVbdGhpcy5faGFzaENvZGUoKV0gPSBudWxsOyB9KTsKICAgIH0KfQoKUHJvbWlzZS5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSgpCnsKICAgIHZhciByZXRWYWwgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAociwgaikgeyB9KTsKICAgIHZhciBhcmdzID0gW107CiAgICBmb3IgKHZhciBpIGluIGFyZ3VtZW50cykKICAgIHsKICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTsKICAgIH0KICAgIHJldFZhbC5faW50ZXJuYWwucmVzb2x2ZXIuYXBwbHkocmV0VmFsLl9pbnRlcm5hbCwgYXJncyk7CiAgICByZXR1cm4gKHJldFZhbCk7Cn07ClByb21pc2UucmVqZWN0ID0gZnVuY3Rpb24gcmVqZWN0KCkgewogICAgdmFyIHJldFZhbCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyLCBqKSB7IH0pOwogICAgdmFyIGFyZ3MgPSBbXTsKICAgIGZvciAodmFyIGkgaW4gYXJndW1lbnRzKSB7CiAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7CiAgICB9CiAgICByZXRWYWwuX2ludGVybmFsLnJlamVjdG9yLmFwcGx5KHJldFZhbC5faW50ZXJuYWwsIGFyZ3MpOwogICAgcmV0dXJuIChyZXRWYWwpOwp9OwpQcm9taXNlLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlTGlzdCkKewogICAgdmFyIHJldCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikKICAgIHsKICAgICAgICB0aGlzLl9fcmVqZWN0b3IgPSByZWo7CiAgICAgICAgdGhpcy5fX3Jlc29sdmVyID0gcmVzOwogICAgICAgIHRoaXMuX19wcm9taXNlTGlzdCA9IHByb21pc2VMaXN0OwogICAgICAgIHRoaXMuX19kb25lID0gZmFsc2U7CiAgICAgICAgdGhpcy5fX2NvdW50ID0gMDsKICAgIH0pOwoKICAgIGZvciAodmFyIGkgaW4gcHJvbWlzZUxpc3QpCiAgICB7CiAgICAgICAgcHJvbWlzZUxpc3RbaV0udGhlbihmdW5jdGlvbiAoKQogICAgICAgIHsKICAgICAgICAgICAgLy8gU3VjY2VzcwogICAgICAgICAgICBpZigrK3JldC5fX2NvdW50ID09IHJldC5fX3Byb21pc2VMaXN0Lmxlbmd0aCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0Ll9fZG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICByZXQuX19yZXNvbHZlcihyZXQuX19wcm9taXNlTGlzdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LCBmdW5jdGlvbiAoYXJnKQogICAgICAgIHsKICAgICAgICAgICAgLy8gRmFpbHVyZQogICAgICAgICAgICBpZighcmV0Ll9fZG9uZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0Ll9fZG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICByZXQuX19yZWplY3RvcihhcmcpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CiAgICBpZiAocHJvbWlzZUxpc3QubGVuZ3RoID09IDApCiAgICB7CiAgICAgICAgcmV0Ll9fcmVzb2x2ZXIocHJvbWlzZUxpc3QpOwogICAgfQogICAgcmV0dXJuIChyZXQpOwp9OwoKbW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlOw==', 'base64').toString());"); diff --git a/modules/clipboard.js b/modules/clipboard.js index 6ad0864..5564a4c 100644 --- a/modules/clipboard.js +++ b/modules/clipboard.js @@ -6,6 +6,33 @@ function nativeAddModule(name) module.exports(ret); } + +function win_readtext() +{ + var ret = ''; + var CF_TEXT = 1; + var GM = require('_GenericMarshal'); + var user32 = GM.CreateNativeProxy('user32.dll'); + var kernel32 = GM.CreateNativeProxy('kernel32.dll'); + kernel32.CreateMethod('GlobalAlloc'); + kernel32.CreateMethod('GlobalLock'); + kernel32.CreateMethod('GlobalUnlock'); + user32.CreateMethod('OpenClipboard'); + user32.CreateMethod('CloseClipboard'); + user32.CreateMethod('GetClipboardData'); + + user32.OpenClipboard(0); + var h = user32.GetClipboardData(CF_TEXT); + if(h.Val!=0) + { + var hbuffer = kernel32.GlobalLock(h); + ret = hbuffer.String; + kernel32.GlobalUnlock(h); + } + user32.CloseClipboard(); + return (ret); +} + function win_copytext(txt) { var GMEM_MOVEABLE = 0x0002; @@ -41,6 +68,7 @@ switch(process.platform) { case 'win32': module.exports = win_copytext; + module.exports.read = win_readtext; break; case 'linux': break;