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

📄 terminal.c

📁 功能丰富的串口通讯程序
💻 C
📖 第 1 页 / 共 3 页
字号:
 }}void Tagger(WINDOW *Window){ int i, j, k, Color, y, x, Attr, Key; char Line[LINES-1][3]; char Temp[20], TempStr[20], Found, PrevChar, C; chtype ch; WINDOW *TagScreen; tTag *Tmp;  Attr = Window->_attrs; getyx(Window, y, x);  Color = (int)(WHITE << 4) + 8; for (i=0;i<LINES-1;i++) {  Line[i][0] = 0;  Line[i][1] = 0;  Line[i][2] = 0;  Found = 0;  PrevChar = ' ';  for (j=0;j<COLS-12 && !Found;j++){   for (k=0;k<12;k++)    Temp[k] = mvwinch(Window, i, j+k) & A_CHARTEXT;   if (j > 0) PrevChar = mvwinch(Window, i, j-1) & A_CHARTEXT;   Temp[12] = 0;   if (ValidName(Temp, TempStr) && isspace(PrevChar)){    Found = 1;    Line[i][0] = j;    Line[i][1] = strlen(TempStr);   }  } } TagScreen = dupwin(Window); Key = 0; i = 0; nl(); while (Key != '\e'){  textAttr(TagScreen, Color);  for (k=0;k<Line[i][1];k++){   ch = mvwinch(TagScreen, i, k+Line[i][0]) & A_CHARTEXT;   mvwaddch(TagScreen, i, k+Line[i][0], ch);  }  wmove(TagScreen, i, Line[i][1]);  clearok(TagScreen, TRUE);  redrawwin(TagScreen);  wrefresh(TagScreen);  Key = getEscChar();  switch(Key){  case ' ':    Line[i][2] ^= 1;    break;  case KEY_DOWN:     if (i < LINES-2){     WipeLine(Window, TagScreen, i, Line[i][0], Line[i][1], Line[i][2]);     i++;    }    break;  case KEY_UP:    if (i > 0){     WipeLine(Window, TagScreen, i, Line[i][0], Line[i][1], Line[i][2]);     i--;    }    break;  case KEY_RIGHT:    if (Line[i][0]+Line[i][1] < COLS){      WipeLine(Window, TagScreen, i, Line[i][0], Line[i][1], Line[i][2]);     Line[i][0]++;    }    break;  case KEY_LEFT:    if (Line[i][0] > 0){      WipeLine(Window, TagScreen, i, Line[i][0], Line[i][1], Line[i][2]);     Line[i][0]--;    }    break;  case KEY_HOME:    if (Line[i][1] > 0){      WipeLine(Window, TagScreen, i, Line[i][0], Line[i][1], Line[i][2]);     Line[i][1]--;    }    break;  case KEY_END:    if (Line[i][0]+Line[i][1] < COLS && Line[i][1] < 12){      WipeLine(Window, TagScreen, i, Line[i][0], Line[i][1], Line[i][2]);     Line[i][1]++;    }    break;  default:break;  } } for (i=0;i<LINES-1;i++){  if (Line[i][2]){   Tmp = new tTag;   for (j=0;j<Line[i][1];j++){    C = mvwinch(TagScreen, i, Line[i][0]+j) & A_CHARTEXT;    Tmp->Name[j] = C;   }   Tmp->Name[j+1] = 0;   TagList.Add(Tmp);   } } delwin(TagScreen); clearok(Window, TRUE); redrawwin(Window); wmove(Window, y, x); Window->_attrs = Attr; wrefresh(Window); nonl();}void MarkLine(WINDOW *Window, int y, int x, int Color){ chtype ch; int i;  for (i=x;i<x+12;i++){   ch = mvwinch(Window, y, i) & A_CHARTEXT;   textAttr(Window, Color);   mvwaddch(Window, y, i, ch); }}tTag *GetTag(int y, int x){ tTag *Tmp; int i;  Tmp = (tTag *)TagList.Base; for (i=1;i<y*(x+1);i++)  if (Tmp != NULL)   Tmp = (tTag *)Tmp->Next; return (Tmp);}void DrawTag(WINDOW *Window){ int i,j; tTag *Tmp; char TempStr[5];  wclear(Window); textAttr(Window, Integers[cMenu]); box(Window, SVLINE, SHLINE); textAttr(Window, Integers[cMenuText]); mvwaddstr(Window, 1,1, "Clear all"); mvwaddstr(Window, 2,1, "Delete tagged"); mvwaddstr(Window, 3,1, "Add entry"); mvwaddstr(Window, 4,1, "Edit entry"); mvwaddstr(Window, 5,1, "Untag"); mvwaddstr(Window, 6,1, "Del  remove"); mvwaddstr(Window, 7,1, "Space tag"); mvwaddstr(Window, 8,1, "+ Tag+13"); mvwaddstr(Window, 9,1, "- Tag+32"); mvwaddstr(Window, 10,1, "Tagged:"); textAttr(Window, Integers[cMenu]); wmove(Window, 1, 14); wvline(Window, SVLINE, LINES-3); wmove(Window, 1, 14+13); wvline(Window, SVLINE, LINES-3); wmove(Window, 1, 14+26); wvline(Window, SVLINE, LINES-3); wmove(Window, 1, 14+39); wvline(Window, SVLINE, LINES-3); wmove(Window, 1, 14+52); wvline(Window, SVLINE, LINES-3); textAttr(Window, WHITE); Tagged = 0; Tmp = (tTag *)TagList.Base; for (j=0;j<5;j++) for (i=0;i<LINES-3;i++){  if (Tmp != NULL){   mvwaddstr(Window, i+1, j*13+15, Tmp->Name);   if (Tmp->Tag){    Tagged++;    MarkLine(Window, i+1, j*13+15, Integers[cMenuHot]);   }   Tmp = (tTag *)Tmp->Next;  } } textAttr(Window, Integers[cMenuOptions]); sprintf(TempStr, "%03d", Tagged); mvwaddstr(Window, 10, 9, TempStr); textAttr(Window, WHITE);}void SendTags(){ int y, x, Key; char TempStr[200]; WINDOW *TagScreen; tTag *Tmp, *Next;  TagScreen = newwin(LINES-1, COLS, 0, 0); DrawTag(TagScreen); MarkLine(TagScreen, 1, 15, (int)((int)WHITE << 4)); wrefresh(TagScreen); Key = 0; y = 1; x = 0; while (Key != '\e'){   Key = getEscChar();   switch(Key){   case ' ':     Tmp = GetTag(y, x);     if (Tmp != NULL){      Tmp->Tag ^= 1;      if (Tmp->Tag){       MarkLine(TagScreen, y, x*13+15, Integers[cMenuHot]);       Tagged++;      }      else      {       Tagged--;       MarkLine(TagScreen, y, x*13+15, WHITE);      }     textAttr(TagScreen, Integers[cMenuOptions]);     sprintf(TempStr, "%03d", Tagged);     mvwaddstr(TagScreen, 10, 9, TempStr);     textAttr(TagScreen, WHITE);     if (Integers[TagAdvance]) goto TAGDOWN;     }     break;   case 'a':   case 'A':     Tmp = new tTag;     Tmp->Name[0] = 0;     TagList.Add(Tmp);     break;   case 'c':   case 'C':     DeleteTagList();     DrawTag(TagScreen);     redrawwin(TagScreen);     x = 0;     y = 1;     MarkLine(TagScreen, 1, 15, (int)((int)WHITE << 4));     wrefresh(TagScreen);     break;   case 'd':   case 'D':     Tmp = (tTag *)TagList.Base;     while (Tmp != NULL){      Next = (tTag *)Tmp->Next;      if (Tmp->Tag){       TagList.Del(Tmp);      }      Tmp = Next;     }     DrawTag(TagScreen);     redrawwin(TagScreen);     x = 0;     y = 1;     MarkLine(TagScreen, 1, 15, (int)((int)WHITE << 4));     wrefresh(TagScreen);     break;   case 'e':   case 'E':     Tmp = GetTag(y, x);     if (Tmp != NULL){      nl();      if (getstring(TagScreen, y, x*13+15, Tmp->Name, ValidEdit, "\e\n", 12, -1, TempStr) == '\n'){        strcpy(Tmp->Name, TempStr);        DrawTag(TagScreen);        wrefresh(TagScreen);      }      nonl();      MarkLine(TagScreen, y, x*13+15, (int)((int)WHITE << 4));     }     break;   case 'u':   case 'U':     Tmp = GetTag(y, x);     if (Tmp != NULL && Tmp->Tag){      Tmp->Tag = 0;      Tagged--;     }     textAttr(TagScreen, Integers[cMenuOptions]);     sprintf(TempStr, "%03d", Tagged);     mvwaddstr(TagScreen, 10, 9, TempStr);     textAttr(TagScreen, WHITE);     break;   case KEY_DC:     Tmp = GetTag(y, x);     if (Tmp != NULL)      TagList.Del(Tmp);     DrawTag(TagScreen);     MarkLine(TagScreen, y, x*13+15, (int)((int)WHITE << 4));     redrawwin(TagScreen);     wrefresh(TagScreen);     break;   case '+':     Tmp = (tTag *)TagList.Base;     while (Tmp != NULL){      if (Tmp->Tag){       mwriteblock(Tmp->Name, strlen(Tmp->Name));       msendchar(13);      }      Tmp = (tTag *)Tmp->Next;     }     break;   case '-':     Tmp = (tTag *)TagList.Base;     while (Tmp != NULL){      if (Tmp->Tag){       mwriteblock(Tmp->Name, strlen(Tmp->Name));       msendchar(32);      }      Tmp = (tTag *)Tmp->Next;     }     break;   case KEY_DOWN:   TAGDOWN:     if (y<LINES-3){      Tmp = GetTag(y, x);      if (Tmp != NULL)      if (Tmp->Tag)       MarkLine(TagScreen, y, x*13+15, Integers[cMenuHot]);      else       MarkLine(TagScreen, y, x*13+15, WHITE);      else       MarkLine(TagScreen, y, x*13+15, WHITE);      y++;      MarkLine(TagScreen, y, x*13+15, (int)((int)WHITE << 4));     }     break;   case KEY_UP:     if (y>1){      Tmp = GetTag(y, x);      if (Tmp != NULL)      if (Tmp->Tag)       MarkLine(TagScreen, y, x*13+15, Integers[cMenuHot]);      else       MarkLine(TagScreen, y, x*13+15, WHITE);      else       MarkLine(TagScreen, y, x*13+15, WHITE);      y--;      MarkLine(TagScreen, y, x*13+15, (int)((int)WHITE << 4));     }     break;   case KEY_RIGHT:     if (x<4){      Tmp = GetTag(y, x);      if (Tmp != NULL)      if (Tmp->Tag)       MarkLine(TagScreen, y, x*13+15, Integers[cMenuHot]);      else       MarkLine(TagScreen, y, x*13+15, WHITE);      else       MarkLine(TagScreen, y, x*13+15, WHITE);      x++;      MarkLine(TagScreen, y, x*13+15, (int)((int)WHITE << 4));     }     break;   case KEY_LEFT:     if (x>0){      Tmp = GetTag(y, x);      if (Tmp != NULL)      if (Tmp->Tag)       MarkLine(TagScreen, y, x*13+15, Integers[cMenuHot]);      else       MarkLine(TagScreen, y, x*13+15, WHITE);      else       MarkLine(TagScreen, y, x*13+15, WHITE);      x--;      MarkLine(TagScreen, y, x*13+15, (int)((int)WHITE << 4));     }     break;   case KEY_NPAGE:     Tmp = GetTag(y, x);     if (Tmp != NULL)     if (Tmp->Tag)      MarkLine(TagScreen, y, x*13+15, Integers[cMenuHot]);     else      MarkLine(TagScreen, y, x*13+15, WHITE);     else      MarkLine(TagScreen, y, x*13+15, WHITE);     y = LINES-3;     MarkLine(TagScreen, y, x*13+15, (int)((int)WHITE << 4));     break;   case KEY_PPAGE:     Tmp = GetTag(y, x);     if (Tmp != NULL)     if (Tmp->Tag)      MarkLine(TagScreen, y, x*13+15, Integers[cMenuHot]);     else      MarkLine(TagScreen, y, x*13+15, WHITE);     else      MarkLine(TagScreen, y, x*13+15, WHITE);     y = 1;     MarkLine(TagScreen, y, x*13+15, (int)((int)WHITE << 4));     break;   case KEY_HOME:     Tmp = GetTag(y, x);     if (Tmp != NULL)     if (Tmp->Tag)      MarkLine(TagScreen, y, x*13+15, Integers[cMenuHot]);     else      MarkLine(TagScreen, y, x*13+15, WHITE);     else      MarkLine(TagScreen, y, x*13+15, WHITE);     y = 1;     x = 0;     MarkLine(TagScreen, y, x*13+15, (int)((int)WHITE << 4));     break;   case KEY_END:     Tmp = GetTag(y, x);     if (Tmp != NULL)     if (Tmp->Tag)      MarkLine(TagScreen, y, x*13+15, Integers[cMenuHot]);     else      MarkLine(TagScreen, y, x*13+15, WHITE);     else      MarkLine(TagScreen, y, x*13+15, WHITE);     y = LINES-3;     x = 4;     MarkLine(TagScreen, y, x*13+15, (int)((int)WHITE << 4));     break;   default:break;   }   wrefresh(TagScreen); } delwin(TagScreen); clearok(Screen, TRUE); redrawwin(Screen); wrefresh(Screen);}void DumpEmu(){ int i;  for (i=0;i<Emupos;i++) {  swaddch(Screen, Emu[i]);  Emu[i] = 0; } Emupos = 0;}void Help(){ WINDOW *Window;  Window = newwin(LINES-1, COLS, 0, 0);  curs_set(0); textAttr(Window, Integers[cHelp]); wbkgdset(Window, Window->_attrs); wclear(Window); box(Window, SVLINE, SHLINE); mvwaddstr(Window, 1, 1, "Help"); mvwaddstr(Window, 2, 1, "Scrollback"); mvwaddstr(Window, 3, 1, "Clear screen"); mvwaddstr(Window, 4, 1, "Phonebook"); mvwaddstr(Window, 5, 1, "Local Echo"); mvwaddstr(Window, 6, 1, "Hangup"); mvwaddstr(Window, 7, 1, "Image save"); mvwaddstr(Window, 8, 1, "Capture"); mvwaddstr(Window, 9, 1, "Send tags"); mvwaddstr(Window, 10, 1, "Options"); mvwaddstr(Window, 11, 1, "Device change"); mvwaddstr(Window, 12, 1, "Quit"); mvwaddstr(Window, 13, 1, "Strip high"); mvwaddstr(Window, 14, 1, "Terminal type"); mvwaddstr(Window, 15, 1, "Tag files"); mvwaddstr(Window, 16, 1, "Quit + reset"); mvwaddstr(Window, 17, 1, "EMSI chat"); mvwaddstr(Window, 18, 1, "Send break"); textAttr(Window, Integers[cHelpBold]); if (Integers[EscType] == 1) {   mvwaddstr(Window, 1, 20, "Ctrl-Alt-A");   mvwaddstr(Window, 2, 20, "Ctrl-Alt-B");   mvwaddstr(Window, 3, 20, "Ctrl-Alt-C");   mvwaddstr(Window, 4, 20, "Ctrl-Alt-D");   mvwaddstr(Window, 5, 20, "Ctrl-Alt-E");   mvwaddstr(Window, 6, 20, "Ctrl-Alt-H");   mvwaddstr(Window, 7, 20, "Ctrl-Alt-I");   mvwaddstr(Window, 8, 20, "Ctrl-Alt-L");   mvwaddstr(Window, 9, 20, "Ctrl-Alt-N");   mvwaddstr(Window, 10, 20, "Ctrl-Alt-W");   mvwaddstr(Window, 11, 20, "Ctrl-Alt-P");   mvwaddstr(Window, 12, 20, "Ctrl-Alt-Q");   mvwaddstr(Window, 13, 20, "Ctrl-Alt-R");   mvwaddstr(Window, 14, 20, "Ctrl-Alt-T");   mvwaddstr(Window, 15, 20, "Ctrl-Alt-V");   mvwaddstr(Window, 16, 20, "Ctrl-Alt-X");   mvwaddstr(Window, 17, 20, "Ctrl-Alt-Y");   mvwaddstr(Window, 18, 20, "Ctrl-Alt-Z"); } else {   mvwaddstr(Window, 1, 20, "Alt-A");   mvwaddstr(Window, 2, 20, "Alt-B");   mvwaddstr(Window, 3, 20, "Alt-C");   mvwaddstr(Window, 4, 20, "Alt-D");   mvwaddstr(Window, 5, 20, "Alt-E");   mvwaddstr(Window, 6, 20, "Alt-H");   mvwaddstr(Window, 7, 20, "Alt-I");   mvwaddstr(Window, 8, 20, "Alt-L");   mvwaddstr(Window, 9, 20, "Alt-N");   mvwaddstr(Window, 10, 20, "Alt-W");   mvwaddstr(Window, 11, 20, "Alt-P");   mvwaddstr(Window, 12, 20, "Alt-Q");   mvwaddstr(Window, 13, 20, "Alt-R");   mvwaddstr(Window, 14, 20, "Alt-T");   mvwaddstr(Window, 15, 20, "Alt-V");   mvwaddstr(Window, 16, 20, "Alt-X");   mvwaddstr(Window, 17, 20, "Alt-Y");   mvwaddstr(Window, 18, 20, "Alt-Z"); } textAttr(Window, Integers[cHelp]); mvwaddstr(Window, 5, 40, "Termite v0.2.0b1, 8-19-97"); mvwaddstr(Window, 7, 40, "Programmer:"); mvwaddstr(Window, 10, 40, "Credits:"); textAttr(Window, Integers[cHelpBold]); mvwaddstr(Window, 8, 45, "Nadav Cohen"); mvwaddstr(Window, 11, 45, "Nimrod Zimerman"); mvwaddstr(Window, 12, 45, "Gil Megidish"); mvwaddstr(Window, 13, 45, "Shay Cohen"); mvwaddstr(Window, 14, 45, "Nimrod Carmi"); wrefresh(Window); getEscChar(); delwin(Window); clearok(Screen, TRUE); redrawwin(Screen); wrefresh(Screen); curs_set(1);}void InitVars(){ textAttr(Screen, Integers[cTerminal]); CurrentTerm.LocalEcho = Integers[GlobalLocalEcho]; CurrentTerm.StripHigh = Integers[GlobalStripHigh]; CurrentTerm.RcvdBSdest = Integers[BSdest]; CurrentTerm.Baud = Integers[Bauds1+CurrentTerm.Device-1]; CurrentTerm.Parity = Integers[Parities1+CurrentTerm.Device-1]; CurrentTerm.Stopbits = Integers[Stopbits1+CurrentTerm.Device-1]; CurrentTerm.Databits = Integers[Databits1+CurrentTerm.Device-1]; Warned = 0; strcpy(RingStr, Strings[Ring]); ReplaceM(RingStr); RING[0]=strlen(RingStr); RING[1]=0;}void DoTerminal(int Device){ int i, Key, Quit, j, k; char EmulationReturn[3]; time_t Time, LastTime; int LastStatus; char Temp[250]; int y, x; OpenLogfile(); ClosePort = 1; LastStatus = linestatus(); Printlogln("Start"); if (CAR){  Online = 1;  Offline = 0;  Printlogln("Carrier detected"); } else {  Online = 0;  Offline = 1; } textAttr(Screen, Integers[cTerminal]); wclear(Screen); wmove(Screen, 0, 0); time(&Starttime); CurrentTerm.Device = Device; CurrentTerm.Parity = Integers[Parities1+Device-1]; CurrentTerm.Baud = Integers[Bauds1+Device-1]; CurrentTerm.Stopbits = Integers[Stopbits1+Device-1]; CurrentTerm.Databits = Integers[Databits1+Device-1]; strncpy(CurrentTerm.Name+1,"Manual mode", 11); CurrentTerm.Name[0] = 11; CurrentTerm.Terminal = 0; CurrentTerm.User = 1; CurrentTerm.LocalEcho = Integers[GlobalLocalEcho]; CurrentTerm.StripHigh = Integers[GlobalStripHigh]; CurrentTerm.RcvdBSdest = Integers[BSdest]; nl(); PrintStatus(); nonl(); CurrentBufferFilled = 0; wmove(Screen, 0, 0); waddstr(Screen, "Termite version 0.2.0b1, Copyright (C) 1996-1997 Nadav Cohen\n"); waddstr(Screen, "Termite comes with ABSOLUTELY NO WARRANTY; for details read COPYING.\n"); waddstr(Screen, "This is free software, and you are welcome to redistribute it\n"); waddstr(Screen, "under certain conditions; read COPYING for details.\n\n"); waddstr(Screen, "PLEASE REPORT BUGS TO: nadavc@ibm.net\n"); if (Offline || Integers[ForceInit])

⌨️ 快捷键说明

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