y1.c

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

C
2,109
字号

void changeorder(void)
{int i,tmplen;
 FILE *fp;
 long int tmpnumber;
 int tmpslit;

 if((irec>=0) && (irec<=maxrec-1))
   {
    for(i=0;i<4;i++)
      buf2[i]=order[irec][60+i];
    buf2[4]='\0';
    tmplen=atoi(buf2);
    
    for(i=0;i<4;i++)
      buf2[i]=order[irec][56+i];
    buf2[4]='\0';
    tmpslit=atoi(buf2);
    if(tmpslit==0) tmpslit=1;

    for(i=0;i<6;i++)
      buf2[i]=order[irec][64+i];
    buf2[6]='\0';
    tmpnumber=atol(buf2);
    if(tmpnumber<0) tmpnumber=0;

    if(sendorderok(tmplen,tmpnumber,tmpslit))
     {strcpy(buf2,"prddata.txt");
      if((fp=fopen(buf2,"a+")) != NULL)
       {if(!FirstChangeOk)
        {fwrite(currentorder,sizeof(char),70,fp);
         buf2[0]='\0';
         _strdate(buf3);
         strcat(buf2,buf3);
         _strtime(buf3);
         strcat(buf2,buf3);
         sprintf(buf3,"%10ld%10ld%4d\n",prdnumber,leftnumber,badnumber);
         strcat(buf2,buf3);
         i=strlen(buf2);
         fwrite(buf2,sizeof(char),i,fp);
        }
       else
        FirstChangeOk=FALSE;

       fclose(fp);
      }
      
      omaxrec++;
      setlength=tmplen;
      setnumber=tmpnumber;
      lmtspeed=lmtspeedcal(tmplen);
      islitter=tmpslit;

      prdnumber=0;
      badnumber=0;

      for(i=0;i<70;i++)
       {oldorder[i]=currentorder[i];
        currentorder[i]=order[irec][i];
       }

      oldorder[70]='\0';
      currentorder[70]='\0';

      orderok=TRUE;

      disporder(0,oldorder,GREEN,BLACK);
      disporder(1,currentorder,RED,WHITE);
   
      sprintf(buf3,"%8ld",prdnumber);
      drwfillbox(SET,BLUE,121,154,387,213);
      drwstr(buf3,123,156,4,4,WHITE,SET);
   
      sprintf(buf3,"%3d",ispeed);
      drwfillbox(SET,BLUE,11,154,114,213);
      drwstr(buf3,13,156,4,4,WHITE,SET);

      
      dispprdnumber();
      displeftnumber();
      dispbadnumber();
      
      if(irec<=maxrec-1)
       irec++;
     }
    else
     {strcpy(buf2,"换单错误!");
      msgbox(buf2,0,1);
     }
     
   }
 else
   {strcpy(buf2,"定单太少,不能换单?");
    msgbox(buf2,0,1);
   }

}

int sendorderok(int tmplen,long int tmpnumber,int tmpslit)
{time_t tstart,tstop;
 int sendcounter,rvcount,rvtm,i,k;
 int tm;

 if(tmplen<500)
   {strcpy(buf2,"定单长度太短!");
    msgbox(buf2,0,1);
    return FALSE;
   }

 if(tmplen>9999)
   {strcpy(buf2,"定单长度太长!");
    msgbox(buf2,0,1);
    return FALSE;
   }
 if(tmpnumber<0)
   {strcpy(buf2,"定单数量太少!");
    msgbox(buf2,0,1);
    return FALSE;
   }
 if(tmpslit<=0) tmpslit=1;

 sprintf(buf2,"%05d%06d",tmplen,tmpnumber);
 buf2[11]=(char)(48+tmpslit);
 buf2[12]='\0';

 i=bccstr(buf2);
 buf2[12]=(char)i;
 buf2[13]=ENTER;
 buf2[14]='\0';

 sendcounter=0;
 tm=0;

 while(sendcounter<25)
  {SioRTS(Port,'S');
   SioPuts(Port,buf2,14);
   SioEmpty(Port);
   SioRTS(Port,'C');
   rvcount=0;
   rvtm=0;
   time(&tstart);
   k=0;
   tm=0;
   while(rvtm<2)
     {i=SioGetc(Port,0);
      if(i==ACK)
        return TRUE;
      else if(i==NAK)
        return FALSE;

      time(&tstop);
      if(fabs(difftime(tstop,tstart))>1.0)
       {rvtm++;
        time(&tstart);
       }
      tm++;
      if(tm>3500) break;
     }

   sendcounter++;
  }
 return FALSE;
}

void showtime(void)
{ 
  _strtime(newtimebuf);
  if(strncmp(oldtimebuf,newtimebuf,8)!=0)
    {strcpy(oldtimebuf,newtimebuf);
     drwfillbox(SET,WHITE,650,5,778,21);
     oldtimebuf[8]='\0';
     drwstr(oldtimebuf,650,5,1,2,RED,XOR);
     scanmem();
 /*    if(stopok) istoptm++;
     itotaltm++;
     itt=itt+1;
     if(itt>1)
      {scanmem();
       itt=0;
      }*/
    }

}

void appendorder(char *str)
{int i;

 i=strlen(str);
 if(i>=70)
  {for(i=0;i<70;i++)
     order[maxrec][i]=str[i];
   maxrec++;
  }
}

void dispallorder(int startrec,int endrec)
{int i,count,j;

 count=0;
 for(i=startrec;i<=endrec;i++)
  { for(j=0;j<70;j++)
      buffer[j]=order[i][j];
    buffer[70]='\0';
    disporder(count+2,buffer,BLUE,WHITE);
    count++;
    if(count>6) break;
  }
 for(i=count;i<7;i++)
  { for(j=0;j<70;j++)
      buffer[j]=' ';
    buffer[70]='\0';
    disporder(i+2,buffer,BLUE,WHITE);
  }

}

void disporder(int loc,char *str,int icolor,int fcolor)
{ int i,j,maxlen,strcnt;
  int x,y,xn,yn;
  int count;
  int ilength;

  count=0;
  ilength=0;
  strcnt=strlen(str);

  for(i=0;i<8;i++)
   {x=xorder[i];
    y=loc*28+258+2;

    maxlen=4;
    if(i==1) maxlen=6;
    else if(i==2) maxlen=42;
    else if(i==6) maxlen=6;

    xn=xnorder[i];
    yn=y+22;

    drwfillbox(SET,icolor,x,y,xn,yn);
    if(i<7)
      {for(j=0;j<maxlen;j++)
         if(strcnt>=70)
          tmpbuf[j]=str[count+j];
         else
          tmpbuf[j]=' ';

       tmpbuf[maxlen]='\0';
       count=count+maxlen;
      }

    if(i==5) ilength=atoi(tmpbuf);
    if(i==7) sprintf(tmpbuf,"%3d",lmtspeedcal(ilength));

    drwstr(tmpbuf,x+3,y+4,1,1,fcolor,SET);
   }
}

int lmtspeedcal(int ilen)
{double knifecircle;
 double lengthref;
 double synangle;
 double lengthgap;
 double synlength;
 double lmtwidth;
 double heigthtemp;
 double shearlength;
 double topwtemp;
 double width;
 double ktemp;
 double knifemaxspeed;
 double lmtacc;
 double k1,k2,k;

 if(ilen>9999) return iSPD;
 if(ilen<500) return 0;

 knifecircle=dCIR*10.0;
 lengthref=ilen*10.0;
 shearlength=dANG/360.0*knifecircle;
 lengthgap=lengthref-knifecircle;
 synangle=dSYN;
 knifemaxspeed=dMAX*knifecircle*10.0/6.0/dRAT;
 lmtacc=dACC;

 if(lengthref<knifecircle)
  synangle=90.0-0.015*(knifecircle-lengthref);
 synlength=knifecircle*synangle/360.0;
 lmtwidth=2.0*knifecircle-shearlength-synlength;
 if(lengthref>lmtwidth)
  {width=lmtwidth-shearlength-synlength;
   heigthtemp=1.0;
   topwtemp=lengthref-lmtwidth;
  }
 else
  {width=lengthref-shearlength-synlength;
   heigthtemp=2.0*lengthgap/width;
   topwtemp=0;
  }

 ktemp=3.0*heigthtemp/width;

 if(lengthref<knifecircle-200.0)
  { k1=knifemaxspeed/(1.0-heigthtemp);
    k2=sqrt(-1000.0*lmtacc/ktemp);
    k=max(k1,k2);
  }
 else if(lengthref>knifecircle+200.0)
  { k1=knifemaxspeed;
    k2=sqrt(1000.0*lmtacc/ktemp);
    k=min(k1,k2);
  }
 else
  k=0.9*knifemaxspeed;

 return min((int)(0.5+6.0*k/1000.0),iSPD);
}

int inputorder(char *str)
{ 
  int i,x,y,xn,yn,x0,y0,j,k;
  int maxlen,count,m;
  
  x=8;
  y=510;
  xn=791;
  yn=535;
  
  strcpy(tmpbuf,"ordertmp.pcx");
  pcxmake(x,y,xn,yn,tmpbuf);
  drwfillbox(SET,WHITE,x,y,xn,yn);
  drwbox(SET,GREEN,x,y,xn,yn);

  strcpy(buffer,"定单输入");
  drwhzstr(buffer,x+2,y+4,1,1,RED,XOR);
  
  for(i=0;i<70;i++)
    str[i]=' ';
  str[70]='\0';

  count=0;
  for(i=0;i<7;i++)
   {maxlen=4;
    if(i==1) maxlen=6;
    else if(i==2) maxlen=42;
    else if(i==6) maxlen=6;

    x0=xorder[i];
    y0=y+2;
    j=readstr(x0,y0,maxlen,buffer);
    m=strlen(buffer);

    if(j==9)
      i=7;
    if(j==ENTER)
     {
     if(i==4)
       {if(atoi(buffer)>iPOS)
         {strcpy(buffer,"设定剖数太大!");
          msgbox(buffer,0,1);
          i--;
         }
        else
         {for(k=0;k<m;k++)
           str[count+k]=buffer[k];
          count=count+maxlen;
         }  
       }
       
     else if(i==5)
       {if(atoi(buffer)<500)
         {strcpy(buffer,"设定长度太短!");
          msgbox(buffer,0,1);
          i--;
         }
        else
         {for(k=0;k<m;k++)
           str[count+k]=buffer[k];
          count=count+maxlen;
         }
       }
      else if(i==6)
       {if(_atold(buffer)<1.0)
         {strcpy(buffer,"设定数量太少!");
          msgbox(buffer,0,1);
          i--;
         }
        else
         {for(k=0;k<m;k++)
           str[count+k]=buffer[k];
          count=count+maxlen;
         }
       }

      else
       {for(k=0;k<m;k++)
         str[count+k]=buffer[k];
        count=count+maxlen;
       }
     }
    else
     i--;
   }

  pcxput(SET,x,y,tmpbuf);

  return j;
}

void waitbox(char *msg,int ikey,int hzok)
{int ilen,kk;
 int x,y,xn,yn;
 time_t tst,ted;

 ilen=strlen(msg);
 if(ilen<25) ilen=25;

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

 strcpy(tmp1,"waittmp.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);
 if(hzok==1)
  drwhzstr(msg,x+7,y+7,1,1,RED,XOR);
 else
  drwstr(msg,x+7,y+7,1,1,RED,XOR);

 if(ikey==0)
  {strcpy(buf1,"OK");

   drwfillbox(SET,BLUE,400-21,300+3,400+21,300+19);
   drwbox(XOR,RED,400-21,300+3,400+21,300+19);
   drwstr(buf1,400-16,300+3,1,2,GREEN,XOR);
  }
 else if(ikey==1)
  {strcpy(buf1,"YES");

   drwfillbox(SET,BLUE,400-21-10-58,300+3,400-21-10,300+19);
   drwbox(XOR,RED,400-21-10-58,300+3,400-21-10,300+19);
   drwstr(buf1,400-21-10-53,300+3,1,2,GREEN,XOR);

   strcpy(buf1,"NO");

   drwfillbox(SET,BLUE,400+21+10,300+3,400+21+68,300+19);
   drwbox(XOR,RED,400+21+10,300+3,400+21+68,300+19);
   drwstr(buf1,400+21+10+13,300+3,1,2,GREEN,XOR);

  }
  
 time(&tst);
 ikey=TRUE;
 kk=0;
 while(ikey)
  {time(&ted);
   kk++;
   if(kk>2000) break;
   if(kbhit()) break;
   if(fabs(difftime(ted,tst))>0.0)
      ikey=FALSE;
  }
 pcxput(SET,x,y,tmp1);
}

int msgbox(char *msg,int ikey,int hzok)
{int ilen;
 int x,y,xn,yn;

 ilen=strlen(msg);
 if(ilen<25) ilen=25;

 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);
 if(hzok==1)
  drwhzstr(msg,x+7,y+7,1,1,RED,XOR);
 else
  drwstr(msg,x+7,y+7,1,1,RED,XOR);

 if(ikey==0)
  {strcpy(buf1,"OK");

   drwfillbox(SET,BLUE,400-21,300+3,400+21,300+19);
   drwbox(XOR,RED,400-21,300+3,400+21,300+19);
   drwstr(buf1,400-16,300+3,1,2,GREEN,XOR);
  }
 else if(ikey==1)
  {strcpy(buf1,"YES");

   drwfillbox(SET,BLUE,400-21-10-58,300+3,400-21-10,300+19);
   drwbox(XOR,RED,400-21-10-58,300+3,400-21-10,300+19);
   drwstr(buf1,400-21-10-53,300+3,1,2,GREEN,XOR);

   strcpy(buf1,"NO");

   drwfillbox(SET,BLUE,400+21+10,300+3,400+21+68,300+19);
   drwbox(XOR,RED,400+21+10,300+3,400+21+68,300+19);
   drwstr(buf1,400+21+10+13,300+3,1,2,GREEN,XOR);

  }
  
 ikey=getkey();
 pcxput(SET,x,y,tmp1);
 return ikey;
}



int readstr(int x,int y,int maxlen,char *str)
{ int count,i,xn,yn;
  int x0,y0;
  int counts,countz,ok1;
  char c,strr[3];

  readbuf[1]='\0';

  count=0;
  counts=0;

⌨️ 快捷键说明

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