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

📄 sedial.c

📁 功能丰富的串口通讯程序
💻 C
📖 第 1 页 / 共 2 页
字号:
voidExecManualDial(widget, phoneNumber)     Widget          widget;     String          phoneNumber;{  inhibit_child = True;  manualDial = True;  strcpy(phone_number, phoneNumber);  dialTry = 1;  PreProcessPrep();  ExecDial();}/* * DismissDirectory: dismisses the dialing directory. */voidDismissDirectory(widget, clientData)     Widget          widget;	 XtPointer       clientData;{  dialDirUp = False;  XtPopdown(GetShell(widget));}/* * ClearAllItems: clears all selected items. */voidClearAllItems(){  XfwfMultiListUnhighlightAll(mlw);}voidHighlightItems(widget, clientData)     Widget          widget;	 XtPointer       clientData;{  int dialEntries[MAX_ENT], i;  ConvertStringToIntArray((String*)clientData, dialEntries);  ClearAllItems();  for (i = 0; dialEntries[i]; i++)	XfwfMultiListHighlightItem(mlw, dialEntries[i] - 1); }/* * unhighlights (unselects) the current item */voidRemoveCurrentItem(){  static XfwfMultiListReturnStruct *item;  item = XfwfMultiListGetHighlighted(mlw);  XfwfMultiListUnhighlightItem(mlw, item->selected_items[current_item]);}/* * circulates to the next selected item and dials it */voidDialCirculate(){  static XfwfMultiListReturnStruct *item;  if (manualDial)    dialTry++;  else {    item = XfwfMultiListGetHighlighted(mlw);    if (++current_item == item->num_selected) {      current_item = 0;      dialTry++;    }	ddCurItemIndex = item->selected_items[current_item];  }  if (qres.dialRepeat && dialTry > qres.dialRepeat) {    SeyonMessage("Max Tries Exhausted");    inhibit_child = False;	PostProcessPrep();    return;  }  ExecDial();}voidGetStrField(raw, keyword, var, def)     String          raw,                     keyword,                     var,                     def;{  char           *ptr,                  buf[REG_BUF],                  wrd[REG_BUF];  if ((ptr = (char*)strstr(raw, keyword)) != NULL) {    ptr += strlen(keyword);    if (strncmp(ptr, "CURRENT", 3)) {      strcpy(buf, ptr);      GetWord(buf, wrd);      strcpy(var, wrd);    }    else      strcpy(var, "CURRENT");  }  else    strcpy(var, def);}voidGetIField(raw, keyword, var, def)     String          raw,                     keyword;     int            *var,                     def;{  char            svar[TIN_BUF],                  sdef[TIN_BUF];  sprintf(svar, "%d", *var);  sprintf(sdef, "%d", def);  GetStrField(raw, keyword, svar, sdef);  if (strcmp(svar, "CURRENT"))    *var = atoi(svar);  else    *var = 100;}#define DIALALARM 5/* * DialTimerHandler: alarm handler for dial timeout. */voidDialTimerHandler(dummy)     int             dummy;{  void            DialTimerHandler();  ProcRequest(SET_MESSAGE, FmtString("%s... %d", dialMsg, 									 dialTime -= DIALALARM, ""), "");  if (dialTime > 0) {    signal(SIGALRM, DialTimerHandler);    alarm(DIALALARM);  }  else {    signal(SIGALRM, SIG_DFL);    alarm(0);	strcpy(dialMsg, "TIMEOUT");    longjmp(dial_env, 1);  }}/* * DialNumber: this routine actually does the dialing. */intDialNumber(){  void            MdmIFlush();  char            modemResponse[SM_BUF],                 *itemName,                 *bufPtr,                  dialString[REG_BUF];  int             i,                  k;  if (setjmp(dial_env) != 0) {    signal(SIGALRM, SIG_DFL);    alarm(0);	ProcRequest(SET_MESSAGE, FmtString("%s: Sleeping (%ds)...", dialMsg, 									   qres.dialDelay, ""), "");    cancel_dial(0);    sleep(qres.dialDelay);    return 1;  }  k = ddCurItemIndex;  dialTime = qres.dialTimeOut;  if (!manualDial) {    itemName = ddItems[k]->name;    sprintf(dialString, "\r%s %s%s", ddItems[k]->prefix, ddItems[k]->number,	    ddItems[k]->suffix);    if (mbaud(ddItems[k]->baud) < 0)      se_warningf("invalid BPS value in dialing directory: %s",		  ddItems[k]->baud, "", "");    if (MdmSetGetCSize(ddItems[k]->bits) < 0)      se_warningf("invalid BITS value in dialing directory: %d",		  ddItems[k]->bits, "", "");    if (MdmSetGetParity(ddItems[k]->parity) < 0)      se_warningf("invalid PARITY value in dialing directory: %d",		  ddItems[k]->parity, "", "");    if (MdmSetGetStopBits(ddItems[k]->stopBits) < 0)      se_warningf("invalid STOPB value in dialing directory: %d",		  ddItems[k]->stopBits, "", "");  }  else {    itemName = phone_number;    sprintf(dialString, "\r%s %s%s", qres.dialPrefix, phone_number,	    qres.dialSuffix);  }  if (dialTry == 1)    sprintf(dialMsg, "Dialing %s", itemName);  else    sprintf(dialMsg, "Redialing:%d %s", dialTry, itemName);  ProcRequest(SET_MESSAGE, "Setting Up...", "");  if (qres.hangupBeforeDial && (qres.ignoreModemDCD || Online())) MdmHangup();  if (!qres.ignoreModemDCD && Online())	return 2;  ProcRequest(SET_MESSAGE, FmtString("%s... %d", dialMsg, dialTime, ""), "");  MdmIFlush();  MdmPutString(dialString);  MdmPurge();  signal(SIGALRM, DialTimerHandler);  alarm(DIALALARM);  while (1) {    MdmReadLine(modemResponse);    if (*(bufPtr = StripSpace(qres.connectString)) &&		strncmp(modemResponse, bufPtr, strlen(bufPtr)) == 0) {      alarm(0);      signal(SIGALRM, SIG_DFL);	  showf("\r\n%s", modemResponse, "", "");      return 0;    }    for (i = 0; i < 3; i++)      if (*(bufPtr = StripSpace(qres.noConnectString[i])) && 		  strncmp(modemResponse, bufPtr, strlen(bufPtr)) == 0) {		strcpy(dialMsg, modemResponse);		longjmp(dial_env, 1);	  }  }	/* while(1)... */}intReadParsePhoneFile(fname, disItems)     String          fname;     String          disItems[];{  FILE           *fp;  String          rawItems[MAX_ENT + 1];  char           *buf,                 *sHold,                  disItemsBuf[REG_BUF];  int             i,                  n,                  iHold;  if ((fp = open_file(fname, qres.defaultDirectory)) == NULL)    return -1;  ReadCommentedFile(fp, rawItems);  fclose(fp);  FreeList(ddItems);  for (i = 0; (buf = rawItems[i]); i++) {    /* Allocate the record */    ddItems[i] = XtNew(struct _ddItem);    /* Find the number */    GetWord(buf, ddItems[i]->number);/*    strcpy(ddItems[i]->number, GetFirstWord(buf));*/    /* Find the name */    GetWord((buf = lptr), ddItems[i]->name);/*    strcpy(ddItems[i]->name, GetNextWord());*/    /* Find other stuff */    GetStrField(buf, "BPS=", ddItems[i]->baud, qres.defaultBPS);    GetIField(buf, "BITS=", &(ddItems[i]->bits), qres.defaultBits);    GetIField(buf, "PARITY=", &(ddItems[i]->parity), qres.defaultParity);    GetIField(buf, "STOPB=", &(ddItems[i]->stopBits), qres.defaultStopBits);    GetStrField(buf, "PREFIX=", ddItems[i]->prefix, qres.dialPrefix);    GetStrField(buf, "SUFFIX=", ddItems[i]->suffix, qres.dialSuffix);    GetStrField(buf, "SCRIPT=", ddItems[i]->script, "\000");  }  ddItems[i] = (struct _ddItem *)NULL;  FreeList(rawItems);  FreeList(disItems);  for (n = 0; n < i; n++) {    sprintf(disItemsBuf, qres.dialDirFormat,	    ddItems[n]->name,	    ddItems[n]->number,	    strncmp((sHold = ddItems[n]->baud), "CUR", 3) ? sHold : "????",	    (iHold = ddItems[n]->bits) == 100 ? '?' : itoa(iHold),	    (iHold = ddItems[n]->parity) ? (iHold == 1 ? 'O' :					    (iHold == 2 ? 'E' : '?')) : 'N',	    (iHold = ddItems[n]->stopBits) == 100 ? '?' : itoa(iHold),	    strncmp((sHold = ddItems[n]->prefix), "CUR", 3) ?	    strcmp(sHold, qres.dialPrefix) ? 'P' : 'D' : '?',	    strncmp((sHold = ddItems[n]->suffix), "CUR", 3) ?	    strcmp(sHold, qres.dialSuffix) ? 'S' : 'D' : '?',	    ddItems[n]->script);    disItemsBuf[SM_BUF - 1] = '\0';    disItems[n] = XtNewString(disItemsBuf);  }  disItems[n] = NULL;  return 0;}

⌨️ 快捷键说明

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