📄 t8.c
字号:
void dispspeed(void)
{if(oldspeed!=ispeed)
{sprintf(buf3,"%3d",ispeed);
drwfillbox(SET,BLUE,11,154,114,213);
drwstr(buf3,13,156,4,4,WHITE,SET);
oldspeed=ispeed;
}
}
void dispprdnumber(void)
{if(oldprdnumber!=prdnumber)
{sprintf(buf3,"%8ld",prdnumber);
drwfillbox(SET,BLUE,121,154,387,213);
drwstr(buf3,123,156,4,4,WHITE,SET);
oldprdnumber=prdnumber;
displeftnumber();
}
}
void displeftnumber(void)
{leftnumber=setnumber-prdnumber+badnumber;
sprintf(buf3,"%8ld",leftnumber);
drwfillbox(SET,BLUE,394,154,648,213);
drwstr(buf3,396,156,4,4,WHITE,SET);
}
void dispbadnumber(void)
{ sprintf(buf3,"%4d",badnumber%10000);
drwfillbox(SET,RED,655,154,791,213);
drwstr(buf3,657,156,4,4,WHITE,SET);
displeftnumber();
}
void broworder(void)
{int ok;
int i,j,k;
strcpy(buf2,"tt.pcx");
pcxmake(260,101,536,266,buf2);
strcpy(buf2,"menu.pcx");
pcxput(SET,260,101,buf2);
i=irec;
ok=TRUE;
while(ok)
{if(kbhit())
{j=getkey();
switch(j)
{case ESC:
ok=FALSE;
break;
case kbUp:
if(i>irec) i--;
dispallorder(i,maxrec-1);
break;
case kbDn:
if(i<(maxrec-1)) i++;
dispallorder(i,maxrec-1);
break;
case kbHOME:
i=irec;
dispallorder(i,maxrec-1);
break;
case kbEND:
i=maxrec-1;
dispallorder(i,maxrec-1);
break;
case kbPgUp:
if((i-8)>=irec) i=i-8;
dispallorder(i,maxrec-1);
break;
case kbPgDn:
if((i+8)<=(maxrec-1)) i=i+8;
dispallorder(i,maxrec-1);
break;
case kbF1:
/* strcpy(buf2,"tt.pcx");
pcxmake(260,201,536,366,buf2);
strcpy(buf3,"menu.pcx");
pcxput(SET,260,201,buf3);
getch();
pcxput(SET,260,201,buf2);*/
break;
case kbINS:
rebiao=inputorder(buf3);
if (rebiao!=9)
{strupr(buf3);
appendorder(buf3);
for(k=maxrec-1;k>i;k--)
exchangeorder(k,k-1);
dispallorder(i,maxrec-1);
}
break;
case kbDEL:
strcpy(buf2,"请确认删除此定单?");
k=msgbox(buf2,1,1);
if((k=='Y') || (k=='y') || (k==ENTER))
{for(k=i;k<maxrec-1;k++)
exchangeorder(k,k+1);
if(maxrec>0) maxrec--;
dispallorder(i,maxrec-1);
}
break;
case kbF8:
strcpy(buf2,"请确认重输此定单?");
k=msgbox(buf2,1,1);
if((k=='Y') || (k=='y') || (k==ENTER))
{inputorder(buf2);
strupr(buf2);
for(k=0;k<70;k++)
order[i][k]=buf2[k];
dispallorder(i,maxrec-1);
}
break;
}
}
}
strcpy(buf2,"tt.pcx");
pcxput(SET,260,101,buf2);
}
void historybrow(void)
{int ok;
int i,j,k;
strcpy(buf2,"tt.pcx");
pcxmake(260,101,536,266,buf2);
strcpy(buf2,"menu.pcx");
pcxput(SET,260,101,buf2);
i=0;
ok=TRUE;
scandata(i,8);
while(ok)
{if(kbhit())
{j=getkey();
switch(j)
{case ESC:
ok=FALSE;
break;
case kbUp:
if(i>0) i--;
scandata(i,8);
break;
case kbDn:
if(i<maxprdrec()) i++;
scandata(i,8);
break;
case kbHOME:
i=0;
scandata(i,8);
break;
case kbEND:
i=maxprdrec();
scandata(i,8);
break;
case kbPgUp:
if((i-8)>=0) i=i-8;
scandata(i,8);
break;
case kbPgDn:
if(i+8<maxprdrec()) i=i+8;
scandata(i,8);
break;
case kbINS:
strcpy(buf2,"请确认还原此定单?");
k=msgbox(buf2,1,1);
if((k=='Y') || (k=='y') || (k==ENTER))
{if(scanbuf(i,buf3))
appendorder(buf3);
}
break;
}
}
}
strcpy(buf2,"tt.pcx");
pcxput(SET,260,101,buf2);
}
void exchangeorder(int i,int j)
{int k;
if((i>=irec) && (i<maxrec))
if((j>=irec) && (j<maxrec))
for(k=0;k<70;k++)
{ buf2[k]=order[i][k];
order[i][k]=order[j][k];
order[j][k]=buf2[k];
}
}
void uploadorder(void)
{FILE *fp;
int i,k;
strcpy(buf2,"请确认上载定单?");
i=msgbox(buf2,1,1);
if((i=='Y') || (i=='y') || (i==ENTER))
{strcpy(buf2,"Upload");
drwstr(buf2,8,400,1,1,RED,XOR);
strcpy(buf2,"sorder.txt");
if((fp=fopen(buf2,"rb")) != NULL)
while(!feof(fp))
{k=fread(buf2,sizeof(char),70,fp);
if(k==70)
appendorder(buf2);
}
fclose(fp);
strcpy(buf2,"Upload");
drwstr(buf2,8,400,1,1,RED,XOR);
}
}
void saveorder(void)
{int fp;
int i,j,k;
strcpy(buf2,"Saving");
drwstr(buf2,8,400,1,1,RED,XOR);
strcpy(buf2,"sorder.txt");
if(_dos_creat(buf2,_A_NORMAL,&fp) ==0)
{for(i=irec;i<maxrec;i++)
{for(j=0;j<70;j++)
buf2[j]=order[i][j];
buf2[70]='\0';
_dos_write(fp,buf2,70,&k);
}
_dos_close(fp);
}
strcpy(buf2,"Saving");
drwstr(buf2,8,400,1,1,RED,XOR);
}
void changeorder(void)
{int i,tmplen;
FILE *fp;
long tmpnumber;
if((irec>=0) && (irec<=maxrec-1))
{for(i=0;i<4;i++)
buf2[i]=order[irec][56+i];
buf2[4]='\0';
tmplen=atoi(buf2);
for(i=0;i<10;i++)
buf2[i]=order[irec][60+i];
buf2[10]='\0';
tmpnumber=atol(buf2);
if(sendorderok(tmplen,tmpnumber))
{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);
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,RED,WHITE);
disporder(1,currentorder,GREEN,WHITE);
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 tmpnumber)
{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>999999L)
{strcpy(buf2,"定单数量太多!");
msgbox(buf2,0,1);
return FALSE;
}
if(tmpnumber<1L)
{strcpy(buf2,"定单数量太少!");
msgbox(buf2,0,1);
return FALSE;
}
sprintf(buf2,"%05d%06ld",tmplen,tmpnumber);
i=bccstr(buf2);
buf2[11]=(char)i;
buf2[12]=ENTER;
buf2[13]='\0';
sendcounter=0;
tm=0;
while(sendcounter<25)
{SioRTS(Port,'S');
SioPuts(Port,buf2,13);
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);
}
}
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>7) break;
}
for(i=count;i<8;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 counts;
int counthz;
int ilength;
count=0;
ilength=0;
strcnt=strlen(str);
for(i=0;i<7;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==5) maxlen=10;
xn=xnorder[i];
yn=y+20;
drwfillbox(SET,icolor,x,y,xn,yn);
if(i<6)
{for(j=0;j<maxlen;j++)
if(strcnt>=70)
tmpbuf[j]=str[count+j];
else
tmpbuf[j]='\0';
tmpbuf[maxlen]='\0';
count=count+maxlen;
}
if(i==4) ilength=atoi(tmpbuf);
if(i==6) sprintf(tmpbuf,"%3d",lmtspeedcal(ilength));
counthz=0;
counts=0;
if (i==2)
hzstr(tmpbuf,x+1,y-1);
/* {
constj=strlen(tmpbuf);
for(j=0;j<constj;j++,j++)
{
strr1[0]=tmpbuf[j];
if (strr1[0]>=0)
j=constj;
else{ strr1[1]=tmpbuf[j+1];
strr1[2]='\0';
if (strr1[0]<0)
{strr1[1]=tmpbuf[j+1];
strr1[2]='\0';
drwhzstr(strr1,x+3+counthz*16+counts*8,y+2,1,1,fcolor,SET);
counthz=counthz+1;
}
else if ((strr1[0]>20)&&(strr1[0]<=127))
{ strr1[1]='\0';
j--;
drwstr(strr1,x+3+counthz*16+counts*8,y+2,1,1,fcolor,SET);
counts++;
}
else j=constj;
}*/
else
drwstr(tmpbuf,x+3,y+2,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) || (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 (int)(0.5+6.0*k/1000.0);
}
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;
flag2=TRUE;
for(i=0;i<6;i++)
{maxlen=4;
if(i==1) maxlen=6;
else if(i==2) maxlen=42;
else if(i==5) maxlen=10;
x0=xorder[i];
y0=y+2;
j=readstr(x0,y0,maxlen,buffer);
m=strlen(buffer);
if(j==ENTER)
{if(i==4)
{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==5)
{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
if (j==9)
{ i=6;
flag2=FALSE;
}
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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -