|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.