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>4); 
  return(ad-2048); 
} 
int w_ad(void)   /* 1c7=c-port;1c4=A-port;1c5=B-port;1c6=C-port;*/ 
		 /* good:return 0; error return 9999 */ 
{ register int i,j; 
  int key,n,k1,k2,k3,tx[5],e1,e2,e3,e4; 
  unsigned char t; 
/*  unsigned char *hs[]={"请返回手柄","请启动测量","中断测量"};*/ 
  char ps[40]; 
  n=eln*(elnu+2); 
  mwd(20,200,600,180,0,12);line(100,290,548,290); 
  rectangle(100,226,548,354);line(100,226,100,354); 
  /*  line(95,226,100,226);line(95,354,100,354);*/ 
  for(i=164;i<548;i+=64) line(i,288,i,292); 
  setcolor(15);outtextxy(80,285,"0"); 
  sprintf(ps,"%3d",evv/2);outtextxy(35,222,ps); 
  outtextxy(70,222,mu);outtextxy(80,222,"m"); 
  sprintf(ps,"%3d",-evv/2);outtextxy(30,350,ps); 
  outtextxy(70,350,mu);outtextxy(80,350,"m"); 
  k1=100;k2=105;k3=0;j=4;tx[0]=0;tx[4]=1;ex[0]=0;/* graphics org */ 
  outportb(0x1c6,0x04);inportb(0x1c4);   /* read  A/D  H8 bit */ 
  outportb(0x1c6,0x06);inportb(0x1c4);   /* read  A/D  L4 bit */ 
  outportb(0x1c7,0x98); 
		   /* set 8255 cotrol mode A:in;B:out;C:c4-c7 in,c0-c3 out */ 
  outportb(0x1c5,pbw-1);      /* Start pick-up forward */ 
  delay(1000); 
  disable(); 
  for(i=0;i>5;e2=(ex[i])>>5;e3=(tx[j-4])>>5;e4=(tx[j])>>5; 
     if((i%4)==0)  { setcolor(15);line(k1,290-e1,k1+1,290-e2);k1++;} 
	      else { setcolor(1); line(k2,230-e3,k2+1,230-e4);k3++;} 
   } 
  enable();outportb(0x1c5,pbw);          /*  Pick_up stop   */ 
  putch(7);putch(7);putch(7);     /* ---- Sample End ----*/ 
  mwd(20,200,600,200,1,1);return 0; 
} 
void dreturn(void) 
{ register int i,j; 
  int key,n,k1,k2,k3,tx[5],e1,e2,e3,e4; 
  unsigned char t; 
  n=eln*(elnu+2); 
  k1=100;k2=105;k3=0;j=4;tx[0]=0;tx[4]=1;ex[0]=0;/* graphics org */ 
  outportb(0x1c7,0x98); 
		   /* set 8255 cotrol mode A:in;B:out;C:c4-c7 in,c0-c3 out */ 
  outportb(0x1c5,pbw-8);      /* Start pick-up return */ 
  delay(1000); 
  disable(); 
  for(i=0;i>5;e2=(ex[i])>>5;e3=(tx[j-4])>>5;e4=(tx[j])>>5; 
     if((i%4)==0)  { setcolor(1);line(k1,390-1.1,k1+1,390-1.1);k1++;} 
	      else { setcolor(1); line(k2,390-1.1,k2+1,390-1.1);k3++;} 
   } 
  e1=e2;e3=e4;e4=e1;e3=e2;e1=e3; 
  enable();outportb(0x1c5,pbw);          /*  Pick_up stop   */ 
  putch(7);putch(7);putch(7);     /* ---- Sample End ----*/ 
} 
/*--------------------------------------------------------------------*/ 
void smck(void)   /* select measuring satae */ 
{ register int i,j; 
  int dx=32,dy=my0+50; 
  mccm(22,my0+30,100,85,4,14,19);putimage(dx,dy,b1,XOR_PUT); 
  while(1) 
  { switch(skey()) 
     { case 72:putimage(dx,dy,b1,XOR_PUT); 
	       if(dy>90) dy-=25;else dy=115;break; 
       case 80:putimage(dx,dy,b1,XOR_PUT); 
	       if(dy<115) dy+=25;else dy=90;break; 
       case 27:mwd(22,my0+30,100,110,1,1);return; 
       case 75:mwd(22,my0+30,600,200,1,1);putimage(dx,my0,b1,XOR_PUT); 
	       mdx=512;putimage(mdx,my0,b1,XOR_PUT);diskm();return; 
       case 77:mwd(22,my0+30,600,200,1,1);putimage(dx,my0,b1,XOR_PUT); 
	       mdx=152;putimage(mdx,my0,b1,XOR_PUT);smc();return; 
       case 13:switch(dy) 
		{ case 90:if(w_ad()==9999)  mwd(20,200,600,180,1,1); 
			    else { cpar(fs,99);putch(7);} break; 
		  case 115:cpar(fs,0);putch(7);putch(7);break; 
		  case 140:break; 
		} 
       default:putimage(dx,dy,b1,XOR_PUT);break; 
     } 
    putimage(dx,dy,b1,XOR_PUT); 
  } 
} 
/*--------------------------------------------------------------------*/ 
void smc(void) 
{ register int i,j; 
  int dx=152,dy=my0+50; 
  mcsm(141,my0+30,100,160,4,14,19);putimage(dx,dy,b1,XOR_PUT); 
  while(1) 
  { switch(skey()) 
     { case 72:putimage(dx,dy,b1,XOR_PUT); 
	       if(dy>90) dy-=25;else dy=190;break; 
       case 80:putimage(dx,dy,b1,XOR_PUT); 
	       if(dy<190) dy+=25;else dy=90;break; 
       case 27:mwd(141,my0+30,100,160,1,1);return; 
       case 75:mwd(32,my0+30,600,200,1,1);putimage(dx,my0,b1,XOR_PUT); 
	       mdx=32;putimage(mdx,my0,b1,XOR_PUT);smck();return; 
       case 77:mwd(32,my0+30,600,200,1,1);putimage(dx,my0,b1,XOR_PUT); 
	       mdx=272;putimage(mdx,my0,b1,XOR_PUT);orsk();return; 
       case 13:switch(dy) 
		{ case 90:sfilter(190,116) ;break; 
		  case 115:srange(190,140);break; 
		  case 140:scutoff(190,164);break; 
		  case 165:sassl(190,188);break; 
		  case 190:smmode(190,212);break; 
		} 
       default:putimage(dx,dy,b1,XOR_PUT);break; 
     } 
    putimage(dx,dy,b1,XOR_PUT); 
  } 
} 
/*--------------------------------------------------------------------*/ 
void orsk(void) 
{ register int i,j; 
  int dx=270,dy=my0+50; 
  moutg(260,my0+30,100,133,4,14,19);putimage(dx,dy,b1,XOR_PUT); 
  while(1) 
  { switch(skey()) 
     { case 72:putimage(dx,dy,b1,XOR_PUT); 
	       if(dy>90) dy-=25;else dy=165;break; 
       case 80:putimage(dx,dy,b1,XOR_PUT); 
	       if(dy<165) dy+=25;else dy=90;break; 
       case 27:mwd(260,my0+30,100,133,1,1);mdx=272;return; 
       case 75:mwd(32,my0+30,600,200,1,1);putimage(mdx,my0,b1,XOR_PUT); 
	       mdx=152;putimage(mdx,my0,b1,XOR_PUT);smc();return; 
       case 77:mwd(32,my0+30,600,200,1,1);putimage(mdx,my0,b1,XOR_PUT); 
	       mdx=392;putimage(mdx,my0,b1,XOR_PUT);soutp();return; 
       case 13:switch(dy) 
		{ case 90:outgr(90);break; 
		  case 115:outgr(115);break; 
		  case 140:outgr(140);break; 
		  case 165:outgr(165);break; 
		} 
       default:putimage(dx,dy,b1,XOR_PUT);break; 
     } 
    putimage(dx,dy,b1,XOR_PUT); 
  } 
} 
/*--------------------------------------------------------------------*/ 
void soutp(void) 
{ register int i,j; 
  int dx=392,dy=my0+50; 
  outpm(380,my0+30,105,60,4,14,19);putimage(dx,dy,b1,XOR_PUT); 
  while(1) 
  { switch(skey()) 
     { case 72:putimage(dx,dy,b1,XOR_PUT); 
	       if(dy>90) dy-=30;else dy=90;break;   /* dy=90   120 */ 
       case 80:putimage(dx,dy,b1,XOR_PUT); 
	       if(dy<90) dy+=30;else dy=90;break;   /* dy<90   120 */ 
       case 27:mwd(374,my0+30,180,133,1,1);return; 
       case 75:mwd(32,my0+30,600,200,1,1);putimage(dx,my0,b1,XOR_PUT); 
	       mdx=272;putimage(mdx,my0,b1,XOR_PUT);orsk();return; 
       case 77:mwd(32,my0+30,600,200,1,1);putimage(dx,my0,b1,XOR_PUT); 
	       mdx=512;putimage(mdx,my0,b1,XOR_PUT);diskm();return; 
       case 13:switch(dy) 
		{ case 90: sprnm(480,90);break; 
		  case 120:plotm(480,120);break; 
		} 
       default:putimage(dx,dy,b1,XOR_PUT);break; 
     } 
    putimage(dx,dy,b1,XOR_PUT); 
  } 
} 
/*--------------------------------------------------------------------*/ 
void diskm(void) 
{ register int i,j; 
  int x0=502,dx=512,dy=my0+50; 
  unsigned char *hs[]={"保存数据","读出数据","输入编号","输入工件名","输入操作者"}; 
  unsigned char *hs1="本软件由QUNANW于一九九三年四月设计完成,版权所有,禁止非法复制 !!!"; 
  mwd(x0,my0+30,100,160,4,14); 
  for(i=0,j=my0+52;i<5;i++,j+=25)  w_hz16(x0+11,j,0,15,hs[i]); 
  putimage(dx,dy,b1,XOR_PUT); 
  while(1) 
  { switch(skey()) 
     { case 72:putimage(dx,dy,b1,XOR_PUT); 
	       if(dy>90) dy-=25;else dy=190;break; 
       case 80:putimage(dx,dy,b1,XOR_PUT); 
	       if(dy<190) dy+=25;else dy=90;break; 
       case 27:mwd(x0,my0+30,100,160,1,1);return; 
       case 75:mwd(32,my0+30,600,200,1,1);putimage(dx,my0,b1,XOR_PUT); 
	       mdx=392;putimage(mdx,my0,b1,XOR_PUT);soutp();return; 
       case 77:mwd(32,my0+30,600,200,1,1);putimage(dx,my0,b1,XOR_PUT); 
	       mdx=32;putimage(mdx,my0,b1,XOR_PUT);smck();return; 
       case -124:putimage(dx,dy,b1,XOR_PUT); 
		 mwd(50,250,550,50,12,15);w_hz16(55,267,0,15,hs1); 
		 getch();mwd(50,250,550,50,1,1);break; 
       case 13:switch(dy) 
		{ case 90:rwdisk(1);break; 
		  case 115:rwdisk(2);break; 
		  case 140:inpno(0,0);break; 
		  case 165:inpno(1,16);break; 
		  case 190:inpno(2,16);break; 
		} 
       default:putimage(dx,dy,b1,XOR_PUT);break; 
     } 
    putimage(dx,dy,b1,XOR_PUT); 
  } 
} 
/*--------------------------------------------------------------------*/ 
void cpar( int bb,int rhbz) 
 { unsigned char *hs[]={"开始计算","请稍候"}; 
   int i; 
   openhz(4); 
   mwd(160,220,300,70,7,6);settextstyle(DEFAULT_FONT,HORIZ_DIR,2); 
   setcolor(0);w_hz24(200,242,0,0,hs[0]);outtextxy(300,247,","); 
   w_hz24(315,242,0,0,hs[1]);outtextxy(395,247,"!"); 
   putch(7);putch(7);settextstyle(DEFAULT_FONT,HORIZ_DIR,1); 
   fclose(fp24); 
   switch(bb)     /*fs= 0:un;1:gb;2:pc;3:gs  */ 
    { case 0:mean();break; 
      case 1:gbf();break; 
      case 2:pcf();break; 
/*      case 3:dc_gsf(ey,256,eln*(elnu+1));break;*/ /*w_gsf(ey,2048,11);*/ 
    } 
   tpb=0;rr(efa);w_rzy(ey);c_s_sm(ey);w_pre(rhbz); 
 } 
/*--------------------------------------------------------------------*/ 
void pickgo(void) 
{ unsigned char *hs[]={"传感器正在滑行","按任意键停止"}; 
  int key; 
  mwd(50,300,230,70,7,6);openhz(4);setcolor(15); 
  w_hz24(70,320,0,15,hs[0]);/*w_hz24(250,320,0,15,hs[1]);*/ 
  fclose(fp24);settextstyle(DEFAULT_FONT,HORIZ_DIR,2); 
  outtextxy(240,325,"!"); 
  settextstyle(DEFAULT_FONT,HORIZ_DIR,1); 
  outportb(0x1c7,0x98);outportb(0x1c5,pbw-1); 
} 
 
/*--------------------------------------------------------------------*/ 
void readsdate(void) 
{ FILE *fp; 
  int i,j,k; 
  char  cccc[40]; 
  char  cc[6]; 
  fp=fopen("stime.dat","rb"); 
  if (fp==NULL) { puts ("Read stime.dat Error");exit(1); } 
  for(i=0;i<40;i++) cccc[i]=0; 
  rewind(fp);fread(cccc,40,1,fp); 
  i=0;j=0;k=0; 
  while(1) 
   { if(cccc[i]=='\x1A') break; 
     if((cccc[i]=='\r')&&(cccc[i+1]=='\n')) 
       { estm[j]=atoi(cc);i+=2;j++;for(k=0;k<6;k++) cc[k]=0;k=0;} 
     else { cc[k]=cccc[i];i++;k++;} 
   } 
  close(fp); 
} 
/*--------------------------------------------------------------------*/ 
main() 
{int gdrive=VGA,gmode=VGAHI; 
 register i,j; 
 int bx0=0,bx1=80,by0=0,by1=20; 
 int dx,dy,key,l0,lx; 
 char ps[20]; 
 unsigned char *hs="测针位移指示"; 
 initgraph(&gdrive,&gmode,"\\tc"); 
 mu[0]=230;mu[1]='\0';pbw=13;set8255(); 
 setfillstyle(SOLID_FILL,15);bar(bx0,by0,bx1,by1); 
 b1=malloc(imagesize(bx0,by0,bx1,by1));if(!b1) {puts("b1 error");exit(1);} 
 getimage(bx0,by0,bx1,by1,b1); 
 setfillstyle(SOLID_FILL,15);bar(0,0,50,20); 
 b2=malloc(imagesize(0,0,50,20));if(!b2) {puts("b2 error");exit(1);} 
 getimage(0,0,50,20,b2); cleardevice(); 
 readsdate();/*Read sample date*/ 
 fs=1;mf=5;efa=256;evv=16;elnu=5;ecl=0.8;ek=0;evc=8.0/2048;est=estm[2]; 
 if((fp16=fopen("hzk16","rb"))==NULL) 
     {cputs("hzk16 open Error");getch();exit(1); } 
 hzbt(15,9);menu2();mdx=32;mdy=my0; 
 mmenu();putimage(mdx,mdy,b1,XOR_PUT); 
 while(1) 
  { setcolor(14);outtextxy(245,135,":"); 
    setcolor(15);outtextxy(380,253,"0"); 
    openhz(4);w_hz24(100,120,0,14,hs);fclose(fp24); 
    sprintf(ps,"%3d",evv/2);outtextxy(330,120,ps); 
    outtextxy(360,120,mu); outtextxy(370,120,"m"); 
    sprintf(ps,"%3d",-evv/2);outtextxy(323,385,ps); 
    outtextxy(360,385,mu);outtextxy(370,385,"m"); 
    setfillstyle(SOLID_FILL,0);bar(400,120,500,390);rectangle(400,120,500,390); 
    setfillstyle(SOLID_FILL,12);bar(401,121,499,130); 
    setfillstyle(SOLID_FILL,12);bar(401,380,499,389); 
    line(400,255,500,255);line(400,254,500,254);line(400,256,500,256); 
    setwritemode(1);l0=0;line(401,255-l0,499,255-l0); 
    repl:settextstyle(DEFAULT_FONT,HORIZ_DIR,4); 
	 delay(100); 
	 setfillstyle(SOLID_FILL,1);bar(30,200,260,295); 
	 lx=adt(5000); 
	 if(evv==4) sprintf(ps," %6.3f",evc*lx); 
	 if((evv==16)||(evv==64)) sprintf(ps," %6.2f",evc*lx); 
	 if(evv==256) sprintf(ps," %6.1f",evc*lx); 
	 outtextxy(30,240,ps);outtextxy(260,240,mu);outtextxy(300,240,"m"); 
	 lx=lx/16; 
	 line(401,255-l0,499,255-l0);line(401,255-lx,499,255-lx);l0=lx; 
	 if((lx<=-125)||(lx>=125)) putch(7); 
	 if(bioskey(1)==0) goto repl; 
    settextstyle(DEFAULT_FONT,HORIZ_DIR,1); 
    setwritemode(0);key=bioskey(0);key=key&0xff?key&0xff:key>>8; 
    switch(key) 
     { case 77:putimage(mdx,mdy,b1,XOR_PUT); 
	       if(mdx<512) mdx+=120;else mdx=32;break; 
       case 75:putimage(mdx,mdy,b1,XOR_PUT); 
	       if(mdx>32) mdx-=120;else mdx=512;break; 
       case 62:goto end; 
       case 63:pickgo();putimage(mdx,mdy,b1,XOR_PUT);break; 
       case 64:outportb(0x1c7,0x98);outportb(0x1c5,pbw); 
	       mwd(50,300,230,70,1,1);putimage(mdx,mdy,b1,XOR_PUT);break; 
       case 66:setfillstyle(SOLID_FILL,1);bar(30,100,510,400); 
	       w_ad();cpar(fs,99);putch(7);putch(7); 
	       putimage(mdx,mdy,b1,XOR_PUT);break;      /* F8 key  */ 
       case 80: 
       case 13:setfillstyle(SOLID_FILL,1);bar(30,100,510,400); 
	       switch(mdx) 
		{ case 32 :smck();break; 
		  case 152:smc();break; 
		  case 272:orsk();break; 
		  case 392:soutp();break; 
		  case 512:diskm();break; 
		} 
       default:putimage(mdx,mdy,b1,XOR_PUT);break; 
     } 
    putimage(mdx,mdy,b1,XOR_PUT); 
  } 
 end:fclose(fp16);free(b1);free(b2);set8255();closegraph(); 
} 
/*------------------------------------------------------------------------*/