Mercurial > repos > rhope
diff blueprint.c @ 0:76568becd6d6
Rhope Alpha 2a source import
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 28 Apr 2009 23:06:07 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/blueprint.c Tue Apr 28 23:06:07 2009 +0000 @@ -0,0 +1,119 @@ +#include "datum.h" +#include "structs.h" +#include "parser.h" +#include "interp.h" + +int vis_blueprint_new(datum ** params, queue_entry * entry) +{ + company * comp = create_company(entry->instance->def->program, params[0]->c.generic.data, 0, 0, TRUE); + release_ref(params[0]); + params[0] = new_datum(BUILTIN_TYPE_BLUEPRINT, 2, 0, entry->instance->def->program); + params[0]->c.generic.data = comp; + return 0; +} + +int vis_blueprint_addfield(datum ** params, queue_entry * entry) +{ + company * comp = params[0]->c.generic.data; + char * type_name = params[2]->c.generic.data; + int type; + switch(type_name[0]) + { + case 'B': + if(strcmp(type_name, "Byte")) + type = ROOM_VIS_REF; + else + type = ROOM_BYTE; + break; + case 'W': + if(strcmp(type_name, "Word")) + type = ROOM_VIS_REF; + else + type = ROOM_SHORT; + break; + case 'L': + if(strcmp(type_name, "Long")) + type = ROOM_VIS_REF; + else + type = ROOM_LONG; + break; + case 'D': + if(strcmp(type_name, "Double")) + type = ROOM_VIS_REF; + else + type = ROOM_DOUBLE; + break; + case 'S': + if(strcmp(type_name, "Single")) + type = ROOM_VIS_REF; + else + type = ROOM_SINGLE; + break; + default: + type = ROOM_VIS_REF; + break; + } + add_comp_room(comp, params[1]->c.generic.data, -1, -1, type, type); + release_ref(params[1]); + release_ref(params[2]); + return 0; +} + +int vis_blueprint_name(datum ** params, queue_entry * entry) +{ + company * comp = params[0]->c.generic.data; + release_ref(params[0]); + params[0] = make_string(comp->name, -1, entry->instance->def->program); + return 0; +} + +int vis_blueprint_getfields(datum ** params, queue_entry * entry) +{ + int i; + company * comp = params[0]->c.generic.data; + release_ref(params[0]); + params[0] = create_list(entry->instance->def->program); + for(i = 0; i < comp->num_rooms; ++i) + { + params[1] = make_string(comp->room_list[i].name, -1, entry->instance->def->program); + vis_list_append(params,entry); + } + return 0; +} + +int vis_get_blueprint(datum ** params, queue_entry * entry) +{ + company * comp = params[0]->company; + release_ref(params[0]); + params[0] = new_datum(BUILTIN_TYPE_BLUEPRINT, 2, 0, entry->instance->def->program); + params[0]->c.generic.data = comp; + return 0; +} + +int vis_get_field(datum ** params, queue_entry * entry) +{ + datum * name = params[1]; + int returnval = get_comp_room_by_name(params, name->c.generic.data, NULL, entry, entry->instance->def->program); + release_ref(name); + return returnval; +} + +int vis_set_field(datum ** params, queue_entry * entry) +{ + datum * name = params[1]; + int returnval; + params[1] = params[2]; + returnval = set_comp_room_by_name(params, name->c.generic.data, NULL, entry, entry->instance->def->program); + release_ref(name); + return returnval; +} + +int vis_program_newblueprint(datum ** params, queue_entry * entry) +{ + program * prog = params[0]->c.generic.data; + company * comp = create_company(prog, params[1]->c.generic.data, 0, 0, TRUE); + release_ref(params[1]); + params[1] = new_datum(BUILTIN_TYPE_BLUEPRINT, 2, 0, entry->instance->def->program); + params[1]->c.generic.data = comp; + return 0; +}