ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/libproto.h
(Generate patch)

Comparing deliantra/server/include/libproto.h (file contents):
Revision 1.77 by root, Fri Nov 6 12:27:05 2009 UTC vs.
Revision 1.105 by root, Wed Nov 14 06:21:39 2012 UTC

1/* 1/*
2 * This file is part of Deliantra, the Roguelike Realtime MMORPG. 2 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 * 3 *
4 * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team 4 * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
5 * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team 5 * Copyright (©) 2002 Mark Wedel & Crossfire Development Team
6 * Copyright (©) 1992,2007 Frank Tore Johansen 6 * Copyright (©) 1992 Frank Tore Johansen
7 * 7 *
8 * Deliantra is free software: you can redistribute it and/or modify it under 8 * Deliantra is free software: you can redistribute it and/or modify it under
9 * the terms of the Affero GNU General Public License as published by the 9 * the terms of the Affero GNU General Public License as published by the
10 * Free Software Foundation, either version 3 of the License, or (at your 10 * Free Software Foundation, either version 3 of the License, or (at your
11 * option) any later version. 11 * option) any later version.
12 * 12 *
13 * This program is distributed in the hope that it will be useful, 13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details. 16 * GNU General Public License for more details.
17 * 17 *
18 * You should have received a copy of the Affero GNU General Public License 18 * You should have received a copy of the Affero GNU General Public License
19 * and the GNU General Public License along with this program. If not, see 19 * and the GNU General Public License along with this program. If not, see
20 * <http://www.gnu.org/licenses/>. 20 * <http://www.gnu.org/licenses/>.
21 * 21 *
22 * The authors can be reached via e-mail to <support@deliantra.net> 22 * The authors can be reached via e-mail to <support@deliantra.net>
23 */ 23 */
24 24
25#ifndef LIBPROTO_H_ 25#ifndef LIBPROTO_H_
26#define LIBPROTO_H_ 26#define LIBPROTO_H_
27 27
28/* anim.c */ 28/* anim.c */
29extern void free_all_anim (); 29void free_all_anim ();
30extern void init_anim (); 30void init_anim ();
31extern int find_animation (const char *name);
32extern void animate_object (object *op, int dir); 31void animate_object (object *op, int dir);
33/* arch.c */ 32/* arch.c */
34extern archetype *find_archetype_by_object_name (const char *name); 33archetype *find_archetype_by_object_name (const char *name);
35extern archetype *find_archetype_by_object_type_name (int type, const char *name); 34archetype *find_archetype_by_object_type_name (int type, const char *name);
36extern object *get_archetype_by_skill_name (const char *skill, int type); 35object *get_archetype_by_skill_name (const char *skill, int type);
37extern archetype *get_archetype_by_type_subtype (int type, int subtype); 36archetype *get_archetype_by_type_subtype (int type, int subtype);
38extern object *get_archetype_by_object_name (const char *name); 37object *get_archetype_by_object_name (const char *name);
39extern object *find_best_weapon_used_match (object *pl, const char *params); 38object *find_best_weapon_used_match (object *pl, const char *params);
40extern int item_matched_string (object *pl, object *op, const char *name); 39int item_matched_string (object *pl, object *op, const char *name);
41extern void arch_info (object *op); 40void arch_info (object *op);
42extern void clear_archetable (); 41void clear_archetable ();
43extern void dump_arch (archetype *at); 42void dump_arch (archetype *at);
44extern void dump_all_archetypes (); 43void dump_all_archetypes ();
45extern void free_all_archs (); 44void free_all_archs ();
46extern void check_generators (); 45void check_generators ();
47extern bool load_archetype_file (const char *filename); 46bool load_archetype_file (const char *filename);
48extern object *get_archetype (const char *name);
49extern unsigned long hasharch (const char *str, int tablesize); 47unsigned long hasharch (const char *str, int tablesize);
50extern object *clone_arch (int type); 48object *clone_arch (int type);
51extern object *object_create_arch (archetype *at); 49object *object_create_arch (archetype *at);
52/* button.c */ 50/* button.c */
53extern void push_button (object *op, object *originator); 51void push_button (object *op, object *originator);
54extern void update_button (object *op, object *originator); 52void update_button (object *op, object *originator);
55extern void use_trigger (object *op, object *originator); 53void use_trigger (object *op, object *originator);
56extern void animate_turning (object *op); 54void animate_turning (object *op);
57extern int check_altar_sacrifice (object *altar, object *sacrifice, object *originator = 0); 55int check_altar_sacrifice (object *altar, object *sacrifice, object *originator = 0);
58extern int operate_altar (object *altar, object **sacrifice, object *originator = 0); 56int operate_altar (object *altar, object **sacrifice, object *originator = 0);
59extern int check_trigger (object *op, object *cause, object *originator = 0); 57int check_trigger (object *op, object *cause, object *originator = 0);
60extern int get_button_value (const object *button); 58int get_button_value (const object *button);
61extern void do_mood_floor (object *op, object *source = 0); 59void do_mood_floor (object *op, object *source = 0);
62extern object *check_inv_recursive (object *op, const object *trig); 60object *check_inv_recursive (object *op, const object *trig);
63extern void check_inv (object *op, object *trig); 61void check_inv (object *op, object *trig);
64extern void verify_button_links (const maptile *map); 62void verify_button_links (const maptile *map);
65/* exp.c */ 63/* exp.c */
64int exp_to_level (sint64 exp);
65sint64 level_to_min_exp (int level);
66extern int new_exp (const object *ob); 66int new_exp (const object *ob);
67extern void init_experience (); 67void _reload_exp_table ();
68extern void dump_experience ();
69/* friend.c */ 68/* friend.c */
70extern void add_friendly_object (object *op); 69void add_friendly_object (object *op);
71extern void remove_friendly_object (object *op); 70void remove_friendly_object (object *op);
72extern void dump_friendly_objects (); 71void dump_friendly_objects ();
73extern void clean_friendly_list (); 72void clean_friendly_list ();
74/* glue.c */
75extern void fatal (int err);
76/* holy.c */ 73/* holy.c */
77extern void init_gods (); 74void init_gods ();
78extern godlink *get_rand_god (); 75godlink *get_rand_god ();
79extern object *pntr_to_god_obj (godlink *godlnk); 76object *pntr_to_god_obj (godlink *godlnk);
80extern void dump_gods (); 77void dump_gods ();
81/* info.c */ 78/* info.c */
82extern void dump_abilities (); 79void dump_abilities ();
83extern void print_monsters (); 80void print_monsters ();
84extern void bitstostring (long bits, int num, char *str); 81void bitstostring (long bits, int num, char *str);
85/* image.c */ 82/* image.c */
86extern void ReadBmapNames (); 83void ReadBmapNames ();
87extern int FindFace (const char *name, int error); 84int FindFace (const char *name, int error);
88extern int ReadSmooth (); 85int ReadSmooth ();
89extern int FindSmooth (uint16 face, uint16 *smoothed); 86int FindSmooth (uint16 face, uint16 *smoothed);
90extern void free_all_images (); 87void free_all_images ();
91/* init.c */ 88/* init.c */
92extern void init_library (); 89void init_library ();
93extern void init_environ (); 90void init_environ ();
94extern void init_globals (); 91void init_globals ();
95extern void init_objects (); 92void init_objects ();
96extern void init_defaults (); 93void init_defaults ();
97extern void init_dynamic (); 94void init_dynamic ();
98extern void init_clocks (); 95void init_clocks ();
99extern void init_attackmess (); 96void init_attackmess ();
100/* item.c */ 97/* item.c */
101extern int get_power_from_ench (int ench); 98int get_power_from_ench (int ench);
102extern int calc_item_power (const object *op, int flag); 99int calc_item_power (const object *op, int flag);
103extern const typedata *get_typedata (int itemtype); 100const typedata *get_typedata (int itemtype);
104extern const typedata *get_typedata_by_name (const char *name); 101const typedata *get_typedata_by_name (const char *name);
105extern const char *describe_resistance (const object *op, int newline); 102const char *describe_resistance (const object *op, int newline);
106extern const char *get_levelnumber (int i); 103const char *ordinal (int i);
107extern const char *describe_item (const object *op, object *owner); 104const char *describe_item (const object *op, object *owner);
108extern int is_magical (const object *op); 105int is_magical (const object *op);
109extern int need_identify (const object *op);
110extern void identify (object *op); 106void identify (object *op);
107void examine (object *op, object *tmp);
111/* links.c */ 108/* links.c */
112extern objectlink *get_objectlink (); 109objectlink *get_objectlink ();
113extern oblinkpt *get_objectlinkpt (); 110oblinkpt *get_objectlinkpt ();
114extern void free_objectlink (objectlink *ol); 111void free_objectlink (objectlink *ol);
115extern void free_objectlinkpt (oblinkpt *obp); 112void free_objectlinkpt (oblinkpt *obp);
116/* living.c */ 113/* living.c */
117extern void change_attr_value (living *stats, int attr, sint8 value); 114void change_attr_value (living *stats, int attr, sint8 value);
118extern void check_stat_bounds (living *stats); 115void check_stat_bounds (living *stats);
119extern int change_abil (object *op, object *tmp); 116int change_abil (object *op, object *tmp);
120extern int allowed_class (const object *op);
121extern void set_dragon_name (object *pl, const object *abil, const object *skin); 117void set_dragon_name (object *pl, const object *abil, const object *skin);
122extern object *give_skill_by_name (object *op, const char *skill_name); 118object *give_skill_by_name (object *op, const char *skill_name);
123extern void player_lvl_adj (object *who, object *op); 119void player_lvl_adj (object *who, object *op);
124extern sint64 level_exp (int level, double expmul); 120sint64 level_exp (int level, double expmul);
125extern void calc_perm_exp (object *op); 121void calc_perm_exp (object *op);
126extern sint64 check_exp_adjust (const object *op, sint64 exp); 122sint64 check_exp_adjust (const object *op, sint64 exp);
127extern void change_exp (object *op, sint64 exp, const char *skill_name, int flag); 123void change_exp (object *op, sint64 exp, shstr_tmp skill_name, int flag);
128extern void apply_death_exp_penalty (object *op); 124void apply_death_exp_penalty (object *op);
129extern int did_make_save (const object *op, int level, int bonus); 125int did_make_save (const object *op, int level, int bonus);
130/* los.c */ 126/* los.c */
131extern void init_block (); 127void init_block ();
132extern void update_all_map_los (maptile *map); 128void update_all_map_los (maptile *map);
133extern void update_all_los (const maptile *map, int x, int y); 129void update_all_los (const maptile *map, int x, int y);
134extern void make_sure_seen (const object *op); 130void make_sure_seen (const object *op);
135extern void make_sure_not_seen (const object *op); 131void make_sure_not_seen (const object *op);
136/* map.c */ 132/* map.c */
137extern const char *create_pathname (const char *name); 133const char *create_pathname (const char *name);
138extern int blocked_link (object *ob, maptile *m, int sx, int sy); 134int blocked_link (object *ob, maptile *m, int sx, int sy);
139/* object.c */ 135/* object.c */
140extern char *dump_object (object *op); 136char *dump_object (object *op);
141extern void dump_me (object *op, char *outstr); 137void dump_me (object *op, char *outstr);
142extern object *find_object (tag_t i); 138object *find_object (tag_t i);
139object *find_object_uuid (UUID i);
143extern object *find_object_name (const char *str); 140object *find_object_name (const char *str);
144extern void free_all_object_data (); 141void free_all_object_data ();
145extern void update_turn_face (object *op); 142void update_turn_face (object *op);
146extern void update_object (object *op, int action); 143void update_object (object *op, int action);
147extern object *merge_ob (object *op, object *top); 144object *merge_ob (object *op, object *top);
148extern object *insert_ob_in_map_at (object *op, maptile *m, object *originator, int flag, int x, int y); 145object *insert_ob_in_map_at (object *op, maptile *m, object *originator, int flag, int x, int y);
149extern object *insert_ob_in_map (object *op, maptile *m, object *originator, int flag); 146object *insert_ob_in_map (object *op, maptile *m, object *originator, int flag);
150extern void replace_insert_ob_in_map (shstr_tmp archname, object *op); 147void replace_insert_ob_in_map (shstr_tmp archname, object *op);
151extern object *insert_ob_in_ob (object *op, object *where); 148object *insert_ob_in_ob (object *op, object *where);
152extern int check_move_on (object *op, object *originator); 149int check_move_on (object *op, object *originator, int flags = 0);
153extern object *present_arch (const archetype *at, maptile *m, int x, int y); 150object *present_arch (const archetype *at, maptile *m, int x, int y);
154extern object *present (unsigned char type, maptile *m, int x, int y); 151object *present (unsigned char type, maptile *m, int x, int y);
155extern object *present_in_ob (unsigned char type, const object *op); 152object *present_in_ob (unsigned char type, const object *op);
156extern object *present_in_ob_by_name (int type, const char *str, const object *op); 153object *present_in_ob_by_name (int type, const char *str, const object *op);
157extern object *present_arch_in_ob (const archetype *at, const object *op); 154object *present_arch_in_ob (const archetype *at, const object *op);
158extern void flag_inv (object *op, int flag); 155void flag_inv (object *op, int flag);
159extern void unflag_inv (object *op, int flag); 156void unflag_inv (object *op, int flag);
160extern int find_free_spot (const object *ob, maptile *m, int x, int y, int start, int stop); 157int find_free_spot (const object *ob, maptile *m, int x, int y, int start, int stop);
161extern int find_first_free_spot (const object *ob, maptile *m, int x, int y); 158int find_first_free_spot (const object *ob, maptile *m, int x, int y);
162extern void get_search_arr (int *search_arr); 159void get_search_arr (int *search_arr);
163extern int find_dir (maptile *m, int x, int y, object *exclude); 160int find_dir (maptile *m, int x, int y, object *exclude);
164extern int distance (const object *ob1, const object *ob2); 161int distance (const object *ob1, const object *ob2);
165extern int find_dir_2 (int x, int y); 162int find_dir_2 (int x, int y);
166extern int dirdiff (int dir1, int dir2); 163int dirdiff (int dir1, int dir2);
167extern int can_see_monsterP (maptile *m, int x, int y, int dir); 164int can_see_monsterP (maptile *m, int x, int y, int dir);
168extern int can_pick (const object *who, const object *item); 165int can_pick (const object *who, const object *item);
169extern object *find_obj_by_type_subtype (const object *who, int type, int subtype); 166object *find_obj_by_type_subtype (const object *who, int type, int subtype);
170/* path.c */ 167/* path.c */
171extern char *path_combine (const char *src, const char *dst); 168char *path_combine (const char *src, const char *dst);
172extern char *path_combine_and_normalize (const char *src, const char *dst); 169char *path_combine_and_normalize (const char *src, const char *dst);
173/* porting.c */
174extern void remove_directory (const char *path);
175extern char *ltostr10 (signed long n);
176extern char *doubletostr10 (double v);
177extern FILE *open_and_uncompress (const char *name, int flag, int *compressed);
178extern void close_and_delete (FILE *fp, int compressed);
179extern void make_path_to_file (char *filename);
180/* player.c */ 170/* player.c */
181extern void free_player (player *pl); 171void free_player (player *pl);
182extern int atnr_is_dragon_enabled (int attacknr); 172int atnr_is_dragon_enabled (int attacknr);
183extern int is_dragon_pl (const object *op);
184/* quest.c */ 173/* quest.c */
185extern int quest_is_quest_marker (const object *marker, int task); 174int quest_is_quest_marker (const object *marker, int task);
186extern int quest_is_in_progress (const object *marker, int task); 175int quest_is_in_progress (const object *marker, int task);
187extern int quest_is_completed (const object *marker, int task); 176int quest_is_completed (const object *marker, int task);
188extern const char *quest_get_name (const object *marker); 177const char *quest_get_name (const object *marker);
189extern object *quest_get_player_quest (const object *pl, const char *name, const char *name_pl); 178object *quest_get_player_quest (const object *pl, const char *name, const char *name_pl);
190extern object *quest_get_override (const object *ob, const object *pl); 179object *quest_get_override (const object *ob, const object *pl);
191extern const char *quest_get_override_slaying (const object *ob, const object *pl); 180const char *quest_get_override_slaying (const object *ob, const object *pl);
192extern const char *quest_get_override_msg (const object *ob, const object *pl); 181const char *quest_get_override_msg (const object *ob, const object *pl);
193extern void quest_apply_items (object *wrapper, player *pl); 182void quest_apply_items (object *wrapper, player *pl);
194extern int quest_on_activate (object *ob, player *pl); 183int quest_on_activate (object *ob, player *pl);
195extern int quest_is_override_compatible (const object *marker, const object *pl); 184int quest_is_override_compatible (const object *marker, const object *pl);
196/* readable.c */ 185/* readable.c */
197extern void init_readable (); 186void init_readable ();
198extern object *get_random_mon (int level); 187object *get_random_mon (int level);
199extern void tailor_readable_ob (object *book, int msg_type); 188void tailor_readable_ob (object *book, int msg_type);
200extern void write_book_archive (); 189void write_book_archive ();
201extern readable_message_type *get_readable_message_type (object *readable); 190readable_message_type *get_readable_message_type (object *readable);
202/* recipe.c */ 191/* recipe.c */
203extern recipelist *get_formulalist (int i); 192recipelist *get_formulalist (int i);
204extern void init_formulae (); 193void init_formulae ();
205extern void dump_alchemy (); 194void dump_alchemy ();
206extern void dump_alchemy_costs (); 195void dump_alchemy_costs ();
207extern int strtoint (const char *buf); 196int strtoint (const char *buf);
208extern artifact *locate_recipe_artifact (const recipe *rp, size_t idx); 197artifact *locate_recipe_artifact (const recipe *rp, size_t idx);
209extern recipe *get_random_recipe (recipelist *rpl); 198recipe *get_random_recipe (recipelist *rpl);
210/* region.c */ 199/* region.c */
211extern object *get_jail_exit (object *op); 200object *get_jail_exit (object *op);
212/* shstr.c */ 201/* shstr.c */
213extern int buf_overflow (const char *buf1, const char *buf2, int bufsize); 202int buf_overflow (const char *buf1, const char *buf2, int bufsize);
214/* time.c */ 203/* time.c */
215extern void reset_sleep (); 204void reset_sleep ();
216extern void log_time (long process_utime); 205void log_time (long process_utime);
217extern int enough_elapsed_time (); 206int enough_elapsed_time ();
218extern void sleep_delta (); 207void sleep_delta ();
219extern void get_tod (timeofday_t *tod); 208void get_tod (timeofday_t *tod);
220extern void print_tod (object *op); 209void print_tod (object *op);
221extern void time_info (object *op); 210void time_info (object *op);
222/* treasure.c */ 211/* treasure.c */
223extern bool load_treasure_file (const char *filename); 212bool load_treasure_file (const char *filename);
224extern object *generate_treasure (treasurelist *t, int difficulty); 213object *generate_treasure (treasurelist *t, int difficulty);
225extern void set_abs_magic (object *op, int magic); 214void set_abs_magic (object *op, int magic);
226extern void fix_generated_item (object *op, object *creator, int difficulty, int max_magic, int flags); 215void fix_generated_item (object *op, object *creator, int difficulty, int max_magic, int flags);
227extern artifactlist *find_artifactlist (int type); 216artifactlist *find_artifactlist (int type);
228extern void dump_artifacts (); 217void dump_artifacts ();
229extern void dump_monster_treasure_rec (const char *name, treasure *t, int depth); 218void dump_monster_treasure_rec (const char *name, treasure *t, int depth);
230extern void dump_monster_treasure (const char *name); 219void dump_monster_treasure (const char *name);
231extern void init_artifacts (); 220void init_artifacts ();
232extern void add_abilities (object *op, object *change); 221void add_abilities (object *op, object *change);
233extern void give_artifact_abilities (object *op, object *artifct); 222void give_artifact_abilities (object *op, object *artifct);
234extern void generate_artifact (object *op, int difficulty); 223void generate_artifact (object *op, int difficulty);
235extern void fix_flesh_item (object *item, object *donor); 224void fix_flesh_item (object *item, object *donor);
236/* utils.c */ 225/* utils.c */
237extern int random_roll (int min, int max, const object *op, int goodbad); 226int random_roll (int min, int max, const object *op, bool prefer_high);
238extern sint64 random_roll64 (sint64 min, sint64 max, const object *op, int goodbad); 227sint64 random_roll64 (sint64 min, sint64 max, const object *op, bool prefer_high);
239extern int die_roll (int num, int size, const object *op, int goodbad); 228int die_roll (int num, int size, const object *op, bool prefer_high);
240extern materialtype_t *name_to_material (const shstr_cmp name);
241extern void transmute_materialname (object *op, const object *change); 229void transmute_materialname (object *op, const object *change);
242extern void set_materialname (object *op, int difficulty, materialtype_t *nmt);
243extern void strip_media_tag (char *message);
244extern void strip_endline (char *buf); 230void strip_endline (char *buf);
245extern void replace (const char *src, const char *key, const char *replacement, char *result, size_t resultsize); 231void replace (const char *src, const char *key, const char *replacement, char *result, size_t resultsize);
246/* loader.c */ 232/* loader.c */
247extern int set_variable (object *op, char *buf); 233int set_variable (object *op, char *buf);
248extern void init_vars (); 234void init_vars ();
249extern char *get_ob_diff (object *op, object *op2); 235char *get_ob_diff (object *op, object *op2);
236bool load_resource_file_ (const char *filename);
250/* map.c */ 237/* map.c */
251extern maptile *find_style (const char *dirname, const char *stylename, int difficulty); 238maptile *find_style (const char *dirname, const char *stylename, int difficulty, bool recurse = false);
252extern object *pick_random_object (maptile *style); 239object *pick_random_object (maptile *style);
253 240
254/* former funcpoint.h */ 241/* former funcpoint.h */
255/* 242/*
256 * These function-pointers are defined in common/glue.c 243 * These function-pointers are defined in common/glue.c
257 * The functions used to set and initialise them are also there. 244 * The functions used to set and initialise them are also there.
259 * Massive change. Those functions are just defined, no callback, and they should be implemented. 246 * Massive change. Those functions are just defined, no callback, and they should be implemented.
260 * This means glue.c code & such can go away almost entirely. 247 * This means glue.c code & such can go away almost entirely.
261 * Ryo 2005-07-15 248 * Ryo 2005-07-15
262 */ 249 */
263 250
264extern void move_apply (object *, object *, object *); 251void move_apply (object *, object *, object *);
265extern void draw_info (int, int, object *, const char *); 252void draw_info (int, int, object *, const char *);
266extern void clean_tmp_files (void); 253void clean_tmp_files ();
267extern void fix_auto_apply (maptile *); 254void fix_auto_apply (maptile *);
268extern void init_blocksview_players (void); 255void init_blocksview_players ();
269extern void monster_check_apply (object *, object *); 256void monster_check_apply (object *, object *);
270extern void process_active_maps (void); 257void process_active_maps ();
271extern void remove_friendly_object (object *); 258void remove_friendly_object (object *);
272extern void update_buttons (maptile *); 259void update_buttons (maptile *);
273extern void move_teleporter (object *); 260void move_teleporter (object *);
274extern void move_firewall (object *); 261void move_firewall (object *);
275extern void move_creator (object *); 262void move_creator (object *);
276extern void move_marker (object *); 263void move_marker (object *);
277extern void move_duplicator (object *); 264void move_duplicator (object *);
278extern void trap_adjust (object *, int); 265void trap_adjust (object *, int);
279extern void esrv_send_item (object *, object *); 266void esrv_send_item (object *, object *);
280extern void esrv_del_item (player *, int); 267void esrv_del_item (player *, int);
281extern void esrv_update_item (int, object *, object *); 268void esrv_update_item (int, object *, object *);
282extern void esrv_update_spells (player *); 269void esrv_update_spells (player *);
283extern void dragon_ability_gain (object *, int, int); 270void dragon_ability_gain (object *, int, int);
284extern object * find_skill_by_number (object *, int); 271object * find_skill_by_number (object *, int);
285 272
286#endif 273#endif
287 274

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines