Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Как открыть файл в формате HLP

Потребовалось открыть файл в древнем формате HLP. Оказавается сейчас его ничего не открывает, даже операционная система Виндоуз, под которую он когда-то и был создан.

Возможно существует какой-то быстрый и приятный путь читать такие файлы, но мне на него выйти не удалось. Гуглёжка принесла не первой свежести утилиту winhelpcgi, которая просто так не скомпилировалась, пришлось разбираться и патчить:

diff --ignore-blank-lines --minimal -urd a/winhelpcgi/dib2png.c b/winhelpcgi/dib2png.c
--- winhelpcgi-1.0/winhelpcgi/dib2png.c	2004-06-15 11:38:40.000000000 +0400
+++ winhelpcgi-1.0-patched/winhelpcgi/dib2png.c	2018-11-03 13:59:03.405031382 +0300
@@ -85,7 +85,7 @@
   /* Set error handling.  REQUIRED if you aren't supplying your own
 	* error hadnling functions in the png_create_write_struct() call.
 	*/
-  if (setjmp(png_ptr->jmpbuf))
+  if (setjmp(png_jmpbuf(png_ptr)))
 	 {
       /* If we get here, we had a problem writing the file */
       png_destroy_write_struct(&png_ptr,  (png_infopp)NULL);
@@ -93,7 +93,7 @@
 	 }

   /* Set the I/O callback function to transfer directly to memory */
-  png_set_write_fn(png_ptr, (voidp) sbout, user_write_data, NULL);
+  png_set_write_fn(png_ptr, (png_voidp) sbout, user_write_data, NULL);

   /* Get access to the windows DIB data */
   lpbmi = (LPBITMAPINFOHEADER) GlobalLock(hDIB);

Утилита с грехом пополам преобразовала файл в нечитаемый ХТМЛ, который пришлось перекодировать:

/usr/local/bin/winhelpcgi.cgi --tar HELP.HLP |
php -r 'echo mb_convert_encoding(strtr(stream_get_contents(STDIN), ["\0"=>""]),
"CP1252", "HTML-ENTITIES");' > help.html

После этого читать можно, но если кто-нибудь подскажет более удобоваримый способ преобразования, буду благодарен.

7 комментариев
Baka 2018

Поставить ещё более старую Виндоуз в виртуальную машину не будет проще?

Евгений Степанищев 2018

Её где-то взять ещё надо. Всё вышеописанное у меня минут 15—20 заняло.

Andrey Nikanorov 2018

Вот тут вроде виртуалка с XP всё ещё есть: https://www.microsoft.com/en-us/download/details.aspx?id=11575

Евгений Степанищев 2018

Спасибо за ссылку, но этот способ дольше :)

Алексей 2018

Если разговор про открытие *.hlp по Windows 10 — то есть всякие bat-файлы, типо этого http://blackstrip.ru/phpBB2/viewtopic.php?t=629

Алексей 2018

Они ставят winhlp32.exe и файлы открываются штатным способом по даблклику

Евгений Степанищев 2018

Ага, спасибо! У меня Винды нет, но мало ли, знать полезно.