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

📄 phone.c

📁 功能丰富的串口通讯程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    j=DialEntry(Tmp);    if (j == '\e'){     hangup();     i = TermHeader.Num;     Tags = 0;    }else        if (j == '\n'){      i = TermHeader.Num;     Tags = 0;    }else    if (j == ' ') hangup();    else    {     if (!CAR && !ConnectMatch && Integers[DialDelay] > 0){      j = Integers[DialDelay];      textAttr(PhoneScreen, Integers[cMenuText]);      mvwaddstr(PhoneScreen, 2, 50, "Delay ");      while (j-->0){      sprintf(Temp, "%d       ", j);      textAttr(PhoneScreen, Integers[cMenuTextBold]);      mvwaddstr(PhoneScreen, 2, 56, Temp);      wrefresh(PhoneScreen);      if (chwait() == TRUE) j=0;      sleep(1);     }     }    }   }   if (i != TermHeader.Num+1){    if (Tmp->Next == NULL) i = TermHeader.Num + 1;    else     Tmp = (tTermPhoneRec *)Tmp->Next;   }  } } ShowTerm(); if (CAR || ConnectMatch){   DialerConnect = 1;  if (Tmp->Prev != NULL) Tmp = (tTermPhoneRec *)Tmp->Prev;  CurrentTerm = *Tmp;  CurrentEntry = Tmp;  Tmp->Connects++;  CurrentTerm.Stopbits--;  if (CurrentTerm.Device == 0) CurrentTerm.Device = Integers[DefaultDevice];  if (CurrentTerm.Device > 4) CurrentTerm.Device = Integers[DefaultDevice];  if (WhichBook == 0)   CurrentTerm.Terminal = TranslateToTerminate[Tmp->Terminal];  if (WhichBook == 1)   CurrentTerm.Terminal = TranslateToTelix[Tmp->Terminal];  strcpy(TempStr,"Phonebook: ");  PasToChar(Tmp->Name, Temp);  strcat(TempStr,Temp);  Printlogln(TempStr);  strcpy(TempStr,"Phone number: ");  PasToChar(Tmp->Number, Temp);  strcat(TempStr,Temp);  Printlogln(TempStr);  PasToChar(Tmp->Capture, Temp);  if (strlen(Temp) > 0 && Integers[AutoOpenCapture])   OpenCaptureFile(PhoneScreen, &Temp[0]);/*  if (Whichbook == 1){   time(&t);   Time = localtime(&t);   sprintf(Tmp, "%02d%02d%02d", Time->tm_mday, Time->tm_mon, Time->tm_year);  }*/  SavePhonebook(); } nonl();}void ManualDial(){ tWindow *Win; int Center, Exit, i; char Temp[20]; tTermPhoneRec *Tmp; Tmp = (tTermPhoneRec *)PhoneBook->Base; EditEntry(Tmp); Tmp->Tag = 1; Dialer(0); Tmp->Tag = 0;}void CommandLineDialer(){ tTermPhoneRec *Tmp; char Temp[50], i;  Tmp = (tTermPhoneRec *)PhoneBook->Base->Next; for (i = 0; i < strlen(NameOfDialEntry); i++)  *(NameOfDialEntry+i) = tolower(*(NameOfDialEntry+i)); while (Tmp != NULL){  for (i = 0; i < Tmp->Name[0]; i++)   Temp[i] = tolower(Tmp->Name[i+1]);  Temp[i] = 0;  if (strstr(Temp, NameOfDialEntry) != NULL)   Tmp->Tag = 1;  Tmp = (tTermPhoneRec *)Tmp->Next; }}void CommandLineIndexDialer(){ tTermPhoneRec *Tmp; int i;  Tmp = (tTermPhoneRec *)PhoneBook->Base->Next; for (i = 1; i < DialIndex && Tmp != NULL; i++)  Tmp = (tTermPhoneRec *)Tmp->Next; if (Tmp != NULL) Tmp->Tag = 1;}void MakeDefaultPhonebook(){ nl(); if (ChooseYesno(PhoneScreen, "Make this the default phonebook?")){   Strings[Phonebook] = (char *)realloc(Strings[Phonebook], strlen(CurrentPhonebook)+1);   strcpy(Strings[Phonebook], CurrentPhonebook);   Integers[PhoneType] = WhichBook; } nonl();}void ChangePhone(){ char Temp[256], CurrentDir[256], *FileName; int Key, Which, Center, y, x, Attr; tWindow *Win; tMenu *Menu; tTermPhoneRec *Tmp;  FileMgr(&FileName, Strings[PhonePath], 0); curs_set(0);  if (strlen(FileName) > 0) { Attr = PhoneScreen->_attrs; getyx(PhoneScreen, y, x); Center = findCenter(0, COLS, 16);  Win = new tWindow(PhoneScreen, Center, (LINES-1)/2-1, Center+19,(LINES-1)/2+3, Integers[cMenu] >> 4,            Integers[cMenu] % 16); Win->Frame(1, Integers[cMenu]); Win->Headline(" Which phonebook? ", Integers[cMenuTitle]); Menu = new tMenu(PhoneScreen, Integers[cMenu], Integers[cMenuHot], Integers[cMenuBar], Integers[cMenuText],              ALIGNMID); Menu->Add("~T~erminate", Center+1, Center+19, (LINES-1)/2); Menu->Add("T~e~lix", Center+1, Center+19, (LINES-1)/2+1); Menu->Add("~C~ancel", Center+1, Center+19, (LINES-1)/2+2); Menu->Focus = 0; Menu->Show(); wrefresh(PhoneScreen); Key = 0; nl();  while (Key != '\n'){  Key = getEscChar();  if (Menu->GetInput(Key) > 127) Key = '\n';  wrefresh(PhoneScreen); }  nonl(); Which = Menu->Focus;  delete Menu; delete Win;  wmove(PhoneScreen, y, x); PhoneScreen->_attrs = Attr; clearok(PhoneScreen, TRUE); redrawwin(PhoneScreen);  getcwd(CurrentDir, 255); strcat(CurrentDir, "/"); nl(); switch(Which){ case 0:   delete PhoneBook;   PhoneBook = NULL;   WhichBook = 0;   CurrentPhonebook = (char *)realloc(CurrentPhonebook, strlen(CurrentDir)+strlen(FileName)+1);   strcpy(CurrentPhonebook, CurrentDir);   strcat(CurrentPhonebook, FileName);   if (ReadTerminate(CurrentPhonebook, PhoneScreen) < 0) WindowError(PhoneScreen, "Unable to open phonebook");   else if (Integers[AskCurrentPhone]) MakeDefaultPhonebook();   break; case 1:   delete PhoneBook;   PhoneBook = NULL;   WhichBook = 1;   CurrentPhonebook = (char *)realloc(CurrentPhonebook, strlen(CurrentDir)+strlen(FileName)+1);   strcpy(CurrentPhonebook, CurrentDir);   strcat(CurrentPhonebook, FileName);   if (ReadTelix(CurrentPhonebook) < 0) WindowError(PhoneScreen, "Unable to open phonebook");   else if (Integers[AskCurrentPhone]) MakeDefaultPhonebook();   break; default:break; } free(FileName); if (PhoneBook == NULL){   PhoneBook = new tList;   Strings[Phonebook] = (char *)realloc(Strings[Phonebook], 12);   strcpy(Strings[Phonebook], "termite.fon");   CurrentPhonebook = (char *)malloc(strlen(Strings[Phonebook])+1);   strcpy(CurrentPhonebook, Strings[Phonebook]);   Tmp = new tTermPhoneRec;   CreateClearEntry(Tmp);   strncpy(Tmp->Name+1,"Manual Mode", 11);   Tmp->Name[0] = 11;   PhoneBook->Add(Tmp);   Tmp = new tTermPhoneRec;   memcpy(Tmp, PhoneBook->Base, sizeof(tTermPhoneRec));   strncpy(Tmp->Name+1,"123", 3);   Tmp->Name[0] = 3;   PhoneBook->Add(Tmp);   TermHeader.Num = 1;   TermHeader.RangeStart = 1;   TermHeader.RangeStop = 1;   TermHeader.ScrPos = 1;   TermHeader.PhonePos = 1;    TermHeader.WritePos = 1;   TermHeader.PhonePos = 1;   TermCurrentPos = TermLastPos = (tTermPhoneRec *)PhoneBook->Base->Next;   TermCurrentNumber = 1;   TermHeader.ScrPos = 0;   TermLastScrPos = 0;   WhichBook = 0; } } nonl();}void TermPhoneKey(int ch){ int Refresh = 0, i, j; tListObj *ListTmp; tTermPhoneRec *Tmp; DialerConnect = 0; switch(ch){ // ^I case 9:   ListTmp = TermCurrentPos;   for (i=0;i<TermHeader.ScrPos;i++)    ListTmp = ListTmp->Next;   Tmp = new tTermPhoneRec;   CreateClearEntry(Tmp);   Tmp->Next = NULL;   Tmp->Prev = NULL;   PhoneBook->Insert(ListTmp, (tListObj *)Tmp);   TermHeader.Num++;   Refresh = 1;   break; case KEY_DC:   Tmp = (tTermPhoneRec *)TermCurrentPos;   for (i=0;i<TermHeader.ScrPos;i++)     if (Tmp != NULL) Tmp = (tTermPhoneRec *)Tmp->Next;   if (Tmp != NULL && TermHeader.Num > 1){     if (Tmp == TermCurrentPos) TermCurrentPos = (tTermPhoneRec *)Tmp->Next;     PhoneBook->Del(Tmp);     TermHeader.Num--;   }   Refresh = 1;   break; case KEY_DOWN:  KEYDOWN:   if (TermCurrentNumber+TermHeader.ScrPos<TermHeader.Num)   {    TermHeader.ScrPos++;    Refresh = 2;    if (TermHeader.ScrPos == 19){     TermCurrentPos=(tTermPhoneRec *)TermCurrentPos->Next;     TermHeader.ScrPos = 18;     TermCurrentNumber++;     Refresh = 1;    }   }   break; case KEY_UP:    TermHeader.ScrPos--;    Refresh = 2;    if (TermHeader.ScrPos == -1){     if (TermCurrentNumber > 1){      TermCurrentPos=(tTermPhoneRec *)TermCurrentPos->Prev;      TermCurrentNumber--;      Refresh = 1;     }     TermHeader.ScrPos = 0;   }   break; case KEY_LEFT:   if (TermHeader.WritePos>1)    TermHeader.WritePos--;   else TermHeader.WritePos = 9;   Refresh = 1;   break; case KEY_RIGHT:   if (TermHeader.WritePos<9)    TermHeader.WritePos++;   else TermHeader.WritePos = 1;   Refresh = 1;   break;  case KEY_HOME:   TermCurrentPos = (tTermPhoneRec *)PhoneBook->Base->Next;   TermCurrentNumber = 1;   TermHeader.ScrPos = 0;   Refresh = 1;   break; case KEY_END: KEYEND:   if (TermHeader.Num > 17){    TermCurrentPos = (tTermPhoneRec *)PhoneBook->Last;    for (i=0;i<18;i++)     TermCurrentPos = (tTermPhoneRec *)TermCurrentPos->Prev;    TermCurrentNumber = TermHeader.Num-18;    TermHeader.ScrPos = 18;   }   else{    TermCurrentPos = (tTermPhoneRec *)PhoneBook->Base->Next;    TermCurrentNumber = 1;    TermHeader.ScrPos = TermHeader.Num-1;   }   Refresh = 1;   break; case KEY_NPAGE:   if (TermCurrentNumber + 18 < TermHeader.Num){     TermCurrentNumber += 18;     for (i=0;i<18;i++)      TermCurrentPos = (tTermPhoneRec *)TermCurrentPos->Next;   }   else goto KEYEND;   Refresh = 1;   break; case KEY_PPAGE:   if (TermCurrentNumber - 18 > 1){     TermCurrentNumber -= 18;     for (i=0;i<18;i++)      TermCurrentPos = (tTermPhoneRec *)TermCurrentPos->Prev;   }   else {     TermCurrentPos = (tTermPhoneRec *)PhoneBook->Base->Next;     TermCurrentNumber = 1;     TermHeader.ScrPos = 0;   }   Refresh = 1;   break; case 'e': case 'E':   Tmp = TermCurrentPos;   for (i=0;i<TermHeader.ScrPos;i++)    Tmp = (tTermPhoneRec *)Tmp->Next;   if (Tmp != NULL){     EditEntry(Tmp);    ShowTerm();    Refresh = 1;   }   break; case 'f': case 'F':   SearchTerm();   break; case 'v': case 'V':   SavePhonebook();   break; case 'g': case 'G':   TermGlobalDefs();   break; case 's': case 'S':   Sort();   TermHeader.PhonePos = 1;   TermCurrentPos = TermLastPos = (tTermPhoneRec *)PhoneBook->Base->Next;   TermCurrentNumber = 1;   TermHeader.ScrPos = 0;   TermLastScrPos = 0;   Refresh = 1;   break; case '\r': case '\n':   j = 0;   Tmp = (tTermPhoneRec *)PhoneBook->Base->Next;   for (i=0;i<TermHeader.Num && j == 0;i++)   {    if (Tmp->Tag == 1) j = 1;    Tmp = (tTermPhoneRec *)Tmp->Next;   }   if (j == 0){     Tmp = TermCurrentPos;     for (i=0;i<TermHeader.ScrPos;i++)      Tmp = (tTermPhoneRec *)Tmp->Next;     if (Tmp != NULL) Tmp->Tag = 1;   }   nonl();   Dialer(TermHeader.Num);   nl();   if (j == 0){     Tmp = TermCurrentPos;     for (i=0;i<TermHeader.ScrPos;i++)      Tmp = (tTermPhoneRec *)Tmp->Next;     if (Tmp != NULL) Tmp->Tag = 0;   }   Refresh = 1;   break;   case 'd': case 'D':   nonl();   Dialer(TermHeader.Num);   nl();   Refresh = 1;   break; case 'm': case 'M':   ManualDial();   ShowTerm();   Refresh = 1;   break; case 'p': case 'P':   ChangePhone();   ShowTerm();   Refresh = 1;   break; case 'a': case 'A':   MakeDefaultPhonebook();   Refresh = 1;   break; case ' ':   Tmp = (tTermPhoneRec *)TermCurrentPos;   for (i=0;i<TermHeader.ScrPos;i++)    Tmp = (tTermPhoneRec *)Tmp->Next;   Tmp->Tag = Tmp->Tag ^ 1;   Refresh = 2;   if (Integers[TagAdvance]) goto KEYDOWN;   break; case '+':   Tmp = (tTermPhoneRec *)PhoneBook->Base->Next;   for (i=0;i<TermHeader.Num;i++)   {    Tmp->Tag = 1;    Tmp = (tTermPhoneRec *)Tmp->Next;   }   Refresh = 1;   break; case '-':   Tmp = (tTermPhoneRec *)PhoneBook->Base->Next;   for (i=0;i<TermHeader.Num;i++)   {    Tmp->Tag = 0;    Tmp = (tTermPhoneRec *)Tmp->Next;   }   Refresh = 1;   break; case '*':   Tmp = (tTermPhoneRec *)PhoneBook->Base->Next;   for (i=0;i<TermHead

⌨️ 快捷键说明

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