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

📄 sedial.c

📁 功能丰富的串口通讯程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * This file is part of the Seyon, Copyright (c) 1992-1993 by Muhammad M. * Saggaf. All rights reserved. * * See the file COPYING (1-COPYING) or the manual page seyon(1) for a full * statement of rights and permissions for this program. */#include <signal.h>#include <setjmp.h>#include <sys/types.h>#include <sys/wait.h>#include <math.h>#include <X11/Intrinsic.h>#include <X11/StringDefs.h>#include <X11/Shell.h>#include <X11/Xaw/Command.h>#include <X11/Xaw/Dialog.h>#include <X11/Xaw/Viewport.h>#include "MultiList.h"#include "seyon.h"#include "SeDecl.h"#include "SeSig.h"extern char    *get_word();extern int      IconifyShell(),                MdmReadLine(),                MdmTimedWaitFor();extern int      ConvertStringToIntArray();int             ReadParsePhoneFile();void            DoDial(),                ExecDial(),                DismissDirectory(),                DialerEnd(),                HighlightItems(),                ClearAllItems(),                ManualDial(),                DoManualDial(),                ReReadPhoneFile();struct _ddItem {  char            number[LIT_BUF];  char            name[LIT_BUF];  char            baud[10];  int             bits;  int             parity;  int             stopBits;  char            prefix[LIT_BUF];  char            suffix[LIT_BUF];  char            script[SM_BUF];};struct _ddItem *ddItems[MAX_ENT];Boolean         dialDirUp = False,                manualDial = False;char           *script_file,                phone_number[SM_BUF] = "",                dialMsg[SM_BUF];int             dialTime,                dialTry,                current_item,                ddCurItemIndex;jmp_buf         dial_env;XfwfMultiListWidget mlw;#define BUGGY_MULTILIST_WIDGET 1/*---------------------------------------------------------------------------+| TopDial - the top routine for the dialing directory.+---------------------------------------------------------------------------*/voidTopDial(widget, clientData)     Widget          widget;	 XtPointer       clientData;{  void            EditFile();  static Widget          popup, view, list;  Widget                 form, mBox, uBox, lBox;  static char            phoneFile[REG_BUF];  static String          disItems[MAX_ENT+1] = {NULL};  if (clientData == NULL && dialDirUp)	{XMapRaised(XtDisplay(widget), XtWindow(popup)); return;}	   if (disItems[0] == NULL) {    strcpy(phoneFile, qres.phoneFile);    if (ReadParsePhoneFile(phoneFile, disItems) < 0) return;	form = XtParent(widget);	popup = SeAddPopupWG("directory", widget, form, form, 0,						 SeWidgetHeight(form), True, True);	mBox = AddPaned("mBox", popup);/*	uBox = AddBox("uBox", mBox);*/	uBox = SeAddForm("uBox", mBox);	lBox = AddBox("lBox", mBox);		view = XtCreateManagedWidget("view", viewportWidgetClass, uBox, NULL, 0);	list = XtVaCreateManagedWidget("list", xfwfMultiListWidgetClass,								   view, XtNlist, disItems, NULL);	mlw = (XfwfMultiListWidget)list;	SeSetViewportDimFromMultiList(view, list, 10);	XtAddCallback(list, XtNcallback, DoDial, NULL);		AddButton("dismiss", lBox, DismissDirectory, NULL);	AddButton("ok", lBox, DoDial, NULL);	AddButton("manual", lBox, ManualDial, NULL);	AddButton("clear", lBox, ClearAllItems, NULL);	AddButton("default", lBox, HighlightItems, qres.defaultPhoneEntries);	AddButton("edit", lBox, EditFile, (XtPointer)phoneFile);	AddButton("reread", lBox, ReReadPhoneFile, (XtPointer)disItems);	XtRealizeWidget(popup);  }#if BUGGY_MULTILIST_WIDGET  else {	XtDestroyWidget(list);	list = XtVaCreateManagedWidget("list", xfwfMultiListWidgetClass,								   view, XtNlist, disItems, NULL);	mlw = (XfwfMultiListWidget)list;/*	SeSetViewportDimFromMultiList(view, list, 10);*/	XtAddCallback(list, XtNcallback, DoDial, NULL);	XtRealizeWidget(popup);  }#endif  if (clientData == NULL) {	XtPopup(popup, XtGrabNone);	dialDirUp = True;	if (qres.dialAutoStart) {	  qres.dialAutoStart = False;	  HighlightItems(widget, qres.defaultPhoneEntries);	  DoDial();	}  }  else {	  HighlightItems(widget, clientData);	  DoDial();	}}/* * DoDial: gets the first selected item and dials it. */voidDoDial(){  static XfwfMultiListReturnStruct *item;  ErrorIfBusy();  if ((item = XfwfMultiListGetHighlighted(mlw))->num_selected == 0)	SimpleError("No Item Selected");  ddCurItemIndex = item->selected_items[(current_item = 0)];  inhibit_child = True;  manualDial = False;  dialTry = 1;    PreProcessPrep();  ExecDial();}/* * executes the dialing as a forked process and communicates progress * to the main process */voidDialHandler(#if NeedFunctionPrototypes	      int signo,	      XtPointer client_data#endif){  void            DispatchActions(),                  RunScript();#if defined(SUNOS_3) || defined(Mips)  union wait      status;#else  int             status;#endif  Widget          dirWidget;  if (wait(&status) < 0)	{SePError("Dial wait failed"); return;}  XoAppIgnoreSignal(app_con, SIGCHLD);#if defined(SUNOS_3) || defined(Mips)  switch (status.w_retcode) {#else  switch (WEXITSTATUS(status)) {#endif  case 0:	if (manualDial) SeyonMessage("Connected");	else SeyonMessage(FmtString1("Connected to %s", 								 ddItems[ddCurItemIndex]->name));	UpdateStatusBox(NULL);	DispatchActions(ACTION_DISPATCH, qres.postConnectAction, genericWidget);	if ((dirWidget = XtNameToWidget(dialWidget, "directory"))) {	  RemoveCurrentItem();	  if (ddItems[ddCurItemIndex]->script[0] && !manualDial) {		linkflag = 1;		inhibit_child = False;		RunScript(NULL, ddItems[ddCurItemIndex]->script);		return;	  }	}    break;  case 1:    DialCirculate();    return;  case 2:	Beep();    SeyonMessage("Dial Aborted: Online");    break;  case 10:    SeyonMessage("Dialing Canceled by User");    break;  }  inhibit_child = False;  PostProcessPrep();}/* * KillDialHandler: signal handler for canceling the dialing process. */voidKillDialHandler(#if NeedFunctionPrototypes		  int signo#endif){  void MdmOFlush();  signal(SIGTERM, SIG_IGN);  MdmOFlush();  cancel_dial(0);  exit(10);}voidExecDial(){  int        DialNumber();  static int retStatus;  XoAppAddSignal(app_con, SIGCHLD, DialHandler, NULL);  if ((w_child_pid = SeFork())) return;  /* Child process */  signal(SIGTERM, KillDialHandler);  retStatus = DialNumber();  exit(retStatus);}/* * ReReadPhoneFile: updates the dialing directory from the phonebook file. */voidReReadPhoneFile(widget, disItems)     Widget          widget;     XtPointer       disItems[];{  Widget          dirWidget = XtParent(GetShell(widget));  ErrorIfBusy();  FreeList(disItems);  DestroyShell(widget);  dialDirUp = False;  TopDial(dirWidget, NULL);}/* * ManualDial: sets up the manual dialing popup. */voidManualDial(widget)     Widget          widget;{  Widget          popup;    ErrorIfBusy();  popup = GetShell(PopupDialogGetValue("manual_dial", widget, DoManualDial, 									   NULL, phone_number));  PopupCentered(popup, widget);}/* * action proc for manual dialing */voidmanual_dial_action_ok(widget)     Widget          widget;{  DoManualDial(widget);}/* * does manual dialing */voidDoManualDial(widget)     Widget          widget;{  void            ExecManualDial();  Widget          dialog = XtParent(widget);  char            phoneNumber[SM_BUF];  strcpy(phoneNumber, XawDialogGetValueString(dialog));  DestroyShell(dialog);  ExecManualDial(XtParent(GetShell(widget)), phoneNumber);}

⌨️ 快捷键说明

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