Annotation of 43BSDTahoe/new/X/doc/Paper/x.PS, revision 1.1.1.1

1.1       root        1: %!PS-Adobe-1.0
                      2: %%Title: x.mss
                      3: %%DocumentFonts: (atend)
                      4: %%Creator: Jim Gettys,Jim,E40-342CM,3-1326,6460340 and Scribe 5(1501)
                      5: %%CreationDate: 19 November 1986 12:40
                      6: %%Pages: (atend)
                      7: %%EndComments
                      8: % PostScript Prelude for Scribe.
                      9: /BS {/SV save def 0.0 792.0 translate .01 -.01 scale} bind def
                     10: /ES {showpage SV restore} bind def
                     11: /SC {setrgbcolor} bind def
                     12: /FMTX matrix def
                     13: /RDF {WFT SLT 0.0 eq
                     14:   {SSZ 0.0 0.0 SSZ neg 0.0 0.0 FMTX astore}
                     15:   {SSZ 0.0 SLT sin SLT cos div SSZ mul SSZ neg 0.0 0.0 FMTX astore}
                     16:   ifelse makefont setfont} bind def
                     17: /SLT 0.0 def
                     18: /SI { /SLT exch cvr def RDF} bind def
                     19: /WFT /Courier findfont def
                     20: /SF { /WFT exch findfont def RDF} bind def
                     21: /SSZ 1000.0 def
                     22: /SS { /SSZ exch 100.0 mul def RDF} bind def
                     23: /AF { /WFT exch findfont def /SSZ exch 100.0 mul def RDF} bind def
                     24: /MT /moveto load def
                     25: /XM {currentpoint exch pop moveto} bind def
                     26: /UL {gsave newpath moveto dup 2.0 div 0.0 exch rmoveto
                     27:    setlinewidth 0.0 rlineto stroke grestore} bind def
                     28: /LH {gsave newpath moveto setlinewidth
                     29:    0.0 rlineto
                     30:    gsave stroke grestore} bind def
                     31: /LV {gsave newpath moveto setlinewidth
                     32:    0.0 exch rlineto
                     33:    gsave stroke grestore} bind def
                     34: /BX {gsave newpath moveto setlinewidth
                     35:    exch
                     36:    dup 0.0 rlineto
                     37:    exch 0.0 exch neg rlineto
                     38:    neg 0.0 rlineto
                     39:    closepath
                     40:    gsave stroke grestore} bind def
                     41: /BX1 {grestore} bind def
                     42: /BX2 {setlinewidth 1 setgray stroke grestore} bind def
                     43: /PB {/PV save def translate 100.0 -100.0 scale pop} bind def
                     44: /PE {PV restore} bind def
                     45: /SH /show load def
                     46: /MX {exch show 0.0 rmoveto} bind def
                     47: /W {0 32 4 -1 roll widthshow} bind def
                     48: /WX {0 32 5 -1 roll widthshow 0.0 rmoveto} bind def
                     49: %%EndProlog
                     50: %%Page: 1 1 
                     51: BS
                     52: 0 SI
                     53: 15 /Helvetica-Bold AF
                     54: 22596 8294 MT
                     55: (The X Window System)SH
                     56: 8 /Helvetica AF
                     57: 34712 10501 MT
                     58: (1)SH
                     59: 10 SS 
                     60: 26043 10852 MT
                     61: (Robert W. Scheifler)SH
                     62: 22236 11995 MT
                     63: (MIT Laboratory for Computer Science)SH
                     64: 8 SS 
                     65: 32739 13930 MT
                     66: (2)SH
                     67: 10 SS 
                     68: 28016 14281 MT
                     69: (Jim Gettys)SH
                     70: 23931 15424 MT
                     71: (Digital Equipment Corporation)SH
                     72: 26320 16567 MT
                     73: (MIT Project Athena)SH
                     74: 28460 18853 MT
                     75: (July 1986)SH
                     76: 8 SS 
                     77: 35352 19650 MT
                     78: (3)SH
                     79: 10 SS 
                     80: 25403 20001 MT
                     81: (Revised October 1986)SH
                     82: 13 /Helvetica-Bold AF
                     83: 27963 27989 MT
                     84: (Abstract)SH
                     85: 10 /Helvetica AF
                     86: 7200 30522 MT
                     87: (An overview of the X Window System is presented, focusing on the system substrate and the)
                     88: 94 W( low-level)93 W
                     89: 7200 31665 MT
                     90: (facilities provided to build applications and to manage the desktop.)
                     91: 365 W( The)
                     92: 1009 W( system provides high-)366 W
                     93: 7200 32808 MT
                     94: (performance, high-level, device-independent graphics.)
                     95: 190 W( A)
                     96: 656 W( hierarchy of resizable, overlapping windows)189 W
                     97: 7200 33951 MT
                     98: (allows a wide variety of application and user interfaces to be built)
                     99: 52 W( easily.  Network-transparent access to)53 W
                    100: 7200 35094 MT
                    101: (the display provides an important degree of functional)
                    102: 445 W( separation, without significantly affecting)444 W
                    103: 7200 36237 MT
                    104: (performance, that is crucial to building applications for a)
                    105: 7 W( distributed environment.  To a reasonable extent,)8 W
                    106: 7200 37380 MT
                    107: (desktop management can be custom tailored to individual environments, without)
                    108: 218 W( modifying the base)217 W
                    109: 7200 38523 MT
                    110: (system and typically without affecting applications.)SH
                    111: 7200 40807 MT
                    112: (Categories and Subject Descriptors:  C.2.2 [)6 W
                    113: /Helvetica-Bold SF
                    114: (Computer-Communication Networks)6 W
                    115: /Helvetica SF
                    116: (]: Network)
                    117: 290 W( Protocols -)6 W
                    118: /Helvetica-Oblique SF
                    119: 7200 41950 MT
                    120: (protocol architecture)203 W
                    121: /Helvetica SF
                    122: (; C.2.4 [)203 W
                    123: /Helvetica-Bold SF
                    124: (Computer-Communication Networks)203 W
                    125: /Helvetica SF
                    126: (]: Distributed Systems)
                    127: 203 W( -)202 W
                    128: /Helvetica-Oblique SF
                    129: 49387 XM
                    130: (distributed)SH
                    131: 7200 43093 MT
                    132: (applications)SH
                    133: /Helvetica SF
                    134: (; D.4.4 [)417 W
                    135: /Helvetica-Bold SF
                    136: (Operating Systems)417 W
                    137: /Helvetica SF
                    138: (]: Communication)
                    139: 417 W( Management -)418 W
                    140: /Helvetica-Oblique SF
                    141: 42801 XM
                    142: (network communication,)418 W
                    143: 7200 44236 MT
                    144: (terminal management)290 W
                    145: /Helvetica SF
                    146: (; H.1.2 [)290 W
                    147: /Helvetica-Bold SF
                    148: (Information Systems)290 W
                    149: /Helvetica SF
                    150: (]: User/Machine Systems)
                    151: 290 W( -)289 W
                    152: /Helvetica-Oblique SF
                    153: 44584 XM
                    154: (human factors)289 W
                    155: /Helvetica SF
                    156: (; I.3.2)289 W
                    157: 7200 45379 MT
                    158: ([)SH
                    159: /Helvetica-Bold SF
                    160: (Computer Graphics)272 W
                    161: /Helvetica SF
                    162: (]: Graphic Systems -)272 W
                    163: /Helvetica-Oblique SF
                    164: 27510 XM
                    165: (distributed/network graphics)273 W
                    166: /Helvetica SF
                    167: (; I.3.4 [)273 W
                    168: /Helvetica-Bold SF
                    169: (Computer Graphics)273 W
                    170: /Helvetica SF
                    171: (]:)SH
                    172: 7200 46522 MT
                    173: (Graphics Utilities -)112 W
                    174: /Helvetica-Oblique SF
                    175: 15926 XM
                    176: (graphics packages, software support)112 W
                    177: /Helvetica SF
                    178: (; I.3.6 [)111 W
                    179: /Helvetica-Bold SF
                    180: (Computer Graphics)111 W
                    181: /Helvetica SF
                    182: (]: Methodology and)111 W
                    183: 7200 47665 MT
                    184: (Techniques -)SH
                    185: /Helvetica-Oblique SF
                    186: 13258 XM
                    187: (device independence, interaction techniques)SH
                    188: /Helvetica SF
                    189: 7200 49949 MT
                    190: (General terms:  Design, Experimentation, Human Factors, Standardization)SH
                    191: 7200 52233 MT
                    192: (Additional Key Words and Phrases:  window systems, window managers, virtual terminals)SH
                    193: 10800 50 7200 62660 UL
                    194: 6 SS 
                    195: 8090 64055 MT
                    196: (1)SH
                    197: 8 SS 
                    198: 8424 64368 MT
                    199: (545 Technology Square, Cambridge, MA 02139.)SH
                    200: 6 SS 
                    201: 8090 65963 MT
                    202: (2)SH
                    203: 8 SS 
                    204: 8424 66276 MT
                    205: (Project Athena, MIT, Cambridge, MA 02139.)SH
                    206: 6 SS 
                    207: 8090 67871 MT
                    208: (3)SH
                    209: 8 SS 
                    210: 8424 68184 MT
                    211: (To appear in Transactions on Graphics #63, Special Issue on User)
                    212: 231 W( Interface Software, Copyright 1986, Association for)230 W
                    213: 7200 69138 MT
                    214: (Computing Machinery. Permission to copy without fee all or part of this material)
                    215: 19 W( is granted provided that the copies are not made or)20 W
                    216: 7200 70092 MT
                    217: (distributed for direct commercial advantage, the ACM copyright notice and)
                    218: 15 W( the title of the publication and its date appear, and notice)14 W
                    219: 7200 71046 MT
                    220: (is given that copying is by permission of the Association for Computing Machinery.  To copy otherwise, or)
                    221: 5 W( to republish requires a fee)6 W
                    222: 7200 72000 MT
                    223: (and/or specific permission.)SH
                    224: ES
                    225: %%Page: 2 2 
                    226: BS
                    227: 0 SI
                    228: 10 /Helvetica-Bold AF
                    229: 30322 4329 MT
                    230: (2)SH
                    231: 12 SS 
                    232: 7200 8075 MT
                    233: (1. Introduction)SH
                    234: 10 /Helvetica AF
                    235: 22765 9218 MT
                    236: (The X Window System \050or simply X)SH
                    237: 8 SS 
                    238: 53555 10755 MT
                    239: (4)SH
                    240: 10 SS 
                    241: 8312 11106 MT
                    242: (developed at MIT has achieved fairly)
                    243: 398 W( widespread popularity recently, particularly in the Unix)399 W
                    244: 7200 12532 MT
                    245: (community. In)
                    246: 717 W( this paper, we present an overview of X, focusing on the system substrate and the)219 W
                    247: 7200 13958 MT
                    248: (low-level facilities provided to build applications and to manage the desktop.  In)
                    249: 170 W( X, this base window)171 W
                    250: 7200 15384 MT
                    251: (system provides)
                    252: 44 W( high-performance graphics to a hierarchy of resizable windows.  Rather than mandating)43 W
                    253: 7200 16810 MT
                    254: (a particular user interface, X provides primitives to support several policies and styles.)
                    255: 204 W( Unlike)
                    256: 688 W( most)205 W
                    257: 7200 18236 MT
                    258: (window systems, the base)
                    259: 127 W( system in X is defined by a)126 W
                    260: /Helvetica-Oblique SF
                    261: 32710 XM
                    262: (network protocol)126 W
                    263: /Helvetica SF
                    264: (: asynchronous)
                    265: 530 W( stream-based)126 W
                    266: 7200 19662 MT
                    267: (inter-process communication replaces the traditional procedure call or kernel call)
                    268: 417 W( interface.  An)418 W
                    269: 7200 21088 MT
                    270: (application can utilize windows on any display in a)
                    271: 39 W( network in a device-independent, network-transparent)38 W
                    272: 7200 22514 MT
                    273: (fashion. Interposing)
                    274: 618 W( a network)
                    275: 170 W( connection greatly enhances the utility of the window system, without)171 W
                    276: 7200 23940 MT
                    277: (significantly affecting performance.  The performance of existing X implementations is)
                    278: 195 W( comparable to)194 W
                    279: 7200 25366 MT
                    280: (contemporary window systems, and in general is limited by display hardware)
                    281: 308 W( rather than network)309 W
                    282: 7200 26792 MT
                    283: (communication. For)
                    284: 676 W( example, 19500 characters per second and)
                    285: 199 W( 3500 short vectors per second are)198 W
                    286: 7200 28218 MT
                    287: (possible on Digital Equipment Corporation's VAXStation-II/GPX,)
                    288: 296 W( both locally and over a local area)297 W
                    289: 7200 29644 MT
                    290: (network, and these figures are very close to the limits of the display hardware.)SH
                    291: 8312 32211 MT
                    292: (X is the result of the simultaneous need for a window system from two separate groups at MIT.  In)
                    293: 39 W( the)38 W
                    294: 7200 33637 MT
                    295: (summer of 1984, the Argus)
                    296: 154 W( system)
                    297: 155 W( [13])
                    298: SH( at the Laboratory for Computer Science needed a debugging)155 W
                    299: 7200 35063 MT
                    300: (environment for multi-process distributed applications, and)
                    301: 214 W( a window system seemed the only viable)213 W
                    302: 7200 36489 MT
                    303: (solution. Project)
                    304: 285 W( Athena)
                    305: 4 W( [3])
                    306: SH( was faced with dozens, and eventually thousands of workstations with bitmap)4 W
                    307: 7200 37915 MT
                    308: (displays, and needed a window system to make the displays useful.  Both)
                    309: 69 W( groups were starting with the)68 W
                    310: 7200 39341 MT
                    311: (Digital VS100 display)
                    312: 79 W( [11])
                    313: SH( and)
                    314: 79 W( VAX hardware, but it was clear at the outset that other architectures and)80 W
                    315: 7200 40767 MT
                    316: (displays had to be supported.  In particular,)
                    317: 91 W( equal numbers of IBM workstations with bitmap displays of)90 W
                    318: 7200 42193 MT
                    319: (unknown type were expected eventually within Project Athena.  Portability was)
                    320: 59 W( therefore a goal from the)60 W
                    321: 7200 43619 MT
                    322: (start. Although)
                    323: 402 W( all of the initial implementation work was for Berkeley Unix, it was clear that the network)62 W
                    324: 7200 45045 MT
                    325: (protocol should not depend on aspects of the operating system.)SH
                    326: 8312 47612 MT
                    327: (The name X derives from the lineage of the system.  At Stanford University, Paul Asente and Brian)121 W
                    328: 7200 49038 MT
                    329: (Reid had begun)
                    330: 310 W( work on the W window system)
                    331: 309 W( [2],)
                    332: SH( as an alternative to VGTS)
                    333: 309 W( [10, 18])
                    334: SH( for the V)309 W
                    335: 7200 50464 MT
                    336: (system [4].)
                    337: SH( Both)
                    338: 330 W( VGTS and W allow network-transparent access to the display, using the synchronous)
                    339: 26 W( V)27 W
                    340: 7200 51890 MT
                    341: (communication mechanism.  Both systems provide "text" windows)
                    342: 96 W( for ASCII terminal emulation.  VGTS)95 W
                    343: 7200 53316 MT
                    344: (provides graphics windows driven by fairly)
                    345: 111 W( high-level object definitions from a structured display file; W)112 W
                    346: 7200 54742 MT
                    347: (provides graphics)
                    348: 211 W( windows based on a simple display-list mechanism, with limited functionality.  We)210 W
                    349: 7200 56168 MT
                    350: (acquired a Unix-based version of W for the)
                    351: 188 W( VS100 \050with synchronous communication over TCP)
                    352: 189 W( [21]\051)SH
                    353: 7200 57594 MT
                    354: (done by)
                    355: 194 W( Asente and Chris Kent at Digital's Western Research Laboratory.  From just a few days of)193 W
                    356: 7200 59020 MT
                    357: (experimentation, it was clear that a network-transparent hierarchical window system)
                    358: 116 W( was desirable, but)117 W
                    359: 7200 60446 MT
                    360: (that restricting the system to any fixed set of application-specific modes was completely inadequate.)
                    361: 104 W( It)484 W
                    362: 7200 61872 MT
                    363: (was also clear that, although)
                    364: 51 W( synchronous communication was perhaps acceptable in the V system \050due)52 W
                    365: 7200 63298 MT
                    366: (to very fast networking primitives\051, it was completely inadequate in most other operating)
                    367: 19 W( environments.  X)18 W
                    368: 7200 64724 MT
                    369: (is our)
                    370: 35 W( "reaction" to W. The X window hierarchy comes directly from W, although numerous systems have)36 W
                    371: 7200 66150 MT
                    372: (been built with hierarchy)
                    373: 243 W( in at least some form)
                    374: 242 W( [8, 12, 25, 28, 30, 31, 32, 33, 29].)
                    375: SH( The)
                    376: 762 W( asynchronous)242 W
                    377: 7200 67576 MT
                    378: (communication protocol used in X is a)
                    379: 33 W( significant improvement over the synchronous protocol used in W,)34 W
                    380: 10800 50 7200 70292 UL
                    381: 6 SS 
                    382: 8090 71687 MT
                    383: (4)SH
                    384: 8 SS 
                    385: 8424 72000 MT
                    386: (Unix is a trademark of AT&T Bell Laboratories.)SH
                    387: ES
                    388: %%Page: 3 3 
                    389: BS
                    390: 0 SI
                    391: 10 /Helvetica-Bold AF
                    392: 30322 4329 MT
                    393: (3)SH
                    394: /Helvetica SF
                    395: 7200 7929 MT
                    396: (but is very similar to that)
                    397: 137 W( used in Andrew)
                    398: 136 W( [7, 16].)
                    399: SH( X)
                    400: 550 W( differs from all of these systems in the degree to)136 W
                    401: 7200 9355 MT
                    402: (which both graphics functions and "system")
                    403: 381 W( functions are pushed back \050across the network\051 as)382 W
                    404: 7200 10781 MT
                    405: (application functions, and in the ability to transparently tailor desktop management.)SH
                    406: 8312 13348 MT
                    407: (The next)
                    408: 215 W( section presents several high-level requirements that we believe a window system must)214 W
                    409: 7200 14774 MT
                    410: (satisfy to be)
                    411: 2 W( a viable standard in a network environment, and indicates where the design of X fails to meet)3 W
                    412: 7200 16200 MT
                    413: (some of these requirements.)
                    414: 149 W( In)
                    415: 575 W( Section 3 we describe the overall X system model, and the effect of)148 W
                    416: 7200 17626 MT
                    417: (network-based communication on that)
                    418: 170 W( model.  Section 4 describes the structure of windows, and the)171 W
                    419: 7200 19052 MT
                    420: (primitives for manipulating that structure.)
                    421: 112 W( Section)
                    422: 500 W( 5 explains the color model used in X, and Section 6)111 W
                    423: 7200 20478 MT
                    424: (presents the text and graphics facilities.  Section 7 discusses the)
                    425: 24 W( issues of window exposure and refresh,)25 W
                    426: 7200 21904 MT
                    427: (and their resolution)
                    428: 220 W( in X. Section 8 deals with input event handling.  In Section 9, we describe the)219 W
                    429: 7200 23330 MT
                    430: (mechanisms for desktop management.)SH
                    431: 8 SS 
                    432: 22785 25546 MT
                    433: (5)SH
                    434: 10 SS 
                    435: 8312 25897 MT
                    436: (This paper)
                    437: 5 W( describes the version)6 W
                    438: 23514 XM
                    439: (of X that is currently in widespread use.  The design of this version is)6 W
                    440: 7200 27323 MT
                    441: (inadequate in several respects.  With our)
                    442: 308 W( experience to date, and encouraged by the number of)307 W
                    443: 7200 28749 MT
                    444: (universities and manufacturers taking a serious interest in X, we have designed a new version that should)7 W
                    445: 7200 30175 MT
                    446: (satisfy a)
                    447: 102 W( significantly wider community.  Section 10 discusses a number of problems with the current X)101 W
                    448: 7200 31601 MT
                    449: (design, and gives a general idea of what changes are contemplated.)SH
                    450: 12 /Helvetica-Bold AF
                    451: 7200 35356 MT
                    452: (2. Requirements)SH
                    453: 10 /Helvetica AF
                    454: 8312 36782 MT
                    455: (A window system contains many interfaces.  A)28 W
                    456: /Helvetica-Oblique SF
                    457: 29377 XM
                    458: (programming)SH
                    459: /Helvetica SF
                    460: 35573 XM
                    461: (interface is a library of routines and)
                    462: 28 W( types)29 W
                    463: 7200 38208 MT
                    464: (provided in a programming language for interacting with the window system.  Both low-level \050e.g.,)
                    465: 130 W( line)129 W
                    466: 7200 39634 MT
                    467: (drawing\051 and high-level \050e.g., menus\051 interfaces are typically provided.  An)151 W
                    468: /Helvetica-Oblique SF
                    469: 41985 XM
                    470: (application)SH
                    471: /Helvetica SF
                    472: 47194 XM
                    473: (interface is)
                    474: 151 W( the)152 W
                    475: 7200 41060 MT
                    476: (mechanical interaction with the user and the visual appearance that)
                    477: 188 W( is specific to the application.  A)187 W
                    478: /Helvetica-Oblique SF
                    479: 7200 42486 MT
                    480: (management)SH
                    481: /Helvetica SF
                    482: 13540 XM
                    483: (interface is the mechanical interaction with the user)
                    484: 226 W( dealing with overall control of the)227 W
                    485: 7200 43912 MT
                    486: (desktop and the input devices.  The management interface defines how applications are arranged)
                    487: 119 W( and)118 W
                    488: 7200 45338 MT
                    489: (rearranged on the screen, and how the user switches between applications; an individual)
                    490: 188 W( application)189 W
                    491: 7200 46764 MT
                    492: (interface defines how information is presented and manipulated within that application.  The)SH
                    493: /Helvetica-Oblique SF
                    494: 47942 XM
                    495: (user)SH
                    496: /Helvetica SF
                    497: 50165 XM
                    498: (interface)SH
                    499: 7200 48190 MT
                    500: (is the sum total of all application and management interfaces.)SH
                    501: 8312 50757 MT
                    502: (Besides applications, we distinguish three major)
                    503: 269 W( components of a window system.  The)270 W
                    504: /Helvetica-Oblique SF
                    505: 50666 XM
                    506: (window)SH
                    507: 8 /Helvetica AF
                    508: 11146 51832 MT
                    509: (6)SH
                    510: 10 /Helvetica-Oblique AF
                    511: 7200 52183 MT
                    512: (manager)SH
                    513: /Helvetica SF
                    514: 12233 XM
                    515: (implements the desktop portion of)
                    516: 364 W( the management interface; it controls the size and)363 W
                    517: 7200 53609 MT
                    518: (placement of application windows, and also may)
                    519: 75 W( control application window attributes such as titles and)76 W
                    520: 7200 55035 MT
                    521: (borders. The)518 W
                    522: /Helvetica-Oblique SF
                    523: 13785 XM
                    524: (input manager)120 W
                    525: /Helvetica SF
                    526: 20694 XM
                    527: (implements the remainder of the management interface; it controls which)119 W
                    528: 7200 56461 MT
                    529: (applications see input from which devices \050e.g., keyboard and mouse\051.  The)73 W
                    530: /Helvetica-Oblique SF
                    531: 41813 XM
                    532: (base window system)73 W
                    533: /Helvetica SF
                    534: 51536 XM
                    535: (is the)74 W
                    536: 7200 57887 MT
                    537: (substrate on which applications, window managers, and input managers are built.)SH
                    538: 8312 60454 MT
                    539: (In this paper we are concerned with the base)
                    540: 27 W( window system of X, with the facilities it provides to build)26 W
                    541: 7200 61880 MT
                    542: (applications and managers.  The following requirements on the base window system crystallized)
                    543: 90 W( during)91 W
                    544: 7200 63306 MT
                    545: (the design of X \050a few were not formulated until late in the design process\051:)SH
                    546: 9424 64707 MT
                    547: (1.)SH
                    548: 10536 XM
                    549: (The system should be implementable on a variety of displays.)SH
                    550: 10800 50 7200 68384 UL
                    551: 6 SS 
                    552: 8090 69779 MT
                    553: (5)SH
                    554: 8 SS 
                    555: 8424 70092 MT
                    556: (Version 10.)SH
                    557: 6 SS 
                    558: 8090 71687 MT
                    559: (6)SH
                    560: 8 SS 
                    561: 8424 72000 MT
                    562: (Some people use this term for what we call the base window system; that is not the meaning here.)SH
                    563: ES
                    564: %%Page: 4 4 
                    565: BS
                    566: 0 SI
                    567: 10 /Helvetica-Bold AF
                    568: 30322 4329 MT
                    569: (4)SH
                    570: /Helvetica SF
                    571: 10536 7929 MT
                    572: (The system should work with nearly any bitmap)
                    573: 18 W( display, and a variety of input devices.  Our)17 W
                    574: 10536 9072 MT
                    575: (design focused on workstation-class)
                    576: 41 W( display technology likely to be available in a university)42 W
                    577: 10536 10215 MT
                    578: (environment over)
                    579: 63 W( the next few years.  At one end of the spectrum is a simple frame buffer)62 W
                    580: 10536 11358 MT
                    581: (and monochrome monitor, driven directly by the host CPU with no)
                    582: 213 W( additional hardware)214 W
                    583: 10536 12501 MT
                    584: (support. At)
                    585: 334 W( the other end of the spectrum is a multi-plane display with)
                    586: 28 W( color monitor, driven)27 W
                    587: 10536 13644 MT
                    588: (by a high-performance graphics co-processor.  Input devices such)
                    589: 207 W( as keyboards, mice,)208 W
                    590: 10536 14787 MT
                    591: (tablets, joysticks, light pens, and touch screens should be supported.)SH
                    592: 9424 16602 MT
                    593: (2.)SH
                    594: 10536 XM
                    595: (Applications must be device independent.)SH
                    596: 10536 18417 MT
                    597: (There are several aspects to device independence.)
                    598: 274 W( Most)
                    599: 825 W( importantly, it must not be)273 W
                    600: 10536 19560 MT
                    601: (necessary to rewrite, recompile, or)
                    602: 282 W( even relink an application for each new hardware)283 W
                    603: 10536 20703 MT
                    604: (display. Nearly)
                    605: 310 W( as important, every graphics function defined by the system should work)
                    606: 16 W( on)15 W
                    607: 10536 21846 MT
                    608: (virtually every supported display; the alternative, which is)
                    609: 404 W( to use GKS-style inquire)405 W
                    610: 10536 22989 MT
                    611: (operations [9])
                    612: SH( to determine the set of implemented functions at run-time, leads)
                    613: 125 W( to tedious)124 W
                    614: 10536 24132 MT
                    615: (case analysis in every)
                    616: 146 W( application, and to inconsistent user interfaces.  A third aspect of)147 W
                    617: 10536 25275 MT
                    618: (device independence is that, as far as possible, applications should not need dual control)98 W
                    619: 10536 26418 MT
                    620: (paths to work on both monochrome and color displays.)SH
                    621: 9424 28233 MT
                    622: (3.)SH
                    623: 10536 XM
                    624: (The system must be network transparent:  an)
                    625: 51 W( application running on one machine must be)52 W
                    626: 10536 29376 MT
                    627: (able to utilize)
                    628: 4 W( a display on some other machine.  The two machines should not have to have)3 W
                    629: 10536 30519 MT
                    630: (the same architecture or operating system.)SH
                    631: 10536 32334 MT
                    632: (There are numerous examples of)
                    633: 180 W( why this important:  a compute-intensive VLSI design)181 W
                    634: 10536 33477 MT
                    635: (program executing on a mainframe,)
                    636: 84 W( but displaying results on a workstation; an application)83 W
                    637: 10536 34620 MT
                    638: (distributed over)
                    639: 13 W( several stand-alone processors, but interacting with a user at a workstation;)14 W
                    640: 10536 35763 MT
                    641: (a professor running a program)
                    642: 47 W( on one workstation, presenting results simultaneously on all)46 W
                    643: 10536 36906 MT
                    644: (student workstations.)SH
                    645: 10536 38721 MT
                    646: (In a network environment, there are certain to be applications that must run on particular)119 W
                    647: 10536 39864 MT
                    648: (machines or architectures.)
                    649: 75 W( Examples)
                    650: 426 W( include proprietary software, applications depending)74 W
                    651: 10536 41007 MT
                    652: (on specific architectural properties, and programs manipulating)
                    653: 233 W( large databases.  Such)234 W
                    654: 10536 42150 MT
                    655: (applications still should be accessible to all users.)
                    656: 103 W( In)
                    657: 482 W( a truly heterogeneous environment,)102 W
                    658: 10536 43293 MT
                    659: (not all programming languages and programming systems are supported on all machines,)86 W
                    660: 10536 44436 MT
                    661: (and it is very undesirable to have to write an interactive front end)
                    662: 87 W( in multiple languages in)86 W
                    663: 10536 45579 MT
                    664: (order to make the application generally available.  With)
                    665: 60 W( network-transparent access, this is)61 W
                    666: 10536 46722 MT
                    667: (not necessary; a single front end written in the same language as the application suffices.)SH
                    668: 10536 48537 MT
                    669: (One might think that remote display)
                    670: 209 W( will be extremely infrequent, and that performance)208 W
                    671: 10536 49680 MT
                    672: (therefore is much less important than for local)
                    673: 269 W( display.  Experience at MIT, however,)270 W
                    674: 10536 50823 MT
                    675: (indicates that)
                    676: 120 W( many users routinely make use of the remote display capabilities in X, and)119 W
                    677: 10536 51966 MT
                    678: (that the performance of remote display is)
                    679: 119 W( quite important.  The desktop display, although)120 W
                    680: 10536 53109 MT
                    681: (physically connected to)
                    682: 266 W( a single computer, is used as a true)265 W
                    683: /Helvetica-Oblique SF
                    684: 40132 XM
                    685: (network virtual terminal)265 W
                    686: /Helvetica SF
                    687: (;)SH
                    688: 10536 54252 MT
                    689: (indeed, the idea of an X server \050see the next section\051)
                    690: 42 W( built into a Blit-like terminal)
                    691: 43 W( [20])
                    692: SH( is an)43 W
                    693: 10536 55395 MT
                    694: (intriguing one.)SH
                    695: 9424 57210 MT
                    696: (4.)SH
                    697: 10536 XM
                    698: (The system must support multiple applications displaying concurrently.)SH
                    699: 10536 59025 MT
                    700: (For example, it should be possible to display a clock with a)
                    701: 160 W( sweep second hand in one)159 W
                    702: 10536 60168 MT
                    703: (window, while simultaneously editing a file in another window.)SH
                    704: 9424 61983 MT
                    705: (5.)SH
                    706: 10536 XM
                    707: (The system should be capable of supporting many different application and management)121 W
                    708: 10536 63126 MT
                    709: (interfaces.)SH
                    710: 10536 64941 MT
                    711: (No single user interface is "best"; different communities have radically)
                    712: 43 W( different ideas about)42 W
                    713: 10536 66084 MT
                    714: (user interfaces.  Even within a)
                    715: 159 W( single community, "experts" and "novices" place different)160 W
                    716: 10536 67227 MT
                    717: (demands on an interface.)
                    718: 210 W( Rather)
                    719: 696 W( than mandating a particular user interface, the base)209 W
                    720: 10536 68370 MT
                    721: (window system should support a wide range of interfaces.)SH
                    722: 10536 70185 MT
                    723: (To achieve this, the system must)
                    724: 97 W( provide)98 W
                    725: /Helvetica-Oblique SF
                    726: 29613 XM
                    727: (hooks)SH
                    728: /Helvetica SF
                    729: 32657 XM
                    730: (\050mechanism\051 rather than)98 W
                    731: /Helvetica-Oblique SF
                    732: 44121 XM
                    733: (religion)SH
                    734: /Helvetica SF
                    735: 47720 XM
                    736: (\050policy\051.)SH
                    737: 10536 71328 MT
                    738: (For example, since menu styles and semantics vary dramatically among)
                    739: 243 W( different user)242 W
                    740: ES
                    741: %%Page: 5 5 
                    742: BS
                    743: 0 SI
                    744: 10 /Helvetica-Bold AF
                    745: 30322 4329 MT
                    746: (5)SH
                    747: /Helvetica SF
                    748: 10536 7929 MT
                    749: (interfaces, the)
                    750: 25 W( base window system must provide primitives from which menus can be built,)26 W
                    751: 10536 9072 MT
                    752: (rather than just providing a fixed menu facility.)SH
                    753: 10536 10887 MT
                    754: (The system should be designed in such a way that)
                    755: 30 W( it is possible to implement management)29 W
                    756: 10536 12030 MT
                    757: (policy both external to the base window system and)
                    758: 85 W( external to applications.  Applications)86 W
                    759: 10536 13173 MT
                    760: (should be largely independent of management policy and)
                    761: 89 W( mechanism; applications should)88 W
                    762: /Helvetica-Oblique SF
                    763: 10536 14316 MT
                    764: (react to)175 W
                    765: /Helvetica SF
                    766: 14500 XM
                    767: (management decisions, rather than)176 W
                    768: /Helvetica-Oblique SF
                    769: 31156 XM
                    770: (directing)SH
                    771: /Helvetica SF
                    772: 35389 XM
                    773: (those decisions.  For example, an)176 W
                    774: 10536 15459 MT
                    775: (application needs to be informed when one of its windows is resized, and)
                    776: 89 W( should react by)88 W
                    777: 10536 16602 MT
                    778: (reformatting the)
                    779: 206 W( information displayed, but involvement of the application should not be)207 W
                    780: 10536 17745 MT
                    781: (required in order for the user to change)
                    782: 274 W( the size.  Making applications management-)273 W
                    783: 10536 18888 MT
                    784: (independent, as well as device-independent, facilitates the sharing of)
                    785: 55 W( applications between)56 W
                    786: 10536 20031 MT
                    787: (diverse cultures.)SH
                    788: 9424 21846 MT
                    789: (6.)SH
                    790: 10536 XM
                    791: (The system must support)
                    792: 312 W( overlapping windows, including output to partially obscured)311 W
                    793: 10536 22989 MT
                    794: (windows.)SH
                    795: 10536 24804 MT
                    796: (This is in some sense a by-product of the previous)
                    797: 44 W( requirement, but is important enough to)45 W
                    798: 10536 25947 MT
                    799: (merit explicit statement.)
                    800: 330 W( Not)
                    801: 937 W( all user interfaces allow windows to overlap arbitrarily.)329 W
                    802: 10536 27090 MT
                    803: (However, even interfaces that do not allow application windows to overlap typically provide)51 W
                    804: 10536 28233 MT
                    805: (some form of pop-up menu)
                    806: 23 W( that overlaps application windows.  If such menus are built from)22 W
                    807: 10536 29376 MT
                    808: (windows, then support for overlapping windows must exist.)SH
                    809: 9424 31191 MT
                    810: (7.)SH
                    811: 10536 XM
                    812: (The system should support a hierarchy of resizable windows, and an)
                    813: 51 W( application should be)52 W
                    814: 10536 32334 MT
                    815: (able to use many windows at once.)SH
                    816: 10536 34149 MT
                    817: (Subwindows provide a clean,)
                    818: 75 W( powerful mechanism for exporting much of the basic system)74 W
                    819: 10536 35292 MT
                    820: (machinery back to the application for direct use.  Many applications make)
                    821: 59 W( use of their own)60 W
                    822: 10536 36435 MT
                    823: (window-like abstractions;)
                    824: 18 W( some even implement what is essentially another window system,)17 W
                    825: 10536 37578 MT
                    826: (nested within the "real" window)
                    827: 15 W( system.  It is important to support arbitrary levels of nesting.)16 W
                    828: 10536 38721 MT
                    829: (What is viewed as a single)
                    830: 247 W( window at one abstraction level may well require multiple)246 W
                    831: 10536 39864 MT
                    832: (subwindows at a lower level.  By providing)
                    833: 128 W( a true window hierarchy, application windows)129 W
                    834: 10536 41007 MT
                    835: (can be implemented as true windows within the system, freeing)
                    836: 306 W( the application from)305 W
                    837: 10536 42150 MT
                    838: (duplicating machinery such as clipping and input control.)SH
                    839: 9424 43965 MT
                    840: (8.)SH
                    841: 10536 XM
                    842: (The system should provide high-performance, high-quality support for)
                    843: 161 W( text, 2-D synthetic)162 W
                    844: 10536 45108 MT
                    845: (graphics, and imaging.)SH
                    846: 10536 46923 MT
                    847: (The base window system must provide "immediate")
                    848: 397 W( or "transparent" graphics:  the)396 W
                    849: 10536 48066 MT
                    850: (application describes the image precisely,)
                    851: 203 W( and the system does not attempt to second-)204 W
                    852: 10536 49209 MT
                    853: (guess the application.)
                    854: 172 W( The)
                    855: 621 W( use of high-level models, whereby the application describes)171 W
                    856: /Helvetica-Oblique SF
                    857: 10536 50352 MT
                    858: (what)SH
                    859: /Helvetica SF
                    860: 13100 XM
                    861: (it wants in terms of fairly abstract objects and the system determines)174 W
                    862: /Helvetica-Oblique SF
                    863: 45756 XM
                    864: (how)SH
                    865: /Helvetica SF
                    866: 48043 XM
                    867: (best to)175 W
                    868: 10536 51495 MT
                    869: (render the image, cannot be imposed as the)
                    870: 56 W( only form of graphics interface.  Such models)55 W
                    871: 10536 52638 MT
                    872: (generally fail to provide)
                    873: 189 W( adequate support for some important class of applications, and)190 W
                    874: 10536 53781 MT
                    875: (different user communities tend to have strong opinions about which)
                    876: 29 W( model is "best".  High-)28 W
                    877: 10536 54924 MT
                    878: (level models are extremely important to provide,)
                    879: 41 W( but they should be built in layers on top of)42 W
                    880: 10536 56067 MT
                    881: (the base window system.)SH
                    882: 10536 57882 MT
                    883: (Support for 3-D graphics is not listed as a requirement, but this is not to say it)
                    884: 327 W( is)326 W
                    885: 10536 59025 MT
                    886: (unimportant. We)
                    887: 555 W( simply have not considered 3-D graphics, due to lack of expertise and)139 W
                    888: 10536 60168 MT
                    889: (lack of time.)SH
                    890: 9424 61983 MT
                    891: (9.)SH
                    892: 10536 XM
                    893: (The system should be extensible.)SH
                    894: 10536 63798 MT
                    895: (For example, the core system may not support 3-D graphics, but it should be)
                    896: 115 W( possible to)114 W
                    897: 10536 64941 MT
                    898: (extend the)
                    899: 27 W( system with such support.  The extension mechanism should allow communities)28 W
                    900: 10536 66084 MT
                    901: (to extend the system non-cooperatively, yet allow such)
                    902: 283 W( independent extensions to be)282 W
                    903: 10536 67227 MT
                    904: (merged gracefully.)SH
                    905: 8312 69794 MT
                    906: (We believe that a window system must satisfy these requirements to)
                    907: 229 W( be a viable standard in an)230 W
                    908: 7200 71220 MT
                    909: (environment of high-performance workstations and)
                    910: 211 W( mainframes connected via high-performance local)210 W
                    911: ES
                    912: %%Page: 6 6 
                    913: BS
                    914: 0 SI
                    915: 10 /Helvetica-Bold AF
                    916: 30322 4329 MT
                    917: (6)SH
                    918: /Helvetica SF
                    919: 7200 7929 MT
                    920: (area networks.  X satisfies most of these requirements, but currently fails to satisfy a)
                    921: 37 W( few due to practical)38 W
                    922: 7200 9355 MT
                    923: (considerations of staffing and time)
                    924: 84 W( constraints:  the design and much of the implementation of the base)83 W
                    925: 7200 10781 MT
                    926: (window system was to be handled)
                    927: 55 W( solely by the first author; it was important to get a working system up)56 W
                    928: 7200 12207 MT
                    929: (fairly quickly; and the immediate applications only required relatively simple text and graphics support.  As)4 W
                    930: 7200 13633 MT
                    931: (a result, X is not designed to handle high-end color displays or to deal with input devices other than a)114 W
                    932: 7200 15059 MT
                    933: (keyboard and mouse; some support for high-quality text and graphics is missing; X)
                    934: 30 W( only provides support)29 W
                    935: 7200 16485 MT
                    936: (for one class of management policy; and no provision has been made)
                    937: 101 W( for extensions.  As discussed in)102 W
                    938: 7200 17911 MT
                    939: (Section 10, these and other problems are being addressed in a redesign of X.)SH
                    940: 12 /Helvetica-Bold AF
                    941: 7200 21666 MT
                    942: (3. System Model)SH
                    943: 10 /Helvetica AF
                    944: 8312 23092 MT
                    945: (The X window system is based on a client-server model; this model follows naturally)
                    946: 8 W( from requirements)7 W
                    947: 7200 24518 MT
                    948: (two and three in the previous)
                    949: 93 W( section.  For each physical display, there is a controlling server.  A client)94 W
                    950: 7200 25944 MT
                    951: (application and a server communicate over)
                    952: 74 W( a reliable duplex \0508-bit\051 byte stream.  A simple block stream)73 W
                    953: 7200 27370 MT
                    954: (protocol is layered on top of the byte stream.  If the client and)
                    955: 158 W( server are on the same machine, the)159 W
                    956: 7200 28796 MT
                    957: (stream is typically based on a local inter-process communication \050IPC\051 mechanism,)
                    958: 206 W( and otherwise a)205 W
                    959: 7200 30222 MT
                    960: (network connection is established between the)
                    961: 66 W( pair.  Requiring nothing more than a reliable duplex byte)67 W
                    962: 7200 31648 MT
                    963: (stream \050without urgent data\051 for communication makes X usable in many environments.  For example, the)4 W
                    964: 7200 33074 MT
                    965: (X protocol can be used over TCP [21], DECnet [36], and Chaos [15].)SH
                    966: 8312 35641 MT
                    967: (Multiple clients can have connections open to a server)
                    968: 341 W( simultaneously, and a client can have)342 W
                    969: 7200 37067 MT
                    970: (connections open to multiple servers simultaneously.  The essential tasks of the server are)
                    971: 93 W( to multiplex)92 W
                    972: 7200 38493 MT
                    973: (requests from clients to the display, and demultiplex keyboard and mouse input back)
                    974: 85 W( to the appropriate)86 W
                    975: 7200 39919 MT
                    976: (clients. Typically,)
                    977: 304 W( the)
                    978: 13 W( server is implemented as a single sequential process, using round-robin scheduling)12 W
                    979: 7200 41345 MT
                    980: (among the clients, and)
                    981: 21 W( this centralized control trivially solves many synchronization problems; however, a)22 W
                    982: 7200 42771 MT
                    983: (multi-process server has also been implemented.  Although one might place the server in the)
                    984: 101 W( kernel of)100 W
                    985: 7200 44197 MT
                    986: (the operating system in an attempt to increase performance, a user-level server process is vastly easier)67 W
                    987: 7200 45623 MT
                    988: (to debug and)
                    989: 14 W( maintain, and performance under Unix in fact does not seem to suffer.  Similar performance)13 W
                    990: 7200 47049 MT
                    991: (results have been obtained in Andrew)
                    992: 68 W( [7].)
                    993: SH( Various)
                    994: 416 W( tricks are used in both clients and server to optimize)69 W
                    995: 7200 48475 MT
                    996: (performance, principally by minimizing the number of operating system calls [6].)SH
                    997: 8312 51042 MT
                    998: (The server encapsulates)
                    999: 313 W( the base window system.  It provides the fundamental resources and)312 W
                   1000: 7200 52468 MT
                   1001: (mechanisms, and the hooks)
                   1002: 51 W( required to implement various user interfaces.  All device dependencies are)52 W
                   1003: 7200 53894 MT
                   1004: (encapsulated by the server; the communication protocol between clients and the server is)
                   1005: 308 W( device)307 W
                   1006: 7200 55320 MT
                   1007: (independent. By)
                   1008: 440 W( placing all device dependencies on one end of a)
                   1009: 81 W( network connection, applications are)82 W
                   1010: 7200 56746 MT
                   1011: (truly device independent.  The addition of a new display type simply requires the)
                   1012: 25 W( addition of a new server)24 W
                   1013: 7200 58172 MT
                   1014: (implementation; no application changes are required.)
                   1015: 81 W( Of)
                   1016: 441 W( course, the server itself is designed as device)82 W
                   1017: 7200 59598 MT
                   1018: (independent code layered)
                   1019: 63 W( on top of a device dependent core, so only the "back end" of the server need)62 W
                   1020: 8 SS 
                   1021: 24874 60673 MT
                   1022: (7)SH
                   1023: 10 SS 
                   1024: 7200 61024 MT
                   1025: (be reimplemented for each new display.)SH
                   1026: 10800 50 7200 69338 UL
                   1027: 6 SS 
                   1028: 8090 70733 MT
                   1029: (7)SH
                   1030: 8 SS 
                   1031: 8424 71046 MT
                   1032: (A back end has been implemented)
                   1033: 11 W( using a programming interface to X itself, such that a complete "recursive" X server executes)12 W
                   1034: 7200 72000 MT
                   1035: (inside a window of another X server.)SH
                   1036: ES
                   1037: %%Page: 7 7 
                   1038: BS
                   1039: 0 SI
                   1040: 10 /Helvetica-Bold AF
                   1041: 30322 4329 MT
                   1042: (7)SH
                   1043: 23792 59283 MT
                   1044: (Figure 2-1:)SH
                   1045: /Helvetica SF
                   1046: 29738 XM
                   1047: (System Structure)SH
                   1048: ES
                   1049: %%Page: 8 8 
                   1050: BS
                   1051: 0 SI
                   1052: 10 /Helvetica-Bold AF
                   1053: 30322 4329 MT
                   1054: (8)SH
                   1055: 11 SS 
                   1056: 7200 8002 MT
                   1057: (3.1. Network Considerations)SH
                   1058: 10 /Helvetica AF
                   1059: 8312 9428 MT
                   1060: (It is extremely important for the server to be robust with respect to client failures.)
                   1061: 53 W( The)
                   1062: 383 W( server, and the)52 W
                   1063: 7200 10854 MT
                   1064: (network protocol, must be designed so that the server never trusts clients to provide correct data.)
                   1065: 74 W( As)
                   1066: 428 W( a)75 W
                   1067: 7200 12280 MT
                   1068: (corollary, the protocol must be designed in such a way that, if the server ever has to wait)
                   1069: 53 W( for a response)52 W
                   1070: 7200 13706 MT
                   1071: (from a client, it must be possible to continue servicing other clients.  Without)
                   1072: 40 W( this property, a buggy client)41 W
                   1073: 7200 15132 MT
                   1074: (or a network failure could easily cause the entire display to freeze up.)SH
                   1075: 8312 17699 MT
                   1076: (Byte ordering is a standard problem in network communication:  when a 16-bit or 32-bit quantity is)153 W
                   1077: 7200 19125 MT
                   1078: (transmitted over an 8-bit byte stream, is the most)
                   1079: 48 W( significant byte transmitted first \050big-endian byte order\051)49 W
                   1080: 7200 20551 MT
                   1081: (or is the least significant byte transmitted first \050little-endian)
                   1082: 212 W( byte order\051?  Some machines with byte-)211 W
                   1083: 7200 21977 MT
                   1084: (addressable memory use big-endian order)
                   1085: 55 W( internally, and others use little-endian order.  If a single order)56 W
                   1086: 7200 23403 MT
                   1087: (is chosen for network communication, some machines will suffer)
                   1088: 88 W( the overhead of swapping bytes, even)87 W
                   1089: 7200 24829 MT
                   1090: (when communicating with a machine using the same internal byte order.  Such)
                   1091: 45 W( an approach also means)46 W
                   1092: 7200 26255 MT
                   1093: (that both parties in the communication must worry about byte order.)SH
                   1094: 8312 28822 MT
                   1095: (The X protocol uses a different)
                   1096: 202 W( approach.  The server is designed to accept both big-endian and)201 W
                   1097: 7200 30248 MT
                   1098: (little-endian connections.  For example, using TCP this is accomplished by having the server)
                   1099: 7 W( listen on two)8 W
                   1100: 7200 31674 MT
                   1101: (distinct ports; little-endian clients connect to the server on one port, and big-endian)
                   1102: 21 W( clients connect on the)20 W
                   1103: 7200 33100 MT
                   1104: (other. Clients)
                   1105: 370 W( always transmit and receive in their)
                   1106: 46 W( native byte order.  The server alone is responsible for)47 W
                   1107: 7200 34526 MT
                   1108: (byte swapping,)
                   1109: 25 W( and byte swapping only occurs between dissimilar architectures.  This eliminates the byte)24 W
                   1110: 7200 35952 MT
                   1111: (swapping overhead)
                   1112: 243 W( in the most common situations, and greatly simplifies the building of client-side)244 W
                   1113: 7200 37378 MT
                   1114: (interface libraries in various programming languages.  X is not unique)
                   1115: 84 W( in its use of this trick; the current)83 W
                   1116: 7200 38804 MT
                   1117: (VGTS implementation uses)
                   1118: 59 W( the same trick, and similar protocol optimizations have been used in various)60 W
                   1119: 7200 40230 MT
                   1120: (network-based applications.)SH
                   1121: 8312 42797 MT
                   1122: (Another potential)
                   1123: 232 W( problem in protocol design is word alignment.  In particular, some architectures)231 W
                   1124: 7200 44223 MT
                   1125: (require 16-bit quantities to be aligned on 16-bit)
                   1126: 93 W( boundaries and 32-bit quantities to be aligned on 32-bit)94 W
                   1127: 7200 45649 MT
                   1128: (boundaries in memory.  To allow efficient implementations of the protocol)
                   1129: 11 W( across a spectrum of 16-bit and)10 W
                   1130: 7200 47075 MT
                   1131: (32-bit architectures, the protocol is defined to consist of blocks that are always multiples of 32 bits,)
                   1132: 85 W( and)86 W
                   1133: 7200 48501 MT
                   1134: (each 16-bit and 32-bit quantity within a block is aligned on 16-bit and 32-bit boundaries, respectively.)SH
                   1135: 8312 51068 MT
                   1136: (X is designed to operate in an environment where)
                   1137: 88 W( the inter-process communication round-trip time is)87 W
                   1138: 7200 52494 MT
                   1139: (between 5 and 50 milliseconds, both for local and for network)
                   1140: 16 W( communication.  We also assume that data)17 W
                   1141: 7200 53920 MT
                   1142: (transmission rates are comparable to display rates; for example, to transmit and display 5000)
                   1143: 48 W( characters)47 W
                   1144: 7200 55346 MT
                   1145: (per second, a data rate of approximately 50Kb \050kilobits per second\051 will be needed, and)
                   1146: 75 W( to transmit and)76 W
                   1147: 7200 56772 MT
                   1148: (display 20000 characters)
                   1149: 46 W( per second, a data rate of approximately 200Kb will be needed.  Networks and)45 W
                   1150: 7200 58198 MT
                   1151: (protocol implementations with these characteristics are now quite commonplace.  For example,)435 W
                   1152: 7200 59624 MT
                   1153: (workstations running Berkeley Unix,)
                   1154: 191 W( connected via 10Mb \050megabits per second\051 local area networks,)190 W
                   1155: 7200 61050 MT
                   1156: (typically have round-trip times of 15 to 30 milliseconds, and data rates of 500Kb to 1Mb.)SH
                   1157: 8312 63617 MT
                   1158: (The round-trip time is important in determining the form of the communication protocol.)
                   1159: 178 W( The)
                   1160: 635 W( most)179 W
                   1161: 7200 65043 MT
                   1162: (common communication will be text and)
                   1163: 50 W( graphics requests sent from a client to the server.  Examples of)49 W
                   1164: 7200 66469 MT
                   1165: (individual requests might be to draw)
                   1166: 31 W( a string of text or to draw a line.  Such requests could be sent either)32 W
                   1167: 7200 67895 MT
                   1168: (synchronously, in which case the client sends a request only after receiving a reply from the)
                   1169: 25 W( server to the)24 W
                   1170: 7200 69321 MT
                   1171: (previous request, or they could be sent asynchronously, without)
                   1172: 269 W( the server generating any replies.)270 W
                   1173: 7200 70747 MT
                   1174: (However, since the requests are sent over a reliable stream, they are guaranteed)
                   1175: 56 W( to arrive, and arrive in)55 W
                   1176: ES
                   1177: %%Page: 9 9 
                   1178: BS
                   1179: 0 SI
                   1180: 10 /Helvetica-Bold AF
                   1181: 30322 4329 MT
                   1182: (9)SH
                   1183: /Helvetica SF
                   1184: 7200 7929 MT
                   1185: (order, so replies from the server to graphics requests serve no useful purpose.  Moreover, with)
                   1186: 28 W( round-trip)29 W
                   1187: 7200 9355 MT
                   1188: (times over 5 milliseconds, output to the display must be asynchronous, or it)
                   1189: 115 W( will be impossible to drive)114 W
                   1190: 7200 10781 MT
                   1191: (high-speed displays)
                   1192: 51 W( adequately.  For example, at 80 characters per request and a 25 millisecond round-)52 W
                   1193: 7200 12207 MT
                   1194: (trip time, only 3200)
                   1195: 5 W( characters per second can be drawn synchronously, whereas many hardware devices)4 W
                   1196: 7200 13633 MT
                   1197: (are capable of displaying between 5000 and 30000 characters per second.)SH
                   1198: 8312 16200 MT
                   1199: (Similarly, polling the server for keyboard and mouse input would be unacceptable in many)
                   1200: 8 W( applications,)9 W
                   1201: 7200 17626 MT
                   1202: (particularly those written in sequential languages.)
                   1203: 193 W( For)
                   1204: 663 W( example, an application attempting to provide)192 W
                   1205: 7200 19052 MT
                   1206: (real-time response to input has to poll periodically for input during screen updates.  For)
                   1207: 125 W( an application)126 W
                   1208: 7200 20478 MT
                   1209: (with a single thread of control, this effectively results in synchronous output, and consequent)
                   1210: 8 W( performance)7 W
                   1211: 7200 21904 MT
                   1212: (loss. Hence,)
                   1213: 464 W( input must)
                   1214: 93 W( be generated asynchronously by the server, so that applications need at most)94 W
                   1215: 7200 23330 MT
                   1216: (perform local polling.)SH
                   1217: 8312 25897 MT
                   1218: (The round-trip time is also important in determining what user interfaces can be)
                   1219: 175 W( supported without)174 W
                   1220: 7200 27323 MT
                   1221: (embedding them directly)
                   1222: 63 W( in the server.  The most important concern is whether remote, application-level)64 W
                   1223: 7200 28749 MT
                   1224: (mouse tracking is feasible.  By)59 W
                   1225: /Helvetica-Oblique SF
                   1226: 21337 XM
                   1227: (tracking)SH
                   1228: /Helvetica SF
                   1229: (, we do not mean maintaining the cursor image)
                   1230: 59 W( on the screen as)58 W
                   1231: 7200 30175 MT
                   1232: (the user moves the mouse; that function is performed autonomously)
                   1233: 149 W( by the X server, often directly in)150 W
                   1234: 7200 31601 MT
                   1235: (hardware. Rather,)
                   1236: 530 W( applications)
                   1237: 126 W( track the mouse by animating some other image on the screen in real)125 W
                   1238: 7200 33027 MT
                   1239: (time as the mouse moves.  For)
                   1240: 85 W( round-trip times under 50 milliseconds, tracking is perfectly reasonable,)86 W
                   1241: 7200 34453 MT
                   1242: (driven either)
                   1243: 1 W( by motion events generated by the server or by continuous polling from the application.  With)SH
                   1244: 7200 35879 MT
                   1245: (a refresh occurring up to 30 times every second, remote tracking is)
                   1246: 120 W( demonstrably "instantaneous" with)121 W
                   1247: 7200 37305 MT
                   1248: (mouse motion.)SH
                   1249: 8312 39872 MT
                   1250: (For tracking to be effective, however, relatively little time can be spent updating the display at each)132 W
                   1251: 7200 41298 MT
                   1252: (movement, so typically only relatively small changes can)
                   1253: 88 W( be made to the screen while tracking.  This is)89 W
                   1254: 7200 42724 MT
                   1255: (certainly the case for common operations, such as rubber banding window outlines and highlighting menu)8 W
                   1256: 7200 44150 MT
                   1257: (items. It)
                   1258: 598 W( might be argued that)
                   1259: 160 W( the ability to run application-specific code in the server is required for)161 W
                   1260: 7200 45576 MT
                   1261: (acceptable hand-eye coordination during complex tracking.  For example,)
                   1262: 158 W( NeWS)
                   1263: 157 W( [27])
                   1264: SH( provides such a)157 W
                   1265: 7200 47002 MT
                   1266: (mechanism in a novel way.  However, we are not convinced there are sufficient)
                   1267: 98 W( benefits to justify such)99 W
                   1268: 7200 48428 MT
                   1269: (complexity. Complex)
                   1270: 296 W( tracking typically is bound up intimately with application-specific data structures and)9 W
                   1271: 7200 49854 MT
                   1272: (knowledge representations, and such information is used by the "back end" of the)
                   1273: 63 W( application as well as)64 W
                   1274: 7200 51280 MT
                   1275: (the "front end".  In a distributed)
                   1276: 16 W( system it is folly to believe that applications will download large front ends)15 W
                   1277: 7200 52706 MT
                   1278: (into a server; communication round-trip times are a reality that cannot be escaped.)SH
                   1279: 11 /Helvetica-Bold AF
                   1280: 7200 56388 MT
                   1281: (3.2. Resources)SH
                   1282: 10 /Helvetica AF
                   1283: 8312 57814 MT
                   1284: (The basic resources provided by the server are windows, fonts, mouse cursors,)
                   1285: 8 W( and off-screen images;)9 W
                   1286: 7200 59240 MT
                   1287: (later sections describe each of these.  Clients request creation of a)
                   1288: 130 W( resource by supplying appropriate)129 W
                   1289: 7200 60666 MT
                   1290: (parameters \050such as the name of the font\051; the server allocates the resource)
                   1291: 52 W( and returns a 31-bit unique)53 W
                   1292: 7200 62092 MT
                   1293: (identifier used to represent it.)
                   1294: 102 W( The)
                   1295: 480 W( use and interpretation of a resource identifier is independent of any)101 W
                   1296: 7200 63518 MT
                   1297: (network connection.  Any client that knows \050or guesses\051 the identifier for a resource can use)
                   1298: 264 W( and)265 W
                   1299: 7200 64944 MT
                   1300: (manipulate the resource freely,)
                   1301: 1 W( even if it was created by another client.  This capability is required to allow)SH
                   1302: 7200 66370 MT
                   1303: (window managers to be written independently of applications, and)
                   1304: 81 W( to allow multi-process applications to)82 W
                   1305: 7200 67796 MT
                   1306: (manipulate shared resources.  However, to avoid problems associated with clients that)
                   1307: 119 W( fail to clean up)118 W
                   1308: 7200 69222 MT
                   1309: (their resources at termination)
                   1310: 33 W( \050which is all too common in operating systems where users can unilaterally)34 W
                   1311: 7200 70648 MT
                   1312: (abort processes\051, the maximum lifetime)
                   1313: 73 W( of a resource is always tied to the connection over which it was)72 W
                   1314: ES
                   1315: %%Page: 10 10 
                   1316: BS
                   1317: 0 SI
                   1318: 10 /Helvetica-Bold AF
                   1319: 30044 4329 MT
                   1320: (10)SH
                   1321: /Helvetica SF
                   1322: 7200 7929 MT
                   1323: (created. Thus,)
                   1324: 278 W( when a client terminates, all of the resources it created are destroyed automatically.)SH
                   1325: 8312 10496 MT
                   1326: (Access control is performed only when a client attempts to establish a connection to the server; once)73 W
                   1327: 7200 11922 MT
                   1328: (the connection is established the client)
                   1329: 441 W( can freely manipulate any resource.  Since accidental)440 W
                   1330: 7200 13348 MT
                   1331: (manipulation of some other client's resource)
                   1332: 159 W( is extremely unlikely \050both in theory and in practice\051, we)160 W
                   1333: 7200 14774 MT
                   1334: (believe introducing access control)
                   1335: 125 W( on a per-resource basis would only serve to decrease performance,)124 W
                   1336: 7200 16200 MT
                   1337: (not to significantly)
                   1338: 194 W( increase security or robustness.  The current access control mechanism is based)195 W
                   1339: 7200 17626 MT
                   1340: (simply on host network addresses, as this information is provided by)
                   1341: 34 W( most network stream protocols, and)33 W
                   1342: 7200 19052 MT
                   1343: (there seems to be no widely used or even)
                   1344: 85 W( widely available user-level authentication mechanism.  Host-)86 W
                   1345: 7200 20478 MT
                   1346: (based access control has proven to be)
                   1347: 60 W( marginally acceptable in a workstation environment, but is rather)59 W
                   1348: 8 SS 
                   1349: 24985 21553 MT
                   1350: (8)SH
                   1351: 10 SS 
                   1352: 7200 21904 MT
                   1353: (unacceptable for time-shared machines.)SH
                   1354: 8312 24471 MT
                   1355: (Each client-generated protocol request is a simple data block consisting)
                   1356: 7 W( of an opcode, some number of)8 W
                   1357: 7200 25897 MT
                   1358: (fixed-length parameters, and possibly a variable-length parameter.  For example, to)
                   1359: 195 W( display text in a)194 W
                   1360: 7200 27323 MT
                   1361: (window, the fixed-length parameters include the drawing color and the identifiers)
                   1362: 59 W( for the window and the)60 W
                   1363: 7200 28749 MT
                   1364: (font, and the variable-length parameter is the string of characters.  All operations)
                   1365: 49 W( on a resource explicitly)48 W
                   1366: 7200 30175 MT
                   1367: (contain the)
                   1368: 138 W( identifier of the resource as a parameter.  In this way, an application can multiplex use of)139 W
                   1369: 7200 31601 MT
                   1370: (many windows over a single)
                   1371: 37 W( network connection.  This multiplexing makes it easy for the client to control)36 W
                   1372: 7200 33027 MT
                   1373: (the time-order of updates to multiple windows.  Similarly,)
                   1374: 222 W( each input event generated by the server)223 W
                   1375: 7200 34453 MT
                   1376: (contains the identifier of the window in which the)
                   1377: 4 W( event occurred.  Multiplexing over a single stream allows)3 W
                   1378: 7200 35879 MT
                   1379: (the client to act on events from multiple windows in correct time)
                   1380: 52 W( order; timestamps alone are inadequate)53 W
                   1381: 7200 37305 MT
                   1382: (without strong guarantees from the stream mechanism.)SH
                   1383: 8312 39872 MT
                   1384: (Numerous Unix-based window systems)
                   1385: 173 W( [14, 16, 17, 19, 28, 30, 33])
                   1386: SH( use file or channel descriptors to)173 W
                   1387: 7200 41298 MT
                   1388: (represent windows; window creation involves an interaction with the operating system, which results)
                   1389: 120 W( in)121 W
                   1390: 7200 42724 MT
                   1391: (the creation of such a descriptor.  Typically, this means the window cannot be named \050and hence)
                   1392: 36 W( cannot)35 W
                   1393: 7200 44150 MT
                   1394: (be shared\051 by programs running on different machines, and perhaps not even by programs)
                   1395: 111 W( running on)112 W
                   1396: 7200 45576 MT
                   1397: (the same machine.  More serious, there is often a)
                   1398: 13 W( severe restriction on the number of active descriptors a)12 W
                   1399: 7200 47002 MT
                   1400: (process may have:  20 on older systems and usually 64)
                   1401: 158 W( on newer systems.  The use of 50 or more)159 W
                   1402: 7200 48428 MT
                   1403: (windows \050albeit)
                   1404: 32 W( nested inside a single top-level window\051 is quite common in X applications.  The use of a)31 W
                   1405: 7200 49854 MT
                   1406: (single connection, over which an arbitrary number of)
                   1407: 185 W( windows can be multiplexed, is clearly a better)186 W
                   1408: 7200 51280 MT
                   1409: (approach.)SH
                   1410: 12 /Helvetica-Bold AF
                   1411: 7200 55035 MT
                   1412: (4. Window Hierarchy)SH
                   1413: 10 /Helvetica AF
                   1414: 8312 56461 MT
                   1415: (The server supports an arbitrarily branching hierarchy)
                   1416: 105 W( of rectangular windows.  At the top is the)104 W
                   1417: /Helvetica-Oblique SF
                   1418: 52277 XM
                   1419: (root)SH
                   1420: /Helvetica SF
                   1421: 7200 57887 MT
                   1422: (window, which covers the entire screen.  The)381 W
                   1423: /Helvetica-Oblique SF
                   1424: 30478 XM
                   1425: (top-level)SH
                   1426: /Helvetica SF
                   1427: 34916 XM
                   1428: (windows of applications are created as)382 W
                   1429: 7200 59313 MT
                   1430: (subwindows of the root window.  The window)
                   1431: 236 W( hierarchy models the now-familiar "stacks of papers")235 W
                   1432: 7200 60739 MT
                   1433: (desktop. For)
                   1434: 302 W( a given window, its subwindows can)
                   1435: 12 W( be stacked in any order, with arbitrary overlaps.  When)13 W
                   1436: 7200 62165 MT
                   1437: (window W1 partially or completely covers window W2, we say that W1)30 W
                   1438: /Helvetica-Oblique SF
                   1439: 38902 XM
                   1440: (obscures)SH
                   1441: /Helvetica SF
                   1442: 43267 XM
                   1443: (W2. This)
                   1444: 338 W( relationship)
                   1445: 30 W( is)29 W
                   1446: 7200 63591 MT
                   1447: (not restricted to siblings; if W1 obscures W2, then W1 may also obscure subwindows of)
                   1448: 68 W( W2.  A window)69 W
                   1449: 7200 65017 MT
                   1450: (also obscures its parent.  Window hierarchies never)
                   1451: 128 W( interleave; if window W1 obscures sibling window)127 W
                   1452: 7200 66443 MT
                   1453: (W2, then subwindows of W2 never obscure W1 or subwindows of W1.  A)
                   1454: 38 W( window is not restricted in size)39 W
                   1455: 7200 67869 MT
                   1456: (or placement by)
                   1457: 1 W( the boundaries of its parent, but a window is always visibly clipped by its parent:  portions)SH
                   1458: 10800 50 7200 70292 UL
                   1459: 6 SS 
                   1460: 8090 71687 MT
                   1461: (8)SH
                   1462: 8 SS 
                   1463: 8424 72000 MT
                   1464: (It is interesting that)SH
                   1465: /Helvetica-Oblique SF
                   1466: 15359 XM
                   1467: (professors)SH
                   1468: /Helvetica SF
                   1469: 19315 XM
                   1470: (at MIT have argued vociferously to disable all access control.)SH
                   1471: ES
                   1472: %%Page: 11 11 
                   1473: BS
                   1474: 0 SI
                   1475: 10 /Helvetica-Bold AF
                   1476: 30044 4329 MT
                   1477: (11)SH
                   1478: /Helvetica SF
                   1479: 7200 7929 MT
                   1480: (of the window that)
                   1481: 61 W( extend outside the boundaries of the parent are never displayed, and do not obscure)62 W
                   1482: 7200 9355 MT
                   1483: (other windows.  Finally, a window can be either)82 W
                   1484: /Helvetica-Oblique SF
                   1485: 29113 XM
                   1486: (mapped)SH
                   1487: /Helvetica SF
                   1488: 33086 XM
                   1489: (or)SH
                   1490: /Helvetica-Oblique SF
                   1491: 34335 XM
                   1492: (unmapped)SH
                   1493: /Helvetica SF
                   1494: (. An)
                   1495: 442 W( unmapped)
                   1496: 82 W( window is never)81 W
                   1497: 7200 10781 MT
                   1498: (visible on the screen; a mapped window can only be visible if all of its ancestors are also mapped.)SH
                   1499: 8312 13348 MT
                   1500: (Output to a leaf window \050one)
                   1501: 189 W( with no subwindows\051 is always clipped to the visible portions of the)190 W
                   1502: 7200 14774 MT
                   1503: (window; drawing on such a window never draws into obscuring windows.  Output to a window that)219 W
                   1504: 7200 16200 MT
                   1505: (contains subwindows can be performed in two modes.  In)36 W
                   1506: /Helvetica-Oblique SF
                   1507: 33238 XM
                   1508: (clipped)SH
                   1509: /Helvetica SF
                   1510: 36720 XM
                   1511: (mode the output is clipped normally)
                   1512: 36 W( by)37 W
                   1513: 7200 17626 MT
                   1514: (all obscuring windows \050including subwindows\051, but in)167 W
                   1515: /Helvetica-Oblique SF
                   1516: 31988 XM
                   1517: (draw-through)SH
                   1518: /Helvetica SF
                   1519: 38324 XM
                   1520: (mode the output is not clipped)
                   1521: 167 W( by)166 W
                   1522: 7200 19052 MT
                   1523: (subwindows. For)
                   1524: 357 W( example, draw-through mode is used on the root window during window management,)40 W
                   1525: 7200 20478 MT
                   1526: (tracking the mouse)
                   1527: 38 W( with the outline of a window to indicate how the window is to be moved or resized.  If)37 W
                   1528: 7200 21904 MT
                   1529: (clipped mode were used instead, the entire outline would not be visible.)SH
                   1530: 8312 24471 MT
                   1531: (The coordinate system is defined with the)
                   1532: 55 W( X axis horizontal and the Y axis vertical.  Each window has)56 W
                   1533: 7200 25897 MT
                   1534: (its own coordinate system, with the)
                   1535: 148 W( origin at the upper left corner of the window.  Having per-window)147 W
                   1536: 7200 27323 MT
                   1537: (coordinate systems)
                   1538: 46 W( is crucial, particularly for top-level windows; applications are almost always designed)47 W
                   1539: 7200 28749 MT
                   1540: (to be insensitive to their position on the screen, and having to worry about race)
                   1541: 59 W( conditions when moving)58 W
                   1542: 7200 30175 MT
                   1543: (windows would be a disaster.  The coordinate system is)
                   1544: 3 W( discrete: each pixel in the window corresponds to)4 W
                   1545: 7200 31601 MT
                   1546: (a single unit in the coordinate system, with coordinates centered on)
                   1547: 115 W( the pixels, and all coordinates are)114 W
                   1548: 7200 33027 MT
                   1549: (expressed as integers in the protocol.  We believe fractional coordinates are not required at the)
                   1550: 59 W( protocol)60 W
                   1551: 7200 34453 MT
                   1552: (level for the raster graphics provided)
                   1553: 125 W( in X \050see section 6\051, although they may be required for high-end)124 W
                   1554: 7200 35879 MT
                   1555: (color graphics, such as anti-aliasing.  The aspect ratio of the screen is not masked)
                   1556: 40 W( by the protocol, since)41 W
                   1557: 7200 37305 MT
                   1558: (we believe that)
                   1559: 251 W( most displays have a one to one aspect ratio; in this regard X is arguably device)250 W
                   1560: 7200 38731 MT
                   1561: (dependent.)SH
                   1562: 8312 41298 MT
                   1563: (Although the coordinate system is discrete)
                   1564: 370 W( at the protocol level, continuous or alternate-origin)371 W
                   1565: 7200 42724 MT
                   1566: (coordinate systems certainly can be used at the application level, but client-side libraries must)
                   1567: 40 W( eventually)39 W
                   1568: 7200 44150 MT
                   1569: (translate to the discrete coordinates defined by the protocol.)
                   1570: 225 W( In)
                   1571: 730 W( this way, we can ignore the many)226 W
                   1572: 7200 45576 MT
                   1573: (variations in floating-point \050or)
                   1574: 1 W( even fixed-point\051 formats among architectures.  Further, the coordinates can)SH
                   1575: 7200 47002 MT
                   1576: (be expressed in)
                   1577: 103 W( the protocol as 16-bit quantities, which can be manipulated efficiently in virtually every)104 W
                   1578: 7200 48428 MT
                   1579: (machine/display architecture, and which minimizes the number)
                   1580: 325 W( of data bytes transmitted over the)324 W
                   1581: 7200 49854 MT
                   1582: (network. The)
                   1583: 368 W( use of 16-bit quantities does have a drawback, in)
                   1584: 45 W( that some applications \050particularly CAD)46 W
                   1585: 7200 51280 MT
                   1586: (tools\051 like to perform zoom operations)
                   1587: 1 W( simply by scaling coordinates and redrawing, relying on the window)SH
                   1588: 7200 52706 MT
                   1589: (system to clip)
                   1590: 325 W( appropriately.  Since scaling quickly overflows 16 bits, additional clipping must be)326 W
                   1591: 7200 54132 MT
                   1592: (performed explicitly by such applications.)SH
                   1593: 8312 56699 MT
                   1594: (A window can)
                   1595: 126 W( optionally have a)125 W
                   1596: /Helvetica-Oblique SF
                   1597: 23293 XM
                   1598: (border)SH
                   1599: /Helvetica SF
                   1600: (, a shaded outer frame maintained explicitly by the X server.)125 W
                   1601: 7200 58125 MT
                   1602: (The origin of the window's)
                   1603: 117 W( coordinate system is inside the border, and output to the window is clipped)118 W
                   1604: 7200 59551 MT
                   1605: (automatically so as not to extend into the border.)
                   1606: 202 W( The)
                   1607: 680 W( presence of borders slightly complicates the)201 W
                   1608: 7200 60977 MT
                   1609: (semantics of the window system; for simplicity we will ignore them in the remainder of this paper.)SH
                   1610: 8312 63544 MT
                   1611: (The basic operations on window structure are straightforward.  An unmapped window is created)
                   1612: 143 W( by)144 W
                   1613: 7200 64970 MT
                   1614: (specifying the parent window, the position within the parent)
                   1615: 92 W( of the upper left corner of the new window,)91 W
                   1616: 7200 66396 MT
                   1617: (and the width and height \050in coordinate units\051 of the new)
                   1618: 58 W( window.  A window can be destroyed, in which)59 W
                   1619: 7200 67822 MT
                   1620: (case all windows below it in the hierarchy are also destroyed.  A window can be)
                   1621: 28 W( mapped and unmapped,)27 W
                   1622: 7200 69248 MT
                   1623: (without changing its position.  A window can be moved)
                   1624: 76 W( and resized, including being moved and resized)77 W
                   1625: 7200 70674 MT
                   1626: (simultaneously. A)
                   1627: 434 W( window can also be "depthwise" raised to the top or lowered to the bottom)
                   1628: 78 W( the stack)77 W
                   1629: ES
                   1630: %%Page: 12 12 
                   1631: BS
                   1632: 0 SI
                   1633: 10 /Helvetica-Bold AF
                   1634: 30044 4329 MT
                   1635: (12)SH
                   1636: /Helvetica SF
                   1637: 7200 7929 MT
                   1638: (with respect to its siblings, without changing its coordinate position.)
                   1639: 85 W( Currently)
                   1640: 450 W( mapping or configuring a)86 W
                   1641: 7200 9355 MT
                   1642: (window forces the window to be raised.  This restriction appeared to)
                   1643: 71 W( simplify the server implementation,)70 W
                   1644: 7200 10781 MT
                   1645: (but also happened to)
                   1646: 9 W( match the basic management interface we expected to build.  This restriction will be)10 W
                   1647: 7200 12207 MT
                   1648: (eliminated in the next version.)SH
                   1649: 8312 14774 MT
                   1650: (The windows described above are the usual)76 W
                   1651: /Helvetica-Oblique SF
                   1652: 28631 XM
                   1653: (opaque)SH
                   1654: /Helvetica SF
                   1655: 32320 XM
                   1656: (windows. X)
                   1657: 428 W( also provides)75 W
                   1658: /Helvetica-Oblique SF
                   1659: 44477 XM
                   1660: (transparent)SH
                   1661: /Helvetica SF
                   1662: 49888 XM
                   1663: (windows.)SH
                   1664: 7200 16200 MT
                   1665: (A transparent window is always invisible)
                   1666: 104 W( on the screen, and does not obscure output to, or visibility of,)105 W
                   1667: 7200 17626 MT
                   1668: (other windows.  Output to a transparent window is clipped to that window, but is actually drawn on the)105 W
                   1669: 7200 19052 MT
                   1670: (parent window.  Thus, for output, a transparent window)
                   1671: 42 W( is simply a clipping rectangle that can be applied)43 W
                   1672: 7200 20478 MT
                   1673: (to restrict output within a \050parent\051 window.)
                   1674: 197 W( Input)
                   1675: 671 W( processing for transparent and opaque windows is)196 W
                   1676: 7200 21904 MT
                   1677: (identical, as described in Section 8.  In Section 10 we will argue that most uses)
                   1678: 74 W( of transparent windows)75 W
                   1679: 7200 23330 MT
                   1680: (are better)
                   1681: 61 W( satisfied with other mechanisms.  Therefore, for simplicity, we will ignore transparent windows)60 W
                   1682: 7200 24756 MT
                   1683: (in the rest of this paper.)SH
                   1684: 8312 27323 MT
                   1685: (The X server is designed explicitly to)
                   1686: 29 W( make windows inexpensive.  Our goal was to make it reasonable)30 W
                   1687: 7200 28749 MT
                   1688: (to use windows for such things as individual menu)
                   1689: 157 W( items, buttons, even individual items in forms and)156 W
                   1690: 7200 30175 MT
                   1691: (spreadsheets. As)
                   1692: 278 W( such, the server must deal efficiently with hundreds \050though not necessarily)
                   1693: SH( thousands\051)1 W
                   1694: 7200 31601 MT
                   1695: (of windows on the screen simultaneously.  Experience with X has shown)
                   1696: 4 W( that many implementors find this)3 W
                   1697: 7200 33027 MT
                   1698: (capability extremely useful.)SH
                   1699: 12 /Helvetica-Bold AF
                   1700: 7200 36782 MT
                   1701: (5. Color)SH
                   1702: 10 /Helvetica AF
                   1703: 8312 38208 MT
                   1704: (The screen is viewed as two dimensional, with an N-bit)134 W
                   1705: /Helvetica-Oblique SF
                   1706: 34216 XM
                   1707: (pixel)SH
                   1708: /Helvetica SF
                   1709: 36684 XM
                   1710: (value stored at each)
                   1711: 134 W( coordinate.  The)135 W
                   1712: 7200 39634 MT
                   1713: (number of)
                   1714: 75 W( bits in a pixel value, and how a value translates into a color, depends on the hardware.  X is)74 W
                   1715: 7200 41060 MT
                   1716: (designed to support two types of hardware:  monochrome and pseudo-color.  A monochrome display has)26 W
                   1717: 7200 42486 MT
                   1718: (one bit per pixel, and the two values translate into black and white.  Pseudo-color)
                   1719: 46 W( displays typically have)45 W
                   1720: 7200 43912 MT
                   1721: (between four and twelve bits per pixel; the pixel value is used as an index into)
                   1722: 47 W( a color map, yielding red,)48 W
                   1723: 7200 45338 MT
                   1724: (green, and blue intensities.  The color map can be changed dynamically,)
                   1725: 59 W( so that a given pixel value can)58 W
                   1726: 7200 46764 MT
                   1727: (represent different colors over time.  Gray-scale is viewed as a degenerate case of pseudo-color.)SH
                   1728: 8312 49331 MT
                   1729: (We desire a design matching most display)
                   1730: 70 W( hardware, while abstracting differences in such a way that)71 W
                   1731: 7200 50757 MT
                   1732: (programmers do not have to double or triple-code their applications to cover the spectrum.)
                   1733: 20 W( We)
                   1734: 316 W( also want)19 W
                   1735: 7200 52183 MT
                   1736: (multiple applications to coexist within a single color map, so that applications always show)
                   1737: 73 W( true color on)74 W
                   1738: 7200 53609 MT
                   1739: (the screen.  To allow this, and to keep applications device independent, pixel)
                   1740: 23 W( values should not be coded)22 W
                   1741: 7200 55035 MT
                   1742: (explicitly into applications.  Instead, the server must be responsible for managing the color map, and)
                   1743: 7 W( color)8 W
                   1744: 7200 56461 MT
                   1745: (map allocation must be expressed in hardware-independent terms.)SH
                   1746: 8312 59028 MT
                   1747: (All graphics operations in X are)
                   1748: 74 W( expressed in terms of pixel values.  For example, to draw a line, one)73 W
                   1749: 7200 60454 MT
                   1750: (specifies not only the coordinates of the end-points but the pixel value with)
                   1751: 23 W( which to draw the line.  \050Logic)24 W
                   1752: 7200 61880 MT
                   1753: (functions and plane-select masks are also specified,)
                   1754: 186 W( as described in Section 6.\051  On a monochrome)185 W
                   1755: 7200 63306 MT
                   1756: (display, the only two pixel values are zero and one, which are \050somewhat)
                   1757: 62 W( arbitrarily\051 defined to be black)63 W
                   1758: 7200 64732 MT
                   1759: (and white, respectively.  On a)
                   1760: 98 W( pseudo-color display, pixel values zero and one are pre-allocated by the)97 W
                   1761: 7200 66158 MT
                   1762: (server, for)
                   1763: 283 W( use as "black" and "white", so that monochrome applications display correctly on color)284 W
                   1764: 7200 67584 MT
                   1765: (displays. Of)
                   1766: 278 W( course, the actual colors need not be black and white, but can be set by the user.)SH
                   1767: 8312 70151 MT
                   1768: (There are two ways for a client to obtain pixel values.  In the simplest request, the client specifies)
                   1769: 44 W( red,)43 W
                   1770: 7200 71577 MT
                   1771: (green, and blue color values, and the server)
                   1772: 55 W( allocates an arbitrary pixel value and sets the color map so)56 W
                   1773: ES
                   1774: %%Page: 13 13 
                   1775: BS
                   1776: 0 SI
                   1777: 10 /Helvetica-Bold AF
                   1778: 30044 4329 MT
                   1779: (13)SH
                   1780: /Helvetica SF
                   1781: 7200 7929 MT
                   1782: (the pixel value represents the closest color the hardware can provide.  The color)
                   1783: 56 W( map entry for this pixel)55 W
                   1784: 7200 9355 MT
                   1785: (value cannot be changed by the client, so if some other)
                   1786: 52 W( client requests an equivalent color, the server is)53 W
                   1787: 7200 10781 MT
                   1788: (free to respond with the same pixel value.)
                   1789: 30 W( Such)
                   1790: 337 W( sharing is important in maximizing use of the color map.)29 W
                   1791: 7200 12207 MT
                   1792: (To isolate applications from variations in color representation among displays)
                   1793: 111 W( \050due, for example, to the)112 W
                   1794: 7200 13633 MT
                   1795: (standard of illumination used for calibration\051, the server provides a color database which clients)
                   1796: 67 W( can use)66 W
                   1797: 7200 15059 MT
                   1798: (to translate string names of colors into red, green, and blue values tailored for the particular display.)SH
                   1799: 8312 17626 MT
                   1800: (The second request allocates writable map entries.  This mechanism was designed explicitly for X;)
                   1801: 41 W( we)42 W
                   1802: 7200 19052 MT
                   1803: (are not aware of a comparable)
                   1804: 258 W( mechanism in any other window system.  The client specifies two)257 W
                   1805: 7200 20478 MT
                   1806: (numbers,)SH
                   1807: /Helvetica-Oblique SF
                   1808: 11801 XM
                   1809: (C)SH
                   1810: /Helvetica SF
                   1811: 12956 XM
                   1812: (and)SH
                   1813: /Helvetica-Oblique SF
                   1814: 15057 XM
                   1815: (P)SH
                   1816: /Helvetica SF
                   1817: (, with)155 W
                   1818: /Helvetica-Oblique SF
                   1819: 18646 XM
                   1820: (C)SH
                   1821: /Helvetica SF
                   1822: 19801 XM
                   1823: (positive and)156 W
                   1824: /Helvetica-Oblique SF
                   1825: 25727 XM
                   1826: (P)SH
                   1827: /Helvetica SF
                   1828: 26828 XM
                   1829: (non-negative; the request can be expressed as "allocate)156 W
                   1830: /Helvetica-Oblique SF
                   1831: 53278 XM
                   1832: (C)SH
                   1833: 8 SS 
                   1834: 47251 21553 MT
                   1835: (P)SH
                   1836: 10 /Helvetica AF
                   1837: 7200 21904 MT
                   1838: (colors and)164 W
                   1839: /Helvetica-Oblique SF
                   1840: 12419 XM
                   1841: (P)SH
                   1842: /Helvetica SF
                   1843: 13528 XM
                   1844: (planes". The)
                   1845: 606 W( total number of pixel values allocated by the server is)164 W
                   1846: /Helvetica-Oblique SF
                   1847: 45584 XM
                   1848: (C*2)SH
                   1849: /Helvetica SF
                   1850: 47785 XM
                   1851: (. The)
                   1852: 605 W( values)163 W
                   1853: 7200 23330 MT
                   1854: (passed back to the client consist of)13 W
                   1855: /Helvetica-Oblique SF
                   1856: 23077 XM
                   1857: (C)SH
                   1858: /Helvetica SF
                   1859: 24090 XM
                   1860: (base pixel values, and a plane mask containing)13 W
                   1861: /Helvetica-Oblique SF
                   1862: 45427 XM
                   1863: (P)SH
                   1864: /Helvetica SF
                   1865: 46385 XM
                   1866: (bits. None)
                   1867: 305 W( of the)14 W
                   1868: 7200 24756 MT
                   1869: (base pixel values have any one bits)
                   1870: 84 W( in common with the plane mask, and the complete set of allocated)83 W
                   1871: 7200 26182 MT
                   1872: (pixel values)
                   1873: 9 W( is obtained by combining all possible combinations of one bits from the plane mask with each)10 W
                   1874: 7200 27608 MT
                   1875: (of the base pixel values.  The client can optionally require)
                   1876: 6 W( the)5 W
                   1877: /Helvetica-Oblique SF
                   1878: 34617 XM
                   1879: (P)SH
                   1880: /Helvetica SF
                   1881: 35567 XM
                   1882: (planes to be contiguous, in which case all)5 W
                   1883: /Helvetica-Oblique SF
                   1884: 7200 29034 MT
                   1885: (P)SH
                   1886: /Helvetica SF
                   1887: 8145 XM
                   1888: (bits in the plane mask will be contiguous.)SH
                   1889: 8312 31601 MT
                   1890: (There are three common uses of this second request.  One is simply to allocate a number)
                   1891: 291 W( of)292 W
                   1892: 7200 33027 MT
                   1893: ("unrelated" pixel values; in this case,)51 W
                   1894: /Helvetica-Oblique SF
                   1895: 24001 XM
                   1896: (P)SH
                   1897: /Helvetica SF
                   1898: 24997 XM
                   1899: (will be zero.  A second use is in imaging)
                   1900: 51 W( applications, where it is)50 W
                   1901: 7200 34453 MT
                   1902: (convenient to be able to perform simple arithmetic on pixel values.  In this case, a contiguous)
                   1903: 108 W( block of)109 W
                   1904: 7200 35879 MT
                   1905: (pixel values is allocated by setting)162 W
                   1906: /Helvetica-Oblique SF
                   1907: 23512 XM
                   1908: (C)SH
                   1909: /Helvetica SF
                   1910: 24674 XM
                   1911: (to one)
                   1912: 162 W( and)161 W
                   1913: /Helvetica-Oblique SF
                   1914: 30162 XM
                   1915: (P)SH
                   1916: /Helvetica SF
                   1917: 31268 XM
                   1918: (to the log \050base 2\051 of the number of pixel values)161 W
                   1919: 7200 37305 MT
                   1920: (required, and requesting contiguous allocation.  Arithmetic on the)
                   1921: 7 W( pixel values then requires at most some)8 W
                   1922: 7200 38731 MT
                   1923: (additional shift and mask operations.)SH
                   1924: 8312 41298 MT
                   1925: (A third form of allocation arises in applications that want some)
                   1926: 209 W( form of overlay graphics, such as)208 W
                   1927: 7200 42724 MT
                   1928: (highlighting or outlining regions.  Here the requirement is to be able to draw and then)
                   1929: 147 W( erase graphics)148 W
                   1930: 7200 44150 MT
                   1931: (without disturbing existing window contents.  For)
                   1932: 176 W( example, suppose an application typically uses four)175 W
                   1933: 7200 45576 MT
                   1934: (colors, but needs to be able to overlay a rectangle outline in)
                   1935: 18 W( a fifth color.  An allocation request with C set)19 W
                   1936: 7200 47002 MT
                   1937: (to four and P set to one results in two groups of four pixel values.  The four)
                   1938: 196 W( base pixel values are)195 W
                   1939: 7200 48428 MT
                   1940: (assigned the four normal colors,)
                   1941: 232 W( and the four alternate pixel values are all assigned the fifth color.)233 W
                   1942: 7200 49854 MT
                   1943: (Overlay graphics can then be drawn by restricting output \050see the next section\051 to)
                   1944: 131 W( the single bit plane)130 W
                   1945: 7200 51280 MT
                   1946: (specified in the mask returned by the color allocation.  Turning bits in this)
                   1947: 26 W( plane on \050to ones\051 changes the)27 W
                   1948: 7200 52706 MT
                   1949: (image to the fifth color, and turning them off reverts the image to its original color.)SH
                   1950: 12 /Helvetica-Bold AF
                   1951: 7200 56461 MT
                   1952: (6. Graphics and Text)SH
                   1953: 10 /Helvetica AF
                   1954: 8312 57887 MT
                   1955: (Graphics operations are often the most complex part of any window system, simply)
                   1956: 56 W( because so many)55 W
                   1957: 7200 59313 MT
                   1958: (different effects and variations are required to satisfy)
                   1959: 140 W( a wide range of applications.  In this section we)141 W
                   1960: 7200 60739 MT
                   1961: (sketch the operations provided in X, so that the basic level of)
                   1962: 62 W( graphics support can be understood.  The)61 W
                   1963: 7200 62165 MT
                   1964: (operations are essentially a)
                   1965: 407 W( subset of the Digital Workstation Graphics Architecture; the VS100)408 W
                   1966: 7200 63591 MT
                   1967: (display [11])
                   1968: SH( implements)
                   1969: 53 W( this architecture for 1-bit pixel values.  The set of operations purposely was kept)52 W
                   1970: 7200 65017 MT
                   1971: (simple, in order to maximize portability.)SH
                   1972: 8312 67584 MT
                   1973: (Graphics operations in X are expressed in terms of relatively)
                   1974: 250 W( high-level concepts, such as lines,)251 W
                   1975: 7200 69010 MT
                   1976: (rectangles, curves, and fonts.  This is in)
                   1977: 33 W( contrast to systems in which the basic primitives are to read and)32 W
                   1978: 7200 70436 MT
                   1979: (write individual pixels.  Basing applications on pixel-level primitives works)
                   1980: 44 W( well when display memory can)45 W
                   1981: 7200 71862 MT
                   1982: (be mapped into the application's address space for direct manipulation.  However, both)
                   1983: 32 W( display hardware)31 W
                   1984: ES
                   1985: %%Page: 14 14 
                   1986: BS
                   1987: 0 SI
                   1988: 10 /Helvetica-Bold AF
                   1989: 30044 4329 MT
                   1990: (14)SH
                   1991: /Helvetica SF
                   1992: 7200 7929 MT
                   1993: (and operating systems exist for which such direct access)
                   1994: 246 W( is not possible, and emulating pixel-level)247 W
                   1995: 7200 9355 MT
                   1996: (manipulations in)
                   1997: 21 W( such an environment results in extremely poor performance.  Expressing operations at a)20 W
                   1998: 7200 10781 MT
                   1999: (higher level avoids such device dependencies, and also avoids potential problems)
                   2000: 389 W( with network)390 W
                   2001: 7200 12207 MT
                   2002: (bandwidth. With)
                   2003: 384 W( high-level operations,)
                   2004: 53 W( a protocol request transmitted as a small number of bits over the)52 W
                   2005: 7200 13633 MT
                   2006: (network typically affects ten to one hundred times as many pixels on the screen.)SH
                   2007: 11 /Helvetica-Bold AF
                   2008: 7200 17315 MT
                   2009: (6.1. Images)SH
                   2010: 10 /Helvetica AF
                   2011: 8312 18741 MT
                   2012: (Two forms of off-screen images are supported in X:  bitmaps and pixmaps.  A bitmap is)
                   2013: 38 W( a single plane)39 W
                   2014: 7200 20167 MT
                   2015: (\050bit\051 rectangle.  A pixmap is an N-plane)
                   2016: 37 W( \050pixel\051 rectangle, where)36 W
                   2017: /Helvetica-Oblique SF
                   2018: 35835 XM
                   2019: (N)SH
                   2020: /Helvetica SF
                   2021: 36871 XM
                   2022: (is the number of bits per pixel used by)36 W
                   2023: 7200 21593 MT
                   2024: (the particular display.  A bitmap or pixmap can be created by)
                   2025: 83 W( transmitting all of the bits to the server; a)84 W
                   2026: 7200 23019 MT
                   2027: (pixmap can also be created by copying a rectangular region of a window.  Bitmaps and pixmaps)
                   2028: 193 W( of)192 W
                   2029: 7200 24445 MT
                   2030: (arbitrary size can be created.)
                   2031: 6 W( Transmitting)
                   2032: 292 W( very large \050or deep\051 images over a network connection can be)7 W
                   2033: 7200 25871 MT
                   2034: (quite slow; however, the ability to make use of shared memory in conjunction with the IPC)
                   2035: 108 W( mechanism)107 W
                   2036: 7200 27297 MT
                   2037: (would help enormously when the client and server are on the same machine.)SH
                   2038: 8312 29864 MT
                   2039: (The primary use of bitmaps is as masks \050clipping regions\051.  Several)
                   2040: SH( graphics requests allow a bitmap to)1 W
                   2041: 7200 31290 MT
                   2042: (be used)
                   2043: 38 W( as a clipping region)
                   2044: 37 W( [35].)
                   2045: SH( Bitmaps)
                   2046: 352 W( are also used to construct cursors, as described in Section 8.)37 W
                   2047: 7200 32716 MT
                   2048: (Pixmaps are used to store frequently drawn images,)
                   2049: 91 W( and as temporary backing-store for pop-up menus)92 W
                   2050: 7200 34142 MT
                   2051: (\050as described in Section 8\051.  However, the principal use)
                   2052: 68 W( of pixmaps is as tiles, that is, as patterns which)67 W
                   2053: 7200 35568 MT
                   2054: (are replicated in two dimensions to cover a region.)
                   2055: 15 W( Since)
                   2056: 310 W( there are often hardware restrictions as to what)16 W
                   2057: 7200 36994 MT
                   2058: (tile shapes can be replicated efficiently, guaranteed shapes are not defined by the X protocol.  An)236 W
                   2059: 7200 38420 MT
                   2060: (application can query the server to determine)
                   2061: 305 W( what shapes are supported, although to date most)306 W
                   2062: 7200 39846 MT
                   2063: (applications simply assume 16 by 16 tiles are supported.  A better)
                   2064: 202 W( semantics is to support arbitrary)201 W
                   2065: 7200 41272 MT
                   2066: (shapes, but allow applications to query as to which shapes are most efficient.)SH
                   2067: 8312 43839 MT
                   2068: (The tiling origin used in X is almost always the origin of the destination window.)
                   2069: 22 W( That)
                   2070: 324 W( is, if enough tiles)23 W
                   2071: 7200 45265 MT
                   2072: (were laid out, one tile would have its upper left corner at the upper left corner of the)
                   2073: 28 W( window.  In this way,)27 W
                   2074: 7200 46691 MT
                   2075: (the contents of the window are independent of the window's position on the screen, and the)
                   2076: 52 W( window can)53 W
                   2077: 7200 48117 MT
                   2078: (be moved transparently to the application.)SH
                   2079: 8312 50684 MT
                   2080: (Servers vary widely in the amount of off-screen memory provided.  For example,)
                   2081: 123 W( some servers limit)122 W
                   2082: 7200 52110 MT
                   2083: (off-screen memory)
                   2084: 92 W( to that accessible directly to the graphics processor \050typically one to three times the)93 W
                   2085: 7200 53536 MT
                   2086: (size of screen memory\051, and fonts and other resources)
                   2087: 40 W( are allocated from this same pool.  Other servers)39 W
                   2088: 7200 54962 MT
                   2089: (utilize their entire virtual address space for off-screen memory.  Since off-screen)
                   2090: 104 W( memory for images is)105 W
                   2091: 7200 56388 MT
                   2092: (finite, an)
                   2093: 1 W( explicit part of the X protocol is the possibility that bitmap or pixmap creation can fail.  Depending)SH
                   2094: 7200 57814 MT
                   2095: (on the intended use)
                   2096: 89 W( of the image, the application may or may not be able to cope with the failure.  For)90 W
                   2097: 7200 59240 MT
                   2098: (example, if the image was being stored simply)
                   2099: 32 W( to speed up redisplay, the application can always transmit)31 W
                   2100: 7200 60666 MT
                   2101: (the image directly)
                   2102: 11 W( each time \050see below\051.  If the image was to be a temporary backing-store for a window,)12 W
                   2103: 7200 62092 MT
                   2104: (the application can fall back on normal exposure processing \050as described in Section 7\051.)
                   2105: 42 W( Servers)
                   2106: 360 W( should)41 W
                   2107: 7200 63518 MT
                   2108: (be constructed in such a way as to virtually guarantee sufficient memory \050e.g.,)
                   2109: 125 W( by caching images\051 for)126 W
                   2110: 7200 64944 MT
                   2111: (creating at least small tiles and cursors, although this is not true in current implementations.)SH
                   2112: ES
                   2113: %%Page: 15 15 
                   2114: BS
                   2115: 0 SI
                   2116: 10 /Helvetica-Bold AF
                   2117: 30044 4329 MT
                   2118: (15)SH
                   2119: 11 SS 
                   2120: 7200 8002 MT
                   2121: (6.2. Graphics)SH
                   2122: 10 /Helvetica AF
                   2123: 8312 9428 MT
                   2124: (All graphics and text requests include a logic)
                   2125: 143 W( function and a plane-select mask \050an integer with the)142 W
                   2126: 7200 10854 MT
                   2127: (same number of bits as a)
                   2128: 92 W( pixel value\051 to modify the operation.  All sixteen logic functions are provided.)93 W
                   2129: 7200 12280 MT
                   2130: (Given a source and destination pixel, the function is computed bitwise on corresponding bits of)
                   2131: 14 W( the pixels,)13 W
                   2132: 7200 13706 MT
                   2133: (but only on bits specified in the plane-select mask.  Thus the result pixel is computed as)SH
                   2134: 9980 15389 MT
                   2135: (\050\050source FUNC destination\051 AND mask\051 OR \050destination AND \050NOT mask\051\051)SH
                   2136: 7200 17072 MT
                   2137: (The most common operation is simply replacing the destination with the source in all planes.)SH
                   2138: 8312 19639 MT
                   2139: (The simplest)
                   2140: 81 W( graphics request takes a single source pixel value and combines it with every pixel in a)82 W
                   2141: 7200 21065 MT
                   2142: (rectangular region of a window.  Typically this is used to fill a region with a color, but by)
                   2143: 40 W( varying the logic)39 W
                   2144: 7200 22491 MT
                   2145: (function or masks, other)
                   2146: 58 W( effects can be achieved.  A second request takes a tile, effectively constructs a)59 W
                   2147: 7200 23917 MT
                   2148: (tiled rectangular source with it, and then combines the source with a rectangular region of a window.)SH
                   2149: 8312 26484 MT
                   2150: (An arbitrary image can be displayed)
                   2151: 124 W( directly, without first being stored off-screen.  For monochrome)123 W
                   2152: 7200 27910 MT
                   2153: (images, the full contents of a bitmap are transmitted, along)
                   2154: 191 W( with a pair of pixel values; the image is)192 W
                   2155: 7200 29336 MT
                   2156: (displayed in a region of a)
                   2157: 62 W( window with those two colors.  For color images, the full contents of a pixmap)61 W
                   2158: 7200 30762 MT
                   2159: (can be transmitted and displayed.  In order to avoid inordinate buffer space in the server, very large)170 W
                   2160: 7200 32188 MT
                   2161: (images must be broken into sections on the client side and displayed in separate requests.)SH
                   2162: 8312 34755 MT
                   2163: (The CopyArea request allows)
                   2164: 185 W( one region of a window to be moved to \050or combined with\051 another)184 W
                   2165: 7200 36181 MT
                   2166: (region of the same window.  This is the usual)129 W
                   2167: /Helvetica-Oblique SF
                   2168: 28721 XM
                   2169: (bitblt)SH
                   2170: /Helvetica SF
                   2171: (, or)
                   2172: 129 W( "bit block transfer" operation.  The source and)130 W
                   2173: 7200 37607 MT
                   2174: (destination are given as rectangular regions of the window;)
                   2175: 82 W( the two regions have the same dimensions.)81 W
                   2176: 7200 39033 MT
                   2177: (The operation is such that overlap of the source and destination does not affect the result.)SH
                   2178: 8312 41600 MT
                   2179: (X provides a complex primitive for line)
                   2180: 90 W( drawing.  It provides for arbitrary combinations of straight and)91 W
                   2181: 7200 43026 MT
                   2182: (curved segments, defining both open and closed shapes.  Lines)
                   2183: 105 W( can be)104 W
                   2184: /Helvetica-Oblique SF
                   2185: 40253 XM
                   2186: (solid)SH
                   2187: /Helvetica SF
                   2188: (, by drawing with a single)104 W
                   2189: 7200 44452 MT
                   2190: (source pixel value,)62 W
                   2191: /Helvetica-Oblique SF
                   2192: 15945 XM
                   2193: (dashed)SH
                   2194: /Helvetica SF
                   2195: (, by alternately drawing with)
                   2196: 62 W( a single source pixel value and not drawing, and)63 W
                   2197: /Helvetica-Oblique SF
                   2198: 7200 45878 MT
                   2199: (patterned)SH
                   2200: /Helvetica SF
                   2201: (, by alternately drawing with two source pixel values.  Lines are drawn with a rectangular)
                   2202: 28 W( brush.)27 W
                   2203: 7200 47304 MT
                   2204: (Clients can query the server to determine what brush shapes are)
                   2205: 24 W( supported; a better semantics would be)25 W
                   2206: 7200 48730 MT
                   2207: (to support arbitrary shapes, but allow applications to query as to which shapes are most efficient.)SH
                   2208: 8312 51297 MT
                   2209: (A final request allows an arbitrary closed shape \050such as could be)
                   2210: 7 W( specified in the line drawing request\051)6 W
                   2211: 7200 52723 MT
                   2212: (to be filled with either a single source pixel)
                   2213: 20 W( value or a tile.  For self-intersecting shapes, the even-odd rule)21 W
                   2214: 7200 54149 MT
                   2215: (is used: a point is inside the shape if an infinite ray with the point as)
                   2216: 159 W( origin crosses the path an odd)158 W
                   2217: 7200 55575 MT
                   2218: (number of times.)SH
                   2219: 11 /Helvetica-Bold AF
                   2220: 7200 59257 MT
                   2221: (6.3. Text)SH
                   2222: 10 /Helvetica AF
                   2223: 8312 60683 MT
                   2224: (For high-performance text, X provides direct support for bitmap fonts.  A font consists of up)
                   2225: 147 W( to 256)148 W
                   2226: 7200 62109 MT
                   2227: (bitmaps; each bitmap in a font has the same height but can vary in width.  To allow server-specific font)82 W
                   2228: 7200 63535 MT
                   2229: (representations, clients "create" fonts by specifying a name)
                   2230: 116 W( rather than by downloading bitmap images)117 W
                   2231: 7200 64961 MT
                   2232: (into the server.  An application can use an arbitrary number of fonts, but \050as with all resources\051 font)173 W
                   2233: 7200 66387 MT
                   2234: (allocation can fail for lack of memory.  A reasonably implemented server should support)
                   2235: 115 W( an essentially)116 W
                   2236: 7200 67813 MT
                   2237: (unbounded number of fonts \050e.g., by caching\051, but some)
                   2238: 64 W( existing server implementations are deficient in)63 W
                   2239: 7200 69239 MT
                   2240: (this respect.  Unlike Andrew)
                   2241: 46 W( [7],)
                   2242: SH( no heuristics are applied by the server)
                   2243: 46 W( when resolving a name to a font;)47 W
                   2244: 7200 70665 MT
                   2245: (specific communities or applications may demand a variety of heuristics, and as such they belong outside)15 W
                   2246: ES
                   2247: %%Page: 16 16 
                   2248: BS
                   2249: 0 SI
                   2250: 10 /Helvetica-Bold AF
                   2251: 30044 4329 MT
                   2252: (16)SH
                   2253: /Helvetica SF
                   2254: 7200 7929 MT
                   2255: (the base window system.  Also unlike Andrew, the X)
                   2256: 49 W( server is not free to dynamically substitute one font)50 W
                   2257: 7200 9355 MT
                   2258: (for another; we do not believe such behavior is necessary or appropriate.)SH
                   2259: 8312 11922 MT
                   2260: (A string of text)
                   2261: 24 W( can be displayed using a font either as a mask or as a source.  Using a font as a mask,)23 W
                   2262: 7200 13348 MT
                   2263: (the foreground)
                   2264: 101 W( \050the one bits in the bitmap\051 of each character is drawn with a single source pixel value.)102 W
                   2265: 7200 14774 MT
                   2266: (Using a font)
                   2267: 194 W( as a source, the entire image of each character is drawn, using a pair of pixel values.)193 W
                   2268: 7200 16200 MT
                   2269: (Source font output)
                   2270: 72 W( is provided specifically for applications using fixed-width fonts in emulating traditional)73 W
                   2271: 7200 17626 MT
                   2272: (terminals.)SH
                   2273: 8312 20193 MT
                   2274: (To support)
                   2275: 97 W( "cut and paste" operations between applications, the server provides a number of buffers)96 W
                   2276: 7200 21619 MT
                   2277: (into which a client can read and write an arbitrary string of bytes.  \050This)
                   2278: 105 W( mechanism was adopted from)106 W
                   2279: 7200 23045 MT
                   2280: (Andrew.\051 Although)
                   2281: 316 W( these buffers are used principally for text strings,)
                   2282: 19 W( the server imposes no interpretation)18 W
                   2283: 7200 24471 MT
                   2284: (on the data, so cooperating)
                   2285: 251 W( applications can use the buffers to exchange such things as resource)252 W
                   2286: 7200 25897 MT
                   2287: (identifiers and images.)SH
                   2288: 12 /Helvetica-Bold AF
                   2289: 7200 29652 MT
                   2290: (7. Exposures)SH
                   2291: 10 /Helvetica AF
                   2292: 8312 31078 MT
                   2293: (Given that output to obscured windows is)
                   2294: 77 W( possible, the issue of)76 W
                   2295: /Helvetica-Oblique SF
                   2296: 37279 XM
                   2297: (exposure)SH
                   2298: /Helvetica SF
                   2299: 41746 XM
                   2300: (must be addressed.  When)76 W
                   2301: 7200 32504 MT
                   2302: (all \050or a piece\051 of an)
                   2303: 89 W( obscured window again becomes visible \050for example, as the result of the window)90 W
                   2304: 7200 33930 MT
                   2305: (being raised\051, is)
                   2306: 76 W( the client or the server responsible for restoring the contents of the window?  In X, it is)75 W
                   2307: 7200 35356 MT
                   2308: (the responsibility of the client.  When a region of a window becomes exposed, the)
                   2309: 196 W( server sends an)197 W
                   2310: 7200 36782 MT
                   2311: (asynchronous event to the client, specifying the window and the region that has been exposed; the)
                   2312: 13 W( rest is)12 W
                   2313: 7200 38208 MT
                   2314: (up to the application.  A trivial application might simply)
                   2315: 104 W( redraw the entire window; a more sophisticated)105 W
                   2316: 7200 39634 MT
                   2317: (application would only redraw the exposed region.)SH
                   2318: 8312 42201 MT
                   2319: (Why is)
                   2320: 27 W( the client responsible?  Because X imposes no structure on, or relationships between, graphics)26 W
                   2321: 7200 43627 MT
                   2322: (operations from a client, there are only two basic mechanisms by which the server might restore window)49 W
                   2323: 7200 45053 MT
                   2324: (contents: by)
                   2325: 474 W( maintaining display lists,)
                   2326: 98 W( and by maintaining off-screen images.  In the first approach, the)97 W
                   2327: 7200 46479 MT
                   2328: (server essentially retains a list of all)
                   2329: 126 W( output requests performed on the window.  When a region of the)127 W
                   2330: 7200 47905 MT
                   2331: (window becomes exposed, the server either re-executes all requests to the entire)
                   2332: 145 W( window, or only re-)144 W
                   2333: 7200 49331 MT
                   2334: (executes requests that)
                   2335: 249 W( affect the region while clipping the output to that region.  In the alternative)250 W
                   2336: 7200 50757 MT
                   2337: (approach, when a window becomes obscured the server saves)
                   2338: 195 W( the obscured region \050or perhaps the)194 W
                   2339: 7200 52183 MT
                   2340: (entire window\051 in)
                   2341: 27 W( off-screen memory.  All subsequent output requests are executed not only to the visible)28 W
                   2342: 7200 53609 MT
                   2343: (regions of the window,)
                   2344: 99 W( but to the off-screen image as well.  When an obscured region becomes visible)98 W
                   2345: 7200 55035 MT
                   2346: (again, the off-screen copy is simply restored.)SH
                   2347: 8312 57602 MT
                   2348: (We believe neither)
                   2349: 118 W( server-based approach is acceptable.  With display lists, the server is unlikely to)119 W
                   2350: 7200 59028 MT
                   2351: (have any reasonable notion of when later output requests nullify)
                   2352: 188 W( earlier ones.  Either the display list)187 W
                   2353: 7200 60454 MT
                   2354: (becomes unmanageably long, and a refresh that should appear nearly instantaneous)
                   2355: 38 W( instead appears as)39 W
                   2356: 7200 61880 MT
                   2357: (a slow-motion replay, or the server spends a significant)
                   2358: 4 W( length of time pruning the display list, and normal-)3 W
                   2359: 7200 63306 MT
                   2360: (case performance is)
                   2361: 63 W( considerably reduced.  One problem with the off-screen image approach is \050virtual\051)64 W
                   2362: 7200 64732 MT
                   2363: (memory consumption:  on a 1024 by)
                   2364: 223 W( 1024 8-plane display, just one full-screen image requires one)222 W
                   2365: 7200 66158 MT
                   2366: (megabyte of storage, and multiple overlapping windows could easily)
                   2367: 158 W( require many times that amount.)159 W
                   2368: 7200 67584 MT
                   2369: (Another problem is that the cost of the implementation)
                   2370: 136 W( can be prohibitive.  Consider, for example, the)135 W
                   2371: 7200 69010 MT
                   2372: (QDSS display)
                   2373: 55 W( [34],)
                   2374: SH( which has a graphics co-processor.  In the QDSS, display memory is inaccessible to)56 W
                   2375: 7200 70436 MT
                   2376: (the host processor.  In addition, the co-processor cannot perform operations in)
                   2377: 130 W( host memory, and has)129 W
                   2378: 7200 71862 MT
                   2379: (relatively little off-screen)
                   2380: 201 W( memory of its own.  The only viable way to maintain off-screen images for)202 W
                   2381: ES
                   2382: %%Page: 17 17 
                   2383: BS
                   2384: 0 SI
                   2385: 10 /Helvetica-Bold AF
                   2386: 30044 4329 MT
                   2387: (17)SH
                   2388: /Helvetica SF
                   2389: 7200 7929 MT
                   2390: (displays like the QDSS may be to emulate the co-processor in software.  It can easily take tens of)207 W
                   2391: 7200 9355 MT
                   2392: (thousands of lines of code to emulate a co-processor, and such emulation may execute orders)
                   2393: 263 W( of)264 W
                   2394: 7200 10781 MT
                   2395: (magnitude slower than the co-processor.)SH
                   2396: 8312 13348 MT
                   2397: (Our belief is that)
                   2398: 49 W( many applications can take advantage of their own information structures to facilitate)48 W
                   2399: 7200 14774 MT
                   2400: (rapid redisplay, without)
                   2401: 170 W( the expense of maintaining a distinct display structure or backing-store in the)171 W
                   2402: 7200 16200 MT
                   2403: (client or the server, and often with even better performance.  \050Sapphire)
                   2404: 42 W( [17])
                   2405: SH( permits client)
                   2406: 42 W( refresh for this)41 W
                   2407: 7200 17626 MT
                   2408: (reason.\051 For)
                   2409: 774 W( example, a text editor can)
                   2410: 248 W( redisplay directly from the source, and a VLSI editor can)249 W
                   2411: 7200 19052 MT
                   2412: (redisplay directly from the layout and component definitions.  Many applications will be built on top of)146 W
                   2413: 7200 20478 MT
                   2414: (high-level graphics libraries that automatically maintain the data structures necessary to implement rapid)56 W
                   2415: 7200 21904 MT
                   2416: (redisplay. For)
                   2417: 536 W( example, the structured display file mechanism in VGTS could be)
                   2418: 129 W( supported in a client)128 W
                   2419: 7200 23330 MT
                   2420: (library. Of)
                   2421: 300 W( course, pushing the responsibility back on)
                   2422: 11 W( the application may not simplify matters, particularly)12 W
                   2423: 7200 24756 MT
                   2424: (when retrofitting old systems to)
                   2425: 178 W( a new environment.  For example, the current GKS design does not)177 W
                   2426: 7200 26182 MT
                   2427: (provide adequate hooks for)
                   2428: 217 W( automatic, system-generated refresh of application windows, nor does it)218 W
                   2429: 7200 27608 MT
                   2430: (provide an adequate mechanism for forcing refresh back on the application.)SH
                   2431: 8312 30175 MT
                   2432: (Relying on client-controlled refresh also derives from window)
                   2433: 112 W( management philosophy.  Our belief is)111 W
                   2434: 7200 31601 MT
                   2435: (that applications cannot be written with fixed top-level window)
                   2436: 83 W( sizes built in.  Rather, they must function)84 W
                   2437: 7200 33027 MT
                   2438: (correctly with almost any size,)
                   2439: 152 W( and continue to function correctly as windows are dynamically resized.)151 W
                   2440: 7200 34453 MT
                   2441: (This is necessary if applications are to be usable on a variety of displays under)
                   2442: 179 W( a variety of window)180 W
                   2443: 7200 35879 MT
                   2444: (management policies.)
                   2445: 64 W( \050Of)
                   2446: 405 W( course, an application may need a minimum size to function reasonably, and)63 W
                   2447: 7200 37305 MT
                   2448: (may prefer the width or)
                   2449: 31 W( height to be a multiple of some number; X allows the client to attach a resize hint)32 W
                   2450: 7200 38731 MT
                   2451: (to each window to inform window managers of this.\051  Our belief is that)
                   2452: 56 W( most applications, for one reason)55 W
                   2453: 7200 40157 MT
                   2454: (or another, will already have code for performing a complete redisplay of)
                   2455: 9 W( the window, and that it is usually)10 W
                   2456: 7200 41583 MT
                   2457: (straightforward to modify this code to deal with partial exposures.  Similar arguments were used)
                   2458: 115 W( in the)114 W
                   2459: 7200 43009 MT
                   2460: (design of both Andrew and Mex, and experience has confirmed their decision [7, 23].)SH
                   2461: 8312 45576 MT
                   2462: (This is not to argue that the server should never maintain window contents, only that it should)
                   2463: 77 W( not be)78 W
                   2464: /Helvetica-Oblique SF
                   2465: 7200 47002 MT
                   2466: (required)SH
                   2467: /Helvetica SF
                   2468: 11215 XM
                   2469: (to maintain contents.  For complex imaging)
                   2470: 69 W( and graphics applications, efficient maintenance by)68 W
                   2471: 7200 48428 MT
                   2472: (the server may be critical for acceptable)
                   2473: 7 W( performance of window management functions.  There is nothing)8 W
                   2474: 7200 49854 MT
                   2475: (inherent in the X protocol that precludes the server from)
                   2476: 30 W( maintaining window contents and not generating)29 W
                   2477: 7200 51280 MT
                   2478: (exposure events.  In the next version of X, windows will have several attributes)
                   2479: 29 W( to advise the server as to)30 W
                   2480: 7200 52706 MT
                   2481: (when and how contents should be maintained.)SH
                   2482: 8312 55273 MT
                   2483: (In X, clients)
                   2484: 185 W( are never informed of what regions are obscured, only of what regions have become)184 W
                   2485: 7200 56699 MT
                   2486: (visible. Thus,)
                   2487: 528 W( clients have insufficient information to try and optimize output by)
                   2488: 125 W( only drawing to visible)126 W
                   2489: 7200 58125 MT
                   2490: (regions. However,)
                   2491: 786 W( we feel this is justified on two grounds.  First, realistically, users seldom stack)254 W
                   2492: 7200 59551 MT
                   2493: (windows such that the active ones are obscured, so)
                   2494: 142 W( there is little point in complicating applications to)143 W
                   2495: 7200 60977 MT
                   2496: (optimize this case.  More importantly, allowing applications to restrict output to only)
                   2497: 45 W( visible regions would)44 W
                   2498: 7200 62403 MT
                   2499: (conflict with the desire to have the server maintain obscured regions automatically when possible.)SH
                   2500: 8312 64970 MT
                   2501: (An interesting complication with the CopyArea request \050described)
                   2502: 51 W( in Section 6\051 arises, having decided)52 W
                   2503: 7200 66396 MT
                   2504: (on client refresh.)
                   2505: 48 W( If)
                   2506: 372 W( part of the source region of the CopyArea is obscured, then not all of the destination)47 W
                   2507: 7200 67822 MT
                   2508: (region can)
                   2509: 107 W( be updated properly, and the client must be notified \050with an exposure event\051 so that it can)108 W
                   2510: 7200 69248 MT
                   2511: (correct the problem.  Since output requests)
                   2512: 77 W( are asynchronous, care must be taken by the application to)76 W
                   2513: 7200 70674 MT
                   2514: (handle exposure events when using CopyArea.)
                   2515: 27 W( In)
                   2516: 333 W( particular, if a region is exposed and an event sent by)28 W
                   2517: ES
                   2518: %%Page: 18 18 
                   2519: BS
                   2520: 0 SI
                   2521: 10 /Helvetica-Bold AF
                   2522: 30044 4329 MT
                   2523: (18)SH
                   2524: /Helvetica SF
                   2525: 7200 7929 MT
                   2526: (the server,)
                   2527: 220 W( a subsequent CopyArea may move all or part of the region before the event is actually)219 W
                   2528: 7200 9355 MT
                   2529: (received by the application.  Several simple algorithms have been designed)
                   2530: 17 W( to deal with this situation, but)18 W
                   2531: 7200 10781 MT
                   2532: (we will not present them here.)SH
                   2533: 8312 13348 MT
                   2534: (Client refresh raises a visual problem in a network environment.  When a region of a window)
                   2535: 33 W( becomes)32 W
                   2536: 7200 14774 MT
                   2537: (exposed, what contents should the server initially)
                   2538: 244 W( place in that window?  In a local, tightly-coupled)245 W
                   2539: 7200 16200 MT
                   2540: (environment, it might be perfectly reasonable to leave the)
                   2541: 171 W( contents unaltered, because the client can)170 W
                   2542: 7200 17626 MT
                   2543: (almost instantaneously begin to refresh the region.)
                   2544: 121 W( In)
                   2545: 521 W( a network environment however \050and even in a)122 W
                   2546: 7200 19052 MT
                   2547: (local system where processes can get "swapped out" and take considerable time to swap)
                   2548: 216 W( back in\051,)215 W
                   2549: 7200 20478 MT
                   2550: (inevitable delays)
                   2551: 45 W( can lead to visually confusing results.  For example, the user may move a window, and)46 W
                   2552: 7200 21904 MT
                   2553: (see two images of the window on the screen)
                   2554: 59 W( for a significant length of time, or resize a window and see)58 W
                   2555: 7200 23330 MT
                   2556: (no immediate change in the appearance of the screen.)SH
                   2557: 8312 25897 MT
                   2558: (To avoid such anomalies)
                   2559: 100 W( in X, clients must define a)101 W
                   2560: /Helvetica-Oblique SF
                   2561: 32329 XM
                   2562: (background)SH
                   2563: /Helvetica SF
                   2564: 37933 XM
                   2565: (for every window.  The background)101 W
                   2566: 7200 27323 MT
                   2567: (can be a single color, or it can)
                   2568: 31 W( be a tiling pattern.  Whenever a region of a window is exposed, the server)30 W
                   2569: 7200 28749 MT
                   2570: (immediately paints)
                   2571: 149 W( the region with the background.  Users therefore see window shapes immediately,)150 W
                   2572: 7200 30175 MT
                   2573: (even if the "contents" are slow to arrive.  Of course, many application windows have some notion of a)115 W
                   2574: 7200 31601 MT
                   2575: (background anyway, so having the server)
                   2576: 239 W( initialize with a background seldom results in extraneous)240 W
                   2577: 7200 33027 MT
                   2578: (redisplay. In)
                   2579: 576 W( fact, many non-leaf windows typically contain nothing but a background, and having the)148 W
                   2580: 7200 34453 MT
                   2581: (server paint that background frees the applications from performing any redisplay at all to those windows.)SH
                   2582: 8312 37020 MT
                   2583: (Although we believe client-generated refresh is acceptable most of the time, it does)
                   2584: 11 W( not always perform)12 W
                   2585: 7200 38446 MT
                   2586: (well with momentary pop-up menus, where speed is at a premium.  To)
                   2587: 4 W( avoid potentially expensive refresh)3 W
                   2588: 7200 39872 MT
                   2589: (when a menu is removed from the screen, a client can explicitly copy the region to be covered by the)120 W
                   2590: 7200 41298 MT
                   2591: (menu into off-screen memory \050within the server\051)
                   2592: 138 W( before mapping the menu window.  A special unmap)137 W
                   2593: 7200 42724 MT
                   2594: (request is used to remove the menu:)
                   2595: 61 W( it)
                   2596: 402 W( unmaps the window without affecting the contents of the screen)62 W
                   2597: 7200 44150 MT
                   2598: (or generating exposure events.  The)
                   2599: 43 W( original contents are then copied back onto the screen.  In addition,)42 W
                   2600: 7200 45576 MT
                   2601: (the client usually)39 W
                   2602: /Helvetica-Oblique SF
                   2603: 14987 XM
                   2604: (grabs)SH
                   2605: /Helvetica SF
                   2606: 17805 XM
                   2607: (the server for the entire sequence, using a request)
                   2608: 39 W( which freezes all other clients)40 W
                   2609: 7200 47002 MT
                   2610: (until a corresponding ungrab request is issued \050or the)
                   2611: 342 W( grabbing client terminates\051.  Without this,)341 W
                   2612: 7200 48428 MT
                   2613: (concurrent output from other clients)
                   2614: 93 W( to regions obscured by the menu would be lost.  Although freezing)94 W
                   2615: 7200 49854 MT
                   2616: (other clients is in general a poor idea, it seems acceptable for momentary menus.)SH
                   2617: 12 /Helvetica-Bold AF
                   2618: 7200 53609 MT
                   2619: (8. Input)SH
                   2620: 10 /Helvetica AF
                   2621: 8312 55035 MT
                   2622: (We now turn to a discussion of input)
                   2623: 10 W( events, but first we briefly describe the support for mouse cursors.)9 W
                   2624: 7200 56461 MT
                   2625: (Clients can define)
                   2626: 49 W( arbitrary shapes for use as mouse cursors.  A cursor is defined by a source bitmap, a)50 W
                   2627: 7200 57887 MT
                   2628: (pair of pixel values with which to display the bitmap,)
                   2629: 84 W( a mask bitmap which defines the precise shape of)83 W
                   2630: 7200 59313 MT
                   2631: (the image, and a coordinate within the source bitmap which defines the "center" or "hot)
                   2632: 181 W( spot" of the)182 W
                   2633: 7200 60739 MT
                   2634: (cursor. Cursors)
                   2635: 724 W( of arbitrary size can be constructed,)
                   2636: 223 W( although only a portion of the cursor may be)222 W
                   2637: 7200 62165 MT
                   2638: (displayed on some hardware.  Clients can)
                   2639: 10 W( query the server to determine what cursor sizes are supported,)11 W
                   2640: 7200 63591 MT
                   2641: (but existing applications)
                   2642: 73 W( typically just assume a 16 by 16 image can always be displayed.  Cursors also)72 W
                   2643: 7200 65017 MT
                   2644: (can be constructed from character images in fonts; this provides)
                   2645: 174 W( a simple form of named indirection,)175 W
                   2646: 7200 66443 MT
                   2647: (allowing custom tailoring to each display without having to modify the applications.)SH
                   2648: 8312 69010 MT
                   2649: (A window is said to)133 W
                   2650: /Helvetica-Oblique SF
                   2651: 17758 XM
                   2652: (contain)SH
                   2653: /Helvetica SF
                   2654: 21393 XM
                   2655: (the mouse)
                   2656: 133 W( if the hot spot of the cursor is within a visible portion of the)132 W
                   2657: 7200 70436 MT
                   2658: (window or one of its subwindows.  The mouse is said to be)13 W
                   2659: /Helvetica-Oblique SF
                   2660: 33658 XM
                   2661: (in)SH
                   2662: /Helvetica SF
                   2663: 34727 XM
                   2664: (a window if the window contains the mouse)14 W
                   2665: 7200 71862 MT
                   2666: (but no subwindow contains the mouse.  Every window can have a mouse cursor defined)
                   2667: 167 W( for it.  The)166 W
                   2668: ES
                   2669: %%Page: 19 19 
                   2670: BS
                   2671: 0 SI
                   2672: 10 /Helvetica-Bold AF
                   2673: 30044 4329 MT
                   2674: (19)SH
                   2675: /Helvetica SF
                   2676: 7200 7929 MT
                   2677: (server automatically)
                   2678: 55 W( displays the cursor of whatever window the mouse is currently in; if the window has)56 W
                   2679: 7200 9355 MT
                   2680: (no cursor defined, the server displays the cursor of the closest ancestor with a cursor defined.)SH
                   2681: 8312 11922 MT
                   2682: (Input is associated with windows.  Input to a given window is controlled by)
                   2683: 59 W( a single client, which need)58 W
                   2684: 7200 13348 MT
                   2685: (not be the client that created the window.  Events are classified into various types,)
                   2686: 124 W( and the controlling)125 W
                   2687: 7200 14774 MT
                   2688: (client selects which)
                   2689: 26 W( types are of interest to it.  Only events matching in type with this selection are sent to)25 W
                   2690: 7200 16200 MT
                   2691: (the client.  When an input event is generated for a window and the controlling client has not)
                   2692: 29 W( selected that)30 W
                   2693: 7200 17626 MT
                   2694: (type, the server)53 W
                   2695: /Helvetica-Oblique SF
                   2696: 14528 XM
                   2697: (propagates)SH
                   2698: /Helvetica SF
                   2699: 19861 XM
                   2700: (the event to the closest ancestor window for which some client has selected)52 W
                   2701: 7200 19052 MT
                   2702: (the type, and sends the event to that client instead.)
                   2703: 46 W( Every)
                   2704: 372 W( event includes the window that had the event)47 W
                   2705: 7200 20478 MT
                   2706: (type selected; this window is called the)56 W
                   2707: /Helvetica-Oblique SF
                   2708: 25044 XM
                   2709: (event window)55 W
                   2710: /Helvetica SF
                   2711: (. If)
                   2712: 388 W( the event has been propagated, the event also)55 W
                   2713: 7200 21904 MT
                   2714: (includes the next window down in)
                   2715: 107 W( the hierarchy between the event window and the original window on)108 W
                   2716: 7200 23330 MT
                   2717: (which the event was generated.)SH
                   2718: 11 /Helvetica-Bold AF
                   2719: 7200 27012 MT
                   2720: (8.1. The Keyboard)SH
                   2721: 10 /Helvetica AF
                   2722: 8312 28438 MT
                   2723: (For the keyboard, a client can selectively receive)
                   2724: 84 W( events on the press or release of a key.  Keyboard)83 W
                   2725: 7200 29864 MT
                   2726: (events are not reported in terms)
                   2727: 45 W( of ASCII character codes; instead, each key is assigned a unique code,)46 W
                   2728: 7200 31290 MT
                   2729: (and client software must)
                   2730: 247 W( translate these codes into the appropriate characters.  The mapping from)246 W
                   2731: 7200 32716 MT
                   2732: (keycaps to keycodes is intended to be "universal" and predefined;)
                   2733: 28 W( a given keycap has the same keycode)29 W
                   2734: 7200 34142 MT
                   2735: (on all keyboards.  Applications generally have been written to read a "keymap file" from the)
                   2736: 50 W( user's home)49 W
                   2737: 7200 35568 MT
                   2738: (directory, so that users can remap the keyboard as they see fit.)SH
                   2739: 8312 38135 MT
                   2740: (The use)
                   2741: 215 W( of coded keys is secondary to the ability to detect both up and down transitions on the)216 W
                   2742: 7200 39561 MT
                   2743: (keyboard. For)
                   2744: 312 W( example, a common trick in window systems)
                   2745: 17 W( is for mouse button operations to be affected)16 W
                   2746: 7200 40987 MT
                   2747: (by keyboard)137 W
                   2748: /Helvetica-Oblique SF
                   2749: 13199 XM
                   2750: (modifiers)SH
                   2751: /Helvetica SF
                   2752: 17670 XM
                   2753: (such as the Shift, Control, and Meta keys.  A useful)
                   2754: 137 W( feature of the Genera)
                   2755: 138 W( [31])SH
                   2756: 7200 42413 MT
                   2757: (system is the)
                   2758: 39 W( use of a "mouse documentation line", which changes dynamically as modifiers are pressed)38 W
                   2759: 7200 43839 MT
                   2760: (and released, indicating)
                   2761: 145 W( the function of the mouse buttons.  A base window system must provide this)146 W
                   2762: 7200 45265 MT
                   2763: (capability. Transitions)
                   2764: 584 W( are not only useful on modifiers; various applications for systems other than X)152 W
                   2765: 7200 46691 MT
                   2766: (have been designed to use "chords" \050groups)
                   2767: 171 W( of keys pressed simultaneously\051, and again the window)172 W
                   2768: 7200 48117 MT
                   2769: (system should support them.)SH
                   2770: 8312 50684 MT
                   2771: (The keyboard is always)25 W
                   2772: /Helvetica-Oblique SF
                   2773: 19138 XM
                   2774: (attached)SH
                   2775: /Helvetica SF
                   2776: 23277 XM
                   2777: (to some window \050typically the root)
                   2778: 25 W( window or a top-level window\051; we)24 W
                   2779: 7200 52110 MT
                   2780: (call this window)
                   2781: 81 W( the)82 W
                   2782: /Helvetica-Oblique SF
                   2783: 16418 XM
                   2784: (focus)SH
                   2785: /Helvetica SF
                   2786: 19168 XM
                   2787: (window. A)
                   2788: 442 W( request can be used \050usually by the input manager\051 to attach the)82 W
                   2789: 7200 53536 MT
                   2790: (keyboard to)
                   2791: 46 W( any window.  The window that receives keyboard input depends on both the mouse position)45 W
                   2792: 7200 54962 MT
                   2793: (and the focus window.  If)
                   2794: 228 W( the mouse is in some descendant of the focus window, that descendant)229 W
                   2795: 7200 56388 MT
                   2796: (receives the input.  If the mouse is not in a descendant of the)
                   2797: 164 W( focus window, then the focus window)163 W
                   2798: 7200 57814 MT
                   2799: (receives the input, even if the mouse is outside the focus window.  For applications that wish to have the)38 W
                   2800: 7200 59240 MT
                   2801: (mouse state modify the effect)
                   2802: 45 W( of keyboard input, a keyboard event contains the mouse coordinates, both)44 W
                   2803: 7200 60666 MT
                   2804: (relative to the event window and global to the screen, as well as the state of the mouse buttons.)SH
                   2805: 8312 63233 MT
                   2806: (To provide a reasonable user interface, keyboard events also contain)
                   2807: 107 W( the state of the most common)108 W
                   2808: 7200 64659 MT
                   2809: (modifier keys:  Shift, ShiftLock, Control, and Meta.  Without this information, anomalous behavior can)155 W
                   2810: 7200 66085 MT
                   2811: (result. If)
                   2812: 785 W( the user switches windows while modifier keys are down, the new client must somehow)254 W
                   2813: 7200 67511 MT
                   2814: (determine which modifiers are down.  Placing the modifier state in the keyboard events)
                   2815: 193 W( solves such)192 W
                   2816: 7200 68937 MT
                   2817: (problems, and also)
                   2818: 104 W( has another benefit:  most clients do not have to maintain their own shadow of the)105 W
                   2819: 7200 70363 MT
                   2820: (modifier state,)
                   2821: 206 W( and so often can completely ignore key release events.  However, there is a conflict)205 W
                   2822: 7200 71789 MT
                   2823: (between this server-maintained state and client-maintained keyboard mappings.)
                   2824: 202 W( In)
                   2825: 684 W( particular, clients)203 W
                   2826: ES
                   2827: %%Page: 20 20 
                   2828: BS
                   2829: 0 SI
                   2830: 10 /Helvetica-Bold AF
                   2831: 30044 4329 MT
                   2832: (20)SH
                   2833: /Helvetica SF
                   2834: 7200 7929 MT
                   2835: (cannot use non-standard keys as modifiers, or use chords without the possibility of anomalies such as)115 W
                   2836: 7200 9355 MT
                   2837: (described above.  We believe the correct solution \050not)
                   2838: 58 W( yet supported in X\051 is for the server to maintain a)59 W
                   2839: 7200 10781 MT
                   2840: (bit mask reflecting the full state of the keyboard, and)
                   2841: 100 W( to allow clients to read this mask.  An application)99 W
                   2842: 7200 12207 MT
                   2843: (using chords or non-standard modifiers would request the server)
                   2844: 312 W( to send this mask automatically)313 W
                   2845: 7200 13633 MT
                   2846: (whenever the mouse entered the application's window.)SH
                   2847: 11 /Helvetica-Bold AF
                   2848: 7200 17315 MT
                   2849: (8.2. The Mouse)SH
                   2850: 10 /Helvetica AF
                   2851: 8312 18741 MT
                   2852: (The X protocol is \050somewhat arbitrarily\051)
                   2853: 27 W( designed for mice with up to three buttons.  An application can)26 W
                   2854: 7200 20167 MT
                   2855: (selectively receive events on the)
                   2856: 9 W( press or release of each button.  Each event contains the current mouse)10 W
                   2857: 7200 21593 MT
                   2858: (coordinates \050both local to the window)
                   2859: 200 W( and global to the screen\051, the current state of all buttons and)199 W
                   2860: 7200 23019 MT
                   2861: (modifier keys, and a timestamp which can be used, for example, to decide when a)
                   2862: 85 W( succession of clicks)86 W
                   2863: 7200 24445 MT
                   2864: (constitutes a)
                   2865: 1 W( double or triple click.  An application can also choose to receive mouse motion events, either)SH
                   2866: 7200 25871 MT
                   2867: (whenever the mouse is in the window, or only when particular)
                   2868: 150 W( buttons have also been pressed.  The)151 W
                   2869: 7200 27297 MT
                   2870: (application cannot control the granularity of the reporting, nor)
                   2871: 45 W( is any minimum granularity guaranteed.  In)44 W
                   2872: 7200 28723 MT
                   2873: (fact, typical server implementations make an effort to compact motion events, to)
                   2874: 291 W( minimize system)292 W
                   2875: 7200 30149 MT
                   2876: (overhead and wired memory in device drivers.  As such, X)
                   2877: 143 W( may not serve adequately for fine-grained)142 W
                   2878: 7200 31575 MT
                   2879: (tracking, such as in fast moving free-hand drawing applications.)SH
                   2880: 8312 34142 MT
                   2881: (Even with motion)
                   2882: 158 W( compaction, servers can generate considerable numbers of motion events.  If an)159 W
                   2883: 7200 35568 MT
                   2884: (application attempts to respond in real)
                   2885: 152 W( time to every event, it can easily get far behind relative to the)151 W
                   2886: 7200 36994 MT
                   2887: (actual position of the mouse.  Instead,)
                   2888: 104 W( many applications simply treat motion events as hints.  When a)105 W
                   2889: 7200 38420 MT
                   2890: (motion event is received, the event is simply discarded, and the client then)
                   2891: 7 W( explicitly queries the server for)6 W
                   2892: 7200 39846 MT
                   2893: (the current mouse position.  In waiting for the reply, more motion events may be received; these are)
                   2894: 34 W( also)35 W
                   2895: 7200 41272 MT
                   2896: (discarded. The)
                   2897: 416 W( client then reacts based on the queried)
                   2898: 69 W( mouse position.  The advantage of this scheme)68 W
                   2899: 7200 42698 MT
                   2900: (over continuously polling the mouse position is that no CPU time)
                   2901: 243 W( is consumed while the mouse is)244 W
                   2902: 7200 44124 MT
                   2903: (stationary.)SH
                   2904: 8312 46691 MT
                   2905: (Clients can also receive an event each time the mouse enters or leaves a window.)
                   2906: 201 W( This)
                   2907: 678 W( can be)200 W
                   2908: 7200 48117 MT
                   2909: (particularly useful in implementing)
                   2910: 114 W( menus.  For example, each menu item can be placed in a separate)115 W
                   2911: 7200 49543 MT
                   2912: (subwindow of the overall menu window.)
                   2913: 40 W( When)
                   2914: 357 W( the mouse enters a subwindow, the item is highlighted in)39 W
                   2915: 7200 50969 MT
                   2916: (some fashion \050e.g., by inverting the video sense\051, and)
                   2917: 127 W( when the mouse leaves the window the item is)128 W
                   2918: 7200 52395 MT
                   2919: (restored to normal.)
                   2920: 53 W( Implementing)
                   2921: 382 W( a menu in this manner requires considerably less CPU overhead than)52 W
                   2922: 7200 53821 MT
                   2923: (continuous polling)
                   2924: 125 W( of the mouse, and also less overhead than using motion events, since most motion)126 W
                   2925: 7200 55247 MT
                   2926: (events would be within windows and thus uninteresting.)SH
                   2927: 8312 57814 MT
                   2928: (Due to the nature of overlapping windows, and because continuous tracking by the server is)
                   2929: 226 W( not)225 W
                   2930: 7200 59240 MT
                   2931: (guaranteed, the mouse may appear to move instantaneously between any pair of windows on the screen.)11 W
                   2932: 7200 60666 MT
                   2933: (Certainly the window the)
                   2934: 161 W( mouse was in should be notified of the mouse leaving, and the window the)160 W
                   2935: 7200 62092 MT
                   2936: (mouse is now in should be)
                   2937: 76 W( notified of the mouse entering.  However, all of the windows "in between" in)77 W
                   2938: 7200 63518 MT
                   2939: (the hierarchy may also be)
                   2940: 72 W( interested in the transition.  This is useful in simplifying the structure of some)71 W
                   2941: 7200 64944 MT
                   2942: (applications, and is necessary in implementing certain kinds of)
                   2943: 111 W( window managers and input managers.)112 W
                   2944: 7200 66370 MT
                   2945: (Thus, when the mouse moves from window A to window B, with window)
                   2946: 223 W( W as their closest \050least\051)222 W
                   2947: 7200 67796 MT
                   2948: (common ancestor, all ancestors of A below W also receive leave events, and)
                   2949: 40 W( all ancestors of B below W)41 W
                   2950: 7200 69222 MT
                   2951: (receive enter events.)SH
                   2952: 8312 71789 MT
                   2953: (Except for mouse motion events, it might be argued that events are infrequent enough that)
                   2954: 59 W( the server)58 W
                   2955: ES
                   2956: %%Page: 21 21 
                   2957: BS
                   2958: 0 SI
                   2959: 10 /Helvetica-Bold AF
                   2960: 30044 4329 MT
                   2961: (21)SH
                   2962: /Helvetica SF
                   2963: 7200 7929 MT
                   2964: (should always)
                   2965: 86 W( send all events to the client, and eliminate the complexity of selecting events.  However,)87 W
                   2966: 7200 9355 MT
                   2967: (some applications are written with interrupt-driven input; events are received asynchronously,)
                   2968: 56 W( and cause)55 W
                   2969: 7200 10781 MT
                   2970: (the current computation to be suspended so that the input can be processed.  For)
                   2971: 49 W( example, a text editor)50 W
                   2972: 7200 12207 MT
                   2973: (might use interrupt-driven input, with the)
                   2974: 49 W( normal computation being redisplay of the window.  The receipt)48 W
                   2975: 7200 13633 MT
                   2976: (of extraneous input events \050for example, key)
                   2977: 179 W( release events\051 can cause noticeable "hiccups" in such)180 W
                   2978: 7200 15059 MT
                   2979: (redisplay.)SH
                   2980: 12 /Helvetica-Bold AF
                   2981: 7200 18814 MT
                   2982: (9. Input and Window Management)SH
                   2983: 10 /Helvetica AF
                   2984: 8312 20240 MT
                   2985: (There are two basic modes)
                   2986: 86 W( of keyboard management:)85 W
                   2987: /Helvetica-Oblique SF
                   2988: 33592 XM
                   2989: (real-estate)SH
                   2990: /Helvetica SF
                   2991: 38679 XM
                   2992: (and)SH
                   2993: /Helvetica-Oblique SF
                   2994: 40710 XM
                   2995: (listener)SH
                   2996: /Helvetica SF
                   2997: (. In)
                   2998: 448 W( real-estate mode,)85 W
                   2999: 7200 21666 MT
                   3000: (the keyboard "follows" the mouse; keyboard input is directed to whatever window the mouse is in.)
                   3001: 138 W( In)556 W
                   3002: 7200 23092 MT
                   3003: (listener mode, keyboard input is directed)
                   3004: 25 W( to a specific window, independent of the mouse position.  Some)24 W
                   3005: 7200 24518 MT
                   3006: (systems provide only real-estate mode)
                   3007: 364 W( [1, 28],)
                   3008: SH( some only listener)
                   3009: 364 W( mode)
                   3010: 365 W( [8, 17, 19, 23, 30, 31],)
                   3011: SH( and)365 W
                   3012: 7200 25944 MT
                   3013: (Andrew [7])
                   3014: SH( provides both, although the mode cannot be changed during)
                   3015: 178 W( a session.  Both modes are)177 W
                   3016: 7200 27370 MT
                   3017: (supported in X, and the mode can be)
                   3018: 107 W( changed dynamically.  Real-estate mode is the default behavior,)108 W
                   3019: 7200 28796 MT
                   3020: (with the root window as)
                   3021: 78 W( the focus window, as described in the previous section.  An input manager can)77 W
                   3022: 7200 30222 MT
                   3023: (also make some other \050typically top-level\051 window the focus)
                   3024: 262 W( window, yielding listener mode.  Note)263 W
                   3025: 7200 31648 MT
                   3026: (however, that in listener mode in X, the client controlling the focus window can)
                   3027: 240 W( still get real-estate)239 W
                   3028: 7200 33074 MT
                   3029: (behavior for subwindows, if desired; this capability has proven useful in several applications.)SH
                   3030: 8312 35641 MT
                   3031: (The primary function)
                   3032: 102 W( of a window manager is reconfiguration:  restacking, resizing, and repositioning)103 W
                   3033: 7200 37067 MT
                   3034: (top-level windows.  The configuration of nested windows is assumed to be application-specific, and under)16 W
                   3035: 7200 38493 MT
                   3036: (control of the)
                   3037: 20 W( applications.  There are two broad categories of window managers:  manual and automatic.)21 W
                   3038: 7200 39919 MT
                   3039: (A manual window manager)
                   3040: 40 W( is "passive", and simply provides an interface to allow the user to manipulate)39 W
                   3041: 7200 41345 MT
                   3042: (the desktop; windows)
                   3043: 98 W( can be resized and reorganized at will.  The initial size and position of a window)99 W
                   3044: 7200 42771 MT
                   3045: (typically \050but not always\051 is)
                   3046: 76 W( under user or application control.  Automatic window managers are "active",)75 W
                   3047: 7200 44197 MT
                   3048: (and operate for the most part)
                   3049: 229 W( without human interaction; size and position at window creation, and)230 W
                   3050: 7200 45623 MT
                   3051: (reconfiguration at window destruction, are chosen by the)
                   3052: 92 W( system.  Automatic managers typically tile the)91 W
                   3053: 7200 47049 MT
                   3054: (screen with windows, such that no two windows)
                   3055: 99 W( overlap, automatically adjusting the layout as windows)100 W
                   3056: 7200 48475 MT
                   3057: (are created and destroyed.  Andrew)
                   3058: 111 W( [7],)
                   3059: SH( Star)
                   3060: 111 W( [24],)
                   3061: SH( and Cedar)
                   3062: 111 W( [32])
                   3063: SH( provide automatic management, plus)111 W
                   3064: 7200 49901 MT
                   3065: (limited manual reconfiguration capability.)SH
                   3066: 8312 52468 MT
                   3067: (Existing window managers)
                   3068: 414 W( for X are manual.  Automatic management that is transparent to)415 W
                   3069: 7200 53894 MT
                   3070: (applications cannot be accomplished reasonably in X; future)
                   3071: 283 W( support for automatic management is)282 W
                   3072: 7200 55320 MT
                   3073: (discussed in Section 10.  In the current X)
                   3074: 114 W( design, clients are responsible for initially sizing and placing)115 W
                   3075: 7200 56746 MT
                   3076: (their top-level windows, not)
                   3077: 227 W( window managers.  In this way, applications continue to work when no)226 W
                   3078: 7200 58172 MT
                   3079: (window manager is present.  Typically, the)
                   3080: 95 W( user either specifies geometry information in the application)96 W
                   3081: 7200 59598 MT
                   3082: (command line, or uses the mouse to sweep)
                   3083: 24 W( out a rectangle on the screen.  \050For the latter, the application)23 W
                   3084: 7200 61024 MT
                   3085: (grabs the mouse, as described below.\051)SH
                   3086: 11 /Helvetica-Bold AF
                   3087: 7200 64706 MT
                   3088: (9.1. Mouse-Driven Management)SH
                   3089: 10 /Helvetica AF
                   3090: 8312 66132 MT
                   3091: (Existing managers are)
                   3092: 368 W( primarily mouse-driven, and are based on the ability to "steal" events.)369 W
                   3093: 7200 67558 MT
                   3094: (Specifically, a manager \050or any)
                   3095: 4 W( other client\051 can)3 W
                   3096: /Helvetica-Oblique SF
                   3097: 28625 XM
                   3098: (grab)SH
                   3099: /Helvetica SF
                   3100: 30907 XM
                   3101: (a mouse button in combination with a set of modifier)3 W
                   3102: 7200 68984 MT
                   3103: (keys, with the following effect.  Whenever the modifier keys are down and the button is pressed, the)
                   3104: 3 W( event)4 W
                   3105: 7200 70410 MT
                   3106: (is reported to the grabbing client, regardless of what window the)
                   3107: 79 W( mouse is in.  All mouse-related events)78 W
                   3108: 7200 71836 MT
                   3109: (continue to be sent to that client until the button is)
                   3110: 39 W( released.  As part of the grab, the client also specifies)40 W
                   3111: ES
                   3112: %%Page: 22 22 
                   3113: BS
                   3114: 0 SI
                   3115: 10 /Helvetica-Bold AF
                   3116: 30044 4329 MT
                   3117: (22)SH
                   3118: /Helvetica SF
                   3119: 7200 7929 MT
                   3120: (a mouse cursor to be)
                   3121: 20 W( used for the duration of the grab, and a window to be used as the event window.  A)19 W
                   3122: 7200 9355 MT
                   3123: (manager specifies the root window as the event window when grabbing)
                   3124: 353 W( buttons; with the event)354 W
                   3125: 7200 10781 MT
                   3126: (propagation semantics described in Section 8, the grabbed events)
                   3127: 167 W( contain not only the global mouse)166 W
                   3128: 7200 12207 MT
                   3129: (coordinates, but)
                   3130: 140 W( also the top-level application window \050if any\051 containing the mouse.  This is sufficient)141 W
                   3131: 7200 13633 MT
                   3132: (information to manipulate top-level windows.)SH
                   3133: 8312 16200 MT
                   3134: (Using this button-grab mechanism, several different management interfaces)
                   3135: 51 W( have been built, including)50 W
                   3136: 7200 17626 MT
                   3137: (a "programmable" interface)
                   3138: 18 W( [5])
                   3139: SH( allowing the user to assign individual commands)
                   3140: 18 W( or user-defined menus of)19 W
                   3141: 7200 19052 MT
                   3142: (commands to any number of button/modifier combinations.)
                   3143: 235 W( For)
                   3144: 746 W( example, a button click \050press and)234 W
                   3145: 7200 20478 MT
                   3146: (release without intervening motion\051 might be interpreted as a)
                   3147: 52 W( command to raise or lower a window, or to)53 W
                   3148: 7200 21904 MT
                   3149: (attach the keyboard; a press/motion/release sequence might be interpreted as a command to)
                   3150: 147 W( move a)146 W
                   3151: 7200 23330 MT
                   3152: (window to a new position; or a)
                   3153: 2 W( button press might cause a menu to pop up, with the selection indicated by)3 W
                   3154: 7200 24756 MT
                   3155: (the mouse position at the release of the button.)
                   3156: 90 W( By)
                   3157: 456 W( allowing both specific commands and menus to be)89 W
                   3158: 7200 26182 MT
                   3159: (bound to buttons, a range of interfaces can be constructed to satisfy both "expert" and "novice" users.)SH
                   3160: 8312 28749 MT
                   3161: (Another form of manager simply)
                   3162: 58 W( displays a static menu bar along the top of the screen, with items for)59 W
                   3163: 7200 30175 MT
                   3164: (such operations as moving a window and attaching the keyboard.  The menu)
                   3165: 33 W( is used in combination with)32 W
                   3166: 7200 31601 MT
                   3167: (a mouse-grab primitive, with which a client can unilaterally grab the)
                   3168: 226 W( mouse and then later explicitly)227 W
                   3169: 7200 33027 MT
                   3170: (release it; during such a mouse-grab, events are redirected to the grabbing client, just as for button-grabs.)SH
                   3171: 7200 34453 MT
                   3172: (When the user clicks)
                   3173: 8 W( on a menu bar item with any button, the manager unilaterally grabs the mouse.  The)9 W
                   3174: 7200 35879 MT
                   3175: (user then uses the mouse to)
                   3176: 44 W( execute the specific command.  For example, having clicked on the "move")43 W
                   3177: 7200 37305 MT
                   3178: (item, the user indicates)
                   3179: 64 W( the window to move by placing the mouse in the window and pressing a button,)65 W
                   3180: 7200 38731 MT
                   3181: (then indicates the new position)
                   3182: 209 W( by moving the mouse and releasing the button.  The manager then)208 W
                   3183: 7200 40157 MT
                   3184: (releases the mouse.)SH
                   3185: 11 /Helvetica-Bold AF
                   3186: 7200 43839 MT
                   3187: (9.2. Icons)SH
                   3188: 10 /Helvetica AF
                   3189: 8312 45265 MT
                   3190: (One important "resizing" operation performed by a window manager is transforming)
                   3191: 116 W( a window into a)117 W
                   3192: 7200 46691 MT
                   3193: (small icon and back again.  In X, icons are merely windows.  Transforming a window into an icon)
                   3194: 53 W( simply)52 W
                   3195: 7200 48117 MT
                   3196: (involves unmapping the window and mapping its associated icon.  The association between a)
                   3197: 131 W( window)132 W
                   3198: 7200 49543 MT
                   3199: (and its icon is maintained in the server, rather than)
                   3200: 19 W( the window manager, and either the application or the)18 W
                   3201: 7200 50969 MT
                   3202: (manager can provide the icon.  In this way, the manager can provide a default icon form)
                   3203: 35 W( for most clients,)36 W
                   3204: 7200 52395 MT
                   3205: (but clients can provide)
                   3206: 1 W( their own if desired, possibly with dynamic rather than static contents.  The client is)SH
                   3207: 7200 53821 MT
                   3208: (still insulated from management policy, even if it)
                   3209: 215 W( provides the icon:  the manager is responsible for)216 W
                   3210: 7200 55247 MT
                   3211: (positioning, mapping, and unmapping the icon, and the client is responsible only for displaying the)254 W
                   3212: 7200 56673 MT
                   3213: (contents.)SH
                   3214: 8312 59240 MT
                   3215: (The icon state is maintained in the server not only to allow clients to)
                   3216: 8 W( provide icons, but to avoid the loss)9 W
                   3217: 7200 60666 MT
                   3218: (of state if the window manager should terminate abnormally.  When a window manager terminates, any)78 W
                   3219: 7200 62092 MT
                   3220: (windows it has created are destroyed, including icon windows.  With knowledge of icons,)
                   3221: 66 W( the server can)67 W
                   3222: 7200 63518 MT
                   3223: (detect when an)
                   3224: 101 W( icon is destroyed, and automatically remap the associated client window.  Without this,)100 W
                   3225: 7200 64944 MT
                   3226: (abnormal termination of the window manager would result in "lost" windows.)SH
                   3227: ES
                   3228: %%Page: 23 23 
                   3229: BS
                   3230: 0 SI
                   3231: 10 /Helvetica-Bold AF
                   3232: 30044 4329 MT
                   3233: (23)SH
                   3234: 11 SS 
                   3235: 7200 8002 MT
                   3236: (9.3. Race Conditions)SH
                   3237: 10 /Helvetica AF
                   3238: 8312 9428 MT
                   3239: (There are many race conditions that must be)
                   3240: 68 W( dealt with in input and window management, due to the)69 W
                   3241: 7200 10854 MT
                   3242: (asynchronous nature of event handling.)
                   3243: 223 W( For)
                   3244: 722 W( example, if a manager attempts to grab the mouse in)222 W
                   3245: 7200 12280 MT
                   3246: (response to a press of a button, the mouse-grab request might not reach the server until)
                   3247: 46 W( after the button)47 W
                   3248: 7200 13706 MT
                   3249: (is released,)
                   3250: 42 W( and intervening mouse events would be missed.  Or, if the user clicks on a window to attach)41 W
                   3251: 7200 15132 MT
                   3252: (the keyboard there, and then immediately begins typing, the first few keystrokes)
                   3253: 85 W( might occur before the)86 W
                   3254: 7200 16558 MT
                   3255: (manager actually responds to the)
                   3256: 244 W( click and the server actually moves the keyboard focus.  A final)243 W
                   3257: 7200 17984 MT
                   3258: (example is a simple interface in which clicking on a window lowers it.  Given a stack of three windows,)
                   3259: 3 W( the)4 W
                   3260: 7200 19410 MT
                   3261: (user might rapidly click twice in the same spot,)
                   3262: 30 W( expecting the top two windows to be lowered.  Unless the)29 W
                   3263: 7200 20836 MT
                   3264: (first click is sent to the)
                   3265: 52 W( manager and the resulting request to lower is processed by the server before the)53 W
                   3266: 7200 22262 MT
                   3267: (second click takes place, the event window for the second click)
                   3268: 34 W( will be the same as for the first click, and)33 W
                   3269: 7200 23688 MT
                   3270: (the manager will lower the first window twice.)SH
                   3271: 8312 26255 MT
                   3272: (A work-around for the last example, used by existing managers,)
                   3273: 17 W( is to ignore the event window reported)18 W
                   3274: 7200 27681 MT
                   3275: (in most events.  Instead, the global mouse coordinates reported in the event are used in a follow-up query)3 W
                   3276: 7200 29107 MT
                   3277: (request to determine which top-level window now contains that coordinate.  However, not all)
                   3278: 278 W( race)279 W
                   3279: 7200 30533 MT
                   3280: (conditions have)
                   3281: 192 W( acceptable solutions within the current X design.  For a general solution, it must be)191 W
                   3282: 7200 31959 MT
                   3283: (possible for the manager to synchronize operations explicitly with event processing)
                   3284: 137 W( in the server.  For)138 W
                   3285: 7200 33385 MT
                   3286: (example, a manager might specify that,)
                   3287: 102 W( at the press of a button, event processing in the server should)101 W
                   3288: 7200 34811 MT
                   3289: (cease until an explicit acknowledgment is received from the manager.)SH
                   3290: 12 /Helvetica-Bold AF
                   3291: 7200 38566 MT
                   3292: (10. Future)SH
                   3293: 10 /Helvetica AF
                   3294: 8312 39992 MT
                   3295: (Based on critiques from numerous universities and commercial)
                   3296: 47 W( firms, a fairly extensive evaluation and)48 W
                   3297: 7200 41418 MT
                   3298: (redesign of the X protocol has been underway since)
                   3299: 48 W( May 1986.  Our desire is to define a "core" protocol)47 W
                   3300: 7200 42844 MT
                   3301: (that can serve as a)
                   3302: 58 W( standard for window system construction over the next several years.  We expect to)59 W
                   3303: 7200 44270 MT
                   3304: (present the rationale for this new design in the very near future, once it has been validated by at least a)61 W
                   3305: 7200 45696 MT
                   3306: (preliminary implementation.  In this section, we highlight the major protocol changes.)SH
                   3307: 11 /Helvetica-Bold AF
                   3308: 7200 49378 MT
                   3309: (10.1. Resource Allocation)SH
                   3310: 10 /Helvetica AF
                   3311: 8312 50804 MT
                   3312: (Since the server is responsible)
                   3313: 21 W( for assigning identifiers to resources, each resource allocation currently)22 W
                   3314: 7200 52230 MT
                   3315: (requires a round-trip time to perform.  For applications that allocate many resources, this causes a)230 W
                   3316: 7200 53656 MT
                   3317: (considerable start-up delay.  For example, a multi-pane menu)
                   3318: 238 W( might consist of dozens of windows,)239 W
                   3319: 7200 55082 MT
                   3320: (numerous fonts, and several different mouse cursors, leading to a delay of one second or longer.)SH
                   3321: 8312 57649 MT
                   3322: (In retrospect, this is the most significant)
                   3323: 249 W( defect in the design of X. To get around these delays,)248 W
                   3324: 7200 59075 MT
                   3325: (programming interfaces have been augmented to provide "batch mode" operations.)
                   3326: 52 W( If)
                   3327: 384 W( several resources)53 W
                   3328: 7200 60501 MT
                   3329: (must be created, but there are no inter-dependencies among the allocation)
                   3330: 78 W( requests, all of the requests)77 W
                   3331: 7200 61927 MT
                   3332: (are sent in a batch, and then all of the replies are received.  This effectively reduces the delay to a)
                   3333: 29 W( single)30 W
                   3334: 7200 63353 MT
                   3335: (round-trip time.)SH
                   3336: 8312 65920 MT
                   3337: (A better solution)
                   3338: 14 W( to this problem is to make clients generate the identifiers.  When the client establishes)13 W
                   3339: 7200 67346 MT
                   3340: (a connection to the server, it is given a specific subrange from which it can allocate.)
                   3341: 117 W( This)
                   3342: 513 W( change will)118 W
                   3343: 7200 68772 MT
                   3344: (significantly improve start-up times without affecting applications, as identifiers can)
                   3345: 107 W( be generated inside)106 W
                   3346: 7200 70198 MT
                   3347: (low-level libraries without changing programming interfaces.)SH
                   3348: ES
                   3349: %%Page: 24 24 
                   3350: BS
                   3351: 0 SI
                   3352: 10 /Helvetica-Bold AF
                   3353: 30044 4329 MT
                   3354: (24)SH
                   3355: 11 SS 
                   3356: 7200 8002 MT
                   3357: (10.2. Transparent Windows)SH
                   3358: 10 /Helvetica AF
                   3359: 8312 9428 MT
                   3360: (One use of transparent windows is)
                   3361: 207 W( as clipping regions.  However, they are unsatisfactory for this)208 W
                   3362: 7200 10854 MT
                   3363: (purpose because every coordinate in a graphics request must be translated by the)
                   3364: 74 W( client from the "real")73 W
                   3365: 7200 12280 MT
                   3366: (window's origin to the transparent window's origin.  A better approach to clipping)
                   3367: 191 W( regions is to allow)192 W
                   3368: 7200 13706 MT
                   3369: (clients to create clipping regions and attach them to all graphics requests.  As noted)
                   3370: 170 W( in Section 6, X)169 W
                   3371: 7200 15132 MT
                   3372: (currently allows a clipping region in the form of a bitmap to be attached to)
                   3373: 182 W( a few graphics requests.)183 W
                   3374: 7200 16558 MT
                   3375: (Allowing a clipping region, specified either as)
                   3376: 223 W( a bitmap or a list of rectangles, to be attached to all)222 W
                   3377: 7200 17984 MT
                   3378: (graphics requests provides a more uniform mechanism.)SH
                   3379: 8312 20551 MT
                   3380: (The major use of transparent windows)
                   3381: 173 W( to date is actually as inexpensive opaque windows.  In the)174 W
                   3382: 7200 21977 MT
                   3383: (current server implementation, transparent windows can)
                   3384: 107 W( be created and transformed significantly faster)106 W
                   3385: 7200 23403 MT
                   3386: (than opaque windows.  Because of this, transparent windows)
                   3387: 190 W( are often used when opaque windows)191 W
                   3388: 7200 24829 MT
                   3389: (would otherwise be adequate.  We believe a new implementation of)
                   3390: 334 W( the server will improve the)333 W
                   3391: 7200 26255 MT
                   3392: (performance of opaque windows to the point that this will no longer be necessary.)SH
                   3393: 8312 28822 MT
                   3394: (With explicit clipping)
                   3395: 240 W( regions added for graphics, and the performance advantages of transparent)241 W
                   3396: 7200 30248 MT
                   3397: (windows reduced, the only)
                   3398: 271 W( remaining use of transparent windows is for input \050and cursor\051 control.)270 W
                   3399: 7200 31674 MT
                   3400: (Various applications)
                   3401: 89 W( want relatively fine-grained input control, and such control must not affect graphics)90 W
                   3402: 7200 33100 MT
                   3403: (output. Close)
                   3404: 294 W( control of cursor images and mouse motion events seems)
                   3405: 8 W( particularly important.  However,)7 W
                   3406: 7200 34526 MT
                   3407: (the vast majority of the time control naturally)
                   3408: 16 W( is associated with normal window boundaries, so it would be)17 W
                   3409: 7200 35952 MT
                   3410: (unwise to divorce input control completely from windows.  As such, the new protocol provides)
                   3411: 16 W( "input-only")15 W
                   3412: 7200 37378 MT
                   3413: (windows, which act like normal windows for the purposes of input and cursor control,)
                   3414: 13 W( but which cannot be)14 W
                   3415: 7200 38804 MT
                   3416: (used as a)
                   3417: 50 W( source or destination in graphics requests, and which are completely invisible as far as output)49 W
                   3418: 7200 40230 MT
                   3419: (is concerned.)SH
                   3420: 11 /Helvetica-Bold AF
                   3421: 7200 43912 MT
                   3422: (10.3. Color)SH
                   3423: 10 /Helvetica AF
                   3424: 8312 45338 MT
                   3425: (X originally was not designed to deal with direct-color displays.)
                   3426: 155 W( Direct-color)
                   3427: 589 W( displays typically have)156 W
                   3428: 7200 46764 MT
                   3429: (between 12)
                   3430: 75 W( and 36 bits per pixel; the pixel value consists of three subfields, which are used as indexes)74 W
                   3431: 7200 48190 MT
                   3432: (into three independent color maps: one for red intensities, one for green, and one for blue.)
                   3433: 43 W( Some)
                   3434: 365 W( direct-)44 W
                   3435: 7200 49616 MT
                   3436: (color displays also have a fourth subfield, sometimes referred)
                   3437: 200 W( to as "z-channel" information, used to)199 W
                   3438: 7200 51042 MT
                   3439: (control attributes such as blending or chroma keying.  We now understand how to incorporate direct-color)15 W
                   3440: 7200 52468 MT
                   3441: (displays without z-channel information into X, in such a way that the)
                   3442: 30 W( differences between direct-color and)29 W
                   3443: 7200 53894 MT
                   3444: (pseudo-color color maps need not be apparent to the)
                   3445: 91 W( application, yet still allowing all of the usual color)92 W
                   3446: 7200 55320 MT
                   3447: (map tricks to played.)SH
                   3448: 8312 57887 MT
                   3449: (At present)
                   3450: 122 W( there is only one color map for all applications, and color applications fail when this map)121 W
                   3451: 7200 59313 MT
                   3452: (gets full.  Although dozens of applications typically)
                   3453: 55 W( can be run under X within a single 8-bit pseudo-color)56 W
                   3454: 7200 60739 MT
                   3455: (map, a single map is clearly unacceptable when dealing with small color maps, or)
                   3456: 334 W( with multiple)333 W
                   3457: 7200 62165 MT
                   3458: (applications \050e.g., CAD tools\051 that need large portions of)
                   3459: 212 W( the color map.  The solution is to support)213 W
                   3460: 7200 63591 MT
                   3461: (multiple virtual color maps,)
                   3462: 291 W( still permitting applications to coexist within any map, but allowing the)290 W
                   3463: 7200 65017 MT
                   3464: (possibility that)
                   3465: 149 W( not all applications show true color simultaneously.  This also matches next-generation)150 W
                   3466: 7200 66443 MT
                   3467: (displays, which actually support multiple color maps in hardware [37].)SH
                   3468: ES
                   3469: %%Page: 25 25 
                   3470: BS
                   3471: 0 SI
                   3472: 10 /Helvetica-Bold AF
                   3473: 30044 4329 MT
                   3474: (25)SH
                   3475: 11 SS 
                   3476: 7200 8002 MT
                   3477: (10.4. Graphics)SH
                   3478: 10 /Helvetica AF
                   3479: 8312 9428 MT
                   3480: (Perhaps the biggest mistake in the graphics area was failing to support)
                   3481: 256 W( fonts with kerning \050side)255 W
                   3482: 7200 10854 MT
                   3483: (bearings\051. For)
                   3484: 428 W( example,)
                   3485: 75 W( a relatively complete emulation of the Andrew programming interface was built)76 W
                   3486: 7200 12280 MT
                   3487: (for X, but Andrew applications depend heavily)
                   3488: 66 W( on kerned fonts.  There are other deficiencies that will be)65 W
                   3489: 7200 13706 MT
                   3490: (corrected. For)
                   3491: 354 W( example, large glyph-sets \050e.g., Japanese\051 will be)
                   3492: 38 W( supported, as well as stippling \050using a)39 W
                   3493: 7200 15132 MT
                   3494: (clip mask constructed by tiling a region with a bitmap\051.  The notions of line width, join style, and)
                   3495: 28 W( end style)27 W
                   3496: 7200 16558 MT
                   3497: (found in PostScript [22] are usually preferred to brush shapes for line drawing, and will be supported.)SH
                   3498: 8312 19125 MT
                   3499: (In an attempt to support a wide range of devices, the exact path followed for lines and filled shapes)111 W
                   3500: 7200 20551 MT
                   3501: (was originally left undefined in X \050the class of curve was not even specified\051.)
                   3502: 190 W( Different)
                   3503: 656 W( devices use)189 W
                   3504: 7200 21977 MT
                   3505: (slightly different algorithms to draw straight)
                   3506: 144 W( lines, and it seemed better to have high performance with)145 W
                   3507: 7200 23403 MT
                   3508: (minor variation than to have uniformity with poor performance.  Relatively few devices support)
                   3509: 187 W( curve)186 W
                   3510: 7200 24829 MT
                   3511: (drawing in hardware, but some support it in firmware, and again)
                   3512: 135 W( performance seemed more important)136 W
                   3513: 7200 26255 MT
                   3514: (than accuracy.)
                   3515: 116 W( In)
                   3516: 509 W( retrospect, however, allowing such device dependent behavior was a poor decision.)115 W
                   3517: 7200 27681 MT
                   3518: (The vast majority of applications draw lines aligned on an axis,)
                   3519: 15 W( and speed and precision are not an issue.)16 W
                   3520: 7200 29107 MT
                   3521: (The applications that do)
                   3522: 1 W( require complex shapes also require predictable results, so precise specifications)SH
                   3523: 7200 30533 MT
                   3524: (are important.)SH
                   3525: 8312 33100 MT
                   3526: (A notable)
                   3527: 30 W( feature missing in X is the ability to perform graphics operations off screen.  The reasons for)31 W
                   3528: 7200 34526 MT
                   3529: (this are)
                   3530: 67 W( essentially the same as those presented when discussing exposures in Section 7.  In particular,)66 W
                   3531: 7200 35952 MT
                   3532: (not all graphics co-processors can operate)
                   3533: 202 W( on host memory, and emulating such processors can be)203 W
                   3534: 7200 37378 MT
                   3535: (expensive. However,)
                   3536: 350 W( application builders have demanded this capability, and)
                   3537: 36 W( the demand appears to be)35 W
                   3538: 7200 38804 MT
                   3539: (sufficient leverage to convince server implementors to provide the capability.  Off-screen graphics will be)48 W
                   3540: 7200 40230 MT
                   3541: (possible in the new protocol, although the amount)
                   3542: 458 W( of off-screen memory and its performance)457 W
                   3543: 7200 41656 MT
                   3544: (characteristics may vary widely.  In addition, the protocol is being extended to allow the manipulation of)80 W
                   3545: 7200 43082 MT
                   3546: (both images and windows of varying depths.  For example,)
                   3547: 59 W( a server might support depths of 1, 4, 8, 12,)58 W
                   3548: 7200 44508 MT
                   3549: (and 24 bits.  This)
                   3550: 76 W( allows imaging applications to transmit data more compactly, allows for more efficient)77 W
                   3551: 7200 45934 MT
                   3552: (memory utilization in the server, and provides a match with next-generation display hardware.)SH
                   3553: 8312 48501 MT
                   3554: (A common)
                   3555: 67 W( debate in graphics systems is whether and where to have state.  Should parameters such)66 W
                   3556: 7200 49927 MT
                   3557: (as logic function, plane mask, source pixel value or tile, tiling)
                   3558: 12 W( origin, font, line width and style, and clipping)13 W
                   3559: 7200 51353 MT
                   3560: (region be explicit in every request or collected into a)
                   3561: 24 W( state object?  The current X protocol is stateless, for)23 W
                   3562: 7200 52779 MT
                   3563: (the following reasons:  both state and stateless)
                   3564: 68 W( programming interfaces can be built easily on top of the)69 W
                   3565: 7200 54205 MT
                   3566: (protocol; the currently supported graphics requests have just few enough parameters that they can)
                   3567: 131 W( be)130 W
                   3568: 7200 55631 MT
                   3569: (represented compactly; and the initial)
                   3570: 55 W( set of displays we were interested in \050and the implementations we)56 W
                   3571: 7200 57057 MT
                   3572: (had in mind for them\051 would not benefit from the addition of)
                   3573: 173 W( state.  However, we now believe that a)172 W
                   3574: 7200 58483 MT
                   3575: (state-based protocol is generally superior, as it handles complex graphics gracefully and allows)394 W
                   3576: 7200 59909 MT
                   3577: (significantly faster implementations on some displays.)SH
                   3578: 11 /Helvetica-Bold AF
                   3579: 7200 63591 MT
                   3580: (10.5. Management)SH
                   3581: 10 /Helvetica AF
                   3582: 8312 65017 MT
                   3583: (An obvious interface style presently not)
                   3584: 348 W( supported in X is the ability to use the keyboard for)347 W
                   3585: 7200 66443 MT
                   3586: (management commands.  To allow this, a key-grab mechanism, akin to the button-grab)
                   3587: 214 W( mechanism)215 W
                   3588: 7200 67869 MT
                   3589: (described in Section 9, will be provided.  To)
                   3590: 14 W( allow such styles as using the first button click in a window to)13 W
                   3591: 7200 69295 MT
                   3592: (attach the keyboard, both button-grabs and key-grabs have been extended to apply to)
                   3593: 210 W( specific sub-)211 W
                   3594: 7200 70721 MT
                   3595: (hierarchies, rather than always to the entire screen.  To handle the kinds of race conditions)
                   3596: 59 W( described in)58 W
                   3597: ES
                   3598: %%Page: 26 26 
                   3599: BS
                   3600: 0 SI
                   3601: 10 /Helvetica-Bold AF
                   3602: 30044 4329 MT
                   3603: (26)SH
                   3604: /Helvetica SF
                   3605: 7200 7929 MT
                   3606: (Section 9, a general event synchronization mechanism has been incorporated into the grab mechanisms.)SH
                   3607: 8312 10496 MT
                   3608: (To support automatic window management, a manager must be able to intercept certain)
                   3609: 47 W( management)48 W
                   3610: 7200 11922 MT
                   3611: (requests from clients \050such as mapping or moving a window\051 before they are executed)
                   3612: 20 W( by the server, and)19 W
                   3613: 7200 13348 MT
                   3614: (to be notified about others \050such as)
                   3615: 130 W( unmapping a window\051 after they are executed.  In addition, some)131 W
                   3616: 7200 14774 MT
                   3617: (managers want to provide uniform title bars and border decorations)
                   3618: 157 W( automatically.  To allow this, it is)156 W
                   3619: 7200 16200 MT
                   3620: (useful to be able to "splice" hierarchies:  to move a window from one parent to another.  To allow input)84 W
                   3621: 7200 17626 MT
                   3622: (managers and window managers to be implemented as separate applications, the ability)
                   3623: 197 W( for multiple)196 W
                   3624: 7200 19052 MT
                   3625: (clients to select events on the same)
                   3626: 58 W( window is being added.  For example, both a window manager and)59 W
                   3627: 7200 20478 MT
                   3628: (an input manager might be interested in the unmapping or destruction of a window.)SH
                   3629: 11 /Helvetica-Bold AF
                   3630: 7200 24160 MT
                   3631: (10.6. Extensibility)SH
                   3632: 10 /Helvetica AF
                   3633: 8312 25586 MT
                   3634: (The information that input and window managers might desire)
                   3635: 71 W( from applications is quite varied, and it)70 W
                   3636: 7200 27012 MT
                   3637: (would be)
                   3638: 107 W( a mistake to try and define a fixed set.  Similarly, the information paths between applications)108 W
                   3639: 7200 28438 MT
                   3640: (\050e.g., in support of "cut and paste"\051 need to be flexible.  To this end, we are adding a Lisp-ish property)95 W
                   3641: 7200 29864 MT
                   3642: (list [26])
                   3643: SH( mechanism to windows, and the event)
                   3644: 70 W( mechanism is being augmented to provide a simple form)71 W
                   3645: 7200 31290 MT
                   3646: (of inter-client communication.)SH
                   3647: 8312 33857 MT
                   3648: (The new X protocol explicitly continues to avoid certain areas, such as)
                   3649: 56 W( 3-D graphics and anti-aliasing.)55 W
                   3650: 7200 35283 MT
                   3651: (However, a general mechanism has been designed to allow)
                   3652: 17 W( extension libraries to be included in a server.)18 W
                   3653: 7200 36709 MT
                   3654: (The intention is that all servers implement the "core" protocol, but each server can)
                   3655: 205 W( provide arbitrary)204 W
                   3656: 7200 38135 MT
                   3657: (extensions. If)
                   3658: 412 W( an)
                   3659: 67 W( extension becomes widely accepted by the X community, it can be adopted as part of)68 W
                   3660: 7200 39561 MT
                   3661: (the core.  Each extension library is)
                   3662: 84 W( assigned a global name, and an application can query the server at)83 W
                   3663: 7200 40987 MT
                   3664: (run-time to determine if a particular extension is present.)
                   3665: 10 W( Request)
                   3666: 299 W( opcodes and event types are allocated)11 W
                   3667: 7200 42413 MT
                   3668: (dynamically, so that applications need not be modified to execute in each new environment.)SH
                   3669: 12 /Helvetica-Bold AF
                   3670: 7200 46168 MT
                   3671: (11. Summary)SH
                   3672: 10 /Helvetica AF
                   3673: 8312 47594 MT
                   3674: (The X Window System provides high-performance, high-level, device-independent)
                   3675: 373 W( graphics.  A)372 W
                   3676: 7200 49020 MT
                   3677: (hierarchy of resizable, overlapping windows allows a wide variety of application and)
                   3678: 37 W( user interfaces to be)38 W
                   3679: 7200 50446 MT
                   3680: (built easily.  Network-transparent access to the display provides)
                   3681: 287 W( an important degree of functional)286 W
                   3682: 7200 51872 MT
                   3683: (separation, without significantly affecting performance, that is crucial to building applications for a)329 W
                   3684: 7200 53298 MT
                   3685: (distributed environment.  To a reasonable)
                   3686: 287 W( extent, desktop management can be custom tailored to)286 W
                   3687: 7200 54724 MT
                   3688: (individual environments, without modifying the base system and typically without affecting applications.)SH
                   3689: 8312 57291 MT
                   3690: (To date, the X design and implementation effort has focused on the)
                   3691: 10 W( base window system, as described)11 W
                   3692: 7200 58717 MT
                   3693: (in this paper, and in essential applications and programming interfaces.  The design of the)
                   3694: 215 W( network)214 W
                   3695: 7200 60143 MT
                   3696: (protocol, the design and implementation of device-independent layer of server,)
                   3697: 21 W( and the implementation of)22 W
                   3698: 7200 61569 MT
                   3699: (several applications and a prototype window manager,)
                   3700: 91 W( were carried out by the first author.  The design)90 W
                   3701: 7200 62995 MT
                   3702: (and implementation of the C programming interface, the)
                   3703: 205 W( implementation of major portions of several)206 W
                   3704: 7200 64421 MT
                   3705: (applications, and the coordination of efforts within Project Athena and)
                   3706: 156 W( Digital, were carried out by the)155 W
                   3707: 7200 65847 MT
                   3708: (second author.  In addition, many other persons from Project Athena, the Laboratory)
                   3709: 242 W( for Computer)243 W
                   3710: 7200 67273 MT
                   3711: (Science, and institutions outside MIT have contributed software.)SH
                   3712: 8312 69840 MT
                   3713: (Necessary applications)
                   3714: 29 W( such as window managers and VT100 and Tektronics 4014 terminal emulators)28 W
                   3715: 7200 71266 MT
                   3716: (have been created, and numerous existing applications, such as text editors and VLSI layout)
                   3717: 115 W( systems,)116 W
                   3718: ES
                   3719: %%Page: 27 27 
                   3720: BS
                   3721: 0 SI
                   3722: 10 /Helvetica-Bold AF
                   3723: 30044 4329 MT
                   3724: (27)SH
                   3725: /Helvetica SF
                   3726: 7200 7929 MT
                   3727: (have been ported to the X environment.  Although several different menu packages have been)361 W
                   3728: 7200 9355 MT
                   3729: (implemented, we are only now)
                   3730: 78 W( beginning to see a rich library of tools \050scroll bars, frames, panels, more)79 W
                   3731: 7200 10781 MT
                   3732: (menus, etc.\051 to facilitate the)
                   3733: 175 W( rapid construction of high-quality user interfaces.  Tool building is taking)174 W
                   3734: 7200 12207 MT
                   3735: (place at many sites, and several universities are now)
                   3736: 39 W( attempting to unify window systems work with X as)40 W
                   3737: 7200 13633 MT
                   3738: (a base, so that such tools can be shared.)SH
                   3739: 8312 16200 MT
                   3740: (The use of X has grown far beyond anything we had imagined.  Digital has incorporated X into a)179 W
                   3741: 7200 17626 MT
                   3742: (commercial product, and other manufacturers are)
                   3743: 67 W( following suit.  With the appearance of such products,)68 W
                   3744: 7200 19052 MT
                   3745: (and the release of complete X sources on the Berkeley 4.3 Unix distribution tapes, it)
                   3746: 28 W( is no longer feasible)27 W
                   3747: 7200 20478 MT
                   3748: (to track all X use and development.  Existing applications written)
                   3749: 58 W( in C are known to have been ported to)59 W
                   3750: 7200 21904 MT
                   3751: (seven machine architectures of)
                   3752: 271 W( more than twelve manufacturers, and the C server to six machine)270 W
                   3753: 7200 23330 MT
                   3754: (architectures and more than sixteen display architectures.  In most)
                   3755: 24 W( cases the code is running under Unix,)25 W
                   3756: 7200 24756 MT
                   3757: (but other)
                   3758: 138 W( operating systems are also involved.  In addition, relatively complete server implementations)137 W
                   3759: 7200 26182 MT
                   3760: (exist in two)
                   3761: 52 W( Lisp dialects.  Apart from designing the system to be portable, a large part of this success is)53 W
                   3762: 7200 27608 MT
                   3763: (due to MIT's decision to)
                   3764: 164 W( distribute X sources without any licensing restrictions, and the willingness of)163 W
                   3765: 7200 29034 MT
                   3766: (people in both educational and commercial institutions to contribute code without restrictions.)SH
                   3767: /Helvetica-Bold SF
                   3768: 8312 31601 MT
                   3769: (Acknowledgments)SH
                   3770: /Helvetica SF
                   3771: 8312 34168 MT
                   3772: (Our thanks go to the many people who have contributed to the)
                   3773: 89 W( success of X. Particular thanks go to)90 W
                   3774: 7200 35594 MT
                   3775: (those who have made significant contributions to the non-proprietary)
                   3776: 269 W( implementation:  Paul Asente)268 W
                   3777: 7200 37020 MT
                   3778: (\050Stanford University\051, Scott Bates \050Brown University\051, Mike)
                   3779: 130 W( Braca \050Brown\051, Dave Bundy \050Brown\051, Dave)131 W
                   3780: 7200 38446 MT
                   3781: (Carver \050Digital\051, Tony)
                   3782: 141 W( Della Fera \050Digital\051, Mike Gancarz \050Digital\051, James Gosling \050Sun Microsystems\051,)140 W
                   3783: 7200 39872 MT
                   3784: (Doug Mink \050Smithsonian Astrophysical Observatory\051, Bob)
                   3785: 41 W( McNamara \050Digital\051, Ron Newman \050MIT\051, Ram)42 W
                   3786: 7200 41298 MT
                   3787: (Rao \050Digital\051, Dave)
                   3788: 108 W( Rosenthal \050Sun\051, Dan Stone \050Brown\051, Stephen Sutphen \050University of Alberta\051, and)107 W
                   3789: 7200 42724 MT
                   3790: (Mark Vandevoorde \050MIT\051.)SH
                   3791: 8312 45291 MT
                   3792: (Special thanks go to Digital Equipment Corporation.  A redesign)
                   3793: 7 W( of the protocol and a reimplementation)8 W
                   3794: 7200 46717 MT
                   3795: (of the server to deal with)
                   3796: 41 W( color and to increase performance was made possible with funding \050in the form)40 W
                   3797: 7200 48143 MT
                   3798: (of hardware\051 from Digital.  To their credit,)
                   3799: 196 W( all of the resulting device-independent code remained the)197 W
                   3800: 7200 49569 MT
                   3801: (property of MIT.)SH
                   3802: ES
                   3803: %%Page: 28 28 
                   3804: BS
                   3805: 0 SI
                   3806: 10 /Helvetica-Bold AF
                   3807: 30044 4329 MT
                   3808: (28)SH
                   3809: 13 SS 
                   3810: 27095 8148 MT
                   3811: (References)SH
                   3812: 10 SS 
                   3813: 7200 10681 MT
                   3814: (1.)SH
                   3815: /Helvetica-Oblique SF
                   3816: 8590 XM
                   3817: (???)SH
                   3818: /Helvetica SF
                   3819: 11092 XM
                   3820: (Apollo, ???)SH
                   3821: /Helvetica-Bold SF
                   3822: 7200 12553 MT
                   3823: (2.)SH
                   3824: /Helvetica SF
                   3825: 8590 XM
                   3826: (Asente, P.  W Reference Manual.  Stanford University, 1984. internal document.)SH
                   3827: /Helvetica-Bold SF
                   3828: 7200 14425 MT
                   3829: (3.)SH
                   3830: /Helvetica SF
                   3831: 8590 XM
                   3832: (Balkovich, E., Lerman, S., and Parmelee, R.  "Computing in Higher Education: The Athena)SH
                   3833: 7200 15568 MT
                   3834: (Experience".)SH
                   3835: /Helvetica-Oblique SF
                   3836: 13391 XM
                   3837: (Communications of the ACM 28)SH
                   3838: /Helvetica SF
                   3839: (, 11 \050Nov. 1985\051.)SH
                   3840: /Helvetica-Bold SF
                   3841: 7200 17440 MT
                   3842: (4.)SH
                   3843: /Helvetica SF
                   3844: 8590 XM
                   3845: (Cheriton, D.  "The V Kernel: A Software Base for Distributed Systems".)SH
                   3846: /Helvetica-Oblique SF
                   3847: 40479 XM
                   3848: (IEEE Software 1)SH
                   3849: /Helvetica SF
                   3850: (, 2 \050April)SH
                   3851: 7200 18583 MT
                   3852: (1984\051.)SH
                   3853: /Helvetica-Bold SF
                   3854: 7200 20455 MT
                   3855: (5.)SH
                   3856: /Helvetica SF
                   3857: 8590 XM
                   3858: (Gancarz, M.  UWM: A User Interface for X Windows.  Summer Conference Proceedings, Atlanta,)SH
                   3859: 7200 21598 MT
                   3860: (USENIX Association, 1986.)SH
                   3861: /Helvetica-Bold SF
                   3862: 7200 23470 MT
                   3863: (6.)SH
                   3864: /Helvetica SF
                   3865: 8590 XM
                   3866: (Gettys, J.  Problems Implementing Window Systems in Unix.  Winter Conference Proceedings,)SH
                   3867: 7200 24613 MT
                   3868: (Denver, USENIX Association, 1986.)SH
                   3869: /Helvetica-Bold SF
                   3870: 7200 26485 MT
                   3871: (7.)SH
                   3872: /Helvetica SF
                   3873: 8590 XM
                   3874: (Gosling, J. and Rosenthal, D.  A Window-Manager for Bitmapped Displays and Unix.  In)SH
                   3875: /Helvetica-Oblique SF
                   3876: 47661 XM
                   3877: (Methodology)SH
                   3878: 7200 27628 MT
                   3879: (of Window-Managers)SH
                   3880: /Helvetica SF
                   3881: (, F. R. A. Hopgood et al, Eds., Springer-Verlag, 1986.)SH
                   3882: /Helvetica-Bold SF
                   3883: 7200 29500 MT
                   3884: (8.)SH
                   3885: /Helvetica SF
                   3886: 8590 XM
                   3887: (Hawley, M. J., and Leffler, S. J.  Windows for Unix at Lucasfilm.  Summer Conference Proceedings,)SH
                   3888: 7200 30643 MT
                   3889: (Portland, USENIX Association, 1985.)SH
                   3890: /Helvetica-Bold SF
                   3891: 7200 32515 MT
                   3892: (9.)SH
                   3893: /Helvetica-Oblique SF
                   3894: 8590 XM
                   3895: (Information Processing: Graphical Kernel System \050GKS\051 - Functional Description.)SH
                   3896: /Helvetica SF
                   3897: 45380 XM
                   3898: (DIS 7942,)SH
                   3899: 7200 33658 MT
                   3900: (International Standards Organisation, 1982.)SH
                   3901: /Helvetica-Bold SF
                   3902: 7200 35530 MT
                   3903: (10.)SH
                   3904: /Helvetica SF
                   3905: 9146 XM
                   3906: (Lantz, K.A. and Nowicki, W. I.  "Structured Graphics for Distributed Systems".)SH
                   3907: /Helvetica-Oblique SF
                   3908: 43924 XM
                   3909: (ACM Transactions on)SH
                   3910: 7200 36673 MT
                   3911: (Graphics 3)SH
                   3912: /Helvetica SF
                   3913: (, 1 \050Jan. 1984\051.)SH
                   3914: /Helvetica-Bold SF
                   3915: 7200 38545 MT
                   3916: (11.)SH
                   3917: /Helvetica SF
                   3918: 9146 XM
                   3919: (Levy, H.  "VAXstation: A General-Purpose Raster Graphics Architecture".)SH
                   3920: /Helvetica-Oblique SF
                   3921: 42091 XM
                   3922: (ACM Transactions on)SH
                   3923: 7200 39688 MT
                   3924: (Graphics 3)SH
                   3925: /Helvetica SF
                   3926: (, 1 \050Jan. 1984\051.)SH
                   3927: /Helvetica-Bold SF
                   3928: 7200 41560 MT
                   3929: (12.)SH
                   3930: /Helvetica SF
                   3931: 9146 XM
                   3932: (Lipkie, D. E., Evans, S. R., Newlin, J. K., and Weissman, R. L.  "Star Grapics: An Object-Oriented)SH
                   3933: 7200 42703 MT
                   3934: (Implementation".)SH
                   3935: /Helvetica-Oblique SF
                   3936: 15225 XM
                   3937: (Computer Graphics 16)SH
                   3938: /Helvetica SF
                   3939: (, 3 \050July 1982\051.)SH
                   3940: /Helvetica-Bold SF
                   3941: 7200 44575 MT
                   3942: (13.)SH
                   3943: /Helvetica SF
                   3944: 9146 XM
                   3945: (Liskov, B. and Scheifler, R.  "Guardians and Actions: Linquistic Support for Robust, Distributed)SH
                   3946: 7200 45718 MT
                   3947: (Programs".)SH
                   3948: /Helvetica-Oblique SF
                   3949: 12723 XM
                   3950: (ACM Transactions on Programming Languages and Systems 5)SH
                   3951: /Helvetica SF
                   3952: (, 3 \050July 1983\051.)SH
                   3953: /Helvetica-Bold SF
                   3954: 7200 47590 MT
                   3955: (14.)SH
                   3956: /Helvetica-Oblique SF
                   3957: 9146 XM
                   3958: (???)SH
                   3959: /Helvetica SF
                   3960: 11648 XM
                   3961: (MassComp, Inc., ???)SH
                   3962: /Helvetica-Bold SF
                   3963: 7200 49462 MT
                   3964: (15.)SH
                   3965: /Helvetica SF
                   3966: 9146 XM
                   3967: (Moon, D.  Chaosnet.  AI Memo 628, MIT Artificial Intelligence Laboratory, June, 1981.)SH
                   3968: /Helvetica-Bold SF
                   3969: 7200 51334 MT
                   3970: (16.)SH
                   3971: /Helvetica SF
                   3972: 9146 XM
                   3973: (Morris, J., et al.  "Andrew: A Distributed Personal Computing Environment".)SH
                   3974: /Helvetica-Oblique SF
                   3975: 42979 XM
                   3976: (Communications of the)SH
                   3977: 7200 52477 MT
                   3978: (ACM 29)SH
                   3979: /Helvetica SF
                   3980: (, 3 \050March 1986\051.)SH
                   3981: /Helvetica-Bold SF
                   3982: 7200 54349 MT
                   3983: (17.)SH
                   3984: /Helvetica SF
                   3985: 9146 XM
                   3986: (Myers, B.  Issues in Window Management Design and Implementation.  In)SH
                   3987: /Helvetica-Oblique SF
                   3988: 42215 XM
                   3989: (Methodology of)SH
                   3990: 7200 55492 MT
                   3991: (Window-Managers)SH
                   3992: /Helvetica SF
                   3993: (, F. R. A. Hopgood et al, Eds., Springer-Verlag, 1986.)SH
                   3994: /Helvetica-Bold SF
                   3995: 7200 57364 MT
                   3996: (18.)SH
                   3997: /Helvetica SF
                   3998: 9146 XM
                   3999: (Nowicki, W.)SH
                   4000: /Helvetica-Oblique SF
                   4001: 14924 XM
                   4002: (Partitioning of Function in a Distributed Graphics System)SH
                   4003: /Helvetica SF
                   4004: (. Ph.D.)
                   4005: 278 W( Th., Stanford)SH
                   4006: 7200 58507 MT
                   4007: (University, Stanford, CA, 1985.)SH
                   4008: /Helvetica-Bold SF
                   4009: 7200 60379 MT
                   4010: (19.)SH
                   4011: /Helvetica-Oblique SF
                   4012: 9146 XM
                   4013: (???)SH
                   4014: /Helvetica SF
                   4015: 11648 XM
                   4016: (ICL, ???)SH
                   4017: /Helvetica-Bold SF
                   4018: 7200 62251 MT
                   4019: (20.)SH
                   4020: /Helvetica SF
                   4021: 9146 XM
                   4022: (Pike, R.  "The Blit: A Multiplexed Graphics Terminal".)SH
                   4023: /Helvetica-Oblique SF
                   4024: 33141 XM
                   4025: (AT&T Bell Laboratories Technical Journal 63)SH
                   4026: /Helvetica SF
                   4027: (,)SH
                   4028: 7200 63394 MT
                   4029: (8 \050Oct. 1984\051.)SH
                   4030: /Helvetica-Bold SF
                   4031: 7200 65266 MT
                   4032: (21.)SH
                   4033: /Helvetica SF
                   4034: 9146 XM
                   4035: (Postel, J.  Transmission Control Protocol.  RFC 793, USC/Information Sciences Institute, Sept.,)SH
                   4036: 7200 66409 MT
                   4037: (1981.)SH
                   4038: /Helvetica-Bold SF
                   4039: 7200 68281 MT
                   4040: (22.)SH
                   4041: /Helvetica SF
                   4042: 9146 XM
                   4043: (Adobe Systems Inc..)SH
                   4044: /Helvetica-Oblique SF
                   4045: 18873 XM
                   4046: (PostScript Lanuage Reference Manual.)SH
                   4047: /Helvetica SF
                   4048: 36882 XM
                   4049: (Addison-Wesley, 1985.)SH
                   4050: ES
                   4051: %%Page: 29 29 
                   4052: BS
                   4053: 0 SI
                   4054: 10 /Helvetica-Bold AF
                   4055: 30044 4329 MT
                   4056: (29)SH
                   4057: 7200 7929 MT
                   4058: (23.)SH
                   4059: /Helvetica SF
                   4060: 9146 XM
                   4061: (Rhodes, R., Haeberli, P, and Hickman, K.  Mex - A Window Manager for the IRIS.  Summer)SH
                   4062: 7200 9072 MT
                   4063: (Conference Proceedings, Portland, USENIX Association, 1985.)SH
                   4064: /Helvetica-Bold SF
                   4065: 7200 10944 MT
                   4066: (24.)SH
                   4067: /Helvetica SF
                   4068: 9146 XM
                   4069: (Smith, D. C., et al.  The Star User Interface: An Overview.  Proceedings of the National Computer)SH
                   4070: 7200 12087 MT
                   4071: (Conference, Houston, June, 1982.)SH
                   4072: /Helvetica-Bold SF
                   4073: 7200 13959 MT
                   4074: (25.)SH
                   4075: /Helvetica SF
                   4076: 9146 XM
                   4077: (Stallman, R., Moon, D., and Weinreb, D.  Lisp Machine Window System Manual.  MIT Artificial)SH
                   4078: 7200 15102 MT
                   4079: (Intelligence Laboratory, Aug., 1983.)SH
                   4080: /Helvetica-Bold SF
                   4081: 7200 16974 MT
                   4082: (26.)SH
                   4083: /Helvetica SF
                   4084: 9146 XM
                   4085: (Steele, G. L..)SH
                   4086: /Helvetica-Oblique SF
                   4087: 15539 XM
                   4088: (Common Lisp: The Language.)SH
                   4089: /Helvetica SF
                   4090: 29546 XM
                   4091: (Digital Press, 1984.)SH
                   4092: /Helvetica-Bold SF
                   4093: 7200 18846 MT
                   4094: (27.)SH
                   4095: /Helvetica-Oblique SF
                   4096: 9146 XM
                   4097: (NeWS Preliminary Technical Overview.)SH
                   4098: /Helvetica SF
                   4099: 27427 XM
                   4100: (Sun Microsystems, Inc., 1986.)SH
                   4101: /Helvetica-Bold SF
                   4102: 7200 20718 MT
                   4103: (28.)SH
                   4104: /Helvetica-Oblique SF
                   4105: 9146 XM
                   4106: (Programmer's Reference Manual for SunWindows.)SH
                   4107: /Helvetica SF
                   4108: 32542 XM
                   4109: (Sun Microsystems, Inc., 1985.)SH
                   4110: /Helvetica-Bold SF
                   4111: 7200 22590 MT
                   4112: (29.)SH
                   4113: /Helvetica SF
                   4114: 9146 XM
                   4115: (Sweet, R.  "Mesa Programming Environment".)SH
                   4116: /Helvetica-Oblique SF
                   4117: 30196 XM
                   4118: (ACM SIGPLAN Notices 20)SH
                   4119: /Helvetica SF
                   4120: (, 7 \050July 1985\051.)SH
                   4121: /Helvetica-Bold SF
                   4122: 7200 24462 MT
                   4123: (30.)SH
                   4124: /Helvetica SF
                   4125: 9146 XM
                   4126: (Sweetman, D.  A Modular Window System for Unix.  In)SH
                   4127: /Helvetica-Oblique SF
                   4128: 33654 XM
                   4129: (Methodology of Window-Managers)SH
                   4130: /Helvetica SF
                   4131: (,)SH
                   4132: 7200 25605 MT
                   4133: (F. R. A. Hopgood et al, Eds., Springer-Verlag, 1986.)SH
                   4134: /Helvetica-Bold SF
                   4135: 7200 27477 MT
                   4136: (31.)SH
                   4137: /Helvetica-Oblique SF
                   4138: 9146 XM
                   4139: (Programming the User Interface.)SH
                   4140: /Helvetica SF
                   4141: 24485 XM
                   4142: (Symbolics, Inc., 1986.)SH
                   4143: /Helvetica-Bold SF
                   4144: 7200 29349 MT
                   4145: (32.)SH
                   4146: /Helvetica SF
                   4147: 9146 XM
                   4148: (Teitelman, W.  The Cedar Programming Environment: A Midterm Report and Examination.  CSL)SH
                   4149: 7200 30492 MT
                   4150: (83-11, Xerox PARC, June, 1984.)SH
                   4151: /Helvetica-Bold SF
                   4152: 7200 32364 MT
                   4153: (33.)SH
                   4154: /Helvetica SF
                   4155: 9146 XM
                   4156: (Trammel, R. D.  A Capability Based Hierarchic Architecture for Unix Window Management.  Summer)SH
                   4157: 7200 33507 MT
                   4158: (Conference Proceedings, Portland, USENIX Association, 1985.)SH
                   4159: /Helvetica-Bold SF
                   4160: 7200 35379 MT
                   4161: (34.)SH
                   4162: /Helvetica-Oblique SF
                   4163: 9146 XM
                   4164: (VCB02 Video Subsystem Technical Manual.)SH
                   4165: /Helvetica SF
                   4166: 29599 XM
                   4167: (Educational Services, Digital Equipment Corporation,)SH
                   4168: 7200 36522 MT
                   4169: (1986. Order)
                   4170: 278 W( Number AZ-GLGAB-MN.)SH
                   4171: /Helvetica-Bold SF
                   4172: 7200 38394 MT
                   4173: (35.)SH
                   4174: /Helvetica SF
                   4175: 9146 XM
                   4176: (Warnock, J., and Wyatt, D. K.  "A Device Independent Graphics Imaging Model for Use with Raster)SH
                   4177: 7200 39537 MT
                   4178: (Devices".)SH
                   4179: /Helvetica-Oblique SF
                   4180: 11945 XM
                   4181: (Computer Graphics 16)SH
                   4182: /Helvetica SF
                   4183: (, 3 \0501982\051.)SH
                   4184: /Helvetica-Bold SF
                   4185: 7200 41409 MT
                   4186: (36.)SH
                   4187: /Helvetica SF
                   4188: 9146 XM
                   4189: (Wecker, S.  "DNA: The Digital Network Architecture".)SH
                   4190: /Helvetica-Oblique SF
                   4191: 33140 XM
                   4192: (IEEE Transactions on Communications)SH
                   4193: 7200 42552 MT
                   4194: (CIM-28)SH
                   4195: /Helvetica SF
                   4196: (, 4 \050April 1980\051.)SH
                   4197: /Helvetica-Bold SF
                   4198: 7200 44424 MT
                   4199: (37.)SH
                   4200: /Helvetica SF
                   4201: 9146 XM
                   4202: (Wilkes, A. J., et. al.  "The Rainbow Workstation".)SH
                   4203: /Helvetica-Oblique SF
                   4204: 31197 XM
                   4205: (The Computer Journal 27)SH
                   4206: /Helvetica SF
                   4207: (, 2 \050May 1984\051.)SH
                   4208: ES
                   4209: %%Page: i 30 
                   4210: BS
                   4211: 0 SI
                   4212: 10 /Helvetica-Bold AF
                   4213: 30461 4329 MT
                   4214: (i)SH
                   4215: 12 SS 
                   4216: 25533 8075 MT
                   4217: (Table of Contents)SH
                   4218: 11 SS 
                   4219: 9036 9319 MT
                   4220: (1. Introduction)SH
                   4221: 53388 XM
                   4222: (2)SH
                   4223: 9036 10563 MT
                   4224: (2. Requirements)SH
                   4225: 53388 XM
                   4226: (3)SH
                   4227: 9036 11807 MT
                   4228: (3. System Model)SH
                   4229: 53388 XM
                   4230: (6)SH
                   4231: 10 SS 
                   4232: 11092 12956 MT
                   4233: (3.1. Network Considerations)SH
                   4234: 53444 XM
                   4235: (8)SH
                   4236: 11092 14105 MT
                   4237: (3.2. Resources)SH
                   4238: 53444 XM
                   4239: (9)SH
                   4240: 11 SS 
                   4241: 9036 15349 MT
                   4242: (4. Window Hierarchy)SH
                   4243: 52776 XM
                   4244: (10)SH
                   4245: 9036 16593 MT
                   4246: (5. Color)SH
                   4247: 52776 XM
                   4248: (12)SH
                   4249: 9036 17837 MT
                   4250: (6. Graphics and Text)SH
                   4251: 52776 XM
                   4252: (13)SH
                   4253: 10 SS 
                   4254: 11092 18986 MT
                   4255: (6.1. Images)SH
                   4256: 52888 XM
                   4257: (14)SH
                   4258: 11092 20135 MT
                   4259: (6.2. Graphics)SH
                   4260: 52888 XM
                   4261: (15)SH
                   4262: 11092 21284 MT
                   4263: (6.3. Text)SH
                   4264: 52888 XM
                   4265: (15)SH
                   4266: 11 SS 
                   4267: 9036 22528 MT
                   4268: (7. Exposures)SH
                   4269: 52776 XM
                   4270: (16)SH
                   4271: 9036 23772 MT
                   4272: (8. Input)SH
                   4273: 52776 XM
                   4274: (18)SH
                   4275: 10 SS 
                   4276: 11092 24921 MT
                   4277: (8.1. The Keyboard)SH
                   4278: 52888 XM
                   4279: (19)SH
                   4280: 11092 26070 MT
                   4281: (8.2. The Mouse)SH
                   4282: 52888 XM
                   4283: (20)SH
                   4284: 11 SS 
                   4285: 9036 27314 MT
                   4286: (9. Input and Window Management)SH
                   4287: 52776 XM
                   4288: (21)SH
                   4289: 10 SS 
                   4290: 11092 28463 MT
                   4291: (9.1. Mouse-Driven Management)SH
                   4292: 52888 XM
                   4293: (21)SH
                   4294: 11092 29612 MT
                   4295: (9.2. Icons)SH
                   4296: 52888 XM
                   4297: (22)SH
                   4298: 11092 30761 MT
                   4299: (9.3. Race Conditions)SH
                   4300: 52888 XM
                   4301: (23)SH
                   4302: 11 SS 
                   4303: 9036 32005 MT
                   4304: (10. Future)SH
                   4305: 52776 XM
                   4306: (23)SH
                   4307: 10 SS 
                   4308: 11092 33154 MT
                   4309: (10.1. Resource Allocation)SH
                   4310: 52888 XM
                   4311: (23)SH
                   4312: 11092 34303 MT
                   4313: (10.2. Transparent Windows)SH
                   4314: 52888 XM
                   4315: (24)SH
                   4316: 11092 35452 MT
                   4317: (10.3. Color)SH
                   4318: 52888 XM
                   4319: (24)SH
                   4320: 11092 36601 MT
                   4321: (10.4. Graphics)SH
                   4322: 52888 XM
                   4323: (25)SH
                   4324: 11092 37750 MT
                   4325: (10.5. Management)SH
                   4326: 52888 XM
                   4327: (25)SH
                   4328: 11092 38899 MT
                   4329: (10.6. Extensibility)SH
                   4330: 52888 XM
                   4331: (26)SH
                   4332: 11 SS 
                   4333: 9036 40143 MT
                   4334: (11. Summary)SH
                   4335: 52776 XM
                   4336: (26)SH
                   4337: ES
                   4338: %%Page: ii 31 
                   4339: BS
                   4340: 0 SI
                   4341: 10 /Helvetica-Bold AF
                   4342: 30322 4329 MT
                   4343: (ii)SH
                   4344: 12 SS 
                   4345: 26465 8075 MT
                   4346: (List of Figures)SH
                   4347: 11 SS 
                   4348: 9036 9319 MT
                   4349: (Figure 2-1:)
                   4350: SH( System)
                   4351: 612 W( Structure)SH
                   4352: 53388 XM
                   4353: (7)SH
                   4354: ES
                   4355: %%Trailer
                   4356: %%Pages: 31 
                   4357: %%DocumentFonts: Helvetica Helvetica-Bold Helvetica-Oblique

unix.superglobalmegacorp.com

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