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