📄 phone.c
字号:
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 + -