158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger/* 258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Copyright 2013 Google Inc. 358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * 458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * found in the LICENSE file. 658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */ 758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkLua.h" 958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkGraphics.h" 1058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkStream.h" 1158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkData.h" 1258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkOSFile.h" 1358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 1458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerextern "C" { 1558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger #include "lua.h" 1658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger #include "lualib.h" 1758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger #include "lauxlib.h" 1858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger} 1958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 2058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerstatic SkData* read_into_data(const char file[]) { 2158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(file)); 2258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (!stream.get()) { 2358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return SkData::NewEmpty(); 2458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 2558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger size_t len = stream->getLength(); 2658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger void* buffer = sk_malloc_throw(len); 2758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger stream->read(buffer, len); 2858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return SkData::NewFromMalloc(buffer, len); 2958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger} 3058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 3158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerint tool_main(int argc, char** argv); 3258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerint tool_main(int argc, char** argv) { 3358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkAutoGraphics ag; 3458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkLua L; 3558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 3658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger for (int i = 1; i < argc; ++i) { 3758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkData* data = NULL; 3858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger const void* ptr; 3958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger size_t len; 4058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 4158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (!strcmp(argv[i], "--lua") && i < argc-1) { 4258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger ptr = argv[i + 1]; 4358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger len = strlen(argv[i + 1]); 4458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger i += 1; 4558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } else { 4658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger data = read_into_data(argv[i]); 4758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger ptr = data->data(); 4858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger len = data->size(); 4958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 5058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (!L.runCode(ptr, len)) { 5158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkDebugf("failed to load %s\n", argv[i]); 5258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger exit(-1); 5358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 5458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkSafeUnref(data); 5558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 5658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return 0; 5758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger} 5858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 5958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#if !defined SK_BUILD_FOR_IOS 6058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerint main(int argc, char * const argv[]) { 6158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return tool_main(argc, (char**) argv); 6258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger} 6358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#endif 64