158____________________________________________

Интересно отметить, что тем пробелам, которые получены при выводе файла командой TYPE, соответствуют 3 различных кода: 0, 32 и 255. Кроме того эта команда не показывает на экране некоторые байты, которые используются для управления выводом, например, 8, 10, 13 и 26. Поэтому символ 26 обнаруживается под номером 246, в то время как по выводу на экран кажется, что он должен быть под номером 244. Это произошло из-за того, что при исполнении команды TYPE по коду 8 (не путайте с символом цифры 8!) сдвинула курсор на одну позицию влево вместо того, чтобы вывести белую точку на черном фоне (символ соответствующий коду 8) и перейти на одну позицию вправо.

Теперь можно строить наши гипотезы на более прочном основании. К текстовой части заголовка файла следует отнести 3 символа пробела, то есть заголовок файла содержит 7 байтов текстовой информации. Следующие 25 байтов по-видимому отведены для кодирования каких-то чисел, относящихся к файлу в целом. Аналогично текстовая часть заголовка страницы уже состоит из 8 байтов, а числовая из 24. Что касается числовой информации заголовков, то в этой игре "холодно - горячо" при их расшифровке следует учитывать, что старшие и младшие байты целых чисел записаны в обратном порядке. Немедленно за текстовой частью заголовка страницы следует пара байтов, которые представляют целое число 437. А это уже горячо, так как соответствует номеру кодовой страницы США! Строка, состоящая только из нулей, наверняка кодирует символ с номером о. Нетрудно убедиться, что следующие за ней две строки кодируют символы 1 и 2 (две "мордашки" — позитив и негатив соответственно). Затем следуют четыре строки, кодирующие символы 3, 4, 5 и 6 (карточные масти — черви, бубны, трефы и пики соответственно). Вы можете проверить это, используя шестнадцатеричные коды символов для построения растровых изображений. Поэтому предметом нашего дальнейшего поиска становятся только заголовки.

Пользуясь этим предположением попробуем поискать заголовки других страниц и их номера (разумеется, автоматически) при помощи сле-дую1цей программы:

CLS 'очистка экрана DIM byte AS STRING * 1 'определение байта ЬЬ% = 0 'код прошлого символа ЫэЬ% = 0 'код позапрошлого символа

OPEN "C:\dos\ega3.cpi" FOR BINARY AS #1 'открытие файла i& = 0 'запись 0 в счетчик байтов DO 'начало цикла чтения

i& = i& + 1 'номер следующего байта

GET #1, i6, byte 'чтение байта

EGA$ = CHR$(bbb%) + CHR$(bb%) + byte

'формирование строки

IF EGA$ = "EGA" THEN 'проверка на заголовок страницы i& = i& + 6 'для чтения номера страницы GET #1, i6, j% 'чтение номера страницы PRINT USING "tt#####"; i& - 8; j%