Чтение онлайн

ЖАНРЫ

Агент: Ошибка 1999
Шрифт:

Эта мысль пришла коротко и зло. Виза. Если он сходит с ума, точно не дадут.

Четвёртая версия: всё это реально. Антон не стал о ней думать.

В его голове что-то живёт и читает вместе с ним. А у него файл, Михалыч и два с половиной часа до восьми.

Антон потёр глаза. Текст не сдвинулся.

Он открыл рот сказать «ладно». Ничего не вышло. Горло сжалось — перехватило. Он откашлялся.

— Ладно, — сказал он. Голос прозвучал чужим в пустом подвале.

Он встал. Прямоугольник качнулся вместе с ним, как прицельная сетка. Антон помотал головой. Текст размылся на мгновение и вернулся.

Ладно. Допустим. Галлюцинация не мешает работать. Руки есть. Часы на стене. Начало шестого. Два с половиной часа. Скачать не успел. Модем мёртв. Но файл на диске. Досовская утилита для побайтовой правки — есть. Значит, можно попробовать.

Антон переключился в режим, который знал хорошо: когда всё плохо, работай. Не думай — работай. Починить, что сломалось. Восстановить, что побилось. Руки знают. Голова подождёт.

Нажал кнопку питания правого монитора. Ничего. Ещё раз. Индикатор мёртвый. Пощупал корпус — горячий, но не критично. Кабель — сидит. Перевоткнул. Ничего. Антон подул на разъём — рефлекс, бесполезный, но руки делали сами, как дуют на картридж от Денди: знаешь, что не поможет, и всё равно дуешь. Ничего.

Модем — мёртв. Скачивание оборвалось на двенадцати процентах, на диске остался огрызок. Как та вёрстка.

Ладно. Ладно.

Антон перешёл ко второму системнику — тому, где шли Герои. Нажал кнопку перезагрузки. Писки: длинный, короткий — видео ОК, память ОК. Монитор ожил — синий экран, белые буквы, знакомый шрифт. Нормальный экран. Настоящий. Не в голове.

Перетащил кабель от мёртвого монитора к рабочему системнику — тому, на котором лежал файл с вёрсткой. Разъём тугой, винты закисли, Антон крутил пальцами, обламывая ноготь. Подключил. Включил. Обычная магия: машина работает, несмотря ни на что.

На экране появилась командная строка.

Антон открыл каталог печати.

Файл на месте. Двенадцать мегабайт. Побитый — но целый по размеру.

Синий прямоугольник никуда не делся. Висел в правом верхнем углу зрения — полупрозрачный, но читаемый. Антон попытался не замечать. Не вышло.

Антон открыл побитый файл в служебной утилите для работы с байтами. Шестнадцатеричный дамп потёк по экрану: слева — адреса, посередине — байты, справа — точки и буквы. Файл начинался как положено, заголовок был цел.

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

Он прикинул: один экран дампа — полкилобайта. Двенадцать миллионов делить на пятьсот двенадцать — тысяч двадцать пять экранов. При одной секунде на экран — часов шесть с лишним. Антон пересчитал, потому что и это число не хотело укладываться в голову. Шесть с лишним часов.

У него оставалось два с половиной часа.

Синий прямоугольник мигнул. Текст сменился.

А?ОМАЛИЯ ПЕРИФЕРИЙ?ОГО УСТРОЙСТВА

ВИЗУАЛЬ?ЫЙ ВЫХОД ПЕРЕ?АПРАВЛЕ?

ИСПОЛЬЗУЕТСЯ В?УТРЕ??ИЙ ДИСПЛЕЙ

Антон прочитал. Потом ещё раз. «Внутренний дисплей». Приехали.

Мигнул снова. Новый текст.

ПРОКРУТИТЬ ФАЙЛ К СЕРЕДИ?Е

СМЕЩЕ?ИЕ: ПРИМЕР?О 50% ОТ РАЗМЕРА

Антон не понял. Вернее — понял, но не поверил. Галлюцинация давала команды.

Он перескочил примерно на середину файла. На шестом мегабайте шёл нормальный код, читаемые строки, операторы верстки. Прямоугольник мигнул:

ДАЛЬШЕ

Антон зажал клавишу перелистывания и пошёл по файлу дальше. Седьмой мегабайт. Восьмой. Девятый. Палец уже начал неметь. Десятый. Строки мелькали, Антон не успевал читать — просто шёл, ждал, что мусор сам бросится в глаза.

Прямоугольник мигнул. Резко, как затвор.

СТОП

ОТКАТИТЬ: СМЕЩЕ?ИЕ 0x009A1200

Антон остановился. Откатил на указанное смещение. И увидел:

00 00 00 00 00 00 00 00
— ровные, мёртвые строки нулей вместо кода.

Он пролистал мимо. Не заметил. А оно — заметило.

ПОВРЕЖДЕ?ИЕ ОБ?АРУЖЕ?О

РАЗМЕР: ?ЕСКОЛЬКО СЕКТОРОВ

ПРИЧИ?А: СБОЙ ЗАПИСИ ?А ДИСК

РЕКОМЕ?ДАЦИЯ: ЗАМЕ?ИТЬ ИЗ РЕЗЕРВ?ОЙ КОПИИ

Антон перестал дышать.

Оно читало быстрее, чем он. Антон пролистал нули, не остановившись. Оно — остановилось. Засекло. Дало команду.

Такое Антон видел на чужих винтах: до нулей всё читается нормально, дальше несёт чушь. Шестнадцать страниц до нулей — чистые. После — мусор.

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

Вчерашний номер, та же вёрстка. Только телефоны в рекламе и слоган на первой полосе — старые.

Антон посмотрел на утилиту на мониторе. Курсор моргал — настоящий, зелёный. Потом — на синий прямоугольник в голове. Другой курсор. Невозможный. Два интерфейса — один на экране, другой внутри.

Он мог бы не делать ничего. Встать, уйти, захлопнуть дверь. Но два часа до срока, и Михалыч, и серьёзные люди, и двенадцать мегабайт, которые без подсказки он ковырял бы трое суток.

Антон сидел перед монитором. Лампа гудела. Принтер на стеллаже за спиной мигал оранжевым. Во рту пересохло.

Данные на входе — правильные. На выходе — то, что надо. Формула работала. Только подсказка пришла из синего прямоугольника в голове.

Антон вырезал побитый участок и вставил на его место блок из резервной копии. Несколько команд. Пальцы стучали по клавишам быстрее, чем обычно. Руки дрожали — мелко, на грани заметного. Адреналин, которому некуда деться.

Запустил экранный просмотрщик — старый, корявый, зато показывал файл для печати насквозь, без долгой подготовки. Полоска загрузки поползла: десять процентов. Шрифты грузились — один за другим, все на месте. Нормальные шрифты, не кракозябры. Двадцать процентов. Растры раскладывались. Серые прямоугольники начали проявляться — контуры, полутона, детали. Лица. Тридцать процентов.

Поделиться с друзьями: