Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 159 160 161 162 163 164 165  166 167 168 169 170 171 172 ... 198
         данные по умолчанию дисковод и каталог,  содержащие стертый файл,
         должны быть установлены командой CHDIR (или сокращенно -  CD)  до
         запуска  программы  RESCUE.  Подлежащий  стиранию файл может быть
         файлом любого типа: обычным, скрытым, системным, доступным только
         по чтению или расположенным в подкаталоге. Если вы восстанавлива-
         ете файл, находящийся в подкаталоге, который тоже был стерт, или,
         если вы хотите проконтролировать все дерево каталога, расположен-

                                      - 11-56 -
         ное ниже стертого подкаталога,  вы  должны  сначала  восстановить
         этот подкаталог по имени, используя команду RESCUE; создать зано-
         во подкаталог в заданном по умолчанию каталоге (используя команду
         CHDIR или CD) и затем вручную восстановить стертый файл (файлы) в
         подкаталоге, используя программу RESCUE.
              Если имя  файла  найдено  в  каталоге (корневом каталоге или
         подкаталоге), будет произведена попытка проведения восстановления
         файла путем анализа и записи информации в таблицу FAT.  Если файл
         не был найден,  или,  если было обнаружено,  что он не уделен, на
         экране дисплея появится сообщение об этом.  Как пояснялось ранее,
         путь доступа,  проходящий через таблицу FAT для заданного  файла,
         может  быть  сложным.  Если программа RESCUE не сможет найти путь
         размещения файла (может быть он был  сложно  переплетен  с  путем
         доступа к другому файлу) выполнение программы завершается и ника-
         кая информация не записывается на диск.  Важным фактором в работе
         программы является то, что она не будет записывать любую информа-
         цию на диск до тех пор, пока все проблемы, связанные с файлом, не
         будут разрешены. Эта программа решает все свои задачи путем пере-
         писывания всех секторов каталога и таблицы FAT в  память,  где  и
         выполняются все модификации элементов каталога файла и его табли-
         цы FAT.  Когда все изменения были проведены, программа RESCUE за-
         писывает весь каталог и всю таблицу FAT обратно на диск.  Если во
         время анализа данных и их модифицирования  встречаются трудности,
         выполнение программы RESCUE завершается и диск остается без изме-
         нений.
              Как было отмечено ранее,  программа RESCUE была так разрабо-
         тана,  что она может работать с любым форматом диска, который со-
         ответствует стандартным соглашениям по форматированию, принятым в
         операционной системе MS-DOS.  Программа RESCUE использует не вхо-
         дящую  в  документацию по операционной системе MS-DOS функцию 32h
         (получить блок параметров диска) для получения необходимой ей ин-
         формации,  касающейся формата диска.  Эта программа также  широко
         использует  функции, содержащиеся в библиотеке поддержки языка Си
         фирмы "Майкрософт".  Если вы будете перестраивать  эту  программу
         для работы ее на другом языке или с другим компилятором, вам при-
         дется найти или самим написать заменяющие значения для этих функ-
         ций.
              Программа RESCUE намеренно сделана очень простой,  и для  ее
         понимания и для того,  чтобы она соответствовала уровню этой кни-
         ги.  Существует ряд расширений, которые вы возможно, захотите до-
         бавить в программу RESCUE,  чтобы сделать ее еще более широко ис-
         пользуемой  и   полезной.   Возможно,   вы   захотите   позволить
         пользователю  самому  указывать  в  командной  строке  по заданию
         RESCUE дисковод и каталог,  где расположен файл или вы можете за-
         хотеть разрешить универсальное задание стертых файлов с  примене-
         нием  символов "*" и "?".  Весьма полезным добавлением может ока-
         заться средство  проверки  попыток  восстановления  пользователем
         файлов,  имена которых уже существуют (что может быть сделано при
         разумном использовании имеющихся стандартных программ).
              Другая модификация,  которую вы можете захотеть  произвести,
         заключается  в  разрешении  программе  RESCUE работать с жесткими
         дисками,  которые имеют части, превышающие 32 Мегабайта, что воз-
         можно в работе под управлением операционной системы MS-DOS версии
         4.0.  Разбиения расширенного размера используют 32-битовые номера
         секторов  вместо 16-битовых номеров секторов,  использовавшихся в
         разбиениях по 32 Мегабайта и меньше. Для того, чтобы избежать ра-
         боты с 32-битовыми элементами таблицы FAT, отношение сектор/клас-

                                      - 11-57 -

         тер увеличивается в  разбиениях  расширенного  размера  так,  что
         16-битовые элементы таблицы FAT тоже  могут  по-прежнему  исполь-
         зоваться.  Однако,  максимальный размер таблицы FAT (одной ее ко-
         пии)  был  увеличен  с 64 Кбайт (для  операционной системы MS-DOS
         версии 3.3) до 128 Кбайт (для операционной системы  MS-DOS версии
         4.0).  Прикладные программы операционной системы MS-DOS экраниру-
         ются от кластера разбиения повышенного размера и от схемы отобра-
         жения секторов,  при условии, что используются только стандартные
         файловые функции операционной системы MS-DOS или абсолютные ссыл-
         ки на кластеры. Но использование абсолютными ссылками на кластеры
         прерываний 25h и 26h требует разных соглашений по обращениям меж-
         ду частями в 32 Мегабайта или меньше и частями, большими 32 Мега-
         байт. В представленных ниже листингах продемонстрированы два сог-
         лашения  в  операционной системе MS-DOS версии 4.0 для прерывания
         25h (Абсолютное чтение диска) и прерывания 26h (Абсолютная запись
         на диск).
              При некоторых изменениях программы RESCUE может быть превра-
         щена в очень могучую прикладную программу, которая может работать
         с любым типом дискового носителя, независимо от конкретной реали-
         зации и версии операционной системы MS-DOS.


             Листинг 11-2. Условия вызова операций  абсолютного  чте-
           ния/записи  на  диск  (по  прерываниям "int 25h/int 26h") для
           разделений диска в 32 Мегабайта или меньше (Все версии опера-
                              ционной системы MS-DOS)
         ----------------------------------------------------------------
         Вход :    AL = Hомер дисковода (0=А, 1=В и т.д.)
                   CX = Количество секторов для чтения (прерывание
                        "int 25h") или для  записи  (прерывание
                        "int 26h")
                   DX =  Hачальный логический номер сектора
                   DS:BX = Aдрес передачи
         Bозврат:  Признак переноса = 0 (успешная передача) или
                                    = 1 (не успешная передача)
                                     AL = Kод ошибки
                                     AH = Tип ошибки
         Примечание: B  регистре AX возвращается значение 0207h, если
                     была сделана попытка чтения или записи части раз-
                     мером больше 32 Мегабайт

           Листинг 11-3.  Условия вызова операций абсолютного чтения/за-
        писи на диск (по прерываниям "int  25h/int  26h")  для  разделений
        диска,  больших  32  Мегабайт  (только для версии 4.0 операционной
                                  системы MS-DOS)
        -----------------------------------------------------------------
         Вход :    AL = Hомер дисковода (0=А, 1=В и т.д.)
                   BX = Указатель на список параметров
                   CX = -1 (указывает на расширенный
                           (> 32 Мегабайт) формат)
         Bозврат:  Признак переноса = 0 (успешная передача) или
                                    = 1 (не успешная передача)
                                     AL = Kод ошибки
                                     AH = Tип ошибки
         Примечание: POP AX (код ошибки) при выходе. Коды ошибок

                                      - 11-58 -
                     такие же как указанные выше.

                      Cтруктура списка параметров:

                      rba     dd   ?  ; первый сектор (32-битовый с
                                      ; началом в 0) для чтения-записи
                      count   dw   ?  ; количество секторов для
                                      ; чтения-записи
                      buffer  dd   ?  ; буфер данных

                 Листинг 11-4. Программа контроля RESCUE
         _________________________________________________________

         /********************************************************
             FILE:   RESCUE2.C   Rescue File Utility Version 2.00

         Расширения:  Контроль  файла  в подкаталогах
                      Контроль стертого подкаталога
                      Управление  любым  типом  дискового носителя
                      операционной системы MS-DOS (гибкие диски,
                      жесткие диски, сменные кассеты)

         Компилирование компилятором "Си" "фирмы "Майкрософт":
            cl /c /Zp1 /AS /GO /Ze /Ot rescue2.c

         Редактирование редактором фирмы "Майкрософт":
            Link /Dosseg/MA/LI/CPAR:1/STACK:4096 rescue2,rescue2.exe,
                 rescue2.map,slibce;
            *********************************************************

            /*  В К Л Ю Ч Е Н Н Ы Е    Ф А Й Л Ы  */

            #include     /*для функции printf() и еще многих*/
            #include     /*для getch() */
            #include       /*для intdos(),int86(), и так  далее*/
            #include    /*для _fmalloc ()& malloc */
            #include    /*для memory "mem...()" и  str..."*/
            #iclude      /*для topper() and "есть...()" */
            #include    /*для getcwd() */

            /*  О П Р Е Д Е Л Е Н И Е    К О Н С Т А Н Т  */

            #define FALSE     0   /* эти определения предназначены*/
            #define TRUE      1   /* для того, чтобы сделать програм-*/
            #define AND       &&  /* му более читаемой и  понятной*/
            #define OR        ¦¦
            #define EQ        ==
            #define NE        !=
            #define LE        <=
            #define ABS_READ       0x25 /* прерывание чтения диска */
            #define ABS_WRITE      0x26 /* прерывание записи на диск */
           /* Функции прерываний  "int 21h"  операционной системы DOS:*/
            #define DFUNC_RESETDSK 0x0D /* сброс  дисковода */
            #define DFUNC_GETDISK  0x19 /* получить текущий дисковод */
            #define DFUNC_GETDPB   0x32 /* получить блок дисковых */
                                        /* параметров */
            #define DFUNC_GETCD    0x47 /* получить текущий дисковод */

                                      - 11-59 -

              /* Биты атрибутов файла операционной системы DOS: */
            #define FATR_NONE      0x00 /* соответствует ANY */
            #define FATR_READ      0x01 /* только для чтения */
            #define FATR_HIDDEN    0x02 /* скрытый */
            #define FATR_SYSTEM    0x04 /* файл системы */
            #define FATR_VOLUME    0x08 /* метка тома */
            #define FATR_SUBDIR    0x10 /* подкаталог */
            #define FATR_ARCHIV    0x20 /* архивированный файл */

            #define CL_OFF      2    /* первым номером кластера */
                                     /* является число 2*/
            #define TENMB       20740L /* максимальное количество */
                                     /* секторов, поддерживаемых */
                                     /* 12-битовой таблице FAT */
Предыдущая страница Следующая страница
1 ... 159 160 161 162 163 164 165  166 167 168 169 170 171 172 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама