CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
intdosx
INTDOSX
#include <dos.h>
int intdosx(intno,inregs,outregs,segregs);
union REGS *inregs; значение регистров при
вызове
union REGS *outregs; значение регистров при
возврате
struct SREGS *segregs; значение сегментов при
вызове
Описание.
Функция intdosx осуществляет выполнение системного вызова
DOS, который определен значением регистра, объявленным в inregs,
и возвращает результат системного вызова в outregs. В отличии от
функции intdos, функция intdosx принимает значения регистров сег-
мента в segregs, позволяя программам, которые используют сегменты
данных большой модели или far-указатели, определить, какой сег-
мент или указатель должен быть использован на протяжении систем-
ного вызова. Аргументы inregs и outregs являются объединениями
типа REGS.Аргумент segregs является структурой типа SREGS. Эти
типы объявлены в include-файле <dos.h>. Для активизации системно-
го вызова функция intdosx выполняет команду INT 21H. Перед выпол-
нением команды функция копирует содержимое inregs и segregs в со-
ответствующие регистры. В segregs используются только значения
регистров DS и ES. После возврата команды INT intdosx копирует
текущее значение регистра в outregs и перезаписывает DS.
Она также копирует статус переносимого флага системы в поле
cflag, размещенное в outregs. Если это поле является ненулевым,
флаг устанавливается посредством системного вызова и указывает на
условие ошибки.
Область действия функции intdosx расширяется и на область
действия системных вызовов DOS, которые берут аргумент в регистре
ES или значение регистра DS, отличное от умалчиваемого сегмента
данных.
Возвращаемое значение.
После завершения системного вызова функция intdosx возвра-
щает значение регистра AX. Если поле cflag в outregs является не-
нулевым, возникает ошибка и _doserrno также устанавливает соот-
ветствующий код ошибки.
См.также bdos, intdos, segread, FP_SEG.
Замечание! Значения сегмента для аргумента segreg могут
быть получены либо при использовании функции segread, либо макро
FP_SEG.
Пример:
#include <dos.h>
union REGS inregs, outregs;
struct SREGS segregs;
char far *dir = "/test/bin";
/*следующий оператор заменяет текущий рабочий директорий
вызовом шеснадцатеричной функции DOS 36 */
inregs.h.ah=0x3b;
/* измененный директорий */
inregs.x.dx=FP_OFF(dir);
/* имя файла offset*/
segregs.ds=FP_SEG(dir);
/* имя файла сегмента */
intdosx(&inregs,&outregs,&segregs);
