
  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  ▒▒▒▒▒▒▒▒▒┼┼┼┼┼┼┼┼┼┼▒▒▒┼┼┼┼┼┼┼┼┼┼▒▒▒┼┼┼┼┼▒▒▒▒┼┼┼┼▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  ▒▒▒▒▒▒▒▒┼┼┼┼░░░░░░░░▒┼┼┼┼░░░░░░░░▒┼┼┼┼┼┼░▒▒┼┼┼┼░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  ▒▒▒▒▒▒▒┼┼┼┼░░▒▒▒▒▒▒▒┼┼┼┼░░▒▒▒▒▒▒▒┼┼┼┼░┼┼░▒┼┼┼┼░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  ▒▒▒▒▒▒┼┼┼┼┼┼┼┼┼┼▒▒▒┼┼┼┼┼┼┼┼┼┼▒▒▒┼┼┼┼░░┼┼░┼┼┼┼░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  ▒▒▒▒▒▒▒░░░░┼┼┼┼░░▒┼┼┼┼░░░░░░░░▒┼┼┼┼░░▒┼┼┼┼┼┼░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  ▒▒▒▒▒▒▒▒▒▒┼┼┼┼░░▒┼┼┼┼░░▒▒▒▒▒▒▒┼┼┼┼░░▒▒┼┼┼┼┼░░▒  FIDO:  2:5020/35.200   ▒▒▒
  ▒▒▒┼┼┼┼┼┼┼┼┼┼░░▒┼┼┼┼┼┼┼┼┼┼▒▒▒┼┼┼┼░░▒▒▒┼┼┼┼░░▒▒ voice: (384-2-)23-26-21 ░░▒
  ▒▒▒▒░░░░░░░░░░▒▒▒░░░░░░░░░░▒▒▒░░░░▒▒▒▒▒░░░░▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░▒
  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

   release  4.31                                 Трехлетию HIEW посвящается.
    11 apr 1994


        Hiew (Hacker's view) -  это  'гляделка'  для  тех,  кому  требуется
иногда в чужой программе изменить один-два байта (как правило 7xh на 0EBh).
Hiew позволяет просматривать  файлы  неограниченной  длины  в  текстовом  и
шестнадцатеричном  форматах,  а  также   в  режиме  дизассемблера  80386-го
процессора.


                    Управление курсором
                    ~~~~~~~~~~~~~~~~~~~
LEFT --------------- влево
RIGTH -------------- вправо
UP ----------------- вверх
DOWN --------------- вниз
PGUP --------------- экран вверх
PGDOWN ------------- экран вниз
HOME --------------- начало строки
END ---------------- конец строки
Ctrl/LEFT ---------- влево 20 колонок
Ctrl/RIGTH --------- вправо 20 колонок
Ctrl/HOME ---------- начало файла
Ctrl/PgUp ---------- начало файла
Ctrl/END ----------- конец файла
Ctrl/PgDown--------- конец файла
TAB ---------------- переключение полей HEX/ASCII


                    Текстовый просмотр
                    ~~~~~~~~~~~~~~~~~~
F1 ----------------- About - короткая информация о HIEW
F2 ----------------- Wrap\UnWrap - переносить\непереносить длинные строки
F4 (CR) ------------ Hex - переход в шестнадцатеричный режим
F6 ----------------- Select - выбор символа "перевод строки": CR/LF | LF | CR
F7 ----------------- Search - поиск
F9 ----------------- Files - список файлов, заданных в командной строке
F10 ---------------- Quit, если файл редактировали, то дата файла обновляется
Ctrl/F3 ------------ Replace - поиск и замена
Ctrl/F4 ------------ Reread - перечитывание файла
Ctrl/F7 (Ctrl/CR) -- FindNext - искать следующее
Ctrl/F8 ------------ PrvFil - предыдущий файл из списка
Ctrl/F9 ------------ NxtFil - следующий файл из списка
ESC ---------------- Quit - выход в DOS, дата файла не изменяется


                    Шестнадцатеричный просмотр
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~
LEFT --------------- Scroll left - прокрутка влево
RIGHT -------------- Scroll right - прокрутка вправо
HOME --------------- Home - выравнивание на границу параграфа (10h)
F1 ----------------- About - короткая информация о HIEW
F2 ----------------- Code - переход в режим дисассемблирования
F3 ----------------- Edit - редактирование текущего экрана
F4 (CR) ------------ Text - переход в текстовый режим
F5 ----------------- Goto - переход на указанное смещение
F7 ----------------- Search - поиск
F8 ----------------- Header - заголовок EXE-файла
F9 ----------------- Files - список файлов, заданных в командной строке
F10 ---------------- Quit, если файл редактировали, то дата файла обновляется
Ctrl/F3 ------------ Replace - поиск и замена
Ctrl/F4 ------------ Reread - перечитывание файла
Ctrl/F5 ------------ Base - базирование (см. ниже)
Ctrl/F7 (Ctrl/CR) -- FindNext - искать следующее
Ctrl/F8 ------------ PrvFil - предыдущий файл из списка
Ctrl/F9 ------------ NxtFil - следующий файл из списка
ESC ---------------- Quit - выход в DOS, дата файла не изменяется


                    Режим дезассемблирования
                    ~~~~~~~~~~~~~~~~~~~~~~~~
F1 ----------------- About - короткая информация о HIEW
F2 (CR) ------------ Hex - переход в шестнадцатеричный режим
F3 ----------------- Edit - редактирование текущего экрана
F5 ----------------- Goto - переход на указанное смещение
F6 ----------------- Reference - неторопливый поиск ссылок на данное смещение
F7 ----------------- Search - поиск
F8 ----------------- Header - заголовок EXE-файла
F9 ----------------- Files - список файлов, заданных в командной строке
F10 ---------------- Quit, если файл редактировали, то дата файла обновляется
Ctrl/F1 ------------ +10000h - переход на "текущее смещение+10000h"
Ctrl/F2 ------------ -10000h - переход на "текущее смещение-10000h"
Ctrl/F3 ------------ Replace - поиск и замена
Ctrl/F4 ------------ Reread - перечитывание файла
Ctrl/F5 ------------ Base - базирование (см. ниже)
Ctrl/F6 ------------ Next reference - продолжить поиск ссылок
Ctrl/F7 (Ctrl/CR) -- FindNext - искать следующее
Ctrl/F8 ------------ PrvFil - предыдущий файл из списка
Ctrl/F9 ------------ NxtFil - следующий файл из списка
ESC ---------------- Quit - выход в DOS, дата файла не изменяется


                    Режим шестнадцатеричного редактирования
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
F1 ----------------- Block - пометить блок
F3 ----------------- Undo - восстановление байта, находящегося под курсором
F4 ----------------- Byte - битовое редактирование байта (HEX mode)
F5 ----------------- Word - битовое редактирование слова (HEX mode)
F6 ----------------- Dword - битовое редактирование двойного слова (HEX mode)
F7 ----------------- Crypt - зашифровать/расшифровать байт/слово
F8 ----------------- SetCrypt - редактирование программки для Crypt
F9 ----------------- Update - запись в файл
F10 ---------------- PutBlk - запись блока в файл
Ctrl/F10 ----------- GetBlk - чтение блока из файла
ESC ---------------- Cancel - отмена всех обновлений
BACKSPACE ---------- BS - восстановление предыдущего байта


                    Режим редактирования кода
                    ~~~~~~~~~~~~~~~~~~~~~~~~~
F1 ----------------- Block - пометить блок
F2 (CR,TAB) -------- Assembler
F3 ----------------- Undo - восстановление байта, находящегося под курсором
F7 ----------------- Crypt - зашифровать/расшифровать байт/слово
F8 ----------------- SetCrypt - редактирование программки для Crypt
F9 ----------------- Update - запись в файл
F10 ---------------- PutBlk - запись блока в файл
Ctrl/F10 ----------- GetBlk - чтение блока из файла
ESC ---------------- Cancel - отмена всех обновлений
BACKSPACE ---------- BS - восстановление предыдущего байта


                    Режим просмотра заголовка EXE-файла
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
F3 ----------------- Edit - редактировать заголовок
F4 ----------------- Image - переход на начало образа EXE-файла (без заголовка)
F5 ----------------- Entry - переход на точку входа EXE-файла


                    Режим редактирования заголовка EXE-файла
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
F2 ----------------- Pages - вычисление страниц в файле (+2/+4 в EXEheader)
F3 ----------------- Undo - восстановление оригинального значения
F9 ----------------- Update - запись в файл
ESC ---------------- Cancel - отмена всех обновлений


                    Режим редактирования программки для Crypt
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
F2 ----------------- Size - выбор размера: байт/слово
F3 ----------------- Direct - выбор направления: вперед/назад
F4 ----------------- Clear - сброс программы и регистров
F5 ----------------- ClrReg - сброс регистров
F7 ----------------- Exit - выход
F9 ----------------- UpIP - указатель текущей команды ('>') вверх
F10 ---------------- DownIP - указатель текущей команды вниз
ESC ---------------- Exit - выход
CR ----------------- Edit - редактирование текущей строки
INSERT ------------- Insert - вставить строку
DELETE ------------- Delete - удалить строку


        Режим ввода строки поиска
        ~~~~~~~~~~~~~~~~~~~~~~~~~
        с версии 2.70 реализовано  редактирование строки поиска.   Работают
стрелки, DEL, BACKSPACE, INSERT.  PGUP/PGDOWN - очищает строку.  F2 - поиск
вперед/назад.  Если ввод давится  на строке  ASCII, то  поиск не  различает
маленькие/большие буквы (в т.ч.   и русские), нажатие  ввода на строке  HEX
различает буковки. С версии 4.00 приделан ассемблер, кнопочка F7.

 *** ВНИМАНИЕ ! ***  Одна и та же команда может ассемблироваться по-разному
                     разными ассемблерами.


        Ассемблер
        ~~~~~~~~~
        для тех, кто знает  его  без  книжек.   Byte/word/dword  ptr  можно
сокращать  до  "b,"/"w,"/"d,".   Все  числа  считаются  шестнадцатеричными,
буковку "h" можно  ставить, а можно  и не ставить,  но должны начинаться  с
цифры.  Можно складывать/вычитать ( mov bx,[123+23-46h] = mov bx,[100h]  ).
Сообщения  об  ошибках   сведены   до   минимума:   неправильная   команда,
синтаксическая,  неправильный  опреранд,   несоответствие  или   отсутствие
размера, поэтому можно применять при сдачах экзаменов в качестве задания "а
что здесь неправильно ?".  Безусловный JMP транслируется в 0E9 XX XX,  если
хотите короткий (0EB), так и пишите: jmp short xxxxx.


        Базирование
        ~~~~~~~~~~~
        для тех, кому надо, чтобы .com обязательно начинался с 100h, и  кто
хочет чтобы смещение в сегменте данных  начиналось  с  нуля.   База  -  это
просто константа, которая прибавляется к смещению и адресам перехода.
   При редактировании  HOME "вписывает" текущее смещение (смещение верхнего
левого угла); PgUp/PgDown обнуляют текущую базу; +/- работают независимо от
текущего положения курсора.


        Программа для Crypt ( F7/F8 in Edit )
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        для за/расшифровки кода/данных по сравнительно простому  алгоритму.
За один раз за/расшифровывается  один байт/слово,  размер задается  кнопкой
F2.  Программка должна  завершаться оператором  "LOOP numberLine",  впрочем
"Loop 1" можно опустить.

                     команды
        режим Reg    : neg,mul,div
        режим Reg-Reg: mov,xor,add,sub,rol,ror,xchg
        режим Reg-Imm: mov,xor,add,sub,rol,ror
        режим Imm    : loop

        доступны все 8/16-битные  регистры, которые абсолютно  равноправны,
кроме  AL/AX,  который   заполняется  байтом/словом  из   расшифровываемого
фрагмента, и из которого потом байт/слово возвращается на место.

Отличия от стандартного ассемблера:
        нет операндов в памяти
        loop используется в качестве jmp/stop
        операнды команд rol/ror должны иметь одинаковый размер, т.е.
           ROL AX,CL или ROL AL,CX не допускаются

Примеры:
     a. про-XOR-ить байт со значением 0AAh:
        1. XOR  al,0aah
        2. LOOP 1               ; можно опустить.

     b. про-XOR-ить слово с инкрементом маски
        1. MOV  dx,0
        2. XOR  ax,dx           ; F7 будет "ходить" по этим командам
        3. ADD  dx,1            ;
        4. LOOP 2               ;


                        Структура Ini-файла
                        ~~~~~~~~~~~~~~~~~~~
        С  версии  4.21  наконец-то  приделан  Ini-файл,  в  котором  можно
задавать цвета совсем не те, которые нравятся автору.

typedef struct{
   char     signature[ 8 ],   //  "IniHiew",0
            unused[ 6 ];
   unsigned version;
   COLOR    color;
            } INI;

typedef struct{
   char     title,            //  информационная строка
            keyNum,           //  номер клавиши
            keyTxt,           //  текст на клавише
            bar,              //  left bar
            help,             //  help
            error,            //  error
            wait,             //  надпись "wait"
            main,             //  основной цвет
            mark,             //  выделенный
            editBold,         //  выделенный при редактировании
            win,              //  окно
            winLine,          //  строка ввода в окне
            winBold,          //  выделенный в окне
            winCrt,           //  текущий в окне
            unused[ 2+16 ];   //  может быть пригодиться в дальнейшем
            } COLOR;


                    Дополнительные возможности
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~
* в режиме дисассемблирования нажатием 1-9 можно перейти на подпрограмму или по
  адресу перехода\цикла; 0 вернет на предыдущее место
* во всех режимах имеется зацикленный стек на семь значений, в котором можно
  запомнить текущее смещение в файле (Gray plus), вернуться по этому смещению
  (Gray minus) - кроме режима редактирования, или очистить стек (DEL)
* после запуска происходит самотестирование на предмет заражения HIEW.EXE
  вирусом, и если заражение обнаружено, работа прекращается с выдачей
  сообщения: "HIEW bad, work aborted" ( знатоки английского могут поправить).
  Кто все-таки хочет продолжать работу может воспользоваться клавишей "DEL".
  Стелс-вирусам дозволено обходить проверку, все-таки это не фаг.
* в режиме редактирования измененные байты выделяются
* поддерживаются видеорежимы вплоть до 132x70
* в режиме битового редактирования F2 инвертирует текущий бит
* поиск можно прекратить досрочно кнопкой ESC, наличие нажатия проверяется
  только при чтении с диска
* с версии 3.14 файл открывается в Read-only mode, и переокрывается для
  записи при редактировании(F3)
* с версии 4.10 в командной строке можно задавать несколько файлов или
  задавать файлы по маске. Выбор файла через F9.
* с версии 4.18  при вводе  строки поиска  в режиме  DECODE, можно  указать
  область команды, где искать  нужное значение (кнопка  F3: "All" -  искать
  любое вхождение,  "First" -  искать в  начале команды,"Last"  - искать  в
  конце команды).  Например  указание  искать  байт  0EFh/First  укажет  на
  команды OUT DX,AX, а команды типа MOV xx,0EFh будут игнорированы.
* с версии 4.30 можно читать/писать блоки через режим редактирования. Если
  в окне ввода при записи блока offset равен FFFFFFFF, блок будет дописан
  в конец файла.
* GetBlk: читается блок размером с отмеченный блок со смещения, заданным в
  окне ввода и записывается в текущий файл со смещения под курсором.


                    Информационная строка
                    ~~~~~~~~~~~~~~~~~~~~~
────────────────────────────────────────────────────────────────────────────────
 File                   ------- xxx xxxxxxx ║ Hacker's view release X.XX by SEN.
────────────────────────────────────────────────────────────────────────────────
 └─────────┬─────────┘  └──┬──┘ └┬┘ └──┬──┘
       имя файла           │     │     │
                           │     │     └> 1. длина файла в байтах
                           │     │        2. в режиме HexEdit позиция курсора
                           │     │
                           │     └──────> в режиме Text номер первой колонки
                           │
                           └────────────> состояние стека, ромбик указывает на
                                           текущее положение вершины стека



                    Release history
                    ~~~~~~~~~~~~~~~
1.1  - 11 apr 91
1.2  - 12 apr 91
1.3  -  8 may 91
1.4  - 22 may 91
1.5  - 23 may 91
1.6  - 29 may 91
1.7  - 19 jun 91

2.0  -  1 aug 91 - добавлен 8088дисассемблер (идея: И.Надточий)
2.1  -  6 aug 91 - добавлен стек
2.2  - 22 aug 91 - реализован режим UNDO в редактировании
                 - включена возможность редактирования кода
                 - исправлены замеченные ошибки
                 - написана сопроводиловка
2.31 - 27 sep 91 - печать экрана перенесена на кнопку PrintScreen
                 - переход на Microsoft C 6.0 и in-line ассемблер
2.43 - 31 oct 91 - скроллинг влево/вправо в режиме HEX
                 - редактирование заголовка EXE-файла
2.50 - 11 nov 91 - сообщения валятся в окно
2.51 -  5 dec 91 - синхронизировано изменение точки входа с редактированием
                    CS:IP (Пачковский указал)
2.52 - 18 dec 91 - максимальная длина строки увеличена до 300-х символов
2.53 - 23 dec 91 - в окне ввода нажатие стрелок не вываливает мусор
2.60 - 27 dec 91 - битовое редактирование (по просьбе Лаврентьева)
2.61 - 16 jan 92 - исправлена некорректность работы F8/F5, если CS:IP указывали
                    за конец файла
                 - правильно помечается текст, если в строке много символов
                    табуляции
                 - чтобы не было скучно ждать,в режиме поиска сделана надпись
                    " Wait  "
2.62 - 28 jan 92 - клавиша END в текством режиме "уходит" на реальный конец
                    строки, а не на конец буфера строки
2.63 - 18 feb 92 - выставлен свой INT 24h
                 - в режиме CODE поиск выравнивается на границу команды
2.64 - 21 feb 92 - вроде бы как работает вместе с SHARE в only-read mode
2.70 - 7  mar 92 - наконец-то сделано редактирование строки поиска
                 - переписан весь ввод
                 - если файл редактировался, ESC выходит в DOS, не меняя дату и
                    время файла
                 - кой-чего по мелочи переделано и исправлено
2.81 - 11 mar 92 - поиск назад (Свиридов очень просил)
                 - и вообще переписан весь поиск
                 - в режиме HexEdit операция XOR (по просьбе Лозинского)
2.83 - 10 apr 92 - и опять показывает на CGA и Hercules'e
2.84 -  5 jun 92 - исправлена ошибка: при запуске с командной строки и
                    сообщения об ошибке курсор куда-то уходил
                 - что-то для совместимости с видеобуфером DesqView (Охапкин
                    настаивал)
                 - измененные байты при редактировании byte/word/dword
                    выделяются
2.85 - 11 jun 92 - поддержка видеорежимов с более, чем 80 колоноками
2.86 - 30 jun 92 - исправлена ошибка: поиск на границе буффера

3.00 - 29 sep 92 - поиск можно прекратить досрочно кнопкой Esc
                 - дисассемблер 386
3.10 - 13 oct 92 - исправлена ошибка версии 3.00 - при редактировании кода
                    jmp/call near "уплывал"
                 - в режим деассемблирования добавлен поиск ссылок
                 - ShiftF7/ShiftF2 заменены на CtrlF7/CtrlF2
3.11 - 19 oct 92 - поиск переложен на алгоритм Боуера-Мура (чем длиннее строка,
                    тем быстрее находит (или не находит) )
3.13 - 12 nov 92 - time-slice (Скулкин показал)
3.15 - 10 feb 93 - файл при старте открывается только для чтения и
                    переокрывается для записи при редактировании
3.16 - 24 feb 93 - "DEL halfbyte" при редактировании строки поиска
3.17 -  1 mar 93 - кнопка F6 в textMode - изменение символа "перевод строки"

4.00 - 12 may 93 - Assembler8088
                    исправлена ошибка: PgUp на первом-втором блоке подкачки,
                                       PgDn на последнем-передпоследнем блоке
                    push/pop BP для Int 10h/ah=6(7) - говорят, есть такие БИОСы
                    в дисассемблере сделан указатель размера (b,w,d)
                    корректней показывается смещение при mod=1
4.10 - 14 may 93 - много файлов в командной строке
                    много ассемблерных строк при вводе строки поиска
4.12 - 15 jun 93 - Ctrl/PgDn как Ctrl/End, Ctrl/PgUp как Ctrl/Home,
                    Shift/F7 как Ctrl/F7
4.13 - 21 jun 93 - поиск назад начинается с конца экрана
4.14 - 28 jun 93 - базирование (Ctrl/F5 в Hex/Decode)
                    вычисление страниц в файле (F2 в редактировании заголовка)
4.15 - 21 jul 93 - окна с тенями
                    при редактировании (hex,code) курсор движется по полубайтам
                    F4 (Image) в просмотре заголовка EXE-файла
4.17 -  6 sep 93 - при вводе: если первый вводимый символ не курсор, то строка
 (made in Riga)      ввода стирается ( по многочисленным просьбам и специально
                     для Эгонса Буша )
                    Ctrl/F4 перечитывает файл
4.18 -  4 oct 93 - при поиске в DECODE найденная команда центрируется
                    FindNext в DECODE продолжается с последнего найденного
                     байта, независимо от движения стрелок, но кроме Ctrl/Home,
                     Ctrl/End, F5.
                    кнопка F3( All/First/Last ) в вводе строки поиска DeCode
4.20 - 23 nov 93 - Crypt в режиме редактирования
4.21 - 25 nov 93 - Ini-file для цветов
4.30 -  4 apr 94 - Запись/чтение блоков
    трехлетию       окна окрываются посередине экрана
      HIEW          header можно смотреть вне зависимости от сигнатуры
   посвящается      CtrlF8/CtrlF9 - предыдущий/следующий файл из списка
                    CtrlF1/CtrlF2 в DECODE mode - вперед/назад на 10000h
                    в TEXT mode добавлен NULL-разделитель стоки
                    Ctrl/F3 - поиск и замена
4.31 - 11 apr 94 - Исправлена ошибка версии 4.30 ( неправильные near call/jmp )

                                 * * *
