╔══════════════════════════════════════════════════════════════╗ ║▒▒▒▒▒▒▒▒▒▒░ Глюки разные нужны, глюки разные важны... ░▒▒▒▒▒▒▒║ ╚══════════════════════════════════════════════════════════════╝ "Глюков не содержит только абсолютно ненужная программа..." (Из законов Мерфи). ╔══════════════════════════════════════════════════════════════╗ ║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░ CDOS 1.15 ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║ ╚══════════════════════════════════════════════════════════════╝ Внимание! Чисто серверная программа! Внимание! Не запускайте, не прочитав описание - иначе можно испортить серверный диск! (C) WLODEK BLACK Всем привет! ...Народ, прикиньте: вчера (8 июня - прим.авт.) у меня впервые (!) за 9 месяцев (!) работы RABBIT BBS отключили электричество во время работы сервера! Увидев утром рамочку 128-го режима, я )^( :-( =:-[ . Самое главное и обидное, что я остался без хистори. И вот спустя 9 месяцев (выносил, как говорится...) у меня наконец дошли руки и до этой проблемы (мозги тоже дошли). Кстати, потеря history раньше могла происходить не только из-за отключения электропитания, но и из-за сбоев аппаратуры (компьютер "повис") и даже собственных ошибочных действий сисопа (выключил компьютер и вспомнил: "$#%&@, забыл хистори записать!"). В CDOS1.15 реализована автоматическая отгрузка хистори по завершении каждого коннекта, то есть при опускании трубки на сервере. Хистори записывается как блок секторов (не как файл!) на участок диска, начинающийся с дорожки 1, сектор 0, то есть сразу после системной дорожки. Диск для записи - B:, но это легко меняется (как именно - чуть позже). Запишите на пустой серверный диск что угодно длиной 62 сектора, чтобы забить место; затем запишите "полезные" файлы, а резервирующий место файл сотрите, но не уплотняйте диск (или не стирайте, если хотите; все равно первый файл не скачивается). После каждого завершения связи в зарезервированное место будет записываться хистори, точнее, ее аварийный вариант, который при необходимости может быть вытащен оттуда. Под "аварийным вариантом" я подразумеваю массив данных длиной 62 сектора с неотрезанными хвостовыми пробелами. Если надобности в аварийном варианте не возникает, никакого обслуживания он не требует, так как при каждом запуске сервера "от нуля" он автоматически пропробеливается по всей длине. Если ваш компьютер способен самозапускаться при возобновлении электропитания, нужно будет что-нибудь придумать (хотя бы "beep" на Бейсике в качестве boot-а и... будильника), чтобы не загубить записанную страничку при возможном самопроизвольном перезапуске сервера, когда она будет вся прописана пробелами. Изменение дисковода для записи хистори: найдите доктором последний сектор файла "CDOS1.15" и в позиции +015h (см. далее поправку - авт.) байт от начала сектора найдите байт #01. Это означает: "дисковод B:". Переправьте байт на #00, #02 или #03. Вот особые приметы этого байта: перед ним стоит #3E, а после - #32 (см. далее поправку - авт.). Последний сектор файла CDOS1.15 - это неупакованный (специально) фрагмент. Вы можете полазить по нему дизассемблером и еще чего-нибудь переправить, например, можете сменить месторасположение трек/сектора хистори на диске. В CDOS 1.15 удалена процедура паузы при "бросании" трубки, так как теперь в роли этой паузы выступает время записи хистори на диск. Остальные доработки 14-й и предыдущих версий сохранены. Теперь о глюке. Я обнаружил небольшой глюк в CDOS 1.15, которую выпустил несколькими днями раньше! Дело вот в чем: в ситуации, когда на сервере происходит акт самоубийства (трубка _вешается_), срабатывает автоотгрузка хистори на постоянно зарезервированный под это дело диск, и этот диск остается текущим. Когда юзер переконнекчивается и _сразу_ (что, безусловно, правильно!) жмет RECEIVE, ему передаются сектора с _этого_ диска, а не с того, с которого он принял каталог. (Что может произойти в случае TRANSMIT - ой-йо-йой...). Сегодня, в пятницу, 13-го (!), я ИСПРАВИЛ этот нетерпимый глюк, который несколько дней не замечал благодаря, в-общем-то, постоянно хорошему коннекту на моей BBS. Для отличия исправленной версии от глючной я сменил один символ в наименовании файла: исправленная версия называется "CDOS1*15" со "звездочкой" вместо точки. (Обзывать 16-й версией было бы наглостью... :-) ) ВНИМАНИЕ! В связи с изменением содержания последнего сектора файла "CDOS1*15" изменилась и точка входа для установки дисковода для отгрузки хистори! Теперь байт #01, обозначающий номер дисковода, находится по адресу +19h от начала сектора и окружен такими байтами: Смещение : Байт Байт Байт Байт +18h : #3E #01 #CD #5C ^нужный байт Под диск-доктором в последнем секторе будет видна надпись: "CDOS 1.15 - LAST CORRECTION (C) WLODEK BLACK. VERSION C". В ошибочной версии отсутствует фраза "VERSION C"! CDOS1.15 и CDOS1*15 различаются только последним сектором. (На всякий случай повторяю инструкцию по заданию дисковода, на который отгружать аварийную хистори: войдите диск-доктором в последний сектор файла "CDOS1*15" и исправьте байт #01 (диск B:) на #00, #02 или #03. Для чайников: как легко отыскать последний сектор: войдите в следующий файл и откатитесь на один сектор назад). Отдельное спасибо EA-SOFT-у и DELEALAN-у за помощь в отладке, выразившуюся в терпеливом коннекте. Приношу извинения Евгению Викентьеву за облом с вчерашним коннектом, когда вместо диска A: передался диск B:. С уважением - Владимир Wlodek Black. 13.06.97.