173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org/*
273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org * Copyright 2013 Google Inc.
373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org *
473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org * Use of this source code is governed by a BSD-style license that can be
573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org * found in the LICENSE file.
673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org */
773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org
873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org#include "SkLua.h"
973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org#include "SkGraphics.h"
1073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org#include "SkStream.h"
1173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org#include "SkData.h"
1273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org#include "SkOSFile.h"
1373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org
1473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgextern "C" {
1573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org    #include "lua.h"
1673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org    #include "lualib.h"
1773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org    #include "lauxlib.h"
1873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org}
1973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org
2073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic SkData* read_into_data(const char file[]) {
219594da111dc1c36c1912eb61207aaa54c17ea550reed    SkData* data = SkData::NewFromFileName(file);
229594da111dc1c36c1912eb61207aaa54c17ea550reed    if (!data) {
239594da111dc1c36c1912eb61207aaa54c17ea550reed        data = SkData::NewEmpty();
2473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org    }
259594da111dc1c36c1912eb61207aaa54c17ea550reed    return data;
2673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org}
2773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org
2873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgint tool_main(int argc, char** argv);
2973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgint tool_main(int argc, char** argv) {
3073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org    SkAutoGraphics ag;
3173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org    SkLua L;
3273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org
3373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org    for (int i = 1; i < argc; ++i) {
3473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org        SkData* data = NULL;
3573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org        const void* ptr;
3673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org        size_t len;
3773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org
3873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org        if (!strcmp(argv[i], "--lua") && i < argc-1) {
3973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org            ptr = argv[i + 1];
4073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org            len = strlen(argv[i + 1]);
4173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org            i += 1;
4273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org        } else {
4373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org            data = read_into_data(argv[i]);
4473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org            ptr = data->data();
4573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org            len = data->size();
4673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org        }
4773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org        if (!L.runCode(ptr, len)) {
4873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org            SkDebugf("failed to load %s\n", argv[i]);
4973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org            exit(-1);
5073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org        }
5173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org        SkSafeUnref(data);
5273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org    }
5373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org    return 0;
5473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org}
5573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org
5673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org#if !defined SK_BUILD_FOR_IOS
5773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgint main(int argc, char * const argv[]) {
5873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org    return tool_main(argc, (char**) argv);
5973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org}
6073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org#endif
61