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

📄 gsmpb.cc

📁 对各种手机进行编程的工具包源码gsmlib 1.9版本。
💻 CC
📖 第 1 页 / 共 2 页
字号:
// *************************************************************************// * GSM TA/ME library// *// * File:    gsmpb.cc// *// * Purpose: phonebook management program// *// * Author:  Peter Hofmann (software@pxh.de)// *// * Created: 24.6.1999// *************************************************************************#ifdef HAVE_CONFIG_H#include <gsm_config.h>#endif#include <gsmlib/gsm_nls.h>#include <string>#ifdef WIN32#include <gsmlib/gsm_win32_serial.h>#else#include <gsmlib/gsm_unix_serial.h>#include <unistd.h>#endif#if defined(HAVE_GETOPT_LONG) || defined(WIN32)#include <getopt.h>#endif#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <gsmlib/gsm_me_ta.h>#include <gsmlib/gsm_util.h>#include <gsmlib/gsm_sorted_phonebook.h>#include <iostream>using namespace std;using namespace gsmlib;#ifdef HAVE_GETOPT_LONGstatic struct option longOpts[] ={  {"xonxoff", no_argument, (int*)NULL, 'X'},  {"phonebook", required_argument, (int*)NULL, 'p'},  {"init", required_argument, (int*)NULL, 'I'},  {"destination", required_argument, (int*)NULL, 'd'},  {"source", required_argument, (int*)NULL, 's'},  {"destination-backend", required_argument, (int*)NULL, 'D'},  {"source-backend", required_argument, (int*)NULL, 'S'},  {"baudrate", required_argument, (int*)NULL, 'b'},  {"charset", required_argument, (int*)NULL, 't'},  {"copy", no_argument, (int*)NULL, 'c'},  {"synchronize", no_argument, (int*)NULL, 'y'},  {"help", no_argument, (int*)NULL, 'h'},  {"version", no_argument, (int*)NULL, 'v'},  {"verbose", no_argument, (int*)NULL, 'V'},  {"indexed", no_argument, (int*)NULL, 'i'},  {(char*)NULL, 0, (int*)NULL, 0}};#else#define getopt_long(argc, argv, options, longopts, indexptr) \  getopt(argc, argv, options)#endif// insert those entries from sourcePhonebook into destPhonebook// that are not already present in destPhonebookvoid insertNotPresent(SortedPhonebookRef sourcePhonebook,                      SortedPhonebookRef destPhonebook,                      bool indexed, bool verbose){  for (SortedPhonebookBase::iterator i = sourcePhonebook->begin();       i != sourcePhonebook->end(); ++i)  {    pair<SortedPhonebookBase::iterator, SortedPhonebookBase::iterator> range;    if (indexed)    {      int index = i->index();      range = destPhonebook->equal_range(index);    }    else    {      string text = i->text();      range = destPhonebook->equal_range(text);    }    // do nothing if the entry is already present in the destination    bool alreadyPresent = false;    for (SortedPhonebookBase::iterator j = range.first;         j != range.second; ++j)    {      i->setUseIndex(indexed);      if (i->telephone() == j->telephone())      {        alreadyPresent = true;        break;      }    }    // ... else insert it    if (! alreadyPresent)    {      if (verbose)      {        cout << stringPrintf(_("inserting '%s' tel# %s"),                             i->text().c_str(), i->telephone().c_str());        if (indexed)          cout << stringPrintf(_(" (index #%d)"), i->index());        cout << endl;      }      i->setUseIndex(indexed);      destPhonebook->insert(*i); // insert    }  }}// update those entries in destPhonebook, that// - have the same name as one entry in destPhonebook// - but have a different telephone number// this is only done if the name in question is unique in the destPhonebook// the case of several entries having the same in the sourcePhonebook// is handled - only the first is considered for updatingvoid updateEntries(SortedPhonebookRef sourcePhonebook,                   SortedPhonebookRef destPhonebook,                   bool verbose){  bool firstLoop = true;  string lastText;  for (SortedPhonebookBase::iterator i = sourcePhonebook->begin();       i != sourcePhonebook->end(); ++i)  {    string text = i->text();    if (! firstLoop && text != lastText)    {      pair<SortedPhonebookBase::iterator,        SortedPhonebookBase::iterator> range =        destPhonebook->equal_range(text);            SortedPhonebookBase::iterator first = range.first;      if (first != destPhonebook->end() && range.second == ++first)      {                         // just one text in the destPhonebook        if (! (*range.first == *i)) // overwrite if different in destination        {          if (verbose)            cout << stringPrintf(_("updating '%s' tel# %s to new tel# %s"),                                 range.first->text().c_str(),                                 range.first->telephone().c_str(),                                 i->telephone().c_str())                 << endl;                    *range.first = *i;        }      }      lastText = text;    }    firstLoop = false;  }}// the same but for indexed phonebooksvoid updateEntriesIndexed(SortedPhonebookRef sourcePhonebook,                          SortedPhonebookRef destPhonebook,                          bool verbose){  for (SortedPhonebookBase::iterator i = sourcePhonebook->begin();       i != sourcePhonebook->end(); ++i)  {    int index = i->index();        SortedPhonebookBase::iterator j = destPhonebook->find(index);        if (j != destPhonebook->end())    {                           // index present in the destPhonebook      if (! (*j == *i))         // overwrite if different in destination      {        if (verbose)          cout << stringPrintf(_("updating '%s' tel# %s to new tel# %s"                                 "(index %d)"),                               j->text().c_str(),                               j->telephone().c_str(),                               i->telephone().c_str(), i->index())               << endl;                *j = *i;      }    }  }}// delete those entries from destPhonebook, that are not present// in sourcePhonebookvoid deleteNotPresent(SortedPhonebookRef sourcePhonebook,                      SortedPhonebookRef destPhonebook,                      bool indexed, bool verbose){  for (SortedPhonebookBase::iterator i = destPhonebook->begin();       i != destPhonebook->end(); ++i)  {    pair<SortedPhonebookBase::iterator, SortedPhonebookBase::iterator> range;    if (indexed)    {      int index = i->index();      range = sourcePhonebook->equal_range(index);    }    else    {      string text = i->text();      range = sourcePhonebook->equal_range(text);    }            bool found = false;    for (SortedPhonebookBase::iterator j = range.first;         j != range.second; ++j)    {      i->setUseIndex(indexed);      if (j->telephone() == i->telephone())      {        found = true;        break;      }    }    if (! found)    {      if (verbose)      {        cout << stringPrintf(_("deleting '%s' tel# %s"),                             i->text().c_str(), i->telephone().c_str());        if (indexed)          cout << stringPrintf(_(" (index #%d)"), i->index());        cout << endl;      }      destPhonebook->erase(i);#ifdef BUGGY_MAP_ERASE	  deleteNotPresent(sourcePhonebook, destPhonebook, indexed, verbose);	  return;#endif    }  }}// *** main programint main(int argc, char *argv[]){  try  {    // handle command line options    string destination;    string source;    string destinationBackend;    string sourceBackend;    string baudrate;    bool doSynchronize = true;

⌨️ 快捷键说明

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