Changeset - r8138:f851b4cbdad1
[Not reviewed]
master
0 29 1
rubidium - 16 years ago 2007-12-25 23:42:52
rubidium@openttd.org
(svn r11700) -Codechange: reduce the amount of unnecessary includes.
30 files changed with 106 insertions and 74 deletions:
0 comments (0 inline, 0 general)
src/airport.h
Show inline comments
 
@@ -3,12 +3,13 @@
 
/** @file airport.h Various declarations for airports */
 

	
 
#ifndef AIRPORT_H
 
#define AIRPORT_H
 

	
 
#include "direction_type.h"
 
#include "map.h"
 

	
 
enum {MAX_TERMINALS =  10};
 
enum {MAX_HELIPADS  =   4};
 
enum {MAX_ELEMENTS  = 255};
 
enum {MAX_HEADINGS  =  22};
 

	
src/aystar.h
Show inline comments
 
@@ -9,12 +9,13 @@
 
 */
 

	
 
#ifndef AYSTAR_H
 
#define AYSTAR_H
 

	
 
#include "queue.h"
 
#include "tile_type.h"
 

	
 
//#define AYSTAR_DEBUG
 
enum {
 
	AYSTAR_FOUND_END_NODE,
 
	AYSTAR_EMPTY_OPENLIST,
 
	AYSTAR_STILL_BUSY,
src/bridge.h
Show inline comments
 
@@ -3,12 +3,13 @@
 
/** @file bridge.h Header file for bridges */
 

	
 
#ifndef BRIDGE_H
 
#define BRIDGE_H
 

	
 
#include "gfx_type.h"
 
#include "tile_cmd.h"
 

	
 
enum {
 
	MAX_BRIDGES = 13
 
};
 

	
 
/** Struct containing information about a single bridge type
src/clear_cmd.cpp
Show inline comments
 
@@ -21,12 +21,13 @@
 
#include "genworld.h"
 
#include "industry.h"
 
#include "water_map.h"
 
#include "tile_cmd.h"
 
#include "vehicle.h"
 
#include "functions.h"
 
#include "economy_func.h"
 

	
 
/*
 
 * In one terraforming command all four corners of a initial tile can be raised/lowered (though this is not available to the player).
 
 * The maximal amount of height modifications is archieved when raising a complete flat land from sea level to MAX_TILE_HEIGHT or vice versa.
 
 * This affects all corners with a manhatten distance smaller than MAX_TILE_HEIGHT to one of the initial 4 corners.
 
 * Their maximal amount is computed to 4 * \sum_{i=1}^{h_max} i  =  2 * h_max * (h_max + 1).
src/economy_func.h
Show inline comments
 
@@ -6,12 +6,13 @@
 
#define ECONOMY_FUNC_H
 

	
 
#include "core/geometry_type.hpp"
 
#include "economy_type.h"
 
#include "cargo_type.h"
 
#include "vehicle_type.h"
 
#include "tile_type.h"
 

	
 
struct Player;
 

	
 
void ResetPriceBaseMultipliers();
 
void SetPriceBaseMultiplier(uint price, byte factor);
 

	
src/functions.h
Show inline comments
 
@@ -5,12 +5,14 @@
 
#ifndef FUNCTIONS_H
 
#define FUNCTIONS_H
 

	
 
#include "core/random_func.hpp"
 
#include "command_type.h"
 
#include "openttd.h"
 
#include "tile_cmd.h"
 
#include "map.h"
 

	
 
/* clear_land.cpp */
 
void DrawHillyLandTile(const TileInfo *ti);
 
void DrawClearLandTile(const TileInfo *ti, byte set);
 
void DrawClearLandFence(const TileInfo *ti);
 
void TileLoopClearHelper(TileIndex tile);
src/genworld.cpp
Show inline comments
 
@@ -16,12 +16,13 @@
 
#include "network/network.h"
 
#include "debug.h"
 
#include "settings.h"
 
#include "heightmap.h"
 
#include "date.h"
 
#include "viewport.h"
 
#include "map.h"
 

	
 
void GenerateClearTile();
 
void GenerateIndustries();
 
void GenerateUnmovables();
 
bool GenerateTowns();
 
void GenerateTrees();
src/gui.h
Show inline comments
 
@@ -6,12 +6,13 @@
 
#define GUI_H
 

	
 
#include "window_type.h"
 
#include "vehicle_type.h"
 
#include "gfx_type.h"
 
#include "economy_type.h"
 
#include "tile_type.h"
 

	
 
/* main_gui.cpp */
 
void CcPlaySound10(bool success, TileIndex tile, uint32 p1, uint32 p2);
 
void CcBuildCanal(bool success, TileIndex tile, uint32 p1, uint32 p2);
 
void CcTerraform(bool success, TileIndex tile, uint32 p1, uint32 p2);
 

	
 
@@ -49,16 +50,18 @@ void ShowBuildAirToolbar();
 
void ShowTerraformToolbar(Window *link = NULL);
 

	
 
/* tgp_gui.cpp */
 
void ShowGenerateLandscape();
 
void ShowHeightmapLoad();
 

	
 
typedef void PlaceProc(TileIndex tile);
 
void PlaceProc_DemolishArea(TileIndex tile);
 
void PlaceProc_LevelLand(TileIndex tile);
 
void PlaceProc_BuyLand(TileIndex tile);
 
bool GUIPlaceProcDragXY(const WindowEvent *e);
 
VARDEF PlaceProc *_place_proc;
 

	
 
/** Drag and drop selection process, or, what to do with an area of land when
 
 * you've selected it. */
 
enum {
 
	DDSP_DEMOLISH_AREA,
 
	DDSP_LEVEL_AREA,
 
@@ -118,11 +121,10 @@ void ShowBuildBridgeWindow(uint start, u
 
void ShowBuildIndustryWindow();
 
void ShowMusicWindow();
 

	
 
/* main_gui.cpp */
 
void HandleOnEditText(const char *str);
 
VARDEF bool _station_show_coverage;
 
VARDEF PlaceProc *_place_proc;
 

	
 
void InitializeGUI();
 

	
 
#endif /* GUI_H */
src/industry.h
Show inline comments
 
@@ -7,12 +7,14 @@
 

	
 
#include "oldpool.h"
 
#include "core/random_func.hpp"
 
#include "newgrf_storage.h"
 
#include "cargo_type.h"
 
#include "economy_type.h"
 
#include "map.h"
 
#include "slope_type.h"
 

	
 
typedef uint16 IndustryGfx;
 
typedef uint8 IndustryType;
 

	
 
enum {
 
	INVALID_INDUSTRY       = 0xFFFF,
src/landscape.h
Show inline comments
 
@@ -3,12 +3,15 @@
 
/** @file landscape.h */
 

	
 
#ifndef LANDSCAPE_H
 
#define LANDSCAPE_H
 

	
 
#include "core/geometry_type.hpp"
 
#include "tile_cmd.h"
 
#include "slope_type.h"
 
#include "direction_type.h"
 

	
 
enum {
 
	SNOW_LINE_MONTHS = 12,
 
	SNOW_LINE_DAYS   = 32,
 
};
 

	
src/map.h
Show inline comments
 
@@ -183,23 +183,12 @@ static inline TileIndexDiff TileDiffXY(i
 
static inline TileIndex TileVirtXY(uint x, uint y)
 
{
 
	return (y >> 4 << MapLogX()) + (x >> 4);
 
}
 

	
 

	
 
enum {
 
	INVALID_TILE = (TileIndex)-1 ///< The very nice invalid tile marker
 
};
 

	
 
enum {
 
	TILE_SIZE   = 16,   ///< Tiles are 16x16 "units" in size
 
	TILE_PIXELS = 32,   ///< a tile is 32x32 pixels
 
	TILE_HEIGHT =  8,   ///< The standard height-difference between tiles on two levels is 8 (z-diff 8)
 
};
 

	
 

	
 
/**
 
 * Get the X component of a tile
 
 * @param tile the tile to get the X component of
 
 * @return the X component
 
 */
 
static inline uint TileX(TileIndex tile)
src/news.h
Show inline comments
 
@@ -4,12 +4,13 @@
 

	
 
#ifndef NEWS_H
 
#define NEWS_H
 

	
 
#include "window_type.h"
 
#include "vehicle_type.h"
 
#include "tile_type.h"
 

	
 
struct NewsItem {
 
	StringID string_id; ///< Message text (sometimes also used for storing other info)
 
	uint16 duration;    ///< Remaining time for showing this news message
 
	Date date;          ///< Date of the news
 
	byte flags;         ///< NewsFlags bits @see NewsFlags
src/openttd.h
Show inline comments
 
@@ -5,17 +5,15 @@
 
#define OPENTTD_H
 

	
 
#ifndef VARDEF
 
#define VARDEF extern
 
#endif
 

	
 
#include "core/enum_type.hpp"
 
#include "strings_type.h"
 

	
 
#include "map.h"
 
#include "slope_type.h"
 

	
 
// Forward declarations of structs.
 
struct Depot;
 
struct Waypoint;
 
struct Station;
 
struct ViewPort;
 
struct Town;
 
@@ -141,21 +139,12 @@ enum TransportType {
 

	
 
/** Define basic enum properties */
 
template <> struct EnumPropsT<TransportType> : MakeEnumPropsT<TransportType, byte, TRANSPORT_BEGIN, TRANSPORT_END, INVALID_TRANSPORT> {};
 
typedef TinyEnumT<TransportType> TransportTypeByte;
 

	
 

	
 
struct TileInfo {
 
	uint x;
 
	uint y;
 
	Slope tileh;
 
	TileIndex tile;
 
	uint z;
 
};
 

	
 

	
 
/* Display Options */
 
enum {
 
	DO_SHOW_TOWN_NAMES    = 0,
 
	DO_SHOW_STATION_NAMES = 1,
 
	DO_SHOW_SIGNS         = 2,
 
	DO_FULL_ANIMATION     = 3,
 
@@ -213,27 +202,18 @@ struct GameDifficulty {
 
	GDType economy;
 
	GDType line_reverse_mode;
 
	GDType disasters;
 
	GDType town_council_tolerance; // minimum required town ratings to be allowed to demolish stuff
 
};
 

	
 
struct TileDesc {
 
	StringID str;
 
	Owner owner;
 
	Date build_date;
 
	uint64 dparam[2];
 
};
 

	
 
struct ViewportSign {
 
	int32 left;
 
	int32 top;
 
	byte width_1, width_2;
 
};
 

	
 
typedef void PlaceProc(TileIndex tile);
 

	
 
enum {
 
	SORT_ASCENDING  = 0,
 
	SORT_DESCENDING = 1,
 
	SORT_BY_DATE    = 0,
 
	SORT_BY_NAME    = 2
 
};
src/order.h
Show inline comments
 
@@ -6,12 +6,13 @@
 
#define ORDER_H
 

	
 
#include "oldpool.h"
 
#include "core/bitmath_func.hpp"
 
#include "cargo_type.h"
 
#include "vehicle_type.h"
 
#include "tile_type.h"
 

	
 
enum {
 
	INVALID_VEH_ORDER_ID = 0xFF,
 
};
 

	
 
static const OrderID INVALID_ORDER = 0xFFFF;
src/rail.h
Show inline comments
 
@@ -9,12 +9,13 @@
 
#include "track_type.h"
 
#include "vehicle_type.h"
 
#include "gfx_type.h"
 
#include "core/bitmath_func.hpp"
 
#include "economy_func.h"
 
#include "variables.h"
 
#include "tile_cmd.h"
 

	
 
/** This struct contains all the info that is needed to draw and construct tracks.
 
 */
 
struct RailtypeInfo {
 
	/** Struct containing the main sprites. @note not all sprites are listed, but only
 
	 *  the ones used directly in the code */
 
@@ -94,48 +95,12 @@ struct RailtypeInfo {
 
/** these are the maximums used for updating signal blocks, and checking if a depot is in a pbs block */
 
enum {
 
	NUM_SSD_ENTRY = 256, ///< max amount of blocks
 
	NUM_SSD_STACK =  32, ///< max amount of blocks to check recursively
 
};
 

	
 
/*
 
 * Functions to map tracks to the corresponding bits in the signal
 
 * presence/status bytes in the map. You should not use these directly, but
 
 * wrapper functions below instead. XXX: Which are these?
 
 */
 

	
 
/**
 
 * Maps a trackdir to the bit that stores its status in the map arrays, in the
 
 * direction along with the trackdir.
 
 */
 
static inline byte SignalAlongTrackdir(Trackdir trackdir)
 
{
 
	extern const byte _signal_along_trackdir[TRACKDIR_END];
 
	return _signal_along_trackdir[trackdir];
 
}
 

	
 
/**
 
 * Maps a trackdir to the bit that stores its status in the map arrays, in the
 
 * direction against the trackdir.
 
 */
 
static inline byte SignalAgainstTrackdir(Trackdir trackdir)
 
{
 
	extern const byte _signal_against_trackdir[TRACKDIR_END];
 
	return _signal_against_trackdir[trackdir];
 
}
 

	
 
/**
 
 * Maps a Track to the bits that store the status of the two signals that can
 
 * be present on the given track.
 
 */
 
static inline byte SignalOnTrack(Track track)
 
{
 
	extern const byte _signal_on_track[TRACK_END];
 
	return _signal_on_track[track];
 
}
 

	
 

	
 

	
 
/**
 
 * Returns a pointer to the Railtype information for a given railtype
 
 * @param railtype the rail type which the information is requested for
 
 * @return The pointer to the RailtypeInfo
src/rail_map.h
Show inline comments
 
@@ -2,15 +2,16 @@
 

	
 
/** @file rail_map.h Hides the direct accesses to the map array with map accessors */
 

	
 
#ifndef RAIL_MAP_H
 
#define RAIL_MAP_H
 

	
 
#include "rail_type.h"
 
#include "signal_func.h"
 
#include "direction_func.h"
 
#include "track_func.h"
 
#include "rail.h"
 
#include "tile_map.h"
 

	
 

	
 
/** Different types of Rail-related tiles */
 
enum RailTileType {
 
	RAIL_TILE_NORMAL   = 0, ///< Normal rail tile without signals
src/road_func.h
Show inline comments
 
@@ -4,12 +4,13 @@
 

	
 
#ifndef ROAD_FUNC_H
 
#define ROAD_FUNC_H
 

	
 
#include "core/bitmath_func.hpp"
 
#include "road_type.h"
 
#include "direction_func.h"
 

	
 
/**
 
 * Whether the given roadtype is valid.
 
 * @param rt the roadtype to check for validness
 
 * @return true if and only if valid
 
 */
src/road_internal.h
Show inline comments
 
@@ -2,12 +2,14 @@
 

	
 
/** @file road_internal.h Functions used internally by the roads. */
 

	
 
#ifndef ROAD_INTERNAL_H
 
#define ROAD_INTERNAL_H
 

	
 
#include "tile_cmd.h"
 

	
 
/**
 
 * Clean up unneccesary RoadBits of a planed tile.
 
 * @param tile current tile
 
 * @param org_rb planed RoadBits
 
 * @return optimised RoadBits
 
 */
src/screenshot.cpp
Show inline comments
 
@@ -14,12 +14,13 @@
 
#include "blitter/factory.hpp"
 
#include "fileio.h"
 
#include "strings_func.h"
 
#include "zoom_func.h"
 
#include "core/alloc_func.hpp"
 
#include "core/endian_func.hpp"
 
#include "map.h"
 

	
 
char _screenshot_format_name[8];
 
uint _num_screenshot_formats;
 
uint _cur_screenshot_format;
 
ScreenshotType current_screenshot_type;
 

	
src/signal_func.h
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/** @file signal_func.h Functions related to signals. */
 

	
 
#ifndef SIGNAL_FUNC_H
 
#define SIGNAL_FUNC_H
 

	
 
#include "track_type.h"
 

	
 
/**
 
 * Maps a trackdir to the bit that stores its status in the map arrays, in the
 
 * direction along with the trackdir.
 
 */
 
static inline byte SignalAlongTrackdir(Trackdir trackdir)
 
{
 
	extern const byte _signal_along_trackdir[TRACKDIR_END];
 
	return _signal_along_trackdir[trackdir];
 
}
 

	
 
/**
 
 * Maps a trackdir to the bit that stores its status in the map arrays, in the
 
 * direction against the trackdir.
 
 */
 
static inline byte SignalAgainstTrackdir(Trackdir trackdir)
 
{
 
	extern const byte _signal_against_trackdir[TRACKDIR_END];
 
	return _signal_against_trackdir[trackdir];
 
}
 

	
 
/**
 
 * Maps a Track to the bits that store the status of the two signals that can
 
 * be present on the given track.
 
 */
 
static inline byte SignalOnTrack(Track track)
 
{
 
	extern const byte _signal_on_track[TRACK_END];
 
	return _signal_on_track[track];
 
}
 

	
 
#endif /* SIGNAL_FUNC_H */
src/slope_func.h
Show inline comments
 
@@ -5,12 +5,13 @@
 
#ifndef SLOPE_FUNC_H
 
#define SLOPE_FUNC_H
 

	
 
#include "core/math_func.hpp"
 
#include "slope_type.h"
 
#include "direction_type.h"
 
#include "tile_type.h"
 

	
 
/**
 
 * Rangecheck for Corner enumeration.
 
 *
 
 * @param corner A #Corner.
 
 * @return true iff corner is in a valid range.
src/sound.h
Show inline comments
 
@@ -4,12 +4,13 @@
 

	
 
#ifndef SOUND_H
 
#define SOUND_H
 

	
 
#include "core/enum_type.hpp"
 
#include "vehicle_type.h"
 
#include "tile_type.h"
 

	
 
struct MusicFileSettings {
 
	byte playlist;
 
	byte music_vol;
 
	byte effect_vol;
 
	byte custom_1[33];
src/station_map.h
Show inline comments
 
@@ -5,12 +5,13 @@
 
#ifndef STATION_MAP_H
 
#define STATION_MAP_H
 

	
 
#include "rail_map.h"
 
#include "road_map.h"
 
#include "station.h"
 
#include "rail.h"
 

	
 
typedef byte StationGfx;
 

	
 
static inline StationID GetStationIndex(TileIndex t)
 
{
 
	assert(IsTileType(t, MP_STATION));
src/tile_cmd.h
Show inline comments
 
@@ -3,15 +3,17 @@
 
/** @file tile_cmd.h Generic 'commands' that can be performed on all tiles. */
 

	
 
#ifndef TILE_CMD_H
 
#define TILE_CMD_H
 

	
 
#include "slope_type.h"
 
#include "tile_type.h"
 
#include "command_type.h"
 
#include "vehicle_type.h"
 
#include "cargo_type.h"
 
#include "strings_type.h"
 

	
 
/** The returned bits of VehicleEnterTile. */
 
enum VehicleEnterTileStatus {
 
	VETS_ENTERED_STATION  = 1, ///< The vehicle entered a station
 
	VETS_ENTERED_WORMHOLE = 2, ///< The vehicle either entered a bridge, tunnel or depot tile (this includes the last tile of the bridge/tunnel)
 
	VETS_CANNOT_ENTER     = 3, ///< The vehicle cannot enter the tile
 
@@ -28,12 +30,27 @@ enum VehicleEnterTileStatus {
 
	VETSB_ENTERED_STATION  = 1 << VETS_ENTERED_STATION,  ///< The vehicle entered a station
 
	VETSB_ENTERED_WORMHOLE = 1 << VETS_ENTERED_WORMHOLE, ///< The vehicle either entered a bridge, tunnel or depot tile (this includes the last tile of the bridge/tunnel)
 
	VETSB_CANNOT_ENTER     = 1 << VETS_CANNOT_ENTER,     ///< The vehicle cannot enter the tile
 
};
 
DECLARE_ENUM_AS_BIT_SET(VehicleEnterTileStatus);
 

	
 
struct TileInfo {
 
	uint x;
 
	uint y;
 
	Slope tileh;
 
	TileIndex tile;
 
	uint z;
 
};
 

	
 
struct TileDesc {
 
	StringID str;
 
	Owner owner;
 
	Date build_date;
 
	uint64 dparam[2];
 
};
 

	
 
typedef void DrawTileProc(TileInfo *ti);
 
typedef uint GetSlopeZProc(TileIndex tile, uint x, uint y);
 
typedef CommandCost ClearTileProc(TileIndex tile, byte flags);
 
typedef void GetAcceptedCargoProc(TileIndex tile, AcceptedCargo res);
 
typedef void GetTileDescProc(TileIndex tile, TileDesc *td);
 

	
src/tile_type.h
Show inline comments
 
@@ -4,17 +4,21 @@
 

	
 
#ifndef TILE_TYPE_H
 
#define TILE_TYPE_H
 

	
 
#include "core/enum_type.hpp"
 

	
 
/** Maximum allowed tile height */
 
#define MAX_TILE_HEIGHT 15
 
enum {
 
	TILE_SIZE   = 16,   ///< Tiles are 16x16 "units" in size
 
	TILE_PIXELS = 32,   ///< a tile is 32x32 pixels
 
	TILE_HEIGHT =  8,   ///< The standard height-difference between tiles on two levels is 8 (z-diff 8)
 

	
 
/** Maximum allowed snowline height */
 
#define MAX_SNOWLINE_HEIGHT (MAX_TILE_HEIGHT - 2)
 
	MAX_TILE_HEIGHT     = 15,                    ///< Maximum allowed tile height
 
	MAX_SNOWLINE_HEIGHT = (MAX_TILE_HEIGHT - 2), ///< Maximum allowed snowline height
 
};
 

	
 

	
 
/**
 
 * The different type of a tile.
 
 *
 
 * Each tile belongs to one type, according whatever is build on it.
 
 *
 
@@ -48,7 +52,12 @@ enum TropicZone {
 

	
 
/**
 
 * The index/ID of a Tile.
 
 */
 
typedef uint32 TileIndex;
 

	
 
/**
 
 * The very nice invalid tile marker
 
 */
 
static const TileIndex INVALID_TILE = (TileIndex)-1;
 

	
 
#endif /* TILE_TYPE_H */
src/town.h
Show inline comments
 
@@ -5,12 +5,13 @@
 
#ifndef TOWN_H
 
#define TOWN_H
 

	
 
#include "oldpool.h"
 
#include "core/random_func.hpp"
 
#include "cargo_type.h"
 
#include "tile_type.h"
 

	
 
enum {
 
	HOUSE_NO_CLASS   = 0,
 
	NEW_HOUSE_OFFSET = 110,
 
	HOUSE_MAX        = 512,
 
	INVALID_TOWN     = 0xFFFF,
src/variables.h
Show inline comments
 
@@ -4,12 +4,14 @@
 

	
 
#ifndef VARIABLES_H
 
#define VARIABLES_H
 

	
 
#include "yapf/yapf_settings.h"
 
#include "openttd.h"
 
#include "tile_type.h"
 
#include "strings_type.h"
 

	
 
/* ********* START OF SAVE REGION */
 

	
 
struct GameOptions {
 
	GameDifficulty diff;
 
	byte diff_level;
src/vehicle.h
Show inline comments
 
@@ -7,12 +7,13 @@
 

	
 
#include "vehicle_type.h"
 
#include "track_type.h"
 
#include "rail_type.h"
 
#include "road_type.h"
 
#include "cargo_type.h"
 
#include "direction_type.h"
 
#include "window_type.h"
 
#include "gfx_type.h"
 
#include "command_type.h"
 
#include "oldpool.h"
 
#include "order.h"
 
#include "cargopacket.h"
src/viewport.h
Show inline comments
 
@@ -6,12 +6,13 @@
 
#define VIEWPORT_H
 

	
 
#include "zoom_type.h"
 
#include "window_type.h"
 
#include "vehicle_type.h"
 
#include "gfx_func.h"
 
#include "gui.h"
 

	
 
struct ViewPort {
 
	int left,top;                       // screen coordinates for the viewport
 
	int width, height;                  // screen width/height for the viewport
 

	
 
	int virtual_left, virtual_top;      // virtual coordinates
src/waypoint.cpp
Show inline comments
 
@@ -7,12 +7,13 @@
 

	
 
#include "command_func.h"
 
#include "landscape.h"
 
#include "map.h"
 
#include "order.h"
 
#include "rail_map.h"
 
#include "rail.h"
 
#include "bridge_map.h"
 
#include "saveload.h"
 
#include "station.h"
 
#include "town.h"
 
#include "waypoint.h"
 
#include "variables.h"
 
@@ -24,12 +25,13 @@
 
#include "string.h"
 
#include "misc/autoptr.hpp"
 
#include "strings_func.h"
 
#include "viewport.h"
 
#include "functions.h"
 
#include "window_func.h"
 
#include "economy_func.h"
 

	
 
enum {
 
	MAX_WAYPOINTS_PER_TOWN = 64,
 
};
 

	
 
DEFINE_OLD_POOL_GENERIC(Waypoint, Waypoint)
0 comments (0 inline, 0 general)