0
|
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 }
|