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