y1.c

来自「在以前公司DOS环境下」· C语言 代码 · 共 2,109 行 · 第 1/4 页

C
2,109
字号
  countz=0;
  xn=x+8*maxlen+4;
  yn=y+16+4;

  drwbox(SET,GRAY,x,y,xn-1,yn-1);
  drwbox(SET,WHITE,x+1,y+1,xn,yn);
  drwfillbox(SET,lYELLOW,x+2,y+2,xn-2,yn-2);

  ok1=TRUE;
  while(count<maxlen)
   { 
    if ((maxlen==42)&&(ok1==TRUE))
         {
         strcpy(buffer,"输入汉字请按alt+F2(智能双拼)");
         msg1box(buffer);
         ok1=FALSE;
        } 
    if (maxlen==42)   
        { x0=x+2+countz*16+counts*8;
         y0=y+2;
         xn=x0+16;
         yn=y0+16;
         drwfillbox(SET,RED,x0,y0,xn,yn);
         while(!CheckKeyBoard());
          firstbyte=ReadChar();
          if (firstbyte==0x1b)
              {
              drwfillbox(SET,lYELLOW,x+2,y+2,xn,yn); 
              count=0;
              counts=0;
              countz=0;
              str[0]='\0';
              }
          else if (firstbyte==0x0d)
                 { str[count]='\0';
                   return firstbyte;
                 }
          else if (firstbyte==0x08)
             { if((countz>0)|(counts>0))
                {if (str[count-1]>=0) 
                  {  count--;
                     counts--;
                     str[count]='\0';
                     x0=x+2+countz*16+counts*8;
                     if (x0<=x+2)
                         x0=x+2;
                     drwfillbox(SET,lYELLOW,x0,y0,xn,yn);
                  }
                else {countz--;
                x0=x+2+countz*16+counts*8;
                drwfillbox(SET,lYELLOW,x0,y0,xn,yn);
                  count--;
                  count--;
                  str[count]='\0';
                }
                }
             }
          else if (firstbyte==0x09)
                   return firstbyte;
          else if ((firstbyte>=20)&&(firstbyte<=127))
                 { counts++;
                   str[count]=firstbyte;
                   strr[0]=firstbyte;
                   strr[1]='\0';
                   count++;
                   xn=x0+8;
                   drwstr(strr,x0,y0,1,1,BLUE,SET);
                 }
         else  
          {
          while(!CheckKeyBoard());
          secondbyte=ReadChar();
    
          
          str[count++]=firstbyte;
          str[count++]=secondbyte;
          str[count]='\0';
          countz++;
          strr[0]=firstbyte;
          strr[1]=secondbyte;
          strr[2]='\0';
         /* hzmsgbox(strr);    */
          drwfillbox(SET,BLUE,171,484,532,504);
          drwhzstr2(strr,172,486,1,1,WHITE,SET);   
          c=(char)getkey();
          switch (c)
           { case '0':
                    strr[1]=(char)(secondbyte-6);
                    str[count-1]=(char)(secondbyte-6);
                    break;
             case '1':
                    strr[1]=(char)(secondbyte-5);
                    str[count-1]=(char)(secondbyte-5);
                    break;
             case '2':
                    strr[1]=(char)(secondbyte-4);
                    str[count-1]=(char)(secondbyte-4);
                    break;
             case '3':
                    strr[1]=(char)(secondbyte-3);
                    str[count-1]=(char)(secondbyte-3);
                    break;
             case '4':
                    strr[1]=(char)(secondbyte-2);
                    str[count-1]=(char)(secondbyte-2);
                    break;                          
             case '5':
                    strr[1]=(char)(secondbyte-1);
                    str[count-1]=(char)(secondbyte-1);
                    break;
             case '6':
                    strr[1]=(char)(secondbyte-0);
                    str[count-1]=(char)(secondbyte-0);
                    break;
             case '7':
                    strr[1]=(char)(secondbyte+1);
                    str[count-1]=(char)(secondbyte+1);
                    break;
             case '8':
                    strr[1]=(char)(secondbyte+2);
                    str[count-1]=(char)(secondbyte+2);
                    break;
             case '9':
                    strr[1]=(char)(secondbyte+3);
                    str[count-1]=(char)(secondbyte+3);
                    break;
          }  
         drwfillbox(SET,BLUE,171,484,532,504);  
          
          drwhzstr(strr,x0,y0,1,1,BLUE,SET);  
          }
         }
   
   
   else
    {x0=x+2+count*8;
     y0=y+2;
     xn=x0+8;
     yn=y0+16;
     drwfillbox(SET,RED,x0,y0,xn,yn);

     i=getkey();
     if(i==ESC)
      { str[0]='\0';
        return i;
      }
     else if(i==ENTER)
      { str[count]='\0';
        return i;
      }
     else if(i==9)
        return i;
     else if(i==BACKSPACE)
      { if(count>0)
         { drwfillbox(SET,lYELLOW,x0,y0,xn,yn);
           count--;
           str[count]='\0';
         }
      }
     else if(i>' ')
      {str[count++]=(char)i;
       str[count]='\0';
       readbuf[0]=(char)i;
       drwstr(readbuf,x0,y0,1,1,BLUE,SET);
      }
    }
   }
  return ENTER;
}

int getkey(void)
{ union REGS in,out;
  in.h.ah=0x8;
  int86(0x21,&in,&out);
  if(out.h.al==0)
   return getkey()+128;
  else
   return out.h.al;
}

void drwstr(char *s,int x,int y,int m,int n,int col,int mode)
 { unsigned char dot[16][2];
   long offset1;
   register i,j,k,mm,nn,mask;

    while(*s)
     { offset1=(long)(*s)*16;
       s+=1;
       j=0;
       for(i=0;i<=15;i++)
         { dot[i][j]=ASC16[offset1+i];
           mask=0x80;
           for(k=0;k<=7;k++)
             {if (dot[i][j]&mask)
               {for(nn=0;nn<n;nn++)
                 {for(mm=0;mm<m;mm++)
                  drwpoint(mode,col,x+(j*8+k)*n+nn,y+i*m+mm);
                 }
               }
               mask=mask>>1;
              }
         }
       x+=8*n;
     }

 }

int drwhzstr(char *s,int x,int y,int m,int n,
             int col,int mode)
 { unsigned char dot[16][2],qm,wm;
   long offset1;
   register i,j,k,mm,nn,mask;
   FILE *fpHZ;

   if((fpHZ=fopen("hzk16","rb"))==0)
     {printf("Error: HZK16 can't open.\n");
      return FALSE;
     }


    while(*s)
     { qm=(unsigned char)(s[0]-0xa1);
       s+=1;
       wm=(unsigned char)(s[0]-0xa1);

       offset1=((long)qm*94+(long)wm)*32;
       s+=1;
       fseek(fpHZ,offset1,SEEK_SET);
       for(i=0;i<=15;i++)
        {for(j=0;j<2;j++)
         { dot[i][j]=(unsigned char)fgetc(fpHZ);
           mask=0x80;
           for(k=0;k<=7;k++)
             {if (dot[i][j]&mask)
               {for(nn=0;nn<n;nn++)
                 {for(mm=0;mm<m;mm++)
                 drwpoint(mode,col,x+(j*8+k)*n+nn,y+i*m+mm);

                 }
               }
               mask=mask>>1;
              }
         }
        }
       x+=16*n;
     }
 fclose(fpHZ);
 }

void drwbutton(char *phstr,char *str,int x,int y,PixelMode i,int col11)
{
  int k,j;
  int xn,yn;
  k=strlen(phstr);
  j=strlen(str);
  xn=x+j*8;
  yn=y+2+16+14+16+2;
  
  drwline(i,7,x,y,xn,y);
  drwline(i,7,x,y-1,xn+1,y-1);
  drwline(i,7,x,y-2,xn+2,y-2);
  drwline(i,7,x,y-2,x,yn);
  drwline(i,7,x-1,y-2,x-1,yn+1);
  drwline(i,7,x-2,y-2,x-2,yn+2);
  drwline(i,0,xn+2,y-1,xn+2,yn+2);
  drwline(i,0,xn+1,y,xn+1,yn+2);
  drwline(i,0,xn,y+1,xn,yn+2);
  drwline(i,0,x-1,yn+2,xn+2,yn+2);
  drwline(i,0,x,yn+1,xn+2,yn+1);
  drwline(i,0,x+1,yn,xn+2,yn);
  drwfillbox(i,col11,x+1,y+1,xn-1,yn-1);
  drwstr(phstr,x+(xn-x)/2-k*16/2,y+4,1,2,BLACK,i);       
  drwhzstr(str,x+2,y+2+16+14,1,1,RED,i);
}

void dispstore(char *s)
{
  drwfillbox(SET,BLACK,20,360,40,460);
  drwhzstr(s,26,360,2,1,38,SET);
  strcpy(buf1,"层");
  drwhzstr(buf1,26,428,2,1,38,SET);
}

void lmtspeedinit(void)
{
 int j;
 char *pp;
 double dtmp;
 FILE *fp;

   iCOM=1;
   dCIR=935.0;
   dANG=75.0;
   dSYN=90.0;
   dMAX=15.0;
   dRAT=5.88;
   dACC=150.0;
   dDAT=10L;
   iSEL=1;
   iADD=1;
   iSPD=100;
   iPOS=5;

 if((fp=fopen("cutoff.ini","r+b"))==NULL)
   {
   printf("File CUTOFF.INI no found.Use default data.sdelay(180)    ");
   }
 else
   {
    while(!feof(fp))
     {if(fgets(buf1,80,fp)!=NULL)

        if((pp=strstr(buf1,"COM"))!=NULL)
          {j=atoi(pp+5);   
           if((j>=0)&&(j<=32)) iCOM=j;
            else iCOM=1;
          }
        else if((pp=strstr(buf1,"CIR"))!=NULL)
          {dtmp=atof(pp+5);  
           if(dtmp>750.0) dCIR=dtmp;
            else dCIR=935.0;
          }
        else if((pp=strstr(buf1,"ANG"))!=NULL)
          {dtmp=atof(pp+5);  
           if((dtmp>0.0)&&(dtmp<100.0)) dANG=dtmp;
            else dANG=75.0;
          }
        else if((pp=strstr(buf1,"SYN"))!=NULL)
          {dtmp=atof(pp+5);  
           if((dtmp>0.0)&&(dtmp<=90.0)) dSYN=dtmp;
            else dSYN=75.0;
          }
        else if((pp=strstr(buf1,"MAX"))!=NULL)
          {dtmp=atof(pp+5);  
           if((dtmp>0.0)&&(dtmp<100.0)) dMAX=dtmp;
            else dMAX=15.0;
          }
        else if((pp=strstr(buf1,"RAT"))!=NULL)
          {dtmp=atof(pp+5);  
           if((dtmp>0.0)&&(dtmp<20.0)) dRAT=dtmp;
            else dRAT=5.88; 
          }
        else if((pp=strstr(buf1,"ACC"))!=NULL)
          {dtmp=atof(pp+5);  
           if((dtmp>0.0)&&(dtmp<1000.0)) dACC=dtmp;
            else dACC=150.0;
          }
        else if((pp=strstr(buf1,"DAT"))!=NULL)
           {dtmp=atof(pp+5); 
            dDAT=(long int)dtmp;
           }
        else if((pp=strstr(buf1,"SEL"))!=NULL)
           { j=atoi(pp+5);  
             iSEL=j;
           }
        else if((pp=strstr(buf1,"ADD"))!=NULL)
           {j=atoi(pp+5);  
            iADD=j;
           }
        else if((pp=strstr(buf1,"SPD"))!=NULL)
           {j=atoi(pp+5);  
            iSPD=j; 
           } 
        else if((pp=strstr(buf1,"POS"))!=NULL) 
           {j=atoi(pp+5);  
            iPOS=j;
           }
     
      }
       fclose(fp);
  
  }
}
unsigned char  ReadChar(void)
{
   union REGS regs;

   regs.h.ah = 0;
   int86(0x16,&regs,&regs);
   return regs.h.al;
}

int CheckKeyBoard(void)
{
    union REGS regs;

    regs.h.ah = 1;
    int86(0x16,&regs,&regs);
    return (regs.x.cflag & 0x40) ? 0 : 1;
}
int drwhzstr2(char *s,int x,int y,int m,int n,
             int col,int mode)
 { unsigned char dot[16][2],qm,wm;
   long offset1;
   int countw;
   char l;
   char str111[2];
   register i,j,k,mm,nn,mask;
   FILE *fpHZ;

   if((fpHZ=fopen("hzk16","rb"))==0)
     {printf("Error: HZK16 can't open.\n");
      return FALSE;
     }
    l='0';
    countw=0;
    while(*s)
     { qm=(unsigned char)(s[0]-0xa1);
       s+=1;
       wm=(unsigned char)(s[0]-0xa1);
       
       while (countw<10)
       {
       str111[0]=l;
       str111[1]='.';
       str111[2]='\0';
       drwstr(str111,x,y,1,1,RED,mode);
       x=x+16;
       offset1=((long)qm*94+(long)wm+countw-6)*32;
       s+=1;
       fseek(fpHZ,offset1,SEEK_SET);
       for(i=0;i<=15;i++)
        {for(j=0;j<2;j++)
         { dot[i][j]=(unsigned char)fgetc(fpHZ);
           mask=0x80;
           for(k=0;k<=7;k++)
             {if (dot[i][j]&mask)
               {for(nn=0;nn<n;nn++)
                 {for(mm=0;mm<m;mm++)
                 drwpoint(mode,col,x+(j*8+k)*n+nn,y+i*m+mm);
                 }
               }
             mask=mask>>1;
             }
         }
        }
       countw=countw+1;
       l=l+1;
       x+=16*n;
       }
      
      }
     
 fclose(fpHZ);
 }
int msg1box(char *msg)
{int ilen;
 int x,y,xn,yn,ikey;
 int i,count11,count12;
 char buff[2];
 char buff1[3];
 ilen=strlen(msg);
 if(ilen<25) ilen=25;
 
 count11=0;
 count12=0;

 x=400-ilen*4-7;
 y=300-26;
 xn=400+ilen*4+7;
 yn=300+26;
 
 strcpy(tmp1,"msgtmp.pcx");
 pcxmake(x,y,xn,yn,tmp1);
 
 drwfillbox(SET,GRAY,x,y,xn,yn);
 drwfillbox(SET,YELLOW,x+2,y+2,xn-2,yn-2);
 
 for(i=0;i<ilen;i++)
 {
 if (msg[i]<0)
 { buff1[0]=msg[i];
   buff1[1]=msg[i+1];
   buff1[2]='\0';
   i++;
   drwhzstr(buff1,x+15+count11*16+count12*8,y+7,1,1,RED,XOR);
   count11++;
 }
 else
    if (msg[i]>0)
    {buff[0]=msg[i];
     buff[1]='\0';
     drwstr(buff,x+15+count11*16+count12*8,y+7,1,1,RED,XOR);
     count12++;
    }
 }
 
  strcpy(buff,"OK");

   drwfillbox(SET,BLUE,400-21,300+3,400+21,300+19);
   drwbox(XOR,RED,400-21,300+3,400+21,300+19);
   drwstr(buff,400-16,300+3,1,2,GREEN,XOR);
  ikey=getkey();
  pcxput(SET,x,y,tmp1);
  return ikey;

}
/*
int hzmsgbox(char *msg)
{int ilen,ikey;
 int x,y,xn,yn;

 ilen=strlen(msg);

 x=400-ilen*4-7;
 y=300-12;
 xn=400+ilen*4+7;
 yn=300+12;

 strcpy(tmpbuf,"hztmp.pcx");
 pcxmake(x,y,xn,yn,tmpbuf);

 drwfillbox(SET,GRAY,x,y,xn,yn);
 drwfillbox(SET,YELLOW,x+2,y+2,xn-2,yn-2);
 drwhzstr2(msg,x+7,y+2,1,1,RED,SET);

 ikey=getkey();
 pcxput(SET,x,y,tmpbuf);
 return ikey;
}
*/



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?