Скачать DiskTools - Набор дисковых процедур

26.06.1994
Скачать файл (119,35 Кб)


МОТИВЫ НАПИСАНИЯ МОДУЛЯ

Многие программы для удобства пользователя создают списки дисков, файлов, каталогов. Большинство программ неверно определяют количество доступных дисков, состав таблицы допустимых имен. Наиболее распростра- ненный способ - прочитать LastDrive и создать таблицу от этого значе- ния вниз до A:. Причем сбои в работе программ возникают также пpи на- личии в системе одного дисковода для гибких дисков, переназначении дисков программой SUBST. Этот модуль предназначен для устранения этих ошибок. В модуле находится pяд процедур, дублирующих подобные в паке- те Turbo Professional [3], но если не обращаться к этим процедурам, то компилятор НЕ ВКЛЮЧИТ их код в программу. Дублирование введено для полноты ощущений - это модуль работы с ДИСКАМИ (да и TPDOS я использую все реже и реже).

АНАЛОГИ

Определение типа диска введено в модуль TPDOS, но при работе происхо- дит обращение к накопителю (что нежелательно), процедура TPDOS работает через Media Descriptor и правдива только в стандартной конфи- гурации системы.

ЗАВИСИМОСТЬ ОТ ВЕРСИИ DOS

В связи с некоторыми различиями DR-DOS и MS-DOS этот модуль определя- ет тип системы при запуске программы, также как и OS/2 (которая совместима с MS-DOS 3.30), у DR-DOS в окружении установлены следующие строки : OS=DRDOS, VER=5.0 (или 6.0 соответственно). Напомню, что в MS-DOS 5.0 Вы можете указать любой программе, что используется другая версия DOS, запустив программу SETVER, но этот модуль определяет верно номер версии DOS.

ТЕСТ

Этот модуль был тестирован в MS-DOS 5.0 при установке различных драйверов, запуске команды SUBST, переназначении дисковода A: на дис- ковод B: в системе с одним дисководом для сменного диска,также при ра- боте системы XENIX при загруженном драйвере VP/ix (он грузит как под- задачу MS-DOS 3.20) при работе модуля в системе MS-DOS 2.0 невозможно определение типов устройств и нельзя воспользоваться определением пе- реприсвоений для дисководов сменных дисков.

Тест продолжен в MS-DOS 3.30, COMPAQ DOS 3.31 и DR-DOS 6.0.

Модуль поддерживает работу с жестким диском, размером более 32M.

РАЗМЕРЫ

При использовании в Вашей программе только инициализации модуля Uses

...
       DskTools,
       ...;

без вызова процедур, размер кода увеличивается на 0.3k, размер данных - на 0.03k, при вызове процедуры DiskInit - размер кода - на 1.8k, размер данных - на 0.17k. Такой малый объем достигается оптимизацией кода и использованием языка ассемблера при написании модуля.

ИСТОРИЯ

Версия 1.0 - проверяла только число дисководов для гибких дисков, количество и наименование доступных дисков.

Версия 2.0 - устанавливала тип диска стандартной конфигурации.

Версия 3.0 - модуль полностью переписан на ассемблере, изменен алгоритм работы многих процедур, добавлены процедуры сервиса.

Версия 3.01 - введена процедура определения типа дисковода гибких дисков, оптимизирован ассемблерный код ряда процедур, часть переменных перенесена из сегмента данных в сегмент стека, что увеличивает объем доступной памяти для пользователя. Добавлены функции определения инсталляции. Добавлены комментарии к процедурам и описание методов работы, новая переменная компилятора IniDiskTable, позволяющая запус- кать инициализацию непосредственно при запуске программы, при отключенном определении процедуры инициализации НЕ БУДУТ ЗАНЕ- СЕНЫ в код программы, если к ним не будет обращения, но тогда для использования массивов имен и типов дисков необходимо будет инициализировать эти массивы следующим образом :

if not DskToolsVarInit Then InitDiskVariable;

Версия 3.02 - разделение модуля на два - DskTools и DrvTools. Добавление документации и процедур определения инсталляции (см. DrvTools). Модуль переименован (ранее назывался DiskTool). Добавлен ряд процедур.

Версия 3.03 - У некоторых процедур обновлен алгоритм, проведена оптимизация. Изменена процедура DiskInit. Модуль адаптирован к языкам МОДУЛА-2 и Ассемблер (,Си и другие языки при соответ- ствующем методе вызова) - создана библиотека для указанных языков. (адаптацию проводил Березин Антон). Ряд пеменных из сегмента данных перенесен в сегмент стека, что увеличивает сво- бодную статическую память.

Версия 3.04 - В процедурах GetVolumeLabel/SetVolumeLabel изменена работа с регистрами.

Версия 3.05 - Добавления для TURBO 7.0

Кроме примененных при написании программы, Вам наверняка будут интересны следующие сведения.

 ------------------------------------------------------------------------
INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
        AX = 1203h
Return: DS = segment of IBMDOS.COM/MSDOS.SYS
 ------------------------------------------------------------------------
INT 2F U - DOS 3+ internal - GET CURRENT DIRECTRY STRUCTURE FOR DRIVE
        AX = 1217h
        SS = DOS DS
        STACK: WORD drive (0 = A:, 1 = B:, etc)
Return: CF set on error
            (drive > LASTDRIVE)
        CF clear if successful
            DS:SI -> current directory structure for specified drive
        STACK unchanged
SeeAlso: AX=1219h
 ------------------------------------------------------------------------
INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
        AX = 122Ch
Return: BX:AX ->header of second device driver (NUL is first) in driver chain
SeeAlso: INT 21/AH=52h
 ------------------------------------------------------------------------
INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
        AX = 122Ah
        BX = entry point to set (0001h or 0002h)
        DS:SI -> FASTOPEN entry point
                (entry point not set if SI = FFFFh for DOS 4+)
Return: CF set if specified entry point already set
Notes:  entry point in BX is ignored under DOS 3.30
        both entry points set to same handler by DOS 4.01

DOS 3.30 FASTOPEN is called with:
        AL = 01h  ???
            CX = ??? seems to be offset
            DI = ??? seems to be offset
            SI = offset in DOS DS of filename
        AL = 02h  ???
        AL = 03h  open file???
            SI = offset in DOS DS of filename
        AL = 04h  ???
            AH = subfunction (00h,01h,02h)
            ES:DI -> ???
            CX = ??? (subfunctions 01h and 02h only)
Returns: CF set on error or not installed
Note: function 03h calls function 01h first

PCDOS 4.01 FASTOPEN is additionally called with:
        AL = 04h ???
            AH = 03h
            ???
        AL = 05h ???
        AL = 0Bh ???
        AL = 0Ch ???
        AL = 0Dh ???
        AL = 0Eh ???
        AL = 0Fh ???
        AL = 10h ???
 ------------------------------------------------------------------------
INT 2F U - DOS 4+ internal - SET DOS VERSION NUMBER TO RETURN
        AX = 122Fh
        DX = DOS version number (0000h = return true DOS version)
Note:   not available under DR-DOS 5.0
SeeAlso: INT 21/AH=30h
 ------------------------------------------------------------------------
 ------------------------------------------------------------------------

 

ИСТОЧНИКИ ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИИ

!  [1] - Tech Help! (v3.20, v4.01) (C) Flambeaux Software.
*  [2] - Assembly Language database, (C) 1987 by Peter Norton Computing, Inc.
   [3] - Turbo Professional, (C) TurboPower Software. (v 5.xx TPDOS,...)
   [4] - Turbo Professional Doc, (v 5.0)
*  [5] - Interrupt List, (c) 1991 Ralf Brown, (C) 1991 Sergey Sotnikov
   [6] - Interrupt List, Release 36, (c) 1989-93 Ralf Brown.  {!!!}
*  [7] - Bios Technical Reference, (C) 1987-88 Wildmill Technologies Ltd.
   [8] - FORSIUK.M45 (Виктор Форсюк), заметка электронного бюллетеня
         SoftPanorama volume 4.5, (C) NeatAvia, 1992.
   [9] - DI.COM, Сусликов Евгений, (C) SEN.
  [10] - SysInfo.EXE  v6.01, Norton Utilities, (C) Symantec Corp. 1991.
  [11] - DiskEdit.EXE v6.01, Norton Utilities, (C) Symantec Corp. 1991.
  [12] - DiskReet.EXE v6.01, Norton Utilities, (C) Symantec Corp. 1991.
  [13] - NCache.EXE   v6.01, Norton Utilities, (C) Symantec Corp. 1991.
  [14] - VidRAM.COM, (C) 1989-90 Quarterdeck Office Systems, Inc.
  [15] - EGA2MEM.COM, (C) Maxim Savchenko V., 1991 (v1.2)
  [16] - EGADisk.EXE v4.00, (C) P. Tsarenko, 1990.
  [17] - 800 II, V1.xx, Diskette BIOS Enhancer, (c) Alberto PASQUALE (ITALY)
  [18] - Скэнлон. Программирование на языке ассемблера.

>>
  - Знаком "*" отмечены электронные справочники, поддерживаемые
    The Norton Guides, v1.04, (c) 1987 by Peter Norton Computing, Inc.
  - Знаком "!" отмечены электронные справочники, поддерживаемые
    Help! version 4.xx. Copyright (c) 1985,89 by Flambeaux Software, Inc.

>>
    Местами в код вставлены комментарии - текст из Interrupt List.

>>
    Все "коктейли" из кода на  Паскале  и  Ассемблере  переписаны  в
    текст на ассемблере по просьбе  Березина  Антона,  что  упрощает
    адаптацию модуля (процедур) к любому  другому  языку  (Модула-2,
    Си, Ассемблер, Бейсик и т.д.).
    !!! Березин Антон уже перевел (изменил вызовы)  этот  модуль  на
    языки ASSEMBLER и MODULA-2, причем для  увеличения  компактности
    ассемблерный текст переписан с использованием SAT - оболочки для
    ассемблера (написана Антоном) при  соответствующем  типе  вызова
    ассемблерные библиотеки совместимы с компилиторами других языков
    (например Си).

>>
    Кроме указанных выше, в программе упоминались продукты фирм :

                    Borland International.
                    Microsoft Corp.
                    Digital Research Inc.
                    IBM Corp.
                    PKWARE Inc.
                    JohnPC.
                    Central Point Software, Inc.
                    Compact Soft.
                    HyperWare.