Annotation of 43BSDTahoe/new/X/doc/Paper/x.PS, revision 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.