diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 58a168dd53..5f4fe13f68 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -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 { diff --git a/src/driver.cpp b/src/driver.cpp index 0635d4192d..55e536bf88 100644 --- a/src/driver.cpp +++ b/src/driver.cpp @@ -20,12 +20,6 @@ #include #include -#ifdef _WIN32 -# include -#else -# include -#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); } /** diff --git a/src/fileio.cpp b/src/fileio.cpp index 746b5072b7..f1df3c90d6 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -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 diff --git a/src/fileio_func.h b/src/fileio_func.h index a78fe3cf6c..514e3a5795 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -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(); diff --git a/src/fios.cpp b/src/fios.cpp index d34f6070a0..bb7f1564a1 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -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); diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index e3be27c961..34cbf9de45 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -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; diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 2353fc1955..80b2d8d145 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -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(this->legend.height, GetCharacterHeight(FS_NORMAL)) + padding.height; - d.width += this->legend.width + WidgetDimensions::scaled.hsep_wide + padding.width; + resize.height = std::max({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; diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 336d63c4e9..bdf6cfa9ed 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -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 diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 5856ec9c12..d0a9398d6b 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -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} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 2ef0e067ea..25fb25b497 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -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} diff --git a/src/lang/french.txt b/src/lang/french.txt index adf9f97a72..383c102faf 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -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} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index dbd625b480..f14aadb289 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -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} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 1ef30e27f1..578359c1bb 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -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 diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index df9d53384f..41607130c9 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -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} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index b293437ddd..7eadb93497 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -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 :Ні diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index e4c9f9b07f..fbb139109c 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -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__ diff --git a/src/openttd.cpp b/src/openttd.cpp index efb41a5a64..84840b6d8e 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -756,11 +756,10 @@ static std::vector 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 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); diff --git a/src/openttd.h b/src/openttd.h index 575bd42e8d..63f40031d0 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -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 arguments); void StateGameLoop(); void HandleExitGameRequest(); void InitMusicDriver(bool init_volume); diff --git a/src/os/macosx/osx_main.cpp b/src/os/macosx/osx_main.cpp index cfbf8aa451..cbc76ab993 100644 --- a/src/os/macosx/osx_main.cpp +++ b/src/os/macosx/osx_main.cpp @@ -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(); diff --git a/src/os/unix/unix_main.cpp b/src/os/unix/unix_main.cpp index 8ac38f2cbf..7b80703a47 100644 --- a/src/os/unix/unix_main.cpp +++ b/src/os/unix/unix_main.cpp @@ -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)); } diff --git a/src/os/windows/win32_main.cpp b/src/os/windows/win32_main.cpp index 77ac95ee3c..c3aa4375a5 100644 --- a/src/os/windows/win32_main.cpp +++ b/src/os/windows/win32_main.cpp @@ -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 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; } diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index e028f38294..9522e0ec6a 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -16,11 +16,6 @@ #include -#if !defined(_WIN32) || defined(__CYGWIN__) -#include -#include -#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; diff --git a/src/sl/saveload.cpp b/src/sl/saveload.cpp index 732f61b11e..98ca8c7b0c 100644 --- a/src/sl/saveload.cpp +++ b/src/sl/saveload.cpp @@ -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 diff --git a/src/sound/win32_s.h b/src/sound/win32_s.h index 5722b2089d..ecb1e99ec0 100644 --- a/src/sound/win32_s.h +++ b/src/sound/win32_s.h @@ -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(); } }; diff --git a/src/sound/xaudio2_s.h b/src/sound/xaudio2_s.h index 621655d8d5..70a5db5ac9 100644 --- a/src/sound/xaudio2_s.h +++ b/src/sound/xaudio2_s.h @@ -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(); } }; diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 1a9b05ed47..defe080fca 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -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()); } } };