Ефективний код
4/5/06 09:30Покопирсався вчора у сорцах Jagged Alliance 2. Цікава іграшка, хоча і старенька - 1999 року. Все на голому С, треба мабуть розуміти - для ефективності. Не все одразу запрацювало, бо сорці в мене від однієї версії, а файли даних від іншої; різниця невелика: щось наче 1.6 та 1.3, але дещо помінялося, тож довелось порозбиратися.
Замість тексту на екрані - якась абракадабра, літери інші - наче кодування злетіло. Проблему знайшов, але заразом роздивився, як вони виводять текст. Мамо моя рідна! Те, як працював Duden Rechtschreibung (про нього якось іншим разом :) ) - дитячі розваги, порівняно з Ja2. Якщо коротко, то кодування задане масивом, в якому треба знайти індекс елемента з відповідним значенням одного з полів. Зауважу, що робити це слід при виводі кожного гліфа (sic!). Масив чималенький - більше ніж півтори сотні записів. Як відбувається пошук? Прямим перебором. Після чого викликається супернавернута функція на асемблері (!), яка цього гліфа виводить.
Замість тексту на екрані - якась абракадабра, літери інші - наче кодування злетіло. Проблему знайшов, але заразом роздивився, як вони виводять текст. Мамо моя рідна! Те, як працював Duden Rechtschreibung (про нього якось іншим разом :) ) - дитячі розваги, порівняно з Ja2. Якщо коротко, то кодування задане масивом, в якому треба знайти індекс елемента з відповідним значенням одного з полів. Зауважу, що робити це слід при виводі кожного гліфа (sic!). Масив чималенький - більше ніж півтори сотні записів. Як відбувається пошук? Прямим перебором. Після чого викликається супернавернута функція на асемблері (!), яка цього гліфа виводить.