mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-11 13:10:45 +00:00
ab7da117e0
This means that if you start OpenTTD with "-c" to indicate another location to store files, it can still read the content you already downloaded from your PERSONAL_DIR. This folder is, however, read-only. This is useful for situations where you downloaded OpenGFX via the content-service, but want to run the regression or want to run with a clean configuration. With this change, you no longer need to download OpenGFX again.
151 lines
5.9 KiB
C
151 lines
5.9 KiB
C
/*
|
|
* This file is part of OpenTTD.
|
|
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
|
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/** @file fileio_type.h Types for Standard In/Out file operations */
|
|
|
|
#ifndef FILEIO_TYPE_H
|
|
#define FILEIO_TYPE_H
|
|
|
|
#include "core/enum_type.hpp"
|
|
|
|
/** The different abstract types of files that the system knows about. */
|
|
enum AbstractFileType {
|
|
FT_NONE, ///< nothing to do
|
|
FT_SAVEGAME, ///< old or new savegame
|
|
FT_SCENARIO, ///< old or new scenario
|
|
FT_HEIGHTMAP, ///< heightmap file
|
|
|
|
FT_INVALID = 7, ///< Invalid or unknown file type.
|
|
FT_NUMBITS = 3, ///< Number of bits required for storing a #AbstractFileType value.
|
|
FT_MASK = (1 << FT_NUMBITS) - 1, ///< Bitmask for extracting an abstract file type.
|
|
};
|
|
|
|
/** Kinds of files in each #AbstractFileType. */
|
|
enum DetailedFileType {
|
|
/* Save game and scenario files. */
|
|
DFT_OLD_GAME_FILE, ///< Old save game or scenario file.
|
|
DFT_GAME_FILE, ///< Save game or scenario file.
|
|
|
|
/* Heightmap files. */
|
|
DFT_HEIGHTMAP_BMP, ///< BMP file.
|
|
DFT_HEIGHTMAP_PNG, ///< PNG file.
|
|
|
|
/* fios 'files' */
|
|
DFT_FIOS_DRIVE, ///< A drive (letter) entry.
|
|
DFT_FIOS_PARENT, ///< A parent directory entry.
|
|
DFT_FIOS_DIR, ///< A directory entry.
|
|
DFT_FIOS_DIRECT, ///< Direct filename.
|
|
|
|
DFT_INVALID = 255, ///< Unknown or invalid file.
|
|
};
|
|
|
|
/** Operation performed on the file. */
|
|
enum SaveLoadOperation {
|
|
SLO_CHECK, ///< Load file for checking and/or preview.
|
|
SLO_LOAD, ///< File is being loaded.
|
|
SLO_SAVE, ///< File is being saved.
|
|
|
|
SLO_INVALID, ///< Unknown file operation.
|
|
};
|
|
|
|
/**
|
|
* Construct an enum value for #FiosType as a combination of an abstract and a detailed file type.
|
|
* @param abstract Abstract file type (one of #AbstractFileType).
|
|
* @param detailed Detailed file type (one of #DetailedFileType).
|
|
*/
|
|
#define MAKE_FIOS_TYPE(abstract, detailed) ((abstract) | ((detailed) << FT_NUMBITS))
|
|
|
|
/**
|
|
* Elements of a file system that are recognized.
|
|
* Values are a combination of #AbstractFileType and #DetailedFileType.
|
|
* @see GetAbstractFileType GetDetailedFileType
|
|
*/
|
|
enum FiosType {
|
|
FIOS_TYPE_DRIVE = MAKE_FIOS_TYPE(FT_NONE, DFT_FIOS_DRIVE),
|
|
FIOS_TYPE_PARENT = MAKE_FIOS_TYPE(FT_NONE, DFT_FIOS_PARENT),
|
|
FIOS_TYPE_DIR = MAKE_FIOS_TYPE(FT_NONE, DFT_FIOS_DIR),
|
|
FIOS_TYPE_DIRECT = MAKE_FIOS_TYPE(FT_NONE, DFT_FIOS_DIRECT),
|
|
|
|
FIOS_TYPE_FILE = MAKE_FIOS_TYPE(FT_SAVEGAME, DFT_GAME_FILE),
|
|
FIOS_TYPE_OLDFILE = MAKE_FIOS_TYPE(FT_SAVEGAME, DFT_OLD_GAME_FILE),
|
|
FIOS_TYPE_SCENARIO = MAKE_FIOS_TYPE(FT_SCENARIO, DFT_GAME_FILE),
|
|
FIOS_TYPE_OLD_SCENARIO = MAKE_FIOS_TYPE(FT_SCENARIO, DFT_OLD_GAME_FILE),
|
|
FIOS_TYPE_PNG = MAKE_FIOS_TYPE(FT_HEIGHTMAP, DFT_HEIGHTMAP_PNG),
|
|
FIOS_TYPE_BMP = MAKE_FIOS_TYPE(FT_HEIGHTMAP, DFT_HEIGHTMAP_BMP),
|
|
|
|
FIOS_TYPE_INVALID = MAKE_FIOS_TYPE(FT_INVALID, DFT_INVALID),
|
|
};
|
|
|
|
#undef MAKE_FIOS_TYPE
|
|
|
|
/**
|
|
* Extract the abstract file type from a #FiosType.
|
|
* @param fios_type Type to query.
|
|
* @return The Abstract file type of the \a fios_type.
|
|
*/
|
|
inline AbstractFileType GetAbstractFileType(FiosType fios_type)
|
|
{
|
|
return static_cast<AbstractFileType>(fios_type & FT_MASK);
|
|
}
|
|
|
|
/**
|
|
* Extract the detailed file type from a #FiosType.
|
|
* @param fios_type Type to query.
|
|
* @return The Detailed file type of the \a fios_type.
|
|
*/
|
|
inline DetailedFileType GetDetailedFileType(FiosType fios_type)
|
|
{
|
|
return static_cast<DetailedFileType>(fios_type >> FT_NUMBITS);
|
|
}
|
|
|
|
/**
|
|
* The different kinds of subdirectories OpenTTD uses
|
|
*/
|
|
enum Subdirectory {
|
|
BASE_DIR, ///< Base directory for all subdirectories
|
|
SAVE_DIR, ///< Base directory for all savegames
|
|
AUTOSAVE_DIR, ///< Subdirectory of save for autosaves
|
|
SCENARIO_DIR, ///< Base directory for all scenarios
|
|
HEIGHTMAP_DIR, ///< Subdirectory of scenario for heightmaps
|
|
OLD_GM_DIR, ///< Old subdirectory for the music
|
|
OLD_DATA_DIR, ///< Old subdirectory for the data.
|
|
BASESET_DIR, ///< Subdirectory for all base data (base sets, intro game)
|
|
NEWGRF_DIR, ///< Subdirectory for all NewGRFs
|
|
LANG_DIR, ///< Subdirectory for all translation files
|
|
AI_DIR, ///< Subdirectory for all %AI files
|
|
AI_LIBRARY_DIR,///< Subdirectory for all %AI libraries
|
|
GAME_DIR, ///< Subdirectory for all game scripts
|
|
GAME_LIBRARY_DIR, ///< Subdirectory for all GS libraries
|
|
SCREENSHOT_DIR, ///< Subdirectory for all screenshots
|
|
NUM_SUBDIRS, ///< Number of subdirectories
|
|
NO_DIRECTORY, ///< A path without any base directory
|
|
};
|
|
|
|
/**
|
|
* Types of searchpaths OpenTTD might use
|
|
*/
|
|
enum Searchpath : unsigned {
|
|
SP_FIRST_DIR,
|
|
SP_WORKING_DIR = SP_FIRST_DIR, ///< Search in the working directory
|
|
#ifdef USE_XDG
|
|
SP_PERSONAL_DIR_XDG, ///< Search in the personal directory from the XDG specification
|
|
#endif
|
|
SP_PERSONAL_DIR, ///< Search in the personal directory
|
|
SP_SHARED_DIR, ///< Search in the shared directory, like 'Shared Files' under Windows
|
|
SP_BINARY_DIR, ///< Search in the directory where the binary resides
|
|
SP_INSTALLATION_DIR, ///< Search in the installation directory
|
|
SP_APPLICATION_BUNDLE_DIR, ///< Search within the application bundle
|
|
SP_AUTODOWNLOAD_DIR, ///< Search within the autodownload directory
|
|
SP_AUTODOWNLOAD_PERSONAL_DIR, ///< Search within the autodownload directory located in the personal directory
|
|
SP_AUTODOWNLOAD_PERSONAL_DIR_XDG, ///< Search within the autodownload directory located in the personal directory (XDG variant)
|
|
NUM_SEARCHPATHS
|
|
};
|
|
|
|
DECLARE_POSTFIX_INCREMENT(Searchpath)
|
|
|
|
#endif /* FILEIO_TYPE_H */
|