Утилита для поддержки файлов с длинными именами (в том числе с использованием русских букв) в DOS. Используя DN 2.0 или Folder Manager (также и VC v.4.99), можно работать с длинными именами совсем как в Windows.
Автор — Henrik Haftmann (версии до 0.32o-авторской включительно).
Начиная с версии 0.32o разработка перешла к Jason Hood, который выпустил как версию 0.32o-обновлённую так и все последующие версии.
Прилагается (к архиву с версией 0.32b) статья Антиквара (М. Бабичева) от 25 декабря 2003 года.
От автора программы — история и цели её создания и ответы на частозадаваемые вопросы:
CHECKED FUNCTIONAL UNDER:
* MS Windows NT 4 DOS-Box, FAT12 and FAT16 drives (but you should take NTLFN package, also nice open-source Freeware) * MS-DOS 6.2 * MS-DOS 7.10, FAT32 * DR-DOS 7, with a magneto-optical drive
THAT DOESN’T YET WORK:
* true Windows NT time format (but a conversion forth and back is built-in). All Programs I’ve seen don’t use this NT time directly, but call DOSLFN to convert this NT time to DOS time (e.g. DOS7 COMMAND.COM’s DIR command) Leads to visible error when NTFSDOS is loaded after DOSLFN * JOINed drives (but SUBSTed drives work) * ASSIGNed drives (not tested, because similar to SUBST it should work later) * Windows 3.11 with enabled 32 bit file access forces DOSLFN to its FallBack mode for your hard disk(s) because VCACHE.386 prevents direct disk access via Int25/26 and Int21/AH=32. Please disable the «32 bit file access». (You can leave the «32 bit disk access» on.)
THAT WILL PROBABLY NEVER WORK:
Я сейчас тут, надолго: http://old-dos.ru/files/file_396.html
Мне *придётся* посмотреть, что это за NTLFN, потому как сильно достал DOS-BOX без LFN в WinXP. Если удастся сделать, буду доволен. Размещу здесь, но чуть позже. Нашёл сходу только версию 0.8.
Ведь говорили же про это, видно же, что я страницу делал.
Формат команды: dir [дисковод:][путь\][имя-файла] [параметры]
Параметры: /p – поэкранный вывод; /w – вывод в широком формате; /s – оглавление указанного в команде директорий и всех их поддиректорий; /b – только имена файлов без заголовочных и итоговых сведений; /aатрибут – сведения о файлах, имеющих указанные атрибуты.
Сортировки: /on – по имени; /oe – по расширению; /od – по времени; /og – сначала выводить сведения о директориях;
Примеры: md abc – создать директорию abc в текущей директории; md c:\users\my – создать директорию my в директории users в корневой директории диска c:.
Примеры: deltree temp – удалить директорию или файл с именем temp из текущей директории; deltree /y d* – удалить из текущей директории все директории и файлы, имя которых начинается на d, не запрашивая подтверждение.
Примеры: path ; – поиск программ должен вестись только в текущей директории path – имена директорий, в которых производится поиск программ path c:\exe; c:\exe\program; d:\msdos – поиск программ производить в директориях exe, program, msdos.
Команды MS-DOS для работы с файлами
Создание текстовых файлов
Формат команды: copy con имя-файла
Примеры: copy con work.txt – создать в текущей директории текстовый файл work.txt.
Удаление файлов
Формат команды: del имя-файла
Переименование файлов
Формат команды: ren имя-файла1 имя-файла2
В параметре имя-файла1можно указывать дисковод и путь, в имя-файла2 – нет. Команда ren не обрабатывает скрытые файлы.
Копирование файлов
Формат команды: copy имя-файла1 имя-файла2 copy имя файла1 [имя-директории2]
Примеры: copy x.txt z.txt – скопировать файл x.txt в текущую директорию с именем z.txt; copy a:\*.* – cкопировать все файлы из корневой директории диска а: в текущую директорию текущего диска; copy \text\*.txt a:*.doc – скопировать из поддиректории text текущей директории все файлы с расширением txt в текущую директорию диска а:. Файлы получат расширения doc.
Использование устройств: copy t1.txt prn – копирование файла t1.txt на принтер; copy t1.txt con – копирование файла t1.txt на экран монитора.
Если имя исходного файла (или одного из файлов) совпадает с именем создаваемого командой copy файла, то существующий файл замещается. Например, если файл all.doc уже существует, то команда copy *.doc all.doc будет ошибочной, т.к. файл all.doc будет уничтожена в начале копирования.
С параметром /y при существовании в директории-приемнике файлов с теми же именами, что и пересылаемые, выполняется замещение этих файлов без запроса. Задание нового имени возможно только при пересылке одного файла. Например, команда move *.bac a:\*.old ошибочна.
Примеры: move *.doc d:\ – переместить файлы с расширением doc из текущей директории в корневую директорию диска d:; move f1.txt tmp\f2.txt – переместить файл f1.txt в директорию tmp с переименованием в f2.txt.
Сравнение файлов
Формат команды: fc [параметры] имя-файла имя-файла [имя-файла-протокола]
Если имя файла-протокола не задано, сведения о сравнении выводятся на экран.
Параметры: /l – построчное сравнение. Если программа обнаруживает различия в файлах, она пытается найти после точки рассогласования места, начиная с которых файлы снова становятся одинаковыми. На выходе – различающиеся строки; /b – побайтовое сравнение. После обнаружения различия файлов сравнение прекращается.
Параметры построчного сравнения: /c – игнорировать различия между строчными и прописными буквами; /n – вывод номеров строк; /число – сколько строк файлов должно совпадать, чтобы файлы считались снова согласованными. По умолчанию 2 строки; /lbчисло – размер внутреннего буфера для нахождения соответствий в файлах после рассогласования. По умолчанию 100 строк.
Примеры: fc doclad.doc doclad1.doc > diff – сравнить файлы, отчет поместить в файл diff.
Вывод файла на экран
Формат команды: type имя-файла
Примеры: type t1.doc – вывод на экран файла type t1.doc из текущей директории.
· позволяет копировать файлы из всех поддиректорий указанной директории;
· позволяет выборочное копирование файлов, в зависимости от значения атрибута «архивировать» или даты файла.Ограничения команды xcopy:
· не поддерживает копирования с логических устройств или на логические устройства;
· не позволяет объединять файлы;
· копирует файлы всегда целиком, команды copy может прекращать копирование, если в исходном файле встретится символ конца файла.Параметры: /s – копирование файлов из указанных директорий и всех их поддиректорий. Файлы из поддиректорий копируются в соответствующие поддиректории той директории, в который копируются файлы; /e – копирование всех поддиректорий, даже если они пусты. Используется только вместе с режимом /s;
Смена текущего дисковода
Формат команды: Имя-дисковода:
Примеры: С: – установить текущим диск с:; a: – установить текущим диск a:.
Форматирование дискет
Формат команды: format дисковод: [параметры]
Параметры: /s – создать системный диск; /v:метка – задание метки диска; /u – безусловное форматирование с уничтожением имеющихся данных; /q – быстрая очистка без контроля наличия сбойных участков.
Если параметры не указаны, то программа проверяет, форматирована ли дискета; оставляет формат таким же, что и имеющийся; стирает информацию обо всех файлах и директориях из системных областей; тестирует область данных на наличие сбойных участков.
Примеры: format a: /u – безусловное форматирование дискеты а:; format a: /q – очистка дискеты; format a: /s – форматировать дискету и сделать ее системной.
Программирование — в обычном понимании, это процесс создания компьютерных программ. В узком смысле (так называемое кодирование) под программированием понимается написание инструкций — программ — на конкретном языке программирования (часто по уже имеющемуся алгоритму — плану, методу решения поставленной задачи). Соответственно, люди, которые этим занимаются, называются программистами (на профессиональном жаргоне — кодерами), а те, кто разрабатывает алгоритмы — алгоритмистами, специалистами предметной области, математиками. В более широком смысле под программированием понимают весь спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ — программного обеспечения ЭВМ. Более точен современный термин — «программная инженерия» (также иначе «инженерия ПО»). Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение.
Глава 7. Работа с файлами в программах на ассемблере
Работа с файлами в MS DOS (длинные имена)
В регистрах AL и АН возвращаются главный и младший номера версии MS DOS. При функционировании под Windows эти номера равны 07h и Oah соответственно. Задание значения AL = 01 дает такой же эффект.
Последняя функция возвращает 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 символов, и т. д. Рассмотренные выше функции MS DOS для работы с файлами и каталогами не поддерживают длинных имен. Для этого система Windows 95/98 предоставляет приложениям MS DOS аналогичные функции, но имеющие другие номера. Впрочем, при внимательном рассмотрении большинства из этих номеров, видно, какой из старых функций они соответствуют. Новые номера состоят из четырех цифр: первые две — 071h, последние две — номер старой функции. Для некоторых функций существуют особенности в их работе. Так, для поиска файлов по-прежнему используются две функции (по новой нумерации — 714eh и 714fh) прерывания 21h. Новые функции теперь возвращают информацию о файлах через специальную структуру WI N32_F INDDATA, адрес которой возвращается в качестве результата их работы. При работе с функциями, поддерживающими длинные имена файлов, используются еще две структуры: by handle_f 11 e_information и filetime. Назначение структуры by_hand1e_file_iinformation и работу с ней мы рассмотрим при обсуждении функции MS DOS 71a6h. Структура filetime содержит 64-разрядное значение, которое определяет число 100-наносекундных интервалов, прошедших с 12:00 утра 1 января 1901 года.
Теперь приведем перечень функций прерывания 21h, работающих с файлами, которые имеют длинные имена. Для удобства дальнейшего рассмотрения в следующей таблице приведены соответствующие функции API WIN32 и «старые» функции прерывания 21h.