2 * Create dynamic new structures of various types
3 * and some utils in that trend.
5 * Copyright 1998 Bertho A. Stultiens
19 /* Generate new_* functions that have no parameters (NOTE: no ';') */
20 __NEW_STRUCT_FUNC(dialog
)
21 __NEW_STRUCT_FUNC(dialogex
)
22 __NEW_STRUCT_FUNC(name_id
)
23 __NEW_STRUCT_FUNC(menu
)
24 __NEW_STRUCT_FUNC(menuex
)
25 __NEW_STRUCT_FUNC(menu_item
)
26 __NEW_STRUCT_FUNC(menuex_item
)
27 __NEW_STRUCT_FUNC(control
)
28 __NEW_STRUCT_FUNC(icon
)
29 __NEW_STRUCT_FUNC(cursor
)
30 __NEW_STRUCT_FUNC(versioninfo
)
31 __NEW_STRUCT_FUNC(ver_value
)
32 __NEW_STRUCT_FUNC(ver_block
)
33 __NEW_STRUCT_FUNC(stt_entry
)
34 __NEW_STRUCT_FUNC(accelerator
)
35 __NEW_STRUCT_FUNC(event
)
36 __NEW_STRUCT_FUNC(raw_data
)
37 __NEW_STRUCT_FUNC(lvc
)
38 __NEW_STRUCT_FUNC(res_count
)
39 __NEW_STRUCT_FUNC(string
)
40 __NEW_STRUCT_FUNC(toolbar_item
)
42 /* New instances for all types of structures */
43 /* Very inefficient (in size), but very functional :-]
44 * Especially for type-checking.
46 resource_t
*new_resource(enum res_e t
, void *res
, int memopt
, language_t
*lan
)
48 resource_t
*r
= (resource_t
*)xmalloc(sizeof(resource_t
));
56 version_t
*new_version(DWORD v
)
58 version_t
*vp
= (version_t
*)xmalloc(sizeof(version_t
));
63 characts_t
*new_characts(DWORD c
)
65 characts_t
*cp
= (characts_t
*)xmalloc(sizeof(characts_t
));
70 language_t
*new_language(int id
, int sub
)
72 language_t
*lan
= (language_t
*)xmalloc(sizeof(language_t
));
78 language_t
*dup_language(language_t
*l
)
81 return new_language(l
->id
, l
->sub
);
84 version_t
*dup_version(version_t
*v
)
87 return new_version(*v
);
90 characts_t
*dup_characts(characts_t
*c
)
93 return new_characts(*c
);
96 rcdata_t
*new_rcdata(raw_data_t
*rd
, int *memopt
)
98 rcdata_t
*rc
= (rcdata_t
*)xmalloc(sizeof(rcdata_t
));
102 rc
->memopt
= *memopt
;
106 rc
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
;
110 font_id_t
*new_font_id(int size
, string_t
*face
, int weight
, int italic
)
112 font_id_t
*fid
= (font_id_t
*)xmalloc(sizeof(font_id_t
));
115 fid
->weight
= weight
;
116 fid
->italic
= italic
;
120 user_t
*new_user(name_id_t
*type
, raw_data_t
*rd
, int *memopt
)
122 user_t
*usr
= (user_t
*)xmalloc(sizeof(user_t
));
126 usr
->memopt
= *memopt
;
130 usr
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
;
135 font_t
*new_font(raw_data_t
*rd
, int *memopt
)
137 font_t
*fnt
= (font_t
*)xmalloc(sizeof(font_t
));
141 fnt
->memopt
= *memopt
;
145 fnt
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
;
149 icon_group_t
*new_icon_group(raw_data_t
*rd
, int *memopt
)
151 icon_group_t
*icog
= (icon_group_t
*)xmalloc(sizeof(icon_group_t
));
154 icog
->memopt
= *memopt
;
158 icog
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
| WRC_MO_DISCARDABLE
;
159 icog
->lvc
.language
= dup_language(currentlanguage
);
160 split_icons(rd
, icog
, &(icog
->nicon
));
166 cursor_group_t
*new_cursor_group(raw_data_t
*rd
, int *memopt
)
168 cursor_group_t
*curg
= (cursor_group_t
*)xmalloc(sizeof(cursor_group_t
));
171 curg
->memopt
= *memopt
;
175 curg
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
| WRC_MO_DISCARDABLE
;
176 curg
->lvc
.language
= dup_language(currentlanguage
);
177 split_cursors(rd
, curg
, &(curg
->ncursor
));
183 bitmap_t
*new_bitmap(raw_data_t
*rd
, int *memopt
)
185 bitmap_t
*bmp
= (bitmap_t
*)xmalloc(sizeof(bitmap_t
));
189 bmp
->memopt
= *memopt
;
193 bmp
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
;
197 ver_words_t
*new_ver_words(int i
)
199 ver_words_t
*w
= (ver_words_t
*)xmalloc(sizeof(ver_words_t
));
200 w
->words
= (WORD
*)xmalloc(sizeof(WORD
));
201 w
->words
[0] = (WORD
)i
;
206 ver_words_t
*add_ver_words(ver_words_t
*w
, int i
)
208 w
->words
= (WORD
*)xrealloc(w
->words
, (w
->nwords
+1) * sizeof(WORD
));
209 w
->words
[w
->nwords
] = (WORD
)i
;
214 messagetable_t
*new_messagetable(raw_data_t
*rd
)
216 messagetable_t
*msg
= (messagetable_t
*)xmalloc(sizeof(messagetable_t
));
221 void copy_raw_data(raw_data_t
*dst
, raw_data_t
*src
, int offs
, int len
)
223 assert(offs
<= src
->size
);
224 assert(offs
+ len
<= src
->size
);
227 dst
->data
= (char *)xmalloc(len
);
231 dst
->data
= (char *)xrealloc(dst
->data
, dst
->size
+ len
);
232 /* dst->size holds the offset to copy to */
233 memcpy(dst
->data
+ dst
->size
, src
->data
+ offs
, len
);
239 int *ip
= (int *)xmalloc(sizeof(int));
244 stringtable_t
*new_stringtable(lvc_t
*lvc
)
246 stringtable_t
*stt
= (stringtable_t
*)xmalloc(sizeof(stringtable_t
));
254 toolbar_t
*new_toolbar(int button_width
, int button_height
, toolbar_item_t
*items
, int nitems
)
256 toolbar_t
*tb
= (toolbar_t
*)xmalloc(sizeof(toolbar_t
));
257 tb
->button_width
= button_width
;
258 tb
->button_height
= button_height
;