2 * Create dynamic new structures of various types
3 * and some utils in that trend.
5 * Copyright 1998 Bertho A. Stultiens
22 /* Generate new_* functions that have no parameters (NOTE: no ';') */
23 __NEW_STRUCT_FUNC(dialog
)
24 __NEW_STRUCT_FUNC(dialogex
)
25 __NEW_STRUCT_FUNC(name_id
)
26 __NEW_STRUCT_FUNC(menu
)
27 __NEW_STRUCT_FUNC(menuex
)
28 __NEW_STRUCT_FUNC(menu_item
)
29 __NEW_STRUCT_FUNC(menuex_item
)
30 __NEW_STRUCT_FUNC(control
)
31 __NEW_STRUCT_FUNC(icon
)
32 __NEW_STRUCT_FUNC(cursor
)
33 __NEW_STRUCT_FUNC(versioninfo
)
34 __NEW_STRUCT_FUNC(ver_value
)
35 __NEW_STRUCT_FUNC(ver_block
)
36 __NEW_STRUCT_FUNC(stt_entry
)
37 __NEW_STRUCT_FUNC(accelerator
)
38 __NEW_STRUCT_FUNC(event
)
39 __NEW_STRUCT_FUNC(raw_data
)
40 __NEW_STRUCT_FUNC(lvc
)
41 __NEW_STRUCT_FUNC(res_count
)
42 __NEW_STRUCT_FUNC(string
)
43 __NEW_STRUCT_FUNC(toolbar_item
)
45 /* New instances for all types of structures */
46 /* Very inefficient (in size), but very functional :-]
47 * Especially for type-checking.
49 resource_t
*new_resource(enum res_e t
, void *res
, int memopt
, language_t
*lan
)
51 resource_t
*r
= (resource_t
*)xmalloc(sizeof(resource_t
));
59 version_t
*new_version(DWORD v
)
61 version_t
*vp
= (version_t
*)xmalloc(sizeof(version_t
));
66 characts_t
*new_characts(DWORD c
)
68 characts_t
*cp
= (characts_t
*)xmalloc(sizeof(characts_t
));
73 language_t
*new_language(int id
, int sub
)
75 language_t
*lan
= (language_t
*)xmalloc(sizeof(language_t
));
81 language_t
*dup_language(language_t
*l
)
84 return new_language(l
->id
, l
->sub
);
87 version_t
*dup_version(version_t
*v
)
90 return new_version(*v
);
93 characts_t
*dup_characts(characts_t
*c
)
96 return new_characts(*c
);
99 rcdata_t
*new_rcdata(raw_data_t
*rd
, int *memopt
)
101 rcdata_t
*rc
= (rcdata_t
*)xmalloc(sizeof(rcdata_t
));
105 rc
->memopt
= *memopt
;
109 rc
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
;
113 font_id_t
*new_font_id(int size
, string_t
*face
, int weight
, int italic
)
115 font_id_t
*fid
= (font_id_t
*)xmalloc(sizeof(font_id_t
));
118 fid
->weight
= weight
;
119 fid
->italic
= italic
;
123 user_t
*new_user(name_id_t
*type
, raw_data_t
*rd
, int *memopt
)
125 user_t
*usr
= (user_t
*)xmalloc(sizeof(user_t
));
129 usr
->memopt
= *memopt
;
133 usr
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
;
138 font_t
*new_font(raw_data_t
*rd
, int *memopt
)
140 font_t
*fnt
= (font_t
*)xmalloc(sizeof(font_t
));
144 fnt
->memopt
= *memopt
;
148 fnt
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
;
152 icon_group_t
*new_icon_group(raw_data_t
*rd
, int *memopt
)
154 icon_group_t
*icog
= (icon_group_t
*)xmalloc(sizeof(icon_group_t
));
157 icog
->memopt
= *memopt
;
161 icog
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
| WRC_MO_DISCARDABLE
;
162 icog
->lvc
.language
= dup_language(currentlanguage
);
163 split_icons(rd
, icog
, &(icog
->nicon
));
169 cursor_group_t
*new_cursor_group(raw_data_t
*rd
, int *memopt
)
171 cursor_group_t
*curg
= (cursor_group_t
*)xmalloc(sizeof(cursor_group_t
));
174 curg
->memopt
= *memopt
;
178 curg
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
| WRC_MO_DISCARDABLE
;
179 curg
->lvc
.language
= dup_language(currentlanguage
);
180 split_cursors(rd
, curg
, &(curg
->ncursor
));
186 bitmap_t
*new_bitmap(raw_data_t
*rd
, int *memopt
)
188 bitmap_t
*bmp
= (bitmap_t
*)xmalloc(sizeof(bitmap_t
));
192 bmp
->memopt
= *memopt
;
196 bmp
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
;
200 ver_words_t
*new_ver_words(int i
)
202 ver_words_t
*w
= (ver_words_t
*)xmalloc(sizeof(ver_words_t
));
203 w
->words
= (WORD
*)xmalloc(sizeof(WORD
));
204 w
->words
[0] = (WORD
)i
;
209 ver_words_t
*add_ver_words(ver_words_t
*w
, int i
)
211 w
->words
= (WORD
*)xrealloc(w
->words
, (w
->nwords
+1) * sizeof(WORD
));
212 w
->words
[w
->nwords
] = (WORD
)i
;
217 messagetable_t
*new_messagetable(raw_data_t
*rd
)
219 messagetable_t
*msg
= (messagetable_t
*)xmalloc(sizeof(messagetable_t
));
224 void copy_raw_data(raw_data_t
*dst
, raw_data_t
*src
, int offs
, int len
)
226 assert(offs
<= src
->size
);
227 assert(offs
+ len
<= src
->size
);
230 dst
->data
= (char *)xmalloc(len
);
234 dst
->data
= (char *)xrealloc(dst
->data
, dst
->size
+ len
);
235 /* dst->size holds the offset to copy to */
236 memcpy(dst
->data
+ dst
->size
, src
->data
+ offs
, len
);
242 int *ip
= (int *)xmalloc(sizeof(int));
247 stringtable_t
*new_stringtable(lvc_t
*lvc
)
249 stringtable_t
*stt
= (stringtable_t
*)xmalloc(sizeof(stringtable_t
));
257 toolbar_t
*new_toolbar(int button_width
, int button_height
, toolbar_item_t
*items
, int nitems
)
259 toolbar_t
*tb
= (toolbar_t
*)xmalloc(sizeof(toolbar_t
));
260 tb
->button_width
= button_width
;
261 tb
->button_height
= button_height
;
267 dlginit_t
*new_dlginit(raw_data_t
*rd
, int *memopt
)
269 dlginit_t
*di
= (dlginit_t
*)xmalloc(sizeof(dlginit_t
));
273 di
->memopt
= *memopt
;
277 di
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
| WRC_MO_DISCARDABLE
;
282 style_pair_t
*new_style_pair(style_t
*style
, style_t
*exstyle
)
284 style_pair_t
*sp
= (style_pair_t
*)xmalloc(sizeof(style_pair_t
));
286 sp
->exstyle
= exstyle
;
290 style_t
*new_style(DWORD or_mask
, DWORD and_mask
)
292 style_t
*st
= (style_t
*)xmalloc(sizeof(style_t
));
293 st
->or_mask
= or_mask
;
294 st
->and_mask
= and_mask
;