текущий путь доступа для диска
Таблица 9
(0) 64 | path | текущий путь доступа для диска |
(+64) 2 | reserv1 | зарезервировано |
(+66) 2 | reserv2 | зарезервировано |
(+68) 1 | reserv3 | зарезервировано |
(+69) 4 | ddcb | адрес соответствующего DDCB |
(+73) 2 | cdir_clu | первый кластер текущего каталога на диске. 0 соответствует корневому каталогу, -1 - если к диску еще не обращались |
(+75) 2 | reserv4 | зарезервировано |
(+77) 2 | reserv5 | зарезервировано |
(+79) 2 | reserv6 | зарезервировано |
---------------- для DOS 4.х ----------------- | ||
(+81) 7 | reserv7 | зарезервировано |
Как пример использования этой информации приведем программу, которая выводит содержимое массива на экран: #include <dos.h> #include <stdio.h> #include <stdlib.h> #include "sysp.h" void main(void); void main(void) { CVT far *cvt; DINFO far *dinfo; unsigned i,j,k; printf("Информация о дисковых устройствах\n" "Copyright Frolov A. (C),1990\n"); cvt=get_mcvt(); // Адрес векторной таблицы связи dinfo=cvt->drv_info; // Адрес таблицы дисковых // устройств i=cvt->num_bdev; // Количество дисковых устройств for(j=0;j<i;j++) { printf("Адрес: %Fp,путь: %Fs\n" "Первый кластер каталога: %d\n\n", dinfo, dinfo->path, dinfo->cdir_clu); dinfo = dinfo+1; } exit(0); }
На этом мы завершаем изучение векторной таблицы связи MS-DOS. Еще раз уместно напомнить, что вся приведенная выше информация отсутствует в документации и может меняться (и действительно меняется!) от версии к версии. Если вы хотите использовать описанные выше средства, вам необходимо динамически определять версию DOS и использовать соответствующие форматы управляющих блоков.
Таблица 9
P_WAIT | выполнение родительской программы задерживается до завершения дочерней программы. |
P_NOWAIT | родительская программа продолжает выполнение сразу после запуска дочерней. Этот параметр имеет смысл только для операционных систем OS/2, UNIX, в которых поддерживается мультизадачность. |
P_OVERLAY | загружает программу как оверлей и передает ей управление. Этот режим соответствует функции exec в том смысле, что родительская программа не получит управления после завершения дочерней. |
С помощью текстового редактора можно создать справочную базу данных в формате утилиты Microsoft HELPMAKE, затем, запуская в нужный момент диалоговую утилиту работы с базой данных Microsoft Quick Help QH.EXE, можно получить нужную справку.
Утилита QH использует базы данных, описанные в переменной среды HELPFILES. Мы будем использовать либо родительскую среду, где находится значение переменной HELPFILES по умолчанию, либо указывать новое значение для этой переменной.
Приведенная ниже программа используется для получения справки о функции стандартной библиотеки printf, поиск производится в HELP-базе QuickC: #include <stdio.h> #include <conio.h> #include <process.h> main() { int r; // Получаем справку о функции printf, // справочная база данных расположена // в каталоге d:\qc2\bin r = help("HELPFILES=d:\\qc2\\bin;","printf"); if( r == -1 ) printf( "Невозможно запустить процесс" ); else printf( "\nПроцесс завершен" ); exit(r); } /** *.Name help * *.Title Получить справку по заданному контексту * *.Descr Функция получает в качестве параметров * переменную среды, указывающую на путь * к справочной базе данных и указатель * на строку контекста для поиска в базе. * Затем запускается как дочерний процесс * утилита Microsoft Quick Help QH.EXE, для * которой формируются среда и параметры. * *.Params int help(char *help_file, char *help_topic); * * help_file - переменная среды, указывающая * на путь к справочной базе * * help_topic - контекст для поиска в базе * * *.Return 0 при успешном запуске процесса * -1 не удалось запустить процесс **/ int help(char *help_file, char *help_topic) { char *env[] = { "", NULL }; // Среда, которую // получит QH при запуске if(*help_file != 0) { env[0] = help_file; // Формируем среду для QH // Запускаем утилиту return(spawnlpe(P_WAIT,"QH","QH", "-u",help_topic,NULL,env)); } else { // Если переменная среды не задана, // используем родительскую среду return(spawnlp(P_WAIT,"QH","QH", "-u",help_topic,NULL)); } }
Подробная информация об использовании утилит HELPMAKE и QH приводится в документации на Microsoft C 6.0.
Таблица 9
(0) 13 | header | Заголовок запроса. |
(+13) 1 | media | В этом поле драйверу передается байт-описатель среды носителя данных, с которым DOS работала раньше. |
(+14) 1 | reply | В это поле драйвер должен поместить ответ о факте замены среды:
1 - диск не заменялся; 0 - неизвестно; -1 - диск был заменен. |
(+15) 4 | vol_id | Указатель на предыдущую метку тома (если установлен бит 11 слова атрибута устройства и диск был заменен) |
Байт-описатель среды media классифицирует используемую среду носителя данных, но делает это неоднозначно. Мы приведем характерные для этого байта параметры дисков: