int main (int argc, char **argv) { XtResource desktopBackingStoreResources[] = { { XtNbackingStore, XtCBackingStore, XtRBackingStore, sizeof(int), 0, XtRImmediate, (XtPointer) Always, }, }; Display * display; Visual * vis; XSetWindowAttributes attr; unsigned long valuemask; Pixmap src, msk; XColor fg, bg; int blackColor; GC gc; Widget toplevel; Dimension displayWidth, displayHeight; Cursor blankcursor; Widget form, viewport, desktop; Window desktop_win; char srcBits[] = { 0,0,0,0,0 }; char mskBits[] = { 0,0,0,0,0 }; /* Call the main Xt initialisation function. It parses command-line options, generating appropriate resource specs, and makes a * connection to the X display. */ toplevel = XtVaAppInitialize(NULL, "ScreenLocker", NULL, 0, &argc, argv, NULL, XtNborderWidth, 0, NULL); display = XtDisplay(toplevel); vis = DefaultVisual(display, DefaultScreen(display)); displayWidth = WidthOfScreen(DefaultScreenOfDisplay(display)); displayHeight = HeightOfScreen(DefaultScreenOfDisplay(display)); /* full screen - set position to 0,0, but defer size calculation until widgets are realized */ XtVaSetValues(toplevel, XtNoverrideRedirect, True, XtNgeometry, "+0+0", NULL); form = XtVaCreateManagedWidget("form", formWidgetClass, toplevel, XtNborderWidth, 0, XtNdefaultDistance, 0, NULL); viewport = XtVaCreateManagedWidget("viewport", viewportWidgetClass, form, XtNborderWidth, 0, NULL); desktop = XtVaCreateManagedWidget("desktop", coreWidgetClass, viewport, XtNborderWidth, 0, NULL); XtVaSetValues(desktop, XtNwidth, displayWidth, XtNheight, displayHeight, NULL); /* "Realize" all the widgets, i.e. actually create and map their X windows */ XtRealizeWidget(toplevel); /* We want to stop the window manager from managing our toplevel window. This is not really a nice thing to do, so may not work * properly with every window manager. We do this simply by setting overrideRedirect and reparenting our window to the root. * The window manager will get a ReparentNotify and hopefully clean up its frame window. */ XtVaSetValues(toplevel, XtNoverrideRedirect, True, NULL); XReparentWindow(display, XtWindow(toplevel), DefaultRootWindow(display), 0, 0); /* Now we want to fix the size of "viewport". We shouldn't just change it directly. * Instead we set "toplevel" to the required size (which should propagate through "form" to "viewport"). * Then we remove "viewport" from being managed by "form", change its resources to position it and make sure that "form" won't * attempt to resize it, then ask "form" to manage it again. */ XtResizeWidget(toplevel, displayWidth, displayHeight, 0); XtUnmanageChild(viewport); XtVaSetValues(viewport, XtNhorizDistance, 0, XtNvertDistance, 0, XtNleft, XtChainLeft, XtNright, XtChainLeft, XtNtop, XtChainTop, XtNbottom, XtChainTop, NULL); XtManageChild(viewport); /* Now we can set "toplevel" to its proper size. */ XtResizeWidget(toplevel, displayWidth, displayHeight, 0); /*image = XCreateImage(display, vis, 32, ZPixmap, 0, NULL, 2000, 2000, BitmapPad(display), 0);*/ blackColor = BlackPixel(display, DefaultScreen(display)); desktop_win = XtWindow(desktop); gc = XCreateGC(display, desktop_win, 0, NULL); /* Tell the GC we draw using the black color*/ XSetForeground(display, gc, blackColor); XFillRectangle(display, desktop_win, gc, 0, 0, displayWidth, displayHeight); src = XCreateBitmapFromData(display, DefaultRootWindow(display), srcBits, 5, 5); msk = XCreateBitmapFromData(display, DefaultRootWindow(display), mskBits, 5, 5); XAllocNamedColor(display, DefaultColormap(display,DefaultScreen(display)), "black", &fg, &fg); XAllocNamedColor(display, DefaultColormap(display,DefaultScreen(display)), "white", &bg, &bg); blankcursor = XCreatePixmapCursor(display, src, msk, &fg, &bg, 2, 2); XFreePixmap(display, src); XFreePixmap(display, msk); XtVaGetApplicationResources(desktop, (XtPointer)&attr.backing_store, desktopBackingStoreResources, 1, NULL); valuemask = CWBackingStore; attr.cursor = blankcursor; valuemask |= CWCursor; XChangeWindowAttributes(display, desktop_win, valuemask, &attr); /* Try to get the input focus. */ XSetInputFocus(display, DefaultRootWindow(display), RevertToPointerRoot, CurrentTime); /* now grab keyboard and mouse */ if (XtGrabKeyboard(desktop, True, GrabModeAsync, GrabModeAsync, CurrentTime) != GrabSuccess || XtGrabPointer(desktop, True, (unsigned int) AllPointerEventMask, GrabModeAsync, GrabModeAsync, None, blankcursor, CurrentTime) != GrabSuccess) { printf ("Could not grab keyboard and mouse.\n"); } while (1) { /* sleep a little bit - only for better task-scheduling... */ sleep (5); } return (0); }
int main(int argc, char **argv) { struct { char x; void *y; } z; char b[256]; char *f, *s, *t; #if MP_GUI_SUPPORT XGCValues g; #endif /* MP_GUI_SUPPORT */ long n; int c, e, h, v; #if MP_GUI_SUPPORT appwidget = XtVaAppInitialize(&appcontext, "MPTrace", options, XtNumber(options), &argc, argv, NULL, NULL); XtVaGetApplicationResources(appwidget, NULL, resources, XtNumber(resources), NULL); #endif /* MP_GUI_SUPPORT */ s = t = NULL; e = h = v = 0; progname = __mp_basename(argv[0]); while ((c = __mp_getopt(argc, argv, __mp_shortopts(b, options_table), options_table)) != EOF) switch (c) { case OF_GUI: #if MP_GUI_SUPPORT usegui = 1; #endif /* MP_GUI_SUPPORT */ break; case OF_HATFFILE: t = __mp_optarg; break; case OF_HELP: h = 1; break; case OF_SIMFILE: s = __mp_optarg; break; case OF_SOURCE: displaysource = 1; break; case OF_VERBOSE: verbose = 1; break; case OF_VERSION: v = 1; break; default: e = 1; break; } argc -= __mp_optindex; argv += __mp_optindex; if (v == 1) { fprintf(stdout, "%s %s\n%s %s\n\n", progname, PROGVERSION, __mp_copyright, __mp_author); fputs("This is free software, and you are welcome to redistribute it " "under certain\n", stdout); fputs("conditions; see the GNU Lesser General Public License for " "details.\n\n", stdout); fputs("For the latest mpatrol release and documentation,\n", stdout); fprintf(stdout, "visit %s.\n\n", __mp_homepage); } if (argc > 1) e = 1; if ((e == 1) || (h == 1)) { fprintf(stdout, "Usage: %s [options] [file]\n\n", progname); if (h == 0) fprintf(stdout, "Type `%s --help' for a complete list of " "options.\n", progname); else __mp_showopts(options_table); if (e == 1) exit(EXIT_FAILURE); exit(EXIT_SUCCESS); } if (argc == 1) f = argv[0]; else f = MP_TRACEFILE; __mp_newtree(&alloctree); if (strcmp(f, "-") == 0) tracefile = stdin; else if ((tracefile = fopen(f, "rb")) == NULL) { fprintf(stderr, "%s: Cannot open file `%s'\n", progname, f); exit(EXIT_FAILURE); } currentevent = 0; bufferpos = buffer; bufferlen = 0; n = (char *) &z.y - &z.x; __mp_newslots(&table, sizeof(void *), __mp_poweroftwo(n)); __mp_initslots(&table, tableslots, sizeof(tableslots)); maxslots = 1; if (s != NULL) { if (strcmp(s, "stdout") == 0) simfile = stdout; else if (strcmp(s, "stderr") == 0) simfile = stderr; else if ((simfile = fopen(s, "w")) == NULL) { fprintf(stderr, "%s: Cannot open file `%s'\n", progname, s); exit(EXIT_FAILURE); } fprintf(simfile, "/* produced by %s %s from %s */\n\n\n", progname, PROGVERSION, f); fputs("#include <stdio.h>\n", simfile); fputs("#include <stdlib.h>\n\n\n", simfile); fputs("typedef struct event\n{\n", simfile); fputs(" unsigned long index;\n", simfile); fputs(" unsigned long size;\n", simfile); fputs(" char resize;\n", simfile); fputs("}\nevent;\n\n\n", simfile); fputs("static event events[] =\n{\n", simfile); } if (t != NULL) { if (strcmp(t, "stdout") == 0) hatffile = stdout; else if (strcmp(t, "stderr") == 0) hatffile = stderr; else if ((hatffile = fopen(t, "w")) == NULL) { fprintf(stderr, "%s: Cannot open file `%s'\n", progname, t); exit(EXIT_FAILURE); } fprintf(hatffile, "## Tracename: %s\n", t); fputs("## Author: Unknown\n", hatffile); fputs("## Date: Unknown\n", hatffile); fputs("## DTDURL: hatf.dtd\n", hatffile); fprintf(hatffile, "## Description: Converted to HATF by %s %s.\n\n", progname, PROGVERSION); } readfile(); #if MP_GUI_SUPPORT if (usegui) { appdisplay = XtDisplay(appwidget); appscreen = XtScreen(appwidget); addrscale = (((addrspace * 1048576) - 1) / (width * height)) + 1; /* Set up the main application window and scrollable drawing area. * Also set up a pixmap to backup the drawing area. */ mainwidget = XtVaCreateManagedWidget("main", xmScrolledWindowWidgetClass, appwidget, XmNwidth, vwidth, XmNheight, vheight, XmNscrollingPolicy, XmAUTOMATIC, XmNscrollBarDisplayPolicy, XmAS_NEEDED, NULL); drawwidget = XtVaCreateManagedWidget("draw", xmDrawingAreaWidgetClass, mainwidget, XmNwidth, width, XmNheight, height, NULL); pixmap = XCreatePixmap(appdisplay, RootWindowOfScreen(appscreen), width, height, DefaultDepthOfScreen(appscreen)); /* Set up the graphics contexts that are used for drawing in different * colours. */ g.foreground = uncol; ungc = XCreateGC(appdisplay, RootWindowOfScreen(appscreen), GCForeground, &g); g.foreground = incol; ingc = XCreateGC(appdisplay, RootWindowOfScreen(appscreen), GCForeground, &g); g.foreground = frcol; frgc = XCreateGC(appdisplay, RootWindowOfScreen(appscreen), GCForeground, &g); g.foreground = alcol; algc = XCreateGC(appdisplay, RootWindowOfScreen(appscreen), GCForeground, &g); /* Add a callback procedure to handle the refreshing of the drawing * area and also a work procedure to read events from the tracing * output file. Then initialise the drawing area and enter the main X * application loop. */ XtAddCallback(drawwidget, XmNexposeCallback, (XtCallbackProc) redrawmemory, NULL); XtAppAddWorkProc(appcontext, (XtWorkProc) readevent, NULL); XtRealizeWidget(appwidget); XFillRectangle(appdisplay, XtWindow(drawwidget), ungc, 0, 0, width - 1, height - 1); XFillRectangle(appdisplay, pixmap, ungc, 0, 0, width - 1, height - 1); XtAppMainLoop(appcontext); } #endif /* MP_GUI_SUPPORT */ return EXIT_SUCCESS; }