Mercurial > mm7
changeset 246:1bfe546561c4
sprintfex
author | Nomad |
---|---|
date | Mon, 18 Feb 2013 03:58:08 +0200 |
parents | 99ef31ffa74e |
children | fb8a876f41e1 |
files | Sprites.cpp mm7_2.cpp mm7_5.cpp mm7_data.cpp mm7_data.h mm7text_ru.cpp texts.cpp texts.h |
diffstat | 8 files changed, 1440 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/Sprites.cpp Sun Feb 17 18:04:22 2013 +0100 +++ b/Sprites.cpp Mon Feb 18 03:58:08 2013 +0200 @@ -11,8 +11,6 @@ -//extern int (__cdecl *sprintfex)(char *a1, const char *a2, ...); - struct SpriteFrameTable *pSpriteFrameTable;
--- a/mm7_2.cpp Sun Feb 17 18:04:22 2013 +0100 +++ b/mm7_2.cpp Mon Feb 18 03:58:08 2013 +0200 @@ -12971,18 +12971,6 @@ srand(GetTickCount()); - /*GetDiskFreeSpaceA(0, &SectorsPerCluster, &BytesPerSector, &hdc, &TotalNumberOfClusters); - v4 = hdc * BytesPerSector * SectorsPerCluster; - if ( (unsigned int)v4 < 0x1E00000 ) - { - sprintfex( - pTmpBuf, - "Due to Window Virtual Memory requirements Might and Magic® VII\nrequires 30MB of free hard drive space to operate properly.\n\nAvailable on Current Drive = %luk", - (unsigned int)v4 / 1024i64); - v41 = 48; - v40 = "More Hard Drive Space Required"; - v39 = pTmpBuf; -*/ WNDCLASSEXW wcxw; { @@ -13485,11 +13473,9 @@ unsigned int startms; // [sp+8h] [bp-24h]@55 RECT Rect; // [sp+Ch] [bp-20h]@15 int a2[4]; // [sp+1Ch] [bp-10h]@15 -#ifdef MM7_TEXT_DLL - auto mm7text_dll = LoadLibraryW(L"mm7text.dll"); - sprintfex = (int (__cdecl *)(char *a1, const char *a2, ...))GetProcAddress(mm7text_dll, "_sprintfex"); -#endif - + + char test[1024]; + sprintfex(test, "^Pi[%s]: знахар^R[ь;ка;]", "Золтан"); if (pCmdLine && *pCmdLine) {
--- a/mm7_5.cpp Sun Feb 17 18:04:22 2013 +0100 +++ b/mm7_5.cpp Mon Feb 18 03:58:08 2013 +0200 @@ -3479,7 +3479,7 @@ v158 = pParty->uNumGold + pParty->uNumGoldInBank; v146 = pGlobalTXT_LocalizationStrings[489];// "You have %d total gold, %d in the Bank"" //goto _sprintex_draw_status_and_continue; - sprintf(pTmpBuf, v146, v158, v174); + sprintfex(pTmpBuf, v146, v158, v174); sub_41C0B8_set_status_string(pTmpBuf); continue; case UIMSG_ShowStatus_DateTime:
--- a/mm7_data.cpp Sun Feb 17 18:04:22 2013 +0100 +++ b/mm7_data.cpp Mon Feb 18 03:58:08 2013 +0200 @@ -321,8 +321,6 @@ //------------------------------------------------------------------------- // Data declarations -int (__cdecl *sprintfex)(char *a1, const char *a2, ...) = nullptr; - int pWindowList_at_506F50_minus1_indexing[1]; int dword_4C9890[10]; // weak int dword_4C9920[16]; // weak
--- a/mm7_data.h Sun Feb 17 18:04:22 2013 +0100 +++ b/mm7_data.h Mon Feb 18 03:58:08 2013 +0200 @@ -310,7 +310,6 @@ //------------------------------------------------------------------------- // Data declarations -//extern int (__cdecl *sprintfex)(char *a1, const char *a2, ...); extern int pWindowList_at_506F50_minus1_indexing[1]; extern int dword_4C9890[10]; // weak
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mm7text_ru.cpp Mon Feb 18 03:58:08 2013 +0200 @@ -0,0 +1,1417 @@ +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <assert.h> + +#include "Log.h" + + +struct GenderTableEntry +{ + const char *name; + int gender; +} gender_table_caps[] = +{ + {"Авель", 0}, + {"Адам", 0}, + {"Адриан", 0}, + {"Адрианис", 0}, + {"Адская", 1}, + {"Айр", 0}, + {"Акио", 0}, + {"Акира", 0}, + {"Алан", 0}, + {"Алейн", 0}, + {"Алек", 0}, + {"Александр", 0}, + {"Ален", 0}, + {"Алехандро", 0}, + {"Алиса", 1}, + {"Альберт", 0}, + {"Альтон", 0}, + {"Альтред", 0}, + {"Альфред", 0}, + {"Аманда", 1}, + {"Амбер", 1}, + {"Амброзий", 0}, + {"Амелия", 1}, + {"Амос", 0}, + {"Ангел", 0}, + {"Андреа", 1}, + {"Андрей", 0}, + {"Анжела", 1}, + {"Анита", 1}, + {"Анна", 1}, + {"Антон", 0}, + {"Антоний", 0}, + {"Арби", 0}, + {"Арда", 0}, + {"Арден", 0}, + {"Арена", 1}, + {"Аристей", 0}, + {"Аристидис", 0}, + {"Арих", 0}, + {"Ариэль", 0}, + {"Арлен", 0}, + {"Арло", 0}, + {"Арманд", 0}, + {"Арнольд", 0}, + {"Арон", 0}, + {"Артур", 0}, + {"Архангел", 0}, + {"Архимаг", 0}, + {"Ахмед", 0}, + {"Бёртон", 0}, + {"Бад", 0}, + {"Байрон", 0}, + {"Бандит", 0}, + {"Бар", 0}, + {"Барбара", 1}, + {"Баретт", 0}, + {"Барт", 0}, + {"Батч", 0}, + {"Беатрис", 1}, + {"Беверли", 1}, + {"Беки", 1}, + {"Белинда", 1}, + {"Бен", 0}, + {"Бенджамин", 0}, + {"Бенедикт", 0}, + {"Бенито", 0}, + {"Беннет", 0}, + {"Бенни", 0}, + {"Бенуа", 0}, + {"Бернадетта", 1}, + {"Бернард", 0}, + {"Берни", 0}, + {"Бернис", 1}, + {"Бернучо", 0}, + {"Берт", 0}, + {"Бертран", 0}, + {"Бет", 1}, + {"Бетси", 1}, + {"Бетти", 1}, + {"Билли", 0}, + {"Биллис", 1}, + {"Бишоп", 0}, + {"Блейк", 0}, + {"Блейн", 0}, + {"Блондо", 0}, + {"Бо", 0}, + {"Боб", 0}, + {"Бобби", 0}, + {"Бодо", 0}, + {"Болотный", 0}, + {"Большой", 0}, + {"Бонни", 1}, + {"Борегард", 0}, + {"Борис", 0}, + {"Браден", 0}, + {"Брайс", 0}, + {"Брат", 0}, + {"Брейн", 0}, + {"Бренда", 1}, + {"Брендон", 0}, + {"Брент", 0}, + {"Брет", 0}, + {"Бронвин", 0}, + {"Бронзовый", 0}, + {"Брук", 0}, + {"Бруно", 0}, + {"Брэд", 0}, + {"Брэдли", 0}, + {"Брэдфорд", 0}, + {"Брэндон", 0}, + {"Брюс", 0}, + {"Буфорд", 0}, + {"Вадим", 0}, + {"Вал", 0}, + {"Валерия", 1}, + {"Вальтер", 0}, + {"Ванда", 1}, + {"Ванесса", 1}, + {"Ванетта", 1}, + {"Ванс", 0}, + {"Вейн", 0}, + {"Великий", 0}, + {"Венделл", 0}, + {"Венди", 1}, + {"Вера", 1}, + {"Верн", 0}, + {"Вернон", 0}, + {"Вероника", 1}, + {"Верховная", 1}, + {"Весли", 0}, + {"Виверн", 0}, + {"Вивьен", 1}, + {"Вики", 1}, + {"Виктор", 0}, + {"Викторис", 0}, + {"Виктория", 1}, + {"Вилам", 0}, + {"Вилл", 0}, + {"Виллард", 0}, + {"Вильма", 1}, + {"Вильфред", 0}, + {"Вильям", 0}, + {"Винный", 0}, + {"Винстон", 0}, + {"Винченцо", 0}, + {"Виолет", 1}, + {"Виргилий", 0}, + {"Виргиния", 1}, + {"Вихрь", 0}, + {"Владимир", 0}, + {"Властелин", 0}, + {"Водный", 0}, + {"Военное", 2}, + {"Воздушная", 1}, + {"Воздушный", 0}, + {"Волхв", 0}, + {"Вольг", 0}, + {"Восставший", 0}, + {"Врата", 1}, + {"Вудро", 0}, + {"Вурдалак", 0}, + {"Высшая", 1}, + {"Вэйд", 0}, + {"Габриэль", 0}, + {"Гай", 0}, + {"Ганс", 0}, + {"Гарет", 0}, + {"Гари", 0}, + {"Гарпия", 1}, + {"Гарри", 0}, + {"Гвендолин", 1}, + {"Гвенн", 1}, + {"Гейб", 0}, + {"Гейл", 1}, + {"Гектор", 0}, + {"Гельмут", 0}, + {"Геникки", 1}, + {"Генри", 0}, + {"Георгина", 1}, + {"Герб", 0}, + {"Герберт", 0}, + {"Герман", 0}, + {"Гертруда", 1}, + {"Герц", 0}, + {"Гигантская", 1}, + {"Гильдия", 1}, + {"Гильермо", 0}, + {"Гильмор", 0}, + {"Гимнастический", 0}, + {"Глазище", 2}, + {"Глен", 0}, + {"Гленда", 1}, + {"Глиняный", 0}, + {"Глория", 1}, + {"Гниющий", 0}, + {"Гном", 0}, + {"Гоблин", 0}, + {"Говард", 0}, + {"Гог", 0}, + {"Гомер", 0}, + {"Гонзало", 0}, + {"Гораций", 0}, + {"Гордон", 0}, + {"Горный", 0}, + {"Грабитель", 0}, + {"Грант", 0}, + {"Грахэм", 0}, + {"Грег", 0}, + {"Грегори", 0}, + {"Грей", 0}, + {"Гретхен", 1}, + {"Грифон", 0}, + {"Грозовой", 0}, + {"Гус", 0}, + {"Давид", 0}, + {"Дайана", 1}, + {"Дал", 0}, + {"Даллас", 0}, + {"Дамиан", 0}, + {"Дана", 1}, + {"Даниэль", 0}, + {"Данте", 0}, + {"Дара", 1}, + {"Дарлин", 1}, + {"Дарон", 0}, + {"Дарси", 1}, + {"Дастин", 0}, + {"Дафна", 1}, + {"Двайт", 0}, + {"Двейн", 0}, + {"Деанна", 1}, + {"Дебби", 1}, + {"Дебора", 1}, + {"Девон", 0}, + {"Дейв", 0}, + {"Дейл", 0}, + {"Дел", 0}, + {"Делорис", 1}, + {"Денис", 1}, + {"Денни", 0}, + {"Депозитарий", 0}, + {"Дерево", 2}, + {"Дерек", 0}, + {"Десмонд", 0}, + {"Джанис", 1}, + {"Джастин", 0}, + {"Джед", 0}, + {"Джедай", 0}, + {"Джей", 0}, + {"Джейк", 0}, + {"Джеймс", 0}, + {"Джейн", 1}, + {"Джейсон", 0}, + {"Джек", 0}, + {"Джеки", 1}, + {"Джеми", 0}, + {"Дженифер", 1}, + {"Дженни", 1}, + {"Джеральд", 0}, + {"Джеральдина", 1}, + {"Джером", 0}, + {"Джероми", 0}, + {"Джерри", 0}, + {"Джесс", 0}, + {"Джесса", 1}, + {"Джессика", 1}, + {"Джетано", 0}, + {"Джим", 0}, + {"Джин", 1}, + {"Джина", 1}, + {"Джинжер", 1}, + {"Джинни", 1}, + {"Джино", 0}, + {"Джо", 2}, + {"Джоан", 1}, + {"Джоанн", 1}, + {"Джоанна", 1}, + {"Джозеф", 0}, + {"Джой", 0}, + {"Джойс", 1}, + {"Джойсин", 1}, + {"Джон", 0}, + {"Джонатан", 0}, + {"Джордж", 0}, + {"Джоу", 0}, + {"Джошуа", 0}, + {"Джоэль", 0}, + {"Джуд", 0}, + {"Джуди", 1}, + {"Джудис", 1}, + {"Джули", 1}, + {"Джун", 1}, + {"Диана", 1}, + {"Дилан", 0}, + {"Дин", 0}, + {"Дитер", 0}, + {"Додридж", 0}, + {"Док", 0}, + {"Долорес", 1}, + {"Дольф", 0}, + {"Дом", 0}, + {"Доминик", 0}, + {"Доминика", 1}, + {"Дон", 0}, + {"Донайс", 1}, + {"Дональд", 0}, + {"Донна", 1}, + {"Дорин", 1}, + {"Дорис", 1}, + {"Дороти", 1}, + {"Драконовая", 1}, + {"Древнее", 2}, + {"Древний", 0}, + {"Друид", 0}, + {"Дрю", 0}, + {"Дуглас", 0}, + {"Дункан", 0}, + {"Дьявол", 0}, + {"Дэви", 0}, + {"Дэн", 0}, + {"Дэнис", 0}, + {"Дэнни", 0}, + {"Дюк", 0}, + {"Ева", 1}, + {"Евгений", 0}, + {"Елизавета", 1}, + {"Жан-Поль", 0}, + {"Жан-Пьер", 0}, + {"Жанета", 1}, + {"Жанетт", 1}, + {"Жанетта", 1}, + {"Жанин", 1}, + {"Жанис", 1}, + {"Жанна", 1}, + {"Жасмин", 1}, + {"Жейн", 1}, + {"Женна", 1}, + {"Жильбер", 0}, + {"Жофрей", 0}, + {"Жуль", 0}, + {"Зак", 0}, + {"Замок", 0}, + {"Замороженные", 2}, + {"Захарий", 0}, + {"Зебулон", 0}, + {"Зеленый", 0}, + {"Земной", 0}, + {"Зигги", 0}, + {"Зик", 0}, + {"Златые", 2}, + {"Зод", 0}, + {"Золотой", 0}, + {"Золтан", 0}, + {"Зорекс", 0}, + {"Ив", 0}, + {"Иван", 0}, + {"Ивар", 0}, + {"Иверсон", 0}, + {"Ивонна", 1}, + {"Игнасио", 0}, + {"Игорь", 0}, + {"Ида", 1}, + {"Иеремия", 0}, + {"Измаил", 0}, + {"Изумрудный", 0}, + {"Ике", 0}, + {"Илена", 1}, + {"Илья", 0}, + {"Имение", 2}, + {"Инкубатор", 0}, + {"Иоланда", 1}, + {"Ион", 0}, + {"Иона", 0}, + {"Иоханн", 0}, + {"Ирвин", 0}, + {"Ирвинг", 0}, + {"Ирена", 1}, + {"Ирина", 1}, + {"Ирис", 1}, + {"Ирма", 1}, + {"Исаак", 0}, + {"Исао", 0}, + {"Йордан", 0}, + {"Каао", 0}, + {"Кай", 0}, + {"Калеб", 0}, + {"Кальвин", 0}, + {"Каменная", 1}, + {"Каменный", 0}, + {"Кандейс", 1}, + {"Капитан", 0}, + {"Карен", 1}, + {"Кари", 0}, + {"Карин", 0}, + {"Карл", 0}, + {"Карли", 1}, + {"Карло", 0}, + {"Карлон", 0}, + {"Карлос", 0}, + {"Кармен", 1}, + {"Картер", 0}, + {"Касандра", 1}, + {"Катерина", 1}, + {"Кати", 1}, + {"Катлин", 1}, + {"Кван", 0}, + {"Квентин", 0}, + {"Квинн", 0}, + {"Кевин", 0}, + {"Кевинус", 0}, + {"Кейлин", 1}, + {"Кейт", 0}, + {"Кел", 0}, + {"Келли", 1}, + {"Кен", 0}, + {"Кеннет", 0}, + {"Кери", 1}, + {"Керн", 0}, + {"Киган", 0}, + {"Ким", 1}, + {"Кимберли", 1}, + {"Кирк", 0}, + {"Кирус", 0}, + {"Клайд", 0}, + {"Кларенс", 0}, + {"Кларк", 0}, + {"Клирик", 0}, + {"Клиффорд", 0}, + {"Клэй", 0}, + {"Клэр", 1}, + {"Коди", 0}, + {"Колин", 0}, + {"Колония", 1}, + {"Конни", 1}, + {"Коннор", 0}, + {"Конрад", 0}, + {"Константин", 0}, + {"Констанция", 1}, + {"Копи", 2}, + {"Кора", 1}, + {"Корбет", 0}, + {"Корд", 0}, + {"Кори", 0}, + {"Корисо", 0}, + {"Корнелия", 1}, + {"Корнилий", 0}, + {"Королева", 1}, + {"Королевский", 0}, + {"Король", 0}, + {"Кошка", 1}, + {"Красный", 0}, + {"Крейг", 0}, + {"Крис", 0}, + {"Криста", 1}, + {"Кристен", 1}, + {"Кристина", 1}, + {"Кристис", 1}, + {"Кристофер", 0}, + {"Кровавый", 0}, + {"Ксуан", 0}, + {"Кулак", 0}, + {"Курган", 0}, + {"Курица", 1}, + {"Кэй", 1}, + {"Кэйс", 1}, + {"Кэл", 0}, + {"Кэлло", 0}, + {"Кэмерон", 0}, + {"Кэнди", 1}, + {"Кэри", 1}, + {"Кэрол", 1}, + {"Кэролан", 1}, + {"Кэролин", 1}, + {"Кэрри", 1}, + {"Кэси", 0}, + {"Лабиринт", 0}, + {"Лаборатория", 1}, + {"Лазарь", 0}, + {"Лайонел", 0}, + {"Лаки", 0}, + {"Лана", 1}, + {"Ланс", 0}, + {"Лара", 1}, + {"Ларри", 0}, + {"Ларс", 0}, + {"Лаура", 1}, + {"Лаури", 1}, + {"Леа", 1}, + {"Леаса", 1}, + {"Лейф", 0}, + {"Лео", 0}, + {"Леонард", 0}, + {"Леора", 1}, + {"Лерой", 0}, + {"Лесли", 1}, + {"Лестер", 0}, + {"Летучая", 1}, + {"Ли", 0}, + {"Ли", 1}, + {"Лиам", 0}, + {"Ливия", 1}, + {"Лиза", 1}, + {"Лила", 1}, + {"Лиланд", 0}, + {"Лилли", 1}, + {"Лиман", 0}, + {"Линда", 1}, + {"Линден", 0}, + {"Линдсей", 0}, + {"Линн", 1}, + {"Лион", 0}, + {"Лич", 0}, + {"Ллойд", 0}, + {"Ловчий", 0}, + {"Логан", 0}, + {"Логово", 2}, + {"Лон", 0}, + {"Лонни", 0}, + {"Лора", 1}, + {"Лорд", 0}, + {"Лорен", 1}, + {"Лорена", 1}, + {"Лоу", 0}, + {"Лоувелл", 0}, + {"Лояльный", 0}, + {"Луи", 0}, + {"Луиджи", 0}, + {"Луиза", 1}, + {"Луис", 0}, + {"Луиса", 1}, + {"Лучник", 0}, + {"Льюис", 0}, + {"Людвиг", 0}, + {"Люк", 0}, + {"Люсиль", 1}, + {"Лютер", 0}, + {"Маделена", 1}, + {"Майк", 0}, + {"Майлз", 0}, + {"Майлс", 0}, + {"Мак", 0}, + {"Макро", 0}, + {"Макс", 0}, + {"Максвелл", 0}, + {"Малкольм", 0}, + {"Малый", 0}, + {"Мами", 1}, + {"Манни", 0}, + {"Мантикора", 1}, + {"Манфред", 0}, + {"Марвин", 0}, + {"Маргарита", 1}, + {"Марджори", 1}, + {"Марж", 1}, + {"Мариана", 1}, + {"Марианна", 1}, + {"Марио", 0}, + {"Марион", 0}, + {"Марис", 1}, + {"Мариса", 1}, + {"Маришаль", 1}, + {"Мария", 1}, + {"Марк", 0}, + {"Марко", 0}, + {"Маркони", 0}, + {"Маркус", 0}, + {"Марлен", 1}, + {"Марлон", 0}, + {"Марни", 1}, + {"Марси", 1}, + {"Марсия", 1}, + {"Марта", 1}, + {"Мартил", 1}, + {"Мартин", 0}, + {"Мархэм", 0}, + {"Марчелло", 0}, + {"Марша", 1}, + {"Маршал", 0}, + {"Мастер", 0}, + {"Матвей", 0}, + {"Материальные", 2}, + {"Матт", 0}, + {"Мегадракон", 0}, + {"Медный", 0}, + {"Медуза", 1}, + {"Мейм", 1}, + {"Мелани", 1}, + {"Мелвин", 0}, + {"Мелинда", 1}, + {"Мелисса", 1}, + {"Мелководье", 2}, + {"Мелоди", 1}, + {"Мертвец", 0}, + {"Мертвый", 0}, + {"Местная", 1}, + {"Местный", 0}, + {"Мик", 0}, + {"Минди", 1}, + {"Минеральные", 2}, + {"Миникора", 1}, + {"Минни", 1}, + {"Мириам", 1}, + {"Митч", 0}, + {"Мишель", 1}, + {"Могучий", 0}, + {"Мойра", 1}, + {"Монах", 0}, + {"Моника", 1}, + {"Монте", 0}, + {"Морел", 0}, + {"Морина", 1}, + {"Моррис", 0}, + {"Мортон", 0}, + {"Мохаммед", 0}, + {"Мраморная", 1}, + {"Мудрый", 0}, + {"Мэл", 0}, + {"Мэнди", 1}, + {"Мэри", 1}, + {"Мэри", 1}, + {"Мэрилин", 1}, + {"Мюрель", 1}, + {"Мюррей", 0}, + {"Надина", 1}, + {"Налётчик", 0}, + {"Наоми", 1}, + {"Натали", 1}, + {"Натан", 0}, + {"Натаниэль", 0}, + {"Начальная", 1}, + {"Небеса", 1}, + {"Нед", 0}, + {"Некромант", 0}, + {"Нельсон", 0}, + {"Неустрашимый", 0}, + {"Ник", 0}, + {"Ники", 1}, + {"Николай", 0}, + {"Николас", 0}, + {"Николь", 1}, + {"Нил", 0}, + {"Новобранец", 0}, + {"Ной", 0}, + {"Норина", 1}, + {"Норм", 0}, + {"Норма", 1}, + {"Норман", 0}, + {"Норрис", 0}, + {"Ньют", 0}, + {"Нэйт", 0}, + {"Нэнси", 1}, + {"Нэнсис", 1}, + {"Обсидиановая", 1}, + {"Огненный", 0}, + {"Олаф", 0}, + {"Оливер", 0}, + {"Оливия", 1}, + {"Орден", 0}, + {"Особняк", 0}, + {"Остин", 0}, + {"Отис", 0}, + {"Оувен", 0}, + {"Охотник", 0}, + {"Павел", 0}, + {"Пам", 1}, + {"Памела", 1}, + {"Паркер", 0}, + {"Парти", 1}, + {"Патрик", 0}, + {"Патрисия", 1}, + {"Пег", 1}, + {"Пегги", 1}, + {"Пейдж", 1}, + {"Пенни", 1}, + {"Перри", 0}, + {"Перси", 0}, + {"Персиваль", 0}, + {"Петер", 0}, + {"Пикси", 1}, + {"Пирс", 0}, + {"Пит", 0}, + {"Плавучий", 0}, + {"Покои", 2}, + {"Пол", 0}, + {"Посвящённый", 0}, + {"Посвященный", 0}, + {"Последний", 0}, + {"Послушник", 0}, + {"Постоялый", 0}, + {"Предводитель", 0}, + {"Престон", 0}, + {"Привидение", 2}, + {"Придорожный", 0}, + {"Призрак", 0}, + {"Природные", 2}, + {"Пьер", 0}, + {"Пэт", 0}, + {"Пэтти", 1}, + {"Раду", 0}, + {"Разбойник", 0}, + {"Райан", 0}, + {"Раймонд", 0}, + {"Ральф", 0}, + {"Рамей", 0}, + {"Рамси", 0}, + {"Рандольф", 0}, + {"Рассел", 0}, + {"Расти", 0}, + {"Ратуша", 1}, + {"Рауль", 0}, + {"Рафаэль", 0}, + {"Рашель", 1}, + {"Ребекка", 1}, + {"Реви", 1}, + {"Рег", 0}, + {"Регина", 1}, + {"Реджинальд", 0}, + {"Рекс", 0}, + {"Рене", 0}, + {"Рени", 1}, + {"Ренцо", 0}, + {"Ресанда", 1}, + {"Речной", 0}, + {"Рики", 0}, + {"Ринальдо", 0}, + {"Рита", 1}, + {"Ричард", 0}, + {"Роб", 0}, + {"Робби", 0}, + {"Роберт", 0}, + {"Роберта", 1}, + {"Робин", 0}, + {"Рогатый", 0}, + {"Родни", 0}, + {"Роза", 1}, + {"Розали", 1}, + {"Розанна", 1}, + {"Рози", 1}, + {"Розмари", 1}, + {"Розмарина", 1}, + {"Рой", 0}, + {"Роки", 0}, + {"Роланд", 0}, + {"Ромона", 1}, + {"Рон", 0}, + {"Рональд", 0}, + {"Ронда", 1}, + {"Рори", 0}, + {"Росс", 0}, + {"Роуз", 1}, + {"Рошель", 1}, + {"Рубина", 1}, + {"Руди", 0}, + {"Руперт", 0}, + {"Рут", 1}, + {"Рути", 1}, + {"Рэндал", 0}, + {"Рэнди", 0}, + {"Саад", 0}, + {"Сабрина", 1}, + {"Сади", 1}, + {"Сал", 0}, + {"Салли", 1}, + {"Сальваторе", 0}, + {"Самюэль", 0}, + {"Сандип", 0}, + {"Сандра", 1}, + {"Сантос", 0}, + {"Сапфировый", 0}, + {"Сара", 1}, + {"Свен", 0}, + {"Свет", 0}, + {"Светлана", 1}, + {"Светящийся", 0}, + {"Святилище", 2}, + {"Священная", 1}, + {"Священник", 0}, + {"Себастьян", 0}, + {"Седрик", 0}, + {"Сеймур", 0}, + {"Секлия", 1}, + {"Селена", 1}, + {"Сергио", 0}, + {"Серый", 0}, + {"Сесиль", 0}, + {"Сет", 0}, + {"Сидней", 0}, + {"Сильвестр", 0}, + {"Сильфида", 1}, + {"Симон", 0}, + {"Симона", 1}, + {"Синди", 1}, + {"Синдис", 1}, + {"Синий", 0}, + {"Синтия", 1}, + {"Скалис", 0}, + {"Скелет", 0}, + {"Скорпикора", 1}, + {"Скотт", 0}, + {"Слабый", 0}, + {"Слейд", 0}, + {"Собака", 1}, + {"Собор", 0}, + {"Сол", 0}, + {"Солнце", 2}, + {"Сонни", 0}, + {"Спенсер", 0}, + {"Старший", 0}, + {"Стейси", 1}, + {"Стелс", 0}, + {"Стефан", 0}, + {"Стефани", 1}, + {"Стив", 0}, + {"Стивен", 0}, + {"Сторожевая", 1}, + {"Страж", 0}, + {"Стражник", 0}, + {"Стрекозавр", 0}, + {"Стрелок", 0}, + {"Стэн", 0}, + {"Стэнли", 0}, + {"Стюарт", 0}, + {"Суанна", 1}, + {"Судья", 0}, + {"Сулейман", 0}, + {"Сумеречный", 0}, + {"Сьюзан", 1}, + {"Сьюзи", 1}, + {"Сэм", 0}, + {"Сэнди", 1}, + {"Сэндин", 1}, + {"Сэра", 1}, + {"Сюзанна", 1}, + {"Тадеус", 0}, + {"Тайлер", 0}, + {"Тайсон", 0}, + {"Така", 0}, + {"Тамара", 1}, + {"Тамми", 1}, + {"Таня", 1}, + {"Тара", 1}, + {"Тейн", 0}, + {"Теодор", 0}, + {"Тереза", 1}, + {"Тереса", 1}, + {"Терранс", 0}, + {"Терри", 1}, + {"Тим", 0}, + {"Тимоти", 0}, + {"Тина", 1}, + {"Тиффани", 1}, + {"Тобиас", 0}, + {"Тодд", 0}, + {"Том", 0}, + {"Томас", 0}, + {"Тон", 0}, + {"Тони", 0}, + {"Тран", 0}, + {"Трейси", 1}, + {"Трент", 0}, + {"Трентон", 0}, + {"Трина", 1}, + {"Трип", 0}, + {"Трисия", 1}, + {"Троглодит", 0}, + {"Тронный", 0}, + {"Трувор", 0}, + {"Трэвис", 0}, + {"Туманный", 0}, + {"Тэд", 0}, + {"Тэрри", 1}, + {"Тюрьма", 1}, + {"Уальдо", 0}, + {"Уилберт", 0}, + {"Уильсон", 0}, + {"Ундина", 1}, + {"Уоллес", 0}, + {"Уоррен", 0}, + {"Упырь", 0}, + {"Учебный", 0}, + {"Уэбб", 0}, + {"Фабиан", 0}, + {"Фамильный", 0}, + {"Фарелл", 0}, + {"Федрус", 0}, + {"Фейт", 1}, + {"Феликс", 0}, + {"Фелиция", 1}, + {"Фердинанд", 0}, + {"Фил", 0}, + {"Филип", 0}, + {"Филлис", 1}, + {"Филомена", 1}, + {"Флетчер", 0}, + {"Флойд", 0}, + {"Флоренция", 1}, + {"Флосси", 1}, + {"Форрест", 0}, + {"Франк", 0}, + {"Франклин", 0}, + {"Франц", 0}, + {"Франциск", 0}, + {"Франческа", 1}, + {"Фред", 0}, + {"Фредерик", 0}, + {"Хавьер", 0}, + {"Хайден", 0}, + {"Хайди", 1}, + {"Хан", 0}, + {"Ханк", 0}, + {"Ханн", 0}, + {"Хаос", 0}, + {"Харви", 0}, + {"Харди", 0}, + {"Хариетта", 1}, + {"Харлан", 0}, + {"Харлей", 0}, + {"Харольд", 0}, + {"Харрисон", 0}, + {"Хелен", 1}, + {"Хильда", 1}, + {"Хит", 0}, + {"Хитер", 1}, + {"Хитет", 0}, + {"Хитоми", 1}, + {"Ходячий", 0}, + {"Хок", 0}, + {"Холден", 0}, + {"Холли", 1}, + {"Храм", 0}, + {"Хранилище", 2}, + {"Хью", 0}, + {"Хьюго", 0}, + {"Хэл", 0}, + {"Хэмптон", 0}, + {"Царь", 0}, + {"Цезарь", 0}, + {"Циклон", 0}, + {"Цитадель", 1}, + {"Чад", 0}, + {"Чак", 0}, + {"Чан", 0}, + {"Чандра", 1}, + {"Чарли", 0}, + {"Чарльз", 0}, + {"Чародей", 0}, + {"Часовой", 0}, + {"Чемпион", 0}, + {"Черная", 1}, + {"Чернокнижник", 0}, + {"Чертог", 0}, + {"Честер", 0}, + {"Чет", 0}, + {"Чип", 0}, + {"Чудище", 2}, + {"Шатер", 0}, + {"Шахтерская", 1}, + {"Шейла", 1}, + {"Шейлани", 1}, + {"Шелдон", 0}, + {"Шелл", 0}, + {"Шелли", 1}, + {"Шеллис", 1}, + {"Шердон", 0}, + {"Шерил", 1}, + {"Шерман", 0}, + {"Шерри", 1}, + {"Шеррин", 1}, + {"Шимон", 0}, + {"Школа", 1}, + {"Шон", 0}, + {"Шоуна", 1}, + {"Штаб", 0}, + {"Шэнон", 1}, + {"Шэри", 1}, + {"Шэрон", 1}, + {"Эван", 0}, + {"Эвелин", 1}, + {"Эд", 0}, + {"Эдгар", 0}, + {"Эдди", 0}, + {"Эдисон", 0}, + {"Эдит", 1}, + {"Эдмонд", 0}, + {"Эдна", 1}, + {"Эйб", 0}, + {"Эйлин", 1}, + {"Эйприл", 1}, + {"Экспертная", 1}, + {"Эл", 0}, + {"Элвин", 0}, + {"Элегантный", 0}, + {"Элен", 1}, + {"Элеонора", 1}, + {"Элиот", 0}, + {"Элисон", 1}, + {"Элисса", 1}, + {"Элитный", 0}, + {"Элла", 1}, + {"Эллен", 1}, + {"Элси", 1}, + {"Элтон", 0}, + {"Эльф", 0}, + {"Эми", 1}, + {"Эмиль", 0}, + {"Эмма", 1}, + {"Эммануил", 0}, + {"Эммет", 0}, + {"Энджи", 1}, + {"Энди", 0}, + {"Энн", 1}, + {"Энн", 2}, + {"Энок", 0}, + {"Эрвин", 0}, + {"Эрик", 0}, + {"Эрин", 1}, + {"Эрл", 0}, + {"Эрнест", 0}, + {"Эрни", 0}, + {"Эрнин", 0}, + {"Эрол", 0}, + {"Этан", 0}, + {"Этель", 1}, + {"Эш", 0}, + {"Эштон", 0}, + {"Юдифь", 1}, + {"Юрий", 0}, + {"Ядовитый", 0}, + {"Якоб", 0}, + {"Ян", 0}, + {"Янси", 0}, + {"Ярод", 0}, + {"Яспер", 0} +}, + gender_table[] = +{ + {"ад", 0}, {"акула", 1}, {"банк", 0}, {"башня", 1}, {"бластер", 0}, {"вампир", 0}, {"вдова", 1}, {"ведьма", 1}, {"витерсмит", 0}, {"владыка", 0}, {"владычица", 1}, + {"воин", 0}, {"вор", 0}, {"гидра", 1}, {"глаз", 0}, {"голем", 0}, {"гора", 1}, {"горгулья", 1}, {"город", 0}, {"громовая", 1}, {"двор", 0}, {"джинн", 0}, + {"дракон", 0}, {"дух", 0}, {"житель", 0}, {"жительница", 1}, {"зал", 0}, {"защитник", 0}, {"земля", 1}, {"искатель", 0}, {"ифрит", 0}, {"квартира", 1}, {"кольчуга", 1}, + {"командир", 0}, {"крыса", 1}, {"лейтенант", 0}, {"луна", 1}, {"людоед", 0}, {"магог", 0}, {"меч", 0}, {"мечник", 0}, {"минотавр", 0}, {"мышь", 1}, {"наемник", 0}, + {"огненная", 1}, {"огонь", 0}, {"орк", 0}, {"паук", 0}, {"пещера", 1}, {"пещеры", 1}, {"повелитель", 0}, {"погреб", 0}, {"полигон", 0}, {"приют", 0}, {"птица", 1}, + {"птичий", 0}, {"работник", 0}, {"рай", 0}, {"рейнджер", 0}, {"рух", 0}, {"слизень", 0}, {"солдат", 0}, {"титан", 0}, {"трактир", 0}, {"тролль", 0}, {"убийца", 0}, + {"улан", 0}, {"училище", 2}, {"шляпа", 1}, {"элементал", 0} +}; + + + +#include <mbstring.h> + +int GetGender(char *ansi_name, int name_len) +{ + auto name = (unsigned char *)ansi_name; + + GenderTableEntry *table = nullptr; + unsigned int table_size = 0; + if (name[0] >= (unsigned char)'а' && name[0] <= (unsigned char)'я') + { + table = gender_table; + table_size = sizeof(gender_table) / sizeof(*gender_table); + } + else if (name[0] >= (unsigned char)'А' && name[0] <= (unsigned char)'Я') + { + table = gender_table_caps; + table_size = sizeof(gender_table_caps) / sizeof(*gender_table_caps); + } + else return 0; + + int left = 0, + right = table_size - 1, + match = 0; + while (left <= right) + { + match = left + (right - left) / 2; + switch (_mbsncmp(name, (unsigned char *)table[match].name, name_len)) + { + case -1: right = match; break; + case 0: return table[match].gender; + case 1: left = match; break; + } + } + assert(false); + return 0; +} + + +bool IsSpecialName(const char *ansi_name) +{ + auto name = (unsigned char *)ansi_name; + return !_mbsncmp(name, (unsigned char *)"Мэри Джо", 8) || !_mbsncmp(name, (unsigned char *)"Ли Энн", 6) || + !_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14) || !_mbsncmp(name, (unsigned char *)"Стены тумана", 12); +} +int GetSpecialGender(const char *ansi_name) +{ + auto name = (unsigned char *)ansi_name; + if (!_mbsncmp(name, (unsigned char *)"Мэри Джо", 8)) + return 1; + if (!_mbsncmp(name, (unsigned char *)"Ли Энн", 6)) + return 1; + if (!_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14)) + return 1; + if (!!_mbsncmp(name, (unsigned char *)"Стены тумана", 12)) + return 0; + return 0; +} +const char *GetSpecialCase(const char *ansi_name, char c) +{ + auto name = (unsigned char *)ansi_name; + + if (!_mbsncmp(name, (unsigned char *)"Мэри Джо", 8)) + return "Мэри Джо"; + if (!_mbsncmp(name, (unsigned char *)"Ли Энн", 6)) + return "Ли Энн"; + + if (!_mbsncmp(name, (unsigned char *)"Врата в Бездну", 14)) + switch (c) + { + case 'I': case 'i': return "Врата в Бездну"; + case 'R': case 'r': return "Врат в Бездну"; + case 'D': case 'd': return "Вратам в Бездну"; + case 'V': case 'v': return "Врат в Бездну"; + case 'T': case 't': return "Вратами в Бездну"; + case 'P': case 'p': return "Вратах в Бездну"; + } + + if (!_mbsncmp(name, (unsigned char *)"Стены тумана", 12)) + switch (c) + { + case 'I': case 'i': return "Стены тумана"; + case 'R': case 'r': return "Стен тумана"; + case 'D': case 'd': return "Стенам тумана"; + case 'V': case 'v': return "Стены тумана"; + case 'T': case 't': return "Стенами тумана"; + case 'P': case 'p': return "Стенах тумана"; + } + + return nullptr; +} + +int __cdecl sprintfex_internal(char *str) +{ + auto p = strstr(str, "^"); + if (!p) + return strlen(str); + + char buf[8192]; + assert(strlen(str) < sizeof(buf)); + + bool integer_token_defined = false; + int integer_token = 0; + + bool gender_token_defined = false; + int gender_token = 0; + + auto src = buf, + dst = p; + strcpy(buf, str + (p - str)); + while (true) + { + switch (src[1]) + { + case 'I': + { + if (src[2] != '[') + goto _invalid_token; + src += 3; // ^I[ + + if (sscanf(src, "%d", &integer_token)) + integer_token_defined = true; + + auto int_begin = src; + while (*src++ != ']'); + + int int_len = src - int_begin - 1; + strncpy(dst, int_begin, int_len); + dst += int_len; + } + break; + + case 'L': + { + if (src[2] != '[') + goto _invalid_token; + assert(integer_token_defined); + src += 3; // ^L[ + + auto ending1 = src; + while (*src++ != ';'); + auto ending2 = src; + while (*src++ != ';'); + auto ending3 = src; + while (*src++ != ']'); + + char *actual_ending = nullptr; + int actual_ending_len = 0; + + int modulo = abs(integer_token) % 10; + if (modulo == 1) + { + actual_ending = ending1; + actual_ending_len = ending2 - ending1 - 1; + } + else if (modulo >= 2 && modulo <= 4) + { + actual_ending = ending2; + actual_ending_len = ending3 - ending2 - 1; + } + else + { + actual_ending = ending3; + actual_ending_len = src - ending3 - 1; + } + + strncpy(dst, actual_ending, actual_ending_len); + dst += actual_ending_len; + } + break; + + case 'R': + { + if (src[2] != '[') + goto _invalid_token; + assert(gender_token_defined); + + src += 3; // ^R[ + + auto ending1 = src; + while (*src++ != ';'); + auto ending2 = src; + while (*src++ != ';'); + auto ending3 = src; + while (*src++ != ']'); + + char *actual_ending = nullptr; + int actual_ending_len = 0; + + if (gender_token == 0) + { + actual_ending = ending1; + actual_ending_len = ending2 - ending1 - 1; + } + else if (gender_token == 1) + { + actual_ending = ending2; + actual_ending_len = ending3 - ending2 - 1; + } + else if (gender_token == 2) + { + actual_ending = ending3; + actual_ending_len = src - ending3 - 1; + } + else assert(false); + + strncpy(dst, actual_ending, actual_ending_len); + dst += actual_ending_len; + } + break; + + case 'P': + { + if (src[3] != '[') + goto _invalid_token; + switch (src[2]) + { + case 'I': case 'i': + case 'R': case 'r': + case 'D': case 'd': + case 'V': case 'v': + case 'T': case 't': + case 'P': case 'p': break; + default: + goto _invalid_token; + } + + if (IsSpecialName(src + 4)) + { + __debugbreak(); // check this is ok + auto name = GetSpecialCase(src + 4, src[2]); + int name_len = strlen(name); + + gender_token = GetSpecialGender(src + 4); + gender_token_defined = true; + + strncpy(dst, name, name_len); + dst += name_len; + while (*src++ != ']'); + break; + } + + auto name_begin = src + 4; + int name_len = 0; + for (int i = 0; name_begin[i] != ']'; ++i) + name_len++; + gender_token = GetGender(name_begin, name_len); + gender_token_defined = true; + + switch (src[2]) + { + case 'I': case 'i': + { + strncpy(dst, name_begin, name_len); + dst += name_len; + } + break; + + case 'R': case 'r': + case 'D': case 'd': + case 'V': case 'v': + case 'T': case 't': + case 'P': case 'p': + { + auto token_begin = src; + int token_len = 0; + for (int i = 0; token_begin[i] != ']'; ++i) + token_len++; + strncpy(dst, token_begin, token_len); + dst += token_len; + } + } + while (*src++ != ']'); + } + break; + + default: + { +_invalid_token: + auto token_begin = src; + while (*src++ != ']'); + + int token_len = src - token_begin; + char token[1024]; + strncpy(token, token_begin, token_len); + token[token_len] = 0; + + Log::Warning(L"Invalid format token: %S", token); + assert(false); + } + break; + } + + *dst = 0; + + auto copy_begin = src; + src = strstr(src, "^"); + if (!src) + { + strcpy(dst, copy_begin); // just copy the rest + break; + } + + int copy_len = src - copy_begin; + strncpy(dst, copy_begin, copy_len); + dst += copy_len; + } + + return dst - str; +} + + + + + + +//mm6text.non -> c structure array + /*FILE *f = fopen("_1.txt", "w+t"); + FILE *in = fopen("mm6text.non", "rt"); + fscanf(in, "%*[^\n]\n"); + + int idx = 0; + auto pairs = new NameGender[8000]; + + char line[1024]; + while (fscanf(in, "%[^\n]\n", line) && !feof(in)) + { + char name1[100], name2[100], name3[100]; + int e = sscanf(line, "%s\t%s\t%s", pairs[idx].name, pairs[idx + 1].name, pairs[idx + 2].name); + pairs[idx].gender = 0; + pairs[idx+1].gender = 1; + pairs[idx+2].gender = 2; + idx += e; + } + + for (int i = 0; i < idx; ++i) + for (int j = 0; j < i; ++j) + { + if (_mbsicmp(pairs[i].name, pairs[j].name) < 0) + { + char n[1024]; + strcpy(n, (char *)pairs[j].name); + auto g = pairs[j].gender; + + strcpy((char *)pairs[j].name, (char *)pairs[i].name); + pairs[j].gender = pairs[i].gender; + + strcpy((char *)pairs[i].name, n); + pairs[i].gender = g; + } + } + + for (int i = 0; i < idx; ++i) + { + fprintf(f, " {\"%s\", %u},\n", pairs[i].name, pairs[i].gender); + } + fclose(f);*/ \ No newline at end of file
--- a/texts.cpp Sun Feb 17 18:04:22 2013 +0100 +++ b/texts.cpp Mon Feb 18 03:58:08 2013 +0200 @@ -15,6 +15,20 @@ char *pGlobalTXT_LocalizationStrings[MAX_LOC_STRINGS]; + +int __cdecl sprintfex(char *buf, const char *format, ...) +{ + va_list args_ptr; + va_start(args_ptr, format); + { + vsprintf(buf, format, args_ptr); + } + va_end(args_ptr); + + extern int __cdecl sprintfex_internal(char *buf); + return sprintfex_internal(buf); +} + //----- (00452B95) -------------------------------------------------------- void __cdecl SetSomeItemsNames() {