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.
-------