Example #1
0
static int obj_init(FILE *stream, int flags, void **ud)
{
    int rc = 0;

    struct obj_fdata *u = *ud = calloc(1, sizeof *u);
    struct obj *o = u->o = calloc(1, sizeof *o);

    u->flags = flags;

    if (flags & ASM_ASSEMBLE) {
        // TODO proper multiple-records support
        o->rec_count = 1;
        o->records = calloc(o->rec_count, sizeof *o->records);
        o->records->addr = 0;
        o->records->size = 1024;
        o->records->data = calloc(o->records->size, sizeof *o->records->data);
        u->curr_rec = o->records;

        u->next_sym = &o->symbols;
        u->next_rlc = &o->relocs;
    } else if (flags & ASM_DISASSEMBLE) {
        rc = obj_read(u->o, stream);
        u->curr_rec = o->records;
    }

    return rc;
}
Example #2
0
int edb_array_capacity(obj_handle *h, u32 *capacity) {
  LOG_HERE;
  int err = 0;
  u32 root;
  CHECK(obj_read(h, &root));
  *capacity = array_capacity(h->db, root);
  err: return err;
}
Example #3
0
int edb_array_length(obj_handle *h, u32 *length) {
  LOG_HERE;
  int err = 0;
  u32 root;
  CHECK(obj_read(h, &root));
  *length = array_length(h->db, root);
  err: return err;
}
Example #4
0
int edb_array_get(obj_handle *h, u32 index, void* data) {
  LOG_HERE;
  int err = 0;
  u32 root;
  CHECK(obj_read(h, &root));
  CHECK(array_get(h->db, root, index, data));
  err: return err;
}
Example #5
0
void	obj_load(t_env *env, char *file)
{
	int		fd;

	if ((fd = open(file, O_RDONLY)) == -1)
		ERROR("Failed to open file");
	env->obj.file = file;
	obj_read(&env->obj, fd);
	close(fd);
}
Example #6
0
static void gd_set_store_story(FILE *i, FILE *o)
{
    struct gd_val *obj;
    char *pk;
    int m;
    char *pks[] = { "topic_id", "id", NULL };

    obj = obj_read(i, o);
    pk = gd_pk_build(obj, pks, &m);

    if (m > 0) {
        struct gd_val *obj_t;

        gd_set_lock(stories, LOCK_RW);

        if (m == 1)
            pk = gd_pk_complete(stories->set, pk);

        if ((obj_t = gd_val_get(stories->set, pk)) != NULL) {
            /* dequeue story from indexes */
            /* ... */
        }

        stories->set = gd_val_set(stories->set, pk, obj);

        gd_set_lock(stories, UNLOCK_RW);

        if ((obj_t = gd_val_get(obj, "date")) != NULL) {
            char *s_date = obj_t->v->k;

            gd_set_lock(stories_by_date, LOCK_RW);

            if ((obj_t = gd_val_get_i(stories_by_date->set, s_date)) == NULL) {
                stories_by_date->set =
                    gd_val_set_i(stories_by_date->set, s_date,
                                gd_val_new(strdup(pk), NULL, NULL));
            }
            else {
                obj_t->v = gd_val_set_i(obj_t->v, strdup(pk), NULL);
            }

            gd_set_lock(stories_by_date, UNLOCK_RW);
        }

        fprintf(o, "OK %s story stored\n", pk);
    }
    else {
        fprintf(o, "ERROR story pk not found\n");
        free(pk);
        gd_val_free(obj);
    }
}
Example #7
0
File: tld.c Project: kulp/tenyr
static int do_load(struct link_state *s, FILE *in)
{
    int rc = 0;
    struct obj_list *node = calloc(1, sizeof *node);

    struct obj *o = calloc(1, sizeof *o);
    rc = obj_read(o, in);
    node->obj = o;
    node->i = s->obj_count++;
    // put the objects on the list in order
    node->next = NULL;
    *s->next_obj = node;
    s->next_obj = &node->next;

    return rc;
}
Example #8
0
/***************************************************************
 Load
 ***************************************************************/
static obj_ptr _load_imp(cptr file, obj_ptr env)
{
    port_ptr p;
    obj_ptr  o = NIL;

    p = port_open_input_file(file);
    while (!port_eof(p))
    {
        o = obj_read(p);
        if (ERRORP(o)) break;
        o = obj_eval(o, env);
        if (ERRORP(o)) break;
        port_skip_while(p, isspace);
    }

    if (ERRORP(o))
        error_add_file_info(o, port_name(p), port_line(p));

    port_close(p);
    return o;
}
Example #9
0
static void gd_set_store_v(struct gd_set *s, char **pks, int n, FILE *i, FILE *o)
{
    struct gd_val *obj;
    char *pk;
    int m;

    obj = obj_read(i, o);
    pk = gd_pk_build(obj, pks, &m);

    if (m >= n) {
        gd_set_lock(s, LOCK_RW);

        s->set = gd_val_set(s->set, pk, obj);

        gd_set_lock(s, UNLOCK_RW);

        fprintf(o, "OK %s stored\n", pk);
    }
    else {
        fprintf(o, "ERROR %s pk not found\n", s->name);
        free(pk);
        gd_val_free(obj);
    }
}
Example #10
0
static void gd_story_set(FILE *i, FILE *o)
{
    struct gd_val *obj;
    struct gd_val *p;
    int c, max;
    char *from, *to, *order;
    struct gd_val *order_s = NULL;

    c       = 0;
    max     = 0x7fffffff;
    from    = NULL;
    to      = NULL;
    order   = NULL;

    obj = obj_read(i, o);

    if ((p = gd_val_get(obj, "num")) != NULL) {
        sscanf(p->v->k, "%d", &max);
    }
    if ((p = gd_val_get(obj, "offset")) != NULL) {
        sscanf(p->v->k, "%d", &c);
        c *= -1;
    }
    if ((p = gd_val_get(obj, "from")) != NULL) {
        from = p->v->k;
    }
    if ((p = gd_val_get(obj, "to")) != NULL) {
        to = p->v->k;
    }
    if ((p = gd_val_get(obj, "order")) != NULL && strcmp(p->v->k, "date") != 0) {
        order = p->v->k;
    }

    gd_set_lock(stories_by_date, LOCK_RO);

    fprintf(o, "OK list follows\n");

    for (p = stories_by_date->set; c < max && p; p = p->n) {
        struct gd_val *sp;
        struct gd_val *story;

        if (from && strcmp(from, p->k) > 0)
            break;

        if (to && strcmp(to, p->k) < 0)
            continue;

        for (sp = p->v; c < max && sp; sp = sp->n, c++) {
            if (c >= 0) {
                if (order) {
                    struct gd_val *v;

                    gd_set_lock(stories, LOCK_RO);
                    story = gd_val_get(stories->set, sp->k);
                    gd_set_lock(stories, UNLOCK_RO);

                    if (story && (v = gd_val_get(story->v, order)) != NULL) {
                        order_s = gd_val_set_r(order_s, v->v->k, gd_val_new(sp->k, gd_val_new(p->k, NULL, NULL), NULL));
                    }
                    else
                        printf("no se\n");
                }
                else {
                    fprintf(o, "%s:%s\n", sp->k, p->k);
                }
            }
        }
    }

    if (order_s) {
        for (p = order_s; p; p = p->n) {
            fprintf(o, "%s:%s\n", p->v->k, p->v->v->k);
        }

        gd_val_free(order_s);
    }

    fprintf(o, ".\n");

    gd_set_lock(stories_by_date, UNLOCK_RO);

    gd_val_free(obj);
}
Example #11
0
int main(int argc, char *argv[])
{
    GLFWwindow* window;
    glfwSetErrorCallback(error_callback);
    glfwInit();
    window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL);
    glfwMakeContextCurrent(window);

    glewExperimental = GL_TRUE;
    glewInit();

    //glfwWindowHint(GLFW_SAMPLES, 0);    // 0x antialiasing
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);  // 设置OPENGL版本3.3
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    glfwSwapInterval(1);
    glfwSetKeyCallback(window, key_callback);
    glfwSetCursorPosCallback(window, cursorpos_callback);
    glfwSetMouseButtonCallback(window, mousebutton_callback);


    glClearColor(0,0,0,1);      // 清理屏幕为黑色
    glEnable(GL_CULL_FACE);     // 启用面剔除
    glCullFace(GL_BACK);

    glEnable(GL_DEPTH_TEST);    // 启用深度测试

    glEnable(GL_LIGHT0);        // 启用灯光0
    glEnable(GL_NORMALIZE);     // 启用法线
    glEnable(GL_COLOR_MATERIAL);// 启用材质模式
    glEnable(GL_LIGHTING);      // 打开灯光

    glEnable(GL_TEXTURE_2D);
    glEnable(GL_BLEND);
    glEnable(GL_ALPHA_TEST);
    glAlphaFunc(GL_GREATER ,0.9);//0.5可以换成任何在0~1之间的数
    glShadeModel(GL_SMOOTH);

    // 设置灯光的颜色
    const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
    const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
    const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
    const GLfloat light_position[] = { 0.0f, 3.0f, -5.0f, 0.0f };
    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);  // 设置环境光颜色
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);  // 设置漫反射的颜色
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);  // 设置镜面反射的颜色
    //glLightfv(GL_LIGHT0, GL_POSITION, light_position);  // 设置灯的位置

    // 设置材质的颜色
    const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
    const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
    const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
    const GLfloat high_shininess[] = { 100.0f };
    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);   // 设置环境光颜色
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);   // 设置漫反射的颜色
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);  // 设置镜面反射的颜色
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);// 镜面指数 该值越小,表示材质越粗糙,点光源发射的光线照射到上面,也可以产生较大的亮点

    obj_data_t* t = obj_create();
    obj_read("Data/panel.obj","Data/panel.mtl",t);
    obj_render_t* rt = obj_create_render(t);
    obj_render_dump(rt);

    float rx = -90.0f;
    float ry = 0.0f;

    while (!glfwWindowShouldClose(window))
    {
        int width, height;
        glfwGetFramebufferSize(window, &width, &height);
        float ratio = (float) width / (float) height;
        glViewport(0, 0, width, height);                // 把图像按照指定宽,高显示到屏幕上
        glMatrixMode(GL_PROJECTION);                    // 选择透视矩阵
        glLoadIdentity();                               // 重置矩阵
        glFrustum(-ratio, ratio, -1.0, 1.0, 2.0, 100.0);// 设置透视矩阵
        glMatrixMode(GL_MODELVIEW);                     // 选择模型矩阵
        glLoadIdentity();

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清理颜色和深度缓存
        //glTranslatef(0.0f ,0.0f, -3.0f);
        gluLookAt(0.0f,0.0f,-3.0f, 0.0f,0.0f,1.0f, 0.0f,1.0f,0.0);
        glLightfv(GL_LIGHT0, GL_POSITION, light_position);

        glRotatef(rx + g_roll_y, 1.0f, 0.0f, 0.0f);
        glRotatef(ry + g_roll_x, 0.0f, 1.0f, 0.0f);

        //======================================================================
        obj_render(rt);
        //======================================================================
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    obj_destory_data(t);
    obj_destory_render(rt);


    glfwDestroyWindow(window);
    glfwTerminate();
    return EXIT_SUCCESS;
}