void xmlnode_addatt(struct xmlnode *node, char *att, char *attval) { struct keyval *kv; kv = keyval_create(); keyval_setkey(kv, att); keyval_setval(kv, attval); plist_push(node->attributes, kv); }
int main(void) { bool ret = true; plist *cells = NULL; window *win = NULL; /* initialize random number generator */ srand(time(NULL)); /* initialize opengl window */ win = window_init("brownian tree", WINDOW_W, WINDOW_H, 32); if (win == NULL) { fprintf(stderr, "FATAL: %s\n", strerror(errno)); ret = false; goto cleanup; } else { win->refresh = update_screen; } /* initialize opengl stuff */ glPointSize(POINTSIZE); glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); glfwSetWindowSizeCallback(win->enable2d); win->enable2d(WINDOW_W, WINDOW_H); /* initialize cells list */ cells = plist_init(particle_init()); for (int i = 0; i < FREE_CELLS_NUMBER; i++) { particle *pt = particle_init(); if (pt == NULL) { fprintf(stderr, "FATAL: %s\n", strerror(errno)); ret = false; goto cleanup; } pt->x = (GLfloat) randint((WINDOW_W - 1)); pt->y = (GLfloat) randint((WINDOW_H - 1)); if (!plist_push(cells, pt)) { fprintf(stderr, "FATAL: %s\n", strerror(errno)); ret = false; goto cleanup; } } /* initialize 2D grid */ for (int y = 0; y < WINDOW_H; y++) { for (int x = 0; x < WINDOW_W; x++) { grid[y][x] = CELL_EMPTY; } } /* initialize random freezed cells */ for (int i = 0; i < FREEZED_CELLS_NUMBER; i++) { int y = randint(WINDOW_H - 1); int x = (i * (WINDOW_W / FREEZED_CELLS_NUMBER)) + (FREEZED_CELLS_NUMBER / 2); grid[y][x] = CELL_FREEZED; } /* main loop */ do { win->clear(); win->refresh(win, &cells); move_cells(&cells); } while ( glfwGetKey(GLFW_KEY_ESC) != GLFW_PRESS && glfwGetWindowParam(GLFW_OPENED) ); goto cleanup; cleanup: /* free resources */ if (cells != NULL) plist_free(cells); if (win != NULL) { window_quit(); window_free(win); } /* exit error */ if (!ret) return EXIT_FAILURE; return EXIT_SUCCESS; }
void xmlnode_addchild(struct xmlnode *parent, struct xmlnode *child) { plist_push(parent->childs, child); }