home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume2 / window / part1 / Paper.jacob next >
Encoding:
Text File  |  1986-11-30  |  22.4 KB  |  742 lines

  1. .rm CH
  2. .ds CF "\(hy \\n(PN \(hy
  3. .\"
  4. .ds >. .
  5. .rm <.
  6. .ds >, ,
  7. .rm <,
  8. .ds [. " [
  9. .ds .] ]
  10. .\"
  11. .TL
  12. User-Level Window Managers for UNIX
  13. .AU
  14. Robert J.K. Jacob
  15. .AI
  16. Naval Research Laboratory
  17. Washington, D.C. 20375
  18. .AB
  19. .I Wm
  20. manages a collection of windows on a display terminal.
  21. Each window has its own shell or other interactive program,
  22. running in parallel with those in the other windows.
  23. This permits a user to conduct several interactions with the system in
  24. parallel, each in its own window.
  25. The user can move from one window to another, re-position a window, or
  26. create or delete a window at any time
  27. without losing his or her place in any of the windows.
  28. Windows can overlap or completely obscure one another;
  29. obscured windows can be "lifted" up
  30. and placed on top of the other windows.
  31. .PP
  32. This paper describes how such a window manager for UNIX\(dg
  33. .FS
  34. .PP
  35. \(dgUNIX is a trademark of Bell Laboratories.
  36. .FE
  37. is implemented as a set of user processes,
  38. without modifications to the UNIX kernel.
  39. It shows how the simple, but well-chosen
  40. facilities provided by the original
  41. (Version 6) UNIX kernel are sufficient to support
  42. .I wm .
  43. In addition, subsequent versions of
  44. .I wm
  45. exploit features of the kernel introduced into newer versions of
  46. UNIX to provide faster and more sophisticated window operations,
  47. still implemented entirely at the user level.
  48. .AE
  49. .SH
  50. Introduction
  51. .PP
  52. This paper describes the design of a display window manager for
  53. UNIX implemented entirely as a set of user processes, without modifications to
  54. the UNIX kernel.
  55. It shows how the simple facilities provided by the original
  56. (Version 6) UNIX kernel are sufficient to support such a window
  57. manager.
  58. In addition, more recent versions of the window manager exploit
  59. features of the kernel introduced into newer versions of UNIX to
  60. provide faster and more sophisticated operations in windows,
  61. still implemented entirely outside the kernel.
  62. .PP
  63. This window manager,
  64. .I wm ,
  65. provides a UNIX
  66. user the ability to conduct several interactions in parallel, each in
  67. a different window on a text display terminal.
  68. The windows may be created, moved, and temporarily or permanently erased
  69. at any time.
  70. They may also overlap or completely obscure one another, and such hidden or
  71. partially hidden windows may be "lifted" and placed on top of the
  72. other windows as desired.
  73. Figure 1 shows a snapshot of a
  74. .I wm
  75. session in progress.
  76. .SH
  77. User Interface
  78. .PP
  79. The notion of organizing computer data spatially was propounded
  80. and exploited by Nicholas Negroponte in the Spatial Data Management System\*(<.\*([.2,\|3\*(.]\*(>.
  81. In
  82. .I wm ,
  83. however, spatial cues are used only to specify a context for a dialogue.
  84. Once a window is selected, further interactions within that window
  85. make use of the
  86. power and abstraction of more conventional user interface techniques.
  87. Teitelman\*([.8\*(.]
  88. made good use of display screen windows for
  89. a collection of parallel interactions with an INTERLISP system.
  90. More recently, several personal computers and workstations have adopted this
  91. window-oriented style of dialogue as their principal mode of interaction.
  92. Other systems similar to the present one have also been provided
  93. under UNIX\*(<.\*([.4,\|7,\|9\*(.]\*(>.
  94. .PP
  95. Traditional user interfaces for computers
  96. that handle parallel processes
  97. place all inputs and outputs in one chronological
  98. stream, identifying the process associated with each, but interleaving
  99. the data.
  100. The Berkeley job control facilities for UNIX
  101. provide a first attempt at improving this situation\*(<.\*([.5\*(.]\*(>.
  102. .PP
  103. By contrast, a window-based user interface
  104. enables a user to manage a collection of dialogues by
  105. associating a spatial location with each dialogue, in much the same
  106. way one organizes a desk.
  107. On a desk, all input papers on all topics
  108. are not (one hopes) placed on a single
  109. pile in chronological order, but rather they are divided into piles by topic.
  110. When input for a particular topic is received, the corresponding pile
  111. is located, lifted, and placed on top of other papers, and the necessary
  112. work is done on that pile.
  113. Each topic may thus be associated with
  114. and remembered in terms of a location on the desk.
  115. Recent empirical evidence showed that such a window-oriented
  116. user interface induced better user performance than a more
  117. traditional scrolled message interface in a particular
  118. situation involving several parallel interactions\*(<.\*([.6\*(.]\*(>.
  119. .PP
  120. .I Wm
  121. conducts several concurrent dialogues with a UNIX user.
  122. Each takes the form of a UNIX shell, to which
  123. UNIX commands can be given and from which other interactive
  124. programs can be initiated.
  125. Each dialogue is conducted in a separate area of the screen or
  126. .I window
  127. designated by the user.
  128. At any moment, one of the windows is considered the current input window,
  129. and all keyboard inputs (except for
  130. .I wm
  131. commands themselves) are sent to the shell
  132. or program associated with that window.
  133. At any time (including in the middle of typing a command in a window),
  134. the designation of the current window may be changed
  135. and a different dialogue begun or resumed.
  136. Outputs resulting from these dialogues will appear in their appropriate
  137. windows as they are generated, regardless of which window is the
  138. current input window.
  139. Output destined for a portion of a window that is obscured by another
  140. window will appear whenever that portion of the window is uncovered.
  141. Windows can be "piled" on one another in any sequence.
  142. .PP
  143. .I Wm
  144. was originally designed for use in an intelligent terminal
  145. that could communicate with several computers simultaneously.
  146. Each dialogue with a different computer was associated with a window.
  147. The method is equally applicable to a collection of dialogues,
  148. all with the same computer but on different topics.
  149. Still, any or all of the present windows can run programs to conduct
  150. interactive dialogues with other computers
  151. (such as
  152. .I telnet ).
  153. .SH
  154. Design for "Vanilla" UNIX
  155. .PP
  156. To implement a system of this sort,
  157. it is necessary for one user process to be able to
  158. manage a collection of other user processes and to mediate all of
  159. their inputs and outputs.
  160. For the inputs, it must act as a switch, directing input from the keyboard to
  161. different programs in response to user commands.
  162. For the program outputs,
  163. it must place the output of each program in its correct
  164. position on the screen.
  165. .PP
  166. If adequate primitives for creating and manipulating processes
  167. and for catching their inputs and outputs are provided by the
  168. operating system, a window manager can be built entirely as a
  169. user program.
  170. The original design of UNIX, with its
  171. .I pipe
  172. and
  173. .I fork
  174. mechanisms provides a user the right primitives to design such a
  175. system in an elegant fashion without kernel modifications.
  176. .PP
  177. .I Wm
  178. initiates and manages its own collection of UNIX processes, including
  179. those run in response to entered commands.
  180. Any conventional UNIX program can be used from
  181. .I wm ,
  182. provided it does not make significant
  183. assumptions about the nature of its input
  184. and output devices\-that is, it should treat input and output from a
  185. pipe as equivalent to input and output from a terminal or other source.
  186. .PP
  187. .I Wm
  188. runs as
  189. .I 2n+2
  190. parallel UNIX processes of four different types
  191. (where
  192. .I n
  193. is the number of windows in use).
  194. The division into processes is dictated by the fact that the original UNIX
  195. .I read
  196. call on an empty pipe or input device causes a process to
  197. block until input becomes available.
  198. Hence there is a separate process for each pipe or device that must be
  199. read asynchronously.
  200. Each such process contains a loop that reads from its
  201. particular pipe or device,
  202. processes the input, and then waits for more.
  203. Figure 2 shows the processes and pipes that comprise
  204. .I wm .
  205. .PP
  206. The
  207. .B main
  208. process reads from and waits for input from the keyboard.
  209. Input consisting of text is sent to the shell process
  210. associated with the current window and also to the
  211. .B scrn
  212. process, described below, for echoing.
  213. Input consisting of
  214. .I wm
  215. commands is interpreted by
  216. .B main ,
  217. translated into one or more primitive commands plus arguments, and sent to
  218. .B scrn
  219. for execution.
  220. Simple changes in the input command language are thus localized in
  221. .B main .
  222. To change the name, input syntax, or prompt for a command, only the code in
  223. .B main
  224. need be modified.
  225. Since input commands are reduced to a somewhat more general set of
  226. primitive commands, some simple new commands may be implemented entirely in
  227. .B main
  228. as aliases for specific uses or combinations
  229. of the existing primitive commands.
  230. .PP
  231. The
  232. .B scrn
  233. process handles all outputs to the screen.
  234. All processes that want to affect the screen must thus place requests
  235. to do so on a common pipe.
  236. .B Scrn
  237. reads these instructions from the pipe and makes appropriate modifications to
  238. the screen.
  239. .I Wm
  240. commands that affect the screen layout, such as moving a window, are placed
  241. on this pipe by
  242. .B main
  243. and handled by
  244. .B scrn .
  245. Output text characters from the individual shell processes
  246. that belong in a window
  247. are also placed on this pipe along
  248. with a window identifier and a bit
  249. indicating whether the character should be displayed immediately or
  250. just remembered for the next time the display is refreshed.
  251. .B Scrn
  252. then compares the desired configuration of the screen to a buffer
  253. containing the actual configuration
  254. and transmits the necessary updates.\(dg\ 
  255. .FS
  256. .PP
  257. \(dgThe update algorithm
  258. is less sophisticated than the optimization performed in the
  259. .I curses
  260. package\*(<,\*([.1\*(.]\*(>,
  261. but
  262. .I curses
  263. was not available in Version 6 UNIX.
  264. This update algorithm
  265. is also somewhat easier to adapt to unusual terminals, as seen below.
  266. .FE
  267. .PP
  268. There is a
  269. .B shell
  270. process associated with each window.
  271. This is simply the standard UNIX
  272. .I sh
  273. (or any other designated program).
  274. These
  275. .B shell
  276. processes have no direct access to the terminal, but run as captives of
  277. .I wm ,
  278. connected by pipes, so that their inputs and outputs can be mediated.
  279. The input to each of these processes is a pipe from
  280. .B main ,
  281. since
  282. .B main
  283. knows which window is the current input window and can place the typed
  284. input text on the pipe to the corresponding
  285. .B shell
  286. process.
  287. All outputs of the
  288. .B shell
  289. processes must be sent to
  290. .B scrn
  291. to be displayed, but they must first be tagged with the name of the
  292. window in which they belong.
  293. .PP
  294. To do this, each window has a
  295. .B shmon
  296. process that monitors the output of the corresponding
  297. .B shell
  298. process.
  299. The output of each
  300. .B shell
  301. process is a pipe to a corresponding
  302. .B shmon
  303. process.
  304. Each time output appears on that pipe,
  305. .B shmon
  306. reads it, packages it with a header identifying its window,
  307. and then places it on the common request pipe to
  308. .B scrn .
  309. .PP
  310. .I Wm
  311. comprises about 1000 lines of C code\-about 500 each for the
  312. .B main
  313. and
  314. .B scrn
  315. processes and less than 50 for the
  316. .B shmon
  317. process.
  318. .SH
  319. Remarks and Problems with "Vanilla" UNIX
  320. .PP
  321. Each window in
  322. .I wm
  323. emulates an individual glass teletype.
  324. Inputs appear in the bottom and scroll off the top of a window.
  325. Since the standard input and output for all programs run by
  326. .I wm
  327. are really pipes,
  328. all programs run under
  329. .I wm
  330. should treat their inputs and outputs
  331. simply as streams of characters, without distinctions between
  332. terminals and pipes.
  333. The fact that UNIX and most of its original programs permit a pipe to be
  334. substituted for a terminal input or output stream is an elegant
  335. aspect of UNIX that is crucial to
  336. .I wm .
  337. This obtains for most UNIX programs;
  338. they perform individual "building-block" functions and are thus intended
  339. to be equally usable individually from the terminal
  340. or as filters connected to other programs to perform more complex tasks.
  341. Programs that try to determine whether they
  342. have access to a real terminal may behave differently or even refuse to run with
  343. .I wm .
  344. For example,
  345. .I stty
  346. is meaningless when applied to a pipe rather than a terminal,
  347. .I vi
  348. will refuse to run from a pipe,
  349. and
  350. .I csh
  351. will not allow job control if it cannot access the terminal.
  352. (However, note that
  353. .I wm
  354. is really an alternate approach to controlling concurrent jobs.)\ 
  355. .PP
  356. A very rudimentary facility for supporting a
  357. whole-screen-oriented program is provided.
  358. It creates a special temporary window,
  359. creates a
  360. .I termcap
  361. description of a "terminal" that occupies only the corresponding
  362. area of the actual
  363. screen, and then provides that description and direct access to the terminal
  364. to the screen-oriented program until the latter exits.
  365. .PP
  366. Since
  367. .I wm
  368. operates with the terminal in raw mode,
  369. it must provide for itself the input line editing functions normally
  370. provided by the teletype driver.
  371. .PP
  372. Because of the architecture of
  373. .I wm ,
  374. there are no pipes that
  375. connect one window to another, hence there is no explicit facility for
  376. communication between windows.
  377. It can be achieved, however, through the file system.
  378. A program in one window
  379. can append to a file while one in another window continuously tries to read
  380. from the end of that file.
  381. .SH
  382. Terminal Dependencies
  383. .PP
  384. While the newer version of
  385. .I wm
  386. uses
  387. .I curses
  388. to perform all terminal-dependent operations in a
  389. terminal-independent fashion, terminal dependencies can be
  390. isolated fairly easily even without
  391. .I curses .
  392. All terminal-dependent code in the original
  393. .I wm
  394. is restricted to a collection of five simple procedures.
  395. They were originally written separately for each type of terminal,
  396. but have also been written in terms of the terminal-independent interface,
  397. .I termcap ,
  398. for systems that have it.
  399. .PP
  400. The five procedures perform the following tasks:
  401. .RS
  402. .IP \fBttyinit\fP 15
  403. Performs any necessary initialization for the terminal.
  404. .IP \fBttyclose\fP 15
  405. Performs any necessary closing for the terminal before
  406. .I wm
  407. exits or suspends.
  408. .IP \fBttymov\fP 15
  409. Moves the terminal cursor to a given row and column.
  410. .IP \fBclearscreen\fP 15
  411. Clears the terminal screen.
  412. .IP \fBclearline\fP 15
  413. Clears from the cursor to end of the current line
  414. (not mandatory).
  415. .RE
  416. .LP
  417. For each of several common terminals, the definitions of these
  418. procedures comprise about 15 lines of code altogether.
  419. .PP
  420. This approach isolates terminal dependencies sufficiently that
  421. .I wm
  422. can also be adapted for use on graphic displays
  423. by replacing the above procedures and making other minor changes.
  424. Such a version of
  425. .I wm
  426. has been written to produce output suitable
  427. for the standard UNIX plot filters (plus some added commands for
  428. raster graphic displays) and used with a Genisco frame buffer.
  429. Windows may be in various colors and may use different fonts for their text.
  430. .SH
  431. Design for Version 4.2 UNIX
  432. .PP
  433. Berkeley Version 4.2 VAX UNIX provides new features that make it
  434. possible to improve
  435. .I wm
  436. significantly.
  437. By using pseudo-terminals instead of pipes for interprocess
  438. communication, several of the problems discussed above disappear.
  439. In addition, the synchronous input/output multiplexing feature of
  440. the new UNIX makes the former division of
  441. .I wm
  442. into processes as dictated by the blocking read unnecessary.
  443. A revised version of
  444. .I wm ,
  445. then, solves many of the earlier problems and runs in a single
  446. process (plus the user's shells).
  447. It is, however, less interesting and certainly less portable than
  448. the initial version.
  449. Again, the facilities are provided entirely in user-level processes,
  450. without the need for kernel modifications.
  451. .PP
  452. This version of
  453. .I wm
  454. reads from the keyboard and also from the pseudo-terminals associated
  455. with each window, in a round-robin, using the multiplexed read call
  456. .I (select) .
  457. Keyboard input consisting of text is sent to the pseudo-terminal
  458. associated with the current window.
  459. The pseudo-terminal driver itself handles
  460. echoing (when enabled) and intraline editing,
  461. obviating the need for
  462. .I wm
  463. to duplicate these functions.
  464. Keyboard input consisting of
  465. .I wm
  466. commands is processed directly;
  467. text input is sent to the appropriate pseudo-terminal.
  468. Output from the pseudo-terminals is read by
  469. .I wm ,
  470. interpreted in terms of
  471. the cursor control commands of a simple virtual terminal defined by
  472. .I wm ,
  473. and then added to the appropriate screen window for processing by the
  474. .I curses
  475. package\*(<.\*([.1\*(.]\*(>.
  476. .PP
  477. This version of
  478. .I wm
  479. comprises about 1000 lines of C code, all in a single process.
  480. Figure 3 shows the architecture of the program.
  481. .SH
  482. Remarks and Problems with Version 4.2 UNIX
  483. .PP
  484. Since each window is implemented with a pseudo-terminal, the fact
  485. that a program is running in a window rather than on a real
  486. terminal is transparent to most programs.
  487. Specifically,
  488. most screen editors and games may be used, and
  489. .I stty
  490. may be called to change characteristics such as echoing or line editing
  491. individually for each window.
  492. For example, note that one of the windows in Figure 1 is running
  493. .I vi ,
  494. which has adjusted itself to the window size.
  495. Some programs, however, assume that their output devices are
  496. of some minimum size;
  497. they will not run well in very small windows.
  498. Also, programs that attempt to manipulate the controlling
  499. terminals of process groups will not work properly under
  500. .I wm .
  501. For this reason,
  502. .I csh
  503. cannot currently be run in the individual windows instead of
  504. .I sh .
  505. .PP
  506. It is generally
  507. not possible to move a window while an interactive
  508. program (other than a shell) is running in it.
  509. First, this is necessary because, whenever a window is moved,
  510. .I wm
  511. sends a shell command to change the
  512. .I TERMCAP
  513. variable for the shell in that window, to describe its new size.
  514. A more fundamental reason is that the
  515. .I curses
  516. library routines (sensibly)
  517. do not expect the terminal description to change while
  518. a program is running, and so make no provision for checking for or
  519. adapting to such changes.
  520. .PP
  521. Since pseudo-terminals are a system-wide resource and are usually fixed in
  522. number, the total number of
  523. windows that can be in use by all users at any one time
  524. is limited to the number of pseudo-terminals made available to
  525. .I wm .
  526. .PP
  527. A facility for communicating between windows is now easy to provide.
  528. Since each window uses a pseudo-terminal, any data sent to its
  529. slave pseudo-terminal
  530. will appear in the window;
  531. and pseudo-terminals are in the name space of the UNIX file
  532. system and thus available to other processes.
  533. To simplify use of this feature, when a window is created and a
  534. pseudo-terminal obtained for it,
  535. a link to the name of its slave pseudo-terminal is created
  536. in the user's current directory.
  537. Any program inside or outside
  538. .I wm
  539. can then write to or read from that file name without prearrangement.
  540. .SH
  541. Program Versions
  542. .PP
  543. These programs are written in C for use with UNIX.
  544. There are three principal versions:
  545. .B wm.v6 ,
  546. .B wm.v7 ,
  547. and
  548. .B wm.v42 .
  549. The first, as described above,
  550. runs under unmodified Version 6 UNIX on a PDP-11.
  551. The code for this version was frozen and abandoned several years
  552. ago, but it is still available.
  553. .B Wm.v7
  554. runs under Version 7 UNIX,
  555. and the same code also runs on Berkeley 2.8
  556. and also on a VAX on Berkeley 4.1 and 4.2.
  557. No changes in the source code are required between the PDP-11
  558. and VAX, except that constants for the maximum number and size of windows
  559. are limited by the available memory on a PDP-11.
  560. This version
  561. is similar in design to
  562. .B wm.v6 ,
  563. which was described above, but has a number of improvements.
  564. The newest version,
  565. .B wm.v42 ,
  566. runs only under Berkeley 4.2 on a VAX,
  567. as described in this paper.
  568. It uses the
  569. .I select
  570. synchronous input/output multiplexing call,
  571. which is unique to 4.2, and also other features
  572. that are found in some, but not all, versions of UNIX, such as
  573. pseudo-terminals and
  574. .I curses .
  575. At this writing, this version is not yet thoroughly tested on 4.2.
  576. An intermediate version for use with Versions 2.8 or 4.1
  577. can also be constructed by adapting some of the features of
  578. .B wm.v42
  579. to
  580. .B wm.v7 .
  581. For example, the use of
  582. .I curses
  583. can certainly be adapted to 2.8;
  584. pseudo-terminals are available on some versions of 4.1;
  585. and some versions of 4.1 can also simulate a non-blocking read
  586. on a pseudo-terminal or a short time-out.
  587. .SH
  588. Availability
  589. .PP
  590. Three versions of
  591. .I wm
  592. are available to interested researchers.
  593. .RS
  594. .IP "\fBwm.v6\fP" 10
  595. For Version 6 UNIX.
  596. .IP "\fBwm.v7\fP" 10
  597. For Version 7 UNIX, also runs on Berkeley 2.8, 4.1, and 4.2.
  598. .IP "\fBwm.v42\fP" 10
  599. For Berkeley 4.2 UNIX only (but has some features than can be retrofitted to
  600. .B wm.v7 ).
  601. .RE
  602. .LP
  603. The code can be obtained over the Arpanet by sending a request to
  604. .\" the two (hy is to prevent the hyphenation algorithm from splitting nrl-css
  605. jacob@nrl\(hycss.
  606. The author can also be reached via uucp
  607. at ...!decvax!linus!nrl\(hycss!jacob.
  608. .SH
  609. Conclusions
  610. .PP
  611. It is demonstrably feasible to provide a useful and efficient
  612. display window management facility in UNIX at the user level,
  613. without support from kernel modifications.
  614. Such a facility can even be provided for the original Version 6 UNIX,
  615. although some improvements are obtainable by exploiting features
  616. provided by more recent versions of UNIX.
  617. .SH
  618. Acknowledgments
  619. .PP
  620. I would like to thank
  621. Mark Cornwell, Rudy Krutar, Alan Parker, and Mark Weiser
  622. for helpful discussions of this work.
  623. .]<
  624. .\"Arnold.K.-1980-1
  625. .ds [F 1
  626. .]-
  627. .ds [A K. Arnold
  628. .ds [T Screen Updating and Cursor Movement Optimization
  629. .ds [R University of California, Berkeley
  630. .ds [D 1980
  631. .nr [T 0
  632. .nr [A 0
  633. .nr [O 0
  634. .][ 4 tech-report
  635. .\"Bolt.R.-1979-2
  636. .ds [F 2
  637. .]-
  638. .ds [A R. Bolt
  639. .ds [T Spatial Data Management
  640. .ds [I Architecture Machine Group, Massachusetts Institute of Technology
  641. .ds [R Technical Report
  642. .ds [D 1979
  643. .nr [T 0
  644. .nr [A 0
  645. .nr [O 0
  646. .][ 4 tech-report
  647. .\"Herot.C.F.-1980-3
  648. .ds [F 3
  649. .]-
  650. .ds [A C.F. Herot
  651. .as [A ", R. Carling
  652. .as [A ", M. Friedell
  653. .as [A ", and D. Kramlich
  654. .ds [T A Prototype Spatial Data Management System
  655. .ds [J Computer Graphics
  656. .ds [V 14
  657. .ds [N 3
  658. .ds [P 63-70
  659. .nr [P 1
  660. .ds [D 1980
  661. .nr [T 0
  662. .nr [A 0
  663. .nr [O 0
  664. .][ 1 journal-article
  665. .\"Horton.M.-1982-4
  666. .ds [F 4
  667. .]-
  668. .ds [A M. Horton
  669. .ds [I personal communication
  670. .ds [D September 8, 1982
  671. .nr [T 0
  672. .nr [A 0
  673. .nr [O 0
  674. .][ 2 book
  675. .\"Joy.W.-1980-5
  676. .ds [F 5
  677. .]-
  678. .ds [A W. Joy
  679. .ds [T An Introduction to the C Shell
  680. .ds [R University of California, Berkeley
  681. .ds [D November 1980
  682. .nr [T 0
  683. .nr [A 0
  684. .nr [O 0
  685. .][ 4 tech-report
  686. .\"Murrel.S.-1983-6
  687. .ds [F 6
  688. .]-
  689. .ds [A S. Murrel
  690. .ds [T Computer Communication System Design Affects Group Decision Making
  691. .ds [J Proc. Human Factors in Computer Systems Conference
  692. .ds [D 1983
  693. .ds [P 63-67
  694. .nr [P 1
  695. .nr [T 0
  696. .nr [A 0
  697. .nr [O 0
  698. .][ 1 journal-article
  699. .\"Pike.R.-1983-7
  700. .ds [F 7
  701. .]-
  702. .ds [A R. Pike
  703. .ds [T Graphics in Overlapping Bitmap Layers
  704. .ds [J ACM Transactions on Graphics
  705. .ds [V 2
  706. .ds [N 2
  707. .ds [D 1983
  708. .nr [T 0
  709. .nr [A 0
  710. .nr [O 0
  711. .][ 1 journal-article
  712. .\"Teitelman.W.-1979-8
  713. .ds [F 8
  714. .]-
  715. .ds [A W. Teitelman
  716. .ds [T A Display Oriented Programmer's Assistant
  717. .ds [J International Journal of Man-Machine Studies
  718. .ds [V 11
  719. .ds [P 157-187
  720. .nr [P 1
  721. .ds [D 1979
  722. .nr [T 0
  723. .nr [A 0
  724. .nr [O 0
  725. .][ 1 journal-article
  726. .\"Weiser.M.-1983-9
  727. .ds [F 9
  728. .]-
  729. .ds [A M. Weiser
  730. .as [A ", C. Torek
  731. .as [A ", R. Trigg
  732. .as [A ", and R. Wood
  733. .ds [T The Maryland Window System
  734. .ds [R Technical Report 1271
  735. .ds [I Computer Science Department, University of Maryland
  736. .ds [D 1983
  737. .nr [T 0
  738. .nr [A 0
  739. .nr [O 0
  740. .][ 4 tech-report
  741. .]>
  742.