📄 gmenucn.c
字号:
/*DOS环境下,Turbo C2.0*/
/*已调试无错,可套用*/
#include<bios.h>
#include<alloc.h>
#include<stdio.h>
#include<conio.h>
#include<fcntl.h>
#include<graphics.h>
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
#define ESC 27
#define F1 59
#define ENTER 13
#define ALT_X 45
#define SPACE 32
#define MAX_FRAME 5
#define Word unsigned int
#define Byte unsigned char
void Main_Frame(),pull_menu(),dis_menu();
void help();
void keybuffer();
int out16hz(),HzConvert();
int handle;
void *buffer;
void *branch_buf;
struct menu_frame
{
int startx,starty;
int count;
char *content[5];
void *p;
}frame[MAX_FRAME]=
{
{109,34,5,{"输入文件","选择文件","文件输出","文件转换","删除文件"},},
{215,34,4,{"工作目录","界面","文件格式","默认设置"},},
{321,34,4,{"整本冲","部分冲","单纬","前后造"},},
{427,34,5,{"一隔一","反一隔一","二隔二","空走","满孔"},},
{533,34,2,{"退出","放弃"},},
};
char *menu0[]={"提示帮助","文件操作","机器设置","选择任务","机器调试","退出系统"};
char *bottom[]={"帮助","移动光条","选择","返回","退出"};
int _key;
int select;
int flag16;
void WelcomeU()
{
int maxx, maxy;
char pattern[8] = {0x00,0x70,0x10,0x2e,0x72,0x04,0x0e,0x00};
maxx = getmaxx();
maxy = getmaxy();
setbkcolor(1);
setfillpattern(pattern, getmaxcolor()-1);
bar(0, 0, maxx, maxy);
sleep(3);
}
void InitGraph()
{
int Driver=DETECT,Mode;
int errorcode;
registerbgidriver(EGAVGA_driver);
initgraph(&Driver,&Mode,"c:\\turbo");
errorcode=graphresult();
if(errorcode!=grOk)
{
printf("Graphics error:%s\n",grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
closegraph();
exit(0);
}
WelcomeU();
cleardevice();
}
void LoadMainFrame()
{
register int i;
int x;
setbkcolor(7);
rectangle(0,0,639,33);
rectangle(0,35,639,425);
line(0,36,639,36);
/*setcolor(2);
rectangle(100,100,540,280);*/
flag16=open("c:\\turbo\\hzk16",O_RDWR|O_BINARY);
if(flag16==-1)
{
printf("Cannot Open HZK16\n");
exit(1);
}
x=2;
for(i=0;i<=5;i++)
x=out16hz(36+x,8,0,9,menu0[i]);
close(handle);
}
void dispstatusbar()
{
int leftarrow[12]={126,432,120,438,120,438,126,444,120,438,136,438},
rightarrow[12]={140,438,156,438,156,438,150,432,156,438,150,444};
settextstyle(3,0,1);
outtextxy(20,427,"F1:");
out16hz(48,429,0,12,bottom[0]);
out16hz(204,429,3,12,bottom[1]);
drawpoly(6,leftarrow);
drawpoly(6,rightarrow);
outtextxy(195,427,":");
outtextxy(320,427,"Enter:");
out16hz(375,429,0,12,bottom[2]);
outtextxy(440,427,"Esc:");
out16hz(480,429,0,12,bottom[3]);
outtextxy(530,427,"ALT_X:");
out16hz(590,429,0,12,bottom[4]);
close(handle);
}
/* 主菜单管理,显示下拉菜单,执行子菜单 */
void FGoodBye();
void Main_Frame()
{
register int i;
int size;
int curx=3,menu_num;
size=imagesize(3,2,105,30);
if(size!=-1)
{
buffer=malloc(size);
if(buffer)
getimage(3,2,105,30,buffer);
putimage(3,2,buffer,NOT_PUT);
}
else
outtext("Out of memory!");
while((select=specialkey())!=ALT_X)
switch(select)
{
case F1:
help();
break;
case LEFT:
case RIGHT:
putimage(curx,2,buffer,COPY_PUT);
if(select==LEFT)
curx=curx<=3?3+106*5:curx-106;
else
curx=curx>=3+106*5?3:curx+106;
getimage(curx,2,curx+102,30,buffer);
putimage(curx,2,buffer,NOT_PUT);
break;
case ENTER:
case DOWN:
select=0;
menu_num=(curx-3)/106;
pull_menu(menu_num);
}
free(buffer);
}
void pull_menu(int oldnum)
{
switch(oldnum)
{
case 0:
help();
break;
default :
dis_menu(oldnum);
}
}
void dis_menu(int num)
{
register int i;
int x0,y0,xx,size;
int cury,c_num;
int key,key1;
x0=frame[num-1].startx;
y0=frame[num-1].starty;
rectangle(x0,y0+1,x0+4*24+4,34+frame[num-1].count*18+10);
key=0;
for(i=0;i<frame[num-1].count||i<1;i++)
switch(num)
{
case 5:
out16hz(x0+20,y0+5+i*18,32,12,frame[num-1].content[i]);
xx=10;
break;
case 4:
out16hz(x0+10,y0+5+i*18,0,12,frame[num-1].content[i]);
xx=5;
break;
default :
out16hz(x0+20,y0+5+i*18,0,12,frame[num-1].content[i]);
xx=5;
}
size=imagesize(x0+xx,y0+4,x0+4*24-xx,y0+4+18);
if(size!=-1)
{
frame[num-1].p=malloc(size);
if(frame[num-1].p)
getimage(x0+xx,y0+4,x0+4*24-xx,y0+4+18,frame[num-1].p);
putimage(x0+xx,y0+4,frame[num-1].p,NOT_PUT);
}
else
printf("Out of memory!");
cury=y0+4;
do
{
key1=specialkey();
switch(key1)
{
case F1:
help();
break;
case ESC:
size=imagesize(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10);
if(size!=-1)
{
branch_buf=malloc(size);
if(branch_buf)
getimage(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10,branch_buf);
}
else
outtext("Out of memory!");
putimage(x0,y0+3,branch_buf,XOR_PUT);
free(frame[num-1].p);
free(branch_buf);
key=1;
break;
case ALT_X:
free(frame[num-1].p);
key=1;
keybuffer(0,45);
break;
case UP:
case DOWN:
putimage(x0+xx,cury,frame[num-1].p,COPY_PUT);
if(key1==UP)
cury=cury<=y0+4?y0+4+(frame[num-1].count-1)*18:cury-18;
else
cury=cury>=y0+4+(frame[num-1].count-1)*18?y0+4:cury+18;
getimage(x0+xx,cury,x0+4*24-xx,cury+18,frame[num-1].p);
putimage(x0+xx,cury,frame[num-1].p,NOT_PUT);
break;
case LEFT:
size=imagesize(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10);
if(size!=-1)
{
branch_buf=malloc(size);
if(branch_buf)
getimage(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10,branch_buf);
}
else
outtext("Out of memory!");
putimage(x0,y0+3,branch_buf,XOR_PUT);
free(frame[num-1].p);
free(branch_buf);
key=1;
keybuffer(0,75);
if(num!=1)
keybuffer(0,13);
break;
case RIGHT:
size=imagesize(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10);
if(size!=-1)
{
branch_buf=malloc(size);
if(branch_buf)
getimage(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10,branch_buf);
}
else
outtext("Out of memory!");
putimage(x0,y0+3,branch_buf,XOR_PUT);
free(frame[num-1].p);
free(branch_buf);
key=1;
keybuffer(0,77);
if(num<5)
keybuffer(0,13);
break;
case ENTER: /*-- _________________________________ --*/
c_num=(cury-(y0+4))/18;
switch(num)
{
case 1:/* file */
switch(c_num)
{
case 0:
outtextxy(100,110,"111");
/*FImport();*/
break;
case 1:
outtextxy(100,130,"122");
/*FSelect();*/
break;
case 2:
outtextxy(100,150,"133");
/*FExport();*/
break;
case 3:
outtextxy(100,170,"144");
/*FConvert();*/
break;
case 4:
outtextxy(100,190,"155");
/*FDelete();*/
break;
}
break;
case 2:/* config */
switch(c_num)
{
case 0:
outtextxy(130,110,"211");
/*CDirection();*/
break;
case 1:
outtextxy(130,110,"222");
/*CGUI();*/
break;
case 2:
outtextxy(130,110,"233");
/*CFFormat();*/
break;
case 3:
outtextxy(130,110,"244");
/*CDefault();*/
break;
}
break;
case 3:/*punch */
switch(c_num)
{
case 0:
outtextxy(160,110,"311");
/*PTotal();*/
if((_key=='y')||(_key=='Y'))
closegraph();
case 1:
outtextxy(100,130,"322");
/*PPart();*/
break;
case 2:
outtextxy(100,150,"333");
/*PSinWeft();*/
break;
case 3:
outtextxy(100,170,"344");
/*PHalf();*/
break;
}
break;
case 4:/*test */
switch(c_num)
{
case 0:
outtextxy(190,110,"411");
/*TAlter();*/
break;
case 1:
outtextxy(100,130,"422");
/*TAlterR();*/
break;
case 2:
outtextxy(100,150,"433");
/*TAlterBy2();*/
break;
case 3:
outtextxy(100,170,"444");
/*TNone();*/
break;
case 4:
outtextxy(100,190,"455");
/*TFull();*/
break;
}
break;
case 5:/*quit */
switch(c_num)
{
case 0:
FGoodBye();
sleep(1);
free(frame[num-1].p);
key=1;
keybuffer(0,45);
break;
case 1:
outtextxy(220,110,"522");
size=imagesize(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10);
if(size!=-1)
{
branch_buf=malloc(size);
if(branch_buf)
getimage(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10,branch_buf);
}
else
outtext("Out of memory!");
putimage(x0,y0+3,branch_buf,XOR_PUT);
free(frame[num-1].p);
free(branch_buf);
key=1;
}
}
}
}while(key==0);
}
main()
{
InitGraph();
LoadMainFrame();
dispstatusbar();
Main_Frame();
closegraph();
close(flag16);
}
void help()
{
setviewport(90,90,549,320,1);
outtextxy(222,0,"help");
settextstyle(0,0,0);
while(specialkey()!=ESC)
;
clearviewport();
setviewport(0,0,639,345,1);
}
void FGoodBye()
{
outtextxy(220,110,"Goodbye!");
}
int specialkey()
{
int key;
while(bioskey(1)==0)
; /* 等待按键 */
key=bioskey(0);
key=key&0xff ? key&0xff:key>>8;
return(key);
}
void keybuffer(char k1,char k2)
{
int keybufbott;
keybufbott=peek(0,0x041c);
if(keybufbott<0x03c)
pokeb(0,0x041c,keybufbott+2);
else
pokeb(0,0x041c,0x01e);
pokeb(0,0x0400+keybufbott,k1);
pokeb(0,0x0400+keybufbott+1,k2);
}
int out16hz(int x,int y,int z,int color,char *p)
{
Word i,QM,WM,flag=0;
int record,i1,i2,i3;
long pointer;
char Bit[32];
while ((i=*p++)!=0)
{
if (flag==0)
{
QM=(i-0xA1)&0x07F;
flag=1;
}
else
{
WM=(i-0xA1)&0x07F;
flag=0;
record=QM*94+WM;
pointer=record*32L;
lseek(flag16,pointer,SEEK_SET);
read(flag16,Bit,32);
for(i1=0;i1<16;i1++)
for(i2=0;i2<2;i2++)
for(i3=0;i3<8;i3++)
if(HzConvert(Bit[i1*2+i2],7-i3))
putpixel(x+i2*8+i3,y+i1,color);
x=x+z+16;
}
}
return(x);
}
int HzConvert(Byte ch,int n)
{
return ((ch>>n)&1);
}
/*文件操作*/
/*long DriFreeB(unsigned int drive)
{
}
int getbit(Byte ch,int n)
{
return((ch>>n)&0x01);
}
void dishz(int x,int y,int z,int color,char *p)
{
Byte num ,QM,WM,flag=0;
int record,i,j,k;
long pointer;
char Bit[32];
chdir("c:\\turbo");
flag16=open("hzk16",O_RDWR|O_BINARY);
if(flag16==-1)
{
printf("Cannot Open HZK16\n");
closegraph();
exit(1);
}
while ((num=*p++)!=0)
{
if (num>0xA1)
if (flag==0)
{
QM=(num-0xA1)&0x07F;
flag=1;
}
else
{
WM=(num-0xA1)&0x07F;
flag=0;
record=QM*94+WM;
pointer=record*32L;
lseek(flag16,pointer,SEEK_SET);
read(flag16,Bit,32);
for(i=0;i<16;i++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
if(getbit(Bit[i*2+j],7-k))
putpixel(x+j*8+k,y+i,color);
x=x+z+16;
}
}
close(flag16);
return ;
}
int specialkey()
{
}
int find1(unsigned int drive, unsigned char fnames[][13])
{
}
void display(int numold,int num,int page,unsigned char fnames[][13])
{
}
int wj_xuanz(char file[13],unsigned int drive)
{
}
int twj_xuanz(char file[13],unsigned int drive)
{
}
/*file find main*/
fchazhao()
{
}
void FImport()
{
}
void FExport()
{
}
void FDelete()
{
}
/*同步信号接收*/
/*
int SPage()
{
}
int SColumn()
{
}*/
/*调试功能实现*/
/*
void TAlter()
{
int data=0x55,tmp,key,i,j;
}
void TAlterR()
{
}
void TFull()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -