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

📄 exfput.c

📁 HT系列掌机部分功能测试程序(含源码)
💻 C
字号:
/* Put specified file to HT1820 through communication file server
   project file should include:
        commplus.c
        cplib.lib
*/
  #include <conio.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <dos.h>
  #include <string.h>
  #include <commplus.h>

  #define _BUFF_SIZE 4096

  #define _MAX_ERROR 20
  char ComPlsMsg[_MAX_ERROR][31]={
   /*eng_NOT_READY*/       {"Communication time out"},
   /*eng_IO_ERROR*/	   {"Communication I/O error"},
   /*eng_TOO_LONG*/	   {"Internal Error 3"},
   /*eng_INVALID_MD*/      {"Internal Error 4"},
   /*eng_ILLEGAL_BDRT*/    {"Internal Error 5"},
   /*eng_EXF_CANCELED*/    {"Coping has been aborted"},
   /*eng_EXF_NAM_MIST*/    {"Internal Error 7"},
   /*eng_EXF_INVALID_CD*/  {"Internal Error 8"},
   /*eng_EXF_TRUNCATED*/   {"File truncated"},
   /*eng_EXF_ALRDY_OPN*/   {"Internal Error 10"},
   /*eng_EXF_ILLEGAL_FN*/  {"Internal Error 11"},
   /*eng_EXF_CODE_12*/     {"Internal Error 12"},
   /*eng_CLNT_REQ_REJECT*/ {"Request has been rejected"},
   /*eng_CLNT_REQ_NOTSUP*/ {"Request has not been supported"},
   /*eng_EXFerr_fOpen*/    {"File not found"},
   /*eng_EXFerr_fCreate*/  {"Illegal file path"},
   /*eng_EXFerr_fRead*/    {"File read error"},
   /*eng_EXFerr_fWrite*/   {"Disk full"},
   /*eng_EXFerr_fErase*/   {"File Erase Error"},
                           {"Unkown Error"}
   };

  int  ParseComLn(int  argc, char *argv[],
                  unsigned char *CommPort,
                  unsigned int  *ServerID,
                  unsigned long *BdRtInput,
                  char          *Localf,
                  char          *Remotef,
                  unsigned int  *convertToFox);

  int db3tofox(char *filename);

  int  ParseComLn(int  argc, char *argv[],
                  unsigned char *CommPort,
                  unsigned int  *SerialNo,
                  unsigned long *BdRtInput,
                  char          *Localf,
                  char          *Remotef,
                  unsigned int  *convertToFox)

  {
    int  i, result=0;
    unsigned char Mode, Port;
    unsigned int  SNo, BdRt;
    unsigned long  BdRttmp;

    if (ComPlsInstalled())
       {
        GetCommMode(&Mode, &Port, &BdRt);
        BdRttmp=BdRt;
       }
    else
       {
        Port=0;
        BdRttmp=38400;
       }

    SNo=0;
    strcpy(Remotef, "*");

    for (i=1; i<argc; i++)
        switch (argv[i][0])
               {
                case 'c':;
                case 'C': if (argv[i][1]=='1')
                             Port=0;
                          else if (argv[i][1]=='2')
                             Port=1;
                          break;
                case 'b':;
                case 'B': sscanf(&argv[i][1], "%lu", &BdRttmp);
                          break;
                case 's':;
                case 'S': sscanf(&argv[i][1], "%d", &SNo);
                          break;
                case 'l':
                case 'L': if (argv[i][1]!=0)
                             {
                              result=1;
                              strcpy(Localf, &argv[i][1]);
                             }
                          break;
                case 'r':
                case 'R': if (argv[i][1]!=0)
                             strcpy(Remotef, &argv[i][1]);
                          break;
                case '!': *convertToFox = 1;
               }

    if (!result)
       {
        printf("Exfile Server Version 3.0 (C) 2000, LandTech Development Co.\n");
        printf("Syntax: EXFPUT lLocalFile(s) [rRemoteFile(s)] [bBaudRate] [{c1|c2}] [sSerialNo]\n");
        printf("LocalFile(s): file names(delimited by ';') in local machine\n");
        printf("RemoteFile(s): file names(delimited by ';') in remote machine, default is *\n");
        printf("BaudRate: 9600 19200 38400 57600 or 115200, default is 38400\n");
        printf("c1: use COM1  c2: use COM2\n");
        printf("SerialNo: serial no of remote machine, default is zero for all\n");
       }
    else
       {
        *CommPort=Port;
        *BdRtInput=BdRttmp;
        *SerialNo=SNo;
       }
    return(result);
  }

  int db3tofox(char *filename)
  {
    FILE *stream;
    unsigned char buf[32];
    unsigned int numOfColumn, curPosition, i;

    if ((stream = fopen(filename, "rb+")) == NULL)
       {
        printf("\nCannot open DB3 file");
        return 1;
       }

    fseek(stream, 0, SEEK_SET);
    if ((i = fread(buf, 32, 1, stream)) != 1)
       {
        printf("\nCannot read DB3 file");
        return 1;
       }

    numOfColumn = (buf[8] + buf[9] * 256 - 33) / 32;
    curPosition = 1;

    for (i = 1; i <= numOfColumn; i++)
        {
         fseek(stream, i * 32 + 12, SEEK_SET);
         fwrite(&curPosition, 1,  1, stream);
         fseek(stream, i * 32 + 16, SEEK_SET);
         fread(buf, 1, 1, stream);
         curPosition = curPosition + buf[0];
        }

    if (fclose(stream) != 0)
       {
        printf("\nCannot close DB3 file");
        return 1;
       }

    return 0;
  }

  int main(int  argc, char *argv[])
  {
   unsigned char CommPort;
   unsigned int  SerialNo, result;
   unsigned long BdRtInput;
   unsigned int  BaudRate;
   unsigned int  convertToFox = 0;
   char          Localf[256];
   char          Remotef[256];
   char          Buffer[_BUFF_SIZE];
   char          tempRemote[64];
   char *curLocal, *curRemote, *oldLocal, *oldRemote, *ptr;
   char ch;

   directvideo=0;
   if (ParseComLn(argc, argv, &CommPort, &SerialNo, &BdRtInput,
                  Localf, Remotef, &convertToFox))
      {
       if (!ComPlsInstalled())
          if (InstallComPls(CommPort) == 2)
             {
              cprintf("BIOS Setting for COM1 or COM2 Error!!!!\r\n\n");
              return 0;
             }

       if (BdRtInput == 115200)
          BaudRate=0x0fff0;
       else
          BaudRate=(unsigned int)BdRtInput;

       if (!SetCommMode(_PAK_MODE, CommPort, BaudRate))
          {
           EnableRx(0);
           printf("Exfile Server Version 3.0 (C) 2000, LandTech Development Co.\n");
           printf("COM%u avaliable with baud rate %lu, oriented server %u \n", CommPort+1, BdRtInput, SerialNo);

           oldLocal = Localf;
           oldRemote = Remotef;

           while (oldLocal[0] != 0)
                 {
                  ptr = strpbrk(oldLocal, ";");
                  if (ptr)
                     {
                      curLocal = oldLocal;
                      oldLocal = &ptr[1];
                      ptr[0] = 0;
                     }
                  else
                     {
                      curLocal = oldLocal;
                      oldLocal = &curLocal[strlen(curLocal)];
                     }

                  ptr = strpbrk(oldRemote, ";");
                  if (ptr)
                     {
                      curRemote = oldRemote;
                      oldRemote = &ptr[1];
                      ptr[0] = 0;
                     }
                  else
                     {
                      curRemote = oldRemote;
                      oldRemote = &curRemote[strlen(curRemote)];
                     }

                  if (curRemote[0] == 0)
                     strcpy(tempRemote, "*");
                  else
                     strcpy(tempRemote, curRemote);

                  if (convertToFox == 1)
                     db3tofox(curLocal);

                  result=ExfPut(curLocal, tempRemote, _NOT_SLNT, _IN_ENG, SerialNo, Buffer, _BUFF_SIZE);
                  printf("\n\n");

                  if (result)
                     {
                      if (result > _MAX_ERROR)
                         result = _MAX_ERROR;

                      printf("\nCommPls Error: %s\n", ComPlsMsg[result-1]);
                      printf("\nPress ENTER to exit");
                      ch = getc(stdin);
                      DisableRx();
                      UninstComPls();
                      exit(EXIT_FAILURE);
                     }
                 }
           DisableRx();
          }
       else
          {
           if (result > _MAX_ERROR)
              result = _MAX_ERROR;
           printf("%u is an invalid baud rate for CommPlus.\n", BdRtInput);
           printf("\nPress ENTER to exit");
           ch = getc(stdin);
           ch = ch;
           UninstComPls();
           exit(EXIT_FAILURE);
          }
       UninstComPls();
      }
   return 0;
  }

⌨️ 快捷键说明

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