Mercurial > repos > rhope
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 } |