|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T x
Length: 6206 (0x183e) Types: TextFile Names: »xalert.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/Uip/rcvalert/xalert.c«
/* xalert.c: X based alert program */ # ifndef lint static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Uip/rcvalert/RCS/xalert.c,v 5.0 90/09/20 16:34:02 pp Exp Locker: pp $"; # endif /* * $Header: /cs/research/pp/hubris/pp-beta/Uip/rcvalert/RCS/xalert.c,v 5.0 90/09/20 16:34:02 pp Exp Locker: pp $ * * $Log: xalert.c,v $ * Revision 5.0 90/09/20 16:34:02 pp * rcsforce : 5.0 public release * */ #include <stdio.h> #include <X11/Intrinsic.h> #include <X11/StringDefs.h> #include <X11/Shell.h> #include <X11/Xaw/Command.h> #include <X11/Xaw/Box.h> #include <X11/Xaw/Label.h> #include <X11/Xaw/Cardinals.h> #include <X11/Xaw/Form.h> #include <X11/Xaw/Text.h> #include <X11/Xaw/AsciiText.h> #include <pwd.h> #define BASIC_WIDTH 400 static struct _app_resources { char *filename; char *user; int port; } app_resource; static int defaultPort = 0; char homedir[BUFSIZ]; #define offset(x) XtOffset (struct _app_resources *, x) static XtResource resources[] = { {"fileName", "FileName", XtRString, sizeof (String), offset(filename), XtRString, (caddr_t) ".alert" }, {"userName", "UserName", XtRString, sizeof (String), offset(user), XtRString, (caddr_t) NULL }, {"port", "Port", XtRInt, sizeof (int), offset(port), XtRInt, (caddr_t) &defaultPort }, }; static XrmOptionDescRec table[] = { {"-filename", "fileName", XrmoptionSepArg, (caddr_t) NULL}, {"-user", "userName", XrmoptionSepArg, (caddr_t) NULL}, {"-port", "port", XrmoptionSepArg, (caddr_t) NULL}, }; XtAppContext context; Display *dpy; Screen *scrn; Widget toplevel, box, qb, topform, txt, db, rst; char username[128]; int replysock; char twfilename[BUFSIZ]; void Delete (); void Quit (); void Reset (); void TextIn (); int EQuit (); int EQuit2 (); main (argc, argv) int argc; char *argv[]; { int sd; struct passwd *pwd; char *cp, *getenv (); if ((pwd = getpwuid (getuid ())) == NULL) { fprintf (stderr, "Unknown user"); } else { (void) strcpy (username, pwd -> pw_name); if ((cp = getenv ("HOME")) && *cp) (void) strcpy (homedir, cp); else (void) strcpy (homedir, pwd -> pw_dir); } XtToolkitInitialize(); context = XtCreateApplicationContext(); dpy = XtOpenDisplay(context, (String)NULL, "xalert", "XAlert", table, XtNumber(table), &argc, argv); if (dpy == (Display *)0) { fprintf (stderr, "Unable to open display\n"); exit(-1); } scrn = DefaultScreenOfDisplay(dpy); toplevel = XtAppCreateShell("xalert", "XAlert", applicationShellWidgetClass, dpy, NULL,0); XtGetApplicationResources (toplevel, (caddr_t)&app_resource, resources, XtNumber(resources), NULL, 0); if (app_resource.user == NULL) app_resource.user = username; topform = XtVaCreateManagedWidget(NULL, formWidgetClass, toplevel, XtNdefaultDistance, 0, XtNborderWidth, 0, XtNtop, XtChainTop, NULL); box = XtVaCreateManagedWidget ("box", boxWidgetClass, topform, XtNwidth, BASIC_WIDTH, XtNtop, XtChainTop, XtNbottom, XtChainTop, XtNleft, XtChainLeft, XtNright, XtChainLeft, NULL); qb = XtVaCreateManagedWidget ("Quit", commandWidgetClass, box, NULL); XtAddCallback(qb, XtNcallback, Quit, NULL); db = XtVaCreateManagedWidget ("Clear", commandWidgetClass, box, NULL); XtAddCallback (db, XtNcallback, Delete, NULL); rst = XtVaCreateManagedWidget ("Reset", commandWidgetClass, box, NULL); XtAddCallback (rst, XtNcallback, Reset, NULL); crt_txt (BASIC_WIDTH, 120); sd = udp_start (app_resource.port, app_resource.filename, homedir); XSetErrorHandler (EQuit); XSetIOErrorHandler (EQuit2); (void) XtAppAddInput (context, sd, XtInputReadMask, TextIn, NULL); XtRealizeWidget(toplevel); XtAppMainLoop (context); } /* ARGSUSED */ void TextIn (cdata, fdp, iid) caddr_t cdata; int *fdp; XtInputId *iid; { char buffer[BUFSIZ]; int n; if (*fdp == 0) { if ((n = read (*fdp, buffer, sizeof buffer)) <= 0) Quit (toplevel, (caddr_t)0, (caddr_t)0); buffer[n] = 0; AddText (buffer, n); } else { if (getdata (*fdp, buffer, &n, app_resource.user)) AddText (buffer, n); } } /* ARGSUSED */ int EQuit (disp, error) Display *disp; XErrorEvent *error; { Quit (toplevel, (caddr_t)0, (caddr_t)0); } /* ARGSUSED */ int EQuit2 (disp) Display *disp; { Quit (toplevel, (caddr_t)0, (caddr_t)0); } /* ARGSUSED */ void Quit(widget, closure, callData) Widget widget; caddr_t closure; caddr_t callData; { XtDestroyWidget(toplevel); if (twfilename[0]) (void) unlink (twfilename); udp_cleanup (); exit(0); } AddText (s, n) char *s; int n; { XawTextPosition last; XawTextBlock text; XawTextSetInsertionPoint (txt, (XawTextPosition)9999999); last = XawTextGetInsertionPoint (txt); text.ptr = s; text.firstPos = 0; text.length = n; text.format = FMT8BIT; if (XawTextReplace (txt, last, last, &text) != XawEditDone) XBell (XtDisplay (txt), 0); else { XawTextPosition newend; XawTextSetInsertionPoint(txt, last + text.length); newend = XawTextGetInsertionPoint(txt); if (text.ptr[text.length-1] != '\n') { text.ptr = "\n"; text.length = 1; XawTextReplace(txt, newend, newend, &text); XawTextSetInsertionPoint(txt, newend += 1); } } XBell (XtDisplay (toplevel), 50); } /* ARGSUSED */ void Reset (widget, closure, callData) Widget widget; caddr_t closure; caddr_t callData; { makeredirfile (app_resource.filename, homedir); } /* ARGSUSED */ void Delete (widget, closure, callData) Widget widget; caddr_t closure; caddr_t callData; { XtVaSetValues (txt, XtNstring, "", NULL); } crt_txt (wid, height) Dimension wid, height; { txt = XtVaCreateManagedWidget(NULL, asciiTextWidgetClass, topform, XtNtype, XawAsciiString, XtNscrollVertical, XawtextScrollWhenNeeded, XtNheight, height, XtNwidth, wid, XtNeditType, XawtextAppend, XtNfromHoriz, NULL, XtNfromVert, box, XtNtop, XtChainTop, XtNbottom, XtChainBottom, XtNright, XtChainRight, XtNleft, XtChainLeft, NULL); }