# HG changeset patch # User tron # Date 1110438103 0 # Node ID 2174a73b11c97284f051714310fcc5f17328ffbc # Parent abbcea18a01c308b33baea3eb5c06d67290c4045 (svn r1981) Typedef some structs and enums diff -r abbcea18a01c -r 2174a73b11c9 engine.c --- a/engine.c Wed Mar 09 23:59:18 2005 +0000 +++ b/engine.c Thu Mar 10 07:01:43 2005 +0000 @@ -205,27 +205,29 @@ // TODO: We don't support cargo-specific wagon overrides. Pretty exotic... ;-) --pasky -struct WagonOverride { +typedef struct WagonOverride { byte *train_id; int trains; - struct SpriteGroup group; -}; + SpriteGroup group; +} WagonOverride; -static struct WagonOverrides { +typedef struct WagonOverrides { int overrides_count; - struct WagonOverride *overrides; -} _engine_wagon_overrides[TOTAL_NUM_ENGINES]; + WagonOverride *overrides; +} WagonOverrides; -void SetWagonOverrideSprites(byte engine, struct SpriteGroup *group, - byte *train_id, int trains) +static WagonOverrides _engine_wagon_overrides[TOTAL_NUM_ENGINES]; + +void SetWagonOverrideSprites(byte engine, SpriteGroup *group, byte *train_id, + int trains) { - struct WagonOverrides *wos; - struct WagonOverride *wo; + WagonOverrides *wos; + WagonOverride *wo; wos = &_engine_wagon_overrides[engine]; wos->overrides_count++; wos->overrides = realloc(wos->overrides, - wos->overrides_count * sizeof(struct WagonOverride)); + wos->overrides_count * sizeof(*wos->overrides)); wo = &wos->overrides[wos->overrides_count - 1]; /* FIXME: If we are replacing an override, release original SpriteGroup @@ -237,9 +239,9 @@ memcpy(wo->train_id, train_id, trains); } -static struct SpriteGroup *GetWagonOverrideSpriteSet(byte engine, byte overriding_engine) +static SpriteGroup *GetWagonOverrideSpriteSet(byte engine, byte overriding_engine) { - struct WagonOverrides *wos = &_engine_wagon_overrides[engine]; + WagonOverrides *wos = &_engine_wagon_overrides[engine]; int i; // XXX: This could turn out to be a timesink on profiles. We could @@ -248,7 +250,7 @@ // that. --pasky for (i = 0; i < wos->overrides_count; i++) { - struct WagonOverride *wo = &wos->overrides[i]; + WagonOverride *wo = &wos->overrides[i]; int j; for (j = 0; j < wo->trains; j++) { @@ -265,9 +267,9 @@ // (It isn't and shouldn't be like this in the GRF files since new cargo types // may appear in future - however it's more convenient to store it like this in // memory. --pasky) -static struct SpriteGroup _engine_custom_sprites[TOTAL_NUM_ENGINES][NUM_CID]; +static SpriteGroup _engine_custom_sprites[TOTAL_NUM_ENGINES][NUM_CID]; -void SetCustomEngineSprites(byte engine, byte cargo, struct SpriteGroup *group) +void SetCustomEngineSprites(byte engine, byte cargo, SpriteGroup *group) { /* FIXME: If we are replacing an override, release original SpriteGroup * to prevent leaks. But first we need to refcount the SpriteGroup. @@ -275,11 +277,11 @@ _engine_custom_sprites[engine][cargo] = *group; } -typedef struct RealSpriteGroup *(*resolve_callback)( - struct SpriteGroup *spritegroup, const Vehicle *veh, void *callback); /* XXX data pointer used as function pointer */ +typedef RealSpriteGroup *(*resolve_callback)(SpriteGroup *spritegroup, + const Vehicle *veh, void *callback); /* XXX data pointer used as function pointer */ -static struct RealSpriteGroup* ResolveVehicleSpriteGroup( - struct SpriteGroup *spritegroup, const Vehicle *veh, resolve_callback callback) +static RealSpriteGroup* ResolveVehicleSpriteGroup(SpriteGroup *spritegroup, + const Vehicle *veh, resolve_callback callback) { //debug("spgt %d", spritegroup->type); switch (spritegroup->type) { @@ -287,8 +289,8 @@ return &spritegroup->g.real; case SGT_DETERMINISTIC: { - struct DeterministicSpriteGroup *dsg = &spritegroup->g.determ; - struct SpriteGroup *target; + DeterministicSpriteGroup *dsg = &spritegroup->g.determ; + SpriteGroup *target; int value = -1; //debug("[%p] Having fun resolving variable %x", veh, dsg->variable); @@ -296,7 +298,6 @@ if ((dsg->variable >> 6) == 0) { /* General property */ value = GetDeterministicSpriteValue(dsg->variable); - } else { /* Vehicle-specific property. */ @@ -434,7 +435,7 @@ } case SGT_RANDOMIZED: { - struct RandomizedSpriteGroup *rsg = &spritegroup->g.random; + RandomizedSpriteGroup *rsg = &spritegroup->g.random; if (veh == NULL) { /* Purchase list of something. Show the first one. */ @@ -458,9 +459,9 @@ } } -static struct SpriteGroup *GetVehicleSpriteGroup(byte engine, const Vehicle *v) +static SpriteGroup *GetVehicleSpriteGroup(byte engine, const Vehicle *v) { - struct SpriteGroup *group; + SpriteGroup *group; uint16 overriding_engine = -1; byte cargo = CID_PURCHASE; @@ -472,10 +473,9 @@ group = &_engine_custom_sprites[engine][cargo]; if (overriding_engine != 0xffff) { - struct SpriteGroup *overset; + SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, overriding_engine); - overset = GetWagonOverrideSpriteSet(engine, overriding_engine); - if (overset) group = overset; + if (overset != NULL) group = overset; } return group; @@ -483,8 +483,8 @@ int GetCustomEngineSprite(byte engine, const Vehicle *v, byte direction) { - struct SpriteGroup *group; - struct RealSpriteGroup *rsg; + SpriteGroup *group; + RealSpriteGroup *rsg; byte cargo = CID_PURCHASE; byte loaded = 0; bool in_motion = 0; @@ -548,21 +548,23 @@ extern int _custom_sprites_base; -static struct RealSpriteGroup * -TriggerVehicleSpriteGroup(struct SpriteGroup *spritegroup, struct Vehicle *veh, - resolve_callback callback) +static RealSpriteGroup *TriggerVehicleSpriteGroup(SpriteGroup *spritegroup, + Vehicle *veh, resolve_callback callback) { - if (spritegroup->type == SGT_RANDOMIZED) - _vsg_bits_to_reseed |= RandomizedSpriteGroupTriggeredBits(&spritegroup->g.random, - _vsg_random_triggers, - &veh->waiting_triggers); + if (spritegroup->type == SGT_RANDOMIZED) { + _vsg_bits_to_reseed |= RandomizedSpriteGroupTriggeredBits( + &spritegroup->g.random, + _vsg_random_triggers, + &veh->waiting_triggers + ); + } return ResolveVehicleSpriteGroup(spritegroup, veh, callback); } -static void DoTriggerVehicle(Vehicle *veh, enum VehicleTrigger trigger, byte base_random_bits, bool first) +static void DoTriggerVehicle(Vehicle *veh, VehicleTrigger trigger, byte base_random_bits, bool first) { - struct RealSpriteGroup *rsg; + RealSpriteGroup *rsg; byte new_random_bits; _vsg_random_triggers = trigger; @@ -615,7 +617,7 @@ } } -void TriggerVehicle(Vehicle *veh, enum VehicleTrigger trigger) +void TriggerVehicle(Vehicle *veh, VehicleTrigger trigger) { DoTriggerVehicle(veh, trigger, 0, true); } diff -r abbcea18a01c -r 2174a73b11c9 engine.h --- a/engine.h Wed Mar 09 23:59:18 2005 +0000 +++ b/engine.h Thu Mar 10 07:01:43 2005 +0000 @@ -103,7 +103,7 @@ #define GetCustomVehicleSprite(v, direction) GetCustomEngineSprite(v->engine_type, v, direction) #define GetCustomVehicleIcon(et, direction) GetCustomEngineSprite(et, NULL, direction) -enum VehicleTrigger { +typedef enum VehicleTrigger { VEHICLE_TRIGGER_NEW_CARGO = 1, // Externally triggered only for the first vehicle in chain VEHICLE_TRIGGER_DEPOT = 2, @@ -111,8 +111,8 @@ VEHICLE_TRIGGER_EMPTY = 4, // Not triggered externally (called for the whole chain if we got NEW_CARGO) VEHICLE_TRIGGER_ANY_NEW_CARGO = 8, -}; -void TriggerVehicle(Vehicle *veh, enum VehicleTrigger trigger); +} VehicleTrigger; +void TriggerVehicle(Vehicle *veh, VehicleTrigger trigger); void SetCustomEngineName(int engine, const char *name); StringID GetCustomEngineName(int engine); diff -r abbcea18a01c -r 2174a73b11c9 newgrf.c --- a/newgrf.c Wed Mar 09 23:59:18 2005 +0000 +++ b/newgrf.c Thu Mar 10 07:01:43 2005 +0000 @@ -26,7 +26,8 @@ extern int _replace_sprites_offset[16]; extern int _traininfo_vehicle_pitch; -struct GRFFile *_cur_grffile, *_first_grffile; +GRFFile *_cur_grffile; +GRFFile *_first_grffile; int _grffile_count; static int _cur_spriteid; static int _cur_stage; @@ -39,7 +40,7 @@ static uint32 _ttdpatch_flags[8]; -enum grfspec_feature { +typedef enum grfspec_feature { GSF_TRAIN, GSF_ROAD, GSF_SHIP, @@ -47,7 +48,7 @@ GSF_STATION, GSF_BRIDGE, GSF_TOWNHOUSE, -}; +} grfspec_feature; typedef void (*SpecialSpriteHandler)(byte *buf, int len); @@ -83,22 +84,27 @@ */ -enum grfmsg_severity { +typedef enum grfmsg_severity { GMS_NOTICE, GMS_WARN, GMS_ERROR, GMS_FATAL, -}; +} grfmsg_severity; -static void CDECL grfmsg(enum grfmsg_severity severity, const char *str, ...) +static void CDECL grfmsg(grfmsg_severity severity, const char *str, ...) { - static const char * const severitystr[4] = { "Notice", "Warning", "Error", "Fatal" }; + static const char* const severitystr[] = { + "Notice", + "Warning", + "Error", + "Fatal" + }; int export_severity = 0; char buf[1024]; va_list va; va_start(va, str); - vsprintf(buf, str, va); + vsnprintf(buf, sizeof(buf), str, va); va_end(va); export_severity = 2 - (severity == GMS_FATAL ? 2 : severity); @@ -144,25 +150,23 @@ } -static struct GRFFile *GetFileByGRFID(uint32 grfid) +static GRFFile *GetFileByGRFID(uint32 grfid) { - struct GRFFile *file; + GRFFile *file; - file = _first_grffile; - while ((file != NULL) && (file->grfid != grfid)) - file = file->next; - + for (file = _first_grffile; file != NULL; file = file->next) { + if (file->grfid == grfid) break; + } return file; } -static struct GRFFile *GetFileByFilename(const char *filename) +static GRFFile *GetFileByFilename(const char *filename) { - struct GRFFile *file; + GRFFile *file; - file = _first_grffile; - while ((file != NULL) && strcmp(file->filename, filename)) - file = file->next; - + for (file = _first_grffile; file != NULL; file = file->next) { + if (strcmp(file->filename, filename) == 0) break; + } return file; } @@ -683,7 +687,7 @@ case 0x08: { /* Class ID */ FOR_EACH_OBJECT { - struct StationSpec *stat = &_cur_grffile->stations[stid + i]; + StationSpec *stat = &_cur_grffile->stations[stid + i]; uint32 classid; /* classid, for a change, is always little-endian */ @@ -714,7 +718,7 @@ case 0x09: { /* Define sprite layout */ FOR_EACH_OBJECT { - struct StationSpec *stat = &_cur_grffile->stations[stid + i]; + StationSpec *stat = &_cur_grffile->stations[stid + i]; int t; stat->tiles = grf_load_byte(&buf); @@ -759,9 +763,9 @@ case 0x0a: { /* Copy sprite layout */ FOR_EACH_OBJECT { - struct StationSpec *stat = &_cur_grffile->stations[stid + i]; + StationSpec *stat = &_cur_grffile->stations[stid + i]; byte srcid = grf_load_byte(&buf); - struct StationSpec *srcstat = &_cur_grffile->stations[srcid]; + StationSpec *srcstat = &_cur_grffile->stations[srcid]; int t; stat->tiles = srcstat->tiles; @@ -805,7 +809,7 @@ case 0x0C: { /* Platforms number */ FOR_EACH_OBJECT { - struct StationSpec *stat = &_cur_grffile->stations[stid + i]; + StationSpec *stat = &_cur_grffile->stations[stid + i]; stat->allowed_platforms = ~grf_load_byte(&buf); } @@ -814,7 +818,7 @@ case 0x0D: { /* Platforms length */ FOR_EACH_OBJECT { - struct StationSpec *stat = &_cur_grffile->stations[stid + i]; + StationSpec *stat = &_cur_grffile->stations[stid + i]; stat->allowed_lengths = ~grf_load_byte(&buf); } @@ -823,7 +827,7 @@ case 0x0e: { /* Define custom layout */ FOR_EACH_OBJECT { - struct StationSpec *stat = &_cur_grffile->stations[stid + i]; + StationSpec *stat = &_cur_grffile->stations[stid + i]; while (buf < *bufp + len) { byte length = grf_load_byte(&buf); @@ -917,8 +921,6 @@ return ret; } -#undef shift_buf - /* Action 0x00 */ static void VehicleChangeInfo(byte *buf, int len) @@ -1048,7 +1050,6 @@ } } } -#undef shift_buf } #undef FOR_EACH_OBJECT @@ -1105,8 +1106,8 @@ /* XXX: For stations, these two are "little cargo" and "lotsa cargo" sets. */ uint8 numloaded; uint8 numloading; - struct SpriteGroup *group; - struct RealSpriteGroup *rg; + SpriteGroup *group; + RealSpriteGroup *rg; byte *loaded_ptr; byte *loading_ptr; int i; @@ -1118,7 +1119,7 @@ numloading = buf[4]; if (numloaded == 0x81 || numloaded == 0x82) { - struct DeterministicSpriteGroup *dg; + DeterministicSpriteGroup *dg; uint16 groupid; int i; @@ -1132,11 +1133,11 @@ if (setid >= _cur_grffile->spritegroups_count) { _cur_grffile->spritegroups_count = setid + 1; - _cur_grffile->spritegroups = realloc(_cur_grffile->spritegroups, _cur_grffile->spritegroups_count * sizeof(struct SpriteGroup)); + _cur_grffile->spritegroups = realloc(_cur_grffile->spritegroups, _cur_grffile->spritegroups_count * sizeof(*_cur_grffile->spritegroups)); } group = &_cur_grffile->spritegroups[setid]; - memset(group, 0, sizeof(struct SpriteGroup)); + memset(group, 0, sizeof(*group)); group->type = SGT_DETERMINISTIC; dg = &group->g.determ; @@ -1190,7 +1191,7 @@ return; } else if (numloaded == 0x80 || numloaded == 0x83) { - struct RandomizedSpriteGroup *rg; + RandomizedSpriteGroup *rg; int i; /* This stuff is getting actually evaluated in @@ -1202,7 +1203,7 @@ if (setid >= _cur_grffile->spritegroups_count) { _cur_grffile->spritegroups_count = setid + 1; - _cur_grffile->spritegroups = realloc(_cur_grffile->spritegroups, _cur_grffile->spritegroups_count * sizeof(struct SpriteGroup)); + _cur_grffile->spritegroups = realloc(_cur_grffile->spritegroups, _cur_grffile->spritegroups_count * sizeof(*_cur_grffile->spritegroups)); } group = &_cur_grffile->spritegroups[setid]; @@ -1268,10 +1269,10 @@ if (setid >= _cur_grffile->spritegroups_count) { _cur_grffile->spritegroups_count = setid + 1; - _cur_grffile->spritegroups = realloc(_cur_grffile->spritegroups, _cur_grffile->spritegroups_count * sizeof(struct SpriteGroup)); + _cur_grffile->spritegroups = realloc(_cur_grffile->spritegroups, _cur_grffile->spritegroups_count * sizeof(*_cur_grffile->spritegroups)); } group = &_cur_grffile->spritegroups[setid]; - memset(group, 0, sizeof(struct SpriteGroup)); + memset(group, 0, sizeof(*group)); group->type = SGT_REAL; rg = &group->g.real; @@ -1347,7 +1348,7 @@ for (i = 0; i < idcount; i++) { uint8 stid = buf[3 + i]; - struct StationSpec *stat = &_cur_grffile->stations[stid]; + StationSpec *stat = &_cur_grffile->stations[stid]; byte *bp = &buf[4 + idcount]; for (c = 0; c < cidcount; c++) { @@ -1381,7 +1382,7 @@ for (i = 0; i < idcount; i++) { uint8 stid = buf[3 + i]; - struct StationSpec *stat = &_cur_grffile->stations[stid]; + StationSpec *stat = &_cur_grffile->stations[stid]; stat->spritegroup[0] = _cur_grffile->spritegroups[groupid]; stat->grfid = _cur_grffile->grfid; @@ -1639,7 +1640,7 @@ param_val = _opt.road_side << 4; break; case 0x88: { /* see if specified GRFID is active */ - struct GRFFile *file; + GRFFile *file; file = GetFileByGRFID(cond_val); param_val = (file != NULL); @@ -1959,7 +1960,7 @@ for (i = 0; i < num; i++) { uint32 grfid = grf_load_dword(&buf); - struct GRFFile *file = GetFileByGRFID(grfid); + GRFFile *file = GetFileByGRFID(grfid); /* Unset activation flag */ if (file != NULL) { @@ -1996,7 +1997,7 @@ void InitNewGRFFile(const char *filename, int sprite_offset) { - struct GRFFile *newfile; + GRFFile *newfile; newfile = GetFileByFilename(filename); if (newfile != NULL) { @@ -2006,7 +2007,7 @@ return; } - newfile = calloc(1, sizeof(struct GRFFile)); + newfile = calloc(1, sizeof(*newfile)); if (newfile == NULL) error ("Out of memory"); diff -r abbcea18a01c -r 2174a73b11c9 newgrf.h --- a/newgrf.h Wed Mar 09 23:59:18 2005 +0000 +++ b/newgrf.h Thu Mar 10 07:01:43 2005 +0000 @@ -4,12 +4,13 @@ #include "sprite.h" #include "station.h" +typedef struct GRFFile GRFFile; struct GRFFile { char *filename; uint32 grfid; uint16 flags; uint16 sprite_offset; - struct GRFFile *next; + GRFFile *next; /* A sprite group contains all sprites of a given vehicle (or multiple * vehicles) when carrying given cargo. It consists of several sprite @@ -28,13 +29,13 @@ int spriteset_feature; int spritegroups_count; - struct SpriteGroup *spritegroups; + SpriteGroup *spritegroups; - struct StationSpec stations[256]; + StationSpec stations[256]; }; extern int _grffile_count; -extern struct GRFFile *_first_grffile; +extern GRFFile *_first_grffile; void InitNewGRFFile(const char *filename, int sprite_offset); void DecodeSpecialSprite(const char *filename, int num, int spriteid, int stage); diff -r abbcea18a01c -r 2174a73b11c9 rail_cmd.c --- a/rail_cmd.c Wed Mar 09 23:59:18 2005 +0000 +++ b/rail_cmd.c Thu Mar 10 07:01:43 2005 +0000 @@ -1630,7 +1630,7 @@ if (!IS_RAIL_DEPOT(m5) && IS_RAIL_WAYPOINT(m5) && _map3_lo[ti->tile]&16) { // look for customization - struct StationSpec *stat = GetCustomStation(STAT_CLASS_WAYP, _map3_hi[ti->tile]); + StationSpec *stat = GetCustomStation(STAT_CLASS_WAYP, _map3_hi[ti->tile]); if (stat) { DrawTileSeqStruct const *seq; @@ -1718,7 +1718,7 @@ void DrawWaypointSprite(int x, int y, int stat_id, int railtype) { - struct StationSpec *stat; + StationSpec *stat; uint32 relocation; DrawTileSprites *cust; DrawTileSeqStruct const *seq; diff -r abbcea18a01c -r 2174a73b11c9 settings_gui.c --- a/settings_gui.c Wed Mar 09 23:59:18 2005 +0000 +++ b/settings_gui.c Thu Mar 10 07:01:43 2005 +0000 @@ -1194,7 +1194,7 @@ AllocateWindowDesc(&_patches_selection_desc); } -struct GRFFile *_sel_grffile; +GRFFile *_sel_grffile; enum { NEWGRF_WND_PROC_OFFSET_TOP_WIDGET = 14, @@ -1207,7 +1207,7 @@ case WE_PAINT: { int x, y = NEWGRF_WND_PROC_OFFSET_TOP_WIDGET; uint16 i = 0; - struct GRFFile *c = _first_grffile; + GRFFile *c = _first_grffile; DrawWindowWidgets(w); @@ -1323,7 +1323,8 @@ { // little helper function to calculate _grffile_count // should be REMOVED once _grffile_count is calculated at loading - struct GRFFile *c = _first_grffile; + GRFFile *c = _first_grffile; + _grffile_count = 0; while (c != NULL) { _grffile_count++; diff -r abbcea18a01c -r 2174a73b11c9 sprite.c --- a/sprite.c Wed Mar 09 23:59:18 2005 +0000 +++ b/sprite.c Thu Mar 10 07:01:43 2005 +0000 @@ -6,7 +6,7 @@ #include "sprite.h" -struct SpriteGroup *EvalDeterministicSpriteGroup(struct DeterministicSpriteGroup *dsg, int value) +SpriteGroup *EvalDeterministicSpriteGroup(DeterministicSpriteGroup *dsg, int value) { int i; @@ -28,7 +28,7 @@ } for (i = 0; i < dsg->num_ranges; i++) { - struct DeterministicSpriteGroupRange *range = &dsg->ranges[i]; + DeterministicSpriteGroupRange *range = &dsg->ranges[i]; if (range->low <= value && value <= range->high) return &range->group; @@ -61,8 +61,7 @@ } } -struct SpriteGroup * -EvalRandomizedSpriteGroup(struct RandomizedSpriteGroup *rsg, byte random_bits) +SpriteGroup *EvalRandomizedSpriteGroup(RandomizedSpriteGroup *rsg, byte random_bits) { byte mask; byte index; @@ -76,8 +75,8 @@ return &rsg->groups[index]; } -byte RandomizedSpriteGroupTriggeredBits(struct RandomizedSpriteGroup *rsg, byte triggers, - byte *waiting_triggers) +byte RandomizedSpriteGroupTriggeredBits(RandomizedSpriteGroup *rsg, + byte triggers, byte *waiting_triggers) { byte match = rsg->triggers & (*waiting_triggers | triggers); bool res; diff -r abbcea18a01c -r 2174a73b11c9 sprite.h --- a/sprite.h Wed Mar 09 23:59:18 2005 +0000 +++ b/sprite.h Thu Mar 10 07:01:43 2005 +0000 @@ -27,9 +27,9 @@ /* This is for custom sprites: */ -struct SpriteGroup; +typedef struct SpriteGroup SpriteGroup; -struct RealSpriteGroup { +typedef struct RealSpriteGroup { // XXX: Would anyone ever need more than 16 spritesets? Maybe we should // use even less, now we take whole 8kb for custom sprites table, oh my! byte sprites_per_set; // means number of directions - 4 or 8 @@ -45,20 +45,28 @@ uint16 loaded[16]; // sprite ids byte loading_count; uint16 loading[16]; // sprite ids -}; +} RealSpriteGroup; /* Shared by deterministic and random groups. */ -enum VarSpriteGroupScope { +typedef enum VarSpriteGroupScope { VSG_SCOPE_SELF, // Engine of consists for vehicles, city for stations. VSG_SCOPE_PARENT, -}; +} VarSpriteGroupScope; -struct DeterministicSpriteGroupRanges; +typedef struct DeterministicSpriteGroupRanges DeterministicSpriteGroupRanges; -struct DeterministicSpriteGroup { +typedef enum DeterministicSpriteGroupOperation { + DSG_OP_NONE, + DSG_OP_DIV, + DSG_OP_MOD, +} DeterministicSpriteGroupOperation; + +typedef struct DeterministicSpriteGroupRange DeterministicSpriteGroupRange; + +typedef struct DeterministicSpriteGroup { // Take this variable: - enum VarSpriteGroupScope var_scope; + VarSpriteGroupScope var_scope; byte variable; // Do this with it: @@ -66,31 +74,29 @@ byte and_mask; // Then do this with it: - enum DeterministicSpriteGroupOperation { - DSG_OP_NONE, - DSG_OP_DIV, - DSG_OP_MOD, - } operation; + DeterministicSpriteGroupOperation operation; byte add_val; byte divmod_val; // And apply it to this: byte num_ranges; - struct DeterministicSpriteGroupRange *ranges; // Dynamically allocated + DeterministicSpriteGroupRange *ranges; // Dynamically allocated // Dynamically allocated, this is the sole owner - struct SpriteGroup *default_group; -}; + SpriteGroup *default_group; +} DeterministicSpriteGroup; -struct RandomizedSpriteGroup { +typedef enum RandomizedSpriteGroupCompareMode { + RSG_CMP_ANY, + RSG_CMP_ALL, +} RandomizedSpriteGroupCompareMode; + +typedef struct RandomizedSpriteGroup { // Take this object: - enum VarSpriteGroupScope var_scope; + VarSpriteGroupScope var_scope; // Check for these triggers: - enum RandomizedSpriteGroupCompareMode { - RSG_CMP_ANY, - RSG_CMP_ALL, - } cmp_mode; + RandomizedSpriteGroupCompareMode cmp_mode; byte triggers; // Look for this in the per-object randomized bitmask: @@ -98,25 +104,27 @@ byte num_groups; // must be power of 2 // Take the group with appropriate index: - struct SpriteGroup *groups; -}; + SpriteGroup *groups; +} RandomizedSpriteGroup; + +typedef enum SpriteGroupType { + SGT_REAL, + SGT_DETERMINISTIC, + SGT_RANDOMIZED, +} SpriteGroupType; struct SpriteGroup { - enum SpriteGroupType { - SGT_REAL, - SGT_DETERMINISTIC, - SGT_RANDOMIZED, - } type; + SpriteGroupType type; union { - struct RealSpriteGroup real; - struct DeterministicSpriteGroup determ; - struct RandomizedSpriteGroup random; + RealSpriteGroup real; + DeterministicSpriteGroup determ; + RandomizedSpriteGroup random; } g; }; struct DeterministicSpriteGroupRange { - struct SpriteGroup group; + SpriteGroup group; byte low; byte high; }; @@ -131,10 +139,10 @@ /* This takes randomized bitmask (probably associated with * vehicle/station/whatever) and chooses corresponding SpriteGroup * accordingly to the given RandomizedSpriteGroup. */ -struct SpriteGroup *EvalRandomizedSpriteGroup(struct RandomizedSpriteGroup *rsg, byte random_bits); +SpriteGroup *EvalRandomizedSpriteGroup(RandomizedSpriteGroup *rsg, byte random_bits); /* Triggers given RandomizedSpriteGroup with given bitmask and returns and-mask * of random bits to be reseeded, or zero if there were no triggers matched * (then they are |ed to @waiting_triggers instead). */ -byte RandomizedSpriteGroupTriggeredBits(struct RandomizedSpriteGroup *rsg, byte triggers, byte *waiting_triggers); +byte RandomizedSpriteGroupTriggeredBits(RandomizedSpriteGroup *rsg, byte triggers, byte *waiting_triggers); #endif diff -r abbcea18a01c -r 2174a73b11c9 station.h --- a/station.h Wed Mar 09 23:59:18 2005 +0000 +++ b/station.h Thu Mar 10 07:01:43 2005 +0000 @@ -187,22 +187,24 @@ * where index is computed as (x * platforms) + platform. */ typedef byte *StationLayout; -struct StationSpec { +typedef enum StationClass { + STAT_CLASS_NONE, // unused station slot or so + STAT_CLASS_DFLT, // default station class + STAT_CLASS_WAYP, // waypoints + + /* TODO: When we actually support custom classes, they are + * going to be allocated dynamically (with some classid->sclass + * mapping, there's a TTDPatch limit on 16 custom classes in + * the whole game at the same time) with base at + * STAT_CLASS_CUSTOM. --pasky */ + STAT_CLASS_CUSTOM, // some custom class +} StationClass; + +typedef struct StationSpec { uint32 grfid; int localidx; // per-GRFFile station index + 1; SetCustomStation() takes care of this - enum StationClass { - STAT_CLASS_NONE, // unused station slot or so - STAT_CLASS_DFLT, // default station class - STAT_CLASS_WAYP, // waypoints - - /* TODO: When we actually support custom classes, they are - * going to be allocated dynamically (with some classid->sclass - * mapping, there's a TTDPatch limit on 16 custom classes in - * the whole game at the same time) with base at - * STAT_CLASS_CUSTOM. --pasky */ - STAT_CLASS_CUSTOM, // some custom class - } sclass; + StationClass sclass; /* Bitmask of platform numbers/lengths available for the station. Bits * 0..6 correspond to 1..7, while bit 7 corresponds to >7 platforms or @@ -241,22 +243,22 @@ /* Sprite offsets for renderdata->seq->image. spritegroup[0] is default * whilst spritegroup[1] is "CID_PURCHASE". */ - struct SpriteGroup spritegroup[2]; -}; + SpriteGroup spritegroup[2]; +} StationSpec; /* Here, @stid is local per-GRFFile station index. If spec->localidx is not yet * set, it gets new dynamically allocated global index and spec->localidx is * set to @stid, otherwise we take it as that we are replacing it and try to * search for it first (that isn't much fast but we do it only very seldom). */ -void SetCustomStation(byte stid, struct StationSpec *spec); +void SetCustomStation(byte stid, StationSpec *spec); /* Here, @stid is global station index (in continous range 0..GetCustomStationsCount()) * (lookup is therefore very fast as we do this very frequently). */ -struct StationSpec *GetCustomStation(enum StationClass sclass, byte stid); +StationSpec *GetCustomStation(StationClass sclass, byte stid); /* Get sprite offset for a given custom station and station structure (may be * NULL if ctype is set - that means we are in a build dialog). The station * structure is used for variational sprite groups. */ -uint32 GetCustomStationRelocation(struct StationSpec *spec, struct Station *stat, byte ctype); -int GetCustomStationsCount(enum StationClass sclass); +uint32 GetCustomStationRelocation(StationSpec *spec, Station *stat, byte ctype); +int GetCustomStationsCount(StationClass sclass); RoadStop * GetRoadStopByTile(TileIndex tile, RoadStopType type); static inline int GetRoadStopType(TileIndex tile) diff -r abbcea18a01c -r 2174a73b11c9 station_cmd.c --- a/station_cmd.c Wed Mar 09 23:59:18 2005 +0000 +++ b/station_cmd.c Thu Mar 10 07:01:43 2005 +0000 @@ -889,7 +889,7 @@ } // stolen from TTDPatch -static void GetStationLayout(byte *layout, int numtracks, int plat_len, struct StationSpec *spec) +static void GetStationLayout(byte *layout, int numtracks, int plat_len, StationSpec *spec) { if (spec != NULL && spec->lengths >= plat_len && spec->platforms[plat_len - 1] >= numtracks && @@ -1018,7 +1018,7 @@ int tile_delta; byte *layout_ptr; uint station_index = st->index; - struct StationSpec *statspec; + StationSpec *statspec; // Now really clear the land below the station // It should never return CMD_ERROR.. but you never know ;) @@ -1169,11 +1169,11 @@ /* TODO: Custom classes! */ /* Indexed by class, just STAT_CLASS_DFLT and STAT_CLASS_WAYP supported. */ static int _statspec_highest_id[2] = {-1, -1}; -static struct StationSpec _station_spec[2][256]; - -void SetCustomStation(byte local_stid, struct StationSpec *spec) +static StationSpec _station_spec[2][256]; + +void SetCustomStation(byte local_stid, StationSpec *spec) { - enum StationClass sclass; + StationClass sclass; int stid = -1; assert(spec->sclass == STAT_CLASS_DFLT || spec->sclass == STAT_CLASS_WAYP); @@ -1209,7 +1209,7 @@ memcpy(&_station_spec[sclass][stid], spec, sizeof(*spec)); } -struct StationSpec *GetCustomStation(enum StationClass sclass, byte stid) +StationSpec *GetCustomStation(StationClass sclass, byte stid) { assert(sclass == STAT_CLASS_DFLT || sclass == STAT_CLASS_WAYP); sclass--; @@ -1219,16 +1219,15 @@ return &_station_spec[sclass][stid]; } -static struct RealSpriteGroup * -ResolveStationSpriteGroup(struct SpriteGroup *spritegroup, struct Station *stat) +static RealSpriteGroup *ResolveStationSpriteGroup(SpriteGroup *spritegroup, Station *stat) { switch (spritegroup->type) { case SGT_REAL: return &spritegroup->g.real; case SGT_DETERMINISTIC: { - struct DeterministicSpriteGroup *dsg = &spritegroup->g.determ; - struct SpriteGroup *target; + DeterministicSpriteGroup *dsg = &spritegroup->g.determ; + SpriteGroup *target; int value = -1; if ((dsg->variable >> 6) == 0) { @@ -1300,9 +1299,9 @@ } } -uint32 GetCustomStationRelocation(struct StationSpec *spec, struct Station *stat, byte ctype) +uint32 GetCustomStationRelocation(StationSpec *spec, Station *stat, byte ctype) { - struct RealSpriteGroup *rsg; + RealSpriteGroup *rsg; rsg = ResolveStationSpriteGroup(&spec->spritegroup[ctype], stat); @@ -1322,7 +1321,7 @@ return 0x42D; } -int GetCustomStationsCount(enum StationClass sclass) +int GetCustomStationsCount(StationClass sclass) { assert(sclass == STAT_CLASS_DFLT || sclass == STAT_CLASS_WAYP); sclass--; @@ -2102,7 +2101,7 @@ if (_map3_lo[ti->tile] & 0x10) { // look for customization - struct StationSpec *statspec = GetCustomStation(STAT_CLASS_DFLT, _map3_hi[ti->tile]); + StationSpec *statspec = GetCustomStation(STAT_CLASS_DFLT, _map3_hi[ti->tile]); //debug("Cust-o-mized %p", statspec);