ђјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјђ
ђ ђ
ђ DSKTOOLS ђ
ђ ђ
ђ Модуль (-исследование) работы с дисковыми устройствами ђ
ђ (, файлами и драйверами). ђ
ђ ђ
ђ (C) Copyright BZSoft, 1990 - jan. 1993. ђ
ђ (C) Copyright GalaSoft United Group International, 1992. ђ
ђ ђ
ђ version 3.05 ђ
ђ ђ
ђ ђ
ђѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓѓђ
************************ МОТИВЫ НАПИСАНИЯ МОДУЛЯ *********************
Многие программы для удобства пользователя создают списки дисков,
файлов, каталогов. Большинство программ неверно определяют количество
доступных дисков, состав таблицы допустимых имен. Наиболее распростра-
ненный способ - прочитать 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.
***********************************************************************
Организована группа программистов GalaSoft United Group International
(организаторы Зулин Борис, Березин Антон), цель группы - помощь в
распространении программ, консультации по их использованию и обмен
модулями и новой информацией.
Если Вам удобнее, можете обращаться :
320038, Украина г. Днепропетровск,
(0562) 50-40-84 (д), 47-14-72 (сл). Березин Антон.
***********************************************************************
(C) BZSoft Inc., сентябрь 1992.
г.Шебекино. (04872) 4-51-96 (д, выходн.дни),
г.Харьков. (0572) 400-875 (р). Зулин Борис.
***********************************************************************
|