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

📄 terminal.c

📁 功能丰富的串口通讯程序
💻 C
📖 第 1 页 / 共 3 页
字号:
 for (i=0;i<10;i++){   if (DeviceInit[CurrentTerm.Device-1][i] >= 0){    if (DeviceInit[CurrentTerm.Device-1][i] == 0)     strcpy(Temp, Strings[InitStr0]);    else     strcpy(Temp, Strings[InitStr1+DeviceInit[CurrentTerm.Device-1][i]-1]);    ReplaceM(Temp);    mwriteblock(Temp, strlen(Temp));   } if (charwaiting() == TRUE){  BytesRead = mreadblock((char *)&CurrentBuffer[CurrentBufferFilled], 128-CurrentBufferFilled);  for (j=CurrentBufferFilled;j<CurrentBufferFilled+BytesRead;j++)   if (CurrentBuffer[j] != '\r') swaddch(Screen, CurrentBuffer[j]);  if (BytesRead == 128) CurrentBufferFilled = 0;  wrefresh(Screen); } } Emupos = 0; Quit = 0; Warned = 0; CurrentBufferFilled = 0; time(&Time); LastTime = Time; Ansi = 1; Avatar = 1; vt100 = 0; strcpy(EMSI_CHT+1, "**EMSI_CHTF5D4\15"); strcpy(EMSI_TCH+1, "**EMSI_TCH3C60\15"); strcpy(EMSI_ACK+1, "**EMSI_ACKA490\15"); EMSI_CHT[0]=0; EMSI_TCH[0]=0; EMSI_ACK[0]=0; strcpy(RingStr, Strings[Ring]); ReplaceM(RingStr); RING[0]=strlen(RingStr); RING[1]=0; CaptureOn = 0; CurrentEntry = NULL; PhonebookChanged = 0; Remote = newwin(LINES/2, COLS, 0, 0); Local = newwin(LINES/2-1, COLS, LINES/2+1, 0); textAttr(Remote, Integers[cRemote]); textAttr(Local, Integers[cLocal]); wbkgdset(Remote, ' ' | Remote->_attrs); wbkgdset(Local, ' ' | Local->_attrs); wmove(Remote, 0, 0); wmove(Local, 0, 0); scrollok(Remote, TRUE); scrollok(Local, TRUE); clearok(Remote, TRUE); clearok(Local, TRUE); CurrentTerm.Password[0] = 5; strcpy(CurrentTerm.Password+1, "Nopwd"); j=0; if (NameOfDialEntry != NULL) CommandLineDialer(); if (DialIndex > 0) CommandLineIndexDialer(); if (NameOfDialEntry != NULL || DialIndex > 0){   Dialer(TermHeader.Num);  clearok(Screen, TRUE);  redrawwin(Screen);  wrefresh(Screen); } if (Integers[StartInPhone]) Phone(); while (!Quit){ if (chwait() == TRUE){  Key = getEscChar();  CommandKey = 1;  switch(Key){  case KEY_HOME:    if (Online){     Integers[StatusStartOn]++;     if (Integers[StatusStartOn] == 3) Integers[StatusStartOn] = 0;    }    else{     Integers[StatusStartOff]++;     if (Integers[StatusStartOff] == 3) Integers[StatusStartOff] = 0;    }    PrintStatus();    break;  case KEY_END:    if (Online){     Integers[StatusEndOn]++;     if (Integers[StatusEndOn] == 2) Integers[StatusEndOn] = 0;    }    if (Offline){     Integers[StatusEndOff]++;     if (Integers[StatusEndOff] == 1) Integers[StatusEndOff] = 0;    }    PrintStatus();    break;  case KEY_PPAGE:    Upload();    break;  case KEY_NPAGE:    Download();    break;  case KEY_UP:    if (Ansi == 1 || vt100 == 1)    {     msendchar(0x1B);     msendchar('[');     msendchar('A');    }    else if (Avatar == 1)    {     msendchar(3);    }    break;  case KEY_DOWN:    if (Ansi == 1 || vt100 == 1)    {     msendchar(0x1B);     msendchar('[');     msendchar('B');    }    else if (Avatar == 1)    {     msendchar(4);    }    break;  case KEY_RIGHT:    if (Ansi == 1 || vt100 == 1)    {     msendchar(0x1B);     msendchar('[');     msendchar('C');    }    else if (Avatar == 1)    {     msendchar(6);    }    break;  case KEY_LEFT:    if (Ansi == 1 || vt100 == 1)    {     msendchar(0x1B);     msendchar('[');     msendchar('D');    }    else if (Avatar == 1)    {     msendchar(5);    }    break;  case KEY_F(1):  case KEY_F(2):  case KEY_F(3):  case KEY_F(4):  case KEY_F(5):  case KEY_F(6):  case KEY_F(7):  case KEY_F(8):  case KEY_F(9):  case KEY_F(10):    for (j=1;j<11;j++)     if (Key == KEY_F(j)){       strcpy(Temp, Strings[Macro1+j-1]);       MacroParser(Temp, Strings[User1+CurrentTerm.User-1], CurrentTerm.Password);       mwriteblock(Temp, strlen(Temp));     }    break;  case 27:      Key = getEscChar();     if (Integers[EscType] == 0)       if (Key > 64 && Key < 91) Key -= 64;      else if (Key > 96 && Key < 123) Key -= 96;     CommandKey = 1;     if (Key == 25){      if (EMSI_CHT[0] != 15){       EMSI_CHT[0] = 15;       mwriteblock(EMSI_CHT+1, 15);       wmove(Remote, 0 ,0);       wmove(Local, 0, 0);       textAttr(Remote, Integers[cRemote]);       textAttr(Local, Integers[cLocal]);       wbkgdset(Remote, ' ' | Remote->_attrs);       wbkgdset(Local, ' ' | Local->_attrs);       werase(Remote);       werase(Local);       wrefresh(Remote);       wrefresh(Local);      }      else      {       EMSI_CHT[0]=0;       EMSI_TCH[0]=15;       mwriteblock(EMSI_TCH+1, 15);       clearok(Screen, TRUE);       redrawwin(Screen);       wrefresh(Screen);      }     }     else if (EMSI_CHT[0] != 15)      switch(Key){     case 1:       Help();       break;     case 2:       Scrl = ScrollStart;       for (j=0;j<LINES;j++)        for (k=0;k<COLS;k++)         mvwaddch(ScrollScreen, j, k, *Scrl++);       Scrl = ScrollStart;       clearok(ScrollScreen, TRUE);       redrawwin(ScrollScreen);       wrefresh(ScrollScreen);       while (Key != ' '){        Key = getEscChar();        switch(Key){        case 't':        case 'T':          Tagger(ScrollScreen);          break;        case 27:          Key = getEscChar();          if (Key == 9){            nl();            ImageSave(ScrollScreen);            nonl();          }          break;        case KEY_DOWN:          if (Scrl+(LINES-1)*COLS<ScrollBuffer+ScrollBackLength) Scrl += COLS;          break;        case KEY_UP:          if (Scrl>ScrollBuffer) Scrl -= COLS;          break;        case KEY_HOME:        HOME:          Scrl = ScrollBuffer;          break;        case KEY_END:        END:          Scrl = ScrollBuffer+ScrollBackLength-(LINES-1)*COLS;          break;        case KEY_PPAGE:          if (Scrl>=ScrollBuffer+(LINES-1)*COLS) Scrl -= (LINES-1)*COLS;          else goto HOME;          break;        case KEY_NPAGE:          if (Scrl+(LINES-1)*COLS*2<ScrollBuffer+ScrollBackLength) Scrl += (LINES-1)*COLS;          else goto END;          break;        default:break;       }       for (j=0;j<LINES-1;j++)        for (k=0;k<COLS;k++)         mvwaddch(ScrollScreen, j, k, *(Scrl+j*COLS+k));       wrefresh(ScrollScreen);       }       redrawwin(Screen);       wrefresh(Screen);       break;     case 3:       swclear(Screen);       swmove(Screen, 0, 0);       wrefresh(Screen);       break;     case 4:       Phone();       break;     case 5:       CurrentTerm.LocalEcho ^= 1;       Integers[GlobalLocalEcho] ^= 1;       ShowEcho();       break;     case 8:        if (Integers[AskOnHang]){        nl();        curs_set(0);        if (ChooseYesno(Screen, " Hangup? "))         Hangup();        curs_set(1);        nonl();       }       else        Hangup();       break;     case 9:       nl();       ImageSave(Screen);       nonl();       break;     case 12:       nl();       OpenCapture(Screen);       nonl();       break;     case 14:       curs_set(0);       SendTags();       curs_set(1);       break;     case 16:       nl();       curs_set(0);       ChangeDevice();       curs_set(1);       nonl();       break;     case 17:       if (Integers[AskOnExit]){        nl();        curs_set(0);        Quit = ChooseYesno(Screen, " Exit without closing port? ");        curs_set(1);        nonl();       }       else Quit=1;       ClosePort = Quit ^ 1;       break;     case 18:       CurrentTerm.StripHigh ^= 1;       Integers[GlobalStripHigh] ^= 1;       ShowStrip();       break;     case 20:       nl();       curs_set(0);       CurrentTerm.Terminal = ChooseTerminal(Screen, CurrentTerm.Terminal);       curs_set(1);       nonl();       SetTerminal();       wrefresh(Screen);       break;     case 22:       Tagger(Screen);       break;     case 23:       nl();       curs_set(0);       Setup();       InitVars();       curs_set(1);       nonl();       break;     case 24:       if (Integers[AskOnExit]){         nl();         curs_set(0);         Quit = ChooseYesno(Screen, " Exit? ");         curs_set(1);         nonl();       }       else Quit = 1;       break;     case 26:       SendBreak();       break;     default:       CommandKey = 0;       break;    }    break;  default:    CommandKey = 0;    break;  }  if (!CommandKey)  if (EMSI_CHT[0] != 15){    if (Integers[CaptureKeys] && CaptureOn)    write(CaptureHandle, &Key, 1);   if (Key == KEY_BACKSPACE) Key = '\b';   if (CurrentTerm.LocalEcho){     if (Key == '\r') swaddch(Screen, '\n');    else if (Key != '\b') swaddch(Screen, Key);   }   msendchar(Key);  }  else  {   if (Key == KEY_BACKSPACE || Key == '\b'){    getyx(Local, k, j);    if (j>0){     j--;     wmove(Local, k, j);     if (CurrentTerm.RcvdBSdest){      waddch(Local, ' ');      wmove(Local, k, j);     }     wrefresh(Local);     msendchar('\b');    }   }   else   {    if (Key != '\r') waddch(Local, Key);    else{      waddch(Local, '\n');     msendchar('\r');     Key = '\n';    }    msendchar(Key);   }  }  } if (CAR && !Online){  Online = 1;  Offline = 0;  time(&Starttime);  SetTerminal();  if (CurrentTerm.Device != Device){   resetModem();   closeModem();   unlock(Strings[Device1+Device-1]);   Device = CurrentTerm.Device;   initModem(Strings[Device1+Device-1], Integers[Bauds1+Device-1]);   setparms(CurrentTerm.Baud, CurrentTerm.Parity, CurrentTerm.Databits, CurrentTerm.Stopbits,             Integers[FlowCtrl1+Device-1]);  }  Printlogln("Online");  Warned = 0; } if (!CAR && Online){  Online = 0;  Offline = 1;  CurrentTerm.Parity = Integers[Parities1+CurrentTerm.Device-1];  CurrentTerm.Baud = Integers[Bauds1+CurrentTerm.Device-1];  CurrentTerm.Stopbits = Integers[Stopbits1+CurrentTerm.Device-1];  CurrentTerm.Databits = Integers[Databits1+CurrentTerm.Device-1];  strncpy(CurrentTerm.Name+1,"Manual mode", 11);  setparms(CurrentTerm.Baud, CurrentTerm.Parity, CurrentTerm.Databits, CurrentTerm.Stopbits,           Integers[FlowCtrl1+CurrentTerm.Device-1]);  CurrentTerm.Name[0] = 11;  Printlogln("Offline");  Warned = 0;  if (CaptureOn){   write(CaptureHandle, CaptureStart, CapturePtr-CaptureStart);   close(CaptureHandle);  }  CaptureOn = 0;  if (CurrentEntry != NULL){    CurrentEntry->Connects++;    CurrentEntry->SecUsed+=Time-Starttime;    CurrentEntry->Calcmin=(Time-Starttime) / 60;    CurrentEntry = NULL;    PhonebookChanged = 1;  }  if (Integers[PhoneBookOnDrop]) Phone(); } if (charwaiting() == TRUE){  BytesRead = mreadblock((char *)&CurrentBuffer[CurrentBufferFilled], 128-CurrentBufferFilled);  j+=BytesRead;  if (Integers[SaveControl] && CaptureOn){   write(CaptureHandle, &CurrentBuffer[CurrentBufferFilled], BytesRead);  }  CurrentBufferFilled += BytesRead;  for (BufferCounter=CurrentBufferFilled-BytesRead;BufferCounter<CurrentBufferFilled;BufferCounter++)  {   if (CurrentTerm.StripHigh) CurrentBuffer[BufferCounter] &= 0x7F;   if (EMSI_CHT[0] == 15){    if (EMSI_TCH[EMSI_TCH[0]+1] == CurrentBuffer[BufferCounter])     EMSI_TCH[0]++;    else     EMSI_TCH[0]=0;    if (CurrentBuffer[BufferCounter] != '\r') waddch(Remote, CurrentBuffer[BufferCounter]);    wrefresh(Remote);    wrefresh(Local);    if (EMSI_TCH[0] == 15){       EMSI_CHT[0]=0;      clearok(Screen, TRUE);      redrawwin(Screen);      wrefresh(Screen);     }   }   else   {   EmulationReturn[0]=SEND;   EmulationReturn[1]=SEND;   EmulationReturn[2]=SEND;   UsedGetChar=0;   if (Ansi){     EmulationReturn[0] = ANSI(CurrentBuffer[BufferCounter]);    if (EmulationReturn[0] == DUMP) DumpEmu();   }   if (Avatar){     EmulationReturn[1] = AVATAR(CurrentBuffer[BufferCounter]);    if (EmulationReturn[1] == DUMP) DumpEmu();    if (UsedGetChar) BufferCounter--;   }   if (vt100){    EmulationReturn[2] = VT100(CurrentBuffer[BufferCounter]);    if (EmulationReturn[2] == DUMP) DumpEmu();   }   if ((Ansi && EmulationReturn[0] == SAVE) || (Avatar && EmulationReturn[1] == SAVE)     || (vt100 && EmulationReturn[2] == SAVE)){     Emu[Emupos++] = CurrentBuffer[BufferCounter];     if (Emupos == 20) DumpEmu();   }   if (EmulationReturn[0] == SEND && EmulationReturn[1] == SEND && EmulationReturn[2] == SEND){     for (j=0;j<5;j++){      if (Signature[j][Signature[j][1]+2] == CurrentBuffer[BufferCounter])       Signature[j][1]++;      else       Signature[j][1]=0;      if (Signature[j][0] == Signature[j][1] && Signature[j][0] != 0){        AutoDownload(j);      }     }     if (*(RingStr+RING[1]) == CurrentBuffer[BufferCounter])      RING[1]++;     else      RING[1]=0;     if (EMSI_CHT[EMSI_CHT[0]+1]==CurrentBuffer[BufferCounter])       EMSI_CHT[0]++;     else       EMSI_CHT[0]=0;     if (EMSI_CHT[0] == 15){       werase(Remote);       werase(Local);       wmove(Remote, 0, 0);       wmove(Local, 0, 0);       wrefresh(Remote);       wrefresh(Local);       mwriteblock(EMSI_ACK, 15);     }     if (CurrentBuffer[BufferCounter] == '\b'){       getyx(Screen, k, j);       if (j>0){        j--;        wmove(Screen, k, j);        if (CurrentTerm.RcvdBSdest){         waddch(Screen, ' ');         wmove(Screen, k, j);        }       }     }     else     if (CurrentBuffer[BufferCounter] != '\r' && CurrentBuffer[BufferCounter] != '\n')        swaddch(Screen, CurrentBuffer[BufferCounter]);     if (CurrentBuffer[BufferCounter] == '\n'){      getyx(Screen, y, x);      x = 0;      if (y < LINES-2){       y++;       swmove(Screen, y, x);      }      else swaddch(Screen, '\n');     }     }   }  }  if (charwaiting() == FALSE && EMSI_CHT[0] != 15 || CurrentBufferFilled == 128){    wrefresh(Screen);  } } if (CurrentBufferFilled == 128){  CurrentBufferFilled = 0; } time(&Time); if (Time != LastTime || LastStatus != linestatus()){  PrintStatus();  if ((Time-Starttime) / 60 >= Integers[OnlineWarn] && Online && !Warned) WarnOnline();  LastTime = Time;  LastStatus = linestatus(); } if (RNG && RING[0] == RING[1]){  RING[1]=0;  linestatus();  strcpy(Temp, Strings[AutoAnswerStr]);  ReplaceM(Temp);  if (Integers[AutoAnswer]){   mwriteblock(Temp, strlen(Temp));  }  else  {   nl();   curs_set(0);   if (ChooseYesno(Screen, "Answer incomming call?") == 1)    mwriteblock(Temp, strlen(Temp));   RNG = 0;   curs_set(1);   nonl();  } } } delwin(Local); delwin(Remote); Printlogln("End"); CloseLog(); if (CaptureOn){  write(CaptureHandle, CaptureStart, CapturePtr-CaptureStart);  close(CaptureHandle); } if (ClosePort) sethup(TRUE); else sethup(FALSE); if (PhonebookChanged)    switch(WhichBook){   case 0:    if (WriteTerminate(CurrentPhonebook) < 0)      WindowError(PhoneScreen, "Unable to write phonebook");     break;   case 1:    if (WriteTelix(CurrentPhonebook) < 0)     WindowError(PhoneScreen, "Unable to write phonebook");     break;   default:break;   }}

⌨️ 快捷键说明

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