comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:76568becd6d6
1 #include "datum.h"
2 #include "structs.h"
3 #include "parser.h"
4 #include "interp.h"
5
6 int vis_blueprint_new(datum ** params, queue_entry * entry)
7 {
8 company * comp = create_company(entry->instance->def->program, params[0]->c.generic.data, 0, 0, TRUE);
9 release_ref(params[0]);
10 params[0] = new_datum(BUILTIN_TYPE_BLUEPRINT, 2, 0, entry->instance->def->program);
11 params[0]->c.generic.data = comp;
12 return 0;
13 }
14
15 int vis_blueprint_addfield(datum ** params, queue_entry * entry)
16 {
17 company * comp = params[0]->c.generic.data;
18 char * type_name = params[2]->c.generic.data;
19 int type;
20 switch(type_name[0])
21 {
22 case 'B':
23 if(strcmp(type_name, "Byte"))
24 type = ROOM_VIS_REF;
25 else
26 type = ROOM_BYTE;
27 break;
28 case 'W':
29 if(strcmp(type_name, "Word"))
30 type = ROOM_VIS_REF;
31 else
32 type = ROOM_SHORT;
33 break;
34 case 'L':
35 if(strcmp(type_name, "Long"))
36 type = ROOM_VIS_REF;
37 else
38 type = ROOM_LONG;
39 break;
40 case 'D':
41 if(strcmp(type_name, "Double"))
42 type = ROOM_VIS_REF;
43 else
44 type = ROOM_DOUBLE;
45 break;
46 case 'S':
47 if(strcmp(type_name, "Single"))
48 type = ROOM_VIS_REF;
49 else
50 type = ROOM_SINGLE;
51 break;
52 default:
53 type = ROOM_VIS_REF;
54 break;
55 }
56 add_comp_room(comp, params[1]->c.generic.data, -1, -1, type, type);
57 release_ref(params[1]);
58 release_ref(params[2]);
59 return 0;
60 }
61
62 int vis_blueprint_name(datum ** params, queue_entry * entry)
63 {
64 company * comp = params[0]->c.generic.data;
65 release_ref(params[0]);
66 params[0] = make_string(comp->name, -1, entry->instance->def->program);
67 return 0;
68 }
69
70 int vis_blueprint_getfields(datum ** params, queue_entry * entry)
71 {
72 int i;
73 company * comp = params[0]->c.generic.data;
74 release_ref(params[0]);
75 params[0] = create_list(entry->instance->def->program);
76 for(i = 0; i < comp->num_rooms; ++i)
77 {
78 params[1] = make_string(comp->room_list[i].name, -1, entry->instance->def->program);
79 vis_list_append(params,entry);
80 }
81 return 0;
82 }
83
84 int vis_get_blueprint(datum ** params, queue_entry * entry)
85 {
86 company * comp = params[0]->company;
87 release_ref(params[0]);
88 params[0] = new_datum(BUILTIN_TYPE_BLUEPRINT, 2, 0, entry->instance->def->program);
89 params[0]->c.generic.data = comp;
90 return 0;
91 }
92
93 int vis_get_field(datum ** params, queue_entry * entry)
94 {
95 datum * name = params[1];
96 int returnval = get_comp_room_by_name(params, name->c.generic.data, NULL, entry, entry->instance->def->program);
97 release_ref(name);
98 return returnval;
99 }
100
101 int vis_set_field(datum ** params, queue_entry * entry)
102 {
103 datum * name = params[1];
104 int returnval;
105 params[1] = params[2];
106 returnval = set_comp_room_by_name(params, name->c.generic.data, NULL, entry, entry->instance->def->program);
107 release_ref(name);
108 return returnval;
109 }
110
111 int vis_program_newblueprint(datum ** params, queue_entry * entry)
112 {
113 program * prog = params[0]->c.generic.data;
114 company * comp = create_company(prog, params[1]->c.generic.data, 0, 0, TRUE);
115 release_ref(params[1]);
116 params[1] = new_datum(BUILTIN_TYPE_BLUEPRINT, 2, 0, entry->instance->def->program);
117 params[1]->c.generic.data = comp;
118 return 0;
119 }