# newgrf_text.cpp File Reference

Implementation of Action 04 "universal holder" structure and functions. More...

`#include "stdafx.h"`
`#include "newgrf.h"`
`#include "strings_func.h"`
`#include "newgrf_storage.h"`
`#include "string_func.h"`
`#include "date_type.h"`
`#include "debug.h"`
`#include "table/strings.h"`
`#include "table/control_codes.h"`

Go to the source code of this file.

## Data Structures
struct | GRFText
| Element of the linked list. More...
struct | GRFTextEntry
| Holder of the above structure. More...
struct | TextRefStack
## Defines
#define | GRFTAB 28
#define | TABSIZE 11
#define | TEXTID_TO_STRINGID(begin, end, stringid) if (str >= begin && str <= end) return str + (stringid - begin)
## Enumerations
enum | GRFBaseLanguages { GRFLB_AMERICAN = 0x01, GRFLB_ENGLISH = 0x02, GRFLB_GERMAN = 0x04, GRFLB_FRENCH = 0x08, GRFLB_SPANISH = 0x10, GRFLB_GENERIC = 0x80 }
| Explains the newgrf shift bit positioning. More...
enum | GRFExtendedLanguages { GRFLX_AMERICAN = 0x00, GRFLX_ENGLISH = 0x01, GRFLX_GERMAN = 0x02, GRFLX_FRENCH = 0x03, GRFLX_SPANISH = 0x04, GRFLX_UNSPECIFIED = 0x7F }
## Functions
StringID | TTDPStringIDToOTTDStringIDMapping (StringID str)
| Perform a mapping from TTDPatch's string IDs to OpenTTD's string IDs, but only for the ones we are aware off; the rest like likely unused and will show a warning.
char * | TranslateTTDPatchCodes (uint32 grfid, const char *str)
StringID | AddGRFString (uint32 grfid, uint16 stringid, byte langid_to_add, bool new_scheme, const char *text_to_add, StringID def_string)
| Add the new read string into our structure.
StringID | GetGRFStringID (uint32 grfid, uint16 stringid)
| Returns the index for this stringid associated with its grfID.
const char * | GetGRFStringPtr (uint16 stringid)
void | SetCurrentGrfLangID (byte language_id)
| Equivalence Setter function between game and newgrf langID.
bool | CheckGrfLangID (byte lang_id, byte grf_version)
void | CleanUpStrings ()
| House cleaning.
void | PrepareTextRefStackUsage (byte numEntries)
| Prepare the TTDP compatible string code parsing.
void | StopTextRefStackUsage ()
| Stop using the TTDP compatible string code parsing.
void | SwitchToNormalRefStack ()
void | SwitchToErrorRefStack ()
void | RewindTextRefStack ()
uint | RemapNewGRFStringControlCode (uint scc, char *buf_start, char **buff, const char **str, int64 *argv)
| FormatString for NewGRF specific "magic" string control codes.
## Variables
static uint | _num_grf_texts = 0
static GRFTextEntry | _grf_text [(1<< TABSIZE)*3]
static byte | _currentLangID = GRFLX_ENGLISH
| by default, english is used.
static uint32 | _last_grfid = 0
static TextRefStack | _newgrf_normal_textrefstack
static TextRefStack | _newgrf_error_textrefstack
static TextRefStack * | _newgrf_textrefstack = &_newgrf_normal_textrefstack
| The stack that is used for TTDP compatible string code parsing.

## Detailed Description

Implementation of Action 04 "universal holder" structure and functions.

This file implements a linked-lists of strings, holding everything that the newgrf action 04 will send over to OpenTTD. One of the biggest problems is that Dynamic lang Array uses ISO codes as way to identifying current user lang, while newgrf uses bit shift codes not related to ISO. So equivalence functionnality had to be set.

Definition in file newgrf_text.cpp.

## Enumeration Type Documentation

enum GRFBaseLanguages

Explains the newgrf shift bit positioning.

the grf base will not be used in order to find the string, but rather for jumping from standard langID scheme to the new one.

Definition at line 98 of file newgrf_text.cpp.

## Function Documentation

void CleanUpStrings | ( |  | ) |

House cleaning.

Remove all strings and reset the text counter.

Definition at line 489 of file newgrf_text.cpp.

Referenced by ResetNewGRFData().

void PrepareTextRefStackUsage | ( | byte | numEntries | ) |

Prepare the TTDP compatible string code parsing.

Parameters:

  | numEntries | number of entries to copy from the registers

Definition at line 575 of file newgrf_text.cpp.

References GB(), and TemporaryStorageArray< TYPE, SIZE >::Get().

Referenced by IndustryViewWindow::DrawInfo(), GetCargoSuffix(), and ShowAdditionalText().

uint RemapNewGRFStringControlCode | ( | uint | scc,
|  | char * | buf_start,
|  | char ** | buff,
|  | const char ** | str,
|  | int64 * | argv |
| ) |  |  |

FormatString for NewGRF specific "magic" string control codes.

Parameters:

  | scc | the string control code that has been read
  | buff | the buffer we're writing to
  | str | the string that we need to write
  | argv | the OpenTTD stack of values

Returns:
  the string control code to "execute" now

Definition at line 616 of file newgrf_text.cpp.

References DAYS_TILL_ORIGINAL_BASE_YEAR, max(), TextRefStack::RotateTop4Words(), SCC_NEWGRF_DISCARD_WORD, SCC_NEWGRF_PRINT_DATE, SCC_NEWGRF_PRINT_DWORD, SCC_NEWGRF_PRINT_DWORD_CURRENCY, SCC_NEWGRF_PRINT_HEX_BYTE, SCC_NEWGRF_PRINT_HEX_DWORD, SCC_NEWGRF_PRINT_HEX_QWORD, SCC_NEWGRF_PRINT_HEX_WORD, SCC_NEWGRF_PRINT_MONTH_YEAR, SCC_NEWGRF_PRINT_QWORD_CURRENCY, SCC_NEWGRF_PRINT_SIGNED_BYTE, SCC_NEWGRF_PRINT_SIGNED_WORD, SCC_NEWGRF_PRINT_STRING_ID, SCC_NEWGRF_PRINT_UNSIGNED_WORD, SCC_NEWGRF_PRINT_WORD_LITRES, SCC_NEWGRF_PRINT_WORD_SPEED, SCC_NEWGRF_PUSH_WORD, SCC_NEWGRF_ROTATE_TOP_4_WORDS, SCC_NEWGRF_UNPRINT, and TTDPStringIDToOTTDStringIDMapping().

void SetCurrentGrfLangID | ( | byte | language_id | ) |

Equivalence Setter function between game and newgrf langID.

This function will adjust _currentLangID as to what is the LangID of the current language set by the user. This function is called after the user changed language, from strings.cpp:ReadLanguagePack

Parameters:

  | language_id | iso code of current selection

Definition at line 466 of file newgrf_text.cpp.

References _currentLangID.

StringID TTDPStringIDToOTTDStringIDMapping | ( | StringID | str | ) |

Perform a mapping from TTDPatch's string IDs to OpenTTD's string IDs, but only for the ones we are aware off; the rest like likely unused and will show a warning.

Parameters:

  | str | the string ID to convert

Returns:
  the converted string ID

Definition at line 40 of file newgrf_text.cpp.

References IsInsideMM().

Referenced by MapGRFStringID(), and RemapNewGRFStringControlCode().