struct s_attributes *p_object_setup(struct s_object *object, struct s_method *virtual_table, struct s_attributes *attributes) { struct s_virtual_table *node; if ((node = (struct s_virtual_table *) d_malloc(sizeof(struct s_virtual_table)))) { node->virtual_table = virtual_table; node->type = attributes->type; f_list_append(&(object->virtual_tables), (struct s_list_node *)node, e_list_insert_head); f_list_append(&(object->attributes), (struct s_list_node *)attributes, e_list_insert_head); } else d_die(d_error_malloc); return attributes; }
struct s_list *f_keys_initialize(struct s_list *supplied, const char *file, char separator) { struct s_list *result = supplied; struct s_keys_entry *entry; char buffer[d_string_buffer_size], *pointer; FILE *stream; if (!result) f_list_init(&result); if ((stream = fopen(file, "r"))) { while (!feof(stream)) { memset(buffer, 0, d_string_buffer_size); if (fgets(buffer, d_string_buffer_size, stream)) if ((pointer = strchr(buffer, separator))) { *pointer = '\0'; pointer++; f_string_trim(buffer); f_string_trim(pointer); if ((f_string_strlen(buffer) > 0) && (f_string_strlen(pointer) > 0)) if ((entry = (struct s_keys_entry *) d_malloc(sizeof(struct s_keys_entry)))) { strncpy(entry->key, buffer, d_string_buffer_size); strncpy(entry->value, pointer, d_string_buffer_size); f_list_append(result, (struct s_list_node *)entry, e_list_insert_head); } } } fclose(stream); } return result; }
d_define_method(emitter, record)(struct s_object *self, const char *id) { d_using(emitter); struct s_signal *signal; if ((signal = (struct s_signal *) d_malloc(sizeof(struct s_signal)))) { strncpy(signal->id, id, (d_emitter_name_size-1)); f_list_append(emitter_attributes->signals, (struct s_list_node *)signal, e_list_insert_head); } return (void *)signal; }
d_define_method(container, add_drawable)(struct s_object *self, struct s_object *drawable, double position_x, double position_y) { d_using(container); struct s_container_drawable *current_container; if ((current_container = (struct s_container_drawable *)d_malloc(sizeof(struct s_container_drawable)))) { current_container->drawable = d_retain(drawable); current_container->position_x = position_x; current_container->position_y = position_y; f_list_append(&(container_attributes->entries), (struct s_list_node *)current_container, e_list_insert_tail); } else d_die(d_error_malloc); return self; }
d_define_method(environment, add_eventable)(struct s_object *self, struct s_object *eventable) { d_using(environment); f_list_append(&(environment_attributes->eventable), (struct s_list_node *)eventable, e_list_insert_head); return eventable; }
d_define_method(environment, add_drawable)(struct s_object *self, struct s_object *drawable, int layer, enum e_environment_surfaces surface) { d_using(environment); f_list_append(&(environment_attributes->drawable[surface][layer]), (struct s_list_node *)drawable, e_list_insert_head); return drawable; }