[comp.windows.x] XV10R4 on Apollo SR9.X systems - How to get it

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