nazgul@EDDIE.MIT.EDU@apollo.UUCP (02/18/87)
Status: V10R4 is available through ADUS (Apollo's user group). It currently runs under SR9.5 and should (with a few mods which the ADUS group is currently making) run under SR9.2, although with somewhat decreased performance. If ADUS is too slow (they're trying to make sure everything will build on a vanilla SR9.X system first) contact your local salesperson and try and have them get you a copy. Please only contact me as a last resort. Here's some information from the README file, along with an informal log of some of the changes we made. I can't post full context diffs since the first thing I did was run everything through cb so I could read the code. *********** Apollo does NOT support this release of X. It is available through the ADUS Library (Apollo's user group). We do plan to support V11 of X as a full fledged product, running in tandem with our window system (eg. ask for an X window and you get one, ask for an Apollo window and you get one - use a window manager from either system to manipulate all of the windows). If you wish to get the X distribution, send email to ...decvax!wanginst!apollo!adus or apollo!adus@eddie.mit.edu or contact Apollo Computer Inc. ADUS Library, CHD 02 MK 330 Billerica Rd. Chelmsford, MA 01824 USA Reports of bugs can be sent to myself (username 'nazgul') at the same email location but I make NO guarantees that I will have time to fix the bugs or even respond to your mail message since X support is not my primary function. Thanks should go the following people who put this whole thing into working order for the X announcement and UniForum. Ken Arnold Tom Greene Brian Holt Lynette Khirallah Jim Taggart All the people at Data General, DEC and HP who made it fly and put together the environment for the demos. The University of Utah, University of Michigan, Lucid and anyone else who had a part in getting the Apollo X Server running. Kee Hinckley Jan 30, 1987 ****** Log.apollo ****** mkfont Script to make the Apollo fonts. NOTE: As it currently stands the cvtfont program is making two fonts for everyone, and furthermore making them with the wrong postfixes. Keep the .i fonts, but without the .i prefix. Throw the others away, the inverse capability is no longer necessary and only worked on black and white displays anyway. This should be easy to fix in cvtfont.c, but again time constraints won out. libapollo/un.h This is the include files for unix domain sockets. It should go in /usr/include. UDS's were not released at 9.5. They require a type manager (uds) and the file /sys/address_families. X/Makefile Added /sys/traits/io_traits to be bound into APOLLOLIB. Changed server to not bind in lk201.o Added echoing of each server install. X/main.c Addition of #ifdefs to allow easier debugging of the extensible stream that handles keyboard/mouse input. (-ios option) XMenu/Makefile Took out the profile stuff, which doesn't work on Apollos. Xlib/Makefile Ditto Xlib/Xtextlib.c Addition of Apollo #ifdef to use _SIWR for TextPrint instead of _IOWRT+_IOSTRG Xlib/Xttylib.c Ditto, plus an undef of _file (got me!). Xlib/Makefile Changed PRINTER to use prf instead of lpr. doc/installation/Makefile Ditto. keycomp/Makefile Changed CFLAGS to use -Wp due to a bug in the Apollo C preprocessor. This will cause it to use cpp instead. man/Makefile Changed SECTION from n to l and added code to put everything there even if it technically belongs in other chapters. ximpv/Makefile Changed defaults to IMAGEN300 instead of 480 (I still can't get it to work though). xinit/xinit.c Added apollo ifdef to use '-ls' option for xterm (login shell). xterm/main.c Under an ifdef added include of sys/types.h and defined ttyslot() to 1 and vhangup() to ';'. Hang on, they're on their way. xterm/resize.c The problem is simple. /dev/tty is a disgusting hack on Apollos. This will go away at SR10 (or possibly sooner) but in the meantime reading or writing to /dev/tty while you are in a pty will often not get you what you expected. Thus the apollo version calls ttyname on error output and trys using that instead. There are also some strcpy problems too, see the bugs. xtrek/coup.c Added apollo ifdefs for the include files. xtrek/daemon.c Ditto. xtrek/detonate.c Ditto. xtrek/enter.c Ditto. xtrek/getship.c Ditto. xtrek/orbit.c Ditto. xtrek/torp.c Ditto. ---------------------------------- Changes to libapollo ---------------------------------- Global changes (effecting most all the modules) I tossed all of the acquire release stuff and added my own. It now works in direct mode if the environment variable XPAD exists when it is invoked. I tried to flag as many unimplemented features as possible. If you set the environment variable XDEBUG these should print error messages whenever someone tries to access them. (Someone should change this to pop up a warning window instead, as it is you never find out until after the fact). Changed all bitblits to pixblits so that color worked properly. Also removed a number of special cases that tried to special case white vs. black, inversed images or a certain number of planes. A large number of X operations can be called with xymasks. Almost all of these are now supported. Xapollo.h Added cursor mask bitmaps, fixed the rop macro to use it's only increment variable. Added a macro to invalidate the global rop. bitpix.c CharBitmap now works with both Apollo and nonapollo fonts. Modified a number of other routines. cursor.c Nuked the attribute_block stuff. It is *far* too slow and can lose input during the switch. Instead we just save the attributes that we are going to modify. In addition masking has been changed to work properly with foreground and background colors. The algorthim here is not at all obvious, but it is fast and it works. The same concept is also used in a number of other cases where the user hands us a foreground and background pattern that we are supposed to combine using some arbitrary rop. cvtfont.c This is the routine that converts X fonts to Apollo fonts /usr/lib/X/apfont for faster performance. It has been modified considerably (but not by myself, so I'm not sure how). It needs to be modified some more. In particular it creates two files, one inverted, one not. In fact the inverted font is the one you want (I think we may have introduced this bug) and the other can be thrown away since the font display code no longer uses it. Certain fonts can not be converted since they either won't fit in hidden display memory (thus the speed) or they have more than 128 characters (yes the Apollo font format will be changing in the future). See the notes on font.c for more info. draw.c This should now be considerably faster for straight line drawing since it uses poly lines instead of individual move and draws. It handles solid, dashed and patterened lines but not for splines. Also splines are deadly slow (they are implemented by multiple one pixel polylines, I'll be talking to the graphics people about that, feel free to put in your own two cents) if you are doing them repeatedly. They are fine for draw programs and the like however. We don't implment brush widths, closed splines or endpoints (ie. optionally not drawing them). events.c Two massive speed ups here, one is up to you as a user, the other is in the code. Until the shift key modification is made (probably SR9.6, and only on machines with the DN3000 stile keyboard) you have to use the three bottom left keypad keys for control shift and meta keys when modifying the mouse. This actually isn't that bad *BUT* the down arrow key is a very bad choice. When you use it, press it down, press the mouse key, AND THEN RELEASE THE ARROW KEY!. The arrow key is an auto repeat key, so long as you are holding it down while you move the mouse you will see significantly degraded performance. The second speed up involves waiting on gpr_$locator_update instead of gpr_$locator. This means that all of the intermediate mouse movements are thrown away. This resulted in something close to an order of magnitude increase in the performance of uwm. fill.c Arbitrary rops are supported. font.c This is almost a totally new implementation. It now handles both Apollo and nonapollo fonts (there are now also some unused fields in the data structures since we no longer use inverse fonts (which, incidentally, weren't getting freed when the font was freed). Because of differences in the amount of available HDM on different machines, some fonts (the xtrek numeric font is an example) will display on black and white nodes, but not on color ones. Currently this means that we return NULL when someone tries to load it. Someone should really change this to back out and try again using the non-apollo font. initial.c Addition of a refresh routine. WARNING: There is currently a race condition where if you ask for a refresh before X is totally set up it will die. The refresh routine should check for this and just return if everything isn't ready yet. In direct mode the window used is the current display. Maximum bitmap sized was increased to 1280. (This is wrong, I believe Brown has the correct fix whereby you query the display to find out how big to make it. NOTE: You can't resize a direct mode X window (well, you can, but it won't do any good). Colors are saved when X is in direct mode and restored when you move out of the window. (This is ugly, it should use the color table manager when it's in direct mode). text.c Optimized the printing routines and made them work for both types of fonts. (Note that anything other than GXcopy on apollo fonts will be a little slow, since we write to a temporary bitmap and then blit that onto the screen - another thing to bug our graphics people about.) textutil.c More optimizations and full handling of variable size fonts. tile.c Correct handling of tiles that don't start at 0,0 (or tilesize off of that). This is also being optimized right now so it should be a bit faster. NOTE: xymask is still not implemented here. util.c Addition of routines to save and restore colors. Fix to make screen restores after screen saves work properly. Known Bugs: All of these existed before hand, but these are the ones which I've spotted and labeled. Most of these have to do with Zformat vs. XYformat calls. These should be possible to implment by expanding the Zformat stuff and then using gpr_$write_pixels, but I haven't looked at it too carefully. bitpix.c: if (Xdbg) fprintf(stderr, "pixmapget: %d,%d not implemented right\n", srcx, srcy ); bitpix.c: if (Xdbg) fprintf(stderr, "PixmapGet: XYColorPixmap not implemented.\n"); bitpix.c: if (Xdbg) fprintf(stderr, "ZtoXY: not implemented.\n"); cursor.c: if (Xdbg) fprintf(stderr, "SetMouseCharacteristics: not implemented.\n"); fill.c: if (Xdbg) fprintf(stderr, "StippleFill is not implemented.\n"); put.c: fprintf(stderr, "PixmapPut: ConstantPixMap with OverLap not implemented.\n"); put.c: fprintf(stderr, "PixmapPut: ZColorPixmap not implemented.\n"); put.c: fprintf(stderr, "PixmapPut: XYColorPixmap not implemented.\n"); put.c: fprintf(stderr, "PixmapBitsPut: XYFormat not implemented.\n"); text.c: fprintf(stderr, "unimplemented:charpad=%d, spacepad=%d\n", charpad, tile.c: fprintf(stderr, "tilefill: xymask not implemented.\n"); tile.c: fprintf(stderr, "constfill: xymask not implemented.\n"); tile.c: fprintf(stderr, "TileFill: XYColorPixmap not implemented.\n"); tile.c: fprintf(stderr, "TileFill: ZColorPixmap not implemented.\n"); tile.c: if (Xdbg) fprintf(stderr,"DrawFilled: BitmapPixmap is not implemented.\n"); tile.c: if (Xdbg) fprintf(stderr,"DrawFilled: XYColorPixmap is not implemented.\n"); tile.c: if (Xdbg) fprintf(stderr,"DrawFilled: ZColorPixmap is not implemented.\n"); tile.c: if (Xdbg) fprintf(stderr,"DrawFilled: ConstantPixmap is not implemented.\n"); Other Bugs: There are bugs with both Unix Domain Sockets (not yet officially released and probably not available until SR10) and TCP such that the server will sometimes hang. These can sometimes be corrected by exiting with Shift F8 (using the down arrow as the shift key) or by killing X (and the tcp server if it is still there) from another machine. To get started again run the script /usr/new/newtcp. Note that it shuts down the inetd if you have it running (because it needs to be started after the tcp_server, it should also shut down anyone else who was accessing tcp) and then starts it up again. There seems to be a bug somewhere such that applications will occasionally die with a bad window id. xclock does this, as does greyhound. I suspect an uninitialized variable, although I can't find it anywhere, it may in fact be somewhere in Xlib rather than in the applications. Additional "Bug": I haven't had a chance to update the documentation on Xapollo to indicate these bugs or indicate what other ones have been fixed. -------