nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: nuclear@0: void proc_osg_node(const char *node_type, json_t *node, int level); nuclear@0: void proc_geometry(json_t *node, int level); nuclear@0: void proc_primitive(json_t *prim, int level); nuclear@0: json_t *find_node(json_t *node, const char *key); nuclear@0: nuclear@0: int main(int argc, char **argv) nuclear@0: { nuclear@0: FILE *fp = stdin; nuclear@0: json_t *root, *osgnode; nuclear@0: json_error_t err; nuclear@0: nuclear@0: if(argc > 1) { nuclear@0: if(!(fp = fopen(argv[1], "r"))) { nuclear@0: fprintf(stderr, "failed to open osgjs file: %s: %s\n", argv[1], strerror(errno)); nuclear@0: return 1; nuclear@0: } nuclear@0: } nuclear@0: nuclear@0: if(!(root = json_loadf(fp, 0, &err))) { nuclear@0: fprintf(stderr, "json parsing error at %d:%d: %s\n", err.line, err.column, err.text); nuclear@0: return 1; nuclear@0: } nuclear@0: if(!json_is_object(root)) { nuclear@0: fprintf(stderr, "root node is not an object!\n"); nuclear@0: return 1; nuclear@0: } nuclear@0: if(!(osgnode = json_object_get(root, "osg.Node"))) { nuclear@0: fprintf(stderr, "root doesn't have an osg.Node field!\n"); nuclear@0: return 1; nuclear@0: } nuclear@0: proc_osg_node("osg.Node", osgnode, 0); nuclear@0: nuclear@0: json_decref(root); nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: void indent(int n) nuclear@0: { nuclear@0: while(n--) { nuclear@0: putchar(' '); nuclear@0: } nuclear@0: } nuclear@0: nuclear@0: void proc_osg_node(const char *node_type, json_t *node, int level) nuclear@0: { nuclear@0: json_t *children, *name_field; nuclear@0: const char *name = 0; nuclear@0: nuclear@0: if((name_field = json_object_get(node, "Name"))) { nuclear@0: if(json_is_string(name_field)) { nuclear@0: name = json_string_value(name_field); nuclear@0: } nuclear@0: } nuclear@0: nuclear@0: indent(level); nuclear@0: printf("%s: %s\n", node_type, name ? name : ""); nuclear@0: nuclear@0: if(strcmp(node_type, "osg.Geometry") == 0) { nuclear@0: proc_geometry(node, level); nuclear@0: } nuclear@0: nuclear@0: if((children = json_object_get(node, "Children")) && json_is_array(children)) { nuclear@0: int i, num = json_array_size(children); nuclear@0: nuclear@0: for(i=0; i