Path: utzoo!attcan!uunet!lll-winken!lll-tis!helios.ee.lbl.gov!nosc!ucsd!rutgers!uwvax!speedy!solomon From: solomon@speedy.cs.wisc.edu (Marvin Solomon) Newsgroups: comp.windows.x Subject: X11 on a Vaxstation 3200 Summary: Problems with Xqdss on a gray monitor Microvax III Keywords: xqdss qdss Microvax III Vaxstation 3200 Message-ID: <6092@spool.cs.wisc.edu> Date: 2 Aug 88 19:41:07 GMT Sender: news@spool.cs.wisc.edu Reply-To: solomon@speedy.cs.wisc.edu (Marvin Solomon) Organization: U of Wisconsin CS Dept Lines: 113 Is anybody running X11R2 on a Vaxstation 3200 (also known as Microvax III)? The "black and white" version of this thing actually comes with a qdss ("color") interface with 4 planes. I'm running 4.3BSD Unix. It works fine (in fact, is extremely snappy) EXCEPT: 1. It seems to have a storage leak somewhere. Each time you create a window, the size of the Xqdss process gets a little bigger, and does not get smaller when the window goes away (or the program exits). I've reported this to the 'bugs' address, but haven't yet received a reply. I dimly recall a report of this problem on a Sun. Was there any resolution to that problem? 2. There seems to be something very wrong with pixmaps. This is a little harder for me to put my finger on, but here are some symptoms: First, an application (my xproof program, which I was planning to release last week, before these problems set me back) that runs fine on other machines runs EXTREMELY slowly on this machine. It does a whole lot of XDrawText() calls to a pixmap, and then does an XCopyArea() call on expose events. It seems to be the XDrawText() calls that are slow. The program takes a couple of seconds to draw a page on a Vaxstation 2000 with a qvss B&W display, and a fraction of a second on a B&W Sun 4/110. On the 3200, it takes about 30-40 seconds! Second, gray scales other than black or white don't seem to work. I tried XFillRectangle() with pixel values from 0 through 15. 0 and 14 draw as white, while all others show up as black. BlackPixel() and WhitePixel() are 15 and 14, respectively, so maybe this is "right", but something still seems wrong. I can't get XCopyPlane to work at all. I have a little program that makes a square bitmap (one-plane pixmap) fills half of it with zeros and half with ones, and then does an XCopyPlane to a window of the same size. Depending on the size of the bitmap and the foreground and background pixels used in the GC used for the copy, I get all sorts of weird results, including: all white, all black, half and half (correct), various strange patterns of misc garbage, and once even half white and half very light gray. (I got that one with foreground=background=0 in the copy GC). Sometimes, the window seems to be drawn twice in quick succession with different patterns. I can't swear to it, but it seems that sometimes the contents of the window are leftovers from a previous run of the program! I tried XGetImage on the pixmap and on the window; the former looks ok, but the latter seems to be garbage. Excerpts from my test program appear at the end of this note. I can supply the whole thing on request. By the way, DefaultDepth() returns 4, but "xrdb -query -symbols" returns: -DHOST=unix -DWIDTH=1024 -DHEIGHT=864 -DX_RESOLUTION=2960 -DY_RESOLUTION=2959 -DPLANES=8 -DCLASS=PsuedoColor -DCOLOR Any help at all would be greately appreciated. Here are the excerpts: main() { server = XOpenDisplay(...); screen = DefaultScreen(server); bd = BlackPixel(server, screen); bg = WhitePixel(server, screen); fg = BlackPixel(server, screen); printf("On this display, WhilePixel=%d, BlackPixel=%d\n", WhitePixel(server, screen), BlackPixel(server, screen)); printf("default depth=%d\n",DefaultDepth(server, screen)); printf("window dimensions:"); scanf("%d",&WIDTH); HEIGHT = WIDTH; printf("window background:"); scanf("%d",&bg); window = XCreateSimpleWindow(server, DefaultRootWindow(server), 1024-WIDTH-4, 0, WIDTH, HEIGHT, 1, bd, bg); XSetStandardProperties(server, window, ...); XSetWMHints(server, window, ...); canvas = XCreatePixmap(server, DefaultRootWindow(server), WIDTH, HEIGHT, 1); DrawGc = XCreateGC(server, canvas, 0, &gcv); printf("copy foreground, background:"); scanf("%d %d",&fg,&bg); gcv.foreground = fg; gcv.background = bg; CopyGc = XCreateGC(server, window, GCForeground | GCBackground, &gcv); XSelectInput(server, window, ExposureMask | ButtonPressMask | ButtonReleaseMask ); XMapWindow(server, window); for(;;) { XNextEvent(server, &event); if (event.type == ButtonRelease) { XDestroyWindow(server, window); exit(0); } if (event.type == Expose && event.xexpose.count == 0) { while (XCheckTypedEvent(server, Expose, &event)); ReDisplay(); } } } ReDisplay() { XSetForeground(server, DrawGc, 0); XFillRectangle(server, canvas, DrawGc, 0,0, WIDTH/2, HEIGHT); XSetForeground(server, DrawGc, 1); XFillRectangle(server, canvas, DrawGc, WIDTH/2,0, WIDTH/2, HEIGHT); XClearArea(server, window, 0, 0, WIDTH, HEIGHT, False); XCopyPlane(server, canvas, window, CopyGc, 0, 0, WIDTH, HEIGHT, 0, 0, 1); } Marvin Solomon Computer Sciences Department University of Wisconsin, Madison WI solomon@cs.wisc.edu or seismo!uwvax!solomon