Merge commit 'f5a50a874f5d074ddb0644eb4e8b5e9b029adf08' into jgrpp

# Conflicts:
#	src/fileio.cpp
#	src/fileio_func.h
#	src/industry_cmd.cpp
#	src/ini.cpp
#	src/openttd.cpp
#	src/os/windows/win32_main.cpp
#	src/settingsgen/settingsgen.cpp
#	src/strgen/strgen.cpp
#	src/strings.cpp
Jonathan G Rennison 3 weeks ago
commit feeea069ec

@ -610,7 +610,7 @@ DEF_CONSOLE_CMD(ConRemove)
_console_file_list_savegame.ValidateFileList();
const FiosItem *item = _console_file_list_savegame.FindItem(file);
if (item != nullptr) {
if (unlink(item->name.c_str()) != 0) {
if (!FioRemove(item->name)) {
IConsolePrint(CC_ERROR, "Failed to delete '{}'.", item->name);
}
} else {

@ -20,12 +20,6 @@
#include <string>
#include <sstream>
#ifdef _WIN32
# include <windows.h>
#else
# include <unistd.h>
#endif /* _WIN32 */
#include "safeguards.h"
std::string _ini_videodriver; ///< The video driver a stored in the configuration file.
@ -130,7 +124,7 @@ bool DriverFactoryBase::SelectDriverImpl(const std::string &name, Driver::Type t
* hardware acceleration. */
auto filename = FioFindFullPath(BASE_DIR, HWACCELERATION_TEST_FILE);
if (!filename.empty()) {
unlink(filename.c_str());
FioRemove(filename);
Debug(driver, 1, "Probing {} driver '{}' skipped due to earlier crash", GetDriverTypeName(type), d->name);
@ -217,7 +211,7 @@ void DriverFactoryBase::MarkVideoDriverOperational()
* and as we are operational now, remove the hardware acceleration
* test-file. */
auto filename = FioFindFullPath(BASE_DIR, HWACCELERATION_TEST_FILE);
if (!filename.empty()) unlink(filename.c_str());
if (!filename.empty()) FioRemove(filename);
}
/**

@ -362,6 +362,21 @@ void FioCreateDirectory(const std::string &name)
#endif
}
/**
* Remove a file.
* @param filename Filename to remove.
* @return true iff the file was removed.
*/
bool FioRemove(const std::string &filename)
{
if (unlink(filename.c_str()) != 0) {
Debug(misc, 0, "Removing {} failed: {}", filename, StrErrorDumper().GetLast());
return false;
}
return true;
}
/**
* Renames a file from oldname to newname.
* @param oldname file name to rename from

@ -22,6 +22,7 @@ std::string FioFindFullPath(Subdirectory subdir, const std::string &filename);
std::string FioGetDirectory(Searchpath sp, Subdirectory subdir);
std::string FioFindDirectory(Subdirectory subdir);
void FioCreateDirectory(const std::string &name);
bool FioRemove(const std::string &filename);
bool FioRenameFile(const std::string &oldname, const std::string &newname);
const char *FiosGetScreenshotDir();

@ -251,8 +251,7 @@ std::string FiosMakeHeightmapName(const char *name)
*/
bool FiosDelete(const char *name)
{
std::string filename = FiosMakeSavegameName(name);
return unlink(filename.c_str()) == 0;
return FioRemove(FiosMakeSavegameName(name));
}
typedef FiosType fios_getlist_callback_proc(SaveLoadOperation fop, const std::string &filename, const char *ext, char *title, const char *last);

@ -1916,7 +1916,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type,
/* Clear all input cargo types */
for (size_t j = 0; j < i->accepts_cargo.size(); j++) i->accepts_cargo[j] = INVALID_CARGO;
/* Query actual types */
uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? (uint)std::size(i->accepts_cargo) : 3;
uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? INDUSTRY_NUM_INPUTS : 3;
for (uint j = 0; j < maxcargoes; j++) {
uint16_t res = GetIndustryCallback(CBID_INDUSTRY_INPUT_CARGO_TYPES, j, 0, i, type, INVALID_TILE);
if (res == CALLBACK_FAILED || GB(res, 0, 8) == UINT8_MAX) break;
@ -1948,7 +1948,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type,
/* Clear all output cargo types */
for (size_t j = 0; j < i->produced_cargo.size(); j++) i->produced_cargo[j] = INVALID_CARGO;
/* Query actual types */
uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? (uint)std::size(i->produced_cargo) : 2;
uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? INDUSTRY_NUM_OUTPUTS : 2;
for (uint j = 0; j < maxcargoes; j++) {
uint16_t res = GetIndustryCallback(CBID_INDUSTRY_OUTPUT_CARGO_TYPES, j, 0, i, type, INVALID_TILE);
if (res == CALLBACK_FAILED || GB(res, 0, 8) == UINT8_MAX) break;

@ -450,12 +450,14 @@ public:
{
switch (widget) {
case WID_DPI_MATRIX_WIDGET: {
Dimension d = GetStringBoundingBox(STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES);
SetDParamMaxDigits(0, 4);
Dimension count = GetStringBoundingBox(STR_JUST_COMMA, FS_SMALL);
Dimension d{};
for (const auto &indtype : this->list) {
d = maxdim(d, GetStringBoundingBox(GetIndustrySpec(indtype)->name));
}
resize.height = std::max<uint>(this->legend.height, GetCharacterHeight(FS_NORMAL)) + padding.height;
d.width += this->legend.width + WidgetDimensions::scaled.hsep_wide + padding.width;
resize.height = std::max<uint>({this->legend.height, d.height, count.height}) + padding.height;
d.width += this->legend.width + WidgetDimensions::scaled.hsep_wide + WidgetDimensions::scaled.hsep_normal + count.width + padding.width;
d.height = 5 * resize.height;
size = maxdim(size, d);
break;

@ -278,7 +278,7 @@ STR_TOOLTIP_SORT_CRITERIA :{BLACK}Escolher
STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Escolher o critério de seleção
STR_BUTTON_SORT_BY :{BLACK}Ordenar por
STR_BUTTON_CATCHMENT :{BLACK}Cobertura
STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar/Ocultar a área de cobertura
STR_TOOLTIP_CATCHMENT :{BLACK}Mostrar área de cobertura
STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - arraste isto para mover a janela
@ -533,8 +533,8 @@ STR_ABOUT_MENU_SCREENSHOT :Captura de tela
STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar taxa de quadros
STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre o 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de sprites
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Mostrar/Ocultar as caixas delimitadoras
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ativar/Desativar coloração dos blocos sujos
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Mostrar/Ocultar caixas delimitadoras
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ativar coloração dos blocos sujos
STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Mostrar/Ocultar contornos dos widgets
###length 31
@ -792,7 +792,7 @@ STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLA
STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Deserto
STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Neve
STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Mostrar/Ocultar nomes das localidades no mapa
STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Mostrar nomes das localidades no mapa
STR_SMALLMAP_CENTER :{BLACK}Centralizar o minimapa na localização atual
STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM})
STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING}
@ -803,7 +803,7 @@ STR_SMALLMAP_ENABLE_ALL :{BLACK}Ativar t
STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Mostrar altitudes
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Não mostrar indústrias no mapa
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Mostrar todas as indústrias no mapa
STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Mostrar/Ocultar mapa de altitudes
STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Mostrar mapa de altitudes
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Mostrar no mapa as propriedades que não pertencem às empresas
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Mostrar no mapa as propriedades de todas as empresas
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Não mostrar as cargas no mapa
@ -2170,7 +2170,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha ao
# Video initalization errors
STR_VIDEO_DRIVER_ERROR :{WHITE}Erro nas configurações de vídeo...
STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nenhuma GPU compatível encontrada. Aceleração por hardware desativada
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... controlador gráfico (GPU) travou o jogo. Aceleração por hardware desativada
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... controlador gráfico travou o jogo. Aceleração por hardware desativada
# Intro window
STR_INTRO_CAPTION :{WHITE}OpenTTD {REV}
@ -2731,15 +2731,15 @@ STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Sair do
# Transparency settings window
STR_TRANSPARENCY_CAPTION :{WHITE}Opções de Transparência
STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Ativar/Desativar transparência para placas. Ctrl+Clique para travar
STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Ativar/Desativar transparência para árvores. Ctrl+Clique para travar
STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Ativar/Desativar transparência para casas. Ctrl+Clique para travar
STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Ativar/Desativar transparência para indústrias. Ctrl+Clique para travar
STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Ativar/Desativar transparência para construções como estações, depósitos e pontos de controle. Ctrl+Clique para travar
STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Ativar/Desativar transparência para pontes. Ctrl+Clique para travar
STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Ativar/Desativar transparência para estruturas como faróis e antenas. Ctrl+Clique para travar
STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Ativar/Desativar transparência para catenária. Ctrl+Clique para travar
STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Ativar/Desativar transparência para textos de carregamento e custo/receita. Ctrl+Clique para travar
STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Ativar transparência para placas. Ctrl+Clique para travar
STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Ativar transparência para árvores. Ctrl+Clique para travar
STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Ativar transparência para casas. Ctrl+Clique para travar
STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Ativar transparência para indústrias. Ctrl+Clique para travar
STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Ativar transparência para construções como estações, depósitos e pontos de controle. Ctrl+Clique para travar
STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Ativar transparência para pontes. Ctrl+Clique para travar
STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Ativar transparência para estruturas como faróis e antenas. Ctrl+Clique para travar
STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Ativar transparência para catenária. Ctrl+Clique para travar
STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Ativar transparência para textos de carregamento e custo/receita. Ctrl+Clique para travar
STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Definir objetos como invisíveis ao invés de transparentes
# Linkgraph legend window
@ -3431,8 +3431,8 @@ STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Uma list
STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Definir parâmetros
STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Mostrar parâmetros
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Ativar/Desativar paleta
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Ativar/Desativar a paleta do NewGRF selecionado.{}Faça isso quando os gráficos deste NewGRF ficarem cor de rosa no jogo
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Comutar paleta
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Comutar a paleta do NewGRF selecionado.{}Faça isso quando os gráficos deste NewGRF parecerem cor-de-rosa no jogo
STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Aplicar modificações
STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Procurar conteúdo em falta online
@ -3598,7 +3598,7 @@ STR_NEWGRF_SCAN_ARCHIVES :Procurando por
# Sign list window
STR_SIGN_LIST_CAPTION :{WHITE}Lista de Placas - {COMMA} Placa{P "" s}
STR_SIGN_LIST_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas
STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar os nomes das placas com a palavra-chave fornecida
STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Considerar correspondência de maiúsculas e minúsculas quando comparar os nomes das placas com a palavra-chave fornecida
# Sign window
STR_EDIT_SIGN_CAPTION :{WHITE}Editar texto da placa
@ -3661,7 +3661,7 @@ STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Campanha public
STR_LOCAL_AUTHORITY_ACTION_LARGE_ADVERTISING_CAMPAIGN :Campanha publicitária grande
STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Financiar a reconstrução das estradas locais
STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Construir estátua do proprietário da empresa
STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financiar novos edifícios
STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financiar novas construções
STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Comprar direitos exclusivos de transporte
STR_LOCAL_AUTHORITY_ACTION_BRIBE :Subornar a autoridade local
###next-name-looks-similar
@ -4013,7 +4013,7 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Enviar para um
STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Clique para parar todos os veículos desta lista
STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Clique para iniciar todos os veículos desta lista
STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Ver lista de modelos de locomotivas disponíveis para este tipo de veículo
STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Ver lista de modelos disponíveis para esta classe de veículo
STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Ordens compartilhadas de {COMMA} Veículo{P "" s}
@ -4261,11 +4261,11 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Mensagem
STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Desenvolvemos um novo modelo de {STRING} - você gostaria de ter um ano de uso exclusivo deste veículo, para que possamos avaliar o desempenho dele antes de ser globalmente disponibilizado?
STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=f}locomotiva ferroviária
STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :{G=f}locomotiva ferroviária elétrica
STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :{G=f}locomotiva elétrica
STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=f}locomotiva monotrilho
STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=f}locomotiva maglev
STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=m}veículo rodoviário
STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=m}veículo
STR_ENGINE_PREVIEW_TRAM_VEHICLE :{G=m}bonde
STR_ENGINE_PREVIEW_AIRCRAFT :{G=f}aeronave
@ -4274,7 +4274,7 @@ STR_ENGINE_PREVIEW_SHIP :{G=f}embarcaç
STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING}
STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING}
STR_ENGINE_PREVIEW_COST_WEIGHT :Custo: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}
STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENCY_LONG} Veloc. máx.: {VELOCITY}
STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENCY_LONG} Velocidade máx.: {VELOCITY}
STR_ENGINE_PREVIEW_SPEED_POWER :Velocidade: {VELOCITY} Potência: {POWER}
STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Veloc.: {VELOCITY} Potência: {POWER} Tração máx.: {FORCE}
STR_ENGINE_PREVIEW_TYPE :Tipo de aeronave: {STRING}
@ -4529,7 +4529,7 @@ STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Adaptar
# Order view
STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Ordens)
STR_ORDERS_TIMETABLE_VIEW :{BLACK}Horários
STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de horários
STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Mudar para visualização de horários
STR_ORDERS_LIST_TOOLTIP :{BLACK}Lista de ordens - clique numa ordem para selecioná-la. Ctrl+Clique para mostrar o destino da ordem
STR_ORDER_INDEX :{COMMA}:{NBSP}
@ -4701,7 +4701,7 @@ STR_INVALID_ORDER :{RED} (Ordem In
# Time table window
STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Horários)
STR_TIMETABLE_ORDER_VIEW :{BLACK}Ordens
STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Mudar para a visualização de ordens
STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Mudar para visualização de ordens
STR_TIMETABLE_TOOLTIP :{BLACK}Horários - clique numa ordem para selecioná-la
@ -4746,7 +4746,7 @@ STR_TIMETABLE_CLEAR_SPEED :{BLACK}Remover
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Apagar a velocidade máxima de viagem da ordem selecionada. Ctrl+Clique para apagar a velocidade de todas as ordens
STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar Contador de Atrasos
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos para o veículo ficar pontual. Ctrl+Clique para reiniciar todo o grupo e, com isso, fazer o veículo mais atrasado ficar no horário e todos os outros ficarem adiantados
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar o contador de atrasos para o veículo ficar pontual. Ctrl+Clique para reiniciar todo o grupo e, com isso, fazer o veículo mais atrasado ficar pontual e todos os outros ficarem adiantados
STR_TIMETABLE_AUTOFILL :{BLACK}Preencher automaticamente
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preencher o horário automaticamente com os valores da próxima viagem. Ctrl+Clique para tentar manter os tempos de espera
@ -4783,7 +4783,7 @@ STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em
STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em
STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}O jogo é pausado quando uma mensagem de registro da IA for igual a esta sequência de caracteres
STR_AI_DEBUG_MATCH_CASE :{BLACK}Diferenciar maiúsculas/minúsculas
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Ativar/Desativar correspondência de maiúsculas/minúsculas quando comparar as mensagens de registro da IA com a sequência de caracteres de parada
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Considerar correspondência de maiúsculas e minúsculas quando comparar as mensagens de registro da IA com a sequência de caracteres de parada
STR_AI_DEBUG_CONTINUE :{BLACK}Continuar
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostrar a saída de depuração desta IA. Ctrl+Clique para abrir em uma nova janela
@ -4900,7 +4900,7 @@ STR_MESSAGE_ESTIMATED_COST :{WHITE}Custo Es
STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Receita Estimada: {CURRENCY_LONG}
# Saveload messages
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda sendo executada,{}por favor aguarde até terminar!
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda sendo executada,{}por favor, aguarde até terminar!
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Salvamento automático falhou
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler a unidade
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao salvar jogo...
@ -4921,7 +4921,7 @@ STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Geraçã
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... não existem localidades neste cenário
STR_ERROR_PNGMAP :{WHITE}Não foi possível carregar paisagem de PNG...
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... arquivo não encontrado
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... arquivo não foi encontrado
STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... não foi possível converter o tipo de imagem. A imagem deve ser PNG de 8 ou 24-bit
STR_ERROR_PNGMAP_MISC :{WHITE}... alguma coisa deu errado (provavelmente arquivo corrompido)
@ -4966,7 +4966,7 @@ STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... limi
STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... limite de plantação de árvores atingido
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Nome deve ser único
STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} no caminho
STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Não é permitido enquanto pausado
STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Não é permitido com o jogo pausado
# Local authority errors
STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}A autoridade local de {TOWN} recusa-se a permitir isso

@ -3488,6 +3488,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vej type
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabel 60+x parameter (hexadecimal)
# Sprite aligner window
STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Justering af sprite: ({STRING}:{NUM})
STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Justering af sprite: Handling 0xA, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Justering af sprite: Handling 0x5, type {HEX}, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Næste sprite
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsæt til næste normale sprite, spring pseudo/omfarvning/font-sprites over og med omløb fra enden til starten
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til sprite
@ -3496,6 +3499,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Forrige
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsæt til den forrige normal sprite, spring pseudo/omfarvning/font-sprites over og omløb fra starten til slutningen
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Repræsentation af den markerede sprite. Justeringen ignoreres når denne sprite tegnes.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flyt spriten rundt for at ændre X- og Y-forskydningen. Ctrl+Klik for at flytte spriten otte enheder af gangen
STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM}
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Forskudt centreret
@ -5832,6 +5836,7 @@ STR_JUST_DATE_ISO :{DATE_ISO}
STR_JUST_STRING :{STRING}
STR_JUST_STRING1 :{STRING}
STR_JUST_STRING2 :{STRING}
STR_JUST_STRING4 :{STRING}
STR_JUST_STRING_STRING :{STRING}{STRING}
STR_JUST_RAW_STRING :{STRING}
STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING}

@ -3488,6 +3488,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Wegtype
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parameter 60+x voor NewGRF-variabele (hexadecimaal)
# Sprite aligner window
STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Sprite uitlijnen: ({STRING}:{NUM})
STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Sprite uitlijnen: actie 0xA, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Sprite uitlijnen: actie 0x5, type {HEX}, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Volgende sprite
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Doorgaan met volgende normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ga naar sprite
@ -3496,6 +3499,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorige s
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Doorgaan met de vorige normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Voorbeeld van de huidige sprite. De uitlijning wordt genegeerd bij het weergeven van deze sprite.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Sprite verplaatsen, dit verandert X en Y offsets. Ctr+klik om de sprite 8 eenheden per keer te verplaatsen.
STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM}
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Op offset gecentreerd
@ -5832,6 +5836,7 @@ STR_JUST_DATE_ISO :{DATE_ISO}
STR_JUST_STRING :{STRING}
STR_JUST_STRING1 :{STRING}
STR_JUST_STRING2 :{STRING}
STR_JUST_STRING4 :{STRING}
STR_JUST_STRING_STRING :{STRING}{STRING}
STR_JUST_RAW_STRING :{STRING}
STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING}

@ -3489,6 +3489,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Type de route
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paramètre de variable NewGRF 60+x (héxadecimal)
# Sprite aligner window
STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Alignement de sprite : ({STRING}:{NUM})
STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Alignement de sprite : Action 0xA, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Alignement de sprite : Action 0x5, type {HEX}, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sprite suivant
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Se rendre au prochain sprite normal, en ignorant les pseudo-sprites et les sprites de recoloration et de police, et en bouclant du dernier vers le premier
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Aller au sprite
@ -3497,6 +3500,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite p
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Se rendre au précédent sprite normal, en ignorant les pseudo-sprites et les sprites de recoloration et de police, et en bouclant du premier vers le dernier
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation du sprite actuellement séléctionné. L'alignement est ignoré lors de l'affichage de ce sprite
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Déplacer le sprite, en modifiant les décalages X et Y. Ctrl-clic pour déplacer le sprite de 8 unités à la fois.
STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM}
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Décalage centré
@ -4899,7 +4903,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Revenu e
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Sauvegarde en cours...{}Veuillez attendre la fin du processus{NBSP}!
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Échec de l'enregistrement automatique
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Impossible d'accéder au disque
STR_ERROR_GAME_SAVE_FAILED :{WHITE}La sauvegarde a échoué...
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Impossible de supprimer le fichier
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Le chargement a échoué...
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erreur interne{NBSP}: {STRING}
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Sauvegarde corrompue {STRING}
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Sauvegarde modifiée avec une version plus récente
@ -5831,6 +5837,7 @@ STR_JUST_DATE_ISO :{DATE_ISO}
STR_JUST_STRING :{STRING}
STR_JUST_STRING1 :{STRING}
STR_JUST_STRING2 :{STRING}
STR_JUST_STRING4 :{STRING}
STR_JUST_STRING_STRING :{STRING}{STRING}
STR_JUST_RAW_STRING :{STRING}
STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING}

@ -1293,7 +1293,7 @@ STR_TERRAIN_TYPE_CUSTOM :Προσαρμ
STR_TERRAIN_TYPE_CUSTOM_VALUE :Προσαρμοσμένο ύψος ({NUM})
###length 4
STR_CITY_APPROVAL_LENIENT :Ήπειο
STR_CITY_APPROVAL_LENIENT :Ήπια
STR_CITY_APPROVAL_TOLERANT :Υπομονετική
STR_CITY_APPROVAL_HOSTILE :Εχθρική
STR_CITY_APPROVAL_PERMISSIVE :Ανεκτική (χωρίς επίδραση σε ενέργειες της εταιρίας)
@ -1381,8 +1381,8 @@ STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Θέτει το
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Ταχύτητα οικοδόμησης: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Περιορίζει το ποσοστό των οικοδομήμσεων από τα ΑΙ
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Καταρρεύσεις οχημάτων: {STRING}
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Ελέγχει πόσο συχνά καταρρέουν τα ανεπαρκώς συντηρημένα οχήματα
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Βλάβες οχημάτων: {STRING}
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Ελέγχει πόσο συχνά τα ανεπαρκώς συντηρημένα οχήματα παθαίνουν βλάβες
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Πολλαπλασιαστής επιδότησης: {STRING}
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Θέστε πόσο ξεπληρώνεται για επιδοτημένες συνδέσεις
@ -1540,7 +1540,7 @@ STR_CONFIG_SETTING_PLANE_SPEED :Παράγον
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Ορίζεται η σχετική ταχύτητα των αεροπλάνων συγκριτικά με τους άλλους τύπους οχημάτων, ώστε να μειώνεται το ποσό του εισοδήματος από μεταφορές με αεροσκάφη
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA}
STR_CONFIG_SETTING_PLANE_CRASHES :Αριθμός των αεροπορικών ατυχημάτων: {STRING}
STR_CONFIG_SETTING_PLANE_CRASHES :Αριθμός αεροπορικών ατυχημάτων: {STRING}
STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Ορίστε την πιθανότητα συντριβής ενός τυχαίου αεροσκάφους.{}* Μεγάλα αεροσκάφη πάντα έχουν ένα ρίσκο συντριβής όταν προσγειώνονται σε μικρά αεροδρόμια.
###length 3
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Κανένα*
@ -1669,10 +1669,10 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Ανωμαλία επιφάνειας (μόνο με TerraGenesis) : {STRING}
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Επιλογή του σχήματος και του αριθμού των λόφων: Τα λεία τοπία έχουν λιγότερους, πιο πλατείς λόφους, ενώ τα τραχιά τοπία έχουν πολλούς και μικρούς λόφους
###length 4
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Πολύ Απαλή
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Απαλή
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Ανώμαλη
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Πολύ Ανώμαλη
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Πολύ Λεία
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Λεία
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Τραχιά
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Πολύ Τραχιά
STR_CONFIG_SETTING_VARIETY :Διανομή ποικιλομορφίας: {STRING}
STR_CONFIG_SETTING_VARIETY_HELPTEXT :Επιλέξτε αν ο χάρτης περιέχει και βουνά και επίπεδες περιοχές. Όσο μεγαλύτερη είναι η ποικιλία, τόσο περισσότερες οι υψομετρικές διαφορές μεταξύ ορεινών και επίπεδων περιοχών
@ -1928,7 +1928,7 @@ STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}Η
###setting-zero-is-special
STR_CONFIG_SETTING_SERVINT_DISABLED :Απενεργοποιημένο
STR_CONFIG_SETTING_NOSERVICE :Απενεργοποίηση επισκευών όταν οι καταρρεύσεις είναι απενεργοποιημένες: {STRING}
STR_CONFIG_SETTING_NOSERVICE :Απενεργοποίηση επισκευών όταν οι βλάβες είναι απενεργοποιημένες: {STRING}
STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Όταν είναι ενεργοποιημένη, τα οχήματα δεν συντηρούνται όταν δεν είναι δυνατό να χαλάσουν
STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Ποινή ταχύτητας φόρτωσης για τρένα που είναι μεγαλύτερα από τον σταθμό: {STRING}
@ -4541,7 +4541,7 @@ STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Κέρδ
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Φετινό κέρδος: {LTBLUE}{CURRENCY_LONG} (Περσινό: {CURRENCY_LONG}) {BLACK}Ελάχιστη απόδοση: {LTBLUE}{POWER_TO_WEIGHT}
STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Κέρδος αυτή την περίοδο: {LTBLUE}{CURRENCY_LONG} (τελευταία περίοδο: {CURRENCY_LONG})
STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Κέρδος αυτή την περίοδο: {LTBLUE}{CURRENCY_LONG} (τελευταία περίοδο: {CURRENCY_LONG}) {BLACK}Ελάχ. απόδοση: {LTBLUE}{POWER_TO_WEIGHT}
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Αξιοπιστία: {LTBLUE}{COMMA}% {BLACK}Καταρρεύσεις μετά από την τελευταία επισκευή: {LTBLUE}{COMMA}
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Αξιοπιστία: {LTBLUE}{COMMA}% {BLACK}Βλάβες μετά από την τελευταία επισκευή: {LTBLUE}{COMMA}
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Κατασκευή: {LTBLUE}{NUM}{BLACK} Αξία: {LTBLUE}{CURRENCY_LONG}
STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Χωρητικότητα: {LTBLUE}Τίποτα{STRING}

@ -692,7 +692,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Pašalinti visa
STR_ABOUT_MENU_LAND_BLOCK_INFO :Žemės ploto informacija
STR_ABOUT_MENU_HELP :Pagalba ir gidai
STR_ABOUT_MENU_TOGGLE_CONSOLE :Perjungti konsolę
STR_ABOUT_MENU_AI_DEBUG :AI / GameScript derinimas
STR_ABOUT_MENU_AI_DEBUG :DI / „GameScript“ derinimas
STR_ABOUT_MENU_SCREENSHOT :Ekrano nuotrauka
STR_ABOUT_MENU_SHOW_FRAMERATE :Kadrų dažniai
STR_ABOUT_MENU_ABOUT_OPENTTD :Apie „OpenTTD“
@ -1095,7 +1095,13 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Įkelti
STR_GAME_OPTIONS_CAPTION :{WHITE}Pagrindinės nuostatos
STR_GAME_OPTIONS_VOLUME :Tūris
STR_GAME_OPTIONS_VOLUME_0 :0%
STR_GAME_OPTIONS_VOLUME_25 :25%
STR_GAME_OPTIONS_VOLUME_50 :50%
STR_GAME_OPTIONS_VOLUME_75 :75%
STR_GAME_OPTIONS_VOLUME_100 :100%
STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valiuta
STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valiutos pasirinkimas
@ -1151,6 +1157,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Pasirink
# Autosave dropdown
###length 5
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Išjungta
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Kas 10min.
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Kas 30min.
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Kas 60min.
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Kas 120min.
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Kalba
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Pasirinkite aplinkos kalbą
@ -1789,6 +1799,7 @@ STR_CONFIG_SETTING_LOADING_INDICATORS :Rodyti krovos i
STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Krovos indikatoriai rodomi virš pakraunamų bei iškraunamų tansporto priemonių
###length 3
STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dienos
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Rodyti arvykimą ir išvykimą tvarkaraščiuose: {STRING}
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Tvarkaraščiuose rodyti numatomas atvykimo ir išvykimo datas
@ -2302,10 +2313,12 @@ STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Rodyti a
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Rodyti laivų spalvas
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Rodyti lėktuvų spalvas
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Rodyti traukinių grupių spalvas
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Rodyti laivų grupių spalvas
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Pasirinkite pirminę spalvą pasirinktai schemai. Spustelėjus laikant nuspaustą Ctrl klavišą, pasirinkta spava bus nustatyta visoms schemoms.
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Pasirinkite antrinę spalvą pasirinktai schemai. Spustelėjus laikant nuspaustą Ctrl klavišą, pasirinkta spava bus nustatyta visoms schemoms.
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Pasirinkite objektą, kurio spalvas norite pakeisti. Spragsint laikant nuspaustą Ctrl klavišą, galėsite pasirinkti iškart kelis objektus.
STR_LIVERY_TRAIN_GROUP_EMPTY :Nėra nustatytų traukinių grupių
STR_LIVERY_SHIP_GROUP_EMPTY :Nėra nustatytų laivų grupių
###length 23
STR_LIVERY_DEFAULT :Numatytosios spalvos
@ -3290,6 +3303,7 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Sumažin
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
STR_MAPGEN_TERRAIN_TYPE :{BLACK}Vietovės tipas:
STR_MAPGEN_SEA_LEVEL :{BLACK}Jūros lygis:
STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Pasirinkti jūros lygį
STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Upių kiekis:
STR_MAPGEN_SMOOTHNESS :{BLACK}Jautrumas:
STR_MAPGEN_VARIETY :{BLACK}Įvairovės paskirstymas:
@ -4700,7 +4714,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Pasirink
# AI debug window
STR_AI_DEBUG :{WHITE}DI / GameScript derinimas
STR_AI_DEBUG :{WHITE}DI / GameScript derinimas
STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM})
STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Skripto pavadinimas
STR_AI_DEBUG_SETTINGS :{BLACK}Nustatymai
@ -4721,9 +4735,10 @@ STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Patikrin
STR_ERROR_AI_NO_AI_FOUND :Nerasta jokio tinkamo DI.{}Šis DI yra netikras ir nieko nedarys.{}Galite parsisiųsti keletą DI per 'Turinio internete' sistemą.
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Vienas iš paleistų skriptų išsijungė. Praneškite apie tai šio skripto autoriui su skripto debug lango vaizdu
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}DI / GameScript derinimo langas yra pasiekiamas tik iš serverio
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}DI / GameScript derinimo langas yra pasiekiamas tik iš serverio
# AI configuration window
STR_AI_CONFIG_CAPTION_AI :{WHITE}DI nustatymai
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Žaidimo skriptas bus įkeltas sekančiame žaidime
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}DI'ai bus įkelti sekančiame žaidime
STR_AI_CONFIG_HUMAN_PLAYER :Žaidėjas Žmogus
@ -4770,6 +4785,7 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Teminio
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Mini žemėlapio kopija
# Script Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrai
STR_AI_SETTINGS_CAPTION_AI :DI
STR_AI_SETTINGS_CLOSE :{BLACK}Uždaryti
STR_AI_SETTINGS_RESET :{BLACK}Atstatyti

@ -3488,6 +3488,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vägtyp
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabel 60+x parameter (hexadecimal)
# Sprite aligner window
STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Justerar spriteobjekt: ({STRING}:{NUM})
STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Justerar spriteobjekt: Action 0xA, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Justerar spriteobjekt: Åtgärd 0x5, typ {HEX}, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nästa spriteobjekt
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsätt till nästa nomala spriteobjekt, ignorera eventuella pseudo/recolour/font spriteobjekt och börja om efter sista spriteobjektet
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå till spriteobjekt
@ -3496,6 +3499,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Tidigare
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsätt till föregående normala spriteobjekt, ignorera eventuella pseudo/recolour/font spriteobjekt och börja om från slutet efter första spriteobjektet
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation av det valda objektet. Justeringen ignoreras när objektet ritas.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flytta runt objektet och ändra förskjutningen i X- och Y-led. Ctrl+klicka för att flytta runt objektet åtta steg i taget
STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM}
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Förskjutningscentrerad
@ -3530,7 +3534,7 @@ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF-filen den v
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :För många NewGRFer är laddade
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Att ladda {1:STRING} som statisk NewGRF med {2:STRING} kan orsaka desynkronisering
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Oväntat spriteobjekt (spriteobjekt {3:NUM})
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Okänd Action 0-egenskap {4:HEX} (spriteobjekt {3:NUM})
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Okänd Åtgärd 0-egenskap {4:HEX} (spriteobjekt {3:NUM})
STR_NEWGRF_ERROR_INVALID_ID :Försök att använda ett ogiltligt ID (spriteobjekt {3:NUM})
STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} innehåller ett skadat spriteobjekt. Alla korrupta spriteobjekt kommer att visas som röda frågetecken (?)
STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Innehåller flera Action 8 (spriteobjekt {3:NUM})
@ -5832,6 +5836,7 @@ STR_JUST_DATE_ISO :{DATE_ISO}
STR_JUST_STRING :{STRING}
STR_JUST_STRING1 :{STRING}
STR_JUST_STRING2 :{STRING}
STR_JUST_STRING4 :{STRING}
STR_JUST_STRING_STRING :{STRING}{STRING}
STR_JUST_RAW_STRING :{STRING}
STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING}

@ -1126,7 +1126,7 @@ STR_GAME_OPTIONS_CURRENCY_NLG :Нідерла
STR_GAME_OPTIONS_CURRENCY_NOK :Норвезька крона
STR_GAME_OPTIONS_CURRENCY_PLN :Польський злотий
STR_GAME_OPTIONS_CURRENCY_RON :Румунський лей
STR_GAME_OPTIONS_CURRENCY_RUR :Російський рубель
STR_GAME_OPTIONS_CURRENCY_RUR :Російський рубль
STR_GAME_OPTIONS_CURRENCY_SIT :Словенський талер
STR_GAME_OPTIONS_CURRENCY_SEK :Шведська крона
STR_GAME_OPTIONS_CURRENCY_TRY :Турецька ліра
@ -1139,7 +1139,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Південн
STR_GAME_OPTIONS_CURRENCY_CUSTOM :Власна...
STR_GAME_OPTIONS_CURRENCY_GEL :Грузинські ларі
STR_GAME_OPTIONS_CURRENCY_IRR :Іранський ріал
STR_GAME_OPTIONS_CURRENCY_RUB :Російський новий рубель
STR_GAME_OPTIONS_CURRENCY_RUB :Російський новий рубль
STR_GAME_OPTIONS_CURRENCY_MXN :Мексиканське песо
STR_GAME_OPTIONS_CURRENCY_NTD :Новий тайваньський долар
STR_GAME_OPTIONS_CURRENCY_CNY :Китайські ренміні
@ -1155,7 +1155,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Вибе
# Autosave dropdown
###length 5
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :вимкнено
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Вимкнено
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Кожні 10 хвилин
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Кожні 30 хвилин
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Кожні 60 хвилин
@ -1166,7 +1166,7 @@ STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Вибе
STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% виконано)
STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Повноекранний режим
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Натисніть цю кнопку, щоби грати в OpenTTD у повноекранному режимі
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Позначте цей прапорець для використання повноекранного режиму
STR_GAME_OPTIONS_RESOLUTION :{BLACK}Роздільна здатність екрана
STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Виберіть, яку роздільну здатність екрана використовувати
@ -1174,7 +1174,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :інша
STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM}
STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Апаратне прискорення
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Увімкнутий прапорець дозволить використання грою прискорення апаратного забезпечення. Налаштування запрацює тільки після перезапуску гри
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Позначте цей прапорець для використання апаратного прискорення. Зміни застосуються тільки після перезапуску гри
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Налаштування запрацює тільки після перезапуску гри
STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}Вертикальна синхронізація
@ -1183,17 +1183,17 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Позн
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Використовуваний драйвер: {STRING}
STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Розмір інтерфейсу
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Перетягніть повзунок для встановлення розміру інтерфейсу. Ctrl+протягування для точнішого перетягування
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Потягніть повзунок для зміни розміру інтерфейсу. Ctrl+протягування для точнішого коригування
STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Визначати розмір автоматично
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Позначте цей прапорець для того, щоби визначати розмір інтерфейсу автоматично
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Межі шкали
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :BLACK}Увімкнутий прапорець дозволить змінити розмір інтерфейсу
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Масштабування рельєфних елементів
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Позначте цей прапорець для того, щоби масштабувати рельєфні елементи інтерфейсу
STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Використовувати шрифт звичайної роздільності
STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Увімкніть прапорець для використання шрифтів незмінних розмірів
STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Використовувати стандартний растровий шрифт
STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Позначте цей прапорець для використання стандартних растрових шрифтів фіксованого розміру
STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Згладжування шрифтів
STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Увімкніть прапорець для згладження шрифтів змінних розмірів
STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Позначте цей прапорець для того, щоби згладжувати шрифти змінних розмірів
STR_GAME_OPTIONS_GUI_SCALE_1X :1x
STR_GAME_OPTIONS_GUI_SCALE_2X :2x
@ -1202,7 +1202,7 @@ STR_GAME_OPTIONS_GUI_SCALE_4X :4x
STR_GAME_OPTIONS_GUI_SCALE_5X :5x
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Автоматизований збір даних
STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Участь в автоматизованому зборі даних
STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Брати участь в автоматизованому зборі даних
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Якщо увімкнено, OpenTTD передаватиме зібрані дані при виході з гри
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Про збір даних і приватність
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Відкриє переглядач з детальнішою інформацією про автоматичний збір даних
@ -2662,7 +2662,7 @@ STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Так,
STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Так, більше не питати
STR_NETWORK_ASK_SURVEY_CAPTION :Дозволити автоматизований збір даних?
STR_NETWORK_ASK_SURVEY_TEXT :Бажаєте долучитись до автоматичного збору даних?{}OpenTTD передаватиме дані при виході з гри.{}Це можна будь-коли змінити в "Налаштуваннях гри".
STR_NETWORK_ASK_SURVEY_TEXT :Бажаєте долучитися до автоматичного збору даних?{}OpenTTD передаватиме деякі дані при виході з гри.{}Це можна змінити в розділі "Налаштування гри" будь-коли.
STR_NETWORK_ASK_SURVEY_PREVIEW :Попередній перегляд збору даних
STR_NETWORK_ASK_SURVEY_LINK :Про збір даних і приватність
STR_NETWORK_ASK_SURVEY_NO :Ні

@ -13,6 +13,7 @@
#include "../game/game.hpp"
#include "../window_func.h"
#include "../error.h"
#include "../fileio_func.h"
#include "../base_media_base.h"
#include "../settings_type.h"
#include "network_content.h"
@ -556,7 +557,7 @@ void ClientNetworkContentSocketHandler::AfterDownload()
this->curFile = nullptr;
if (GunzipFile(this->curInfo)) {
unlink(GetFullFilename(this->curInfo, true).c_str());
FioRemove(GetFullFilename(this->curInfo, true));
Subdirectory sd = GetContentInfoSubDir(this->curInfo->type);
if (sd == NO_DIRECTORY) NOT_REACHED();
@ -568,7 +569,7 @@ void ClientNetworkContentSocketHandler::AfterDownload()
if (this->curInfo->type == CONTENT_TYPE_BASE_MUSIC) {
/* Music can't be in a tar. So extract the tar! */
ExtractTar(fname, BASESET_DIR);
unlink(fname.c_str());
FioRemove(fname);
}
#ifdef __EMSCRIPTEN__

@ -756,11 +756,10 @@ static std::vector<OptionData> CreateOptions()
/**
* Main entry point for this lovely game.
* @param argc The number of arguments passed to this game.
* @param argv The values of the arguments.
* @param arguments The command line arguments passed to the application.
* @return 0 when there is no error.
*/
int openttd_main(int argc, char *argv[])
int openttd_main(std::span<char * const> arguments)
{
SetSelfAsMainThread();
PerThreadSetup();
@ -788,7 +787,7 @@ int openttd_main(int argc, char *argv[])
_switch_mode = SM_MENU;
auto options = CreateOptions();
GetOptData mgo(std::span(argv + 1, argc - 1), options);
GetOptData mgo(arguments.subspan(1), options);
int ret = 0;
int i;
@ -878,7 +877,7 @@ int openttd_main(int argc, char *argv[])
break;
case 'q':
case 'K': {
DeterminePaths(argv[0], only_local_path);
DeterminePaths(arguments[0], only_local_path);
if (StrEmpty(mgo.opt)) {
ret = 1;
return ret;
@ -941,7 +940,7 @@ int openttd_main(int argc, char *argv[])
*
* The next two functions are needed to list the graphics sets. We can't do them earlier
* because then we cannot show it on the debug console as that hasn't been configured yet. */
DeterminePaths(argv[0], only_local_path);
DeterminePaths(arguments[0], only_local_path);
TarScanner::DoScan(TarScanner::BASESET);
BaseGraphics::FindSets();
BaseSounds::FindSets();
@ -950,7 +949,7 @@ int openttd_main(int argc, char *argv[])
return ret;
}
DeterminePaths(argv[0], only_local_path);
DeterminePaths(arguments[0], only_local_path);
TarScanner::DoScan(TarScanner::BASESET);
if (dedicated) DEBUG(net, 3, "Starting dedicated server, version %s", _openttd_revision);

@ -96,7 +96,7 @@ extern uint32_t _pause_countdown;
void AskExitGame();
void AskExitToGameMenu();
int openttd_main(int argc, char *argv[]);
int openttd_main(std::span<char * const> arguments);
void StateGameLoop();
void HandleExitGameRequest();
void InitMusicDriver(bool init_volume);

@ -43,7 +43,7 @@ int CDECL main(int argc, char *argv[])
signal(SIGPIPE, SIG_IGN);
int ret = openttd_main(argc, argv);
int ret = openttd_main(std::span(argv, argc));
CocoaReleaseAutoreleasePool();

@ -31,5 +31,5 @@ int CDECL main(int argc, char *argv[])
signal(SIGPIPE, SIG_IGN);
return openttd_main(argc, argv);
return openttd_main(std::span(argv, argc));
}

@ -19,11 +19,10 @@
#include "../../safeguards.h"
static int ParseCommandLine(char *line, char **argv, int max_argc)
static auto ParseCommandLine(char *line)
{
int n = 0;
do {
std::vector<char *> arguments;
for (;;) {
/* skip whitespace */
while (*line == ' ' || *line == '\t') line++;
@ -32,31 +31,28 @@ static int ParseCommandLine(char *line, char **argv, int max_argc)
/* special handling when quoted */
if (*line == '"') {
argv[n++] = ++line;
arguments.push_back(++line);
while (*line != '"') {
if (*line == '\0') return n;
if (*line == '\0') return arguments;
line++;
}
} else {
argv[n++] = line;
arguments.push_back(line);
while (*line != ' ' && *line != '\t') {
if (*line == '\0') return n;
if (*line == '\0') return arguments;
line++;
}
}
*line++ = '\0';
} while (n != max_argc);
};
return n;
return arguments;
}
void CreateConsole();
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int argc;
char *argv[64]; // max 64 command line arguments
/* Set system timer resolution to 1ms. */
timeBeginPeriod(1);
@ -78,15 +74,15 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
/* setup random seed to something quite random */
SetRandomSeed(GetTickCount());
argc = ParseCommandLine(cmdline.data(), argv, lengthof(argv));
auto arguments = ParseCommandLine(cmdline.data());
/* Make sure our arguments contain only valid UTF-8 characters. */
for (int i = 0; i < argc; i++) StrMakeValidInPlace(argv[i]);
for (auto argument : arguments) StrMakeValidInPlace(argument);
openttd_main(argc, argv);
int ret = openttd_main(arguments);
/* Restore system timer resolution. */
timeEndPeriod(1);
return 0;
return ret;
}

@ -16,11 +16,6 @@
#include <stdarg.h>
#if !defined(_WIN32) || defined(__CYGWIN__)
#include <unistd.h>
#include <sys/stat.h>
#endif
#include "../safeguards.h"
/**
@ -328,11 +323,11 @@ static void DumpSections(const IniLoadFile &ifile)
}
/**
* Copy a file to the output.
* @param fname Filename of file to copy.
* Append a file to the output stream.
* @param fname Filename of file to append.
* @param out_fp Output stream to write to.
*/
static void CopyFile(const char *fname, FILE *out_fp)
static void AppendFile(const char *fname, FILE *out_fp)
{
if (fname == nullptr) return;
@ -482,10 +477,10 @@ int CDECL main(int argc, char *argv[])
/* Write output. */
if (output_file == nullptr) {
CopyFile(before_file, stdout);
AppendFile(before_file, stdout);
_stored_output.Write(stdout);
_post_amble_output.Write(stdout);
CopyFile(after_file, stdout);
AppendFile(after_file, stdout);
} else {
static const char * const tmp_output = "tmp2.xxx";
@ -493,10 +488,10 @@ int CDECL main(int argc, char *argv[])
if (fp == nullptr) {
error("Cannot open file %s", tmp_output);
}
CopyFile(before_file, fp);
AppendFile(before_file, fp);
_stored_output.Write(fp);
_post_amble_output.Write(fp);
CopyFile(after_file, fp);
AppendFile(after_file, fp);
fclose(fp);
if (CompareFiles(tmp_output, output_file)) {
@ -507,7 +502,9 @@ int CDECL main(int argc, char *argv[])
#if defined(_WIN32)
unlink(output_file);
#endif
if (rename(tmp_output, output_file) == -1) error("rename() failed");
if (rename(tmp_output, output_file) == -1) {
error("rename(%s, %s) failed: %s", tmp_output, output_file, StrErrorDumper().GetLast());
}
}
}
return 0;

@ -2874,7 +2874,7 @@ struct FileWriter : SaveFilter {
~FileWriter()
{
this->CloseFile();
if (!this->temp_name.empty()) unlink(this->temp_name.c_str());
if (!this->temp_name.empty()) FioRemove(this->temp_name);
}
void Write(uint8_t *buf, size_t size) override

@ -24,7 +24,7 @@ public:
/** Factory for the sound driver for Windows. */
class FSoundDriver_Win32 : public DriverFactoryBase {
public:
FSoundDriver_Win32() : DriverFactoryBase(Driver::DT_SOUND, 9, "win32", "Win32 WaveOut Sound Driver (param bufsize,hz)") {}
FSoundDriver_Win32() : DriverFactoryBase(Driver::DT_SOUND, 9, "win32", "Win32 WaveOut Sound Driver (param hz,samples)") {}
Driver *CreateInstance() const override { return new SoundDriver_Win32(); }
};

@ -24,7 +24,7 @@ public:
/** Factory for the XAudio2 sound driver. */
class FSoundDriver_XAudio2 : public DriverFactoryBase {
public:
FSoundDriver_XAudio2() : DriverFactoryBase(Driver::DT_SOUND, 10, "xaudio2", "XAudio2 Sound Driver (param bufsize,hz)") {}
FSoundDriver_XAudio2() : DriverFactoryBase(Driver::DT_SOUND, 10, "xaudio2", "XAudio2 Sound Driver (param hz,samples)") {}
Driver *CreateInstance() const override { return new SoundDriver_XAudio2(); }
};

@ -307,7 +307,7 @@ bool CompareFiles(const char *n1, const char *n2)
/** Base class for writing data to disk. */
struct FileWriter {
FILE *fh; ///< The file handle we're writing to.
const char *filename; ///< The file name we're writing to.
std::string filename; ///< The file name we're writing to.
/**
* Open a file to write to.
@ -315,11 +315,11 @@ struct FileWriter {
*/
FileWriter(const char *filename)
{
this->filename = stredup(filename);
this->fh = fopen(this->filename, "wb");
this->filename = filename;
this->fh = fopen(filename, "wb");
if (this->fh == nullptr) {
error("Could not open %s", this->filename);
error("Could not open %s", filename);
}
}
@ -336,15 +336,14 @@ struct FileWriter {
/* If we weren't closed an exception was thrown, so remove the temporary file. */
if (fh != nullptr) {
fclose(this->fh);
unlink(this->filename);
unlink(this->filename.c_str());
}
free(this->filename);
}
};
struct HeaderFileWriter : HeaderWriter, FileWriter {
/** The real file name we eventually want to write to. */
const char *real_filename;
std::string real_filename;
/** The previous string ID that was printed. */
int prev;
uint total_strings;
@ -354,19 +353,13 @@ struct HeaderFileWriter : HeaderWriter, FileWriter {
* @param filename The file to open.
*/
HeaderFileWriter(const char *filename) : FileWriter("tmp.xxx"),
real_filename(stredup(filename)), prev(0), total_strings(0)
real_filename(filename), prev(0), total_strings(0)
{
fprintf(this->fh, "/* This file is automatically generated. Do not modify */\n\n");
fprintf(this->fh, "#ifndef TABLE_STRINGS_H\n");
fprintf(this->fh, "#define TABLE_STRINGS_H\n");
}
/** Free the filename. */
~HeaderFileWriter()
{
free(real_filename);
}
void WriteStringID(const char *name, int stringid) override
{
if (prev + 1 != stringid) fprintf(this->fh, "\n");
@ -397,15 +390,17 @@ struct HeaderFileWriter : HeaderWriter, FileWriter {
this->FileWriter::Finalise();
if (CompareFiles(this->filename, this->real_filename)) {
if (CompareFiles(this->filename.c_str(), this->real_filename.c_str())) {
/* files are equal. tmp.xxx is not needed */
unlink(this->filename);
unlink(this->filename.c_str());
} else {
/* else rename tmp.xxx into filename */
# if defined(_WIN32)
unlink(this->real_filename);
unlink(this->real_filename.c_str());
# endif
if (rename(this->filename, this->real_filename) == -1) error("rename() failed");
if (rename(this->filename.c_str(), this->real_filename.c_str()) == -1) {
error("rename(%s, %s) failed: %s", this->filename.c_str(), this->real_filename.c_str(), StrErrorDumper().GetLast());
}
}
}
};
@ -428,7 +423,7 @@ struct LanguageFileWriter : LanguageWriter, FileWriter {
void Finalise() override
{
if (fputc(0, this->fh) == EOF) {
error("Could not write to %s", this->filename);
error("Could not write to %s", this->filename.c_str());
}
this->FileWriter::Finalise();
}
@ -437,7 +432,7 @@ struct LanguageFileWriter : LanguageWriter, FileWriter {
{
if (length == 0) return;
if (fwrite(buffer, sizeof(*buffer), length, this->fh) != length) {
error("Could not write to %s", this->filename);
error("Could not write to %s", this->filename.c_str());
}
}
};

Loading…
Cancel
Save