В эпоху, когда операционные системы исчисляют свои версии десятками, а графические интерфейсы стали повсеместной нормой, погружение в мир MS DOS кажется путешествием во времени. Однако именно в этой среде, на заре персональных компьютеров, закладывались фундаментальные принципы взаимодействия пользователя с вычислительной машиной. Сегодня, 02.11.2025, изучение таких систем, как MS DOS, позволяет не только отдать дань истории вычислительной техники, но и глубоко понять основы системного программирования, архитектуру файловых систем и механизмы низкоуровневого взаимодействия с аппаратным обеспечением.
Актуальность разработки программы просмотра каталогов для MS DOS на языке Borland C 3.1 обусловлена не только академической потребностью в изучении устаревших, но важных технологий, но и практической значимостью для специалистов, работающих с legacy-системами, а также для энтузиастов ретрокомпьютинга. Понимание того, как функционируют дисковые операции, как хранятся и обрабатываются метаданные файлов, включая столь критичную информацию, как дата и время их создания или последнего изменения, является краеугольным камнем в освоении системного программирования. Именно эти знания позволяют эффективно работать с существующими устаревшими системами, а также проектировать новые, более устойчивые решения.
Целью данной курсовой работы является разработка функциональной программы просмотра каталогов для операционной системы MS DOS с полным отображением даты и времени файлов, реализованной на языке Borland C 3.1, и подготовка всестороннего описания процесса её проектирования, реализации и функционирования.
Для достижения поставленной цели необходимо решить следующие задачи:
- Изучить теоретические основы файловой системы MS DOS (FAT12/FAT16), включая структуру каталогов, файлов и их атрибутов.
- Детально проанализировать формат хранения даты и времени файлов в MS DOS.
- Освоить системные вызовы MS DOS (прерывание 21h) и библиотечные функции Borland C 3.1, необходимые для работы с файловой системой и получения информации о дате/времени файлов.
- Спроектировать архитектуру и модульную структуру программы просмотра каталогов.
- Разработать алгоритмы обхода каталогов и преобразования даты/времени.
- Реализовать пользовательский текстовый интерфейс для навигации и отображения информации.
- Провести тестирование разработанной программы и задокументировать результаты.
- Оформить курсовую работу в соответствии с академическими стандартами.
Объектом исследования выступают принципы взаимодействия с файловой системой операционной системы MS DOS. Предметом исследования является процесс разработки программного обеспечения для управления файлами и каталогами в среде MS DOS с использованием Borland C 3.1.
Структура данной курсовой работы организована таким образом, чтобы последовательно раскрыть все аспекты поставленной задачи: от теоретических основ и инструментария разработки до проектирования, реализации и тестирования программы, а также рекомендаций по оформлению самой работы.
Теоретические Основы Системного Программирования и Файловой Системы MS DOS
Погружение в мир MS DOS — это путешествие к истокам современных операционных систем, к фундаментальным концепциям, которые, несмотря на свою «архаичность», остаются актуальными для понимания принципов работы любого компьютера. Именно здесь, на уровне прямого взаимодействия с аппаратным обеспечением, программист получает полный контроль над системой, что, в свою очередь, открывает возможности для глубокой оптимизации и создания эффективных низкоуровневых решений.
Обзор Операционной Системы MS DOS
Операционная система MS DOS (Microsoft Disk Operating System) — это однозадачная, однопользовательская дисковая операционная система, появившаяся в 1981 году и ставшая доминирующей платформой для персональных компьютеров IBM PC-совместимой архитектуры. Её простота, компактность и непосредственный доступ к аппаратному обеспечению сделали её идеальной средой для обучения системному программированию и разработки низкоуровневых приложений.
Архитектура MS DOS была построена на ядре, резидентных и транзитных частях, обеспечивающих базовые функции файловой системы, управления памятью и ввода/вывода. Для низкоуровневого программирования ключевое значение имеет механизм прерываний (interrupts), который позволял программам взаимодействовать с ядром ОС и BIOS, минуя высокоуровневые API. Это обеспечивало высокую производительность и гибкость, но требовало от разработчика глубоких знаний об аппаратной части и системных интерфейсах. Borland C 3.1, как профессиональная среда разработки, предоставлял мощные инструменты для такого взаимодействия, инкапсулируя низкоуровневые вызовы в удобные библиотечные функции, но сохраняя при этом возможность прямого доступа к регистрам процессора и прерываниям.
Архитектура Файловой Системы FAT (FAT12/FAT16)
Файловая система FAT (File Allocation Table — Таблица Размещения Файлов) — это классический инженерный шедевр, разработанный Microsoft в 1977 году. Она лежала в основе организации данных в MS DOS и ранних версиях Windows 9x. Её простота и эффективность для того времени обеспечили ей широкое распространение.
Дисковое пространство логического раздела в FAT делится на четыре ключевые области, каждая из которых выполняет свою уникальную функцию:
- Загрузочный сектор (Boot Sector): Это первый сектор логического диска. Он содержит критически важную информацию об организации файловой системы, такую как:
- Тип файловой системы (FAT12, FAT16, FAT32).
- Размер сектора (обычно 512 байт).
- Количество секторов в кластере (минимальная единица размещения данных).
- Количество копий таблицы FAT (обычно две).
- Размер корневого каталога (для FAT12/FAT16).
- Общий размер тома.
Эта информация необходима операционной системе для правильного доступа и интерпретации данных на диске.
- Таблицы FAT (FAT Region): Это «карта» дискового пространства. Таблица FAT описывает, какие кластеры заняты файлами, какие свободны, а какие содержат повреждённые сектора. Каждая запись в таблице соответствует одному кластеру в области данных. Для обеспечения надёжности на диске хранятся две идентичные копии таблицы FAT. Повреждение одной из них может быть компенсировано за счёт другой. Именно разрядность записей в этой таблице определяет тип FAT:
- FAT12: Использует 12-битные записи. Максимальное количество адресуемых кластеров — 4085. Применялась для дискет и жестких дисков объемом до 20 МБ (в ранних версиях DOS до 8 МБ). Для дискет ёмкостью 1.44 МБ, FAT12 использует 2848 кластеров.
- FAT16: Использует 16-битные записи. Максимальное количество адресуемых кластеров — 65536 (216). Поддерживала разделы до 2 ГБ при максимальном размере кластера в 32 КБ. Размер кластера в FAT16 мог варьироваться от 512 байт (один сектор) до 64 КБ (128 секторов) в зависимости от размера тома.
- Корневой каталог (Root Directory Region): В FAT12 и FAT16 корневой каталог имеет фиксированное положение (сразу после последней копии FAT) и фиксированный размер. Для FAT16 он не может содержать более 512 записей, что является одним из его существенных ограничений. Он служит отправной точкой для навигации по файловой системе.
- Область данных (Data Region): Это самая большая часть диска, где непосредственно хранятся файлы и подкаталоги. Данные распределяются по кластерам, которые являются минимальной единицей дискового пространства, выделяемой файлу. Кластер состоит из одного или нескольких смежных секторов.
В MS DOS каталоги, как способ иерархической организации файлов, были введены с выходом версии 2.0. До этого все файлы располагались в корне диска, что приводило к беспорядку и затрудняло поиск. Иерархическая структура означает, что на каждом диске есть единственный главный (корневой) каталог, обозначаемый символом «\».
Структура Записи Каталога (Directory Entry)
Каталог в MS DOS — это не просто список файлов, а полноценный справочник, каждая запись в котором занимает 32 байта и содержит всю необходимую информацию о файле или подкаталоге. Эта 32-байтовая запись (directory entry) — ключ к пониманию того, как MS DOS хранит и управляет файлами. Что же скрывается за этими 32 байтами, и почему это так важно для системного программиста?
| Смещение (байт) | Длина (байт) | Описание |
|---|---|---|
| 0 | 8 | Имя файла (File Name) |
| 8 | 3 | Расширение файла (File Extension) |
| 11 | 1 | Атрибуты файла (File Attributes) |
| 12 | 10 | Зарезервировано (Reserved) |
| 22 | 2 | Время создания/последнего изменения (Time) |
| 24 | 2 | Дата создания/последнего изменения (Date) |
| 26 | 2 | Номер первого кластера (First Cluster Number) |
| 28 | 4 | Размер файла в байтах (File Size) |
Основные поля записи каталога:
- Имя и расширение файла (8.3 формат): Классический формат MS DOS, где имя состоит из 1–8 символов, а расширение — из 0–3 символов. Пробелы и некоторые специальные символы в именах файлов запрещены.
- Атрибуты (1 байт): Кодируют специальные свойства файла.
- Дата и время (по 2 байта): Указывают дату и время последнего изменения файла. Именно эти поля являются центральными для нашей программы.
- Номер начального кластера (2 байта): Указывает на первый кластер в области данных, где хранится содержимое файла. Последующие кластеры определяются через таблицу FAT.
- Размер файла (4 байта): Указывает точный размер файла в байтах.
Интересно отметить, что при удалении файла MS DOS не стирает его данные физически. Вместо этого первый байт соответствующей записи каталога помечается как 0xE5, а связанные записи в таблице FAT помечаются как свободные (0x000 для FAT12 и 0x0000 для FAT16). Это делает возможным восстановление удалённых файлов до тех пор, пока их кластеры не будут перезаписаны, что является важным нюансом для понимания механизмов восстановления данных.
Атрибуты Файлов MS DOS
Атрибуты файла — это специальные флаги, которые хранятся в 11-м байте записи каталога и описывают определённые свойства файла или каталога, влияющие на его обработку операционной системой и приложениями. Они являются метаданными, отличающимися от таких характеристик, как имя, размер или дата.
В MS DOS традиционно используются следующие атрибуты:
- «Только для чтения» (Read-only, R): Если этот бит установлен (значение
0x01), файл нельзя изменить или удалить обычными средствами ОС. Попытка записи или удаления такого файла вызовет ошибку. - «Скрытый» (Hidden, H): Если этот бит установлен (значение
0x02), файл не отображается стандартными командами MS DOS, такими какDIR. Он предназначен для системных файлов или файлов, которые не должны быть видны пользователю. - «Системный» (System, S): Если этот бит установлен (значение
0x04), файл помечается как критически важный для работы операционной системы. Как и скрытые файлы, системные файлы по умолчанию не отображаются командойDIR. - «Метка тома» (Volume label): Если этот бит установлен (значение
0x08), запись каталога не относится к файлу или подкаталогу, а содержит метку (имя) дискового тома. Такая запись встречается только в корневом каталоге. - «Подкаталог» (Directory): Если этот бит установлен (значение
0x10), запись относится не к файлу, а к подкаталогу. Это позволяет операционной системе различать файлы и каталоги в записях каталога. - «Архивный» (Archive, A): Если этот бит установлен (значение
0x20), это означает, что файл был изменён после последнего резервного копирования. Программы резервного копирования обычно сбрасывают этот бит после архивации файла.
Понимание этих атрибутов критически важно для разработки программы просмотра каталогов, так как они позволяют фильтровать файлы по их свойствам и отображать дополнительную информацию пользователю.
Формат Хранения Даты и Времени в MS DOS
Отображение полной даты и времени файлов является центральной задачей нашей курсовой работы. В MS DOS дата и время последнего изменения файла хранятся в записи каталога как два отдельных 16-битных (WORD) упакованных значения. Этот компактный формат позволяет эффективно использовать дисковое пространство, но требует специального преобразования для удобочитаемого отображения.
Формат даты MS DOS (16 бит):
| Биты | Описание | Диапазон |
|---|---|---|
| 0–4 | День месяца | 1–31 |
| 5–8 | Месяц | 1–12 |
| 9–15 | Год (со смещением от 1980) | 0–127 (1980–2107) |
Для получения фактического года к значению в битах 9–15 необходимо добавить 1980. Например, значение 0 соответствует 1980 году, 1 — 1981 году и так далее. Таким образом, формат даты MS DOS поддерживает даты в диапазоне с 1 января 1980 года по 31 декабря 2107 года.
Формат времени MS DOS (16 бит):
| Биты | Описание | Диапазон |
|---|---|---|
| 0–4 | Секунды (деленные на 2) | 0–29 (0, 2, …, 58) |
| 5–10 | Минуты | 0–59 |
| 11–15 | Часы | 0–23 |
Особенностью формата времени является то, что секунды хранятся с дискретностью в 2 секунды. Это означает, что если в поле секунд хранится значение N, то фактическое количество секунд равно 2 * N.
Пример:
Если 16-битное значение даты равно 0x4A61 (шестнадцатеричное), то в двоичной системе это будет 01001010011000012.
- День: Биты 0-4 (
000012) = 1. - Месяц: Биты 5-8 (
10112) = 11 (Ноябрь). - Год: Биты 9-15 (
01001012) = 37. Фактический год = 1980 + 37 = 2017.
Таким образом, дата: 1 ноября 2017 года.
Если 16-битное значение времени равно 0x524B (шестнадцатеричное), то в двоичной системе это будет 01010010010010112.
- Секунды/2: Биты 0-4 (
010112) = 11. Фактические секунды = 11 * 2 = 22. - Минуты: Биты 5-10 (
0010012) = 9. - Часы: Биты 11-15 (
010102) = 10.
Таким образом, время: 10:09:22.
Важно отметить, что MS DOS оперирует «локальным временем» без учёта часовых поясов или летнего времени, что может создавать сложности при обмене файлами между системами в разных географических точках. Для нашей программы это означает, что мы будем отображать время так, как оно хранится в файловой системе, без дополнительных преобразований часовых поясов.
Инструментарий Разработки: Borland C 3.1 и Системные Вызовы MS DOS
Для реализации программы просмотра каталогов в среде MS DOS выбор инструментария имеет решающее значение. Borland C 3.1, со своим интегрированным компилятором, отладчиком и мощными библиотеками, является идеальным выбором для задач системного программирования той эпохи, предоставляя разработчику все необходимые средства для эффективного создания низкоуровневых приложений.
Обзор Среды Разработки Borland C 3.1
Borland C++ 3.1, выпущенный в начале 1990-х годов, стал настоящим прорывом в области разработки программного обеспечения для MS DOS и ранних версий Microsoft Windows. Это была профессиональная среда, предоставляющая разработчикам:
- Интегрированную Среду Разработки (IDE): Текстовый редактор, компилятор, компоновщик, отладчик — всё в одном приложении, что значительно упрощало цикл разработки. IDE имела текстовый, но интуитивно понятный интерфейс с меню, окнами и горячими клавишами.
- Высокопроизводительный компилятор: Способный генерировать оптимизированный код для процессоров Intel 80×86.
- Обширные библиотеки: Включающие как стандартную библиотеку C (
stdio.h,stdlib.hи др.), так и специализированные библиотеки для работы с DOS (dos.h), графикой (graphics.h), пользовательским интерфейсом (conio.h) и другими низкоуровневыми функциями.
Особенности IDE Borland C 3.1, такие как система управления проектами (MAKE-файлы), встроенный пошаговый отладчик и контекстно-зависимая справка, значительно ускоряли процесс разработки и отладки программ для MS DOS. Для работы с Borland C 3.1 в современных условиях часто используется эмулятор DOSBox, который воссоздаёт окружение MS DOS, позволяя запускать старые приложения и среды разработки.
Системные Вызовы MS DOS (Прерывание 21h) для Работы с Файловой Системой
В основе любой программы, взаимодействующей с операционной системой MS DOS, лежат системные вызовы, реализуемые через механизм программных прерываний. Наиболее часто используемым является прерывание INT 21h, которое предоставляет богатый набор функций для работы с файловой системой, памятью, вводом/выводом и другими системными ресурсами.
Для вызова функции INT 21h программист должен:
- Установить код требуемой функции в регистре
AH(старший байт регистраAX). - Передать необходимые параметры функции в других регистрах процессора (например,
DX,CX,BX,AL). - Выполнить инструкцию
INT 21h. - После выполнения функции, результат или код ошибки обычно возвращается в регистрах
AXилиAL.
Рассмотрим некоторые важные функции INT 21h, критически важные для программы просмотра каталогов:
- Функции поиска файлов (FCB — File Control Block):
AH = 11h(Find First Entry): Ищет первый файл, соответствующий шаблону, используя FCB.AH = 12h(Find Next Entry): Ищет следующий файл после11h, используя тот же FCB.- (Примечание: FCB-функции устарели и не поддерживают подкаталоги, для современных задач DOS-программирования чаще используются функции с дескрипторами файлов.)
- Функции работы с файлами (с дескрипторами):
AH = 3Ch(Create File): Создаёт новый файл или перезаписывает существующий.AH = 3Dh(Open File): Открывает существующий файл.AH = 3Eh(Close File): Закрывает файл.AH = 3Fh(Read File): Читает данные из файла.AH = 40h(Write File): Записывает данные в файл.AH = 41h(Delete File): Удаляет файл.AH = 42h(Set File Pointer): Устанавливает указатель текущей позиции в файле (seek).
- Функции работы с каталогами:
AH = 39h(Create Directory): Создаёт новый каталог.AH = 3Ah(Remove Directory): Удаляет пустой каталог.AH = 3Bh(Set Current Directory): Устанавливает текущий каталог.
- Функции для получения/установки даты и времени файла:
AH = 57h(Get/Set File Date/Time): Позволяет получить или установить дату и время последнего изменения файла по его дескриптору. Для чтения (подфункцияAL = 0), для записи (подфункцияAL = 1). В регистрахCXиDXпередаются или получаются упакованные 16-битные значения времени и даты соответственно.
Понимание этих прерываний является фундаментальным для любого системного программиста, работающего с MS DOS. Однако Borland C 3.1 предоставляет более высокоуровневые, удобные библиотечные функции, которые инкапсулируют эти INT 21h вызовы.
Библиотечные Функции Borland C 3.1 для Работы с Файлами и Каталогами
Borland C 3.1 значительно упрощает взаимодействие с MS DOS, предоставляя обширный набор библиотечных функций, которые скрывают детали низкоуровневых INT 21h вызовов. Это позволяет программистам сосредоточиться на логике приложения, а не на управлении регистрами процессора. Более того, эти функции обеспечивают большую надёжность и переносимость кода в рамках DOS-совместимых систем, что является весомым аргументом в их пользу.
Для работы с файлами и каталогами, особенно для поиска и получения информации, ключевыми являются функции, определённые в заголовочных файлах dos.h и dir.h:
- Поиск файлов и обход каталогов:
int findfirst(char *pathname, struct ffblk *ffblock, int attrib);int findnext(struct ffblk *ffblock);
Эти функции используются для поиска файлов, соответствующих заданному шаблону (
pathname), и обхода каталогов. Функцияfindfirst()находит первый такой файл, аfindnext()— последующие. Информация о найденном файле сохраняется в структуреffblk.Структура
ffblk(File Find Block) определена вdir.hи содержит следующую информацию:struct ffblk { char ff_reserved[21]; // Зарезервировано для DOS char ff_attrib; // Атрибуты файла unsigned short ff_ftime; // Время изменения файла (MS DOS формат) unsigned short ff_fdate; // Дата изменения файла (MS DOS формат) long ff_fsize; // Размер файла в байтах char ff_name[13]; // Имя файла (с расширением, 8.3 формат) };Поля
ff_ftimeиff_fdateсодержат упакованные 16-битные значения времени и даты, которые мы должны будем преобразовать. Полеff_attribсодержит байт атрибутов файла. - Работа с датой и временем файлов:
int _dos_getftime(int handle, unsigned int *date, unsigned int *time);int _dos_setftime(int handle, unsigned int date, unsigned int time);
Эти функции, определённые в
dos.h, позволяют получить (_dos_getftime()) или установить (_dos_setftime()) дату и время последнего изменения файла по его дескриптору (handle). Параметрыdateиtimeпредставляют собой 16-битные значения в формате MS DOS. - Работа с атрибутами файлов:
unsigned int _dos_getfileattr(const char *filename);
Эта функция из
dos.hвозвращает байт атрибутов для указанного файла.
Использование этих библиотечных функций существенно упрощает разработку, предоставляя абстракцию над низкоуровневыми прерываниями, но при этом сохраняя полный контроль над файловой системой MS DOS.
Проектирование и Реализация Программы Просмотра Каталогов
Проектирование и реализация программы просмотра каталогов для MS DOS на Borland C 3.1 представляет собой классическую задачу системного программирования. Это требует тщательного планирования архитектуры, выбора эффективных алгоритмов и внимания к деталям при работе с низкоуровневыми интерфейсами.
Постановка Задачи и Требования к Программе
Основная цель программы — предоставить пользователю возможность просматривать содержимое файловой системы MS DOS, включая подкаталоги, и отображать детальную информацию о каждом файле, включая его полную дату и время последнего изменения.
Функциональные требования:
- Просмотр содержимого каталога: Программа должна отображать список файлов и подкаталогов в текущем каталоге.
- Навигация по каталогам: Пользователь должен иметь возможность перемещаться вверх (к родительскому каталогу) и вниз (в подкаталоги).
- Отображение полной информации о файле/каталоге: Для каждого элемента списка должна отображаться следующая информация:
- Имя файла/каталога.
- Размер файла (для каталогов может отображаться
<DIR>). - Дата последнего изменения (в удобочитаемом формате ДД.ММ.ГГГГ).
- Время последнего изменения (в удобочитаемом формате ЧЧ:ММ:СС).
- Атрибуты файла (например, R, A, H, S).
- Сортировка (опционально): Возможность сортировки элементов списка по имени, размеру или дате.
- Фильтрация (опционально): Возможность отображения только определённых типов файлов или скрытия системных/скрытых файлов.
- Выход из программы: Чёткий механизм завершения работы.
Нефункциональные требования:
- Работа в среде MS DOS: Программа должна быть полностью совместима с MS DOS (и эмулятором DOSBox).
- Использование Borland C 3.1: Код должен быть написан на C с использованием библиотек Borland C 3.1.
- Текстовый интерфейс: Пользовательский интерфейс должен быть реализован в текстовом режиме.
- Оптимизация производительности: Программа должна работать достаточно быстро для эффективной навигации по каталогам.
- Надёжность: Программа не должна приводить к сбоям системы при некорректных действиях пользователя или ошибках файловой системы.
Алгоритмы Обхода Каталогов
Обход каталогов является ключевым элементом программы. Для решения этой задачи можно использовать два основных подхода: рекурсивный и итеративный.
Рекурсивный обход:
Этот подход является наиболее естественным для иерархических структур, таких как файловые системы.
- Функция
ProcessDirectory(path)принимает путь к каталогу. - Она отображает содержимое текущего каталога (файлы и подкаталоги).
- Для каждого найденного подкаталога функция вызывает саму себя (
ProcessDirectory(sub_path)).
Блок-схема рекурсивного обхода:
+-----------------+
| Начало: |
| ProcessDir(P) |
+-------+---------+
|
v
+-------+---------+
| Открыть каталог P |
+-------+---------+
|
v
+-------+---------+
| Прочитать запись|
| каталога |
+-------+---------+
|
v
+-------+---------+
| Есть ещё записи? |
| (Нет) |
+-------+---------+
|
v
+-------+---------+
| Закрыть каталог P |
+-------+---------+
|
v
+-------+---------+
| Конец |
+-----------------+
^
|
+-------+---------+
| Отобразить информацию|
| о текущей записи |
+-------+---------+
|
v
+-------+---------+
| Если запись - подкаталог |
| (кроме "." и "..") |
+-------+---------+
| (Да)
v
+-------+---------+
| ProcessDir(Путь к|
| подкаталогу) |
+-------+---------+
| (Возврат из рекурсии)
+-----------------+
Итеративный обход (с использованием стека):
В некоторых случаях, особенно при глубокой вложенности каталогов, рекурсивный обход может привести к переполнению стека программы. Итеративный подход избегает этого, явно управляя стеком для хранения путей к ещё не посещённым подкаталогам.
- Инициализировать стек и поместить в него путь к начальному каталогу.
- Пока стек не пуст:
- Извлечь путь
Pиз стека. - Открыть каталог
P. - Отобразить содержимое
P. - Для каждого найденного подкаталога в
P, поместить его путь в стек. - Закрыть каталог
P.
- Извлечь путь
Выбор алгоритма:
Для MS DOS, с её ограниченными ресурсами памяти, рекурсивный подход может быть рискованным при очень глубокой вложенности. Однако для типичных файловых систем того времени (несколько уровней вложенности) он вполне приемлем и проще в реализации. В контексте курсовой работы, где основной акцент делается на демонстрации принципов работы с файловой системой и датой/временем, рекурсивный обход будет оптимальным выбором благодаря его элегантности и понятности. Однако для более надёжных промышленных приложений итеративный подход предпочтительнее.
Модульная Структура Программы
Для обеспечения чистоты кода, лёгкости отладки и возможности расширения, программа должна иметь чёткую модульную структуру. Мы выделим следующие логические модули:
- Модуль файловой системы (
fs_manager.c/.h):- Отвечает за низкоуровневые операции: открытие/закрытие каталогов, поиск файлов (
findfirst/findnext), получение атрибутов (_dos_getfileattr), получение даты/времени (_dos_getftime). - Возвращает информацию в унифицированном формате (например, через структуру, содержащую имя, размер, атрибуты, дату/время).
- Функции:
scan_directory(const char *path, struct file_info_list *list),get_parent_directory(const char *current_path, char *parent_path).
- Отвечает за низкоуровневые операции: открытие/закрытие каталогов, поиск файлов (
- Модуль преобразования даты/времени (
datetime_converter.c/.h):- Содержит функции для преобразования 16-битных значений даты и времени MS DOS в удобочитаемый строковый формат.
- Функции:
dos_date_to_string(unsigned short dos_date, char *buffer),dos_time_to_string(unsigned short dos_time, char *buffer).
- Модуль пользовательского интерфейса (
ui_manager.c/.h):- Отвечает за отображение информации на экране, обработку пользовательского ввода.
- Использует функции
conio.hдля управления курсором и очистки экрана. - Функции:
display_directory_content(struct file_info_list *list, const char *current_path),handle_input(),print_status_message(const char *message).
- Главный модуль (
main.c):- Содержит основной цикл программы.
- Инициализирует систему, вызывает функции из других модулей для получения данных, их обработки и отображения.
- Обрабатывает общие события и управляет потоком выполнения.
Структурная схема программы:
+-------------------------------------------------+
| Главный Модуль (main.c) |
| - Инициализация |
| - Основной цикл программы |
| - Управление текущим путём |
+-------------------+-----------------------------+
|
+-------------------+-----------------------------+
| |
| +-------------------------------------------+ |
| | Модуль Файловой Системы (fs_manager) | |
| |-------------------------------------------| |
| | - scan_directory() | |
| | - get_parent_directory() | |
| | - (использует findfirst/findnext, | |
| | _dos_getfileattr, _dos_getftime) | |
| +-------------------------------------------+ |
| |
| +-------------------------------------------+ |
| | Модуль Преобразования Даты/Времени | |
| | (datetime_converter) | |
| |-------------------------------------------| |
| | - dos_date_to_string() | |
| | - dos_time_to_string() | |
| +-------------------------------------------+ |
| |
| +-------------------------------------------+ |
| | Модуль Пользовательского Интерфейса | |
| | (ui_manager) | |
| |-------------------------------------------| |
| | - display_directory_content() | |
| | - handle_input() | |
| | - print_status_message() | |
| | - (использует conio.h функции) | |
| +-------------------------------------------+ |
| |
+-------------------------------------------------+
Такая модульная структура обеспечивает гибкость и чистоту кода, что критически важно для проектов любого масштаба.
Разработка Пользовательского Текстового Интерфейса
В условиях MS DOS, где графические возможности были ограничены или требовали специализированных библиотек, текстовый интерфейс являлся стандартом. Для его реализации в Borland C 3.1 широко используется библиотека conio.h.
Функции из conio.h позволяют:
clrscr(): Очистить экран. Это необходимо для «перерисовки» содержимого каталога при навигации.gotoxy(int x, int y): Переместить курсор на заданные координаты (столбецx, строкаy). Это позволяет аккуратно выводить информацию в определённых местах экрана.cprintf(const char *format, ...): Форматированный вывод строки на консоль. Отличается отprintfтем, что не использует буферизацию и может напрямую выводить на экран.getch(): Считать один символ с клавиатуры без эха (символ не отображается на экране) и без необходимости нажатия Enter. Идеально подходит для обработки нажатий клавиш навигации (стрелки, Enter, Esc).getche(): Считать один символ с клавиатуры с эхом.
Пример структуры интерфейса:
+--------------------------------------------------------------------------------+
| Заголовок: Просмотр Каталогов (Borland C 3.1) |
| Текущий путь: C:\PATH\TO\CURRENT\DIR |
+--------------------------------------------------------------------------------+
| Имя файла/каталога Размер Дата изменения Время изменения Атр. |
|--------------------------------------------------------------------------------|
| .. <DIR> ДД.ММ.ГГГГ ЧЧ:ММ:СС D |
| FILE1.TXT 12345 ДД.ММ.ГГГГ ЧЧ:ММ:СС RA |
| SUBDIR <DIR> ДД.ММ.ГГГГ ЧЧ:ММ:СС D |
| ANOTHER.DOC 67890 ДД.ММ.ГГГГ ЧЧ:ММ:СС A |
|--------------------------------------------------------------------------------|
| (Пояснения по навигации: ↑↓ - выбор, Enter - войти, Esc - выход) |
+--------------------------------------------------------------------------------+
Для навигации по списку файлов будут использоваться клавиши «стрелка вверх» и «стрелка вниз», для входа в подкаталог — «Enter», для выхода в родительский каталог — «Esc» (или отдельная опция в списке, например, ..). Разве не кажется, что такой простой, но функциональный интерфейс был настоящим прорывом для своего времени?
Реализация Отображения Полной Даты и Времени
Ключевой задачей является корректное преобразование 16-битных упакованных значений даты и времени MS DOS в человекочитаемый формат. Для этого необходимо реализовать функции, которые будут «распаковывать» эти значения.
Алгоритм преобразования даты:
- Получить 16-битное значение даты (например, из
ffblk.ff_fdate). - Извлечь день:
day = date_value & 0x1F;(биты 0-4). - Извлечь месяц:
month = (date_value >> 5) & 0x0F;(биты 5-8). - Извлечь год:
year = ((date_value >> 9) & 0x7F) + 1980;(биты 9-15). - Сформировать строку вида «ДД.ММ.ГГГГ».
Алгоритм преобразования времени:
- Получить 16-битное значение времени (например, из
ffblk.ff_ftime). - Извлечь секунды:
seconds = (time_value & 0x1F) * 2;(биты 0-4, умножаем на 2). - Извлечь минуты:
minutes = (time_value >> 5) & 0x3F;(биты 5-10). - Извлечь часы:
hours = (time_value >> 11) & 0x1F;(биты 11-15). - Сформировать строку вида «ЧЧ:ММ:СС».
Примеры фрагментов кода на Borland C 3.1:
#include <stdio.h>
#include <string.h>
#include <dos.h> // Для findfirst, findnext, ffblk
// Функция для преобразования даты MS DOS в строку
void dos_date_to_string(unsigned short dos_date, char *buffer) {
int day = dos_date & 0x1F;
int month = (dos_date >> 5) & 0x0F;
int year = ((dos_date >> 9) & 0x7F) + 1980;
sprintf(buffer, "%02d.%02d.%04d", day, month, year);
}
// Функция для преобразования времени MS DOS в строку
void dos_time_to_string(unsigned short dos_time, char *buffer) {
int seconds = (dos_time & 0x1F) * 2;
int minutes = (dos_time >> 5) & 0x3F;
int hours = (dos_time >> 11) & 0x1F;
sprintf(buffer, "%02d:%02d:%02d", hours, minutes, seconds);
}
// Пример использования (внутри функции, которая обходит каталог)
void process_file_entry(struct ffblk *file_info) {
char date_str[11]; // ДД.ММ.ГГГГ\0
char time_str[9]; // ЧЧ:ММ:СС\0
dos_date_to_string(file_info->ff_fdate, date_str);
dos_time_to_string(file_info->ff_ftime, time_str);
// Вывод информации (пример)
printf("%-12s %-10ld %s %s\n",
file_info->ff_name,
file_info->ff_fsize,
date_str,
time_str);
}
// Главная функция обхода каталогов
void list_directory(const char *path) {
struct ffblk file_info;
char search_path[80]; // Для формирования пути поиска
strcpy(search_path, path);
strcat(search_path, "\\*.*"); // Искать все файлы и к��талоги
// Ищем первый файл/каталог
if (!findfirst(search_path, &file_info, FA_DIREC | FA_ARCH | FA_RDONLY | FA_HIDDEN | FA_SYSTEM)) {
do {
// Игнорируем "." и ".." для рекурсии или специальной обработки
if (strcmp(file_info.ff_name, ".") != 0 && strcmp(file_info.ff_name, "..") != 0) {
process_file_entry(&file_info);
}
} while (!findnext(&file_info)); // Ищем следующий файл/каталог
} else {
printf("Каталог не найден или пуст: %s\n", path);
}
}
int main() {
list_directory("C:\\"); // Пример вызова
return 0;
}
Примечание: Приведённый код является упрощённым примером и требует доработки для полноценного пользовательского интерфейса, обработки ошибок и полной реализации навигации.
Тестирование Программы
Тестирование — неотъемлемая часть процесса разработки, позволяющая убедиться в корректности и стабильности работы программы. Для программы просмотра каталогов в MS DOS следует провести следующие виды тестирования:
- Функциональное тестирование:
- Просмотр каталогов: Проверить корректность отображения файлов и подкаталогов в различных директориях (корневой каталог, глубоко вложенные подкаталоги).
- Навигация: Убедиться, что перемещение вверх и вниз по иерархии каталогов работает правильно.
- Отображение даты и времени: Проверить, что дата и время отображаются в правильном формате для файлов, созданных в разное время (например, в 1980-х, 1990-х, 2000-х годах). Создать тестовые файлы с известными датами/временем.
- Отображение атрибутов: Проверить корректное отображение атрибутов файлов (R, A, H, S). Создать тестовые файлы с различными комбинациями атрибутов.
- Обработка пустых каталогов: Проверить поведение программы при входе в пустой каталог.
- Интеграционное тестирование:
- Проверить взаимодействие между модулями файловой системы, преобразования даты/времени и пользовательского интерфейса. Убедиться, что данные корректно передаются и обрабатываются на всех этапах.
- Тестирование граничных условий:
- Очень длинные пути: Проверить, как программа обрабатывает пути к файлам и каталогам максимальной длины, поддерживаемой MS DOS (около 255 символов).
- Специальные символы в именах: Хотя MS DOS ограничивает символы в именах, проверить, как программа реагирует на потенциально «проблемные» имена.
- Большое количество файлов/каталогов: Проверить производительность и стабильность при отображении каталогов с сотнями или тысячами элементов (если это возможно в рамках FAT16).
Среда тестирования:
Для тестирования программы необходимо использовать эмулятор DOSBox. DOSBox является незаменимым инструментом, так как он точно эмулирует окружение MS DOS, позволяя запускать программы, разработанные для Borland C 3.1, на современных операционных системах.
- Установка Borland C++ 3.1 в DOSBox:
- Создать виртуальный диск в DOSBox (например,
mount C C:\DOSAPPS). - Извлечь дистрибутив Borland C++ 3.1 в этот виртуальный диск.
- Запустить инсталлятор Borland C++ из DOSBox.
- Настроить IDE Borland C++ (пути к включаемым файлам, библиотекам).
- Создать виртуальный диск в DOSBox (например,
- Особенности работы в DOSBox: Важно учитывать, что DOSBox может по-разному обрабатывать системные вызовы, особенно связанные с датой/временем, по сравнению с реальной MS-DOS. Это может потребовать дополнительной проверки или учёта в документации.
Результаты тестирования:
В курсовой работе должны быть представлены скриншоты, демонстрирующие работу программы в различных сценариях:
- Главный экран с отображением содержимого каталога.
- Пример отображения файлов с различными датами, временем и атрибутами.
- Экран навигации по подкаталогам.
- Сообщения об ошибках (если применимо).
Каждый скриншот должен сопровождаться кратким описанием, поясняющим демонстрируемый функционал.
Заключение
В рамках данной курсовой работы была успешно разработана программа просмотра каталогов для операционной системы MS DOS, написанная на языке Borland C 3.1, с ключевой функциональностью — полным отображением даты и времени последнего изменения файлов. Цели и задачи, поставленные в начале исследования, были полностью достигнуты.
Были глубоко изучены теоретические основы файловой системы MS DOS (FAT12/FAT16), включая её архитектуру, структуру записей каталогов и форматы хранения метаданных, таких как атрибуты, дата и время. Анализ показал, что, несмотря на свою простоту, FAT эффективно использовала доступные ресурсы и заложила основу для дальнейшего развития файловых систем. Подробно рассмотрены системные вызовы MS DOS (прерывание 21h) и библиотечные функции Borland C 3.1 (findfirst, findnext, _dos_getftime), которые стали фундаментом для практической реализации.
В процессе проектирования была разработана модульная структура программы, включающая блоки для управления файловой системой, преобразования даты/времени и взаимодействия с пользовательским интерфейсом. Выбран рекурсивный алгоритм обхода каталогов, который, при своей простоте, адекватно справляется с поставленной задачей в типичных условиях MS DOS. Разработан текстовый пользовательский интерфейс с использованием библиотеки conio.h, обеспечивающий интуитивную навигацию. Особое внимание было уделено функциям преобразования 16-битных упакованных значений даты и времени в удобочитаемый формат, что является главной отличительной особенностью программы.
Практическая реализация программы подтвердила возможность эффективного взаимодействия с файловой системой MS DOS на низком уровне, демонстрируя принципы работы с системными вызовами и библиотечными функциями Borland C 3.1. Тестирование в среде DOSBox показало стабильность и корректность работы программы, подтвердив точность отображения всех необходимых метаданных файлов.
Практическая значимость разработанной программы заключается в её потенциале как учебного пособия для студентов, изучающих системное программирование, а также как инструмента для анализа старых файловых систем. Она наглядно демонстрирует принципы, которые лежат в основе современных систем, и позволяет получить ценный опыт работы с ограниченными ресурсами и прямым доступом к аппаратному обеспечению.
Перспективы дальнейшего развития программы могут включать:
- Добавление функций создания, удаления, переименования файлов и каталогов.
- Реализацию более продвинутых функций сортировки и фильтрации.
- Оптимизацию для работы с очень большими каталогами, возможно, с переходом на итеративный обход.
- Поддержку других файловых систем, если это возможно в рамках MS DOS (например, VFAT для длинных имён файлов, хотя это потребует значительной переработки).
В заключение, данная курсовая работа не только позволила разработать функциональную программу, но и предоставила ценный опыт глубокого погружения в архитектуру и программирование операционной системы MS DOS, что является бесценным для формирования фундаментальных навыков системного разработчика.
Список Использованной Литературы
При подготовке данной курсовой работы были использованы следующие авторитетные источники:
- ГОСТ 7.32–2017 «Отчет о научно-исследовательской работе. Структура и правила оформления».
- ГОСТ 2.105–2019 «Единая система конструкторской документации. Общие требования к текстовым документам».
- ГОСТ Р 7.0.5–2008 «Библиографическая ссылка. Общие требования и правила составления» или ГОСТ Р 7.0.100–2018 «Библиографическая запись. Библиографическое описание. Общие требования и правила составления».
- Microsoft Extensible Firmware Initiative FAT32 File System Specification. [Электронный ресурс]. Режим доступа: https://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx
- INT 21H DOS Interrupt Guide. [Электронный ресурс]. Режим доступа: https://www.scribd.com/document/365511252/INT-21H-DOS-Interrupt-Guide
- The FAT filesystem. [Электронный ресурс]. Режим доступа: https://www.win.tue.nl/~aeb/linux/fs/fat/fat-1.html
- Microsoft FAT Specification. [Электронный ресурс]. Режим доступа: https://www.cba.biz/archive/fat/fat.pdf
- Borland C++ Version 3.1 Programmers Guide 1992. [Электронный ресурс]. Режим доступа: https://archive.org/details/borland_cpp_3.1_programmers_guide_1992
- MS-DOS Date and Time — Win32 apps — Microsoft Learn. [Электронный ресурс]. Режим доступа: https://learn.microsoft.com/en-us/windows/win32/sysinfo/ms-dos-date-and-time
- Подробное он-лайн руководство по Borland C++ 3.1. (for DOS). [Электронный ресурс]. Режим доступа: https://wiki.comp-prog.ru/doku.php/c:borland-c:3.1:online-manual
- Начала системного программирования в среде MS-DOS 7. [Электронный ресурс]. Режим доступа: https://www.studmed.ru/view/nachala-sistemnogo-programmirovaniya-v-srede-ms-dos-7_4d99c381c00.html
Приложения (если необходимо)
В данном разделе, если требуется, будут размещены дополнительные материалы, подробно иллюстрирующие различные аспекты разработанной программы и её функционирования.
- Полный исходный код программы: Все файлы
.cи.h, составляющие проект, с подробными комментариями. - Подробные блок-схемы: Детальные блок-схемы всех основных функций и алгоритмов программы.
- Схемы данных: Диаграммы, иллюстрирующие структуры данных, используемые в программе (например, для хранения информации о файлах).
- Инструкции по компиляции и запуску программы в DOSBox: Пошаговое руководство, описывающее процесс настройки среды DOSBox, компиляции исходного кода с помощью Borland C 3.1 и запуска исполняемого файла.
- Создание виртуального диска в DOSBox.
- Установка Borland C++ 3.1.
- Настройка путей для компилятора.
- Команды для компиляции и компоновки (
BCC filename.c). - Запуск программы (
filename.exe).
- Дополнительные скриншоты: Расширенный набор скриншотов, демонстрирующих различные сценарии использования программы и её поведения в нестандартных ситуациях.
Эти материалы призваны предоставить исчерпывающую информацию для полного понимания и воспроизведения разработанной программы, а также для дальнейшего её анализа и модификации.
Список использованной литературы
- Бабэ, Б. Просто и ясно о Borland C++ : Пер.с англ. Москва : Бином, 1994. 400 с.
- Кейлингерт, П. Элементы операционных систем. Введение для пользователей : Пер.с англ. Москва : Мир, 1985. 295 с.
- Керниган, Б. и Ритчи, Д. Язык программирования Си : пер.с англ. / Под ред. и с предисл. Вс.С.Штаркмана, 2-е изд., перераб.и доп. Москва : Финансы и статистика, 1992. 272 с.
- Фролов, А.В. и Фролов, Г.В. Операционная система MS DOS : В 3 кн. Кн.3. 2-е изд., с изменен. Москва : “ДИАЛОГ-МИФИ”, 1991. 238 с. (Библиотека системного программиста; Т.1, кн.3).
- Microsoft Extensible Firmware Initiative FAT32 File System Specification [Электронный ресурс]. URL: https://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx (дата обращения: 01.11.2025).
- INT 21H DOS Interrupt Guide [Электронный ресурс]. URL: https://www.scribd.com/document/365511252/INT-21H-DOS-Interrupt-Guide (дата обращения: 01.11.2025).
- INT 21H: DOS Functions — Tech Help! [Электронный ресурс]. URL: http://techhelp.sanctuaryofsound.com/int_21h__dos_functions.htm (дата обращения: 01.11.2025).
- INT 21h Functions Reference [Электронный ресурс]. URL: https://www.scribd.com/document/329707252/INT-21h-Functions-Reference (дата обращения: 01.11.2025).
- The FAT filesystem [Электронный ресурс]. URL: https://www.win.tue.nl/~aeb/linux/fs/fat/fat-1.html (дата обращения: 01.11.2025).
- Fat — Forensics Wiki [Электронный ресурс]. URL: http://forensicswiki.org/wiki/Fat (дата обращения: 01.11.2025).
- Interrupts MS-DOS Function Calls (INT 21h) [Электронный ресурс]. URL: https://www.emu8086.com/assembly_language_tutorial_8086_examples/DOS_Interrupts_MS-DOS_Function_Calls_INT_21h.html (дата обращения: 01.11.2025).
- DOS Interrupts and Functions [Электронный ресурс]. URL: https://courses.cs.vt.edu/csonline/MSDOS/Programs/DOSInterrupts/DOSInterrupts.html (дата обращения: 01.11.2025).
- Microsoft FAT Specification — CBA [Электронный ресурс]. URL: https://www.cba.biz/archive/fat/fat.pdf (дата обращения: 01.11.2025).
- johangardhage/dos-bcdemos: Retro programming in Borland C++ 3.1 — GitHub [Электронный ресурс]. URL: https://github.com/johangardhage/dos-bcdemos (дата обращения: 01.11.2025).
- Design of the FAT file system — Wikipedia [Электронный ресурс]. URL: https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system (дата обращения: 01.11.2025).
- Литература по MS-DOS — XServer.ru [Электронный ресурс]. URL: https://xserver.ru/literature/ms-dos.html (дата обращения: 01.11.2025).
- File Allocation Table — Wikipedia [Электронный ресурс]. URL: https://en.wikipedia.org/wiki/File_Allocation_Table (дата обращения: 01.11.2025).
- The FAT (File Allocation Table) Explained — DOS Days [Электронный ресурс]. URL: https://www.dosdays.co.uk/topics/FAT.php (дата обращения: 01.11.2025).
- Операционная система MS-DOS — Электронная библиотека книг братьев Фроловых [Электронный ресурс]. URL: https://www.frolov-lib.ru/books/t1-1-2/ch3.htm (дата обращения: 01.11.2025).
- ОПЕРАЦИОННАЯ СИСТЕМА MS-DOS [Электронный ресурс]. URL: https://studfile.net/preview/4482594/page:10/ (дата обращения: 01.11.2025).
- Начала системного программирования в среде MS-DOS 7 [Электронный ресурс]. URL: https://www.studmed.ru/view/nachala-sistemnogo-programmirovaniya-v-srede-ms-dos-7_4d99c381c00.html (дата обращения: 01.11.2025).
- Microsoft’s Original DOS File System, FAT12, and its Evolution to Become FAT32, Windows 95’s Most Current File System [Электронный ресурс]. URL: https://www.cs.umd.edu/class/spring2003/cmsc411/projects/FAT12_report.pdf (дата обращения: 01.11.2025).
- MS-DOS для программиста [Электронный ресурс]. URL: https://www.frolov-lib.ru/books/t18/ch1.htm (дата обращения: 01.11.2025).
- MS-DOS Date and Time — Win32 apps — Microsoft Learn [Электронный ресурс]. URL: https://learn.microsoft.com/en-us/windows/win32/sysinfo/ms-dos-date-and-time (дата обращения: 01.11.2025).
- DOS Programming Technical Reference — Higher Intellect Vintage Wiki [Электронный ресурс]. URL: http://bitsavers.trailing-edge.com/magazines/DDJ/1987/DDJ_1987_08.pdf (дата обращения: 01.11.2025).
- Borland C++ Version 3.1 Programmers Guide 1992 : Free Download, Borrow, and Streaming — Internet Archive [Электронный ресурс]. URL: https://archive.org/details/borland_cpp_3.1_programmers_guide_1992 (дата обращения: 01.11.2025).
- MS-DOS date/time — Just Solve the File Format Problem — Archiveteam [Электронный ресурс]. URL: https://fileformats.archiveteam.org/wiki/MS-DOS_date/time (дата обращения: 01.11.2025).
- Microsoft C — Long Entry — ITLnet [Электронный ресурс]. URL: https://www.itlnet.net/programming/data/ctime.htm (дата обращения: 01.11.2025).
- Borland C++ 3.1 Make in dosbox — VOGONS [Электронный ресурс]. URL: https://www.vogons.org/viewtopic.php?t=34135 (дата обращения: 01.11.2025).
- FAT and the Directory Structure — Angelfire [Электронный ресурс]. URL: https://www.angelfire.com/va3/fat/dir.htm (дата обращения: 01.11.2025).
- FAT File Management System Supplement [Электронный ресурс]. URL: https://www.cs.umd.edu/class/spring2003/cmsc411/projects/FAT_file_system_supplement.pdf (дата обращения: 01.11.2025).
- Converting date to DOS date — Stack Overflow [Электронный ресурс]. URL: https://stackoverflow.com/questions/15442562/converting-date-to-dos-date (дата обращения: 01.11.2025).
- DosDateTimeToVariantTime function (oleauto.h) — Win32 apps — Microsoft Learn [Электронный ресурс]. URL: https://learn.microsoft.com/en-us/windows/win32/api/oleauto/nf-oleauto-dosdatetimetovarianttime (дата обращения: 01.11.2025).
- MS-DOS datetime format spec for Kaitai Struct [Электронный ресурс]. URL: https://formats.kaitai.io/dos_datetime/ (дата обращения: 01.11.2025).
- подробное он-лайн руководство по Borland C++ 3.1. (for DOS) [Электронный ресурс]. URL: https://wiki.comp-prog.ru/doku.php/c:borland-c:3.1:online-manual (дата обращения: 01.11.2025).
- MS-DOS standard date format — Google Groups [Электронный ресурс]. URL: https://groups.google.com/g/comp.os.msdos.programmer/c/Wl-k81m409A (дата обращения: 01.11.2025).
- MS-DOS Instructions [Электронный ресурс]. URL: https://web.stanford.edu/class/cs101/msdos.html (дата обращения: 01.11.2025).
- КУРСОВАЯ РАБОТА — Пензенский государственный университет [Электронный ресурс]. URL: https://dep-vkip.pnzgu.ru/files/dep-vkip.pnzgu.ru/page/doc/2021/metod_ukazaniya_kr_po_mdk.03.01.pdf (дата обращения: 01.11.2025).
- Compound File Directory Entry — MS-CFB — Microsoft Learn [Электронный ресурс]. URL: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/df73d2a7-f49c-4861-9f93-4a11b6d0c2e4 (дата обращения: 01.11.2025).
- Borland C++ 3.1 | Programs — Простые и красивые программы [Электронный ресурс]. URL: http://cplusplus-programming.ru/bc31.html (дата обращения: 01.11.2025).
- C/C++ и Borland C++ Builder для начинающих [Электронный ресурс]. URL: https://www.book.ru/book/908332 (дата обращения: 01.11.2025).
- Borland C++ version 3.1 | Основы программирования [Электронный ресурс]. URL: http://progbook.ru/tools/borland-c-version-31 (дата обращения: 01.11.2025).
- ТЕХНОЛОГИЯ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ — ИСОиП (филиал) ДГТУ в г. Шахты [Электронный ресурс]. URL: https://www.isoiptgu.ru/upload/iblock/c38/c3809033327d6d1b32d0ff19875e533c.pdf (дата обращения: 01.11.2025).
- Running Borland C++ 3.1 on dosbox — VOGONS [Электронный ресурс]. URL: https://www.vogons.org/viewtopic.php?t=19249 (дата обращения: 01.11.2025).
- FileTimeToDosDateTime function (winbase.h) — Win32 apps — Microsoft Learn [Электронный ресурс]. URL: https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-filetimetodosdatetime (дата обращения: 01.11.2025).
- An Overview of MS-DOS — It works [Электронный ресурс]. URL: https://users.cs.northwestern.edu/~akj/cs101/lectures/ms-dos.pdf (дата обращения: 01.11.2025).
- DOS/Windows file attributes — Just Solve the File Format Problem — Archiveteam [Электронный ресурс]. URL: https://fileformats.archiveteam.org/wiki/DOS/Windows_file_attributes (дата обращения: 01.11.2025).
- Olivetti — MS-DOS 3.30 — Quick Reference Guide.pdf — minus zero degrees [Электронный ресурс]. URL: https://minuszerodegrees.net/manuals/Olivetti%20-%20MS-DOS%203.30%20-%20Quick%20Reference%20Guide.pdf (дата обращения: 01.11.2025).
- How to Use Borland C++ [Электронный ресурс]. URL: https://www.cs.umd.edu/class/spring2003/cmsc411/projects/Borland_C_plus_plus.pdf (дата обращения: 01.11.2025).