www.pudn.com > Wrough.rar > XM.C
void cpar( int bb,int rhbz);
#include "stdio.h"
#include "graphics.h"
#include "alloc.h"
#include "conio.h"
#include "stdlib.h"
#include "dos.h"
#include "time.h"
#include "fcntl.h"
#include "string.h"
#include "xwh.h"
#include "math.h"
#include "dir.h"
/*--------------------------------------------------------------------*/
void far *far_graphgetmem(unsigned size)
{ char *p;
p=farmalloc((long)size);
if(p==NULL) printf("Mem.space in _graphgetmem");
return p;
}
void far _graphfreemem(void far *ptr,unsigned size)
{ size++;size--;farfree(ptr);}
int skey(void)
{ int key;
while(bioskey(1)==0);
key=bioskey(0);key=key&0xff?key&0xff:key>>8;return(key);
}
int bkey(void)
{ int key; while(bioskey(1)==0); return(bioskey(0)&0xff); }
/*--------------------------------------------------------------------*/
void w_1724p(void)
{unsigned char outk[3];
int i,j,t,k,m,color,bcolor,maxy;
fprintf(stdprn,"\r\n");
fprintf(stdprn,"%c%c%c",27,'J',18);
bcolor=getbkcolor();maxy=getmaxy();
if(maxy%12) maxy=maxy/12;else maxy=maxy/12+1;maxy=maxy-2;
for(i=0;i<=maxy;i++)
{fprintf(stdprn,"%c%c%c%c",27,'=',getmaxx()/256,getmaxx()%256);
for(j=0;j<=getmaxx();j++)
{for(t=0;t<3;t++)
{outk[t]=0;
for(k=0;k<4;k++)
{color=getpixel(j,i*12+t*4+k);
/* m=color==bcolor ? 0:1;*/
if((color==bcolor)||(color==9)) m=0;
else m=1;
outk[t]=outk[t]|(m<<(7-k*2));
outk[t]=outk[t]|(m<<(7-k*2-1));
}
}
fprintf(stdprn,"%c%c%c",outk[0],outk[1],outk[2]);
}
fprintf(stdprn,"\r\n");
}
fprintf(stdprn,"\r\n\r\n\r\n%c%c%c",27,'J',0);
}
/* ------------------------------------------------------- */
/* set printer to DOT Graphics Mode */
static char grap_code[4]={ 0x1b,0x2a,0x27 }; /* LQ1600 */
set_grap_mode(int bit_num)
{ int i;
for(i=0;grap_code[i]!='\0';i++) prt_char(grap_code[i]);
prt_char(bit_num%256);prt_char(bit_num/256);
}
/* set priter to left-to-right direction */
static char direct_code[4]={ 0x1b,0x55,0x1 }; /* LQ1600 */
set_direct_mode(void)
{ int i;
for(i=0;direct_code[i] !='\0';i++)
prt_char(direct_code[i]);
}
/* send printer line spacing code */
static char lsp_code[5]={ 0x1b,0x4a,0x18,0xd }; /* LQ1600 */
line_spacing(void)
{ int i;
for(i=0;lsp_code[i] !='\0';i++) prt_char(lsp_code[i]);
}
#define LPT1 0x8 /* if LPT2 or LPT3,it is 0xa or 0xc */
prt_char(char ch)
{ int port;
port=peek(0x40,LPT1); /* get printer i/o port num */
while(!status(port));
outp(port,ch); /* send character to printer */
outp(port+2,0xd); /* strobe on */
outp(port+2,0xc); /* init & strobe off */
}
int status(int port)
{ union REGS regs;
regs.h.ah=inp(port+1);
regs.h.ah&=0xf8;
regs.h.ah^=0x48;
return(regs.h.ah&0x80);
}
int readp(int col,int row)
{ union REGS regs;
regs.h.ah=0xd;
regs.h.bh=0;
regs.x.cx=col;
regs.x.dx=row;
int86(0x10,®s,®s);
return(regs.h.al);
}
int PINS=24;
void prt_block(int y1,int x1,int y2,int x2,int yinc, int xinc,int reverse)
{ int row,col,i,j,xc,yc,temp,width,bcolor,pcolor;
char byte[27],bit[24];
width=x2-x1+1; bcolor=getbkcolor();
fprintf(stdprn,"%c%c",27,64);
set_direct_mode(); /* set printer to left-to-right direction */
line_spacing(); /* line spacing */
for(row=y1;row<=y2;row+=PINS)
{ /* begin to print a row (PINS line) */
for(yc=0;ycy2) bit[i]=0;
}
for(i=0;i0xa0)
if(flag==0)
{ zone_code=inter_code-0xa0;flag=1;}
else
{ bit_code=inter_code-0xa0;flag=0;
locate=zone_code*94+bit_code-95;
fseek(fp16,locate*32,SEEK_SET);
fread(dot_arrays,sizeof(dot_arrays),1,fp16);
for(i=0;i<16;i++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
if((dot_arrays[i*2+j]>>(7-k))&1) putpixel(x+j*8+k,y+i,color);
x=x+16+z;
}
}
return 0;
}
int w_hz24(int x,int y,int z,int color,char *p)
{ unsigned char inter_code,flag=0;
unsigned char zone_code,bit_code;
int i,j,k,locate;
char dot_arrays[72];
while(*p)
{inter_code=*p++;
if(inter_code>0xa0)
if(flag==0)
{ zone_code=(inter_code-0xa1)&0x7f;flag=1;}
else
{ bit_code=(inter_code-0xa1)&0x7f;flag=0;
locate=(zone_code-15)*94+bit_code;
fseek(fp24,locate*72l,SEEK_SET);
fread(dot_arrays,sizeof(dot_arrays),1,fp24);
for(i=0;i<24;i++)
for(j=0;j<3;j++)
for(k=0;k<8;k++)
if((dot_arrays[i*3+j]>>(7-k))&1) putpixel(x+i,y+j*8+k,color);
x=x+24+z;
}
}
return 0;
}
/*--------------------------------------------------------------------*/
void set8255(void)
{ outportb(0x1c7,0x98);
/* set 8255 cotrol mode A:in;B:out;C:c4-c7 in,c0-c3 out */
outportb(0x1c5,pbw); /* Sample pick-up stop */
}
/*--------------------------------------------------------------------*/
void menu1(int color,int dx,int dy)
{ register int i,j;
int t;
unsigned char *hs[]={"滤波器","评定长度","测量范围","返回方式"};
setcolor(color);line(mx0+dx,myn-dy,mxn-dx,myn-dy);
for(i=0,j=mx0+dx;i<4;i++,j+=159)
{line(j,myn-dy,j,myn-dy+24);w_hz16(mx0+j+2,myn-dy+4,0,14,hs[i]);
if(i==0) t=j+52;else t=j+69;outtextxy(t,myn-dy+8,":");
}
}
void hzbt(int color,int bcolor)
{ unsigned char *hs="表面粗糙度测量系统";
setcolor(3);
rectangle(2,2,638,36);setfillstyle(1,bcolor);bar3d(5,5,635,33,0,0);
/*lib( 50,8,color,1,0.47);*/
setcolor(color);settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
/*outtextxy(390,12,"2 2 0 5");*/
openhz(4);w_hz24(170,8,4,color,hs);fclose(fp24);
settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
}
void msl(int fcolor,int fn1,int fn2,int dy) /*fn1=0,1,2,3; fn2=4,5 */
{ int i;
unsigned char *ef[]={"非滤波","国标","相位校正","高斯","不返回","返回 "};
unsigned char fw[10],ps[40];
setfillstyle(SOLID_FILL,fcolor);setcolor(15);
for(i=75;i<600;i+=162) bar(mx0+i,myn-dy+4,mx0+i+65,myn-dy+20);
strcpy(fw,ef[fn1]);w_hz16(mx0+75,myn-dy+4,0,15,fw);
strcpy(fw,ef[fn2]);w_hz16(mx0+570,myn-dy+4,0,15,fw);
sprintf(ps,"%d",evv);outtextxy(mx0+415,myn-dy+8,ps);
outtextxy(mx0+450,myn-dy+8,mu);outtextxy(mx0+460,myn-dy+8,"m");
sprintf(ps,"%d",elnu);outtextxy(mx0+245,myn-dy+8,ps);
outtextxy(mx0+255,myn-dy+8,"X");
sprintf(ps,"%3.2f",ecl);outtextxy(mx0+265,myn-dy+8,ps);
outtextxy(mx0+300,myn-dy+8,"mm");
}
void menu3(void)
{register int i,j;
unsigned char *hs1[]={"打印","显示下一页","返回"};
unsigned char *es[]={"P:","N:","ESC:"};
setfillstyle(SOLID_FILL,7);bar(mx0,myn-20,mxn,myn);
setcolor(4);for(i=0,j=80;i<3;i++,j+=190) outtextxy(mx0+j,myn-14,es[i]);
for(i=0,j=100;i<3;i++,j+=200)
{ if(i==2) j+=1;w_hz16(mx0+j,myn-18,0,0,hs1[i]);}
}
/*--------------------------------------------------------------------*/
void rmenu(void)
{ register int i,j;
int color=3,wt=159,t1,t2,c1=15;
char ps[40];
unsigned char *hs[]={"编号 ","工件名","操作者 ","日期 "};
struct date today;
getdate(&today);setcolor(color);
setfillstyle(SOLID_FILL,0);bar(mx0,my0,mxn,myn);
rectangle(mx0,my0,mxn,myn-28);line(mx0,my0+24,mxn,my0+24);
for(i=mx0+wt;i<=479;i+=wt) line(i,my0,i,my0+24);
setcolor(c1);
sprintf(ps,"%4d.%3d.%3d.",today.da_year,today.da_mon,today.da_day);
t1=4;t2=my0;
for(i=0,j=5;i<4;i++,j+=wt) w_hz16(mx0+j,t2+t1,0,c1,hs[i]);
outtextxy(42,50,":");outtextxy(52,50,enumber);
outtextxy(217,50,":");outtextxy(227,50,name);
outtextxy(377,50,":");outtextxy(387,50,oper);
outtextxy(519,50,":");outtextxy(530,50,ps);
menu1(3,0,52);msl(0,fs,mf,52);menu3();
}
/*--------------------------------------------------------------------*/
void menu2(void)
{register int i,j;
unsigned char *hs1[]={"测量结束","传感器滑行","传感器停止","测量","返回"};
unsigned char *es[]={"F4:","F5","F6","F8:","ESC:"};
setfillstyle(SOLID_FILL,7);bar(mx0,myn-20,mxn,myn);
setcolor(4);for(i=0,j=25;i<5;i++,j+=130) outtextxy(mx0+j,myn-14,es[i]);
for(i=0,j=50;i<5;i++,j+=130)
{ if(i==4) j+=8;w_hz16(mx0+j,myn-18,0,0,hs1[i]);}
}
/*--------------------------------------------------------------------*/
void mmenu(void)
{ register int i,j;
int c1,c2,t;
unsigned char *hs[]={"测量控制 ","测量条件","显示结果",
"输出结果","文件操作",
};
setfillstyle(SOLID_FILL,1);bar(mx0,my0,mxn,myn-20);
setfillstyle(SOLID_FILL,7);bar(mx0,my0,mxn,my0+20);
setcolor(7);rectangle(mx0+4,my0+28,mxn-4,myn-28);
for(i=0,j=40;i<5;i++,j+=120) w_hz16(mx0+j,my0+2,0,4,hs[i]);
menu1(7,4,52);setcolor(15); msl(1,fs,mf,52);
}
/*--------------------------------------------------------------------*/
menu0(int dx,int dy)
{ mmenu();menu2();putimage(dx,dy,b1,XOR_PUT);}
void mwd(int x0,int y0,int xl,int yl,int fcolor,int lcolor)
{ setfillstyle(SOLID_FILL,fcolor);bar(x0,y0,x0+xl,y0+yl);
setcolor(lcolor);rectangle(x0+2,y0+4,x0+xl-2,y0+yl-4);
}
void mcsm(int x0,int y0,int xl,int yl,int fcolor,int lcolor,int wp)
/*select filter,range,,mode,assessend length,and so on */
{ unsigned char *hs[]={"滤波器","测量范围","取样长度","评定长度","返回方式"};
register i,j;
mwd(x0,y0,xl,yl,fcolor,lcolor);
for(i=0,j=y0+22;i<5;i++,j+=25) w_hz16(x0+wp,j,0,15,hs[i]);
}
/*--------------------------------------------------------------------*/
void moutg(int x0,int y0,int xl,int yl,int fcolor,int lcolor,int wp)
/*select out grah,resault */
{ unsigned char *hs[]={"测量参数","统计分析","轮廓图形","Tp曲线"};
register i,j;
mwd(x0,y0,xl,yl,fcolor,lcolor);
for(i=0,j=y0+22;i<4;i++,j+=25) w_hz16(x0+wp,j,0,15,hs[i]);
}
/*--------------------------------------------------------------------*/
void outpm(int x0,int y0,int xl,int yl,int fcolor,int lcolor,int wp)
/*printf,plot resault */
{ unsigned char *hs[]={"打印机","绘图仪","轮廓图形","垂直放大比","水平放大比"};
register i,j;
mwd(x0,y0,xl,yl,fcolor,lcolor);
for(i=0,j=y0+22;i<1;i++,j+=30) w_hz16(x0+wp,j,10,15,hs[i]);
}
/*---------------------------------------------*/
void sfilter(int x0,int y0) /* x0=190,y0=116,*/
{ register int i,j;
int dx=x0+10,dy=135;
void *temp;
unsigned char *hs[]={"非滤波","国标","相位校正","高斯"};
temp=malloc(imagesize(x0,y0,241,230));if(!temp) {puts("temp error");exit(1);}
getimage(x0,y0,241,230,temp);
mwd(x0,y0,100,110,5,13);
for(i=0,j=y0+22;i<3;i++,j+=25) w_hz16(x0+19,j,0,14,hs[i]);
putimage(dx,dy,b1,XOR_PUT);
while(1)
{ switch(skey())
{ case 72:putimage(dx,dy,b1,XOR_PUT);
if(dy>135) dy-=25;else dy=185;break; /* dy=185 */
case 80:putimage(dx,dy,b1,XOR_PUT);
if(dy<185) dy+=25;else dy=135;break; /* dy<185 */
case 27:mwd(x0,y0,100,135,1,1);putimage(x0,y0,temp,COPY_PUT);
free(temp);return;
case 13:switch(dy)
{ case 135:fs=0;efa=0;break; /* UF */
case 160:fs=1;efa=256;break; /* RC */
case 185:fs=2;efa=256;break; /* PC */
/* case 210:fs=3;efa=256;break; */ /* GS */
}
default:putimage(dx,dy,b1,XOR_PUT);break;
}
putimage(dx,dy,b1,XOR_PUT);msl(1,fs,mf,52);
}
}
/*--------------------------------------------------------------------*/
void srange(int x0,int y0) /* x0=190,y0=140,*/
{ register int i,j;
int dx=x0+10,dy=158;
void *temp;
char ps[40];
temp=malloc(imagesize(x0,y0,241,230));if(!temp) {puts("temp error");exit(1);}
getimage(x0,y0,241,230,temp);
mwd(x0,y0,100,135,5,13);setcolor(14);
for(i=4,j=165;i<=500;i=i*4,j+=25)
{ sprintf(ps,"%d",i);outtextxy(210,j,ps);outtextxy(250,j,mu);
outtextxy(260,j,"m");
}
putimage(dx,dy,b1,XOR_PUT);
while(1)
{ switch(skey())
{ case 72:putimage(dx,dy,b1,XOR_PUT);
if(dy>158) dy-=25;else dy=233;break;
case 80:putimage(dx,dy,b1,XOR_PUT);
if(dy<233) dy+=25;else dy=158;break;
case 27:mwd(x0,y0,241,230,1,1);putimage(x0,y0,temp,COPY_PUT);
outportb(0x1c7,0x98);outportb(0x1c5,pbw); /* Set range */
free(temp);return;
case 13:switch(dy)
{ case 158:evv=4;evc=2.0/2048;pbw=15;break;
case 183:evv=16;evc=8.0/2048;pbw=13;break;
case 208:evv=64;evc=32.0/2048;pbw=11;break;
case 233:evv=256;evc=128.0/2048;pbw=9;break;
}
default:putimage(dx,dy,b1,XOR_PUT);break;
}
putimage(dx,dy,b1,XOR_PUT);msl(1,fs,mf,52);
}
}
/*--------------------------------------------------------------------*/
void scutoff(int x0,int y0) /* x0=190,y0=164,*/
{ register int i,j;
int dx=x0+10,dy=229;
void *temp;
unsigned char *hs[]={"0.08 mm","0.25 mm","0.80 mm","2.50 mm","8.00 mm"};
temp=malloc(imagesize(x0,y0,241,230));if(!temp) {puts("temp error");exit(1);}
getimage(x0,y0,241,230,temp);
mwd(x0,y0,100,152,5,13);setcolor(14);
for(i=0,j=y0+22;i<5;i++,j+=25) outtextxy(x0+23,j,hs[i]);
putimage(dx,dy,b1,XOR_PUT);
while(1)
{ switch(skey())
{ case 72:putimage(dx,dy,b1,XOR_PUT);
if(dy>204) dy-=25;else dy=254;break; /*dy>179 dy=279*/
case 80:putimage(dx,dy,b1,XOR_PUT);
if(dy<254) dy+=25;else dy=204;break; /*dy<279 dy=179*/
case 27:mwd(x0,y0,100,152,1,1);putimage(x0,y0,temp,COPY_PUT);
free(temp);return;
case 13:switch(dy)
{ case 179:ecl=0.08;est=estm[0];break;
case 204:ecl=0.25;est=estm[1];break;
case 229:ecl=0.80;est=estm[2];break;
case 254:ecl=2.50;est=estm[3];break;
case 279:ecl=8.00;est=estm[4];break;
}
default:putimage(dx,dy,b1,XOR_PUT);break;
}
putimage(dx,dy,b1,XOR_PUT);msl(1,fs,mf,52);
}
}
/*--------------------------------------------------------------------*/
void sassl(int x0,int y0) /* x0=190,y0=188,*/
{ register int i,j;
int dx=x0+10,dy=207;
void *temp;
unsigned char *hs[]={"一倍","二倍","三倍","四倍","五倍"};
temp=malloc(imagesize(x0,y0,241,230));if(!temp) {puts("temp error");exit(1);}
getimage(x0,y0,241,230,temp);
mwd(x0,y0,100,155,5,13);
for(i=0,j=y0+22;i<5;i++,j+=25) w_hz16(x0+30,j,8,14,hs[i]);
putimage(dx,dy,b1,XOR_PUT);
while(1)
{ switch(skey())
{ case 72:putimage(dx,dy,b1,XOR_PUT);
if(dy>207) dy-=25;else dy=307;break;
case 80:putimage(dx,dy,b1,XOR_PUT);
if(dy<307) dy+=25;else dy=207;break;
case 27:mwd(x0,y0,100,155,1,1);putimage(x0,y0,temp,COPY_PUT);
free(temp);return;
case 13:switch(dy)
{ case 207:elnu=1;break;
case 232:elnu=2;break;
case 257:elnu=3;break;
case 282:elnu=4;break;
case 307:elnu=5;break;
}
default:putimage(dx,dy,b1,XOR_PUT);break;
}
putimage(dx,dy,b1,XOR_PUT);msl(1,fs,mf,52);
}
}
/*--------------------------------------------------------------------*/
void smmode(int x0,int y0) /* x0=190,y0=212,*/
{ register int i,j;
int dx=x0+10,dy=231;
void *temp;
unsigned char *hs[]={"自动返回","不返回"};
temp=malloc(imagesize(x0,y0,241,230));if(!temp) {puts("temp error");exit(1);}
getimage(x0,y0,241,230,temp);
mwd(x0,y0,100,80,5,13);
for(i=0,j=y0+22;i<2;i++,j+=25) w_hz16(x0+19,j,0,14,hs[i]);
putimage(dx,dy,b1,XOR_PUT);
while(1)
{ switch(skey())
{ case 72:putimage(dx,dy,b1,XOR_PUT);
if(dy>231) dy-=25;else dy=256;break;
case 80:putimage(dx,dy,b1,XOR_PUT);
if(dy<256) dy+=25;else dy=231;break;
case 27:mwd(x0,y0,100,80,1,1);putimage(x0,y0,temp,COPY_PUT);
free(temp);return;
case 13:switch(dy)
{ case 231:mf=5;break;
case 256:mf=4;break;
}
default:putimage(dx,dy,b1,XOR_PUT);break;
}
putimage(dx,dy,b1,XOR_PUT);msl(1,fs,mf,52);
}
}
/*--------------------------------------------------------------------*/
void mccm(int x0,int y0,int xl,int yl,int fcolor,int lcolor,int wp)
/*select Measureing ,Computer,mode and so on */
{ unsigned char *hs[]={"开始测量","开始计算","调整"};
register i,j;
mwd(x0,y0,xl,yl,fcolor,lcolor);
for(i=0,j=y0+22;i<2;i++,j+=25) w_hz16(x0+wp,j,0,15,hs[i]);
}
/*--------------------------------------------------------------------*/
void rwdiskm(int num)
{ int x0=160,y0=120;
unsigned char *hs[]={"将测量数据存入磁盘","从磁盘读出测量数据","请输入文件名"};
mwd(x0,y0,260,140,3,12);line(x0+2,y0+45,x0+258,y0+45);
w_hz16(x0+40,y0+18,4,0,hs[num]);w_hz16(x0+20,y0+60,0,15,hs[2]);
setcolor(15);outtextxy(x0+115,y0+65,":");
}
void rwdisk(int rdb)
{ FILE *fp;
char *ft;
char cc[4]=".5d";
char dir[10],ccd[4]={' ',':','\\','\0'};
int x0=160,y0=120;
unsigned char *hs[]={"数据已经存盘","写错误","数据已经读出","读错误","返回","显示下页"};
char dfile[20][12];
struct ffblk fn;
register int done,i;
int dx=50,dy=200,k1,k2;
int x,y,bx=dx+9,by=dy+3;
for(k1=0;k1<20;k1++)
for(k2=0;k2<12;k2++) dfile[k1][k2]=0;
switch(rdb)
{ case 1:rwdiskm(0);ft=gr_gets(x0+125,y0+65,0,10);strncat(ft,cc,3);
if((fp=fopen(ft,"wb"))==NULL)
{ w_hz16(x0+90,y0+100,0,0,hs[1]); }
else { fwrite(&est,2,1,fp);
fwrite(&fs,2,1,fp);fwrite(&efa,2,1,fp);
fwrite(&elnu,2,1,fp);fwrite(&evv,2,1,fp);
fwrite(&pbw,2,1,fp);fwrite(&ecl,4,1,fp);
fwrite(&evc,4,1,fp);fwrite(ex,2,eln*(elnu+efa/128),fp);
w_hz16(x0+90,y0+100,0,0,hs[0]);
}
putch(7);putch(7);fclose(fp);
while(1) {if(bkey()==27) {mwd(x0,y0,260,140,1,1);return;}}
break;
case 2: done=findfirst("*.5d",&fn,0);
setfillstyle(SOLID_FILL,7);bar(dx,dy-20,dx+400,dy+150);
setcolor(0);rectangle(dx+2,dy-10,dx+398,dy+138);
setcolor(7);line(dx+40,dy+138,dx+360,dy+138);
line(dx+150,dy-10,dx+250,dy-10);
setcolor(0);ccd[0]=getdisk()+'A';outtextxy(dx+175,dy-12,ccd);
getcurdir(getdisk()+1,dir);outtextxy(dx+200,dy-12,dir);
/*outtextxy(dx+160,dy-12,"c:\\tc\\*.5d");*/
outtextxy(dx+70,dy+135,"ESC:");w_hz16(dx+105,dy+130,0,0,hs[4]);
outtextxy(dx+220,dy+135,"PgDn:");w_hz16(dx+265,dy+130,0,0,hs[5]);
i=0;x=dx+10;y=dy+10;setcolor(1);
while(!done)
{tt:strcpy(dfile[i],fn.ff_name);done=findnext(&fn);
outtextxy(x,y,dfile[i]);i++;if(done==-1) goto dd;
if(x<350) x+=100;
else { x=dx+10;
if(y<290) y+=20;
else {dd:putimage(bx,by,b1,XOR_PUT);i=0;
while(1)
{switch(skey())
{case 77:putimage(bx,by,b1,XOR_PUT);
if(bx<355) {bx+=100;i++;}
else {bx=dx+9;i-=3;}
break;
case 75:putimage(bx,by,b1,XOR_PUT);
if(bx>60) {bx-=100;i--;}
else {bx=355;i+=3;}
break;
case 72:putimage(bx,by,b1,XOR_PUT);
if(by>203) {by-=20;i-=4;}
else {by=283;i+=16;}
break;
case 80:putimage(bx,by,b1,XOR_PUT);
if(by<283) {by+=20;i+=4;}
else {by=203;i-=16;}
break;
case 27:outportb(0x1c7,0x98); /* 8255 mode A:in;B:out;C:c4-c7 in,c0-c3 out */
outportb(0x1c5,pbw); /* Set range */
mwd(dx,dy-20,400,170,1,1);return;
case 81:i=0;bx=dx+9,by=dy+3;x=dx+10;y=dy+10;
setfillstyle(SOLID_FILL,7);
bar(dx+4,dy+2,dx+396,dy+110);setcolor(1);
for(k1=0;k1<20;k1++)
for(k2=0;k2<12;k2++) dfile[k1][k2]=0;
goto tt;
case 13:putimage(bx,by,b1,XOR_PUT);
mwd(dx+150,dy+110,100,18,7,7);
strcpy(ft,dfile[i]);
if((fp=fopen(ft,"rb"))==NULL)
{ w_hz16(dx+150,dy+110,0,0,hs[3]); }
else { fread(&est,2,1,fp);
fread(&fs,2,1,fp);fread(&efa,2,1,fp);
fread(&elnu,2,1,fp);fread(&evv,2,1,fp);
fread(&pbw,2,1,fp);fread(&ecl,4,1,fp);
fread(&evc,4,1,fp);
fread(ex,2,eln*(elnu+efa/128),fp);
msl(1,fs,mf,52);
w_hz16(dx+150,dy+110,0,0,hs[2]);
}
putch(7);putch(7);fclose(fp);break;
default:putimage(bx,by,b1,XOR_PUT);break;
}
putimage(bx,by,b1,XOR_PUT);
}
}
}
}
while(1) {if(bkey()==27) { mwd(dx,dy-20,400,170,1,1);return;}}
}
}
/*--------------------------------------------------------------------*/
void inpno(int hn,int xl)
/* input number name,operater hn=0,1,2;xl=0,16*/
{ int x0=170,y0=150,dx=x0+30,dy=y0+48;
unsigned char *hs[]={"请输入编号","请输入工件名","请输入操作者","返回","修改"};
char *ft;
mwd(x0,y0,240,80,3,12);w_hz16(x0+15,y0+20,0,0,hs[hn]);
setcolor(0);outtextxy(x0+97+xl,y0+25,":");setcolor(15);
w_hz16(x0+50,y0+50,4,15,hs[3]); w_hz16(x0+150,y0+50,4,15,hs[4]);
rinp:outtextxy(x0+104+xl,y0+25,"_");ft=gr_gets(x0+104+xl,y0+25,0,15);
switch(hn)
{ case 0:strcpy(enumber,ft);break;
case 1:strcpy(name,ft);break;
case 2:strcpy(oper,ft);break;
}
putimage(dx,dy,b1,XOR_PUT);
while(1)
{ switch(skey())
{ case 77:putimage(dx,dy,b1,XOR_PUT);
if(dx==200);dx=300;break;
case 75:putimage(dx,dy,b1,XOR_PUT);
if(dx==300);dx=200;break;
case 13:switch(dx)
{ case 200:mwd(x0,y0,240,80,1,1);return;
case 300:setfillstyle(SOLID_FILL,3);
bar(x0+104+xl,y0+20,x0+xl+220,y0+40);
putimage(dx,dy,b1,XOR_PUT);dx=200;goto rinp;
}
default:putimage(dx,dy,b1,XOR_PUT);break;
}
putimage(dx,dy,b1,XOR_PUT);
}
}
/*--------------------------------------------------------------------*/
void retm(int dy) /* mx=272;my=my0;dx=270;dy=90;*/
{ int mx=272,my=my0,dx=270;
menu0(mx,my);moutg(260,my0+30,100,133,4,14,19);putimage(dx,dy,b1,XOR_PUT);}
/*--------------------------------------------------------------------*/
void outgr(int dy) /* dy=90;115,140,165 */
{ rmenu();
switch(dy)
{ case 90:disresult(dy);break;
case 115:disstat(dy);break;
case 140:gdis(dy);break;
case 165:gtpa(dy);break;
}
}
/*--------------------------------------------------------------------*/
void spavv(int sprofile,int plotvv) /* select auto vv plotvv=1 or 2 */
{ long int pvv; /* sprofile 1-p;2-f;3-p+v */
int tvv;
float tmax,tmax1;
unsigned char *hs[]={"放大比太大","放大比太小","请重新选择"};
if((rp==0)||(rv==0)) return;
mwd(160,220,300,70,1,1);
if(sprofile==1)
{ if(fabs(imax(ex,efa,eln*elnu))>=fabs(imin(ex,efa,eln*elnu)))
tmax=fabs(imax(ex,efa,eln*elnu));
else tmax=fabs(imin(ex,efa,eln*elnu));
}
if(sprofile==2)
{ if(fabs(rp)>=fabs(rv)) tmax=rp;else tmax=rv; }
if(sprofile==3)
{ if(fabs(imax(ex,efa,eln*elnu))>=fabs(imin(ex,efa,eln*elnu)))
tmax=fabs(imax(ex,efa,eln*elnu));
else tmax=fabs(imin(ex,efa,eln*elnu));
if(fabs(rp)>=fabs(rv)) tmax1=rp;else tmax1=rv;
if(tmax=0)&&(pvv<200)) vv=100;
if((pvv>=200)&&(pvv<500)) vv=200;
if((pvv>=500)&&(pvv<1000)) vv=500;
if((pvv>=1000)&&(pvv<2000)) vv=1000;
if((pvv>=2000)&&(pvv<5000)) vv=2000;
if((pvv>=5000)&&(pvv<10000)) vv=5000;
if((pvv>=10000)&&(pvv<20000)) vv=10000;
if((pvv>=20000)&&(pvv<25000)) vv=20000;
if((pvv>=25000)&&(pvv<50000)) vv=25000;
if((pvv>=50000)&&(pvv<100000)) vv=50000;
if(pvv>=100000) vv=100000;
return;
}
openhz(4);
settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
if(vv>pvv) { putch(7);putch(7);mwd(160,220,300,70,7,6);setcolor(15);
w_hz24(175,243,0,15,hs[0]);outtextxy(298,248,",");
w_hz24(310,243,0,15,hs[2]);outtextxy(435,248,"! ");
}
if(vv<=(pvv/4)) { putch(7);putch(7);mwd(160,220,300,70,7,6);setcolor(15);
w_hz24(175,243,0,15,hs[1]);outtextxy(298,248,",");
w_hz24(310,243,0,15,hs[2]);outtextxy(435,248,"! ");
}
fclose(fp24);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
}
void svvm(int sprofile,int devices) /* sprofile 1-p;2-f;3-p+v */
{ register int i,j; /* device 1:print; 2:plot */
int dx=18,dy=386,pd=1;
unsigned char *hs[]={"自动","垂直放大比选择","水平放大比自动选择","输出图形"};
unsigned char *vvm[]={"100","200","500","1000","2000","5000","10000",
"20000","50000","100000"
};
long int vvt[11]={-7777,100,200,500,1000,2000,5000,10000,20000,50000,100000 };
setfillstyle(SOLID_FILL,4);bar(10,350,630,410);setcolor(7);
rectangle(10,350,630,410);line(10,380,630,380);setcolor(14);
w_hz16(20,357,0,14,hs[1]);outtextxy(135,362,":");
w_hz16(440,357,0,14,hs[2]);
outtextxy(250,362,"P:");w_hz16(267,357,0,14,hs[3]);
w_hz16(20,387,0,14,hs[0]);
for(i=0,j=75;i<10;i++,j+=55) outtextxy(j,395,vvm[i]);
/*if(devices==2) pd=2;*/
switch(vvk)
{ case 0:dx=18;break;
case 1:dx=73;break;
case 2:dx=128;break;
case 3:dx=183;break;
case 4:dx=238;break;
case 5:dx=293;break;
case 6:dx=348;break;
case 7:dx=403;break;
case 8:dx=458;break;
case 9:dx=513;break;
case 10:dx=568;break;
}
putimage(dx,dy,b2,XOR_PUT);
while(1)
{ spavv(sprofile,pd);
switch(skey())
{ case 75:putimage(dx,dy,b2,XOR_PUT);
if(dx>18) { dx-=55;vvk--;vvbz=vvt[vvk];vv=vvbz; }
else { dx=568;vvk=10;vvbz=vvt[vvk];vv=vvbz; }
break;
case 77:putimage(dx,dy,b2,XOR_PUT);
if(dx<568) { dx+=55;vvk++;vvbz=vvt[vvk];vv=vvbz;}
else { dx=18;vvk=0;vvbz=vvt[vvk];vv=vvbz; }
break;
case 27:mwd(10,350,620,60,1,1);mwd(160,220,300,70,1,1);return;
case 'p':if(devices==1) g1724p(3,sprofile);
/*if(devices==2) plotout(3,sprofile);*/
mwd(160,220,300,70,1,1);putimage(dx,dy,b2,XOR_PUT);break;
default:putimage(dx,dy,b2,XOR_PUT);break;
}
putimage(dx,dy,b2,XOR_PUT);
}
}
/*--------------------------------------------------------------------*/
void prtm(int no)
{ unsigned char *hs[]={"正在打印","正在绘图","请稍候"};
mwd(160,220,300,70,7,6);setcolor(15);openhz(4);
if(no==0) w_hz24(180,240,0,15,hs[no]);else w_hz24(180,240,0,15,hs[no]);
outtextxy(280,255,"... ...");w_hz24(340,240,0,15,hs[2]);
fclose(fp24);settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
outtextxy(425,245,"! ");settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
}
/*--------------------------------------------------------------------*/
void oprofil(int x0,int y0) /* x0=530,y0=190, print out*/
{ register int i,j;
int dx=x0+10,dy=207;
void *temp;
unsigned char *hs[]={"直接轮廓","滤波轮廓","同时输出"};
temp=malloc(imagesize(x0,y0,x0+60,y0+20));if(!temp) {puts("temp error");exit(1);}
getimage(x0,y0,x0+60,y0+20,temp);
mwd(x0,y0,100,115,3,14);
for(i=0,j=y0+20;i<3;i++,j+=30) w_hz16(x0+20,j,0,14,hs[i]);
setcolor(14);putimage(dx,dy,b1,XOR_PUT);
while(1)
{ switch(skey())
{ case 72:putimage(dx,dy,b1,XOR_PUT);
if(dy>207) dy-=30;else dy=267;break;
case 80:putimage(dx,dy,b1,XOR_PUT);
if(dy<267) dy+=30;else dy=207;break;
case 27:mwd(x0,y0,100,120,1,1);putimage(x0,y0,temp,COPY_PUT);
free(temp);setcolor(14);return;
case 13:switch(dy)
{ case 207:svvm(1,1);mwd(160,220,300,70,1,1);break;
case 237:svvm(2,1);mwd(160,220,300,70,1,1);break;
case 267:svvm(3,1);mwd(160,220,300,70,1,1);break;
}
default:putimage(dx,dy,b1,XOR_PUT);break;
}
putimage(dx,dy,b1,XOR_PUT);
}
}
/*--------------------------------------------------------------------*/
void sprnm(int x0,int y0) /* x0=480,y0=90, print out*/
{ register int i,j;
int dx=x0+10,dy=107;
void *temp;
unsigned char *hs[]={"测量结果","统计分析","轮廓图形"};
temp=malloc(imagesize(x0,y0,x0+5,y0+70));if(!temp) {puts("temp error");exit(1);}
getimage(x0,y0,x0+5,y0+70,temp);
mwd(x0,y0,100,120,5,13);
for(i=0,j=y0+20;i<3;i++,j+=30) w_hz16(x0+20,j,0,14,hs[i]);
setcolor(14);putimage(dx,dy,b1,XOR_PUT);
while(1)
{ switch(skey())
{ case 72:putimage(dx,dy,b1,XOR_PUT);
if(dy>107) dy-=30;else dy=167;break;
case 80:putimage(dx,dy,b1,XOR_PUT);
if(dy<167) dy+=30;else dy=107;break;
case 27:mwd(x0,y0,100,120,1,1);putimage(x0,y0,temp,COPY_PUT);
free(temp);setcolor(14);return;
case 13:switch(dy)
{ case 107:g1724p(1,0);mwd(160,220,300,70,1,1);break;
case 137:g1724p(2,0);mwd(160,220,300,70,1,1);break;
case 167:oprofil(530,190);mwd(160,220,300,70,1,1);break;
}
default:putimage(dx,dy,b1,XOR_PUT);break;
}
putimage(dx,dy,b1,XOR_PUT);
}
}
/*--------------------------------------------------------------------*/
void plotprf(int x0,int y0) /* x0=530,y0=220, plot out*/
{ register int i,j;
int dx=x0+10,dy=237;
void *temp;
unsigned char *hs[]={"直接轮廓","滤波轮廓","同时输出"};
temp=malloc(imagesize(x0,y0,x0+60,y0+20));if(!temp) {puts("temp error");exit(1);}
getimage(x0,y0,x0+60,y0+20,temp);
mwd(x0,y0,100,115,3,14);
for(i=0,j=y0+20;i<3;i++,j+=30) w_hz16(x0+20,j,0,14,hs[i]);
setcolor(14);putimage(dx,dy,b1,XOR_PUT);
while(1)
{ switch(skey())
{ case 72:putimage(dx,dy,b1,XOR_PUT);
if(dy>237) dy-=30;else dy=297;break;
case 80:putimage(dx,dy,b1,XOR_PUT);
if(dy<297) dy+=30;else dy=237;break;
case 27:mwd(x0,y0,100,120,1,1);putimage(x0,y0,temp,COPY_PUT);
free(temp);setcolor(14);return;
case 13:switch(dy)
{ case 237:svvm(1,2);mwd(160,220,300,70,1,1);break;
case 267:svvm(2,2);mwd(160,220,300,70,1,1);break;
case 297:svvm(3,2);mwd(160,220,300,70,1,1);break;
}
default:putimage(dx,dy,b1,XOR_PUT);break;
}
putimage(dx,dy,b1,XOR_PUT);
}
}
/*--------------------------------------------------------------------*/
void plotm(int x0,int y0) /* x0=480,y0=120, print out*/
{ register int i,j;
int dx=x0+10,dy=137;
void *temp;
unsigned char *hs[]={"测量结果","统计分析","轮廓图形"};
temp=malloc(imagesize(x0,y0,x0+5,y0+70));if(!temp) {puts("temp error");exit(1);}
getimage(x0,y0,x0+5,y0+70,temp);
mwd(x0,y0,100,120,5,13);
for(i=0,j=y0+20;i<3;i++,j+=30) w_hz16(x0+20,j,0,14,hs[i]);
setcolor(14);putimage(dx,dy,b1,XOR_PUT);
while(1)
{ switch(skey())
{ case 72:putimage(dx,dy,b1,XOR_PUT);
if(dy>137) dy-=30;else dy=197;break;
case 80:putimage(dx,dy,b1,XOR_PUT);
if(dy<197) dy+=30;else dy=137;break;
case 27:mwd(x0,y0,100,120,1,1);putimage(x0,y0,temp,COPY_PUT);
free(temp);setcolor(14);return;
case 13:switch(dy)
{ case 137:vvk=0;vvbz=-7777;spavv(2,1);/*plotout(1,0);*/
mwd(160,220,300,70,1,1);break;
case 167:if(ek<1) { mwd(x0,y0,100,120,1,1);
putimage(x0,y0,temp,COPY_PUT);
free(temp);setcolor(14);return;
}
vvk=0;vvbz=-7777;spavv(2,1);/*plotout(2,0);*/
mwd(160,220,300,70,1,1);break;
case 197:plotprf(530,220);mwd(160,220,300,70,1,1);break;
}
default:putimage(dx,dy,b1,XOR_PUT);break;
}
putimage(dx,dy,b1,XOR_PUT);
}
}
/*--------------------------------------------------------------------*/
void addely(int time) /* delay time um */
{ register int i,j;
for(i=0;i