تعریف کلیدهای صفحه کلید برای طراحی منوها
#include<dos.h>
#include<graphics.h>
#include<stdlib.h>
#include <stdio.h>
#include <conio.h>
#define CLEAR "\x1B[2J"
#define GOLEFT "\x1B[D"
#define GORIGHT "\x1B[C"
#define GOUP "\x1B[A"
#define GODOWN "\x1B[B"
#define TOPSCREEN "\x1B[1;1f"
#define ENDSCREEN "\x1B[25;80f"
#define DRAW *(farptr+(wherey()-1)*80+wherex()-1)
char leftup =218,horizental=196,rightup=191,
leftdown=192 , rightdown =217 ,downup =193 ,updown=194,
leftright=195 , rightleft=180 , central=197,vertical =179;
int attribute=0x0700;
FILE *fp;
void main()
{
/*******************************************************/
void setline(void);
void setblink(void);
void setintensity(void);
void setforeground(int);
void setbackground(int);
void clearscreen(void);
void savescreen(char[]);
void loadscreen(char[]);
void helpuser(void);
/*********************************************/
unsigned c1,c2;
int far *farptr;
farptr= (int far *)0xb8000000;
printf(CLEAR);
while ((c1=getch())!=3)
{
if(c1==0)
{
c2=getch();
switch(c2)
{
case 68:setline(); //setline style
break; // F10
case 133:setblink(); //set blink
break; //F11
case 134:setintensity(); //setintensity
break; //F12
/*******************************************************/
case 104: /* ALT,F1 */
case 105: /* ALT,F2 */
case 106: /* ALT,F3 */
case 107: /* ALT,F4 */
case 108: /* ALT,F5 */
case 109: /* ALT,F6 */
case 110: /* ALT,F7 */
case 111: /* ALT,F8 */
setforeground(c2);
break; //setforeground color
/*******************************************************/
case 94: /* CRL,F1 */
case 95: /* CRL,F2 */
case 96: /* CRL,F3 */
case 97: /* CRL,F4 */
case 98: /* CRL,F5 */
case 99: /* CRL,F6 */
case 100: /* CRL,F7 */
case 101: /* CRL,F8 */
setbackground(c2);
break; //setbackground color
/*******************************************************/
case 67:clearscreen();break; //clearscreen
case 71:gotoxy(1,wherey());break; //HOME
case 79:gotoxy(80,wherey());break; //END
case 73:gotoxy(wherex(),1);break; //page up
case 81:gotoxy(wherex(),25);break; //page down
case 119:printf(TOPSCREEN);break; //CRL+HOME
case 117:printf(ENDSCREEN);break; //CRL+END
case 75:printf(GOLEFT);break; //LEFT ARR
case 77:printf(GORIGHT);break; //RIGHT ARR
case 72:printf(GOUP);break; //UP ARR
case 80:printf(GODOWN);break; //DOWN ARR
case 155:printf(GOLEFT);DRAW=horizental|attribute;
break; //ALT,LEFT ARR
case 157:printf(GORIGHT);DRAW=horizental|attribute;
break; //ALT,RIGHT ARR
case 152:DRAW=vertical|attribute;printf(GOUP);
break; //ALT,UP ARR
case 160:DRAW=vertical|attribute;printf(GODOWN);
break; //ALT,DOWN ARR
/*************************************************/
case 63:DRAW=leftup|attribute;
break; //F5
case 64:DRAW=rightup|attribute;
break; //F6
case 65:DRAW=rightdown|attribute;
break; //F7
case 66:DRAW=leftdown|attribute;
break; //F8
case 22:DRAW=updown|attribute;
break; //ALT +U
case 32:DRAW=downup|attribute;
break; //ALT +D
case 38:DRAW=leftright|attribute;
break; //ALT+L
case 19:DRAW=rightleft|attribute;
break; //ALT+R
case 46:DRAW=central|attribute;
break; //ALT+C
case 83:delline();
break; //ERASE LEFT CURSOR
case 82:insline();
break; //INSERT
/***********************************************/
case 60:savescreen("screen.txt");
break; // F2 save screen
case 61:loadscreen("screen.txt");
break; // F3 load screen
case 62:savescreen("screen.txt");
printf(CLEAR);
exit(1);
//break; // F4 save and exit
case 59:helpuser(); //F1
break;
}
}
else
{
switch(c1)
{
/*************************************************/
case 27:printf(CLEAR);continue; //ESC
case 8:printf(GOLEFT);DRAW=0x20|attribute;break; //back space
case 13:gotoxy(1,wherey()+1);break; //enter
default:
{
*(farptr+(wherey()-1)*80+wherex()-1)=c1|attribute;
printf(GORIGHT);
}
}
}
}
}
/***********************************************/
void setline(void)
{
switch(horizental)
{
case 196:
leftup=201;
horizental=205;
rightup=187;
leftdown=200;
rightdown=188;
downup=202;
updown=203;
leftright=204;
rightleft=185;
central=206;
vertical=186;
break;
/****************************************************
* *
* *
***********************************************/
case 205:
leftup=176;
horizental=176;
rightup=176;
leftdown=176;
rightdown=176;
downup=176;
updown=176;
leftright=176;
rightleft=176;
central=176;
vertical=176;
break;
/*********************************************/
case 176:
leftup=177;
horizental=177;
rightup=177;
leftdown=177;
rightdown=177;
downup=177;
updown=177;
leftright=177;
rightleft=177;
central=177;
vertical=177;
break;
/***********************************************/
case 177:
leftup=178;
horizental=178;
rightup=178;
leftdown=178;
rightdown=178;
downup=178;
updown=178;
leftright=178;
rightleft=178;
central=178;
vertical=178;
break;
/*************************************************/
case 178:
leftup=219;
horizental=219;
rightup=219;
leftdown=219;
rightdown=219;
downup=219;
updown=219;
leftright=219;
rightleft=219;
central=219;
vertical=219;
break;
/**************************************************/
case 219:
leftup=220;
horizental=220;
rightup=220;
leftdown=220;
rightdown=220;
downup=220;
updown=220;
leftright=220;
rightleft=220;
central=220;
vertical=220;
break;
/*******************************************/
case 220:
leftup=221;
horizental=221;
rightup=221;
leftdown=221;
rightdown=221;
downup=221;
updown=221;
leftright=221;
rightleft=221;
central=221;
vertical=221;
break;
/********************************************/
case 221:
leftup=222;
horizental=222;
rightup=222;
leftdown=222;
rightdown=222;
downup=222;
updown=222;
leftright=222;
rightleft=222;
central=222;
vertical=222;
break;
/*********************************************/
case 222:
leftup=223;
horizental=223;
rightup=223;
leftdown=223;
rightdown=223;
downup=223;
updown=223;
leftright=223;
rightleft=223;
central=223;
vertical=223;
break;
/**********************************************/
case 223:
leftup=254;
horizental=254;
rightup=254;
leftdown=254;
rightdown=254;
downup=254;
updown=254;
leftright=254;
rightleft=254;
central=254;
vertical=254;
break;
/**********************************************/
case 254:
leftup=218;
horizental=196;
rightup=191;
leftdown=192;
rightdown=217;
downup=193;
updown=194;
leftright=195;
rightleft=180;
central=197;
vertical=179;
break;
}
}
/*---------------------------------------------------------------------*/
void setblink(void)
{
attribute=attribute^0x8000;
}
void setintensity(void)
{
attribute=attribute^0x800;
}
void setforground(char x)
{
switch(x)
{
case 104:attribute=attribute &0xf800;break;
case 105:attribute=attribute &0xf800;attribute=attribute|0x0100;break;
case 106:attribute=attribute &0xf800;attribute=attribute|0x0200;break;
case 107:attribute=attribute &0xf800;attribute=attribute|0x0300;break;
case 108:attribute=attribute &0xf800;attribute=attribute|0x0400;break;
case 109:attribute=attribute &0xf800;attribute=attribute|0x0500;break;
case 110:attribute=attribute &0xf800;attribute=attribute|0x0600;break;
case 111:attribute=attribute &0xf800;attribute=attribute|0x0700;break;
}
}
/************************************************/
void setbackground(char x)
{
switch(x)
{
case 94:attribute=attribute &0xf800;break;
case 95:attribute=attribute &0xf800;attribute=attribute|0x01000;break;
case 96:attribute=attribute &0xf800;attribute=attribute|0x02000;break;
case 97:attribute=attribute &0xf800;attribute=attribute|0x03000;break;
case 98:attribute=attribute &0xf800;attribute=attribute|0x04000;break;
case 99:attribute=attribute &0xf800;attribute=attribute|0x05000;break;
case 100:attribute=attribute &0xf800;attribute=attribute|0x06000;break;
case 101:attribute=attribute &0xf800;attribute=attribute|0x07000;break;
}
}
/*************************************************/
void clearscreen(void)
{
int addr;
int far *farptr;
farptr=(int far*)0xB8000000;
if((fp=fopen (filename,"w"))==NULL)
{
printf("CAN NOT OPEN FILE screen.txt FOR SAVE SCREEN");
return;
}
for(addr=0;addr<2000;addr++)
*(farptr+addr)=getw(fp);
fclose(fp);
}
/************************************************/
void helpuser(void){
char c1,c2;
int pagenumber=1;
savescreen("temp.txt");
loadscreen("help1.txt");
while((c1=getch())!=27)
{
if(c1==0)
{
c2=getch();
switch(c2)
{
case 73:
switch(pagenumber)
{
case 2:
pagenumber=1;loadscreen("help1.txt");break;
case 3:
pagenumber=2;loadscreen("help2.txt");break;
case 4:
pagenumber=3;loadscreen("help3.txt");break;
case 5:
pagenumber=4;loadscreen("help4.txt");break;
}
break;
case 81:
switch(pagenumber)
{
case 1:
pagenumber=2;
loadscreen("help2.txt");
break;
case 2:
pagenumber=3;
loadscreen("help3.txt");
break;
case 3:
pagenumber=4;
loadscreen("help4.txt");
break;
case 4:
pagenumber=5;
loadscreen("help5.txt");
break;
}
break;
}
}
}
loadscreen("temp.txt");
return;
}
/*************************************************/
/* end */