Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Министерство образования и науки, молодежи и спорта Украины
Донецкий национальный технический университет
Кафедра Компьютерной инженерии
Отчет
по курсу СПО
по лабораторной работе №6
Выполнил:
ст. гр. КС-11н
Супрунов М.Ю.
Проверила:
Чередникова О. Ю.
Донецк 2013
24. Разработать на компьютере программу, с поддержкой мыши
для графического режима дисплея. Программа должна обеспечить:
- Нормальное и аварийное завершение;
- Выдачу некоторых справочных данных
- По запросу пользователя определять характеристику типов Шин Передачи Данных и адреса имеющихся последовательных и параллельных портов.
2.Листинг программы
#include<dos.h>
#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<graphics.h>
#define CONFADD 0x0CF8
#define CONFDATA 0x0CFC
const int w = 250;
int h = 40;
int x0 = 400;
int y0 = 400;
int x1 = 100;
int y1 = 100;
int x2 = 300;
int y2 = 150;
int x3 = 100;
int y3 = 200;
int xr = 300;
int yr = 250;
int ar = 200;
//-------------------------
typedef struct _MOUSE_STATE_ {
unsigned int bottoms;
unsigned int x;
unsigned int y;
} MOUSE_STATE;
//-------------------------
union REGS r;
//-------------------------
int buses() {
int i,j,k, vendor, device;
unsigned char class1, subclass1;
for (i=0; i<256; i++) { //bus
for (j=0; j<32; j++) { //device
k = j*8;
asm {
mov eax, 0
mov al, 0x80
shl eax, 8
mov al, i
shl eax, 8
mov al, k
shl eax, 8
mov al, 0
mov dx, CONFADD
out dx, eax
mov dx, CONFDATA
in eax, dx
mov vendor, ax
shr eax, 16
mov device, ax
}
if (vendor!=0xFFFF && device!=0xFFFF) {
asm {
mov eax, 0
mov ah, 0x80
// shl eax, 8
mov al, i
shl eax, 16
mov ah, k
// shl eax, 8
mov al, 8
mov dx, CONFADD
out dx, eax
mov dx, CONFDATA
in ax, dx
mov class1, al
// shr eax, 16
mov subclass1, ah
}
// decription
printf("\nBus: %d;",i);
printf("\tDevice: %d;", j);
printf("\tType: ");
printf("0x%X (", class1);
switch(class1) {
case 1:printf("SCSI Mass Storage Controller"); break;
case 2:printf("Network Card"); break;
case 3:printf("Vga Display Adapter"); break;
case 6: switch (subclass1) {
case 0: printf("Host Processor Bridge"); break;
case 1: printf("PCI to ISA Bridge"); break;
case 4: printf("PCI to PCI Bridge"); break;
} break;
default: printf("unknown type");
}
printf(");\n");
printf("Vendor: ");
printf("0x%X (", vendor);
switch(vendor) {
case 0x1023: printf("Trident"); break;
case 0x104C: printf("Texas Instruments"); break;
case 0x11F6: printf("Compex"); break;
case 0x5553: printf("S3"); break;
case 0x8086: printf("Intel"); break;
default: printf("unknown vendor");
}
printf(");");
printf("\tName: ");
printf("0x%X (", device);
switch(device) {
case 0x0194: printf("82C194 PCI to PCMCIA Controller"); break;
case 0x0598: printf("TMS380C2X Compressor Inreface"); break;
case 0x0112: printf("ReadyLink ENET100-VG4 Ethernet Adapter"); break;
case 0x5631: printf("325 ViRGE GUI Accelerator"); break;
case 0x0122: printf("82437FX Triton FX Chipset, Pentium to PCI Bridge"); break;
default: printf("unknown name");
}
printf(")\n\n");
}
}
}
return 0;
};
//--------------
int ports() {
printf("\n Адреса COM портов:\n");
printf(" COM1: 0x%X \n", peek(0x0040, 0x0000));
printf(" COM2: 0x%X \n", peek(0x0040, 0x0002));
printf(" COM3: 0x%X \n", peek(0x0040, 0x0004));
printf(" COM4: 0x%X \n\n", peek(0x0040, 0x0006));
printf(" Адреса LPT портов:\n");
printf(" LPT1: 0x%X \n", peek(0x0040, 0x0008));
printf(" LPT2: 0x%X \n", peek(0x0040, 0x000A));
printf(" LPT3: 0x%X \n", peek(0x0040, 0x000C));
printf(" LPT4: 0x%X \n", peek(0x0040, 0x000E));
}
//---------------
int init_gr() {
int gd, gm, err;
gd = VGA;
gm = VGAHI;
initgraph(&gd, &gm, "");
err = graphresult();
if (err!=grOk) {
printf("Graphic mode initialization error: %s", grapherrormsg(err));
getch(); exit(1);
}
}
//-------------------------
int button(int x, int y, int width, int height,
char* line1, char* line2) {
setcolor(15);
setfillstyle(1,15);
bar(x, y, x+width, y+height);
setcolor(1);
outtextxy(x+15, y+5, line1);
outtextxy(x+15, y+15, line2);
return 0;
}
//---------------------------
int button1(int x, int y, int width, int height,
char* line1, char* line2) {
setcolor(15);
setfillstyle(1,LIGHTGRAY);
bar(x, y, x+width, y+height);
setcolor(1);
outtextxy(x+16, y+6, line1);
outtextxy(x+16, y+16, line2);
return 0;
}
//---------------------------
int stat(int x, int y, int t) {
gotoxy(70,1); printf("X: %u \n", x);
gotoxy(70,2); printf("Y: %u \n", y);
gotoxy(70,3);
printf("B: ");
if (t&1) printf("L"); else printf(" ");
if (t&2) printf("R"); else printf(" ");
return 0;
}
//-------------------------
int mouse_init(int *nbottoms) {
r.x.ax = 0;
int86(0x33, &r, &r);
*nbottoms = r.x.bx;
return r.x.ax;
}
//-------------------------
int mouse_escape() {
r.x.ax = 0x0021;
int86(0x33, &r, &r);
}
//-------------------------
int mouse_show() {
r.x.ax = 1;
int86(0x33, &r, &r);
}
//-------------------------
int mouse_hide() {
r.x.ax = 2;
int86(0x33, &r, &r);
}
//-------------------------
int mouse_query(MOUSE_STATE *state, int bottom) {
r.x.ax = 0x0003;
r.x.bx = bottom;
int86(0x33, &r, &r);
state->bottoms = r.x.bx&0x0003;
state->x = r.x.cx;
state->y = r.x.dx;
return (state->bottoms);
}
//-------------------------
int mouse_setcurpos(int x, int y) {
r.x.ax = 4;
r.x.cx = x*8;
r.x.dx = y*8;
int86(0x33, &r, &r);
}
//-------------------------
int main(void) {
int botm, x, y, t, mode=2,i;
char Flag=1;
MOUSE_STATE *st;
clrscr();
if (!mouse_init(&botm)) {
printf("MOUSE driver not found!");
return 0;
}
mouse_escape();
mouse_setcurpos(1,1);
init_gr();
mouse_show();
for (;;) {
t = mouse_query(st, botm);
stat(st->x, st->y, t);
x = st->x;
y = st->y;
if (mode==0) { //buses
if (Flag) {
clrscr();
cleardevice();
mouse_show();
buses();
button(x0,y0,w,h,"Возврат в ", " меню");
Flag = 0;
}
if ((x>x0)&&(x<(x0+w))&&(y>y0)&&(y<(y0+h))&&(t&1)) {
mouse_hide();
mode = 2;
Flag = 1;
}
}
//************************
if (mode==1) { //ports
if (Flag) {
clrscr();
cleardevice();
mouse_show();
ports();
button(x0,y0,w,h,"Возврат в ", " меню");
Flag = 0;
}
if ((x>x0)&&(x<(x0+w))&&(y>y0)&&(y<(y0+h))&&(t&1)) {
mouse_hide();
mode = 2;
Flag = 1;
}
}
//********************
if (mode==2) { // menu
if (Flag) {
setbkcolor(8);
cleardevice();
mouse_show();
setcolor(RED);
line(0,80,80,0); line(0,90,90,0); line(0,100,100,0); line(0,110,110,0); line(0,120,120,0); line(0,130,130,0); line(0,140,140,0);
line(0,150,150,0); line(0,160,160,0); line(0,160,160,0); line(0,170,170,0); line(0,180,180,0); line(0,190,190,0); line(0,200,200,0);
setcolor(DARKGRAY);
button(x1,y1,w,h," Характеристика шин", "передачи данных");
button(x2,y2,w,h," Адреса COM", "и LPT портов");
button(x3,y3,w,h," Выход", "");
setcolor(0);
setfillstyle(1,4);// \
bar(xr, yr, xr+w, yr+h); // | Кнопка аварийного завершения
setcolor(0);// |
outtextxy(xr+15, yr+10, "Аварийное завершение");// /
Flag = 0;
}
if ((x>x1)&&(x<(x1+w))&&(y>y1)&&(y<(y1+h))&&(t&1)) {
mouse_hide();
mode = 0;
Flag = 1;
button1(x1,y1,w,h," Характеристика шин", "передачи данных");
delay(250);
}
if ((x>x2)&&(x<(x2+w))&&(y>y2)&&(y<(y2+h))&&(t&1)) {
mouse_hide();
mode = 1;
Flag = 1;
button1(x2,y2,w,h," Адреса COM", "и LPT портов");
delay(250);
}
if ((x>x3)&&(x<(x3+w))&&(y>y3)&&(y<(y3+h))&&(t&1))
{button1(x3,y3,w,h," Выход", "");
delay(300);
break;}
if ((x>xr)&&(x<(xr+w))&&(y>yr)&&(y<(yr+h))) exit(1);
}
}
mouse_hide();
closegraph();
return 0;}