Иллюстрированный самоучитель по задачам и примерам Assembler

Работа с файлами в MS DOS (длинные имена)

Перечисленные выше функции работают в различных версиях "чистой" системы MS DOS, вплоть до версии 6.22 включительно. Операционные системы Windows 95/98/Mil также поддерживают свою версию MS DOS, которая имеет номер 7.0. Операционная система Windows 95/98/Mil организует для программ MS DOS специальную среду для работы, называемую сеансом DOS.

Система MS DOS 7.0, будучи созданной для работы в среде Windows 95/98/Mil, имеет в своем составе средства для работы с файловой системой Windows. Эта файловая система, как известно, отличается тем, что полное имя файла может достигать длины 255 символов. MS DOS 7.0 также умеет работать с длинными именами файлов. В данном разделе мы рассмотрим предназначенные для работы с файловой системой Windows средства среды MS DOS, работающей под управлением Windows.

Определить факт того, в какой системе работает программа, можно по результатам работы функций 30h – получить версию DOS (прерывания 21п) и 4аЗЗп (прерывания 2fh).

Вход: АН = 30h; AL = определяет значение, возвращаемое в ВН: 00h– OEM-номер (как для DOS 2.0-4.0x);01h – номер версии.

Выход: AL = главный номер версии; АН – младший номер версии; BL:CX = 24-битный серийный номер пользователя (необязательно).

:prg07_19.asm – программа демонстрации определения факта того.;в какой системе работает программа.
.code
;…..определим номер версии ОС MS DOS
mov al.00
movah.30h;номер функции DOS
int21h;А1-главный номер версии. АН-младший номер версии
jne exit;переход в случае ошибки

В регистрах AL и АН возвращаются главный и младший номера версии MS DOS. При функционировании под Windows эти номера равны 07h и Oah соответственно. Задание значения AL = 01 дает такой же эффект.

:prg07_20.asm – программа демонстрации определения факта работы в среде MS DOS 7.0.
.code
:-----определить факт работы в среде MS DOS 7.0
movax.4a33h;номер функции DOS int 2fh
cmp ax, 0
jneexit;переход, если работа не в среде MS DOS 7.0

Последняя функция возвращает 0 для MS DOS версии 7.0 и выше. Установить факт того, что система поддерживает длинные имена файлов, можно вызовом функции 71a0h прерывания 21п – получить информацию о томе. Если она возвращает ошибку (CF = 1), то текущая файловая система не поддерживает длинных имен файлов. Для вызова этой функции необходимо указать корневой каталог тома, о котором необходимо получить информацию.

Вход: АХ = 71A0h; DS:SI – ASCIZ-имя корневого каталога тома, о котором необходимо получить информацию (например, "С:\"); ES:DI – буфер для имени файловой системы; СХ ¦= размер буфера, адрес которого задан в ES: DI (32 байта).

Выход: CF = 0 в случае успеха, следующие регистры установлены: ВХ = флаги файловой системы: 0 – при поиске учитывать регистр букв в именах файлов; 1 – сохранять регистр букв в элементах каталога; 2 – использование символов Unicode в именах каталогов и файлов; 3-13 – резерв (0); 14 – поддержка DOS-функций для длинных имен файлов; 15 – сжатый том; СХ = максимальная длина файловых имен (обычно 255); DX = максимальная длина пути (обычно 260); ES: DI – в буфере по этому адресу ASCIZ-имя файловой системы, например "FAT", "FAT32", "NTFS", "CDFS"; CF = 1 в случае неудачи, при этом АХ = код ошибки или AX=7100h, если функция не поддерживается.

В Windows 95/98 появились дополнительные возможности как самой файловой системы, так и средств по ее управлению. Основное нововведение – поддержка длинных имен файлов. Основа файловой системы та же – таблица разрешения файлов FAT, но любой файл в этой системе имеет два имени – длинное имя и его псевдоним, который соответствует формату 8.3. Данный псевдоним создается системой Windows 95/98 автоматически.

Нужно правильно понимать различие в способах использования длинных имен файлов в приложениях MS DOS и Win32. Приложения MS DOS получают до-ступ к длинным именам файлов с помощью дополнительных функций прерывания 21h. Приложения Windows используют для этого соответствующие функции API.

Длинное имя файла представляет собой ASCIIZ-строку длиной до 255 символов. Система формирует псевдоним для этого имени форматом 8.3 в соответствии со следующим правилом: берутся первые 6 символов длинного имени, после них добавляется символ тильда (), за тильдой ставится некий порядковый номер. Для первого имени формата 8.3 это 1. Если такой псевдоним уже существует, то порядковый номер очередного псевдонима будет на 1 больше. Расширение псевдонима формируется из первых трех символов расширения длинного имени (если оно существует). Если похожих имен много, то номер в псевдониме может быть двузначным, при этом первая (символьная) часть псевдонима сокращается до 5 символов, и т. д.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.