Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 34 additions & 38 deletions zlang.inc
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,6 @@ static
gLangInfo[MAX_LANGS][e_ZLANG_INFO],
gLangFiles[MAX_LANGS][MAX_LANG_FILES][MAX_LANG_FILENAME],
gLangSlots[MAX_LANGS char],
gLangCount,
Lang:gDefaultLang,
Lang:gPlayerLang[MAX_PLAYERS];

Expand Down Expand Up @@ -278,8 +277,6 @@ static stock Lang_Load()
if (_Lang_IsVarExists(LANG_SYSVAR_SLOT_STATUS, _:lang)) {
status = _Lang_GetVarInt(LANG_SYSVAR_SLOT_STATUS, _:lang);
_Lang_SetSlotStatus(lang, status);

gLangCount += 1;
} else {
_Lang_SetSlotStatus(lang, LANG_SLOT_FREE);
}
Expand Down Expand Up @@ -324,7 +321,6 @@ stock Lang:Lang_Add(const code[], const name[])
Lang_SetName(lang, name);

Lang_SetSlotStatus(lang, LANG_SLOT_BUSY);
gLangCount += 1;
return lang;
}

Expand All @@ -342,7 +338,6 @@ stock Lang_Remove(Lang:lang)
}

Lang_SetSlotStatus(lang, LANG_SLOT_FREE);
gLangCount -= 1;
return 1;
}

Expand Down Expand Up @@ -698,32 +693,33 @@ stock Lang_ReturnCode(Lang:lang)

stock Lang_GetCodes(result[], const size = sizeof(result), const separator = '/', const bool:isuppercase = false)
{
new
lang,
i,
length,
sep[2];
static
Lang:lang,
pos;

result[0] = '\0';
sep[0] = separator;
pos = 0;

for (lang = 0; lang < MAX_LANGS; lang += 1) {
strcat(result, gLangInfo[lang][e_zlCode], size);
strcat(result, sep, size);
for (lang = Lang:0; lang < Lang:MAX_LANGS; _:lang += 1)
{
if (!Lang_IsValid(Lang:lang)) {
continue;
}

for (i = (MAX_LANG_CODE + 1) * lang; i < (MAX_LANG_CODE + 1) * (lang + 1) - 1; i += 1) {
if (isuppercase) {
result[i] = toupper(result[i]);
} else {
result[i] = tolower(result[i]);
}
}
}
for (new i = 0; gLangInfo[lang][e_zlCode][i] != '\0' && pos < size - 1; i += 1) {
result[pos++] = isuppercase
? toupper(gLangInfo[lang][e_zlCode][i])
: tolower(gLangInfo[lang][e_zlCode][i]);
}

length = strlen(result);
if (length != 0) {
result[length - 1] = '\0';
}
if (pos < size - 1) {
result[pos++] = separator;
}
}

if (pos != 0) {
pos--;
}
result[pos] = '\0';
}
Comment on lines 694 to 723

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Операторы инкремента/декремента в этой библиотеке не используются.
  • Не правильное расположение { после for.
  • Нет смысла убирать инициализацию i вовнутрь цикла.
  • Вместо gLangInfo[lang][e_zlCode][i] != '\0' я бы предпочёл проверку i < MAX_LANG_CODE.
  • Предупреждения из-за неправильно использованных тегов:
    warning 213: tag mismatch: expected tag none ("_"), but found "Lang"
    


stock Lang_ReturnCodes(const separator = '/', const bool:isuppercase = false)
Expand All @@ -743,6 +739,14 @@ stock Lang_IsValid(Lang:lang)

stock Lang_GetCount()
{
new gLangCount;

for (new Lang:lang; lang < Lang:MAX_LANGS; _:lang += 1) {
if (Lang_IsValid(lang)) {
gLangCount ++;
}
}

return gLangCount;
}

Expand Down Expand Up @@ -980,12 +984,9 @@ stock Lang_printf(const var[], lang_args<>)
stock Lang_printfex(Lang:lang, const var[], lang_args<>)
{
static
Lang:lang,
text[MAX_LANG_MFORMAT_STRING],
success;

lang = Lang_GetDefaultLang();

success = Lang_GetText(lang, var, text);

if (numargs() > 2) {
Expand Down Expand Up @@ -1417,12 +1418,6 @@ public zlang_SetCode(Lang:lang, const name[])
forward zlang_SetSlotStatus(Lang:lang, status);
public zlang_SetSlotStatus(Lang:lang, status)
{
if (_Lang_IsSlotHaveStatus(lang, LANG_SLOT_FREE) && (status & LANG_SLOT_BUSY)) {
gLangCount += 1;
} else if (_Lang_IsSlotHaveStatus(lang, LANG_SLOT_BUSY) && (status & LANG_SLOT_FREE)) {
gLangCount -= 1;
}

_Lang_SetSlotStatus(lang, status);
}

Expand Down Expand Up @@ -1646,7 +1641,7 @@ static stock _Lang_ProcessVars(Lang:lang, strings_with_vars)
epos = strfind(varvalue, ")", true, spos);
if (epos == -1) {
next_iteration = false;
printf("Error: error with using language variables, example of usage: \\v(VARIABLE)");
printf("Error: language variable (%s) is undefined", varname);
Comment thread
rismailov marked this conversation as resolved.
break;
}

Expand Down Expand Up @@ -1683,7 +1678,8 @@ stock Lang_ProcessDynamicVars(Lang:lang, text[], const size = sizeof(text))
while ((spos = strfind(text, "\\v(", true)) != -1) {
epos = strfind(text, ")", true, spos);
if (epos == -1) {
printf("Error: error with using language variables, example of usage: \\v(VARIABLE)");
strmid(vartmp, text, spos + 3, strlen(text));
printf("Error: dynamic variable (%s) is undefined", vartmp);
Comment thread
rismailov marked this conversation as resolved.
break;
}

Expand Down