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

📄 sesubsx.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. *//*                               -*- Mode: C -*-  * SeSubsX.c --- Various X-based routines * Author          : Muhammad M. Saggaf * Created On      : sometime in 1992 * Last Modified By: system admin * Last Modified On: Thu Jun 17 22:26:07 1993 * Update Count    : 11 * Status          : Mostly OK, needs some cleaning up */#include <X11/Intrinsic.h>#include <X11/StringDefs.h>#include <time.h>#include "seyon.h"#include "SeDecl.h"#include "version.h"extern char    *strsqtok();extern int      GetModemStat();int             seyon_message_up = 0;voidBeep(){  if (!qres.neverBeep) FancyBell(topLevel);}voidUpdateStatusBox(clientData)     XtPointer       clientData;{  static Widget *statusWidget;  /* All members of oldState are guaranteed to be initialized to False	 since the array is declared static, similarly for online */  static Boolean online, oldState[NUM_MDM_STAT];  Boolean newState;  char buf[10];  static int stat[NUM_MDM_STAT] = {MDM_DCD, MDM_DTR, MDM_DSR, MDM_RTS, 									 MDM_CTS, MDM_RNG};  int modemStat, i;  static time_t startTime, oldOnlineTime = 0;  time_t onlineTime = 0;  if (clientData)	statusWidget = (Widget*)clientData;  if ((modemStat = GetModemStat(0)) >= 0)	for (i = 0; i < 6; i++)	  if ((newState = (Boolean)((modemStat & stat[i]) ? True : False)) != 		  oldState[i])		SeSetUnsetToggle(statusWidget[i], (oldState[i] = newState));    if (online == False) {	onlineTime = 0;	startTime = time((time_t*)0);  }  if ((online = oldState[0]))	onlineTime = (time((time_t*)0) - startTime) / 60;  if (onlineTime != oldOnlineTime) {	oldOnlineTime = onlineTime;	sprintf(buf, "%02d:%02d", onlineTime / 60, onlineTime % 60);	SeSetLabel(statusWidget[0], buf);  }  if (clientData)	XtAppAddTimeOut(app_con, qres.modemStatusInterval * 1000, 					UpdateStatusBox, clientData);}voidFunMessage(){  static int      msg_index = 0;  String          msg;  char            vermsg[SM_BUF];  if (seyon_message_up <= 0) {    msg = qres.funMessages[msg_index++];    if (msg == NULL) {      msg_index = 0;      sprintf(vermsg, "Welcome to Seyon version %s.%s", VERSION, REVISION);      msg = vermsg;    }    SetStatusMessage(msg);  }  seyon_message_up--;  XtAppAddTimeOut(XtWidgetToApplicationContext(topLevel),				  qres.funMessagesInterval * 1000, FunMessage, NULL);}struct _procRequest {  int             action;  char            msg[80];  char            arg[90];};voidExecProcRequest(client_data)     XtPointer       client_data;{  void                DispatchActions(),                      RunScript();  struct _procRequest procRequest;  read_pipe_data(child_pipe, &procRequest, sizeof(procRequest));  if (*(procRequest.msg))    SeyonMessage(procRequest.msg);  switch (procRequest.action) {  case KILL_TERM:    KillTerminal();    break;  case START_TERM:    StartTerminal();    break;  case SUSPEND_TERM:	SuspContTerminal(0);    break;  case CONTINUE_TERM:	SuspContTerminal(1);    break;  case DISPATCH_ACTION:	DispatchActions(ACTION_DISPATCH, procRequest.arg, genericWidget);    break;  case EXEC_SCRIPT:	RunScript(NULL, procRequest.arg);	break;  case TOP_DIAL_START:	qres.dialAutoStart = True;  case TOP_DIAL:	if ((procRequest.arg)[0]) TopDial(dialWidget, procRequest.arg);	else TopDial(dialWidget, NULL);	break;  case POPUP_ERROR:	PopupError(procRequest.arg, NULL);	break;  case EXIT_PROGRAM:	s_exit();    break;  case SET_MESSAGE:    break;  default:    break;  }}voidwrite_child_info(pd, action, msg)     int            *pd;     int             action;     char           *msg;{  struct _procRequest procRequest;  procRequest.action = action;  if (msg) strcpy(procRequest.msg, msg);  else *procRequest.msg = '\0';  write_pipe_data(pd, &procRequest, sizeof(procRequest));}voidProcRequest(action, msg, arg)     int             action;     char           *msg,                    *arg;{  struct _procRequest procRequest;  procRequest.action = action;  strcpy(procRequest.msg, msg);  strcpy(procRequest.arg, arg);  write_pipe_data(child_pipe, &procRequest, sizeof(procRequest));}voidwritef_child_info(pd, action, fmt, a, b, c)     int            *pd;     int             action;     char           *fmt,                    *a,                    *b,                    *c;{  char            buffer[SM_BUF];  sprintf(buffer, fmt, a, b, c);  write_child_info(pd, action, buffer);}voidSeyonMessage(msg)     String          msg;{  seyon_message_up = 300 / qres.funMessagesInterval;  SetStatusMessagef("- %s -", msg, "", "");}voidSeyonMessagef(fmt, a, b, c)     String          fmt,                     a,                     b,                     c;{  char            buf[REG_BUF];  sprintf(buf, fmt, a, b, c);  SeyonMessage(buf);}Booleanread_seyon_file(name, line)     char           *name,                    *line[];{  FILE           *fp;  if ((fp = open_file(name, qres.defaultDirectory)) == NULL)    return False;  ReadCommentedFile(fp, line);  fclose(fp);  return True;}#define done(value, type) \{ \  if (toVal->addr != NULL) { \	if (toVal->size < sizeof(type)) { \	  toVal->size = sizeof(type); \	  return False; \	} \	*(type*)(toVal->addr) = (value); \  } \  else { \    static type static_val; \    static_val = (value); \    toVal->addr = (XtPointer)&static_val; \  } \  toVal->size = sizeof(type); \  return True; \}BooleanCvtStringToStringArray(display, args, num_args, fromVal, toVal,		       converter_data)     Display        *display;     XrmValue       *args;     Cardinal       *num_args;     XrmValue       *fromVal;     XrmValue       *toVal;     XtPointer      *converter_data;{  String          fromStr,                  buf;  static String   strArr[REG_BUF];  int             n;  if (*num_args != 0)    XtAppWarningMsg(app_con, "wrongParameters", "cvtStringToStringArray",		    "XtToolkitError",		"String to StringArray conversion needs no extra arguments",		    (String *) NULL, (Cardinal *) NULL);  fromStr = (String) fromVal->addr;/*  buf = XtMalloc((strlen(fromStr)+1) * sizeof(char));  strcpy(buf, fromStr);*/  buf = fromStr;  if ((strArr[0] = strsqtok(buf)) == NULL) {/*	XtFree(buf);*/    done(NULL, String *);  }  for (n = 1; n < XtNumber(strArr); n++)    if ((strArr[n] = strsqtok(NULL)) == NULL)      done(strArr, String *);  XtAppWarningMsg(app_con, "tooManyStrings", "cvtStringToStringArray",		  "XtToolkitError",	   "Too many strings specified for String to StringArray converter",		  (String *) NULL, (Cardinal *) NULL);  strArr[--n] = NULL;  done(strArr, String *);}#undef done

⌨️ 快捷键说明

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