1/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkLua.h"
9#include "SkGraphics.h"
10#include "SkStream.h"
11#include "SkData.h"
12#include "SkOSFile.h"
13
14extern "C" {
15    #include "lua.h"
16    #include "lualib.h"
17    #include "lauxlib.h"
18}
19
20static SkData* read_into_data(const char file[]) {
21    SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(file));
22    if (!stream.get()) {
23        return SkData::NewEmpty();
24    }
25    size_t len = stream->getLength();
26    void* buffer = sk_malloc_throw(len);
27    stream->read(buffer, len);
28    return SkData::NewFromMalloc(buffer, len);
29}
30
31int tool_main(int argc, char** argv);
32int tool_main(int argc, char** argv) {
33    SkAutoGraphics ag;
34    SkLua L;
35
36    for (int i = 1; i < argc; ++i) {
37        SkData* data = NULL;
38        const void* ptr;
39        size_t len;
40
41        if (!strcmp(argv[i], "--lua") && i < argc-1) {
42            ptr = argv[i + 1];
43            len = strlen(argv[i + 1]);
44            i += 1;
45        } else {
46            data = read_into_data(argv[i]);
47            ptr = data->data();
48            len = data->size();
49        }
50        if (!L.runCode(ptr, len)) {
51            SkDebugf("failed to load %s\n", argv[i]);
52            exit(-1);
53        }
54        SkSafeUnref(data);
55    }
56    return 0;
57}
58
59#if !defined SK_BUILD_FOR_IOS
60int main(int argc, char * const argv[]) {
61    return tool_main(argc, (char**) argv);
62}
63#endif
64