⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 set1.c

📁 在以前公司DOS环境下
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<io.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<graph.h>
#include<time.h>
#include<dos.h>
#include<fcntl.h>
#include<malloc.h>
#include<share.h>
#include<math.h>

#include "svgacc.h"      
#include "pcl4c.h"

char RxBuffer[1024+16];
char TxBuffer[512+16];

#define TRUE 1
#define FALSE 0

#define STX 2
#define ETX 3
#define EOT 4
#define ENQ 5
#define ACK 6
#define BS  8
#define NAK 21

#define ESC 27
#define BACKSPACE 8
#define ENTER 13
#define kbF1 187
#define kbF2 188
#define kbF3 189
#define kbF4 190
#define kbF5 191
#define kbF6 192
#define kbF7 193
#define kbF8 194
#define kbF9 195

#define kbUp 200
#define kbDn 208
#define kbPgUp 201
#define kbPgDn 209
#define kbEND 207
#define kbHOME 199
#define kbINS 210
#define kbDEL 211

#define BLACK 0
#define lBLUE 1
#define lGREEN 2
#define lCYAN 3
#define lRED 4
#define lPINK 5
#define lYELLOW 6
#define lWHITE 7
#define GRAY 8
#define BLUE 9
#define GREEN 10
#define CYAN 11
#define RED 12
#define PINK 13
#define YELLOW 14
#define WHITE 15
#define address 0xd0000400;
#define address1 0xd0000000;

static char tmpbuf[80]; 
static int length,m1,n1;
static unsigned long amount;
static char ASC16[4096];
static int xorder[7]={75,117,171,552,595,638,750},f;
static int xnorder[7]={115,169,550,593,636,748,791}; 
static int byorder[][2]={{224,244},{250,270},{278,298},{306,326},{334,354},{362,382},{389,409},{416,436},{444,464}};
static char tmp1[40];
static char order[9][70];
static char newtimebuf[8],oldtimebuf[8];
static char str1[36]="0123456789abcdefghijklmnopqrstuvwxyz";
static char order1[70];
static int yorder[9]={224,250,278,306,334,362,389,416,444};
static char currentorder[70],oldorder[70],buf2[80],buf3[80],buf4[80];
static int tmcount,FirstChangeOk,rcvcount,tmcounter,orderok;
static char rcvbuf[80],cutlength[4],cutnumber[10],leftlength[10];
static char cutlength1[4],cutnumber1[10],leftlength1[10];
static char cutlength2[4],cutnumber2[10],leftlength2[10];  
static char rcvchar;
static int Port,iCOM;
static int ispeed;
static char *buf,buf1[4];  
static unsigned char far *p1;
void arrow(int x1,int x2,int y1,int y2,int col,int high);
int drwhzstr(char *s,int x,int y,int m,int n,int col,int mode);
void hzstr(char *s,int k,int x,int y)  ;
void drwbutton1(char *phstr,char *str,int x,int y,PixelMode i,int col11)     ;
void drwbutton2(char *phstr,char *str,int x,int y,PixelMode i,int col11);
void disporder(int loc,char *str,int icolor,int fcolor);
void drwstr(char *s,int x,int y,int m,int n,int col,int mode);
int lmtspeedcal(int ilen);
int getkey(void);
void xszt(char *str,int i);
void showtime(void);
int ErrorCheck(int Code);
int bcccheck(char *str);
void waitbox(char *msg,int ikey,int hzok);
void disppic(void);    
void dispmem(unsigned char * addresst);
int msgbox(char *msg,int ikey,int hzok);
void shang(void);
void xia(void);

int main(void)
{ int i,f;
  int ok,sendok,maxtm;

/*  int arrowcount;
  char buf111[8];     
*/
  char far *Ptr;
  int  Seg,ok1,ok2;

  unsigned int p;
  FILE *fpASC;
  time_t tmstart,tmend;

  buf=(char *)calloc(1,80);
   Port=iCOM;

   Ptr = (char far *)RxBuffer;
   Seg = FP_SEG(Ptr) + ((FP_OFF(Ptr)+15)>>4);
                ErrorCheck(SioRxBuf(Port,Seg,Size1024));

   Ptr = (char far *)TxBuffer;
   Seg = FP_SEG(Ptr) + ((FP_OFF(Ptr)+15)>>4);
   ErrorCheck( SioTxBuf(Port,Seg,Size512) );
   ErrorCheck( SioParms(Port,NoParity,OneStopBit,WordLength8) );
   ErrorCheck( SioReset(Port,Baud9600) );
   i = SioFIFO(Port,LEVEL_4TH);

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

   if(fgets(ASC16,4096,fpASC)==NULL)
     {printf("ERROR:ASC16 Read Error.\n");
      fclose(fpASC);
      return FALSE;
     }

   fclose(fpASC);
  _strtime(oldtimebuf); 
  whichvga();
  res800();
  sendok=TRUE;
  ispeed=0;
  disppic();
 _strdate(buf);
 drwstr(buf,410,5,1,2,RED,SET);


   ok=TRUE;
   ok2=TRUE;
   f=0;
  
  strcpy(buf,"停止");
  xszt(buf,RED);

/*   arrowcount=0;
   strcpy(buf111,"tu.pcx");
   pcxmake(9,byorder[arrowcount][0]-3,72,byorder[arrowcount][1]+3,buf111);
   drwfillbox(SET,BLACK,9,byorder[arrowcount][0]-3,72,byorder[arrowcount][1]+3);
   arrow(10,55,byorder[arrowcount][0]+3,byorder[arrowcount][1]-3,arrowcount+33,4);   
*/             
             drwfillbox(SET,BLACK,20,320,40,420);
             strcpy(buf,"下");
             drwhzstr(buf,26,324,2,1,38,SET);
             strcpy(buf,"层");
             drwhzstr(buf,26,392,2,1,38,SET);
 
while (ok)
 {
 p1=(unsigned char far *)address1;
 showtime(); 
  
  if (kbhit())
    {p=getkey();
     switch(p)
           { case kbUp:    
              ok1=TRUE;
              drwfillbox(SET,BLACK,20,320,40,420);
              strcpy(buf,"上");
              drwhzstr(buf,26,324,2,1,38,SET);
              strcpy(buf,"层");
              drwhzstr(buf,26,392,2,1,38,SET);
            while (ok1)   
             { 
               p1=(unsigned char far *)address;
               showtime();
            if (kbhit())
               { p=(unsigned int)getkey();
                switch(p) 
                {  case kbDn:   
                     ok1=FALSE;
                     break;
                   case ESC:
                     strcpy(tmp1,"请确认退出系统?");
                     i=msgbox(tmp1,1,1);
                     if((i=='y') || (i=='Y') || (i==ENTER))
                    { ok1=FALSE;
                     ok=FALSE; 
                     ok2=FALSE;
                     }
                     break;
               }
              }
            }
           /*  if (arrowcount!=0)
              { pcxput(SET,9,byorder[arrowcount][0]-3,buf111);
                pcxmake(9,byorder[arrowcount-1][0]-3,72,byorder[arrowcount-1][1]+3,buf111);
                drwfillbox(SET,BLACK,9,byorder[arrowcount-1][0]-3,72,byorder[arrowcount-1][1]+3);               
                arrow(10,55,byorder[arrowcount-1][0]+3,byorder[arrowcount-1][1]-3,arrowcount+33,3);
               
               }
               if (arrowcount==0)
                  arrowcount=0;
                  else arrowcount=arrowcount-1; 
             */  
               
             drwfillbox(SET,BLACK,20,320,40,420);
             strcpy(buf,"下");
             drwhzstr(buf,26,324,2,1,38,SET);
             strcpy(buf,"层");
             drwhzstr(buf,26,392,2,1,38,SET);

             break;
               
              
            /* if (arrowcount!=8)
              {if (arrowcount==0) 
                   {pcxput(SET,9,byorder[arrowcount][0]-3,buf111);
                   pcxmake(9,byorder[arrowcount+1][0]-3,72,byorder[arrowcount+1][1]+3,buf111);
                   drwfillbox(SET,BLACK,9,byorder[arrowcount+1][0]-3,72,byorder[arrowcount+1][1]+3);          
                   }
                   else{pcxput(SET,9,byorder[arrowcount][0]-3,buf111);
                        pcxmake(9,byorder[arrowcount+1][0]-3,72,byorder[arrowcount+1][1]+3,buf111);
                        drwfillbox(SET,BLACK,9,byorder[arrowcount+1][0]-3,72,byorder[arrowcount+1][1]+3);          
                       }
               } 
                arrow(10,55,byorder[arrowcount+1][0]+3,byorder[arrowcount+1][1]-3,arrowcount+33,3);
                
             if (arrowcount==8)  
                 arrowcount=8;
                 else arrowcount=arrowcount+1; 
              */ 
               break;
            case ESC:  
                 
                 strcpy(tmp1,"请确认退出系统?");
                 i=msgbox(tmp1,1,1);
                 if((i=='y') || (i=='Y') || (i==ENTER))
                 
                 ok=FALSE;
                 break;
           } 
     time(&tmstart);
    }

      rcvchar= (char)SioGetc(Port,0);
      if(rcvchar==STX)
       rcvcount=0;
      else if(rcvchar==ENTER)
        {rcvbuf[rcvcount]='\0';
         if(bcccheck(rcvbuf))
          {for(i=0;i<3;i++)
            buf3[i]=rcvbuf[i];
           buf3[3]='\0';
           ispeed=atoi(buf3);
           for(i=0;i<6;i++)
            buf3[i]=rcvbuf[3+i];
           buf3[6]='\0';
   
          }
         sendok=TRUE;
         tmcounter=maxtm;
         time(&tmstart);
        }
      else if(rcvchar>=' ')
        rcvbuf[rcvcount++]=rcvchar;
      
      if(!sendok)
       {time(&tmend);
        tmcounter++;
        if(fabs(difftime(tmend,tmstart))>=5.0)
          {sendok=TRUE;
           strcpy(buf2,"通信超时错误!");   
           waitbox(buf2,0,1);
           time(&tmstart);
          } 
        else if(tmcounter>=maxtm)
         { sendok=TRUE;
           tmcounter=0;
           time(&tmstart);
         }
       }

  

 }

 free(buf);
 restext();
}
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<7;i++)
   {x=xorder[i];
    y=yorder[loc];

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

    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]=' ';

       tmpbuf[maxlen]='\0';
       count=count+maxlen;
      if (loc==1)
      {if (i==4)
        length=atoi(tmpbuf);
/*      sprintf(buf2,"%3d",lmtspeedcal(ilength));
        drwfillbox(SET,lBLUE,452,115,573,188);
        drwstr(buf2,496,144,1,1,RED,SET);                                                                                        
*/       
       if (i==5)
        amount=(unsigned long)atol(tmpbuf);
      }
     }
    if(i==4) ilength=atoi(tmpbuf);
    if(i==6) sprintf(tmpbuf,"%3d",lmtspeedcal(ilength));
    drwstr(tmpbuf,x+3,y+2,1,1,fcolor,SET);
   }
}
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 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=9350.0;
 lengthref=ilen*10.0;
 shearlength=75.0/360.0*knifecircle;
 lengthgap=lengthref-knifecircle;
 synangle=90.0;
 knifemaxspeed=15.0*knifecircle*10.0/6.0/5.88;
 lmtacc=150.0;

 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 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 arrow(int x1,int x2,int y1,int y2,int col,int high)
{
 int ok;
 int xs,ys,ye;
 
 ok=TRUE;
 drwfillbox(SET,col,x1,y1,x2,y2);
 xs=x2;
 ys=y1-high;
/* xe=xs; */
 ye=y2+high;
 while (ok)
 {
  drwline(SET,col,xs,ys,xs,ye);  
  xs=xs+1;
/*  xe=xs; */
  ys=ys+1;
  ye=ye-1;
  if (ys==ye)
     {drwline(SET,col,xs,ys,xs,ye);  
      ok=FALSE;
     }
}   
}
void drwbutton2(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*16-26;
  yn=y+2+16+20+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);                 /*x+(j*16)/2-(8*k)/2,y+2,1,1,0,i);*/
/*drwstring(i,5,8,text7,732,554); */
/*drwhzstr(str,x+2,y+2+16+14,1,1,38,i);   */
hzstr(str,RED,x+18,y+2+16+14);
}
void drwbutton1(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+14;
  yn=y+2+16+20+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);                 /*x+(j*16)/2-(8*k)/2,y+2,1,1,0,i);*/
/*drwstring(i,5,8,text7,732,554); */
/*drwhzstr(str,x+2,y+2+16+14,1,1,38,i);   */
hzstr(str,RED,x+5,y+2+16+14);
}
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]=(char)fgetc(fpHZ);
           mask=0x80;
           for(k=0;k<=7;k++)
             {if (dot[i][j]&mask)
               {for(nn=0;nn<n;nn++)

⌨️ 快捷键说明

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