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

📄 semisc.c

📁 功能丰富的串口通讯程序
💻 C
字号:
/* * 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 <X11/Intrinsic.h>#include <X11/StringDefs.h>#include <X11/Xaw/Dialog.h>#include <signal.h>#include <sys/types.h>#include <sys/wait.h>#include "seyon.h"#include "SeDecl.h"#include "SeSig.h"extern int      scriptToMainPipe[];extern pid_t    readProcPid;void                SendBreak(),                terminal_refresh(),                LocalShell(),                ToggleCapture(),                kill_handler(),                DivertFile(),                DoDivertFile(),                ExecDivertFile(),                RunScript(),                DoRunScript(),                ExecScript();char            captureFile[REG_BUF];Boolean         capture = False;FILE           *cfp;voidTopMisc(widget)     Widget          widget;{  void            DialogDisplayFile(),                  DialogEditFile(),                  DialogRunScript();  Widget          popup,                  mBox,                  uBox,                  lBox,                  toggle;  ErrorIfBusy();  XtVaSetValues(widget, XtNsensitive, False, NULL);  popup = AddSimplePopup("misc", widget);  XtAddCallback(popup, XtNdestroyCallback, SetSensitiveOn, widget);  mBox = SeAddPaned("mBox", popup);  uBox = SeAddBox("uBox", mBox);  lBox = SeAddBox("lBox", mBox);  SeAddButton("break", uBox, SendBreak);  SeAddButton("refresh", uBox, terminal_refresh);  SeAddButton("suspend", uBox, LocalShell);  toggle = SeAddToggle("capture", uBox, ToggleCapture);  SeAddButton("divert", uBox, DivertFile);  AddButton("script", uBox, DialogRunScript, NULL);  AddButton("editFile", uBox, DialogEditFile, NULL);  AddButton("displayFile", uBox, DialogDisplayFile, NULL);  AddButton("dismiss", lBox, DestroyShell, NULL);  SeSetUnsetToggle(toggle, capture);  PositionShell(popup, widget, SHELLPOS_HWFH);  XtPopup(popup, XtGrabNone);}voidSendBreak(widget)     Widget          widget;{  ErrorIfBusy();  send_break();  SeyonMessage("BREAK Sent to Remote Host");}voidterminal_refresh(widget)     Widget          widget;{  ErrorIfBusy();  RestartTerminal();  SeyonMessage("Terminal Process Refreshed");}voidLocalShell(widget)     Widget          widget;{  ErrorIfBusy();  ShellCommand("");  SeyonMessage("Terminal Suspended");}voidToggleCapture(widget)     Widget          widget;{  ErrorIfBusy();  DoToggleCapture();  SeSetUnsetToggle(widget, capture);  RestartTerminal();}BooleanDoToggleCapture(){  if (capture) {    fclose(cfp);    capture = False;    SeyonMessage("Capture Turned OFF");  }  else {    if ((cfp = fopen(captureFile, "a")) == NULL) {      SeyonMessagef("Unable to Open Capture File `%s'", captureFile, "", "");      return False;    }    else {      capture = True;      SeyonMessage("Capture Turned ON");    }  }  return True;}/* * DivertFile: uploads a text file. */voidDivertFile(widget)     Widget          widget;{  ErrorIfBusy();  SePopupDialogGetStringE("divert_name", widget, DoDivertFile, NULL,			  NULL, True);}voiddivert_action_ok(widget)     Widget          widget;{  DoDivertFile(widget);}voidDoDivertFile(widget)     Widget          widget;{  Widget          dialog = XtParent(widget);  String          file_name;  file_name = XawDialogGetValueString(dialog);  DestroyShell(dialog);  ExecDivertFile(XtParent(GetShell(widget)), file_name);}voiddivert_handler(#if NeedFunctionPrototypes		int signo,		XtPointer client_data#endif){#if defined(SUNOS_3) || defined(Mips)  union wait status;#else  int             status;#endif  if (wait(&status) < 0)	{SePError("Divert wait failed"); return;}  XoAppIgnoreSignal(app_con, SIGCHLD);#if defined(SUNOS_3) || defined(Mips)  switch (status.w_retcode) {#else  switch (WEXITSTATUS(status)) {#endif  case 0:    SeyonMessage("Text Upload Successful");    break;  case 10:    SeyonMessage("Text Upload Canceled");    break;  }  inhibit_child = False;  PostProcessPrep();}voidkilldivert_handler(#if NeedFunctionPrototypes		    int signo#endif){  signal(SIGTERM, SIG_IGN);  if (readProcPid && kill(readProcPid, SIGTERM) == 0)	while(wait((int*)0) < 0);  exit(10);}voidExecDivertFile(widget, file_name)     Widget          widget;     String          file_name;{  char            fullname[REG_BUF];  FILE           *fp;  int             c;  expand_fname(file_name, fullname);  if ((fp = fopen(fullname, "r")) == NULL) {    SeyonMessagef("Unable to Open File `%s'", file_name, "", "");    PopupError("errFileAccess", widget);    return;  }  inhibit_child = True;  SeyonMessagef("Uploading Text File '%s'...", file_name, "", "");  PreProcessPrep();  XoAppAddSignal(app_con, SIGCHLD, divert_handler, NULL);  if ((w_child_pid = SeFork()) == 0) {    signal(SIGTERM, killdivert_handler);    if ((readProcPid = SeFork()) == 0)      PortToTty();    while ((c = getc(fp)) != EOF) {      send_tbyte(c);      if (c == '\r' || c == '\n') usleep(MDELAY);    }    fclose(fp);	if (readProcPid && kill(readProcPid, SIGTERM) == 0)	  while(wait((int*)0) < 0);    exit(0);  }}/* * run a script */voidScriptHandler(#if NeedFunctionPrototypes		int signo,		XtPointer client_data#endif){  int   TerminalRefreshParameters();#if defined(SUNOS_3) || defined(Mips)  union wait status;#else  int             status;#endif  if (wait(&status) < 0)	{SePError("Script wait failed"); return;}  XoAppRemoveSignal(XtWidgetToApplicationContext(topLevel), SIGCHLD);#if defined(SUNOS_3) || defined(Mips)  switch (status.w_retcode) {#else  switch (WEXITSTATUS(status)) {#endif  case 0:    SeyonMessage("Script Completed");    break;  case 1:    SeyonMessage("Script Execution Failed");    break;  case 10:    SeyonMessage("Script Canceled by User");    get_modem_attr();    break;  }  inhibit_child = False;  PostProcessPrep();   TerminalRefreshParameters(); }voidKillScriptHandler(#if NeedFunctionPrototypes		    int signo#endif){  int    PutParameters();  signal(SIGTERM, SIG_IGN);  PutParameters(scriptToMainPipe);  exit(10);}voidRunScript(parent, scriptName)     Widget          parent;	/* Not used. Can be NULL */     String          scriptName;{  int    PutParameters();  int    scriptRet;  ErrorIfBusy();  inhibit_child = True;  SeyonMessage(FmtString("Running Script ``%s''...", scriptName, "", ""));  PreProcessPrep();  XoAppAddSignal(XtWidgetToApplicationContext(topLevel), SIGCHLD, 				 ScriptHandler, NULL);  if ((w_child_pid = SeFork()) == 0) {    signal(SIGTERM, KillScriptHandler);    scriptRet = (int)do_script(scriptName);	PutParameters(scriptToMainPipe);	exit(scriptRet ? 0 : 1);  }}voidDialogRunScript(widget)     Widget          widget;{  void GetValueByPopup();  ErrorIfBusy();  linkflag = 0;  GetValueByPopup(widget, "dialogScriptName", RunScript);}void ExecExit(){  s_exit();}

⌨️ 快捷键说明

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