Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Дисковые Программы и Утилиты    >>    dsktools
   
 
 DiskTools - Набор дисковых процедур  Борис Зулин 26.06.1994

DSKTOOLS - Модуль (-исследование) работы с дисковыми устройствами (, файлами и драйверами)



116k 
 

ђјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјјђ ђ ђ ђ 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 (р). Зулин Борис. ***********************************************************************