📄 sesubsx.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 + -