Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Просмотр списка драйверов

66K
19 декабря 2011 года
swatkiev
8 / / 08.03.2011
Доброго времени суток! Есть код программки, которая должна выводить список драйверов, но при компиляции в Turbo C/Borland C выдает 4 ошибки. Подскажите пожалуйста, как их можно исправить или же посоветуйте какой-нибудь другой код? Спасибо!
Цитата:
#include <dos.h>
#include <conio.h>
/*-----------------------Константы----------------------- */
#define byte unsigned char
#define word unsigned int
#define ATR(x,z) if(drv->attr&x){cprintf(" %s\n\r",z);y++;}
#define DA(x,y) (struct DR_HEAD *)MK_FP(x,y);
#define VSEG 0xb800 /* Сегментный адрес видеопамяти */
#define byte unsigned char
#define word unsigned int
#define Enter 13
#define rx 50
#define ry 13

int xk,yk;
word cc;
byte bm[rx][ry][2];
8struct DR_HEAD { /* заголовок драйвера */
struct DR_HEAD *next;
word attr, strat_addr, intr_addr;
char name[8];
} *drv; /* адрес текущего драйвера */
struct DR_HEAD *clock, *con; /* Адреса CLOCK$ и CON */
union REGS rr;
struct SREGS sr;
int i, y, y1;

/*---------------------------------------------------*/
void clrbuf(void)
{
while(kbhit()) getch();
}
/*--------------Чтение символа из видеопамяти-------------*/
byte GetSym(x1,y1)
int x1,y1;
{
return(peekb(VSEG,y1*160+x1*2));
}
/*-------------Чтение атрибута из видеопамяти-------------*/
byte GetAtr(x1,y1)
int x1,y1;
{
return(peekb(VSEG,y1*160+x1*2+1));
}
/*-------------Запись символа в видеопамять---------------*/
void PutSym(x1,y1,sym)
int x1,y1;
byte sym;
{
pokeb(VSEG,y1*160+x1*2,sym);
}
/*-------------Запись атрибута в видеопамять--------------*/
void PutAtr(x1,y1,atr)
8int x1,y1;
byte atr;
{
pokeb(VSEG,y1*160+x1*2+1,atr);
}
/*--------------------------------------------------------*/
void MemW(x,y,xr,yr)
int x,y,xr,yr;
{
int i,j;
for (j=y;j<(y+yr);j++)
for (i=x;i<(x+xr);i++)
{
bm[j][0]=GetSym(i,j);
bm[j][1]=GetAtr(i,j);
}
}
/*--------------------------------------------------------*/
void RmmW(x,y,xr,yr)
int x,y,xr,yr;
{
int i,j;
for (j=y;j<(y+yr);j++)
for (i=x;i<(x+xr);i++)
{
PutSym(i,j,bm[j][0]);
PutAtr(i,j,bm[j][1]);
}
}
/*--------------------------------------------------------*/
void ClrW(x1,y1,x2,y2,s,a)
int x1,y1,x2,y2;
byte s,a;
{
int i,j;
for (j=y1;j<y2;j++)
for (i=x1;i<x2;i++)
{
if (s!=0) PutSym(i,j,s);
PutAtr(i,j,a);
}
}
/*--------------------------------------------------------*/
void FlDrv(void)
{
int xm,ym;
xm=wherex();
ym=wherey();
MemW(0,1,rx,ry);
ClrW(1,2,rx,ry,0,7);
ClrW(0,1,rx-2,ry-2,32,16);
gotoxy(1,2);
textattr(15+16*3);
cprintf("*** Атрибуты драйвера %5u ***",cc);
gotoxy(1,3);
textattr(15+16);
if (drv==clock) cprintf(" активный CLOCK$");
if (drv==con) cprintf(" активный CON");
gotoxy(1,4);
textattr(14+16);
if (drv->attr&0x8000)
{
ATR(1,"консоль ввода")
ATR(2,"консоль вывода")
ATR(4,"нулевое устройство")
ATR(8,"CLOCK$ (часы)")
ATR(0x2000,"поддерживает OUB")
}
else
{
ATR(2,"32-байтный адрес сектора")
ATR(0x2000,"читает media FAT")
}
ATR(0x40,"поддерживает функции DOS 3.2")
ATR(0x800,"поддерживает Open/Close")
ATR(0x4000,"поддерживает IOCTL")
gotoxy(1,12);
textattr(15+16*3+128);
cprintf("*** Нажмите любую клавишу... ***");
if (getch()==0) getch();
RmmW(0,1,rx,ry);
gotoxy(xm,ym);

}
/*--------------------------------------------------------*/
main() {
int c;
/* получение адреса CVT */
rr.h.ah=0x52; intdosx(&rr,&rr,&sr);
/* адрес драйвера часов */
clock=DA(peek(sr.es,rr.x.bx+10),peek(sr.es,rr.x.bx+8));
/* адрес драйвера консоли */
con=DA(peek(sr.es,rr.x.bx+14),peek(sr.es,rr.x.bx+12));
/* адрес NUL-драйвера */
textattr(10);
clrscr();
cprintf("---------------");
cprintf(" Лабораторная работа N11 ");
cprintf("---------------");
cprintf("---------------");
cprintf(" Просмотр списка драйверов. ");
cprintf("---------------");

drv=DA(sr.es,rr.x.bx+34);
textattr(7);
gotoxy(8,3);
cprintf("Нажимайте <SpaceBar> ,а для рассмотрения атрибутов",
"драйвера <Enter>.");
textattr(12);
gotoxy(28,4);
cc=1;
cprintf("Список драйверов устройств :\n\r");
while(FP_OFF(drv)!=0xffff) {
textattr(15);
cprintf("%5u",cc);
textattr(14);
cprintf(" Адрес - %Fp ",drv);
textattr(11);
cprintf(" атрибуты - %04X ",drv->attr);
textattr(13);
if (drv->attr&0x8000)
for (i=0;i<8; cprintf("%c",drv->name[i++]));
else cprintf("блочный - %d",drv->name[0]);
cprintf("\n\r"); y=0;
while ((c=getch())==Enter)FlDrv();
if (c==0) getch();
drv=drv->next; /* адрес след.драйвера */
cc++;
}
textattr(12+128);
cprintf("Конец списка. Нажмите любую клавишу...\n");
getch();
textattr(7);
}

14
19 декабря 2011 года
Phodopus
3.3K / / 19.06.2008
Эти 4 известнейших ошибки исправляются прямо в коде программы по месту их возникновения же!
66K
21 декабря 2011 года
swatkiev
8 / / 08.03.2011
Ну вроде ошибки исправил, но все равно создается только OBJ файл, а ЕХЕ не хочет создавать - Warning 8 раз выдает....
Цитата:
#include <dos.h>
#include <conio.h>
/*-----------------------Константы----------------------- */
#define byte unsigned char
#define word unsigned int
#define ATR(x,z) if(drv->attr&x){cprintf(" %s\n\r",z);y++;}
#define DA(x,y) (struct DR_HEAD *)MK_FP(x,y);
#define VSEG 0xb800 /* Сегментный адрес видеопамяти */
#define byte unsigned char
#define word unsigned int
#define Enter 13
#define rx 50
#define ry 13

int xk,yk;
word cc;
byte bm[rx][ry][2];
struct DR_HEAD { /* заголовок драйвера */
struct DR_HEAD *next;
word attr, strat_addr, intr_addr;
char name[8];
} *drv; /* адрес текущего драйвера */
struct DR_HEAD *clock, *con; /* Адреса CLOCK$ и CON */
union REGS rr;
struct SREGS sr;
int i, y, y1;

/*---------------------------------------------------*/
void clrbuf(void)
{
while(kbhit()) getch();
}
/*--------------Чтение символа из видеопамяти-------------*/
byte GetSym(x1,y1)
int x1,y1;
{
return(peekb(VSEG,y1*160+x1*2));
}
/*-------------Чтение атрибута из видеопамяти-------------*/
byte GetAtr(x1,y1)
int x1,y1;
{
return(peekb(VSEG,y1*160+x1*2+1));
}
/*-------------Запись символа в видеопамять---------------*/
void PutSym(x1,y1,sym)
int x1,y1;
byte sym;
{
pokeb(VSEG,y1*160+x1*2,sym);
}
/*-------------Запись атрибута в видеопамять--------------*/
void PutAtr(x1,y1,atr)
int x1,y1;
byte atr;
{
pokeb(VSEG,y1*160+x1*2+1,atr);
}
/*--------------------------------------------------------*/
void MemW(x,y,xr,yr)
int x,y,xr,yr;
{
int i,j;
for (j=y;j<(y+yr);j++)
for (i=x;i<(x+xr);i++)
{
bm[j][0]=GetSym(i,j);
bm[j][1]=GetAtr(i,j);
}
}
/*--------------------------------------------------------*/
void RmmW(x,y,xr,yr)
int x,y,xr,yr;
{
int i,j;
for (j=y;j<(y+yr);j++)
for (i=x;i<(x+xr);i++)
{
PutSym(i,j,bm[j][0]);
PutAtr(i,j,bm[j][1]);
}
}
/*--------------------------------------------------------*/
void ClrW(x1,y1,x2,y2,s,a)
int x1,y1,x2,y2;
byte s,a;
{
int i,j;
for (j=y1;j<y2;j++)
for (i=x1;i<x2;i++)
{
if (s!=0) PutSym(i,j,s);
PutAtr(i,j,a);
}
}
/*--------------------------------------------------------*/
void FlDrv(void)
{
int xm,ym;
xm=wherex();
ym=wherey();
MemW(0,1,rx,ry);
ClrW(1,2,rx,ry,0,7);
ClrW(0,1,rx-2,ry-2,32,16);
gotoxy(1,2);
textattr(15+16*3);
cprintf("*** Атрибуты драйвера %5u ***",cc);
gotoxy(1,3);
textattr(15+16);
if (drv==clock) cprintf(" активный CLOCK$");
if (drv==con) cprintf(" активный CON");
gotoxy(1,4);
textattr(14+16);
if (drv->attr&0x8000)
{
ATR(1,"консоль ввода")
ATR(2,"консоль вывода")
ATR(4,"нулевое устройство")
ATR(8,"CLOCK$ (часы)")
ATR(0x2000,"поддерживает OUB")
}
else
{
ATR(2,"32-байтный адрес сектора")
ATR(0x2000,"читает media FAT")
}
ATR(0x40,"поддерживает функции DOS 3.2")
ATR(0x800,"поддерживает Open/Close")
ATR(0x4000,"поддерживает IOCTL")
gotoxy(1,12);
textattr(15+16*3+128);
cprintf("*** Нажмите любую клавишу... ***");
if (getch()==0) getch();
RmmW(0,1,rx,ry);
gotoxy(xm,ym);

}
/*--------------------------------------------------------*/
main() {
int c;
/* получение адреса CVT */
rr.h.ah=0x52; intdosx(&rr,&rr,&sr);
/* адрес драйвера часов */
clock=DA(peek(sr.es,rr.x.bx+10),peek(sr.es,rr.x.bx+8));
/* адрес драйвера консоли */
con=DA(peek(sr.es,rr.x.bx+14),peek(sr.es,rr.x.bx+12));
/* адрес NUL-драйвера */
textattr(10);
clrscr();
cprintf("---------------");
cprintf(" Лабораторная работа N11 ");
cprintf("---------------");
cprintf("---------------");
cprintf(" Просмотр списка драйверов. ");
cprintf("---------------");

drv=DA(sr.es,rr.x.bx+34);
textattr(7);
gotoxy(8,3);
cprintf("Нажимайте <SpaceBar> ,а для рассмотрения атрибутов",
"драйвера <Enter>.");
textattr(12);
gotoxy(28,4);
cc=1;
cprintf("Список драйверов устройств :\n\r");
while(FP_OFF(drv)!=0xffff) {
textattr(15);
cprintf("%5u",cc);
textattr(14);
cprintf(" Адрес - %Fp ",drv);
textattr(11);
cprintf(" атрибуты - %04X ",drv->attr);
textattr(13);
if (drv->attr&0x8000)
for (i=0;i<8; cprintf("%c",drv->name[i++]));
else cprintf("блочный - %d",drv->name[0]);
cprintf("\n\r"); y=0;
while ((c=getch())==Enter)FlDrv();
if (c==0) getch();
drv=drv->next; /* адрес след.драйвера */
cc++;
}
textattr(12+128);
cprintf("Конец списка. Нажмите любую клавишу...\n");
getch();
textattr(7);
}

14
22 декабря 2011 года
Phodopus
3.3K / / 19.06.2008
Гм.. Вы, наверное, решите что я издеваюсь.. но ворнинги исправляются точно так же!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог