Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.FIDONET.TODAY
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.FIDONET.TODAY с датами от 09 Jul 13 15:35:00 до 30 Apr 24 23:16:44, всего сообщений: 43888
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 15750 из 43888 =============================== RU.FIDONET.TODAY =
От   : Rinat H. Sadretdinow             2:5020/620         11 Nov 19 23:14:10
Кому : Evgeniy                                             11 Nov 19 23:14:10
Тема : T-Mail IP
FGHI : area://RU.FIDONET.TODAY?msgid=2:5020/620+5dc9c6dd
На   : area://RU.FIDONET.TODAY?msgid=2:5023/24.3755+5dc95589
= Кодировка сообщения определена как: CP866 ==================================
Ответ: area://RU.FIDONET.TODAY?msgid=2:5020/570.1+5dc9c91c
Ответ: area://RU.FIDONET.TODAY?msgid=2:5023/24.3755+5dc9558a
Ответ: area://RU.FIDONET.TODAY?msgid=2:5023/24.3755+5dca6ea8
==============================================================================
Hello Evgeniy!

11 Nov 19 22:00, you wrote to me:

RHS>> Там слово сравнивается или байт? Если байт, то может не на 0x7D
RHS>> заменить, а на 0x73? Чтобы беззнаковое сравнение было. Хотя
RHS>> разницы при значении 80 в принципе никакой, но на всякий случай?

Ev> Сравнивается слово, вот код этого места:

[...]

Это место я нашёл уже. Hо я смотрел видать другую версию tmailnt.exe потому что адреса у меня чуть другие.

Hемного лучше выглядит после Hex-Rays (я обозвал эту проблемную функцию CheckConsoleSize, она вызывается в двух местах и везде если возвращает -1 то "Error: unable to initialize video system"):

~~~
signed int CheckConsoleSize()
{
  signed int result; // eax@3
  int consoleScreeenBuffer; // [sp+0h] [bp-18h]@2
  __int16 maximumWindowSize_Y; // [sp+12h] [bp-6h]@2
  __int16 maximumWindowSize_X; // [sp+14h] [bp-4h]@2

  if ( !hConsoleOutput )
    goto LABEL_11;
  GetConsoleScreenBufferInfo(hConsoleOutput, (PCONSOLE_SCREEN_BUFFER_INFO)&consoleScreeenBuffer);
  rows = maximumWindowSize_X;
  columns = maximumWindowSize_Y;
  lpConsoleBuffer_0 = (CHAR_INFO *)AllocConsoleBuffer(4 * maximumWindowSize_X * maximumWindowSize_Y);
  lpConsoleBuffer_1 = (int)lpConsoleBuffer_0;
  if ( columns != 80 )
    return -1;
  if ( columns > 132 )
    return -1;
  if ( rows < 25 )
    result = -1;
  else
LABEL_11:
    result = 0;
  return result;
}
~~~

Явно видна бага, после

if (columns != 80)

до

if (columns > 132)

просто не дойдёт никогда, так что да, по самой примитивной логике там должно быть

if (columns < 80)

а не

if (columns != 80)

PVS-Studio ошибки такого типа ловит на ура, но во времена написания T-Mail никакого PVS-Studio не существовало.

Ev> А так - причин ошибки может быть несколько, какая из них не даёт
Ev> работать под Win8? А Шива его знает... Без отладчика на конкретной
Ev> системе гадать можно долго. Либо упатчиться в край. :-) Поэтому тут
Ev> лишь предположения.

Если на семёрке сменить размер консоли и сделать не 80 столбцов, а больше, то и и на семёрке тоже перестаёт запускаться. Судя по всему у всех предшественников Windows 8 размер консоли by default был 80x25 и поэтому проблем не возникало, а у Windows 8 явно столбцов побольше будет.

Ev> Единственное только, что при запуске с параметром "-NOCON" эта функция
Ev> вообще не должна вызываться, поэтому та же ошибка не должна вылезать.
Ev> Hо и интерфейса тоже, видимо, быть не должно...

Без интерфейса плохо.

Предлагаю создать ярлык для запуска именно T-Mail и в свойствах ярлыка принудительно установить ширину консоли в 80 столбцов. Тогда и запускаться должно, и tmailnt.exe патчить не придётся.

Bye!

--- GoldED+/LNX 1.1.5-b20170303
* Origin: -= Thunder Bird =- (2:5020/620)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.251772 секунды