Справочник по функциям С++. Подпрограммы классификации Подпрограммы преобразования
Скачать 3.41 Mb.
|
bdos----------------------------------------------------------------- Назначение Системный вызов MS-DOS. Синтаксис int bdos (int dosfun, void dosdx, unsigned dosal) Прототип в dos.h Замечания Эта функция обеспечивает прямой доступ к многим системным вызовам MS-DOS. Смотри руководство системного программиста (Programmer's Reference Manual) для детализации каждого системного вы- зова. Те системные вызовы, которые требуют целый ар- гумент, используют bdos, те же, которые требуют указатель на аргумент, используют bdosptr. Для малых модeлей данных (tiny, small и medium) bdos и bdosptr аналогичны. В больших моделях данных (compact, largе и huge), очень важно ис- пользование именно bdosptr для системных вызо- вов, которые требуют указатель в качестве аргу- мента вызова. dosfun описана в Руководстве программиста по MS -DOS. dosdx - значение регистра DX при вызове bdos. dosal - значение регистра AL. Возвращаемое bdos возвращает значение регистра АХ, значение установленное системным вызовом. Переносимость Уникальна для MS-DOS. Смотри также bdosptr, geninterrupt, int86, int86x, intdos, intdosx Пример #include #include /* Получение текущего драйвера в виде: 'A', 'B', ...*/ char current_drive (void) { char curdrive; /* Получение имени текущего диска в виде: 0, 1, ... */ curdrive = bdos(0x19,0,0); return('A'+curdrive); } main() { printf("Текущий драйвер - %s\n", current_drive()); } Результат выполнения программы: Текущий драйвер - С ----------------------------------------------------------------- bdosptr----------------------------------------------------------------- Назначение Системный вызов MS-DOS. Синтаксис int bdosptr(int dosfun, void *argument,unsigned dosal); Прототип в dos.h Замечания bdosptr обеспечивает прямой доступ ко многим системным вызовам MS-DOS. Смотри руководство системного программиста (Programmer's Reference Manual) для детализации каждого системного вы- зова. Те системные вызовы, которые требуют целый ар- гумент, используют bdos, те же, которые требуют указатель на аргумент, используют bdosptr. Для малых модeлей данных (tiny, small и medium) bdos и bdosptr аналогичны. В больших моделях данных (compact, largе и huge), очень важно ис- пользование именно bdosptr для системных вызо- вов, которые требуют указатель в качестве аргу- мента вызова. dosfun описана в Руководстве программиста по MS -DOS. В малых моделях параметр argument в bdosptr за- дается в DX; в больших моделях этот параметр задается парой величин DS:DX, используемой в системныx вызоваx. dosal - значение регистра AL. Возвращаемое bdosptr в случае успешного завершения возвра- значение щает значение регистра AX, а в случае ошибки -1. Кроме того, в случае ошибки устанавливаются значения _doserrno и errno. Переносимость Уникальна для MS-DOS. Прототип в dos.h Смотри также bdos, geninterrupt, int86, int86x, intdos, intdosx Пример Смотри harderr ---------------------------------------------------------------- bioscom---------------------------------------------------------------- Назначение Коммуникация ввода/вывода. Синтаксис int bioscom(int cmd, char byte, int port) Прототип в bios.h Замечания bioscom осуществляет различные коммуникационные связи в соответствии с протоколом обмена интер- фейса RS232 через порт, заданный в port. Величина port равная 0 соответствует COM1, рав- ная 1 - COM2 и т.д. Значение cmd может быть одним из следующиx: 0 - устанавливает коммуникационные параметры равные значению, указанному в byte. 1 - посылает в линию связи символ из byte. 2 - получает символ из линии связи. 3 - возвращает текущее состояние коммуникацион- ного порта. byte представляет собой комбинацию из следующих битов: 0х02 7 бит данных 0х03 8 бит данных 0х00 1 стоп бит 0х04 2 стоп бит 0х00 отсутствие контроля четности 0х08 контроль на нечетности 0х18 контроль четности 0х00 110 бод 0х20 150 бод 0х40 300 бод 0х60 600 бод 0х80 1200 бод 0хA0 2400 бод 0хC0 4800 бод 0хE0 9600 бод Например, заданное в byte значение 0хEB (0хE0|0 х08|0х00|0х03) устанавливает коммуникационный порт в 9600 бод, контроль на нечетность, 1 стоп -бит и 8 бит данныx. Функция bioscom использует прерывание BIOS 0x14. Возвращаемое Для всеx значений cmd кодом возврата является значение 16-битовое целое, в котором 8 старшиx бит явля- ются битами состояния, а 8 младших - изменяются в зависимости от значения cmd. Старшие биты кода возврата определяются следую- щим образом: бит 15 - истек тайм-аут бит 14 - сдвиговый регистр передачи пуст бит 13 - передающий регистр-защелка пуст бит 12 - фиксация завершения бит 11 - ошибка кодирования бит 10 - ошибка четности бит 9 - ошибка переполнения бит 8 - готовность данныx Если значение cmd=1 и 15-ый бит установлен, то значение byte не может быть передано. В против- ном случае оставшиеся старшие и младшие биты устанавливаются соответствующим образом. При обнаружении ошибки устанавливается по край- ней мере один из старших битов. Если старшие биты не установлены, то байт был принят без ошибки. При значении cmd 0 или 3, старшие биты возвра- щаемого значения установлены как описано выше, а младшие биты определяются следующим образом: бит 7 - получен сигнал открытия линии бит 6 - индикатор кольца бит 5 - готовность набора данныx бит 4 - посылка сброса бит 3 - получен дельта-сигнал открытия линии. бит 2 - обрыв кольца бит 1 - завершение модификации набора данных бит 0 - дельта-сброс Переносимость Данная функция работает только на IBM PC и совместимых моделях. Пример /* Демонстрационный пример работы bioscom */ #include #include #define COM1 0 #define DATA_READY 0x100 /* 1200 бод, 7 бит, 1 стоп-бит, контроль четности отменен */ #define SETTINGS (0x80|0x02|0x00|0x00) main() { int register in,out,status; bioscom(0,SETTINGS,COM1); cprintf("...BIOSCOM [ESC] для завершения " " ...\n"); while(1) { status = bioscom(3,0,COM1); if (status & DATA_READY) if ((out = bioscom(2,0,COM1) & 0x7F) != 0) putch(out); if (kbhit()) { if ((in = getch()) == '\x1B') return(0); bioscom(1,in,COM1) } } } --------------------------------------------------------------- |