Bar
bar
Функция Рисует прямоугольник.
Синтаксис #include
#include
void far bar(int left,int top,int right,int bottom);
Файл, содержащий graphics.h прототип include
Описание bar рисует двухмерный заполненный прямоугольник. Прямоугольник зарисовывается, используя текущий цвет и шаблон заполнения. bar не рисует контур прямоугольника; для того, чтобы нарисовать контур двухмерного прямоугольника, используйте функцию bar3d, с параметром depth равным 0.
Верхний левый и нижний правый углы прямоугольника заданы параметрами (left,top) и (right,bottom) соответствено. Координаты даются в пикселях.
Возвращаемое Нет. значение
Переносимость Функция уникальна для Turbo C++. Эта функция рабо- тает только на компьютерах IBM PC и совместимых с ними, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.
Смотрите также
Пример:
#include
#include
#include
#include
int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int midx,midy,i;
/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");
/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } midx = getmaxx() / 2; midy = getmaxy() / 2;
/* цикл по шаблонам заполнения */ for(i=SOLID_FILL; i
Bar3d
bar3d
Функция Рисует трехмерный столбец.
Синтаксис #include
void far bar3d(int left, int top, int right, int bottom, int depth, int topflag); Файл, содержащий graphics.h прототип
Описание bar3d рисует трехмерный прямоугольный столбец, затем закрашивает его, используя текущий шаблон и цвет заполнения. Трехмерный контур столбца рису- ется текущим цветом и типом линии. Глубина столб- ца в точках экрана задается параметром depth. Па- раметр topflag определяет, будет ли рисоваться вершина трехмерного столбца. Если topflag не 0, вершина рисуется, в противном случае вершина не рисуется. (создается возможность ставить несколь- ко столбцов друг на друга.)
Верхний левый и нижний правый угол прямоугольника задаются (left, top) и (right,bottom) соответст- венно.
Для вычисления типичной глубины для bar3d возьми- те 25% ширины столбца, например:
bar3d(left,top,right,bottom,(right-left)/4,1)
Возвращаемое Нет. значение
Переносимость Функция уникальна для Turbo C++. Эта функция рабо- тает только на компьютерах IBM PC и совместимых с ними, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.
Смотрите также
Пример:
#include
#include
#include
#include
int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int midx,midy,i;
/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");
/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } midx = getmaxx() / 2; midy = getmaxy() / 2;
/* цикл по шаблонам заполнения */ for(i=SOLID_FILL; i
Bcd
bcd
Функция Преобразует число в двоично-десятичный код.
Синтаксис #include
bcd bcd(int x); bcd bcd(double x); bcd bcd(double x, int decimals);
Файл, содержащий bcd.h прототип
Описание Все обычные арифметические операции переопределены для работы с числами в двоично-десятичном кодиро- вании (BCD). BCD числа имеют около 17 десятичных разрядов и имеют диапазон представления от 1х10^-125 до 1x10^125. Для преобразования числа в BCD кодировании обратно в float, double или long double можно воспользоваться функцией real. Аргу- мент desimals необязателен. Он определяет сколько необходимо сохранить разрядов после десятичной точки при преобразовании. Число округляется в со- ответствии с правилами округления банкомета, по которым число округляется до ближайшего целого числа, а остаток округляется до четной цифры.
Возвращаемое Двоично-десятичный эквивалент данного числа. значение
Переносимость bcd уникальна для Turbo C++; вы должны компилиро- вать с помощью С++.
Смотри также
Пример:
#include
#include
double x = 1000.0; // десять тысяч долларов bcd a = bcd(x/3,2); // одна треть, округленная до // одной сотой int main(void) { cout
Bdos
bdos
Функция Доступ к системным вызовам DOS.
Синтаксис #include
int bdos(int dosfun, unsigned dosdx, unsigned dosal);
Файл, содержащий dos.h прототип
Описание bdos обеспечивает прямой доступ ко многим систем- ным вызовам DOS. Описание всех системных вызовов вы найдете в документе "Справочное руководство по DOS".
В системных вызовах, требующих целый аргумент, используйте функцию bdos; если в качестве аргу- мента они требуют указатель, то используйте функ- цию bdosptr.
Для моделей данных large (compact, large, huge) предпочтительнее использовать для системных вызо- вов функцию bdosptr вместо bdos с адресным указа- телем в качестве аргумента.
dosfun описан в документе "Справочное руководство по DOS".
dosdx является значением регистра DX.
dosal является значением регистра AL.
Возвращаемое Функция bdos возвращает значение регистра AX, значение устанавливаемое при системном вызове.
Переносимость bdos уникальна для DOS.
Смотрите также 6, 6
Пример:
#include
#include
/* получение текущего устройства, как 'A','B',...*/ char current_drive(void) { char curdrive; /* получение текущего диска, как 0,1,...*/ curdrive = bdos(0x19,0,0); return('A' + curdrive); }
main() { printf("Текущий дисковод %c:\n", current_drive()); }
Результат Текущий дисковод C:
Bdosptr
bdosptr
Функция Доступ к системным вызовам DOS.
Синтаксис #include
int bdosptr(int dosfun, void * argument, unsigned dosal);
Файл, содержащий dos.h прототип
Описание bdosptr обеспечивает прямой доступ ко многим сис- темным вызовам DOS. Описание всех системных вызо- вов вы найдете в документе "Справочное руководст- во по DOS".
В системных вызовах, требующих целый аргумент, используйте функцию bdos; если в качестве аргу- мента они требуют указатель, то используйте функ- цию bdosptr.
Для моделей данных large (compact, large, huge) предпочтительнее использовать для системных вызо- вов функцию bdosptr вместо bdos с адресным указа- телем в качестве аргумента.
dosfun описан в документе "Справочное руководство по DOS".
В моделях данных типа small параметр argument в bdosptr задает DX; в моделях данных типа large он задает значение DS:DX, используемое в системном вызове.
dosal является значением регистра AL.
Возвращаемое Функция bdosptr возвращает значение регистра AX значение при успешном завершении и значение -1 при неудач- ном завершении. При неудачном завершении устанав- ливаются значения переменных errno и _doserrno.
Переносимость bdosptr уникальна для DOS.
Смотрите также 6, 6
Пример:
#include
#include
#include
#include
#include
#include
#define BUFLEN 80
int main(void) { char buffer[BUFLEN]; int test; printf("Введите полный маршрут директории:"); gets(buffer); test = bdosptr(0x3b,buffer,0); if(test) { /* в errno.h приведен список кодов ошибок */ printf("Ошибка DOS, номер: %d\n",errno); exit(1); } getcwd(buffer,BUFLEN); printf("Текущая директория: %s\n",buffer); return 0; }
Bioscom
bioscom
Функция Выполняет ввод/вывод из последовательного порта.
Синтаксис #include
int bioscom(int cmd, char abyte, int port);
Файл, содержащий bios.h прототип
Описание Функция bioscom выполняет разнообразную связь через RS232 при помощи порта ввода/вывода, указываемого в аргументе port.
Значение 0 аргумента port соответствует COM1, значение 1 соответствует COM2 и т.д.
Значение аргумента cmd может быть одним из следу- ющих:
0 - устанавливает параметры связи в abyte; 1 - пересылает символ в abyte по линии связи; 2 - получает символ по линии связи; 3 - возвращает текущее состояние коммуникационного порта.
abyte является комбинацией следующих битов (из каждой группы выбирается одно значение):
0x02 - 7 битов данных 0x00 110 бод 0x03 - 8 битов данных 0x20 150 бод
0x00 - 1 стоп-бит 0x40 300 бод 0x04 - 2 стоп-бита 0x60 600 бод 0x00 - нет проверки на четность 0x80 1200 бод 0x08 - проверка на нечетность 0xA0 2400 бод 0x18 - проверка на четность 0xC0 4800 бод 0xE0 9600 бод
Например, если abyte имеет следующее значение 0xEB (0xE0|0x08|0x00|0x03), то это устанавливает для коммуникационного порта скорость передачи 9600 бод, контроль на нечетность, 1 стоп-бит, и 8 битов данных. bioscom использует прерывание BIOS 0x14.
Возвращаемое Для всех значений cmd bioscom возвращает шестнадца- значение тибитовое целое число, где 8 старших бит - это биты состояния, а 8 младших битов варьируются в зави- симости от значения cmd. Старшие биты в возвраща- емом значении имеют следующие значения:
бит 15 - таймаут; бит 14 - передающий сдвиговый регистр пуст: бит 13 - передающий регистр хранения пуст; бит 12 - обнаружено прерывание; бит 11 - ошибка формирования кадра синхронизации; бит 10 - ошибка четности; бит 9 - ошибка переполнения; бит 8 - готовность данных.
Если значение в abyte невозможно передать, то ус- танавливается бит 15. В других случаях старшие и младшие биты устанавливаются соответствующим об- разом. К примеру, если возникла ошибка кадра син- хронизации, то устанавливается бит 11.
Если cmd имеет значение 2, то считываемый байт находится в младших битах, если не было ошибки. Если же произошла ошибка, устанавливается, по крайней мере, один из старших бит. Если ни один из старших бит не установлен, значит байт был по- лучен без ошибки.
Если cmd имеет значение 0 или 3, то возвращаемое значение содержит старшие биты, как они были опреде- лены выше, а младшие биты определяются следующим образом:
бит 7 - прием обнаруженного линейного сигнала; бит 6 - кольцевой индикатор; бит 5 - набор данных готов; бит 4 - готовность к передаче; бит 3 - изменение в приеме детектора линейного сигнала; бит 2 - завершающий кольцевой детектор; бит 1 - изменение в готовности набора данных; бит 0 - изменение в готовности к передаче.
Переносимость bioscom поддерживается только на компьютерах IBM PC или совместимых с ними.
Пример:
#include
#include
#define COM1 0 #define DATA_READY 0x100 #define SETTINGS (0x80|0x02|0x00|0x00)
int main(void) { register int in, out, status; bioscom(0, SETTINGS, COM1); cprintf("... BIOSCOM [ESC] to exit ...\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); } } return 0; }
Biosdisk
biosdisk
Функция Дисковые функции BIOS.
Синтаксис #include
int biosdisk(int cmd, int drive, int head, int track, int sector, int nsects, void * buffer);
Файл, содержащий bios.h прототип
Описание biosdisk использует прерывание 0x13 для того,чтобы передать выполнение дисковых операций непосредст- венно системе BIOS.
drive представляет собой число, которое задает используемый дисковод: 0 для 1-го устройства гиб- ких дисков, 1 для 2-го устройства гибких дисков, 3 для 3-го устройства и т.д. Для жестких дисковых устройств значение drive 0x80 задает первый дис- ковод, значение 0x81 - второй дисковод, значение 0x82 - третий и т.д.
Для жестких дисков указывается физическое устрой- ство, а не раздел диска. При необходимости прик- ладная программа должна будет самостоятельно ин- терпретировать таблицу разделов.
cmd обозначает выполняемую операцию. В зависимос- ти от значения cmd остальные аргументы могут тре- боваться или нет.
Далее перечислены возможные значения cmd для компьютеров IBM PC, XT, AT, PS/2 или совместимых с ними.
0 Аппаратный сброс дискового контроллера. Все остальные параметры игнорируются. 1 Возвращает статус последней дисковой операции. Все остальные параметры игнорируются. 2 Считывает в память один или несколько секторов диска. Начальный сектор, подлежащий считыванию, задается аргументами head, track и sector. Чис- ло считываемых секторов задается аргументом nsects. Данные считываются в buffer по 512 бай- тов на сектор. 3 Записывает на диск из памяти один или более дисковых секторов. Начальный сектор задается аргументами head, track и sector. Число сек- торов определяется аргументом nsects. Данные записываются на диск из buffer по 512 байт на сектор. 4 Производит верификацию одного или более секто- ров. Начальный сектор определяется аргументами head, track и sector. Количество секторов зада- ется в nsects. 5 Форматирует дорожку. Дорожка определяется аргументами head и track. buffer является ад- ресным указателем таблицы дескрипторов секто- ров, которые будут записываться на указанной дорожке. Обратитесь к документу "Техническое справочное руководство по IBM PC", в котором подробно описана данная таблица и операция форматирования.
Только для компьютеров типа XT, AT, PS/2 и сов- местимых с ними разрешены следующие значения ар- гумента cmd:
6 Форматирует дорожку и устанавливает флаги пло- хих секторов. 7 Форматирует диск, начиная с заданной дорожки. 8 Возвращает параметры текущего дисковода. Дан- ная информация записывается в buffer в первые четыре байта. 9 Задает характеристики пары устройств. 10 Производит удлиненное считывание, когда чи- тается 512 байтов плюс 4 дополнительных байта на каждый сектор. 11 Выполняет удлиненную запись, когда записывается 512 байтов плюс 4 дополнительных байта на каждый сектор. 12 Выполняет дисковый поиск. 13 Альтернативный сброс диска. 14 Считывает буфер сектора. 15 Записывает буфер сектора. 16 Проверяет готовность заданного диска. 17 Рекалибрует диск. 18 Производит диагностику контроллера RAM. 19 Производит диагностику дисковода. 20 Производит внутреннюю диагностику контроллера.
Примечание. biosdisk работает ниже файловой сис- темы - на произвольных секторах, поэтому может разрушить содержимое файлов и директорий на жест- ком диске.
Возвращаемое biosdisk возвращает байт состояния, состоя- значение щий из следующих битов:
0x00 успешная операция. 0x01 неверная команда. 0x02 адресный маркер не найден. 0x03 попытка записи на диск, защищенный от записи. 0x04 сектор не найден. 0x05 неудачный сброс (для жесткого диска). 0x06 диск изменился после последней операции. 0x07 сбой параметра активности дисковода. 0x08 конфликт при работе DMA. 0x09 попытка обращения к DMA за границей 64К. 0x0A обнаружен дефектный сектор. 0x0B обнаружена дефектная дорожка. 0x0C неподдерживаемая дорожка. 0x10 ошибка CRC/ECC при чтении диска. 0x11 ошибка CRC/ECC при корректировке данных. 0x20 сбой при работе контроллера. 0x40 сбой при операции поиска. 0x80 узел подсоединения не отвечает. 0xAA устройство не готово (только для жесткого диска). 0xBB произошла нераспознаваемая ошибка (только для жесткого диска). 0xCC произошел сбой при записи. 0xE0 ошибка статуса. 0xFF сбой операции распознавания.
Заметим, что код 0x11 не является ошибкой, посколь- ку данные являются корректными. Возвращаемое значе- ние выдается в любом случае, чтобы дать возможность прикладной программе выработать решение.
Переносимость Данная функция поддерживается только на компью- терах IBM PC и совместимых с ними.
Смотрите также
Пример:
#include
#include
int main(void) { #define CMD 2 /* команда чтения сектора */ #define DRIVE 0 /* номер дисковода для A: */ #define HEAD 0 /* номер головки */ #define TRACK 1 /* номер дорожки */ #define SECT 1 /* номер секторов */ #define NSECT 1 /* число секторов */
int result; char buffer[512]; printf("Попытка чтения дисковода A:\n"); result = biosdisk(CMD,DRIVE,HEAD,TRACK,SECT,NSECT,buffer); if(result==0) printf("Успешное чтение диска в дисководе A:"); else printf("Попытка чтения дисковода A: неудача\n"); return 0; }
Biosequi
biosequip
Функция Проверяет оборудование.
Синтаксис #include
int biosequip(void);
Файл, содержащий bios.h прототип
Описание biosequip возвращает целое число, описывающее оборудование, подсоединенное к системе. Для этой цели используется прерывание 0x11 BIOS.
Возвращаемое Возвращаемое функцией значение представ- значение ляет собой набор битовых полей. Для компьютера IBM PC этот набор следующий:
биты 14-15 Количество установленных параллельных принтеров 00 = 0 принтеров 01 = 1 принтер 10 = 2 принтера 11 = 3 принтера бит 13 Подсоединение последовательного принтера. бит 12 Подсоединение игрового контроллера. биты 9-11 Количество портов передачи данных. 000 = 0 портов 001 = 1 порт 010 = 2 порта 011 = 3 порта 100 = 4 порта 101 = 5 портов 110 = 6 портов 111 = 7 портов бит 8 DMA (прямой доступ к памяти) 0=Компьютер имеет DMA. 1=Компьютер не имеет DMA; например, PCJr. биты 6-7 Количество дисков 00=1 дисковод 01=2 дисковода 10=3 дисковода 11=4 дисковода (только, если бит 0 = 1) бит 4-5 Исходный видео-режим 00 = не используется 01 = 40х25 BW с цветной платой 10 = 80х25 BW с цветной платой 11 = 80х25 BW с монохромной платой биты 2-3 Размер RAM в компьютере 00 = 16К 01 = 32К 10 = 48К 11 = 64К бит 1 сопроцессор с плавающей точкой бит 0 загрузка с диска
Переносимость biosequip поддерживается только на компьютерах IBM PC или совместимых с ними.
Пример:
#include
#include
#define CO_PROCESSOR_MASK 0x0002
int main(void) { int equip_check; /* получить текущую конфигурацию оборудования */ equip_check = biosequip(); /* имеется ли сопроцессор? */ if(equip_check & CO_PROCESSOR_MASK) printf("Сопроцессор установлен\n"); else printf("Сопроцессор не установлен\n"); return 0; }
Bioskey
bioskey
Функция Интерфейс с клавиатурой при помощи функций BIOS.
Синтаксис #include
int bioskey(int cmd);
Файл, содержащий bios.h прототип
Описание bioskey посредством прерывания BIOS 0x16 выполняет различные операции c клавиатурой. Параметр cmd определяет операцию.
Возвращаемое Значение, возвращаемое функцией bioskey, зависит от значение выполняемой операции, которая определяется аргумен- том cmd:
-------------------------------------------------- cmd Операция -------------------------------------------------- 0 Если младшие 8 бит не нулевые, bioskey возвращает код ASCII следующей нажатой кла- виши, ожидающей в очереди. Если младшие 8 битов равны 0, то старшие 8 битов содержат расширенные коды клавиатуры, описание кото- рых вы можете найти в документе "Техническое справочное руководство по IBM PC".
1 Производится проверка, имело ли место нажа- тие клавиши. Если при проверке возвращает- ся значение 0, это означает, что клавиша не была нажата. В противном случае возвра- щается значение очередной нажатой клавиши. Сам же код очередной нажатой клавиши сох- раняется и будет возвращен при следующем вызове функции bioskey при значении пара- метра cmd, равном нулю.
2 Запрашивает текущий статус клавиш типа SHIFT. Значение получается при логическом сложении следующих кодов (операции "ИЛИ") Бит 7 0x80 INSERT нажат Бит 6 0x40 CAPS нажат Бит 5 0x20 NUM LOCK нажат Бит 4 0x10 SCROLL LOCK нажат Бит 3 0x08 ALT нажат Бит 2 0x04 CTRL нажат Бит 1 0x02 LEFT SHIFT нажат Бит 0 0x01 RIGHT SHIFT нажат
Переносимость bioskey поддерживается только на компьютерах IBM PC или совместимых с ними.
Пример:
#include
#include
#include
#define RIGHT 0x0001 #define LEFT 0x0002 #define CTRL 0x0004 #define ALT 0x0008
int main(void) { int key, modifiers;
/* Функция 1 возвращает 0, пока не будет нажата клавиша. Ожидание ввода. */; /* now use function 0 to get return value of while (bioskey(1) == 0);
/* Теперь используем функцию 0, чтобы получить значение клавиши */ key = bioskey(0);
/* Используем функцию 2, чтобы определить, используются ли клавиши типа SHIFT */. modifiers = bioskey(2); if (modifiers) { printf("["); if (modifiers & RIGHT) printf("RIGHT "); if (modifiers & LEFT ) printf("LEFT "); if (modifiers & CTRL ) printf("CTRL "); if (modifiers & ALT ) printf("ALT "); printf("] "); } /* вывести символ нажатой клавишу */ if (isalnum(key & 0xFF)) printf("'%c'\n",key); else printf("%#02x\n",key); }
Результат Key Pressed was: [LEFT] 'T'
Biosmemo
biosmemory
Функция Возвращает размер оперативной памяти.
Синтаксис #include
int biosmemory(void);
Файл,содержащий bios.h прототип
Описание biosmemory при помощи прерывания BIOS 0x12 получает значение, равное размеру оперативной па- мяти. Это значение не включает видео-память, рас- ширенную память или дополнительную память.
Возвращаемое biosmemory возвращает размер оперативной памяти значение в блоках по 1К.
Переносимость biosmemory поддерживается только на компьютерах IBM PC или совместимых с ними.
Пример:
#include
#include
int main(void) { int memory_size; memory_size = biosmemory(); /* возвращает до 640К */ printf("Оперативная память: %dK\n",memory_size); return 0; }
Biosprin
biosprint
Функция Ввод/вывод на принтер при помощи BIOS.
Синтаксис #include
Файл, содержащий bios.h прототип
Описание biosprint выполняет различные операции с принтером, определяемым аргументом port, при по- мощи прерывания BIOS 0x17,
Значение аргумента port = 0 соответствует LPT1; port = 1 соответствует LPT2 и т.д..
Значение аргумента cmd может быть одним из следу- ющих: 0 печать символа, содержащегося в abyte 1 инициализация порта принтера 2 считывание статуса принтера Значение аргумента abyte может быть пре- делах от 0 до 255.
Возвращаемое Значение, возвращаемое функцией biosprint в любой значение из описанных выше операций, представляет собой статус принтера, получаемый посредством операции "ИЛИ" со следующими битовыми значениями: Бит 0 0x01 Таймаут устройства; Бит 3 0x08 Ошибка ввода/вывода Бит 4 0x10 Включено; Бит 5 0x20 Конец бумаги; Бит 6 0x40 Подтверждение приема; Бит 7 0x80 Не занято.
Переносимость biosprint поддерживается только на компьютерах IBM PC или совместимых с ними.
Пример:
#include
#include
#include
int main(void) { #define STATUS 2 /* команда получить статус принтера */ #define PORTNUM 0 /* LPT1 */
int status,abyte = 0;
printf("Пожалуйста, выключите принтер. Для продолжения нажмите любую клавишу\n"); getch(); status = biosprint(STATUS,abute,PORTNUM); if(status & 0x01) printf("Таймаут устройства\n"); if(status & 0x08) printf("Ошибка ввода/вывода\n"); if(status & 0x10) printf("Включено\n"); if(status & 0x20) printf("Конец бумаги\n"); if(status & 0x40) printf("Подтверждение приема\n"); if(status & 0x80) printf("Не занято\n"); return 0; }
Biostime
biostime
Функция Считывание или установка таймера BIOS.
Синтаксис #include
long biostime(int cmd, long newtime);
Файл, содержащий bios.h прототип
Описание biostime либо считывает, либо устанавливает таймер BIOS. Этот таймер считывает время, прошед- шее с полуночи, в тиках (приблизительно в 18.2 тика в секунду). biostime использует прерывание BIOS 0x1A.
Если аргумент cmd = 0, biostime возвращает теку- щее значение таймера. При cmd = 1 значение тайме- ра устанавливается в аргументе newtime с типом long.
Возвращаемое Когда функция biostime работает в режиме чтения значение таймера BIOS (cmd = 0), то возвращаемое значение представляет собой текущее значение таймера.
Переносимость biostime поддерживается только на компьютерах IBM PC или совместимых с ними.
Пример:
#include
#include
#include
int main(void) { long bios_time; clrscr(); cprintf("Число тиков, с полуночи:\r\n"); cprintf("Число секунд, с полуночи:\r\n"); cprintf("Число минут, с полуночи:\r\n"); cprintf("Число часов, с полуночи:\r\n"); cprintf("\r\nДля выхода нажмите любую клавишу"); while(!kbhit()) { bios_time = biostime(0L); gotoxy(50,1); cprintf("%lu",bios_time); gotoxy(50,2); cprintf("%lu",bios_time/CLK_TCK); gotoxy(50,3); cprintf("%lu",bios_time/CLK_TCK/60); gotoxy(50,4); cprintf("%lu",bios_time/CLK_TCK/3600); } return(0); }
Brk
brk
Функция Изменяет размещение сегмента данных в памяти.
Синтаксис #include
char *sbrk(int incr);
Файл, содержащий alloc.h прототип
Описание Функция sbrk добавляет к завершающему значению incr байт, и соответственно выделяет память. incr может быть и отрицательным, в этом случае объем выделенной памяти уменьшается.
В случае если для выделения памяти недостаточно свободного места, sbrk завершается по ошибке и не производит никаких действий.
Возвращаемое При успешном завершении sbrk возвращает старое значение значение. При ошибке, sbrk возвращает -1 и гло- бальной переменной errno присваивает значение:
ENOMEM - Недостаточно памяти.
Переносимость sbrk доступна в системах UNIX.
Смотрите также
Пример:
#include
#include
int main(void) { printf("Изменение выделенного объема памяти с помощью sbrk\n"); printf("Перед вызовом sbrk свободны %lu байт.\n", (unsigned long)coreleft()); sbrk(1000); printf("После вызова sbrk свободны %lu байт.\n", (unsigned long)coreleft()); return 0; }
Bsearch
bsearch
Функция Двоичный поиск в массиве.
Синтаксис #include
void * bsearch(const void * key, const void * base, size_t nelem, size_t width, int (*fcmp) (const void *, const void *));
Файл, содержащий stdlib.h прототип
Описание bsearch осуществляет поиск по таблице (массиву) из элементов nelem и возвращает адрес первого элемента в таблице, который соответствует шаблону поиска. Если соответствие не найдено, то bsearch возвращает значение, равное 0.
Тип size_t определяется как unsigned int.
- nelem задает количество элементов таблицы; - width задает количество байтов в каждом элементе таблицы.
Функция сравнения fcmp вызывается с двумя аргу- ментами: elem1 и elem2. Каждый аргумент указывает на сравниваемый элемент. Функция сравнения срав- нивает элементы, адресуемые указателями (*elem1 и *elem2) и возвращает целое значение, зависящее от результатов сравнения.
Для bsearch *fcmp возвращает следующее значение: < 0 *elem1 < *elem2 ==0 *elem1 == *elem2 > 0 *elem1 > *elem2
Возвращаемое bsearch возвращает адрес первого элемента таблицы, значение соответствующего ключу поиска. Если такого соот- ветствия не найдено, то возвращается значение, равное 0.
Переносимость Поддерживается в системах UNIX и определена в ANSI C.
Смотрите также
Пример:
#include
#include
#define NELEMS(arr) (sizeof(arr) / sizeoff(arr[0])) int numarray[] = {123, 145, 512, 627, 800, 993}; int numeric(int *pl, int *p2) { return(*p1 - *p2); } int lookup(int key) { int *itemptr; /* явное преобразование необходимо для исключения ошибки несовпадения типов, воз- никающей во время компиляции */ itemptr = bsearch(&key, numarray, NELEMS(numarray), sizeof(int), (int (*)(const void *,const void *))numeric); return (itemptr != NULL); } int main(void) { if(lookup(512)) printf("В таблице есть элемент 512\n"); else printf("В таблице нет элемента 512\n"); return 0; }