Annotation of researchv9/X11/src/X.V11R1/server/ddx/apollo/README, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3:     These notes are intended to help you get the X11 server running on your
                      4: Apollo system.  They also contain some hints to help you with the other
                      5: components of the X11 software.  We assume you are familiar with the structure
                      6: of the X system; ideally you have experience with Version 10 of X, or prior beta
                      7: versions of X11.
                      8: 
                      9: SYSTEM REQUIREMENTS
                     10: -------------------
                     11: 
                     12:     Hardware requirements:  An Apollo node with keyboard 2 or 3, including a
                     13: mouse.
                     14: 
                     15:     Software considerations:
                     16: 
                     17:     If you are running SR9.5.1, you may have trouble with the following software
                     18: components.  However, X11 beta sites have succeeded in making a working Apollo
                     19: server at SR9.5.1.
                     20:         --  The C compiler, compiling some of the Apollo driver code.
                     21:         --  The C preprocessor (/usr/lib/cpp), if you use the imake utility
                     22:             program (this is not required).
                     23:         --  /lib/streams, in using local TCP/IP connections.
                     24: 
                     25:     If you are running SR9.6, you may have trouble with the following software
                     26: components.
                     27:         --  The C preprocessor (/usr/lib/cpp), if you use the imake utility
                     28:             program (this is not required).
                     29:         --  /lib/streams, in using local TCP/IP connections.
                     30: 
                     31:     If you are running SR9.7, you may have trouble with the following software
                     32: components.
                     33:         --  The C preprocessor (/usr/lib/cpp), if you use the imake utility
                     34:             program (this is not required).
                     35: 
                     36:     If you are having problems with any of the above, you can obtain a patch
                     37: tape from Apollo with better versions.  Ask for the October 1987 or later patch
                     38: tape from your local sales office.
                     39: 
                     40:     This implementation of the server is the typical "dumb monochrome" port.
                     41: It will run on any Apollo display, color or monochrome, but it will only do
                     42: 1-bit black-and-white graphics.
                     43: 
                     44: 
                     45: GETTING ORIENTED
                     46: ----------------
                     47: 
                     48:     Top level directories are:
                     49: 
                     50:         clients         client program sources
                     51:         demos           demo client program sources
                     52:         doc             documentation
                     53:         extensions      code for portable extensions
                     54:         fonts           sources and compiler sources for server fonts
                     55:         hacks           client programs classified as hacks
                     56:         include         include files needed by both client and server code
                     57:         lib             code for various client-side libraries
                     58:         server          code for sample server
                     59:         util            utility programs for building and maintaining X11
                     60: 
                     61: You should be familiar especially with the documents in 'doc/Server'.  Also, two
                     62: entries in 'util' should be noted:  'imake' is a tool to create a consistent set
                     63: of makefiles from common templates; and 'makedepend' is a tool to construct or
                     64: reconstruct make file dependency lists.
                     65: 
                     66: 
                     67: HOW TO BUILD IT
                     68: ---------------
                     69: 
                     70:     First, make the 'imake' tool in the 'util/imake' directory.
                     71: 
                     72:     Next, make the 'makedepend' tool in the 'util/makedepend' directory.
                     73: You will have to change its Makefile if you do not have CPP source.
                     74: 
                     75: Doing makes
                     76: -----------
                     77: 
                     78:     First, at the top level do a 'make Makefiles'; this runs 'imake' on
                     79: everything.  This step is actually optional, as the delivered Makefiles
                     80: are already adequate.  You will have to decide whether you are interested
                     81: in the benefits of re-creating all your makefiles from a given template
                     82: or not.
                     83: 
                     84:     Before running make on any part of the X11 code, do a 'make depend'.
                     85: This will update the dependencies part of the file to not spuriously
                     86: refer to some header files non-existent on DOMAIN/IX, and to refer to all
                     87: header files actually depended on.
                     88: 
                     89:     When everything is finally built, you will have to find a home in your
                     90: file system for the executables and other runtime files.  We suggest
                     91: not using '/usr/new' if you have X Version 10, to avoid confusion over
                     92: what version of X a program is for.  Version 10 and Version 11 are
                     93: completely incompatible.  The default homes for fonts and the RGB database
                     94: for X11 will be in '/usr/lib/X11'.
                     95: 
                     96:     The code falls into two categories, client side and server side.  The
                     97: top level directories 'lib' and 'clients' are client side code.  They should
                     98: be made in that order.  In parallel with this, you can make the server side
                     99: code, in the directories 'fonts' and 'server'.  More details on server side
                    100: building follow; client side notes follow them.
                    101: 
                    102: Making the server
                    103: -----------------
                    104: 
                    105:     There are Apollo-specific entries in 'server/include/servermd.h' which
                    106: specify bit order, byte order, and pad boundaries for characters in fonts.
                    107: The latter of these is set to 2 (i.e. character glyphs start on word
                    108: boundaries), but it can be changed to 1 or 4.  1 makes font files smaller
                    109: but prevents them from working on non-68020 systems, since the server will
                    110: get odd address errors.  4 makes them bigger; it may improve text drawing
                    111: performance somewhat.  The font compiler and the server/ddx/mfb code must be
                    112: compiled with the same version of this header file!
                    113: 
                    114:     To make the fonts that the server will use, you must compile them from
                    115: their source forms.  First, make the font compiler in 'fonts/compiler'.  After
                    116: building the font compiler, run it on each of the font sources in 'fonts/bdf',
                    117: redirecting its output to the 'fonts/snf' directory.  All this is actually
                    118: controlled by 'fonts/Makefile'.
                    119: 
                    120:     The Apollo server itself uses code from the following directories:
                    121: 
                    122:     server/os/4.2bsd
                    123:     server/dix
                    124:     server/ddx/mi
                    125:     server/ddx/mfb
                    126:     server/ddx/apollo
                    127: 
                    128:     Only these directories need to be built.  (They depend on the include
                    129: files in 'include' and 'server/include', of course.)
                    130: 
                    131:     In 'server/include/site.h' are definitions for pathnames for fonts and
                    132: the color database.  You may wish to decide where these things will live
                    133: now, so you can edit this file if necessary.  If you decide differently
                    134: later, you will need to re-edit this file and remake the server, or always
                    135: supply server command line options to override the defaults.
                    136: 
                    137:     You may want to do the following for the benefit of the OS code:
                    138: 
                    139:       /com/crl /usr/include/machine/machparam.h /usr/include/machine/param.h
                    140: 
                    141:     Now you can go to the 'server' directory and type 'make Xapollo'.
                    142: 
                    143: 
                    144: Making the client side code
                    145: ---------------------------
                    146: 
                    147:     The Xlib code, the basic subroutine library interface to the protocol for
                    148: clients written in C, resides in 'lib/X'.
                    149: 
                    150:     Xlib requires nothing special; you can just make it.  This takes a long
                    151: time, especially if you let it compile everything twice in order to make both
                    152: debuggable and non-debuggable versions.  You may want to change the Imakefile
                    153: or Makefile to make only one flavor of object file.
                    154: 
                    155:     Some routines to assist porting from X10 are in 'lib/oldX'; you may wish
                    156: to make this library as well.  Some code in 'demos' uses it.  Also,
                    157: 'lib/oldXMenu' has a version of the X10 XMenu library which you may want.
                    158: 
                    159:     Two versions of the X toolkit, layered on Xlib, are in 'lib/Xtk' and
                    160: 'lib/oldXtk'.  To our current knowledge, 'lib/oldXtk' is the one that will be
                    161: used by any clients requiring the toolkit.
                    162: 
                    163:     In the 'lib/oldXtk' directory, there is a change.  'Load.c' cannot be made
                    164: to work on Apollos, since it relies on '/dev/kmem'; it's best to just remove
                    165: references to 'Load.[co]' from the Imakefile or Makefile.
                    166: 
                    167:     The toolkit code may or may not refer to /usr/include/string.h instead of
                    168: /usr/include/strings.h, which is what it really wants.  If you don't have
                    169: the former, you may wish to make a link of that name to the latter, or make
                    170: a version of the former which #include's the latter, or something.
                    171: 
                    172:     Now the toolkit can be made.
                    173: 
                    174:     Finally, you can make the client programs.  Note that 'xload' wants to use
                    175: the routines from 'lib/oldXtk/Load.c', which is not available on Apollos as
                    176: explained above, so an Apollo version of 'xload' isn't useful.
                    177: 
                    178: 
                    179: HOW TO INSTALL IT
                    180: -----------------
                    181: 
                    182:     Copy the compiled font files in 'fonts/snf' to wherever you said they would
                    183: live in 'server/include/site.h'.  The server is in 'server/Xapollo'; it will now
                    184: run.  Client programs are in their respective subdirectories of 'clients',
                    185: 'demos' or 'hacks'.  Put these executables wherever is convenient.
                    186: 
                    187: 
                    188: HOW TO RUN IT
                    189: -------------
                    190: 
                    191:     You must have TCP/IP installed and running.
                    192: 
                    193:     The server borrows the entire display.  Therefore, there are three
                    194: approaches to debugging and running it.  One is to get a dumb terminal and run
                    195: a shell to invoke the server from it.  Another is to /com/crp or rlogin to the
                    196: node that will run the server from a different node, preferably right next to
                    197: it.  The last is to make shell scripts that will run the server, sleep for long
                    198: enough to let it initialize itself, and then run some clients.  This last
                    199: approach requires the least hardware, but requires working more-or-less blind,
                    200: until you have a working server and xterm running.
                    201: 
                    202:     As regards the keyboard, the following comment in 'server/ddx/apollo/
                    203: apollo_io.c' tells the story.
                    204: 
                    205: /*
                    206:  *  We assume Apollo keyboard number 2 (with mouse, without numeric keypad or lighted
                    207:  *  CapsLock key).  (Keyboard number 1 is unsupported, since it can't have a mouse.  Keyboard
                    208:  *  number 3 is a superset of keyboard number 2.  It has the ability to generate raw key up/down
                    209:  *  transitions; this should be supported but isn't.  Keyboard number 2 cannot generate raw key
                    210:  *  up/downs.)
                    211:  *
                    212:  *  Only the white keys, the four basic arrow keys and F1-F8 are implemented now.
                    213:  *  Up transitions for the white keys are faked.
                    214:  *  Positions of the real control and shift keys are inferred from the raw input character;
                    215:  *      their transitions are faked if necessary.
                    216:  *  "Mouse" Control, Shift and Meta keys are as for Apollo V10 driver:
                    217:  *      Control:  KBD_$LD    Boxed up-arrow     Lower left corner of left-hand keypad
                    218:  *      Shift:    KBD_$LF    Boxed down-arrow   Lower right corner of left-hand keypad
                    219:  *      Meta:     KBD_$R1    "POP"              Lower right corner of main keyboard
                    220:  *
                    221:  *  You can bail out of the server by hitting the ABORT/EXIT key (KBD_$R5S/KBD_$R5).  Unshifted,
                    222:  *  it will exit the server in an orderly fashion.  If this doesn't work (i.e. server is wedged),
                    223:  *  the shifted version is the system quit character.
                    224:  */
                    225: 
                    226:     When running a client program, the environment variable DISPLAY should be
                    227: set, although some clients allow the display to be specified on the command line
                    228: as well.  In the case of the C shell, you should say:
                    229: 
                    230:     setenv DISPLAY <host-name-of-server-node>:0
                    231: 
                    232:     Since the selection of fonts is probably not identical to what it was for
                    233: V10, you might want to check any ~/.Xdefaults or ~/.uwmrc files left over from
                    234: V10 to be sure you are not trying to use non-existent fonts.
                    235: 
                    236:     In order to establish a connection from a remote client, the name of the
                    237: host running the client program must exist as an entry in the server's file
                    238: '/etc/X0.hosts'; this is the list of "trusted" hosts.  This pathname is
                    239: constructed in 'server/os/4.2bsd/access.c', routine ResetHosts.  The 'xhost'
                    240: client program will also add a host to the list of trusted hosts, until the
                    241: server resets itself.
                    242: 
                    243:     If you have the unofficial UDS support code (the uds type manager), a client
                    244: can use it to establish a connection to the local server via use of the display
                    245: named "unix:0".
                    246: 
                    247: 
                    248: LIMITATIONS
                    249: -----------
                    250: 
                    251:     As mentioned above, this is a monochrome-only port using the portable MFB
                    252: code, therefore performance is not as good as it is for the Apollo X Version 10
                    253: implementation.  Also, the keyboard support for keyboard 3 could allow more
                    254: natural use of control and shift, and it could add more Apollo keys to the
                    255: keymap.
                    256: 
                    257: 
                    258: FIXED BUGS SINCE BETA
                    259: ---------------------
                    260: 
                    261:     This version of the Apollo server has a working software cursor (to the
                    262: best of our knowledge).
                    263: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.