From don@brillig.umd.edu Sat Aug 26 14:00:07 1989 Date: Sat, 26 Aug 89 14:00:07 -0400 To: NeWS-makers@brillig.umd.edu Subject: CALL FOR VOTES: Formation of comp.object From: sei!ajpo!eberard@pt.cs.cmu.edu (Edward Berard) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Call For Votes: The Formation of Comp.Object Based on an original proposal, and over two weeks of discussion, I would like to announce a "call for votes" on the formation of a new, unmoderated newsgroup, i.e., "comp.object." The purpose of this group will be to provide a forum for the discussion of issues and events which are of interest to the object-oriented community as a whole. Object-oriented thinking affects everything, from management practices to the schema of the databases, from programming language selection to in-house software development standards, and from training to personnel selection. To attempt to keep the focus solely on the syntax and semantics of a particular programming language is unrealistic. COMMON INTERESTS Many people are interested in object-oriented technology. Object-oriented approaches have been used for communications, information systems, real-time embedded applications, database design, and even hardware design. Although the people implementing these applications may have used quite a variety of different programming languages, and an even wider variety of methodologies, they share many common problems and concerns. Recently, there have been questions about where to post such things as: - A bibliography for the latest European Conference on Object-Oriented Programming (ECOOP) - Calls for Papers for the ever-increasing numbers of conferences and meetings dedicated in whole, or in part, to object-oriented topics - Questions about object-oriented methodologies, e.g., object-oriented requirements analysis, object-oriented design, and others - Questions about how to document objects and classes - Questions about the availability of object-oriented CASE tools - Discussions of topics of general interest to the object-oriented community, e.g., interoperability, object-oriented data bases, objectification, and object-oriented metrics. Comp.object will provide a forum for all these topics. POSSIBLE TOPICS FOR DISCUSSION The following is a partial list of topics which can be discussed on comp.object: - definitions of terms and concepts - object-oriented domain analysis - object-oriented requirements analysis - object-oriented design - other object-oriented life-cycle issues, e.g., object-oriented testing - object-oriented databases - object-oriented computer hardware - object-oriented metrics - object-oriented issues in a real-time environment - the impact of object-oriented technology on existing standards and policies - documentation techniques for object-oriented approaches - transitioning to an object-oriented approach - teaching object-oriented concepts and languages. - management of object-oriented technology - automated tools for object-oriented approaches - object-oriented software engineering environments - concurrency in an object-oriented approach - estimating and costing an object-oriented approach - reusability - interoperability - objectification Issues such as the syntax and semantics of various object-oriented programming languages is more appropriately addressed in the newsgroups for these languages. However, for example, the impact of the selection of a particular programming language for a particular project would be an appropriate topic. HOW TO MAKE IT HAPPEN: FOLLOWING THE RULES This "call for votes" for comp.object is being issued on August 26, 1989, and will last for 30 (thirty) days, ending on September 25, 1989. Votes received prior to August 26, 1989, or after September 25, 1989 do not count. (If you sent me a "vote" prior to August 26, 1989, and I did receive almost 150 "votes," please be sure to vote again.) ************************************************************************ * Please direct all votes (for and against) to me via e-mail. I will * * act as the vote taker. My e-mail address is eberard@ajpo.sei.cmu.edu.* ************************************************************************ What follows are relevant excerpts from "the rules." Please read them carefully before voting: > The voting period should last for at least 30 days, no matter what the > preliminary results of the vote are. The exact date that the voting period > will end should be stated in the call for votes. Only votes that arrive > on the vote-taker's machine prior to this date may be counted. > ONLY votes MAILED to the vote-taker will count. Votes posted to the net > for any reason (including inability to get mail to the vote-taker) and > proxy votes (such as having a mailing list maintainer claim a vote for > each member of the list) may not be counted. > Votes may not be transferred to other, similar proposals. A vote shall > count only for the EXACT proposal that it is a response to. In particular, > a vote for or against a newsgroup under one name shall NOT be counted as > a vote for or against a newsgroup with a different name or charter, > a different moderated/unmoderated status or (if moderated) a different > moderator or set of moderators. > Votes MUST be explicit; they should be of the form "I vote for the > group foo.bar as proposed" or "I vote against the group foo.bar > as proposed". The wording doesn't have to be exact, it just needs to > be unambiguous. In particular, statements of the form "I would vote > for this group if..." should be considered comments only and not counted as votes. > The Result > 1) At the completion of the 30 day voting period, the vote taker must post > the vote tally and the E-mail addresses and (if available) names of the > votes received to news.announce.newgroups and any other groups or mailing > lists to which the original call for votes was posted. > 2) AFTER the vote result is posted, there will be a 5 day waiting period > during which the net will have a chance to correct any errors in > the voter list or the voting procedure. > 3) AFTER the waiting period, and if there were no serious objections that > might invalidate the vote, and if 100 more YES/create votes are received > than NO/don't create, a newgroup control message may be sent out. > If the 100 vote margin is not met, the group should not be created. If all goes well, comp.object may have met all necessary requirements just before the beginning of OOPSLA '89 on October 2, 1989. -- Edward V. Berard Berard Software Engineering, Inc. 18620 Mateney road Germantown, Maryland 20874 Phone: (301) 353-9652 E-Mail: eberard@ajpo.sei.cmu.edu From don@brillig.umd.edu Sun Aug 27 15:07:52 1989 Date: Sun, 27 Aug 89 15:07:52 -0400 To: NeWS-makers@brillig.umd.edu Subject: A PostScript interpreter written in PostScript From: Don Hopkins Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Obvious Question: Why would anybody ever write a PostScript interpreter in PostScript? Possible Answers: To use as a debugging tool. To trace and single step through the execution of PostScript code. To serve as a basis for PostScript algorithm animation. To gain a deeper understanding of how PostScript works. To try out some ideas from Structure and Interpreteration. To experiment with extensions to the PostScript language. To demonstrate that PostScript isn't just for breakfast any more. To make PostScript run even slower (but thicker). To avoid programming in C (the portable assembly language of the 80's). To use to interpret its self. To have something nerdish to talk about at parties. The meta-interpreter has its own meta-execution stack, a PostScript array, onto which it pushes continuations for control structures. (forall, loop, stopped, etc...) The continuations are represented as dictionaries in which the state needed by the control structure is stored (plus some other info to help with debugging), as well as a /continue function, and a /continuation type. Before executing any operator, the meta-interpreter looks to see if it's defined in the iexec-operators dict, and if it is, the associated procedure is executed instead. Since the meta-interpreter uses its own execution stack, any operator that effects the execution stack (loop, exit, exec, etc...) must be redefined to use the meta-execution stack instead, so that the meta-interpreter can trace through the execution. The NeWS execution stack is just used to execute the code implementing the meta-interpreter -- the code being meta-interpreted uses the meta-execution stack. The MumbleFrotz function uses the NeWS execution stack to temporarily hold the state of the meta-interpreter (a dict) when it can't be on the dictionary stack, during the execution of primatives. (Or rather, it uses the execution stack of whatever interpreter is interpreting the meta-interpreter! ;-) Some things that are not implemented yet: error handling (which has a lot of potential for being useful :-), pathforall, countexecstack, tracing of the supersend primative in X11/NeWS. I can't think of a way to trace the execution of event manager callback procedures stored in interest Name and Action dictionaries, that awaitevent executes automatically before returning, short of wrapping calls to the interpreter around each of the callbacks (eeugh). The awaitevent operator is the only way to get an event, and sometimes it uses the NeWS execution stack, by pushing event callbacks onto it. This means they get executed by the NeWS interpreter without being traced. (Nothing bad happens, it's just invisible to the meta-interpreter.) Unfortunatly, I'd really like to be able to trace those... What the meta-interpreter needs is a dumbawaitevent operator, that returns the callback instead of executing it (on purpose -- cf sjs's blankscreen comments ;-). Three things that inspired this implementation are: Crispin Goswell's paper, "An Implementation of PostScript", published in the book "WorkStations and Publication Systems", from Springer Verlag; Abelson and Sussman's "Structure and Interpretation of Computer Programs" from MIT Press; and hot steam forced violently past finely ground Cafe' Bellissimo, mixed with lots of steamed milk and brown sugar. -Don %! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @(#)ps.ps % PostScript meta-interpreter. % Copyright (C) 1989. % By Don Hopkins. (don@brillig.umd.edu) % All rights reserved. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % This program is provided for UNRESTRICTED use provided that this % copyright message is preserved on all copies and derivative works. % This is provided without any warranty. No author or distributor % accepts any responsibility whatsoever to any person or any entity % with respect to any loss or damage caused or alleged to be caused % directly or indirectly by this program. If you have read this far, % you obviously take this stuff far too seriously, and if you're a % lawyer, you should give up your vile and evil ways, and go find % meaningful employment. So there. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Problems: % How do we catch the execution of interest Name and Action dict values, % executed by awaitevent? systemdict begin /iexec-types 100 dict def /iexec-operators 100 dict def /iexec-names 200 dict def /iexec-exit-stoppers 20 dict def /iexec-single-forall-types 20 dict def /iexec-array-like-types 20 dict def /iexecing? false def /signal-error { % errorname => - dbgbreak } def /iexec { % obj => ... 100 dict begin % This functions "end"s the interpreter dict, executes an object in the % context of the interpreted process, and "begin"'s back onto the % interpreter dict. Note the circularity. /MumbleFrotz [ % obj => ... /end load /exec load currentdict /begin load ] cvx def /ExecStack 100 array def /ExecSP -1 def /PushExec [ % obj => - /ExecSP dup cvx 1 /add load /store load ExecStack /exch load /ExecSP cvx /exch load /put load ] cvx def /PopExec [ % obj => - ExecStack /ExecSP cvx /get load /ExecSP dup cvx 1 /sub load /store load ] cvx def /TraceStep { iexec-step } def PushExec { ExecSP 0 lt { nullproc exit } if % nothing left to execute? goodbye. % pop top of exec stack onto the operand stack PopExec TraceStep % is it executable? (else just push literal) dup xcheck { % obj % do we know how to execute it? dup type //iexec-types 1 index known { % obj type //iexec-types exch get exec % ... } { % obj type % some random type. just push it. pop % obj } ifelse } if % else: obj } loop % goodbye-proc currentdict /MumbleFrotz undef % Clean up circular reference end exec % whoever exited the above loop left a goodbye proc on the stack. } def /iexec-step { % operand stack ... execee } def /iexec-sends { % - => context0 context1 ... contextn ExecSP 1 sub -1 0 { ExecStack exch get % ob dup type /dicttype eq { dup /continuation known { dup /continuation get /send eq { /context get dup null eq { pop } if } { pop } ifelse } { pop } ifelse } { pop } ifelse } for } def % Re-enter the NeWS PS interpreter, execute object, and return. % We need to construct the currentprocess's /SendStack from the interpreter's % send stack, so ThisWindow and other functions that look at the SendStack % will work. /iexec-reenter { % obj => ... mark /ParentDictArray where pop iexec-sends % obj mark context0 context1 ... contextn { { % obj mark context0 context1 ... contextn {func} 1 index mark eq { % obj mark {func} pop pop % obj exec % ... } { % obj mark context0 context1 ... contextn {func} dup 3 -1 roll send % ... } ifelse } dup exec } MumbleFrotz } def iexec-array-like-types begin /arraytype true def /packedarraytype true def end % iexec-array-like-types /iexec-token { % token => ... dup xcheck { % This is the "weird" thing about PostScript: % If object is isn't an executable array, execute it, else push it. //iexec-array-like-types 1 index type known not { PushExec } if } if } def iexec-types begin /nametype { % name => ... pause % We could push a dummy name continuation on the exec stack here to % help with debugging, by making stack dumps more informative... //iexec-names 1 index known { % name //iexec-names exch get % func exec % } { dup % name name % [ /where load currentdict ] % name name fn % end cvx exec begin % name dict true / name false {where} MumbleFrotz % name dict true / name false { % name dict exch get PushExec } { % name /undefined signal-error } ifelse } ifelse } def /arraytype { % array => ... dup length dup 0 eq { % array length pop pop % } { % array length 1 eq { % array 0 get % PushExec % } { % array dup 0 get % array head % push rest of array to execute later exch 1 1 index length 1 sub getinterval % head tail PushExec % head iexec-token % } ifelse } ifelse } def /packedarraytype /arraytype load def /stringtype { % string => ... dup token { % string rest token exch dup length 0 eq { pop } { PushExec } ifelse % string token exch pop % token iexec-token % ... } { % str dup length 0 eq { pop % } { % str /syntax signal-error } ifelse } ifelse } def /filetype { % file => - dup token { % file token exch dup % token file file status { PushExec } { pop } ifelse % token iexec-token % ... } { % file dup status { /syntax signal-error } { pop } ifelse } ifelse } def /operatortype { % operator => - //iexec-operators 1 index known { //iexec-operators exch get exec } { % [ exch currentdict ] cvx % end exec begin MumbleFrotz } ifelse } def /dicttype { % dict => - dup /continuation known { dup /continue get exec } if } def end % iexec-types iexec-operators begin /exec load { % obj => - PushExec } def /if load { % bool proc => - exch { PushExec } { pop } ifelse } def /ifelse load { % bool trueproc falseproc 3 -1 roll { exch } if % wrongproc rightproc PushExec pop } def iexec-single-forall-types begin {/arraytype /packedarraytype /stringtype} {true def} forall end % iexec-single-forall-types /forall load { % obj proc => - 10 dict begin /continuation /forall def /proc exch def /obj exch cvlit def /i 0 def //iexec-single-forall-types obj type known { /continue { % dict => - begin i obj length lt { currentdict cvx PushExec obj i get /proc load PushExec } if /i i 1 add def end } def } { /keys [ obj {pop} forall ] def /continue { % dict => - begin i obj length lt { currentdict cvx PushExec keys i get % key obj 1 index get % key val /proc load PushExec } if /i i 1 add def end } def } ifelse currentdict cvx PushExec end } def /for load { % first step last proc 10 dict begin /continuation /for def /proc exch def /last exch def /step exch def /first exch def /i first def /continue { % dict => - begin i last le { currentdict cvx PushExec i /proc load PushExec /i i step add def } if end } def currentdict cvx PushExec end } def /repeat load { 10 dict begin /continuation /repeat def /proc exch def /times exch def /i 0 def /continue { % dict => - begin i times lt { currentdict cvx PushExec /proc load PushExec /i i 1 add def } if end } def currentdict cvx PushExec end } def /loop load { 10 dict begin /continuation /loop def /proc exch def /continue { % dict => - begin currentdict cvx PushExec /proc load PushExec end } def currentdict cvx PushExec end } def /pathforallvec load { %... } def iexec-exit-stoppers begin {/forall /for /repeat /loop /pathforallvec} {true def} forall end % iexec-exit-stoppers /exit load { { ExecSP 0 lt { % exit out of interpreter? true exit } { PopExec % obj dup dup xcheck exch type /dicttype eq and { % obj dup /continuation known { dup /continuation get iexec-exit-stoppers exch known { pop false exit } { pop } ifelse } { pop } ifelse } { % obj pop } ifelse } ifelse } loop { {exit} exit } if } def /stop load { { ExecSP 0 lt { % stop out of interpreter? true exit } { PopExec % obj dup dup xcheck exch type /dicttype eq and { % obj dup /continuation known { dup /continuation get /stopped eq { pop true false exit } { pop } ifelse } { pop } ifelse } { % obj pop } ifelse } ifelse } loop { {stop} exit } if } def /stopped load { % proc 10 dict begin /continuation /stopped def /continue { % dict => - pop false } def /proc 1 index def % debugging currentdict cvx PushExec PushExec end } def /send load { % message object => { currentdict } MumbleFrotz % message object context 2 copy eq { % message object context pop pop cvx PushExec } { % message object context 10 dict begin /continuation /send def /context exch dup /ParentDictArray known not { pop null } if def % message object /object exch def % message /message 1 index def % message /continue { % cdict => - { % cdict ParentDictArray dup type /arraytype ne { % X11/NeWS /ParentDictArray get length 1 add } { length } ifelse 1 add {end} repeat /context get % context dup null eq { % context pop % } { % idict context dup /ParentDictArray get {begin} forall begin % } ifelse % } MumbleFrotz } def /unwind /continue load def currentdict cvx PushExec object context % message object context end % of cdict { null ne { ParentDictArray length 1 add {end} repeat } if dup /ParentDictArray get dup type /arraytype ne { % X11/NeWS dup /ParentDictArray get {begin} forall begin begin % message } { {begin} forall begin % message } ifelse } MumbleFrotz % message cvx PushExec % } ifelse } def % supersend (operator in X11/NeWS, proc in 1.1?) /currentfile load { % => file null ExecStack length 1 sub -1 0 { ExecStack exch get % obj dup type /filetype eq { exit } { pop } ifelse } for dup null eq { pop currentfile } { exch pop } ifelse } def % We have to have the send contexts set up right when we do a fork, since % the child process inherits them. (i.e. so ThisWindow works) /fork load { {fork} iexec-reenter } def /countexecstack load { /countexecstack dbgbreak } def /quit load { /quit dbgbreak } def end % iexec-operators iexec-names begin /sendstack { [ iexec-sends currentprocess /SendContexts get aload pop ] } def /iexecing? true def % meta-exec is a hook back up to the interpreter context. /meta-exec { exec } def /append { {append} MumbleFrotz } def /sprintf { {sprintf} MumbleFrotz } def % execstack end % iexec-names end % systemdict From don@brillig.umd.edu Tue Aug 29 17:17:07 1989 Date: Tue, 29 Aug 89 17:17:07 -0400 To: NeWS-makers@brillig.umd.edu Subject: PostScript interpreter in PostScript bug fix From: don@tumtum.cs.umd.edu (Don Hopkins) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Oops, the interpreter did the wrong thing in the case that the last object in an executable array was another executable array, in an attempt to be properly tail-recursive. The function that needs to be fixed is /arraytype, defined in the iexec-types dictionary. In the case that the array length is 1, it should call iexec-token instead of PushExec on the element of the array, since there is a difference between what PostScript does when it executes an array, and what it does when it encounters an array during the execution of a containing array. I found this bug by using the interpreter to trace through itsself. (It was failing on the nullproc function.) -Don /arraytype { % array => ... dup length dup 0 eq { % array length pop pop % } { % array length 1 eq { % array 0 get % % PushExec % XXX causes tail recursion bug iexec-token % } { % array dup 0 get % array head % push rest of array to execute later exch 1 1 index length 1 sub getinterval % head tail PushExec % head iexec-token % } ifelse } ifelse } def From don@brillig.umd.edu Tue Aug 29 17:18:07 1989 Date: Tue, 29 Aug 89 17:18:07 -0400 To: NeWS-makers@brillig.umd.edu Subject: stack limits From: att!cbnewsc!bwong@ucbvax.Berkeley.EDU (bruce.f.wong) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I have an application that is exceeding the limits on the operand and execution stacks. Is there a painless way of increasing these limits ? Thanks. -- Bruce F. Wong ATT Bell Laboratories att!iexist!bwong 200 Park Plaza, Rm 1A-111 312-713-5111 Naperville, Ill 60566-7050 From don@brillig.umd.edu Tue Aug 29 17:17:58 1989 Date: Tue, 29 Aug 89 17:17:58 -0400 To: NeWS-makers@brillig.umd.edu Subject: screenlock & Emacstool-like interface ?? From: phoenix!eho@princeton.edu (Eric Ho) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Is there any screenlock program under NeWS ? I usually lock my workstation when I'm done for the day. Also, is the ps-emacs GNU Emacs interface has the same functionalities as Emacstool ? Basically, I've found Emacstool invaluable to me especially things like scrollbars, menus & mouse support to grab things. I wish that ps-emacs will have the same functionalities and then the same layout/bindings so that I won't have to relearn the whole show again. Any pointers will be much appreciated. -- Eric Ho Cognitive Science Lab., Princeton University voice = 609-987-2987 email = eho@confidence.princeton.edu 609-987-2819 (messages) eho@bogey.princeton.edu regards. -eric- From don@brillig.umd.edu Tue Aug 29 17:30:47 1989 Date: Tue, 29 Aug 89 17:30:47 -0400 To: NeWS-makers@brillig.umd.edu Subject: NeWS job... From: Marty Picco Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Sorry for advertising on the net, but we've been trying to find someone to be our in-house NeWS expert and have had disappointing success to date. Parallax Graphics needs someone to handle our NeWS product for us (including porting X11/NeWS to our videographics product as well as helping out our customers in postscript-land). We need a good NeWS programmer who preferably has some experience working with server source code. We're the guys that do live video in a window under NeWS. Please reply via the net or give me a call at (408)727-2220. Regards, Marty Picco Parallax Graphics From don@brillig.umd.edu Tue Aug 29 19:16:45 1989 Date: Tue, 29 Aug 89 19:16:45 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: screenlock & Emacstool-like interface ?? From: crdgw1!crdgw1.ge.com!barnett@uunet.uu.net (Bruce Barnett) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article , eho@word (Eric Ho) writes: >Is there any screenlock program under NeWS ? There is Stan Switzer's Blankscreen program that was posted to comp.window.news a while ago. Perhaps the archive server has it. If you don't have it, I have a copy. > Also, is the ps-emacs GNU Emacs interface has the >same functionalities as Emacstool ? Not really. Here is some code I use with GNUemacs and NeWS 1.1 to provide a few functions. I am not much of a Lisp hacker, so this code is very simple. It does give you some ideas on how to add your own menus, functions, etc. in my .emacs file: ;;; NeWS package (autoload 'NeWS-init "NeWS.el" "" t) (if (equal window-system 'NeWS) (NeWS-init) ) ----------------------------- NeWS.el: ------------------------ ;;; (defun NeWS-init () "Initialize NeWS routines" (defun MoVE-R () "Move NeWS session to the right side of the screen" (interactive) (NeWS-set-origin 550 1)) (defun MoVE-L () "Move NeWS session to the left side of the screen" (interactive) (NeWS-set-origin 1 1)) (defun ZoOM () "ZoOM to full size of window " (interactive) (NeWS-set-dimensions 80 50 )) (defun UNZoOM () "UnZoOM to smaller size of window " (interactive) (NeWS-set-dimensions 80 34)) (defun NeWS-W () "NeWS set width to 100 characters" (interactive) (NeWS-set-dimensions 100 34)) (defun Screen-11 () "NeWS - set font to screen , size to 11" (interactive) (NeWS-set-font "Screen" 11)) (defun Screen-13 () "NeWS - set font to screen , size to 13" (interactive) (NeWS-set-font "Screen" 13)) (defun Screen-15 () "NeWS - set font to screen , size to 15" (interactive) (NeWS-set-font "Screen" 15)) (defun Screen-7 () "NeWS - set font to screen , size to 7" (interactive) (NeWS-set-font "Screen" 7)) (defun Courier-14 () "NeWS - set font to Courier , size to 14" (interactive) (NeWS-set-font "Courier" 14)) (defun Courier-13 () "NeWS - set font to Courier , size to 13" (interactive) (NeWS-set-font "Courier" 13)) ;;; define NeWS functions (global-set-key "\C-cr" 'MoVE-R) (global-set-key "\C-cl" 'MoVE-L) (global-set-key "\C-cz" 'ZoOM) (global-set-key "\C-cu" 'UNZoOM) ;;; ;;; set default font size (setq NeWS-FontSize 12) ;;; Set default font ;;; (setq NeWS-Font "Courier") (NeWS-set-font "Courier" 12) (defun NeWS-FontSizeInc () "Increase font size by 1 point" (interactive) (setq NeWS-FontSize ( 1+ NeWS-FontSize)) (NeWS-set-font NeWS-Font NeWS-FontSize)) (defun NeWS-FontSizeDec () "Decrease font size by 1 point" (interactive) (setq NeWS-FontSize (max 0 ( 1- NeWS-FontSize))) (NeWS-set-font NeWS-Font NeWS-FontSize)) (defun NeWS-FontType (Type) "Set NeWS font" (setq NeWS-Font Type) (NeWS-set-font NeWS-Font NeWS-FontSize)) (setq NeWS-setup-hook '(lambda nil (NeWS-set-dimensions 80 50) (NeWS-set-origin 1 1) ;;; (NeWS-set-font "Courier-Bold" 16) ;;; (NeWS-set-dimensions 80 56) (NeWS-set-window-retained t) ;;;; ;;; (NeWS-send-PostScript "0 (Gnews) {(Gnews) emacscmd} ;;; /insertitem window /FrameMenu get send" nil) (NeWS-send-PostScript (file-contents-as-string "~/.emacs.ps") nil) ) ) ) --------------- And in my .emacs.ps file, which is in a separate file so I can use postscript mode: ----------------------- % NeWS code for menus /Courier [ (C14) { (Courier-14) emacscmd} (C13) { (Courier-13) emacscmd} ] /new DefaultMenu send def /Screen [ (S7) { (Screen-7) emacscmd} (S11) { (Screen-11) emacscmd} (S13) { (Screen-13) emacscmd} (S15) { (Screen-15) emacscmd} ] /new DefaultMenu send def /RowCol [ (24x80) { (NeWS-set-dimensions 80 24 ) emacscmd} (34x80) { (NeWS-set-dimensions 80 34 ) emacscmd} (50x80) { (NeWS-set-dimensions 80 50) emacscmd} (24x100) { (NeWS-set-dimensions 100 24) emacscmd} (8x80) { (NeWS-set-dimensions 80 8) emacscmd} (ZoOM) { (ZoOM) emacscmd} (UNZoOM) { (UNZoOM) emacscmd} ] /new DefaultMenu send def /Policies [ (Retain True) { (NeWS-set-window-retained t) emacscmd} (Retain False) { (NeWS-set-window-retained nil) emacscmd} (Input:TypeIn ) { (NeWS-set-input-policy t) emacscmd} (Input:Insert ) { (NeWS-set-input-policy nil) emacscmd} (HardwareLine:On ) { (NeWS-set-i&d-line-ok t) emacscmd} (HardwareLine:Off ) { (NeWS-set-i&d-line-ok nil) emacscmd} (HardwareChar:On ) { (NeWS-set-i&d-char-ok t) emacscmd} (HardwareChar:Off ) { (NeWS-set-i&d-char-ok nil) emacscmd} (HardwareScroll:On ) { (NeWS-set-scroll-region-ok t) emacscmd} (HardwareScroll:Off ) { (NeWS-set-scroll-region-ok nil) emacscmd} ] /new DefaultMenu send def /FontStyles [ (Courier-Bold) { (NeWS-FontType "Courier-Bold") emacscmd} (Courier) { (NeWS-FontType "Courier") emacscmd} (Screen-Bold) { (NeWS-FontType "Screen-Bold") emacscmd} (Screen) { (NeWS-FontType "Screen") emacscmd} (Dali) { (NeWS-FontType "dali") emacscmd} (OldEnglish) { (NeWS-FontType "OldEng") emacscmd} (boxie) { (NeWS-FontType "boxie") emacscmd} (atlanta) { (NeWS-FontType "atlanta") emacscmd} (nonie) { (NeWS-FontType "nonie") emacscmd} (chicago) { (NeWS-FontType "chicago") emacscmd} (broadway) { (NeWS-FontType "broadway") emacscmd} (square_serif) { (NeWS-FontType "square_serif") emacscmd} ] /new DefaultMenu send def /FontSizes [ (Larger) { (NeWS-FontSizeInc) emacscmd} (Smaller) {(NeWS-FontSizeDec) emacscmd} ] /new DefaultMenu send def /Fonts [ (Sizes...) FontSizes (Styles...) FontStyles ] /new DefaultMenu send def { /ClientMenu [ (Fonts...) Fonts % (Courier...) Courier % (Screen....) Screen (Row x Col..) RowCol (Gnews) { (Gnews) emacscmd} (Info) { (info) emacscmd} (Policies...) Policies (Frame...) FrameMenu ] /new DefaultMenu send def } window send % select a color for the frame { /FrameFillColor 1 0 1 rgbcolor def } window send -- Bruce G. Barnett uunet!crdgw1!barnett From don@brillig.umd.edu Wed Aug 30 07:08:43 1989 Date: Wed, 30 Aug 89 07:08:43 -0400 To: NeWS-makers@brillig.umd.edu Subject: Postscript to rasterfile From: mcsun!hp4nl!dutrun!ben@uunet.uu.net (Ben Verwer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I am looking for a postscript to raster converter. It should be able to draw text along circles at high resolution (like the laserwriter does). Anyone has code for that? ----------------------------------------------------------------------------- Ben Verwer Lorentzweg 1 Pattern Recognition Group 2628 CJ Delft Faculty of Applied Physics The Netherlands Delft University of Technology +31(15)783247 From don@brillig.umd.edu Sun Sep 3 18:48:36 1989 Date: Sun, 3 Sep 89 18:48:36 -0400 To: NeWS-makers@brillig.umd.edu Subject: NeWSillustrator From: tktk@physics.att.com Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Does anyone have a good copy of the NeWSillustrator by Yves Bernard, Philips Research Lab Brussels? It seems that pieces of mine may have gotten trashed in transit. In any case my documentation is truncated. Has anyone converted it to color? Terry Kovacs tktk@physics.att.com From don@brillig.umd.edu Sun Sep 3 18:48:42 1989 Date: Sun, 3 Sep 89 18:48:42 -0400 To: NeWS-makers@brillig.umd.edu Subject: Filling an area with a pattern From: spectral!sjs@bellcore.com (Stan Switzer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Filling an area with a pattern is one of part of PostScript programming that you'd probably rather not think about. However, it turns out that there are a few games you can play with "image[mask]canvas" to do just that. To be truly "production quality," the code would have to do something reasonable with the "phase" of the pattern repeat. Anyone wondering how to force a color server to do monochrome-style halftoning and dithering will be interested in the "can2image" procedure. As always, enjoy, Stan Switzer sjs@bellcore.com ----------- #!/usr/NeWS/bin/psh % % patternfill: demonstrate how to fill areas with a pattern % % Copyright (C) 1989 by Stan Switzer. All rights reserved. % This program is provided for unrestricted use, provided that this % copyright message is preserved. There is no warranty, and no author % or distributer accepts responsibility for any damage caused by this % program. % % Stan Switzer sjs@bellcore.com /Ichthycon 64 64 1 [ 64 0 0 -64 0 64 ] { < 8080410004004000C004400200020109E820482020400401E001200200000423 F110210000008707F0042000001001FFB800100F2200200DF84410308001001F FC0108C04000143FDC0001082090007DFE002200200020EFF6110C00140003FF 7F051C89102106DFFF003C0008000FFDFF00761008403FFFF790FE00060C7077 FF80FE0001F1CF9DDF81FF008003EFEFFFC3EF00200FFBEFFBC77F08081EFFF7 6FCFFF81003FFEF6FFBFFB8000FFEFFBFF7EFFC801B87FFBDCEFBEC043F7BFBD F3F6F7E007EFDFFE0FF7FFE20FECDBFFFF7BFFF11FECDFBDBFFBBBF01EEFDFFF FFFBFFF83FF7BFFFDDFDFEF87FF87B6FFFBDEFFC6DDFFFFFFFFDFFBEFFFFFFFF FEFDFFFEFFBBBBFFDFFDDFFC5FBFFFDFFFFDFDD83E37FFFB7FFBEFF800FF6FFF FBFAFFF11FDFFF7FFF7BBEF21FFF7FF70FF7FFE00FFBFFFFF3F7EFC0477FF7DE BCEFFBC003F7FFFDFF7FBFC401FFFDFBFFBBFF8110EEBF7BFFCFF780023FFFF7 F6C7FB00001FF7F7BFD3FB00400F7F6FF781BF120003FFEFDD88FE0081F1CF9F FF82F680060C707DBB207E0008003FEFFF003C1008100FFFDF001C80900047BF F7090C00108003EBFE400200200800FFBE0041042001E077F60008C04242143F FC0912308004081D7800100F0804C80FF8A020200084C887F014210040040807 E100200400021023E00048001101E201C9124041000000518000400000101000 > } buildimage def % a slower version, but less memory intensive /patternfill1 { % bool canvas -> - 0 begin /Pattern exch def /Flag exch def gsave Pattern setcanvas clippath pathbbox /IH exch def /IW exch def pop pop grestore gsave initmatrix pathbbox points2rect /H exch def /W exch def /Y exch def /X exch def clip X Y H add IH sub translate /Across W IW add 1 sub IW idiv def /Down H IH add 1 sub IH idiv def IW IH scale Across Down { gsave dup { Flag Pattern imagemaskcanvas 1 0 translate } repeat grestore 0 -1 translate } repeat pop grestore newpath end } dup 0 20 dict put def /patternfill { % bool canvas -> - 0 begin /Pattern exch def /Flag exch def gsave Pattern setcanvas clippath pathbbox /IH exch def /IW exch def pop pop grestore gsave %defaultmatrix setmatrix initmatrix pathbbox points2rect /H exch def /W exch def /Y exch def /X exch def clip /Across W IW add 1 sub IW idiv def /Down H IH add 1 sub IH idiv def /WW IW Across mul def /PP WW IH 1 [ WW 0 0 IH neg 0 IH ] ( This is just a bunch of text. It serves no useful purpoes except to speed up the process of building this canvas which we overwrite soon anyway. We'd just use "newcanvas" except that only unmapped canvases which are retained have useful data in them and only parentless canvases are guaranteed to be retained. Buildimage seems to be the only way (other than "createdevice") to get a parentless canvas. ) buildimage def gsave PP setcanvas IW IH scale Across { Pattern imagecanvas 1 0 translate } repeat grestore X Y H add IH sub translate WW IH scale Down { Flag PP imagemaskcanvas 0 -1 translate } repeat grestore newpath end } dup 0 20 dict put def /can2image { % canvas -> canvas 0 begin /Can exch def gsave Can setcanvas clippath pathbbox /H exch def /W exch def pop pop grestore /Image W H 1 [ W 0 0 H neg 0 H ] ( A bunch of silly text to speed up this operation. The previous example explained it all, but I need to wax loquatious here. Blah blah, blah... ) buildimage def gsave Image setcanvas W H scale Can imagecanvas grestore Image end } dup 0 20 dict put def /picimage { [ exch false exch readcanvas can2image ] cvx } def /readface where { pop } { % read UUNET face files % If you want to know about this, mail me at sjs@bellcore.com % I figure if you are reading the code you are worth the trouble. % Trouble is that a lot of my outbound mail bounces... /readface { (NeWS/readface.ps) run readface } def } ifelse /faceimage { readface pop pop pop pop flipface can2image } def /Image { true Ichthycon } def % or try some of these: % /Image (/usr/NeWS/smi/mona-face.im8) picimage def % /Image (/usr/NeWS/smi/man.im8) picimage def % /Image (/usr/NeWS/smi/stormy.im8) picimage def % you'll need "readface.ps" for these: % /Image [ false (faces/brillig.umd.edu/don) faceimage ] cvx def % /Image [ false (faces/people/timmy) faceimage ] cvx def { /PaintClient { FrameTextColor setcolor ClientWidth ClientHeight scale .5 .5 .5 0 360 arc closepath Image patternfill } def /PaintIcon { gsave IconCanvas setcanvas IconFillColor fillcanvas IconTextColor setshade clippath Image patternfill1 grestore } def /FrameLabel (Pattern Fill) def reshapefromuser map } framebuffer /new DefaultWindow send send From don@brillig.umd.edu Fri Sep 8 23:15:21 1989 Date: Fri, 8 Sep 89 23:15:21 -0400 To: NeWS-makers@brillig.umd.edu Subject: Mass Acknowledgement: Votes for comp.object From: sei!ajpo!eberard@pt.cs.cmu.edu (Edward Berard) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) According to the rules: > It is permitted to post a "mass acknowledgement" in which all the names > of those from whom votes have been received are posted, as long as no > indication is made of which way anybody voted until the voting period > is officially over. Since I have received almost 500 votes, and since many of my attempted replies have bounced, I am posting this "mass acknowledgement." If you do not see your net address here (I have sorted them), then I have not received your vote. If you would still like me to attempt to send you an individual acknowledgement, send me e-mail (eberard@ajpo.sei.cmu.edu), or phone (301-353-9652). -- Ed Berard -------------------------------------------------------------- A List of All Votes Received For the Formation of Comp.Object (As Of September 4, 1989) [Total Votes Received = 490] 6sigma!blm@beaver.cs.washington.edu Brian Matthews 880716a%ACADIA.BITNET@VMA.CC.CMU.EDU Dave aarons%cogs.sussex.ac.uk@NSFnet-Relay.AC.UK Aaron Sloman ab@imperial-software-tech.co.uk Andy Bartlett ACARGILE%STANFORD.BITNET@VMA.CC.CMU.EDU Andy Cargile acd4!mjb@uunet.UU.NET Mike Bryan adiron!jond@uunet.UU.NET Jonathan Doughty adiseker@potomac.ads.com Andrew Diseker adoyle@BBN.COM Allan Doyle aem@ibiza.cs.miami.edu a.e.mossberg afscian@violet.waterloo.edu Anthony Scian aij%computing-maths.cardiff.ac.uk@NSFnet-Relay.AC.UK Andrew C. Jones aiken@aerospace.aero.org Timothy A. Aiken Alain.Michard@mirsa.inria.fr Alain Michard alanm@cadnetix.com Alan F. McCartney allbery@NCoast.ORG Brandon S. Allbery AMXMC-SEL@WSMR-SIMTEL20.ARMY.MIL Mark Oestmann anders@cuisun.unige.ch Bjornerstedt Anders andry%capsogeti.fr@csinn.uucp Francois Andry andy@ads.com Andy Cromarty andyd@pogo.wv.tek.com Andy Davidson ane@cs.brown.edu Alan Ewald anund@idt.unit.no Anund Lie aro@compsci.aberystwyth.ac.uk Andrew Ormsby array!len@uunet.UU.NET Leonard Vanek ath@prosys Anders Thulin bakken@arizona.edu Dave Bakken bard@cs.cornell.edu Bard Bloom bbadger%X102C@HARRIS-ATD.COM Badger BA 64810 beard@ux3.lbl.gov Patrick C Beard bengsig@nlhp3.oracle.nl Bjorn Engsig bengtl@MATHS.LTH.Se Bengt Larsson benzinger@nada.kth.se Mikael Benzinger berkowit@BBN.COM ? berre%si.uninett@nac.no Arne Berre bg@nada.kth.se Bj|rn Gr|nvall bgillett@polyslo.CalPoly.EDU Bradley J. Gillette bjornk@ifi.uio.no Bj|rn Kirkerud bjw@bbn.com Benjamin J. Woznick blondon@ajpo.sei.cmu.edu Bob London bms@aplpy.jhuapl.edu Brenda Spaur bob@odi.com Bob Miner bober@cs.wisc.edu Paul M. Bober Bobrow.pa@Xerox.COM Danny Bobrow BOSCO%FRANCE@cs.umass.edu Michel F. Bosco boubez@bass.rutgers.edu Toufic Boubez bousse@escalier_a.irisa.fr Marc Bousse bradr@Sun.COM Brad Rubenstein brian@apollo.com Brian Holt brosgol@ajpo.sei.cmu.edu Ben Brosgol bruce@SLC.COM Bruce Schuchardt bwhite@umb.edu Bill White byennaco@East.Sun.COM Robert Yennaco calmasd.Prime.COM!wlp%sdcsvax@ucsd.edu Walter Peterson carm@umd5.umd.edu Rick Chimera cca@newton.physics.purdue.edu Charles C. Allen cci632!ccird7!tvf@cs.rochester.edu Tom Frauenhofer cdaf@iuvax.cs.indiana.edu Charles Daffinger charleen@ads.com Charleen Bunjiovianna charlie@genrad.com Charlie D. Havener cheng%pollux.usc.edu@usc.edu Chien-Ming Cheng ciamac@sci.ccny.cuny.edu Ciamac Moallemi ciemo@bananapc.wpd.sgi.com Dave Ciemiewicz claris!drc@ames.arc.nasa.gov Dennis Cohen clrk@tank.uchicago.edu Clark Wilson cmh@sunspot.larc.nasa.gov C. Michael Holloway cobourn@dingo.ece.cmu.edu Thomas Cobourn convex!rcunning@uxc.cso.uiuc.edu Randy Cunningham cooper@sde.hp.com Ken Cooper COSC5SH@uhvax1.uh.edu Unbeliever cox@stepstone.com Brad Cox craigt@sybase.com Craig Thomas curtis@se-sd.sandiego.ncr.com Curtis d8sjoma@dtek.chalmers.se Martin Sjoeblom d88-jwa@nada.kth.se Jon W{tte dag@Control.LTH.Se Dag Michael Bruck dami@cui.uucp Laurent Dami. daniels@cse.ogc.edu Scott David Daniels dashman@rti.rti.org Eric Dashman dave%munge@rand.org Dave McArthur dave@uswest.com Dave Taenzer daveb@tahoe.wpd.sgi.com Dave Babcock David J. Scheerer | The Johns Hopkins University David J. Scheerer db%lfcs.edinburgh.ac.uk@NSFnet-Relay.AC.UK Dave Berry de@COMP.LANCS.AC.UK David England dean@sun.soe.clarkson.edu Dean R. Swan debbie%hpldlh@hplabs.hp.com Debbie Hamilton decvax!goldfnch.MV.COM!freb@decwrl.dec.com Karl Freburger decvax!zinn.MV.COM!mem@decwrl.dec.com Mark E. Mallett demers@cs.ucsd.edu Dave DeMers dempsey@Kodak.COM Richard C. Dempsey dermer@CS.BU.EDU Richard Dermer des%amara.uucp@sharkey.cc.umich.edu Dave Steinhoff DESMEDT%HNYKUN53.BITNET@VMA.CC.CMU.EDU Koenraad De Smedt desoi@CSSUN.tamu.edu John DeSoi deutsch@parcplace.com Peter Deutsch dg1v+@andrew.cmu.edu David Greene dg@sybase.com David Gould dgaw@ads.com David Gaw dhw@itivax.iti.org David H. West dialogic!paul@uunet.UU.NET Paul Bennett diana@tilde.csc.ti.com Diana Sparacin dirk%BLEKUL60.BITNET@CUNYVM.CUNY.EDU Dirk Craeynest djg@pyrnova.pyramid.com Don Giberson dl@oswego.oswego.edu Doug Lea doner%henri@hub.ucsb.edu John Doner druhi!weh@att.att.com Bill Hopkins drutx!kvt@att.att.com Kim Tran dsc@osteocyber.ortho.hmc.psu.edu david s. channin dsill@relay.nswc.navy.mil Dave Sill dumphres%galaxy@afit-ab.arpa David A. Umphress dupuy@cs.columbia.edu Alexander Dupuy eachus@mbunix.mitre.org Robert I. Eachus eaker@sungod.crd.ge.com Chuck Eaker ecrcvax!fendt@ames.arc.nasa.gov Michael Fendt ecrcvax!hugh@ames.arc.nasa.gov Hugh Grant ed@hpmtles.hp.com Ed Schlotzhauer ed@sprawl.yorku.ca Ed McCurdy edean@East.Sun.COM Ed Dean edhall%ives@rand.org Ed Hall edwin@cwi.nl Edwin Blake eiffel!Athens!nosmo@uunet.UU.NET Vincent Kraemer ellis@tekcrl.labs.tek.com ? elsie!ado@alw.nih.gov Arthur David Olson encore!pinocchio!cook@talcott.harvard.edu Dale C. Cook eric@cfisun.cfi.COM Eric Read ericb@Atherton.COM Eric Black ericco%ssl.Berkeley.EDU@jade.berkeley.edu Eric C. Olson eriko@idt.unit.no Erik Odberg escd!es37!nils@decwrl.dec.com Nils Davis esj@wiis.wang.com Eric S. Johansson etxerin@tore.ericsson.se Erik Nyquist euakem@euas10.ericsson.se Magnus f-jar@ifi.uio.no ? FBUSHNELL@carleton.edu Fitz Bushnell fchan@vlsi.waterloo.edu Francis Chan fdfd@UKC.AC.UK ? fhadsell@csm9a.Colorado.EDU Frank Hadsell ficc!sms@uunet.uu.net Stanley M. Sutton florman@rand.org Bruce Florman fm@Sun.COM Farzin Maghoul foote@cs.uiuc.edu Brian Foote ford@m2.csc.ti.com Steve Ford friedl@vsi.com Stephen J. Friedl frode@m2cs.uu.no Frode Odegard frodo%ncr-fc%ncr-sd@ncrlnk.dayton.ncr.com David Fletcher fxtv@zeta.ibp.fr Francois-Xavier TESTARD-VAILLANT fzhauck@immd4.informatik.uni-erlangen.de Franz Hauck gabork@vuse.vanderbilt.edu Gabor Karsai gary%erg.aberdeen.ac.uk@NSFnet-Relay.AC.UK Gary Whittington gary@svx.sv.dg.com Gary Bridgewater garym@ulysses.cognos Gary Murphy gerhardt@ajpo.sei.cmu.edu Mark Gerhardt gerritsn@tropicsa.prl.philips.nl Mirjam Gerritsen GEW@DLGM.DARESBURY.AC.UK Royd Whittington gilbert%cs.glasgow.ac.uk@NSFnet-Relay.AC.UK Gilbert Cockton gill!paul@uunet.UU.NET Paul Nordstrom gillis@nsr.bioeng.washington.edu Steve Gillispie gjb@cs.brown.edu ? gjf@cs.unc.edu Gordon Ferguson glenn@synaptics.com Glenn Gribble goss@ESE.ESSEX.AC.UK Gossain Sanjiv gra@East.Sun.COM Gary R. Adams greene@mcc.com Kevin Greene greg%mickey@WLV.IMSD.CONTEL.COM Greg Christy grogono@concour.cs.concordia.ca Peter Grogono grs@cics.wustl.edu Guillermo R. Simari gub@vax.ftp.com Glen Daniels gwills@maths.tcd.ie ? hall@eclipse.stanford.edu Keith Hall halley!tzone!san@cs.utexas.edu Steve Sanderson ham@Neon.Stanford.EDU ? hankin@osf.osf.org Scott Hankin hansen@pegasus.ATT.COM t.l.hansen harvax!glenn@Sun.COM Glenn Kasten harvax!jyang@uunet.UU.NET Jiun-Sheuan Yang hascall@atanasoff.cs.iastate.edu John Hascall hassell@tramp.Colorado.EDU Christopher Hassell henderso@antares.mcs.anl.gov Mark Henderson hernan2%pyr@gatech.edu HERNAN E. ASTUDILLO hh@tut.fi ? hibbert@wsl.dec.com Chris Hibbert hinman@ginosko.samsung.com David Hinman hosking%emu@CS.UMASS.EDU Tony Hosking howard@dahlbeck.ericsson.se Howard Gayle hsfmsh!dumbcat!marc@Sun.COM Marco S Hyman hugh@toad.com Hugh Daniel hughes@hughes.network.com J. Hughes hvannber@turing.cs.rpi.edu Ebba Hvannberg ide!snoopy!kanitkar@Sun.COM Rajan Kanitkar ihlps!mckee@att.att.com Roger A Mckee ileaf!io!fairport!edb@EDDIE.MIT.EDU Ed Blachman ima!karl@harvard.harvard.edu Karl Heuer imf%aiai.edinburgh.ac.uk@NSFnet-Relay.AC.UK Ian Filby inc@tc.fluke.COM Gary Benson info-vax@kl.sri.com Craig Hubley intermec!allenm@uunet.UU.NET Allen Mathis ISADER%HHEOUH50.BITNET@VMA.CC.CMU.EDU Derk Ederveen issi!guzman@cs.utexas.edu Adolfo Guzman iwarp.intel.com!pweiss@omepd.intel.com Paul Weiss jack%cs.glasgow.ac.uk@NSFnet-Relay.AC.UK Jack Campin jacks@pogo.wv.tek.com Jack Slingerland jacob@blackbox.gore.com Jacob Gore jamesm@uunet.uu.net James M. Moore jas@venera.isi.edu ? jcg@iris.brown.edu Jim Grandy jdavidso@ajpo.sei.cmu.edu Jim Davidson jdchrist@watcgl.waterloo.edu Dan Christensen jdye@ads.com John Dye jeanp@philmtl.philips.ca Jean Pierre Lortie jerbil@csvax.caltech.edu Joe Beckenbach jette@ASC.SLB.COM Chris Jette jfh@rpp386.Cactus.ORG John F. Haugh II jhugart@umaxc.weeg.uiowa.edu Jacob Hugart JI8%PSUVM.BITNET@VMA.CC.CMU.EDU ? jimst@honda.fdi.tek.com Jim Stanley jls@attctc.Dallas.TX.US Jerome Schneider jmaloney@june.cs.washington.edu ? jnh@ecemwl.ncsu.edu Joseph N. Hall jnino@cs.utexas.edu ? joed@ihlts.att.com Joseph W Davison joemac@apple.com Joe MacDougald johnson@cs.uiuc.edu Ralph Johnson jourdan@seti.inria.fr Martin Jourdan jps@cs.brown.edu ? jrc@concurrent.co.uk John Connett jstolzy@nrtc.northrop.com Janice Stolzy jto@tolsun.oulu.fi Jarkko Oikarinen judy@mips.com Judy Szikora jyb@camcon.co.uk John Bromell kamal@hpda.hp.com Kamal Karlapalem kannan@cerc.wvu.wvnet.edu R. Kannan kcby@ncratl.atlanta.ncr.com KC Burgess Yakemovic keghamr@philmtl.philips.ca Kegham Redjebian kennii%wybbs.UUCP@sharkey.cc.umich.edu Kenn Booth-II kevin@jtsv16.jts.com kevin brighton kevinf@spocksbrain.cognos ? klee@wsl.dec.com Ken Lee kobryn@esosun.css.gov Cris Kobryn krichard@axion.british-telecom.co.uk Keith Richards krona@draken.nada.kth.se Kjell Krona kthompso@ptolemy.arc.nasa.gov Kevin Thompson laffra%HLERUL5I.BITNET@VMA.CC.CMU.EDU Chris Laffra lakshman@cs.uiuc.edu T.K.Lakshman landay@cory.Berkeley.EDU James A. Landay lanning@arisia.xerox.com S.M. Lanning larsen@imada.dk Larsen Soren learmont@Sun.COM Tim Learmont levin@BBN.COM Joel B Levin levisonm@qucis.queensu.ca Mark Levisonm lewis@bevsun.bev.lbl.gov Steve Lewis lhf@aries5.uwaterloo.ca Luiz H. deFigueiredo liberte@cs.uiuc.edu Daniel LaLiberte Lindsay.Marshall%newcastle.ac.uk@NSFnet-Relay.AC.UK Lindsay F. Marshall lisch@pdx.mentor.com Ray Lischner liz@grian.cps.altadena.ca.us Liz Allen-Mitchell lm@logm1.logm.se Lennart Mansson locke@pdn.paradyne.com Richard Locke longstaf@lll-crg.llnl.gov Thomas A Longstaff lotus!paulm@uunet.UU.NET Paul Morganthall lotus!pmancuso@uunet.UU.NET Pat Mancuso MAC.ROMOS@applelink.apple.com Eric Ulevik maclaugh@halibut.nosc.mil Janet M. Maclaughlin mak@gvax.cs.cornell.edu Mesaac Makpangou malhotra@vlsi.waterloo.edu Prem Malhotra marc@cuisun.unige.ch Stadelmann Marc MARK%RICEVM1.RICE.EDU@icsa.rice.edu Mark R. Williamson mark@DRD.Com Mark Lawrence markabel@uswest.com Mark Abel marks%stewart@gargoyle.uchicago.edu Mitchell Marks marti@inf.ethz.ch Robert Marti maryw@tekchips.labs.tek.com Mary H. Wells marzano@hpfcpq.hp.com Lou Marzano mathis@ctc.contel.com Bob Mathis mattias@emil.CSD.UU.SE Mattias Waldau mclean@unix.cis.pittsburgh.edu Stuart Mclean mcvax!ascom!rene@uunet.UU.NET Rene Bach mcvax!ascom!rut@uunet.UU.NET Claude Rubattel mcvax!crcge1.cge.fr!toledano@uunet.UU.NET Maxime Toledano mcvax!hslrswi!telsys!ruef@uunet.UU.NET Bernhard D. Ruef mcvax!loria.crin.fr!charoy@uunet.UU.NET Francois CHAROY mdlrth.dnet!hood@lecgwy.lec.lockheed.com Doug Hood mellgren%capsogeti.fr@csinn.uucp Dag Mellgren mellon@decwrl.dec.com Ted Lemon mendel@db.toronto.edu Alberto Mendelzon metz@iam.unibe.ch Igor Metz meyer@ifi.unizh.ch Urs Meyer mgardi@watdcsu.waterloo.edu M.Gardi - ICR\(David Rowley) mhgsp!evans@att.att.com Steve Crandall mhi@edsdrd.eds.com Mamdouh H. Ibrahim mholden@ajpo.sei.cmu.edu Maretta Holden michael@titan.tsd.arlut.utexas.edu Michael Gibson micky@Sun.COM Choudhary microsoft!johnro@uunet.uu.net John Rogers microsoft!michaelw@uunet.uu.net Michael Winser mikael@sm.luth.se Mikael Eriksson mitchell@community-chest.mitre.org George Mitchell mjc@SYS.UEA.AC.UK Matthew Chalmers mjw@hplb.hpl.hp.com Mike Wray mlease@CSSUN.tamu.edu Mark Lease mlm@odi.com ? mmc@sybase.com Matthew McClure moiram@tekcae.cax.tek.com Moira Mallison monty@SLC.COM Monty Williams moose@octopus.tds.kth.se ]ke Nordin moose@spam.istc.sri.com Ruth Lang moss%adelie@CS.UMASS.EDU Eliot Moss mosseri@sor.inria.fr ? motcsd!dms!morris@apple.com Jim Morris moudgill@svax.cs.cornell.edu Mayan Moudgill msm@crowbar.dataio.Data-IO.COM Mike Meredith mtcs!geary!dan@uunet.UU.NET Dan Hydar MUHRTH%DB0TUI11.BITNET@VMA.CC.CMU.EDU Thomas Muhr munnari!appleoz.usg.apple.oz.au!ksand@uunet.UU.NET Kent Sandvik munnari!aragorn.cm.deakin.oz.au!peter@uunet.UU.NET Peter Horan munnari!batserver.cs.uq.oz.au!marshall@uunet.UU.NET Marshall Harris munnari!cheops.eecs.unsw.oz.au!marku@uunet.UU.NET Mark Utting munnari!chook.ua.oz.au!petera@uunet.UU.NET Peter J. Ashenden munnari!cluster.cs.su.OZ.AU!tim@uunet.uu.net ? munnari!ditsyda.oz.au!lindley@uunet.uu.net ? munnari!goanna.oz.au!pnm@uunet.UU.NET Paul Menon munnari!megadata.mega.oz.au!peter@uunet.UU.NET Peter Goodall munnari!mnrva.crl.bhp.com.au!STEVE@uunet.UU.NET Steve Garlick munnari!otc.otca.oz.au!glr@uunet.uu.net Gordon Rowell mwozny@sun9.Teknowledge.COM Mark Wozny nabiel@sics.se Nabiel Elshiewy naim@eecs.nwu.edu Naim Abdullah naser@prince.cs.columbia.edu Naser Barghouti ncjuul@diku.dk Niels Christian Juul NCOHEN@ibm.com Norman Cohen neilfay@idis.lis.pitt.edu Cornelius R. Fay III net%TUB.BITNET@VMA.CC.CMU.EDU Oliver Laumann nitrex!rbl@uunet.uu.net Rob Lake noibbc!werner@nluug.nl Werner de Bruijn novavax!dons3b1!don@ssd.harris.com Don Joslyn novavax!weiner@ssd.harris.com Bob Weiner nrai@pdx.MENTOR.COM Nitin Rai nuchat!mikel@uunet.UU.NET Michael W. Wellman obh@ifi.uio.no Ole Bjoern Hessen olender@sor.CS.ColoState.EDU Kurt Olender olmadsen@daimi.dk Ole Lehrmann Madsen olorin@dewey.cc.utexas.edu Dave Weinstein oplinger@minerva.crd.ge.com Brian Scott Oplinger oscar@cuisun.unige.ch Oscar Nierstrasz oz@nexus.yorku.ca Ozan Yigit page@CS.UCLA.EDU Tom Page PALEXANDER@kuhub.cc.ukans.edu Perry Alexander pantor!richard@uunet.UU.NET Richard Sargent paulk@caen.engin.umich.edu paul kominsky pch@vega.crd.ge.com Pete Halverson penneyj@SLC.COM D. Jason Penney per@cwi.nl Per Spilling perez@ti-csl.csc.ti.com edward perez perry@apollo.com Jim Perry pierre@tcom.stc.co.uk Pierre Best piet@praxis.cs.ruu.nl Piet van Oostrum plogan@pdx.mentor.com Patrick Logan poffen@sj.ate.slb.com Russ Poffenberger popovich@bleecker.cs.columbia.edu Steve Popovich portal!cup.portal.com!Cliff@Sun.COM ? portal!cup.portal.com!dcb@Sun.COM Dan Brotherton portal!cup.portal.com!Jerome_V_Vollborn@Sun.COM Jerome Vollborn prange@erl.mit.edu Michael D. Prange praxis!rmr@uunet.UU.NET Rosamund Rawlings praxis!tjh@uunet.UU.NET Tim Huckvale prlb2!prlb!jvdgoor-mswe-decnet@uunet.uu.net Jac van den Goor quass@eclipse.stanford.edu Dallan W. Quass quiniou@sunia.irisa.fr Rene Quiniou raible@ew09.nas.nasa.gov Eric L. Raible rakow@ipsi.darmstadt.gmd.dbp.de Thomas C. Rakow ramani@na-net.stanford.edu Ramani Pichumani rayv@cs.uoregon.edu Ray Vukcevich rec%elf115@uunet.UU.NET Roger Critchlow render@cs.uiuc.edu Hal Render repo!rae@alias Reid Ellis rhoda@sybase.com Rhoda Neimand rich@osc.osc.COM Richard Fetik rick@jessica.stanford.edu Rick Wong riggs@East.Sun.COM Roger Riggs riks@csl.sony.co.jp Rik Fischer Smoody rit!prague!mjl@cs.rochester.edu Michael Lutz rjg@compsci.aberystwyth.ac.uk Bob G rleroux1@uvicctr.UVic.ca Roger Leroux rmarcus@atc.boeing.com Bob Marcus robert@r2d2.sgi.com Robert Skinner rracine@ajpo.sei.cmu.edu Roger Racine rtech!rtech!linda@Sun.COM Linda Mundy rti!bnrunix!rick@mcnc.mcnc.org Richard Johns rvadnais@sactoh0.UUCP Robert J. Vadnais rw%beta@LANL.GOV Rena Whiteson rxc@cs.purdue.edu Rajiv Choudhary ryan@sml16.enet.dec.com Mike Ryan rylander@src.honeywell.com Karen Rylander sakkinen@jyu.fi Markku Sakkinen sanderso@turing.cs.rpi.edu Donald B. Sanderson sartin@hplabsz.hpl.hp.com Rob Sartin sasdjb@sas David J. Biesack savinen@karl.hkkk.fi Teppo Savinen scarfone@cs.Buffalo.EDU Stephen Scarfone scc%computer-lab.cambridge.ac.uk@NSFnet-Relay.AC.UK Stephen Crawley scottj%ncrcae@ncrlnk.dayton.ncr.com LSJ scp@sfi.santafe.edu Stephen C. Pope scs@itivax.iti.org Steve Simmons sdm@cs.brown.edu ? seal%canyon.uucp@nike.cair.du.edu Antony Landsman shd@mcc.com Scott Danforth shepard@qucis.queensu.ca ? shimeall@cs.nps.navy.mil Tim Shimeall shopiro@research.att.com Jonathan Shopiro siraj@harvard.harvard.edu Ra'ad Siraj skalko@software.org Peggy Skalko Shepard snicoud@atc.boeing.com Stephen Nicoud sommar@enea.se Erland Sommarskog speyer%cadillac.cad.mcc.com@mcc.com Bruce Speyer STDUSR09%ETSUACAD.BITNET@VMA.CC.CMU.EDU Stephen G. Davis steve%cs.qmc.ac.uk@NSFnet-Relay.AC.UK Steve Cook stuart@natinst.com Don Stuart sumax!spector@beaver.cs.washington.edu Mitchell Spector sun!portal!cup.portal.com!Orion ? susser@hypermail.apple.com Joshua Susser svendfrl@daimi.dk Svend Frolund swami@cs.uiuc.edu Swaminathan Natarajan sww@edsdrd.eds.com Scott W. Woyak T.Day@Cs.Ucl.AC.UK Tim Day tage@sfd.uit.no Tage Stabell-Kuloe tcm@Sun.COM Terrence Miller teg!sebby@shamash.cdc.com Paul Sebby tegra!calypso!msaleski@swan.ulowell.edu mark saleski terry_bush@sematech.mrc.utexas.edu Terry Bush texbell!camdev!sscott@cs.utexas.edu Steve Scott thorn@godot.radonc.unc.edu Jesse Thorn tk@allegra Thomas Kirk tking@src.honeywell.com Tim King tla@bartok.att.com Terry L Anderson tom@hprmokg.hp.com Thomas Vachuska tom@stellar.Stellar.COM Thomas Faulhaber toma@hpsadri.hp.com ? tomas@m2cs.uu.no Tomas Felner tombre@weissenburger.crin.fr Karl Tombre tony@boulder.Colorado.EDU Tony Sloane tower@bu-it.BU.EDU ? tphillip@grads.cs.ubc.ca Tarmi Phillips tracton@godot.radonc.unc.edu Greg Tracton travis@douglass.cs.columbia.edu Travis Lee Winfrey TROLFS@vax1.tcd.ie Thomas Rolfs tscott%weber@ucsd.edu Tony Scott tsf@cs.cmu.edu Timothy Freeman ttwang@polyslo.CalPoly.EDU Thomas Wang tyen@cs.utexas.edu Anthony Yen unf7!hite386!steve@bikini.cis.ufl.edu Steve Hite unido!infotue!klaeren@uunet.UU.NET Dr. Herbert Klaeren unido!nermal.ls5.informatik.unidortmund.de!guendel@uunet.UU.NET A. Guendel unido!sbsvax!ks@fb10vax.sbsvax Kurt Schreiner ursa!booboo!sean%gotham.East@Sun.COM Sean Cunningham USERWEAT%UALTAMTS.BITNET@VMA.CC.CMU.EDU John Wetherill uunet!vaxnod.dnet!unido!scsshh!eva@gateway.sei.cmu.edu Pete Evans uw-beaver!ssc-vax!bcsfse!bhagwan@uunet.UU.NET Al McPherson van-bc!mdavcr!carto!aew@uunet.UU.NET Alan Walford var@iris.brown.edu Victor A. Riley vlsisj!denis@decwrl.dec.com Denis Bohm voder!nsc!burnett@apple.com John Burnett wake@whyvax.enet.dec.com Bill Wake walkerb@tramp.Colorado.EDU Brian Walker walter@KUB.NL Walter Daelemans watmath!alberta!leigh@uunet.uu.net leigh willard wcapling@vaxc.Teknowledge.COM Wayne Caplinger weinstei@palantir.gsfc.nasa.gov Stuart Weinstein werner@rascal.ics.UTEXAS.EDU Werner Uhrig west@chance.csc.ti.com Roger West wgg@june.cs.washington.edu William Griswold wheeler@ida.org David Wheeler whitney@sdsu.edu Roger Whitney wilk@svax.cs.cornell.edu Michael Wilk wiml@blake.acs.washington.edu William Lewis win@gatech.edu Win Strickland Jr windemut@uxh.cso.uiuc.edu Andreas Windemut winfave@dutrun.tudelft.nl Alexander Verbraeck winffww@dutrun.tudelft.nl Folkert W. Wierda winters@apollo.com D. Winters WOODRUFF@trojan.llnl.gov John Woodruff wright@hsi.com Gary Wright wrs@apple.com Walter Smith wtwolfe@hubcap.clemson.edu Bill Wolfe wyle@inf.ethz.ch ? xanadu!ravi@uunet.UU.NET Ravi Pandya yessayan@javel.ICS.UCI.EDU Harry Yessayan yoram@link.cs.columbia.edu Yoram Eisenstadter young@umn-cs.cs.umn.edu Mike Young zmhasan@violet.waterloo.edu Ziaul Masum Hasan zwilling@cs.wisc.edu Mike Zwilling From don@brillig.umd.edu Fri Sep 8 23:26:12 1989 Date: Fri, 8 Sep 89 23:26:12 -0400 To: NeWS-makers@brillig.umd.edu Subject: NeWS/X11 -- What and when? From: tigger!adamb@boulder.colorado.edu (Adam 'Velvis' Beguelin) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) What is the latest on what will be included in the NeWS/X11 product? Will there be a new version of sunveiw based on the open look specs? Will there be a development environment to help programmers develop news applications? How will programs that ran under NeWS 1.1 fit in? Will they need to be rewritten again? Any predictions on when it will be released? ** **** Adam Beguelin Computer Science Department **** *** adamb@boulder.Colorado.Edu University of Colorado ***** **** 303/492-7906 Boulder, CO 80309-430 ********** ***** "I may not be totally perfect, but parts of me are excellent." From don@brillig.umd.edu Fri Sep 8 23:40:28 1989 Date: Fri, 8 Sep 89 23:40:28 -0400 To: NeWS-makers@brillig.umd.edu Subject: Running NeWS in the Overlay Plane From: mcsun!ukc!icdoc!qmc-cs!ads@uunet.uu.net (Adam Billyard) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Anyone know what environment variables etc I need to set up to make NeWS run in a 1-bit overlay plane on a colour Sun3/60? I just find colour too slow for my needs. I tried setting FRAMEBUFFER to the overlayplane device but it didn't like that. Any suggestions? Adam. -- -------------------------------------------------------------------------------- JANET: ads@cs.qmc.ac.uk | Famous lines of "Its a Knockout!": ARPA: ads%cs.qmc.ac.uk@nss.cs.ucl.ac.uk| "Ah thank a weil playh, ma jockher." BITNET: ads%uk.ac.qmc.cs@ukacrl.bitnet | From don@brillig.umd.edu Fri Sep 8 23:40:34 1989 Date: Fri, 8 Sep 89 23:40:34 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Running NeWS in the Overlay Plane From: agate!bionet!csd4.csd.uwm.edu!gem.mps.ohio-state.edu!rpi!crdgw1!montnaro@ucbvax.Berkeley.EDU (Skip Montanaro) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Here's the shell script we use to put NeWS in the b/w plane and Suntools in the color plane. (Color 3/60s running SunOS 3.5.) #! /bin/sh # Program: win_news_bw.sh # Version: @(#)win_news_bw.sh 1.2 9/5/88 21:25:00 # Author: Skip Montanaro # Date: 9/1/88 # Description: runs NeWs in 3/60 BW plane, Suntools in Color plane # Environment: # Sun 3, Sun Unix 3.5 # Notes: # # Revision History: # Name Date Comments # ---- ---- -------- # Skip 9/1/88 created # Skip 9/5/88 added wait at end to prevent premature termination export PATH FRAMEBUFFER FRAMEBUFFER=/dev/cgfour0 suntools -8bit_color_only -toggle_enable -d $FRAMEBUFFER & PATH=/usr/NeWS/bin:$PATH FRAMEBUFFER=/dev/bwtwo1 news_server & sleep 10 adjacentscreens /dev/bwtwo1 -r /dev/cgfour0 wait -- Skip Montanaro (montanaro@crdgw1.ge.com) From don@brillig.umd.edu Fri Sep 8 23:40:44 1989 Date: Fri, 8 Sep 89 23:40:44 -0400 To: NeWS-makers@brillig.umd.edu Subject: Visual Programming From: Don Hopkins Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) A great book about visual programming is: Visual Programming Nan C. Shu (C) 1988 by Van Nostrand Reinhold ISBN: 0-442-28014-9 Lots and lots of pictures of many different systems! Check out the Tinkertoy Lisp code displayed in fig. 12-2, p. 290. Imagine PostScript functions with multiple outputs on the right as well as multiple inputs on the left! -Don From don@brillig.umd.edu Sat Sep 9 02:57:00 1989 Date: Sat, 9 Sep 89 02:57:00 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Visual Programming From: giza.cis.ohio-state.edu!bob@tut.cis.ohio-state.edu (Bob Sutterfield) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <8909090308.AA23289@brillig.umd.edu> don@BRILLIG.UMD.EDU (Don Hopkins) writes: Imagine PostScript functions with multiple outputs on the right as well as multiple inputs on the left! Sounds like PIGS on the old Evans & Sutherland workstations. You could type in a dataflow language, or you could edit a circuit diagram and have the language spit out the back for digestion by the compiler. I think PostScript would be a nicer language in which to express the system, though. From don@brillig.umd.edu Thu Sep 14 08:16:33 1989 Date: Thu, 14 Sep 89 08:16:33 -0400 To: NeWS-makers@brillig.umd.edu Subject: FINAL CALL FOR VOTES: Formation of comp.object From: sei!ajpo!eberard@pt.cs.cmu.edu (Edward Berard) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Call For Votes: The Formation of Comp.Object Based on an original proposal, and over two weeks of discussion, I would like to announce a "call for votes" on the formation of a new, unmoderated newsgroup, i.e., "comp.object." The purpose of this group will be to provide a forum for the discussion of issues and events which are of interest to the object-oriented community as a whole. Object-oriented thinking affects everything, from management practices to the schema of the databases, from programming language selection to in-house software development standards, and from training to personnel selection. To attempt to keep the focus solely on the syntax and semantics of a particular programming language is unrealistic. COMMON INTERESTS Many people are interested in object-oriented technology. Object-oriented approaches have been used for communications, information systems, real-time embedded applications, database design, and even hardware design. Although the people implementing these applications may have used quite a variety of different programming languages, and an even wider variety of methodologies, they share many common problems and concerns. Recently, there have been questions about where to post such things as: - A bibliography for the latest European Conference on Object-Oriented Programming (ECOOP) - Calls for Papers for the ever-increasing numbers of conferences and meetings dedicated in whole, or in part, to object-oriented topics - Questions about object-oriented methodologies, e.g., object-oriented requirements analysis, object-oriented design, and others - Questions about how to document objects and classes - Questions about the availability of object-oriented CASE tools - Discussions of topics of general interest to the object-oriented community, e.g., interoperability, object-oriented data bases, objectification, and object-oriented metrics. Comp.object will provide a forum for all these topics. POSSIBLE TOPICS FOR DISCUSSION The following is a partial list of topics which can be discussed on comp.object: - definitions of terms and concepts - object-oriented domain analysis - object-oriented requirements analysis - object-oriented design - other object-oriented life-cycle issues, e.g., object-oriented testing - object-oriented databases - object-oriented computer hardware - object-oriented metrics - object-oriented issues in a real-time environment - the impact of object-oriented technology on existing standards and policies - documentation techniques for object-oriented approaches - transitioning to an object-oriented approach - teaching object-oriented concepts and languages. - management of object-oriented technology - automated tools for object-oriented approaches - object-oriented software engineering environments - concurrency in an object-oriented approach - estimating and costing an object-oriented approach - reusability - interoperability - objectification Issues such as the syntax and semantics of various object-oriented programming languages is more appropriately addressed in the newsgroups for these languages. However, for example, the impact of the selection of a particular programming language for a particular project would be an appropriate topic. HOW TO MAKE IT HAPPEN: FOLLOWING THE RULES This "call for votes" for comp.object is being issued on August 26, 1989, and will last for 30 (thirty) days, ending on September 25, 1989. Votes received prior to August 26, 1989, or after September 25, 1989 do not count. (If you sent me a "vote" prior to August 26, 1989, and I did receive almost 150 "votes," please be sure to vote again.) ************************************************************************ * Please direct all votes (for and against) to me via e-mail. I will * * act as the vote taker. My e-mail address is eberard@ajpo.sei.cmu.edu.* ************************************************************************ What follows are relevant excerpts from "the rules." Please read them carefully before voting: > The voting period should last for at least 30 days, no matter what the > preliminary results of the vote are. The exact date that the voting period > will end should be stated in the call for votes. Only votes that arrive > on the vote-taker's machine prior to this date may be counted. > ONLY votes MAILED to the vote-taker will count. Votes posted to the net > for any reason (including inability to get mail to the vote-taker) and > proxy votes (such as having a mailing list maintainer claim a vote for > each member of the list) may not be counted. > Votes may not be transferred to other, similar proposals. A vote shall > count only for the EXACT proposal that it is a response to. In particular, > a vote for or against a newsgroup under one name shall NOT be counted as > a vote for or against a newsgroup with a different name or charter, > a different moderated/unmoderated status or (if moderated) a different > moderator or set of moderators. > Votes MUST be explicit; they should be of the form "I vote for the > group foo.bar as proposed" or "I vote against the group foo.bar > as proposed". The wording doesn't have to be exact, it just needs to > be unambiguous. In particular, statements of the form "I would vote > for this group if..." should be considered comments only and not counted as votes. > The Result > 1) At the completion of the 30 day voting period, the vote taker must post > the vote tally and the E-mail addresses and (if available) names of the > votes received to news.announce.newgroups and any other groups or mailing > lists to which the original call for votes was posted. > 2) AFTER the vote result is posted, there will be a 5 day waiting period > during which the net will have a chance to correct any errors in > the voter list or the voting procedure. > 3) AFTER the waiting period, and if there were no serious objections that > might invalidate the vote, and if 100 more YES/create votes are received > than NO/don't create, a newgroup control message may be sent out. > If the 100 vote margin is not met, the group should not be created. If all goes well, comp.object may have met all necessary requirements just before the beginning of OOPSLA '89 on October 2, 1989. -- Edward V. Berard Berard Software Engineering, Inc. 18620 Mateney road Germantown, Maryland 20874 Phone: (301) 353-9652 E-Mail: eberard@ajpo.sei.cmu.edu FAX: (301) 353-9272 From don@brillig.umd.edu Thu Sep 14 20:27:52 1989 Date: Thu, 14 Sep 89 20:27:52 -0400 To: NeWS-makers@brillig.umd.edu Subject: performance comparisons, anyone? From: rws@expo.lcs.mit.edu (Bob Scheifler) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Recently, Digital released something called "x11perf", which attempts to measure various aspects of server performance. It strikes me that the majority of these tests are not unique to X (e.g. most aren't bitblt, and most just do "paint" operations), and would translate quite readily into the NeWS environment. I'm wondering if anyone out there would be interested in redoing x11perf for NeWS. It really isn't that much code, and shouldn't take too long for someone familiar with NeWS. It would even be interesting to have two versions of some of the tests, one "over the wire" and one "send the algorithm across" in order to provide some measure of whether downloading really helps. x11perf is already being run against X11/NeWS servers, and inevitably there will be arguments about whether going through the X11 interpreter is or isn't reflecting the "true" performance of NeWS. A NeWS version could help. Any takers? From don@brillig.umd.edu Thu Sep 14 20:29:28 1989 Date: Thu, 14 Sep 89 20:29:28 -0400 To: NeWS-makers@brillig.umd.edu Subject: A PostScript Quine From: spectral!sjs@bellcore.com (Stan Switzer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) "'Yields falsehood when preceded by itself in quotes" yields falsehood when preceded by itself in quotes." -- W. V. O. Quine (paraphrase) A "quine" is a program which when evaluated yields its own representation. A quine can be formally described as a fixed point of a language's denotation function. Trivial evaluations (e.g.: literals) are excluded and the program cannot require any input data (e.g.: "cat cat.c"). In my experience, the merit of a language is inversely related to the length of its shortest quine. (Though I _am_ prejudiced toward reflective semantics.) For the heck of it, let's say a PostScript quine is a procedure "{...}" which when followed by "n { exec } repeat" yields the same (or equivalent) value for any non-negative integer value of "n" (including 0). The shortest I have found for PostScript is {{[ exch /dup load /exec load ] cvx} dup exec} Compare to Lisp: ((lambda(f)(list f (list 'quote f))) '(lambda(f)(list f (list 'quote f)))) or (ASCII) C: char*f="char*f=%c%s%c;main(){printf(f,042,f,042,012);}%c";main(){printf(f,042,f,042,012);} Not that it'll change your life or anything... Enjoy, Stan Switzer sjs@bellcore.com From don@brillig.umd.edu Thu Sep 14 20:31:02 1989 Date: Thu, 14 Sep 89 20:31:02 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: A PostScript Quine From: adobe!greid@decwrl.dec.com (Glenn Reid) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <17620@bellcore.bellcore.com> sjs@bellcore.com (Stan Switzer) writes: >For the heck of it, let's say a PostScript quine is a procedure >"{...}" which when followed by "n { exec } repeat" yields the same (or >equivalent) value for any non-negative integer value of "n" >(including 0). > >The shortest I have found for PostScript is > > {{[ exch /dup load /exec load ] cvx} dup exec} I must admit I don't understand quite what this is supposed to do, but it looks to me like it can get shorter. Why the 2 instances of "load", if you're trying to make it short? Does this not do the same thing: {{exch dup exec} dup exec} yields the same (or equivalent) value of what? How about a sample invocation, just so dim-wits like me can catch on? Thanks, Glenn From don@brillig.umd.edu Thu Sep 14 20:33:13 1989 Date: Thu, 14 Sep 89 20:33:13 -0400 To: NeWS-makers@brillig.umd.edu Subject: open windows From: Katy Kislitzin Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Newsfolks-- My sales rep has sent me two messages on sun's open windows aka X11/NeWS +. I am forwarding both messages on to the group, which I hope is legit. Have trimmed the offending sales rep's name from the message. This is the first of two messges. Note the EMPHASIS on x11. Note that NeWS provides x users with display postcript capablities. hmmmm.... looks like NeWS needs an image-lift. have fun. --kt ( uunet!syzygy!ktk, hoptoad!syzygy!ktk ) ------- Forwarded Message Subject: a little bit of info on Open Windows Please send all questions to ow@gorman (sun!gorman!ow). Sun will announce and begin shipping OpenWindows on Monday September 18, 1989. SPARC is the platform of choice for running OpenWindows. This message is intended to give you an update of the current status of the product. We will be sending additional information on September 10th, including pricing information. This update includes the following information: 1. OpenWindows Positioning (short) 2. Availability - ---------------------------------------------------------------------------- 1. OpenWindows Positioning (short) - ---------------------------------------------------------------------------- Our windows story continues to reflect our OpenWindows announcement at Uniforum. It reinforces Sun's primary focus for FY90: SPARC, OPEN LOOK, UNIX. Through OpenWindows, Sun delivers the network-based window system that offers developers a larger sales-volume opportunity than any other company (or group of companies) in the industry. o This release is targeted primarily at ISVs and developers. o This is a SPARC release. SPARC is Sun's best price/performance platform. o A large number of our customers will continue using SunView and will start using OpenWindows in the future when a large number of applications are ported from SunView to XView. OpenWindows is a complete application environment available TODAY: X11/NeWS: A high-performance X window system with the PostScript language and imaging model capability of NeWS. OPEN LOOK: The premium user interface for Unified UNIX System VR4. Open Fonts: Access to over 50 high quality outline fonts that exactly match printer output. XView: A proven X toolkit for OPEN LOOK, bringing the 2100-strong SunView applications to OPEN LOOK and X with easy migration. DeskSet: OPEN LOOK desktop applications. August 31, 1989 - 2 - Sun's commitment to the elements of OpenWindows: X11/NeWS, OPEN LOOK, Open Fonts, XView, and DeskSet remains strong and unwavering. - ---------------------------------------------------------------------------- 2. Availability - ---------------------------------------------------------------------------- OpenWindows 1.0 is planned to be shipped on September 18, 1989; we are currently working out details of that procedure. Through the field-supported "specials" program, and through the SPARCware development kit supported by corporate marketing, critical customers are already working with early releases of OpenWindows. The "specials" program will be discontinued with the FCS of OpenWindows 1.0. System Configurations OpenWindows 1.0 will be released as a standalone product on SPARC. OpenWindows will require SunOS 4.0 and a minimum memory configuration of 8 MB. ------- End of Forwarded Message From don@brillig.umd.edu Thu Sep 14 20:33:57 1989 Date: Thu, 14 Sep 89 20:33:57 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: A PostScript Quine (a followup) From: adobe!greid@decwrl.dec.com (Glenn Reid) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <17620@bellcore.bellcore.com> sjs@bellcore.com (Stan Switzer) writes: > A "quine" is a program which when evaluated yields its own > representation. A quine can be formally described as a fixed point of > a language's denotation function. Trivial evaluations (e.g.: > literals) are excluded and the program cannot require any input data > (e.g.: "cat cat.c"). > > For the heck of it, let's say a PostScript quine is a procedure > "{...}" which when followed by "n { exec } repeat" yields the same (or > equivalent) value for any non-negative integer value of "n" > (including 0). > The shortest I have found for PostScript is > > {{[ exch /dup load /exec load ] cvx} dup exec} Wait--now I get it. The execution of the procedure has to give you the same procedure back. I was lost in the definition of "quine". According to the way you've set it up (using "n { exec } repeat"), the following should qualify: {/exec{dup}def} I guess this doesn't qualify, since it only works if you invoke it with "exec", and (only after the first invocation :-), but it sure is short... Glenn Reid From don@brillig.umd.edu Thu Sep 14 20:35:19 1989 Date: Thu, 14 Sep 89 20:35:19 -0400 To: NeWS-makers@brillig.umd.edu Subject: more on open windows.... From: Katy Kislitzin Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) The second message i got from my sales rep... --kt (uunet!syzygy!ktk, hoptoad!syzygy!ktk) ------- Forwarded Message Subject: A little more on Open Windows >>>>>IMPORTANT WINDOWS INFORMATION<<<<<< ***** OpenWindows Support On Sun Platforms ****** 9/12/89 This e-mail provides some important information regarding OpenWindows support on Sun-3 and 386i systems. - ----------------------------------------------------------------- Summary: 1. We are offering OpenWindows on all three platforms. 2. We are focusing all efforts on SPARC as the recommended platform, yet considering the needs of the installed base. 3. We are focusing on maximizing customer satisfaction by addressing the support requirements and attempting to set realistic performance expectations. 4. We are working hard on getting key ISV applications ported to OpenWindows. - ----------------------------------------------------------------- Sun will deliver on its commitment to customers by making OpenWindows available on all three platforms: SPARC, Sun-3, and the 386i. SPARC will be the recommended platform due to the superior performance it will deliver. This is consistent with Sun's corporate strategy of focussing on SPARC. The X Window systems currently available in the industry all have shown that customers will require larger memory and higher CPU power configurations to provide effective performance to the end user. The performance of OpenWindows is best on SPARC and we are encouraging customers and ISVs to use OpenWindows on SPARC first. It is critical that customer expectations be set appropriately. We are recommending OpenWindows to customers who need X11 solutions. Minimum ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^[editorial comment] configurations for OpenWindows will require 8 megabytes of memory. In order to maximize customer satisfaction and assure adequate support, there will be a program to qualify customers who want OpenWindows. The program will involve your local sales management. We will ship OpenWindows for SPARC on September 25th and phase in shipments for the Sun-3 and 386i 30 days later. OpenWindows will offer many competitive features: * X11/NeWS - Industry Standard X11 with PostScript ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^[ that damn editor! ] * X-View Toolkit with OPEN LOOK * DeskSet personal productivity Tools * Easy migration mechanism to X Windows for ISVs and customers * Ability to easily migrate existing 2100+ SunView applications At this time we are on track with our plan to: a) Conduct a world-wide series of Windows and Graphics seminars for customers and ISV's beginning on September 18, 1989, in San Francisco. b) Ship OpenWindows on SPARC to customers beginning September 25, 1989. c) Ship OpenWindows on Sun-3 and 386i by October 25, 1989. d) Help ISVs port to OpenWindows to assure quick availability of key applications. ------- End of Forwarded Message From don@brillig.umd.edu Sat Sep 16 02:53:44 1989 Date: Sat, 16 Sep 89 02:53:44 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: open windows From: tinman.cis.ohio-state.edu!bob@tut.cis.ohio-state.edu (Bob Sutterfield) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <8909142134.AA05482@pongfs.istc.sri.com> ktk@SPAM.ISTC.SRI.COM (Katy Kislitzin) writes: Note that NeWS provides x users with display postcript capablities. You mean "PostScript capabilities for display", not "Display PostScript(tm) capabilities", right? I didn't see any mention of the latter, and we wouldn't really expect to. From don@brillig.umd.edu Sat Sep 16 02:56:11 1989 Date: Sat, 16 Sep 89 02:56:11 -0400 To: NeWS-makers@brillig.umd.edu Subject: Sun 3/60 Overlay Plane From: emory!km@gatech.edu (Ken Mandelberg) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Does anyone know if X/NeWS supports the Sun 3/60C overlay plane? Straight Mit X11 has a built in switcher function that lets you run one server for both, and toggles the enable bits when you move the mouse off the side. -- Ken Mandelberg | km@mathcs.emory.edu PREFERRED Emory University | {decvax,gatech}!emory!km UUCP Dept of Math and CS | km@emory.bitnet NON-DOMAIN BITNET Atlanta, GA 30322 | Phone: (404) 727-7963 From don@brillig.umd.edu Sat Sep 16 02:56:27 1989 Date: Sat, 16 Sep 89 02:56:27 -0400 To: NeWS-makers@brillig.umd.edu Subject: Need help with GoodNeWS1.2 From: stuart@ads.com (Stuart Crawford) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I have everything in GoodNeWS1.2 working just fine except that when I print the PostScript code generated by the GoodNeWS dvi2ps program, the LaserWriter seems to ignore the vertical and horizontal offsets and scales indicated in the LaTeX \special command. Of course, the printed documents end up looking awful. The printer is a LaserWriter II NTX. Suggestions are greatly appreciated. Thanks, Stuart Crawford stuart@ads.com (415) 960-7545 From don@brillig.umd.edu Sat Sep 16 02:57:21 1989 Date: Sat, 16 Sep 89 02:57:21 -0400 To: NeWS-makers@brillig.umd.edu Subject: See how NeWS stacks up! From: dreams!rbogen@sun.com (Richard Bogen) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) %The following procedures display the contents of the operand stack or %user dictionary for some interactive psh process. This file should %be loaded into a psh and then the routines invoked with two parameters, %the x & y location of the top left of a bounding rectangle for the %display of the items. The contents of the display are updated every %second. For example, 800 600 trackstack => process(..) object % % Author: Richard A. Bogen - Sun Microsystems, Inc. - 1989 % /trackstack {% x y => process. Displays contents of parent's operand stack. {/OperandStack get} {100 string cvs} showobj} def /trackdict {% x y => process. Display contents of parent's userdict. {/DictionaryStack get 1 get} {exch 100 string cvs ( : ) append exch 100 string cvs append} showobj} def /showobj {% common routine for Operand Stack or Dictionary display 10 dict begin /makestring exch def %converts item to a sting /getobj exch def %obtains object to be displayed %First compute dimensions of items to be displayed /y0 exch def /x exch def /wd 30 def %maximum number of chars permitted per item (M) stringbbox wd mul %assumes (M) is the widest character /wide exch def % in the current font 2 add /high exch def %allow 2 units between each line pop pop /parent currentprocess def %Now fork off a process to do the displaying { {parent /State get /zombie eq {currentcolor fillcanvas exit} if wide parent getobj length high mul dup neg y0 add /y exch def x y moveto rect 0 setgray %display in black parent getobj {makestring dup length wd gt {0 wd 1 sub getinterval} if dup stringwidth pop neg wide add 2 div x add y moveto show /y y high add def } forall gsave stroke .0333 sleep grestore RootColor setcolor fill } loop } fork end} def From don@brillig.umd.edu Sat Sep 16 02:59:41 1989 Date: Sat, 16 Sep 89 02:59:41 -0400 To: NeWS-makers@brillig.umd.edu Subject: A Rose is a rose is a rose... From: dreams!rbogen@sun.com (Richard Bogen) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) %This file creates a LiteWindow which has a rose curve draw into it. %The menu enables the parameters to be changed giving a different curve % %Richard A. Bogen - Sun Microsystems, Inc. - 1989 % systemdict /SliderItem known not {(NeWS/liteitem.ps) LoadFile pop} if /c 0 def /num 13 def /den 5 def /rose {matrix currentmatrix clippath pathbbox 2 div exch 2 div exch 2 copy translate c 1 add div exch c 1 add div exch scale pop pop 0 c moveto 0 1 den 1 sub {360 mul 1 add dup 1 exch 360 add {dup dup num mul den div sin c add /p exch def sin p mul exch cos p mul lineto} for} currentpoint stroke pause moveto for setmatrix} def /win framebuffer /new DefaultWindow send def /reshapefromuser win send /can {ClientCanvas} win send def /itemdict 10 dict begin /cslide ( Constant) [1 100 c] /Left {/c ItemValue 10 div store} can /new SliderItem send def 100 300 200 0 /reshape cslide send /numslide ( Numerator) [1 100 num] /Left {/num ItemValue store} can /new SliderItem send def 100 200 200 0 /reshape numslide send /denslide (Denominator) [1 100 den] /Left {/den ItemValue store} can /new SliderItem send def 100 100 200 0 /reshape denslide send /done (REDRAW) {/paint win send} can /new ButtonItem send def 10 10 0 0 /reshape done send currentdict end def /redraw {1 fillcanvas 0 setgray rose stroke} def {/ClientMenu [(Change Parms) {itemdict paintitems}] /new DefaultMenu send def /DestroyClient {/unmap self send currentprocess killprocessgroup} def /PaintIcon {redraw} def /PaintClient {redraw} def /FrameLabel {(p = % + sin \(%/% * a\))[c num den] sprintf} def} win send itemdict forkitems /map win send From don@brillig.umd.edu Mon Sep 18 01:45:02 1989 Date: Mon, 18 Sep 89 01:45:02 -0400 To: NeWS-makers@brillig.umd.edu Subject: MASS ACKNOWLEDGEMENT: Votes Received on comp.object From: sei!ajpo!eberard@pt.cs.cmu.edu (Edward Berard) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) This is the second, and last "mass acknowledgement" of votes received for comp.object. Since I have received over 800 votes, and many of my attempted replies have bounced, I am posting the repies in the form of a mass acknowledgement. I have sorted the votes on their net addresses. I have also included as much of a name as was furnished, or as space has allowed. A "?" indicates that there was no way to determine even a nickname. The votes listed below represent all votes (both for and against) received on comp.object as of September 17, 1989. Voting closes on September 24, 1989. If you have already voted, you cannot vote again. If you have not voted, but would like to vote (either for or against) on the formation of a newsgroup for the discussion of gereral interest topics in object-oriented technology, please send your vote to: eberard@ajpo.sei.cmu.edu The proposed charter for this news group has already been widely published. -- Edward V. Berard Berard Software Engineering, Inc. Phone: (301) 353-9652 FAX: (301) 353-9272 E-Mail: eberard@ajpo.sei.cmu.edu -------------------------------------------------------------------- All Votes Received For comp.object As Of September 17, 1989 [Total Votes Received: 822] 6sigma!blm@beaver.cs.washington.edu Brian Matthews 880039l%ACADIA.BITNET@VMA.CC.CMU.EDU Katherine (Layton) Astels 880716a%ACADIA.BITNET@VMA.CC.CMU.EDU Dave aarons%cogs.sussex.ac.uk@NSFnet-Relay.AC.UK Aaron Sloman ab@imperial-software-tech.co.uk Andy Bartlett abvax!calvin.icd.ab.com!jea@uunet.uu.net John Alexander ACARGILE%STANFORD.BITNET@VMA.CC.CMU.EDU Andy Cargile acd4!mjb@uunet.UU.NET Mike Bryan adil@Sun.COM Adil Lotia adiron!jond@uunet.UU.NET Jonathan Doughty adiseker@potomac.ads.com Andrew Diseker adoyle@BBN.COM Allan Doyle aem@ibiza.cs.miami.edu a.e.mossberg afscian@violet.waterloo.edu Anthony Scian aij%computing-maths.cardiff.ac.uk@NSFnet-Relay.AC.UK Andrew C. Jones aiken@aerospace.aero.org Timothy A. Aiken akern@potomac.ads.com Art Kernstine Alain.Michard@mirsa.inria.fr Alain Michard alanm@cadnetix.com Alan F. McCartney allbery@NCoast.ORG Brandon S. Allbery allegra!tk@research.att.com Thomas Kirk amtfocus!troym@chg.mcd.mot.com Troy Monaghen AMXMC-SEL@WSMR-SIMTEL20.ARMY.MIL Mark Oestmann anders@cuisun.unige.ch Bjornerstedt Anders andreasg@boulder.Colorado.EDU Andreas Girgensohn andrew@gec-rl-hrc.co.uk Andrew Haylett Baddow andrew@jhereg.Minnetech.MN.ORG Andrew Esh andry%capsogeti.fr@csinn.uucp Francois Andry andy@ads.com Andy Cromarty andyd@pogo.wv.tek.com Andy Davidson ane@cs.brown.edu Alan Ewald anund@idt.unit.no Anund Lie arc!steve@apple.com Steve Savitzky aro@compsci.aberystwyth.ac.uk Andrew Ormsby array!len@uunet.UU.NET Leonard Vanek atexnet!syost@uunet.UU.NET Stephen Yost ath@prosys Anders Thulin atj@prism.TMC.COM Alex T. Jenkins avsd!tortuga!johnt@ucbvax.Berkeley.EDU John Tangney aynang@en.ecn.purdue.edu Yang Aynang badmal@crl.labs.tek.com Badri bakken@arizona.edu Dave Bakken bard@cs.cornell.edu Bard Bloom barnett@unclejack.crd.ge.com Bruce G. Barnett bates@stat.wisc.edu Douglas M. Bates bbadger%X102C@HARRIS-ATD.COM Badger BA 64810 beard@ux3.lbl.gov Patrick C Beard bengsig@nlhp3.oracle.nl Bjorn Engsig bengtl@MATHS.LTH.Se Bengt Larsson benzinger@nada.kth.se Mikael Benzinger bergman@cs.unc.edu Larry Bergman berkowit@BBN.COM ? berre%si.uninett@nac.no Arne Berre bg@nada.kth.se Bj|rn Gr|nvall bgillett@polyslo.CalPoly.EDU Bradley J. Gillette billa@cvedc.prime.com Bill Anderson billdo@ifs.umich.edu Bill Doster bills@XAIT.Xerox.COM Bill Stackhouse bjornk@ifi.uio.no Bj|rn Kirkerud bjoyce@coherent.com Bob Joyce bjw@bbn.com Benjamin J. Woznick blanier@abbott Brian Lanier blondon@ajpo.sei.cmu.edu Bob London bmiller@shamash.cdc.com Brad Miller bms@aplpy.jhuapl.edu Brenda Spaur bnr-rsc!bigsur!binky@uunet.UU.NET Glenn Langford bob@odi.com Bob Miner bober@cs.wisc.edu Paul M. Bober Bobrow.pa@Xerox.COM Danny Bobrow BOSCO%FRANCE@cs.umass.edu Michel F. Bosco boubez@bass.rutgers.edu Toufic Boubez bousse@escalier_a.irisa.fr Marc Bousse bpe@cs.brown.edu Page Elmore bradr@Sun.COM Brad Rubenstein braun@ctc.contel.com Chris Braun brendav@uswest.com Brenda Vander Linden brian@apollo.com Brian Holt BRIDGE@MAX.ACS.WASHINGTON.EDU ? brosgol@ajpo.sei.cmu.edu Ben Brosgol bruce@SLC.COM Bruce Schuchardt brunkhorst@Mayo.edu Geoffrey Brunkhorst bwhite@umb.edu Bill White byennaco@East.Sun.COM Robert Yennaco byock@umaxc.weeg.uiowa.edu Bill Yock calmasd.Prime.COM!wlp%sdcsvax@ucsd.edu Walter Peterson cals@cals01.Newport.RI.US Charles A. Sefranek capmkt!tim@uunet.uu.net tim carm@umd5.umd.edu Rick Chimera CARVER%Polyester@cs.umass.edu Philip caseau@flash.bellcore.com Yves J Caseau cca@newton.physics.purdue.edu Charles C. Allen cci632!ccird7!tvf@cs.rochester.edu Tom Frauenhofer cdaf@iuvax.cs.indiana.edu Charles Daffinger cenkl@linus.MITRE.ORG mike cenkl cew@venera.isi.edu Craig E. Ward chaffee%REED.BITNET@VMA.CC.CMU.EDU Alex Chaffee charleen@ads.com Charleen Bunjiovianna charlie@genrad.com Charlie D. Havener chd@litp.ibp.fr Christophe Dony cheng%pollux.usc.edu@usc.edu Chien-Ming Cheng chris@harlequin.co.uk Zany Cornetto ciamac@sci.ccny.cuny.edu Ciamac Moallemi ciemo@bananapc.wpd.sgi.com Dave Ciemiewicz cjmchale@cs.tcd.ie CJ claris!drc@ames.arc.nasa.gov Dennis Cohen cline@sun.soe.clarkson.edu Marshall Cline clrk@tank.uchicago.edu Clark Wilson cmh@sunspot.larc.nasa.gov C. Michael Holloway cobourn@dingo.ece.cmu.edu Thomas Cobourn cohesive!pryals@Sun.COM Phil Ryals convex!graham@uxc.cso.uiuc.edu Marv Graham convex!rcunning@uxc.cso.uiuc.edu Randy Cunningham cook%hplwrc@hplabs.hp.com William R. Cook coolidge@cato.cs.uiuc.edu John Coolidge cooper@sde.hp.com Ken Cooper COSC5SH@uhvax1.uh.edu Unbeliever cox@stepstone.com Brad Cox crabb@phoenix.Princeton.EDU David W Crabb craigt@sybase.com Craig Thomas csd29%seq1.keele.ac.uk@NSFnet-Relay.AC.UK Athula Herath CSD103%PSUVM.BITNET@VMA.CC.CMU.EDU chanda cspi!geof@ajpo.sei.cmu.edu Geof Cohler csusac!unify!dgh@ucdavis.edu David Harrington csusac!unify!jde@ucdavis.edu Jeff Evarts ctumulur@rodan.acs.syr.edu the 1 and only!!! ctw%sun.central-services.umist.ac.uk@NSFnet-Relay.AC.UK Colin Walls curtis@se-sd.sandiego.ncr.com Curtis cuti@apollo.com Sue d8sjoma@dtek.chalmers.se Martin Sjoeblom D86.DAG-WAHLBERG@CARMEN.DOCS.UU.SE Dag Wahlberg d88-cwe@nada.kth.se Christian Wettergren d88-jwa@nada.kth.se Jon W{tte dag@Control.LTH.Se Dag Michael Bruck dak@tillamook.cs.uoregon.edu David Alan Keldsen dami@cui.uucp Laurent Dami. daniel@a.cs.okstate.edu Ron Daniel Jr. daniels@cse.ogc.edu Scott David Daniels darmois@crcge1.cge.fr Emmanuel Darmois dashman@rti.rti.org Eric Dashman dave%munge@rand.org Dave McArthur dave@uswest.com Dave Taenzer daveb@tahoe.wpd.sgi.com Dave Babcock David J. Scheerer | The Johns Hopkins University David J. Scheerer db%lfcs.edinburgh.ac.uk@NSFnet-Relay.AC.UK Dave Berry dbell@maths.tcd.ie ? dciem!gandalf!alayne@cs.utexas.edu Alayne McGregor DCOOPER%ESDSDF.decnet@crdgw1.ge.com Dwight Cooper de@COMP.LANCS.AC.UK David England dean@sun.soe.clarkson.edu Dean R. Swan debbie%hpldlh@hplabs.hp.com Debbie Hamilton decvax!zinn.MV.COM!mem@decwrl.dec.com Mark E. Mallett DELCOS@cc.Helsinki.FI Remi Delcos demers@cs.ucsd.edu Dave DeMers dempsey@Kodak.COM Richard C. Dempsey dermer@CS.BU.EDU Richard Dermer des%amara.uucp@sharkey.cc.umich.edu Dave Steinhoff DESMEDT%HNYKUN53.BITNET@VMA.CC.CMU.EDU Koenraad De Smedt desoi@CSSUN.tamu.edu John DeSoi deutsch@parcplace.com Peter Deutsch dg1v+@andrew.cmu.edu David Greene dg@sybase.com David Gould dgaw@ads.com David Gaw dhw@itivax.iti.org David H. West dialogic!paul@uunet.UU.NET Paul Bennett diana@tilde.csc.ti.com Diana Sparacin dias@iris.ucdavis.edu Gihan Dias dirk%BLEKUL60.BITNET@CUNYVM.CUNY.EDU Dirk Craeynest djd@ziebmef.mef.org David djg@pyrnova.pyramid.com Don Giberson djl@concurrent.co.uk Dennis Layton dl@oswego.oswego.edu Doug Lea dmaclean@EBay.Sun.COM Dave MacLean dmw%computing-science.aberdeen.ac.uk@NSFnet-Relay.AC.UK Denis Wilson DN5%PSUVM.BITNET@VMA.CC.CMU.EDU D. Jay Newman doner%henri@hub.ucsb.edu John Doner donw@cognos.cognos Don Walker dritchey@ihlpb.att.com Donald L Ritchey druhi!weh@att.att.com Bill Hopkins drutx!kvt@att.att.com Kim Tran dsc@osteocyber.ortho.hmc.psu.edu david s. channin dsill@relay.nswc.navy.mil Dave Sill dsouza@mcc.com D'Souza Desmond dsr@stl.stc.co.uk David Riches dtscp1!scott@gatech.edu Scott Barman dumphres%galaxy@afit-ab.arpa David A. Umphress dupuy@cs.columbia.edu Alexander Dupuy dwiggins@ashtate.A-T.COM Don Dwiggins dww@stl.stc.co.uk David Wright E556@@devvax.TN.CORNELL.EDU RON POOL eachus@mbunix.mitre.org Robert I. Eachus eaker@sungod.crd.ge.com Chuck Eaker ecrcvax!fendt@ames.arc.nasa.gov Michael Fendt ecrcvax!hugh@ames.arc.nasa.gov Hugh Grant ed@hpmtles.hp.com Ed Schlotzhauer ed@sprawl.yorku.ca Ed McCurdy edean@East.Sun.COM Ed Dean edhall%ives@rand.org Ed Hall edwin@cwi.nl Edwin Blake egon@KUB.NL Egon M. Verharen eiffel!Athens!nosmo@uunet.UU.NET Vincent Kraemer eiffel!nosmo@uunet.UU.NET Vincent Kraemer eldridge@dewey.udel.edu Gary A. Eldridge ellis@tekcrl.labs.tek.com ? ellson@ontap.stsusa.com John Ellson elsie!ado@alw.nih.gov Arthur David Olson emuroga@cs.uiuc.edu Eisuke Muroga encore!pinocchio!cook@talcott.harvard.edu Dale C. Cook eric%bnrmtl.UUCP@Larry.McRCIM.McGill.EDU Eric Brunelle eric@cfisun.cfi.COM Eric Read ericb@Atherton.COM Eric Black ericco%ssl.Berkeley.EDU@jade.berkeley.edu Eric C. Olson eriko@idt.unit.no Erik Odberg escd!es37!nils@decwrl.dec.com Nils Davis esj@wiis.wang.com Eric S. Johansson etxerin@tore.ericsson.se Erik Nyquist euakem@euas10.ericsson.se Magnus eurtrx!papegaai@nluug.nl Bard C. Papegaaij f-jar@ifi.uio.no ? fargo@pawl.rpi.edu Ethan M. Young FBUSHNELL@carleton.edu Fitz Bushnell fchan@vlsi.waterloo.edu Francis Chan FCTY7045%RYERSON.BITNET@VMA.CC.CMU.EDU Josh Panar fdfd@UKC.AC.UK ? felix@ai.sri.com Francois Felix INGRAND fessen@pc.ecn.purdue.edu Cheryl L Fessenden fhadsell@csm9a.Colorado.EDU Frank Hadsell ficc!sms@uunet.uu.net Stanley M. Sutton ficc!stockton@uunet.UU.NET Tom Stockton fischer@iesd.auc.dk Lars P. Fischer florman@rand.org Bruce Florman fm02@gte.com Frank Manola fm@Sun.COM Farzin Maghoul foote@cs.uiuc.edu Brian Foote ford@m2.csc.ti.com Steve Ford FORKEL@DB0PTZ1A.BITNET Malte Forkel frame!nataraja!ebr@ames.arc.nasa.gov Eric Rapin freb@goldfnch.mv.com Karl Freburger fredm@media-lab.media.mit.edu Fred Martin frew%crseo@hub.ucsb.edu Jim Frew friedl@vsi.com Stephen J. Friedl frincke@iris.ucdavis.edu Debbie Frincke frode@m2cs.uu.no Frode Odegard frodo%ncr-fc%ncr-sd@ncrlnk.dayton.ncr.com David Fletcher fsg!treed@uunet.UU.NET Timothy Reed fxtv@zeta.ibp.fr Francois-Xavier TESTARD-VAILLANT fzhauck@immd4.informatik.uni-erlangen.de Franz Hauck gabork@vuse.vanderbilt.edu Gabor Karsai gadbois@sygmund.cgs.utexas.edu David Gadbois Gallagher@cs.umass.edu Kevin Gallagher gam%beta@LANL.GOV Gim Mark gary%erg.aberdeen.ac.uk@NSFnet-Relay.AC.UK Gary Whittington gary@svx.sv.dg.com Gary Bridgewater garym@ulysses.cognos Gary Murphy gasser%pollux.usc.edu@usc.edu Dr. Les Gasser gboddy%research6.computer-science.manchester.ac.uk@NSFnet-Relay.AC.UK G. Boddy gcook@gpu.utcs.utoronto.ca Gord Cook gerhardt@ajpo.sei.cmu.edu Mark Gerhardt gerovac@3d.enet.dec.com Branko J. Gerovac gerritsn@tropicsa.prl.philips.nl Mirjam Gerritsen GEW@DLGM.DARESBURY.AC.UK Royd Whittington ggreen@cod.nosc.mil George W. Green gilbert%cs.glasgow.ac.uk@NSFnet-Relay.AC.UK Gilbert Cockton gill!paul@uunet.UU.NET Paul Nordstrom gillis@nsr.bioeng.washington.edu Steve Gillispie gini@coyote.stanford.edu Maria Gini gjb@cs.brown.edu ? gjc@mga.com George J. Carrette gjf@cs.unc.edu Gordon Ferguson glenn@synaptics.com Glenn Gribble gms@cs.brown.edu Gail M. Shaw gnf3e@polka-dot.cs.virginia.edu Greg Fife godfrind@ricard.enet.dec.com Albert GODFRIND GOEBLER@DB0PTZ1A.BITNET Thomas Goebler goss@ESE.ESSEX.AC.UK Gossain Sanjiv goun@evetpu.enet.dec.com Roger H. Goun gra@East.Sun.COM Gary R. Adams graham@geovision.UUCP Graham Ashby greene@mcc.com Kevin Greene greg%mickey@WLV.IMSD.CONTEL.COM Greg Christy grogono@concour.cs.concordia.ca Peter Grogono grs@cics.wustl.edu Guillermo Ricardo Simari gt0818a%prism@gatech.edu Paul E. Robichaux gub@vax.ftp.com Glen Daniels guy%BLEKUL60.BITNET@CUNYVM.CUNY.EDU Guy Reyniers gwills@maths.tcd.ie ? hagerman@maxwell.ece.cmu.edu John Hagerman hall@aplcen.apl.jhu.edu Marty Hall hall@eclipse.stanford.edu Keith Hall halley!tzone!san@cs.utexas.edu Steve Sanderson ham@Neon.Stanford.EDU ? hankin@osf.osf.org Scott Hankin hansen@pegasus.ATT.COM t.l.hansen harp@venera.isi.edu Brian harper1%aldts.decnet@aldncf.alcoa.com Mike Harper harvax!glenn@Sun.COM Glenn Kasten harvax!jyang@uunet.UU.NET Jiun-Sheuan Yang hascall@atanasoff.cs.iastate.edu John Hascall hassell@tramp.Colorado.EDU Christopher Hassell hawley@icot.jp David Hawley heidi@mbir.bcm.tmc.edu Heidi Johnson henderso@antares.mcs.anl.gov Mark Henderson hernan2%pyr@gatech.edu HERNAN E. ASTUDILLO hetrick@pagoda.enet.dec.com George C. Hetrick hh@tut.fi ? hibbert@wsl.dec.com Chris Hibbert hinman@ginosko.samsung.com David Hinman hogg@db.toronto.edu John Hogg holmes@apple.com Richard A. Holmes hosking%emu@CS.UMASS.EDU Tony Hosking howard@dahlbeck.ericsson.se Howard Gayle hsfmsh!dumbcat!marc@Sun.COM Marco S Hyman hss@CS.BU.EDU Himanshu Sinha hugh@toad.com Hugh Daniel hughes@hughes.network.com J. Hughes hvannber@turing.cs.rpi.edu Ebba Hvannberg hwb@beach.cis.ufl.edu Howard Beck ide!snoopy!kanitkar@Sun.COM Rajan Kanitkar ihlps!mckee@att.att.com Roger A Mckee ileaf!io!fairport!edb@EDDIE.MIT.EDU Ed Blachman ima!karl@harvard.harvard.edu Karl Heuer imf%aiai.edinburgh.ac.uk@NSFnet-Relay.AC.UK Ian Filby inc@tc.fluke.COM Gary Benson info-vax@kl.sri.com Craig Hubley intermec!allenm@uunet.UU.NET Allen Mathis ISADER%HHEOUH50.BITNET@VMA.CC.CMU.EDU Derk Ederveen issi!athena!robertso@cs.utexas.edu Jack Robertson issi!ege@cs.utexas.edu Aral Ege issi!guzman@cs.utexas.edu Adolfo Guzman issi!thoth!starkey@cs.utexas.edu Leon Roy Starkey issi!yin@cs.utexas.edu Weiping Yin iwarp.intel.com!pweiss@omepd.intel.com Paul Weiss jack%cs.glasgow.ac.uk@NSFnet-Relay.AC.UK Jack Campin jacks@pogo.wv.tek.com Jack Slingerland jacob@blackbox.gore.com Jacob Gore jah@SEI.CMU.EDU Jim Hess james@astro.as.utexas.edu James McCartney jamesm@uunet.uu.net James M. Moore jas@venera.isi.edu ? jcg@iris.brown.edu Jim Grandy jcs1%becker@gte.com James Sinclair jdavidso@ajpo.sei.cmu.edu Jim Davidson jdchrist@watcgl.waterloo.edu Dan Christensen jdye@ads.com John Dye jeanp@philmtl.philips.ca Jean Pierre Lortie jeenglis@nunki.usc.edu Joe English jellinghaus-robert@CS.Yale.EDU Rob Jellinghaus jerbil@csvax.caltech.edu Joe Beckenbach jette@ASC.SLB.COM Chris Jette jfh@rpp386.Cactus.ORG John F. Haugh II jft2%sol@gte.com Jim Tremlett jhugart@umaxc.weeg.uiowa.edu Jacob Hugart JI8%PSUVM.BITNET@VMA.CC.CMU.EDU ? jimst@honda.fdi.tek.com Jim Stanley jk3t+@andrew.cmu.edu Jonathan King jlknudsen@daimi.dk Jorgen Lindskov Knudsen jls@attctc.Dallas.TX.US Jerome Schneider jmaloney@june.cs.washington.edu ? jnh@ecemwl.ncsu.edu Joseph N. Hall jnino@cs.utexas.edu ? joed@ihlts.att.com Joseph W Davison joemac@apple.com Joe MacDougald johani@nada.kth.se Johan Ihren john@linus.MITRE.ORG John Burger johnson@cs.uiuc.edu Ralph Johnson jourdan@seti.inria.fr Martin Jourdan jps@cs.brown.edu ? jrc@concurrent.co.uk John Connett jstolzy@nrtc.northrop.com Janice Stolzy jto@tolsun.oulu.fi Jarkko Oikarinen judy@mips.com Judy Szikora jyb@camcon.co.uk John Bromell kamal@hpda.hp.com Kamal Karlapalem kannan@cerc.wvu.wvnet.edu R. Kannan karl@cgdisis.UCAR.EDU Karl Sierka kcby@ncratl.atlanta.ncr.com KC Burgess Yakemovic keghamr@philmtl.philips.ca Kegham Redjebian kenk@tellab5.tellabs.CHI.IL.US Ken Konecki kennii%wybbs.UUCP@sharkey.cc.umich.edu Kenn Booth-II kevin@jtsv16.jts.com kevin brighton kevinf@spocksbrain.cognos ? kfolan@axion.bt.co.uk Kevin Folan kh%cs.glasgow.ac.uk@NSFnet-Relay.AC.UK Kevin Hammond khc@wang.WANG.COM Kelly Carter kiddi@hp.is Kristinn Eiriksson kjh@usday32.dayton.ncr.com ? kjx@COMP.VUW.AC.NZ ? klee@wsl.dec.com Ken Lee knight@osf.org STeve Knight knox@deepthought.Princeton.EDU Rita Knox kobryn@esosun.css.gov Cris Kobryn kono@csl.sony.jp Shinji Kono kozma@rex.cs.tulane.edu John P. Kozma kquail@ticipa.csc.ti.com Robert J White Jr krichard@axion.british-telecom.co.uk Keith Richards krona@draken.nada.kth.se Kjell Krona kthompso@ptolemy.arc.nasa.gov Kevin Thompson kww%cs.glasgow.ac.uk@NSFnet-Relay.AC.UK Kevin Waite kww@cblpf.att.com Kevin W Wall laffra%HLERUL5I.BITNET@VMA.CC.CMU.EDU Chris Laffra lafrance@tusun2.knet.utulsa.edu.knet.utulsa.edu Jacques LaFrance lakshman@cs.uiuc.edu T.K.Lakshman landay@cory.Berkeley.EDU James A. Landay lanning@arisia.xerox.com S.M. Lanning larry@cadnetix.com Larry A. Peterson larryw@cognos.cognos Larry Williams larsen@imada.dk Larsen Soren learmont@Sun.COM Tim Learmont lee%liberty@cs.umass.edu Peter E. Lee lemoine@tls-cs.cert.fr Michel Lemoine leverich@rand.org Brian Leverich levin@BBN.COM Joel B Levin levisonm@qucis.queensu.ca Mark Levisonm levitt@ads.com Tod Levitt levitte@bion.kth.se Tommy Levitte lewis@bevsun.bev.lbl.gov Steve Lewis lhf@aries5.uwaterloo.ca Luiz H. deFigueiredo liberte@cs.uiuc.edu Daniel LaLiberte Lindsay.Marshall%newcastle.ac.uk@NSFnet-Relay.AC.UK Lindsay F. Marshall linhart@topaz.rutgers.edu Mike Threepoint LINK%ESDSDF.decnet@CRDGW1.GE.COM Alan J. Link lippin@math.berkeley.edu Tom Lippincott lisch@pdx.mentor.com Ray Lischner liz@grian.cps.altadena.ca.us Liz Allen-Mitchell lm@logm1.logm.se Lennart Mansson locke@pdn.paradyne.com Richard Locke logcam!colin@uunet.UU.NET Colin Grant longstaf@lll-crg.llnl.gov Thomas A Longstaff lotus!paulm@uunet.UU.NET Paul Morganthall lotus!pmancuso@uunet.UU.NET Pat Mancuso lozinski%argon.Berkeley.EDU@BERKELEY.EDU Chris Lozinski lpi!abc@harvard.harvard.edu Anton Chernoff lpringle@BBN.COM Lewis G. Pringle, Jr. lsr@apple.com Larry Rosenstein lss@cerc.wvu.wvnet.edu Linda S. Saus luong@wsl.dec.com Daphne Huetu Luong lynch@East.Sun.COM Brendan Lynch m_lunn@summer.british-telecom.co.uk Mark Lunn MAC.ROMOS@applelink.apple.com Eric Ulevik maclaugh@halibut.nosc.mil Janet M. Maclaughlin madmats@elcse3.epfl.ch Mats Weber mak@gvax.cs.cornell.edu Mesaac Makpangou malhotra@vlsi.waterloo.edu Prem Malhotra maner@andy.bgsu.edu Walter Maner mao@santa_fe.EBay.Sun.COM ? marc@cuisun.unige.ch Stadelmann Marc MARK%RICEVM1.RICE.EDU@icsa.rice.edu Mark R. Williamson mark@DRD.Com Mark Lawrence markabel@uswest.com Mark Abel markj@amc.com Mark Johns marks%stewart@gargoyle.uchicago.edu Mitchell Marks marti@inf.ethz.ch Robert Marti martin%hplbem@hplabs.hp.com Bruce Martin maryw@tekchips.labs.tek.com Mary H. Wells marzano@hpfcpq.hp.com Lou Marzano mas1!brig@apple.com Brian Gollum mas@genrad.com Mark A. Swanson mathis@ctc.contel.com Bob Mathis mattias@emil.CSD.UU.SE Mattias Waldau mb%sparrms@uunet.UU.NET Michael Bell mbarrett@plato.prime.com Myles Barrett mccarrol@topaz.rutgers.edu Mark C. Carroll mce@tc.fluke.COM Brian McElhinney mcintyre@turing.cs.rpi.edu David McIntyre mciver@boulder.Colorado.EDU William McIver Jr. mclean@unix.cis.pittsburgh.edu Stuart Mclean mcvax!ascom!rene@uunet.UU.NET Rene Bach mcvax!ascom!rut@uunet.UU.NET Claude Rubattel mcvax!crcge1.cge.fr!toledano@uunet.UU.NET Maxime Toledano mcvax!edvvie!eliza!johnny@uunet.UU.NET Johann Schweigl mcvax!geocub.greco-prog.fr!carre@uunet.UU.NET Francoise Carre mcvax!hslrswi!telsys!ruef@uunet.UU.NET Bernhard D. Ruef mcvax!iesd.auc.dk!melvis@uunet.UU.NET Henrik Hansen mcvax!ilog.ilog.fr!davis@uunet.UU.NET Harley Davis mcvax!loria.crin.fr!charoy@uunet.UU.NET Francois CHAROY mcvax!loria.crin.fr!leonard@uunet.UU.NET Daniel Leonard mcvax!nastassia.laas.fr!ralph@uunet.UU.NET Ralph P. Sobek mcvax!vmars!alex@uunet.UU.NET Alexander Vrchoticky mdf0%shemesh@gte.com Mark Feblowitz mdlrth.dnet!hood@lecgwy.lec.lockheed.com Doug Hood mdlrth.dnet!tusing@lecgwy.lec.lockheed.com Karl W. Tusing mef@dalek.silvlis.com Mary Ellen Foley megauthier@watcgl.waterloo.edu Marc E. Gauthier mellgren%capsogeti.fr@csinn.uucp Dag Mellgren mellon@decwrl.dec.com Ted Lemon mendel@db.toronto.edu Alberto Mendelzon metz@iam.unibe.ch Igor Metz meuer@poincare.geom.umn.edu Mark Meuer meyer@ifi.unizh.ch Urs Meyer mgardi@watdcsu.waterloo.edu M.Gardi - ICR\(David Rowley) mgardi@watdcsu.waterloo.edu M.Gardi mgillila@oiscola Mark Gilliland mhgsp!evans@att.att.com Steve Crandall mhi@edsdrd.eds.com Mamdouh H. Ibrahim mholden@ajpo.sei.cmu.edu Maretta Holden michael@titan.tsd.arlut.utexas.edu Michael Gibson micky@Sun.COM Choudhary microsoft!beng@uunet.uu.net Ben Goetter microsoft!ilanc@uunet.uu.net ilan caron microsoft!johnro@uunet.uu.net John Rogers microsoft!michaelw@uunet.uu.net Michael Winser microsoft!neils@uunet.UU.NET neil smith microsoft!stevesc@uunet.UU.NET ? mikael@sm.luth.se Mikael Eriksson mike@shogun.us.cc.umich.edu Michael Nowak mitchell@community-chest.mitre.org George Mitchell mjc@SYS.UEA.AC.UK Matthew Chalmers mjm@eleazar.dartmouth.edu Michael McClennen mjw%prism@gatech.edu Mary Jane Willshire mjw@hplb.hpl.hp.com Mike Wray mkim@cs.ubc.ca Myungchul Kim mlease@CSSUN.tamu.edu Mark Lease mlm@odi.com ? mmc@sybase.com Matthew McClure mmonegan@hpsdtl1.hp.com Michael Monegan mob@apollo.com Mary Bennett moher@uicbert.eecs.uic.edu Tom Moher moiram@tekcae.cax.tek.com Moira Mallison monty@SLC.COM Monty Williams moose@octopus.tds.kth.se ]ke Nordin moose@spam.istc.sri.com Ruth Lang morris@Think.COM Harry Morris moss%adelie@CS.UMASS.EDU Eliot Moss mosseri@sor.inria.fr ? motcsd!dms!morris@apple.com Jim Morris moudgill@svax.cs.cornell.edu Mayan Moudgill mr@racal-itd.co.uk Martin Reed mrsvr!bhairavi.mrisi!chandra@csd4.csd.uwm.edu B. Chandramouli msm@crowbar.dataio.Data-IO.COM Mike Meredith mtcs!geary!dan@uunet.UU.NET Dan Hydar muelle@ira.uka.de Jutta Muelle MUHRTH%DB0TUI11.BITNET@VMA.CC.CMU.EDU Thomas Muhr mujica@CS.UCLA.EDU Sergio Mujica munk@cst.prl.philips.nl Harm Munk munnari!aaii.oz.au!magnus@uunet.UU.NET Magnus Ljungberg munnari!appleoz.usg.apple.oz.au!ksand@uunet.UU.NET Kent Sandvik munnari!aragorn.cm.deakin.oz.au!peter@uunet.UU.NET Peter Horan munnari!aragorn.cm.deakin.oz.au!rad@uunet.UU.NET Robert Alan Dew munnari!batserver.cs.uq.oz.au!marshall@uunet.UU.NET Marshall Harris munnari!batserver.cs.uq.oz.au!smith@uunet.UU.NET Graeme Smith munnari!cheops.eecs.unsw.oz.au!marku@uunet.UU.NET Mark Utting munnari!chook.ua.oz.au!petera@uunet.UU.NET Peter J. Ashenden munnari!cluster.cs.su.OZ.AU!tim@uunet.uu.net ? munnari!ditsyda.oz.au!lindley@uunet.uu.net ? munnari!goanna.oz.au!pnm@uunet.UU.NET Paul Menon munnari!hitech.ht.oz.au!clyde@uunet.UU.NET Clyde Smith-Stubbs munnari!megadata.mega.oz.au!peter@uunet.UU.NET Peter Goodall munnari!mnrva.crl.bhp.com.au!STEVE@uunet.UU.NET Steve Garlick munnari!otc.otca.oz.au!chrisa@uunet.uu.net Chris Amies munnari!otc.otca.oz.au!glr@uunet.uu.net Gordon Rowell munnari!syacus.acus.oz.au!martin@uunet.UU.NET Martin Hampton murali@cis.ohio-state.edu S Muralidharan mwozny@sun9.Teknowledge.COM Mark Wozny nabiel@sics.se Nabiel Elshiewy naim@eecs.nwu.edu Naim Abdullah naser@prince.cs.columbia.edu Naser Barghouti ncjuul@diku.dk Niels Christian Juul NCOHEN@ibm.com Norman Cohen neilfay@idis.lis.pitt.edu Cornelius R. Fay III net%TUB.BITNET@VMA.CC.CMU.EDU Oliver Laumann nish@Sun.COM Masahiko Nishimura nitrex!rbl@uunet.uu.net Rob Lake nixpbe!mboen@seismo.css.gov Martin Boening noibbc!werner@nluug.nl Werner de Bruijn norbert@ira.uka.de Norbert Lindenberg novavax!dons3b1!don@ssd.harris.com Don Joslyn novavax!weiner@ssd.harris.com Bob Weiner nrai@pdx.MENTOR.COM Nitin Rai nuchat!mikel@uunet.UU.NET Michael W. Wellman nvuxh!hall@bellcore.bellcore.com Michael R. Hall nyo@CS.EXETER.AC.UK Neil Youngman obh@ifi.uio.no Ole Bjoern Hessen olender@sor.CS.ColoState.EDU Kurt Olender olin@delfi.UDAC.UU.SE Peter Olin olmadsen@daimi.dk Ole Lehrmann Madsen olorin@dewey.cc.utexas.edu Dave Weinstein olthoff%hplwgo@hplabs.hp.com Walter Olthoff ontologic!calvin!andrews@erl.mit.edu Tim Andrews ontologic!frankie!duhl@erl.mit.edu Joshua Duhl oplinger@minerva.crd.ge.com Brian Scott Oplinger oracle!gstein%dgordon@uunet.UU.NET Greg Stein oracle!hqsun2.oracle.com!cozbutun@uunet.UU.NET Cetin Ozbutun oracle!hqsun2.oracle.com!emeyer@uunet.UU.NET Eric P. Meyer oscar@cuisun.unige.ch Oscar Nierstrasz oxy!hammersslammers1@csvax.caltech.edu David Harr oz@nexus.yorku.ca Ozan Yigit ozsu@cs.UAlberta.CA Tamer Ozsu pacbell!pbhyg!aff@decwrl.dec.com Attila F. Finta page@CS.UCLA.EDU Tom Page PALEXANDER@kuhub.cc.ukans.edu Perry Alexander pantor!richard@uunet.UU.NET Richard Sargent patterso@gmuvax2.gmu.edu Pat Patterson paulk@caen.engin.umich.edu paul kominsky PAVI%rcgl1@eng.eng.ohio-state.edu pavi pch@vega.crd.ge.com Pete Halverson penneyj@SLC.COM D. Jason Penney peper1@unix.cis.pitt.edu J. Christian A. Peper per@cwi.nl Per Spilling perez@ti-csl.csc.ti.com edward perez perle%tubopal.UUCP%TUB.BITNET@VMA.CC.CMU.EDU Frank Wilde perry@apollo.com Jim Perry perry@arkon.key.com Perry The Cynic pfw@cs.aber.ac.uk Paul Warren phil@attctc.Dallas.TX.US Phil Meyer phil@goldhill.com Phil Stanhope philmds!sundoc1!doc@nluug.nl Derek Carr pierre@tcom.stc.co.uk Pierre Best piersol@apple.com Kurt Piersol piet@praxis.cs.ruu.nl Piet van Oostrum pixar!r2d2!jh@ucbvax.Berkeley.EDU John Harkin plogan@pdx.mentor.com Patrick Logan poffen@sj.ate.slb.com Russ Poffenberger popovich@bleecker.cs.columbia.edu Steve Popovich portal!cup.portal.com!Cliff@Sun.COM ? portal!cup.portal.com!dcb@Sun.COM Dan Brotherton portal!cup.portal.com!Jerome_V_Vollborn@Sun.COM Jerome Vollborn prange@erl.mit.edu Michael D. Prange praxis!cathy@uunet.UU.NET Cathy Evans praxis!dpe1@uunet.UU.NET David Ellis praxis!gavin@uunet.UU.NET Gavin Finnie praxis!rmr@uunet.UU.NET Rosamund Rawlings praxis!tjh@uunet.UU.NET Tim Huckvale prc@erbe.se Robert Claeson prlb2!prlb!jvdgoor-mswe-decnet@uunet.uu.net Jac van den Goor provide@uicbert.eecs.uic.edu Scott Nemc ptgarvin%uokmax@uokmax.ecn.uoknor.edu Patrick Garvin purdue!ee.ecn.purdue.edu!dopey.MDBS!jhb@ucbvax.Berkeley.EDU John Brooks pwd%computer-lab.cambridge.ac.uk@NSFnet-Relay.AC.UK Peter Dickman quass@eclipse.stanford.edu Dallan W. Quass quiniou@sunia.irisa.fr Rene Quiniou rafter%cs.warwick.ac.uk@NSFnet-Relay.AC.UK Mark Rafter raible@ew09.nas.nasa.gov Eric L. Raible rakow@ipsi.darmstadt.gmd.dbp.de Thomas C. Rakow Ralf.Brown@B.GP.CS.CMU.EDU Ralf Brown ramani@na-net.stanford.edu Ramani Pichumani raymond@cpsin2.cps.msu.edu Carl J Raymond rayv@cs.uoregon.edu Ray Vukcevich rec%elf115@uunet.UU.NET Roger Critchlow reid@ctc.contel.com Tom Reid rekieta@apple.com Paul Rekieta render@cs.uiuc.edu Hal Render repo!rae@alias Reid Ellis rf%computer-lab.cambridge.ac.uk@NSFnet-Relay.AC.UK Robin Fairbairns rhoda@sybase.com Rhoda Neimand rich@osc.osc.COM Richard Fetik rich@starwolf.med.ge.com Richard B. Ralston rick@hanauma.stanford.edu Richard Ottolini rick@jessica.stanford.edu Rick Wong rick@pavlov.bcm.tmc.edu Richard H. Miller riggs@East.Sun.COM Roger Riggs riks@csl.sony.co.jp Rik Fischer Smoody rit!prague!mjl@cs.rochester.edu Michael Lutz rjg@compsci.aberystwyth.ac.uk Bob G rleroux1@uvicctr.UVic.ca Roger Leroux rmarcus@atc.boeing.com Bob Marcus rmd%mushroom.computer-science.manchester.ac.uk@NSFnet-Relay.AC.UK Rhod Davies rmz@ifi.uio.no Bj\o rn Remseth robert@r2d2.sgi.com Robert Skinner roberts@sunray.UUCP Robert Stanley roman@ATHENA.MIT.EDU Roman J. Budzianowski rracine@ajpo.sei.cmu.edu Roger Racine rsc%koko.csustan.edu@altair.csustan.edu Steve Cunningham rsk@boulder.colorado.edu Rich Kulawiec rtech!rtech!linda@Sun.COM Linda Mundy rti!bnrunix!rick@mcnc.mcnc.org Richard Johns rts@arizona.edu Rick Snodgrass rvadnais@sactoh0.UUCP Robert J. Vadnais rw%beta@LANL.GOV Rena Whiteson rxc@cs.purdue.edu Rajiv Choudhary ryan@sml16.enet.dec.com Mike Ryan rylander@src.honeywell.com Karen Rylander s30804f@puukko.hut.fi Harri Tapio Pasanen sa1z+@andrew.cmu.edu Sudheer Mukund Apte sakkinen@jyu.fi Markku Sakkinen sanderso@turing.cs.rpi.edu Donald B. Sanderson sanjeev@cs.psu.edu Sanjeev Y. Dharap sardesh@EBay.Sun.COM Raj Sardeshpande sartin@hplabsz.hpl.hp.com Rob Sartin sas@cis.ohio-state.edu Scott A. Sutherland sasdjb@sas David J. Biesack savinen@karl.hkkk.fi Teppo Savinen sayrs@ASC.SLB.COM Brian scarfone@cs.Buffalo.EDU Stephen Scarfone scc%computer-lab.cambridge.ac.uk@NSFnet-Relay.AC.UK Stephen Crawley schabtac@stout.ucar.edu Adam scottj%ncrcae@ncrlnk.dayton.ncr.com LSJ scp@sfi.santafe.edu Stephen C. Pope scs@itivax.iti.org Steve Simmons sdl@mbunix.mitre.org Steven Litvintchouk sdm@cs.brown.edu ? seal%canyon.uucp@nike.cair.du.edu Antony Landsman shane%ixta@rand.org Darrell Shane shankar@hpclscu.hp.com Shankar Unni shankar@src.honeywell.com Subash Shankar shd@mcc.com Scott Danforth shepard@qucis.queensu.ca ? shimeall@cs.nps.navy.mil Tim Shimeall shopiro@research.att.com Jonathan Shopiro siping@b.cs.wvu.wvnet.edu Siping Liu siraj@harvard.harvard.edu Ra'ad Siraj sjs%ctt@bellcore.com Stan Switzer skalko@software.org Peggy Skalko Shepard smvh%computer-lab.cambridge.ac.uk@NSFnet-Relay.AC.UK Steve Hailes snicoud@atc.boeing.com Stephen Nicoud snyder%hplsny@hplabs.hp.com Alan Snyder sommar@enea.se Erland Sommarskog speyer%cadillac.cad.mcc.com@mcc.com Bruce Speyer STDUSR09%ETSUACAD.BITNET@VMA.CC.CMU.EDU Stephen G. Davis steinj@argyle.SLC.COM Jacob Stein steve%cs.qmc.ac.uk@NSFnet-Relay.AC.UK Steve Cook steven@uicadb.csl.uiuc.edu Steven Parkes stripes@wam.UMD.EDU Josh Osborne stuart@natinst.com Don Stuart sum@cs.uiuc.edu Bob Sum sumax!spector@beaver.cs.washington.edu Mitchell Spector sun!portal!cup.portal.com!Orion ? sundance@pawl.rpi.edu Mitchell E. Gold susser@hypermail.apple.com Joshua Susser svendfrl@daimi.dk Svend Frolund swami@cs.uiuc.edu Swaminathan Natarajan swami@csseq.tamu.edu Swaminathan Natarajan sww@edsdrd.eds.com Scott W. Woyak T.Day@Cs.Ucl.AC.UK Tim Day tage@sfd.uit.no Tage Stabell-Kuloe taylor@CHARON.arc.nasa.gov will taylor tce@ann.MN.ORG Thomas C. Evans tcm@Sun.COM Terrence Miller teg!sebby@shamash.cdc.com Paul Sebby tegra!calypso!msaleski@swan.ulowell.edu mark saleski terry_bush@sematech.mrc.utexas.edu Terry Bush texbell!camdev!sscott@cs.utexas.edu Steve Scott texbell!moray!siswat!buck@cs.utexas.edu A. Lester Buck thorn@godot.radonc.unc.edu Jesse Thorn tk@allegra Thomas Kirk tking@src.honeywell.com Tim King tla@bartok.att.com Terry L Anderson tom@hprmokg.hp.com Thomas Vachuska tom@stellar.Stellar.COM Thomas Faulhaber toma@hpsadri.hp.com ? tomas@m2cs.uu.no Tomas Felner tombre@weissenburger.crin.fr Karl Tombre tompkins@odi.com Rick Tompkins tony@boulder.Colorado.EDU Tony Sloane tower@bu-it.BU.EDU ? tphillip@grads.cs.ubc.ca Tarmi Phillips tracton@godot.radonc.unc.edu Greg Tracton travis@douglass.cs.columbia.edu Travis Lee Winfrey TROLFS@vax1.tcd.ie Thomas Rolfs tscott%weber@ucsd.edu Tony Scott tsf@cs.cmu.edu Timothy Freeman ttwang@polyslo.CalPoly.EDU Thomas Wang tyen@cs.utexas.edu Anthony Yen ulrich@vip.at Ulrich Neumerkel unf7!hite386!steve@bikini.cis.ufl.edu Steve Hite unido!gmdzi!buth@uunet.UU.NET Angelika Buth unido!gmdzi!es1!valder@uunet.UU.NET Wilhelm Valder unido!ifistg!rathke@uunet.UU.NET Christian Rathke unido!infotue!klaeren@uunet.UU.NET Prof. Dr. Herbert Klaeren unido!nermal.ls5.informatik.unidortmund.de!guendel@uunet.UU.NET A. Guendel unido!netmbx!martini@uunet.UU.NET Martin Ibert unido!quando!gans@uunet.UU.NET Ralf Peter Gans unido!sbsvax!ks@fb10vax.sbsvax Kurt Schreiner ursa!booboo!sean%gotham.East@Sun.COM Sean Cunningham USERWEAT%UALTAMTS.BITNET@VMA.CC.CMU.EDU John Wetherill uucibg@swbatl.SWBT.COM Brian Gilstrap uucigj@swbatl.SWBT.COM Greg Jensen uunet!vaxnod.dnet!unido!scsshh!eva@gateway.sei.cmu.edu Pete Evans uvabick!gert@nluug.nl Gert Hulstein uw-beaver!ssc-vax!bcsfse!bhagwan@uunet.UU.NET Al McPherson van-bc!mdavcr!carto!aew@uunet.UU.NET Alan Walford vanandel@stout.UCAR.EDU Joe Van Andel var@iris.brown.edu Victor A. Riley varian!vaxwaller!twm@lll-winken.llnl.gov Timothy W. Medlin vasta@apollo.com John Vasta vicc@unix.cie.rpi.edu Frank Filz vicorp!sparky!scott@uunet.UU.NET Scott Reed victor@concour.cs.concordia.ca Victor Krawczuk vinoski@apollo.com Stephen Vinoski vlsisj!denis@decwrl.dec.com Denis Bohm voder!nsc!burnett@apple.com John Burnett wake@whyvax.enet.dec.com Bill Wake walkerb@tramp.Colorado.EDU Brian Walker wallace@iitmax.iit.edu Ralph W. Wallace walter@KUB.NL Walter Daelemans warlock!gregb@uunet.UU.NET Gregory S. Baber watmath!alberta!leigh@uunet.uu.net leigh willard watmath!calarc.ARC.CA!lau@uunet.UU.NET Vickitt Lau wcapling@vaxc.Teknowledge.COM Wayne Caplinger weinstei@palantir.gsfc.nasa.gov Stuart Weinstein well!dwt@apple.com David W. Taylor well!nilesinc@apple.com Avi Rappoport werner@rascal.ics.UTEXAS.EDU Werner Uhrig wes@aramis.rutgers.edu Wes west@chance.csc.ti.com Roger West wgg@june.cs.washington.edu William Griswold wheeler@ida.org David Wheeler whitney@sdsu.edu Roger Whitney wilk@svax.cs.cornell.edu Michael Wilk wilson@carcoar.Stanford.EDU Paul Wilson wiml@blake.acs.washington.edu William Lewis win@gatech.edu Win Strickland Jr windemut@uxh.cso.uiuc.edu Andreas Windemut winfave@dutrun.tudelft.nl Alexander Verbraeck winffww@dutrun.tudelft.nl Folkert W. Wierda winfwrd@dutrun.tudelft.nl Paul van der Weerd winters@apollo.com D. Winters wood@ida.org Jonathan Wood WOODRUFF@trojan.llnl.gov John Woodruff wpl%beta@LANL.GOV W. Lysenko wright@hsi.com Gary Wright wrs@apple.com Walter Smith wtwolfe@hubcap.clemson.edu Bill Wolfe wyle@inf.ethz.ch Mitch wzhu@cs.ubc.ca Wen Jing Zhu xanadu!ravi@uunet.UU.NET Ravi Pandya xlab!milt!milt@uunet.UU.NET Milt Ratcliff ychen%metasoft.uucp@BBN.COM Yongdeng Chen yessayan@javel.ICS.UCI.EDU Harry Yessayan yoram@link.cs.columbia.edu Yoram Eisenstadter young@umn-cs.cs.umn.edu Mike Young zmhasan@violet.waterloo.edu Ziaul Masum Hasan zweig@casca.cs.uiuc.edu Johnny Zweig zwilling@cs.wisc.edu Mike Zwilling From don@brillig.umd.edu Mon Sep 18 01:45:14 1989 Date: Mon, 18 Sep 89 01:45:14 -0400 To: NeWS-makers@brillig.umd.edu Subject: BLowing up Psview From: uakari.primate.wisc.edu!ctrsol!emory!km@ames.arc.nasa.gov (Ken Mandelberg) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) The biggest problem I have with psview, is that the print is just too small. A full page of text scaled to sit in a substantial frame is just too small for me to examine carfully at the distance I sit from the monitor. Xtroff, an X11 program with a similar goal solves this by making it easy to display a portion of the page at a larger size, and jockey the "paper" up and down inside the window. Its true that in NeWS you can slide the psview window off the bottom of the screen and resize the visable top of the page. The same trick won't work on the bottom, and is not very convenient even for the top. Has anyone thought of hacking psview to solve this problem? -- Ken Mandelberg | km@mathcs.emory.edu PREFERRED Emory University | {decvax,gatech}!emory!km UUCP Dept of Math and CS | km@emory.bitnet NON-DOMAIN BITNET Atlanta, GA 30322 | Phone: (404) 727-7963 From don@brillig.umd.edu Tue Sep 19 14:07:55 1989 Date: Tue, 19 Sep 89 14:07:55 -0400 To: NeWS-makers@brillig.umd.edu Subject: Need help with GoodNeWS1.2 From: "Stephen C. Pope" Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) on Sat, 16 Sep 89 02:56:27 -0400, stuart@ads.com (Stuart Crawford) said: Stuart> I have everything in GoodNeWS1.2 working just fine except that when I print the Stuart> PostScript code generated by the GoodNeWS dvi2ps program, the LaserWriter seems Stuart> to ignore the vertical and horizontal offsets and scales indicated in the LaTeX Stuart> \special command. Of course, the printed documents end up looking awful. The Stuart> printer is a LaserWriter II NTX. Suggestions are greatly appreciated. Thanks, The tex.ps file supplied with GoodNeWS1.2, which appears to come directly from commontex (though I'm no historian on this matters) has several problems that manifest themselves when dvi2ps code is being output to a LaserWriter that's had LaserPrep downloaded to it (as happens if you've an AppleTalk-based printer using papif, etc). This is due to name collisions between the tex.ps namespace and the LaserPrep namespace, and some apparently incorrect assumptions about what LaserPrep would do for you (I'm also not very versed in LaserPrep; I simply note that the code didn't work, and a few changes causing LaserPred to be ignored fixed it). In any case, below is tex.ps with a few changes made, which now produces dvi2ps output that prints *exactly* as dvinews displays a document which includes output from the GoodNeWS drawing tool via the \special command. Stephen Pope Santa Fe Insitute scp@sfi.santafe.edu tex.ps ======================================================== %! for use by dvi2ps Version 2.00 % a start (Ha!) at a TeX mode for PostScript. % The following defines procedures assumed and used by program "dvi2ps" % and must be downloaded or sent as a header file for all TeX jobs. % By: Neal Holtz, Carleton University, Ottawa, Canada % % % June, 1985 % Last Modified: Aug 25/85 % oystr 12-Feb-1986 % Changed @dc macro to check for a badly formed bits in character % definitions. Can get a <> bit map if a character is not actually % in the font file. This is absolutely guaranteed to drive the % printer nuts - it will appear that you can no longer define a % new font, although the built-ins will still be there. % To convert this file into a downloaded file instead of a header % file, uncomment all of the lines beginning with %-% %-%0000000 % Server loop exit password %-%serverdict begin exitserver %-% systemdict /statusdict known %-% {statusdict begin 9 0 3 setsccinteractive /waittimeout 300 def end} %-% if /TeXDict 200 dict def % define a working dictionary TeXDict begin % start using it. % units are in "dots" (300/inch) /Resolution 300 def /Inch {Resolution mul} def % converts inches to internal units /Mtrx 6 array def %%%%%%%%%%%%%%%%%%%%% Page setup (user) options %%%%%%%%%%%%%%%%%%%%%%%% % dvi2ps will output coordinates in the TeX system ([0,0] 1" down and in % from top left, with y +ive downward). The default PostScript system % is [0,0] at bottom left, y +ive up. The Many Matrix Machinations in % the following code are an attempt to reconcile that. The intent is to % specify the scaling as 1 and have only translations in the matrix to % properly position the text. Caution: the default device matrices are % *not* the same in all PostScript devices; that should not matter in most % of the code below (except for lanscape mode -- in that, rotations of % -90 degrees resulted in the the rotation matrix [ e 1 ] % [ 1 e ] % where the "e"s were almost exactly but not quite unlike zeros. /@letter { letter initmatrix 72 Resolution div dup neg scale % set scaling to 1. 310 -3005 translate % move origin to top (these are not exactly 1" Mtrx currentmatrix pop % and -10" because margins aren't set exactly right) } def % note mode is like letter, except it uses less VM /@note { note initmatrix 72 Resolution div dup neg scale % set scaling to 1. 310 -3005 translate % move origin to top Mtrx currentmatrix pop } def /@landscape { letter initmatrix 72 Resolution div dup neg scale % set scaling to 1. % -90 rotate % it would be nice to be able to do this Mtrx currentmatrix 0 0.0 put % but instead we have to do things like this because what Mtrx 1 -1.0 put % should be zero terms aren't (and text comes out wobbly) Mtrx 2 1.0 put % Fie! This likely will not work on QMS printers Mtrx 3 0.0 put % (nor on others where the device matrix is not like Mtrx setmatrix % like it is on the LaserWriter). 300 310 translate % move origin to top Mtrx currentmatrix pop } def /@legal { legal initmatrix 72 Resolution div dup neg scale % set scaling to 1. 295 -3880 translate % move origin to top Mtrx currentmatrix pop } def /@manualfeed { statusdict /manualfeed true put } def % n @copies - set number of copies /@copies { /#copies exch def } def %%%%%%%%%%%%%%%%%%%% Procedure Defintions %%%%%%%%%%%%%%%%%%%%%%%%%% /@newfont % id @newfont - -- initialize a new font dictionary { /newname exch def pop newname 7 dict def % allocate new font dictionary newname load begin /FontType 3 def /FontMatrix [1 0 0 -1 0 0] def /FontBBox [0 0 1 1] def /BitMaps 128 array def /BuildChar {CharBuilder} def /Encoding 128 array def 0 1 127 {Encoding exch /.undef put} for end newname newname load definefont pop } def % the following is the only character builder we need. it looks up the % char data in the BitMaps array, and paints the character if possible. % char data -- a bitmap descriptor -- is an array of length 6, of % which the various slots are: /ch-image {ch-data 0 get} def % the hex string image /ch-width {ch-data 1 get} def % the number of pixels across /ch-height {ch-data 2 get} def % the number of pixels tall /ch-xoff {ch-data 3 get} def % number of pixels below origin /ch-yoff {ch-data 4 get} def % number of pixels to left of origin /ch-tfmw {ch-data 5 get} def % spacing to next character /CharBuilder % fontdict ch Charbuilder - -- image one character { /ch-code exch def % save the char code /font-dict exch def % and the font dict. /ch-data font-dict /BitMaps get ch-code get def % get the bitmap descriptor for char ch-data null eq not { ch-tfmw 0 ch-xoff neg ch-yoff neg ch-width ch-xoff sub ch-height ch-yoff sub setcachedevice ch-width ch-height true [1 0 0 1 ch-xoff ch-yoff] {ch-image} imagemask } if } def /@sf % fontdict @sf - -- make that the current font { setfont() pop } def % in the following, the font-cacheing mechanism requires that % a name unique in the particular font be generated /@dc % char-data ch @dc - -- define a new character bitmap in current font { /ch-code exch def % ++oystr 12-Feb-86++ dup 0 get length 2 lt { pop [ <00> 1 1 0 0 8.00 ] } % replace <> with null if % --oystr 12-Feb-86-- /ch-data exch def currentfont /BitMaps get ch-code ch-data put currentfont /Encoding get ch-code dup ( ) cvs cvn % generate a unique name simply from the character code put } def /@bop0 % n @bop0 - -- begin the char def section of a new page { } def /@bop1 % n @bop1 - -- begin a brand new page { pop erasepage initgraphics Mtrx setmatrix /SaveImage save def() pop } def /@eop % - @eop - -- end a page { showpage SaveImage restore() pop } def /@start % - @start - -- start everything { @letter % (there is not much to do) } def /@end % - @end - -- done the whole shebang { end } def /p % x y p - -- move to position { moveto } def /r % x r - -- move right { 0 rmoveto } def /s % string s - -- show the string { show } def /c % ch c - -- show the character (code given) { c-string exch 0 exch put c-string show } def /c-string ( ) def /ru % dx dy ru - -- set a rule (rectangle) { /dy exch neg def % because dy is height up from bottom /dx exch def /x currentpoint /y exch def def % remember current point newpath x y moveto dx 0 rlineto 0 dy rlineto dx neg 0 rlineto closepath fill x y moveto } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% the \special command junk %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % The structure of the PostScript produced by dvi2ps for \special is: % @beginspecial % - any number of @hsize, @hoffset, @hscale, etc., commands % @setspecial % - the users file of PostScript commands % @endspecial % The @beginspecial command recognizes whether the Macintosh Laserprep % has been loaded or not, and redfines some Mac commands if so. % The @setspecial handles the users shifting, scaling, clipping commands % The following are user settable options from the \special command. /@SpecialDefaults { /hs 8.5 Inch def /vs 11 Inch def /hoff 0 def /voff 0 def /hsc 1 def /vsc 1 def /CLIP false def } def % d @hsize - specify a horizontal clipping dimension % these 2 are executed before the MacDraw initializations /@hsize {/hs exch def /CLIP true def} def /@vsize {/vs exch def /CLIP true def} def % d @hoffset - specify a shift for the drwgs /@hoffset {/hoff exch def} def % changed excl to exch --> BUG (arthur van Hoff) /@voffset {/voff exch def} def % s @hscale - set scale factor /@hscale {/hsc exch def} def /@vscale {/vsc exch def} def /@setclipper { hsc vsc scale CLIP { newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip } if } def % this will be invoked as the result of a \special command (for the % inclusion of PostScript graphics). The basic idea is to change all % scaling and graphics back to defaults, but to shift the origin % to the current position on the page. Due to TeXnical difficulties, % we only set the y-origin. The x-origin is set at the left edge of % the page. /@beginspecial % - @beginspecial - -- enter special mode { gsave /SpecialSave save def % the following magic incantation establishes the current point as % the users origin, and reverts back to default scalings, rotations currentpoint transform initgraphics itransform translate @SpecialDefaults % setup default offsets, scales, sizes @MacSetUp % fix up Mac stuff } def /@setspecial % to setup user specified offsets, scales, sizes (for clipping) { MacDrwgs {md begin /pxt hoff def /pyt voff neg def end} {hoff voff translate @setclipper} ifelse } def /@endspecial % - @endspecial - -- leave special mode { SpecialSave restore grestore } def /MacDrwgs false def % will get set if we think the Mac LaserPrep file has been loaded % - @MacSetUp - turn-off/fix-up all the MacDraw stuff that might hurt us % we depend on 'psu' being the first procedure executed % by a Mac document. We redefine 'psu' to adjust page % translations, and to do all other the fixups required. % This stuff will not harm other included PS files /@MacSetUp { userdict /md known % if md is defined { userdict /md get type /dicttype eq % and if it is a dictionary { /MacDrwgs true def md begin % then redefine some stuff /psu % redfine psu to set origins, etc. /psu load % this procedure contains almost all the fixup code { /letter {} def % it is bad manners to execute the real /note {} def % versions of these (clears page image, etc.) /legal {} def statusdict /waittimeout 300 put /page {pop} def % no printing of pages /pyt voff neg def % x & y pixel translations /pxt hoff def } concatprocs def /od % redefine od to set clipping region /od load { @setclipper } concatprocs def end } if } if } def % p1 p2 concatprocs p - concatenate procedures /concatprocs { /p2 exch cvlit def /p1 exch cvlit def /p p1 length p2 length add array def p 0 p1 putinterval p p1 length p2 putinterval p cvx } def end % revert to previous dictionary From don@brillig.umd.edu Tue Sep 19 14:08:28 1989 Date: Tue, 19 Sep 89 14:08:28 -0400 To: NeWS-makers@brillig.umd.edu Subject: Need help with GoodNeWS1.2 From: Stuart Crawford Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Stephen... Thanks for responding to my query re: tex.ps in GoodNeWS. I already read your 22 Jul 89 posting to mail.news-makers.. "While trying to get output from the GoodNeWS drawing tool to my printer using dvi2ps, I discovered a little problem in the tex.ps file." so the tex.ps file you sent me by email is *identical* to the one I have been using. If I try to print *without* your voff, hoff fixes, I get no printout whatsover (what symptoms did you get?) In any event, I am still having problems, even with your fixes. The printer seems to ignore the offset and scaling instructions. Even if I go in and manually edit the PostScript code generated from dvi2ps, the size and location of the figures imported by \special remain unchanged in the printed output. Any suggestions would be appreciated! -Stuart From don@brillig.umd.edu Tue Sep 19 14:09:05 1989 Date: Tue, 19 Sep 89 14:09:05 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: BLowing up Psview From: gem.mps.ohio-state.edu!ginosko!usc!henry.jpl.nasa.gov!elroy.jpl.nasa.gov!mahendo!wlbr!awds26!mh@tut.cis.ohio-state.edu (Mike Hoegeman) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <4349@emory.mathcs.emory.edu> km@mathcs.emory.edu (Ken Mandelberg) writes: >The biggest problem I have with psview, is that the print is just too >small. A full page of text scaled to sit in a substantial frame is just >too small for me to examine carfully at the distance I sit from the >monitor. ...etc... >Its true that in NeWS you can slide the psview window off the bottom of >the screen and resize the visable top of the page. The same trick won't >work on the bottom, and is not very convenient even for the top. I believe there is a version of psview which does this on one on the SEX tape from the sun user group conference which took place in miami. if you cannot get a hold of this tape , check out tumtum.umd.edu -mike From don@brillig.umd.edu Tue Sep 19 14:09:59 1989 Date: Tue, 19 Sep 89 14:09:59 -0400 To: NeWS-makers@brillig.umd.edu Subject: slightly spruced up version of jeremy's 'newsbiff' program From: gem.mps.ohio-state.edu!ginosko!usc!henry.jpl.nasa.gov!elroy.jpl.nasa.gov!mahendo!wlbr!awds26!mh@tut.cis.ohio-state.edu (Mike Hoegeman) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) The subject says it all I did not do a whole lot other than fix up the calling syntax a tad and make it a little more sendmail friendly. see the header on newsbiff.c for more info. -mike ----------------------CUT HERE---------------------------------- echo x - MESSAGE sed 's/^X//' >MESSAGE <<'*-*-END-of-MESSAGE-*-*' XDate: Fri, 19 Aug 88 12:46:37 EDT XTo: NeWS-makers@brillig.umd.edu XSubject: NeWS mail notifier XFrom: eagle!icdoc!Ist!jh@ucbvax.Berkeley.EDU (Jeremy Huxtable) X XHere is (yet) another NeWS mail notifier which shows you when mail Xarrives and allows you to read the article. It was inspired by the Xrecent posting to this group by Josh Siegel. X XWhen mail arrives you get a little envelope appearing on your screen Xwhich is the icon for a window displaying the offending article. X XDocumentation consists of the comment at the top of the program. X XSuggestions for enhancements will be gratefully received. Some possible Xones are: X X o Use a TextCanvas type window for reading the mail item. X o For short messages, pop up a postcard rather than an envelope. X o For really long messages, pop up a parcel icon. X o For really short messages, pop up a telegram and change all X the message into upper case with periods replaced by STOP X etc. X *-*-END-of-MESSAGE-*-* echo x - Makefile sed 's/^X//' >Makefile <<'*-*-END-of-Makefile-*-*' XCFLAGS=-g XINCLUDE=-I/usr/NeWS/include XLIBS=/usr/NeWS/lib/libcps.a X Xnewsbiff: newsbiff.c newsbiff.h X $(CC) $(CFLAGS) $(INCLUDE) newsbiff.c -o newsbiff $(LIBS) X cp newsbiff /usr/NeWS/bin X Xnewsbiff.h: newsbiff.cps X cps newsbiff.cps X Xclean: X rm -f newsbiff.h newsbiff *.o core *~ *.BAK *-*-END-of-Makefile-*-* echo x - demo sed 's/^X//' >demo <<'*-*-END-of-demo-*-*' X#!/bin/csh -f X# Run this on the same machine you're running the NeWS server on. Xset hostname = awds26 Xset username = `whoami` Xecho "UserProfile /UserName ($username) put" | psh X./newsbiff $username < MESSAGE *-*-END-of-demo-*-* echo x - newsbiff.c sed 's/^X//' >newsbiff.c <<'*-*-END-of-newsbiff.c-*-*' X/* X** Created By: X** X** Jeremy Huxtable (jh@ist.co.uk) X** X** Mon Aug 15 12:33:25 BST 1988 X** X** mh@wlbr.imsd.contel.com: spruced up a bit. X** X*/ X X/* X**LIBS: -lcps X*/ X X/* X Xnewsbiff.c: X X Usage: newsbiff name@host@port name@host@port..... X X Inspired by the program posted by Josh Siegel (siegel@hc.dspo.gov), X this program will notify you via your NeWS server when new mail X arrives. The mail item should be given as standard input. The X program opens a connection to the NeWS server (if any) on X , checks that the user is the same as , and X pops up an icon shaped like an envelope. You can click on this icon X to get a window displaying the whole mail item. X X To use this you must change two files: X X 1) in your "user.ps" you need a line of the form: X X UserProfile /UserName () put X X and you probably need to disable network security: X X systemdict /NetSecurityWanted false put X X 2) in your ".forward" file in your home directory you need a line X of the form: X X ,|"newsbiff user@host@port" X X (you can leave off @host@port part, in which case it will use X "@localhost@2000" as a default) X X mine's like this: X X mh,|"/nbin/newsbiff mh@awds26@2000" X X NOTE: if you work on many different machines that all have the same X physical home directory (via NFS) put something like this in your X .forward file. X X mh@awds26,mh-biff@awds26 X X and then put mh-biff in /etc/aliases like so... X X mh-biff: "|/nbin/newsbiff mh@awds26@2000","|/nbin/newsbiff mh@awds14@2000",... X X this way you'll get biff-ed on each machine that you are running a X NeWS server on. If someone else is running a NeWS server it will X not biff them as long as they do not have the same UserName in X their UserProfile PostScript dictionary as you. X X Of course, this is only a "biff" type program. It merely tells you X that mail has arrived and lets you read it, nothing else. X X X*/ X X#ifdef SYSVREF X#ifdef INTERLANTCP X#include X#include X#include X#else X#include X#endif X#else X#include X#include X#include X#endif X X#include X#include "newsbiff.h" X X#define MAXSTR 512 X Xmain(argc, argv) X int argc; X char **argv; X{ X for(argc--, argv++; argc >= 1; argc--, argv++) X biffit(*argv); X exit(0); X} X Xbiffit(spec) X char *spec; X{ X extern char *strchr(); X extern long atol(); X struct hostent *hp; X char from[MAXSTR]; X char line[MAXSTR]; X char server[MAXSTR]; X char host[MAXSTR]; X char username[MAXSTR]; X char *p; X int port = 2000; X int count = 0; X X strcpy(username, spec); X if ((p = strchr(username, '@'))) X { X *p++ = '\0'; X strcpy(host, p); X } X else X strcpy(host, "localhost"); X if ((p = strchr(host, '@'))) X { X *p++ = '\0'; X port = atol(p); X } X else X port = 2000; X if (!(hp = gethostbyname(host))) X { X return (1); /* Host unknown */ X } X X X /* X * * There ought to be a better way of doing this rather than * X * putting NEWSSERVER into the environment. X */ X sprintf(server, X "NEWSSERVER=%lu.2000;%s\n", ntohl(*(u_long *) hp->h_addr), host); X putenv(server); X X if (!ps_open_PostScript()) X return (0); /* Can't contact NeWS server */ X X ps_username(line); X if (strcmp(line, username) != 0) X { X ps_close_PostScript(); X return (0); /* User name doesn't match */ X } X X X strcpy(from, "Anon"); X ps_begin_list(); X while (fgets(line, 255, stdin)) X { X line[strlen(line) - 1] = 0; X if (count++ > 100) X { X ps_string("More follows......"); X break; X } X ps_string(line); X sscanf(line, "From: %s", from); X } X ps_end_list(); X X /*- shorten the label on put on the envelope. just use the X user@host portion of the mailing address, can the domain stuff -*/ X X if ((p = strchr(from, '@')) && (p = strchr(p, '.'))) X *p = '\0'; X ps_mailwindow(from); X ps_close_PostScript(); X return (0); X} *-*-END-of-newsbiff.c-*-* echo x - newsbiff.cps sed 's/^X//' >newsbiff.cps <<'*-*-END-of-newsbiff.cps-*-*' X% X% NeWS interface for the "newsmail" program. X% X X#define NAME_TAG 1 X X% Get the user name of the owner of the NeWS server Xcdef ps_username(string s) => NAME_TAG(s) X UserProfile /UserName known X { UserProfile /UserName get } X { (?) } ifelse X NAME_TAG tagprint typedprint X X% Three procedures for sending down an array of strings Xcdef ps_begin_list() X [ X Xcdef ps_end_list() X ] X Xcdef ps_string(string s) X s X X% Actually create the icon. Xcdef ps_mailwindow(string sender) X X/MailWindow DefaultWindow [ X /Text % Text of the mail item X /Sender % Name of the sender X] Xclassbegin X /TextFont /Times-Roman findfont 14 scalefont def X /SmallFont /Times-Roman findfont 10 scalefont def X /Margin 10 def X X /new { % text sender => instance X /new super send begin X /Sender exch def X /Text exch def X /Iconic? true def X /IconX 50 def X /IconY 800 def X /IconWidth 64 2 mul def X /IconHeight 40 2 mul def X X IconX IconY % position of window X % Now calculate the width and height of the window X TextFont setfont X 0 Text { stringwidth pop max } forall X Margin 2 mul add BorderLeft add BorderRight add % Width X X TextFont fontheight Text length mul Margin 2 mul add X BorderTop add BorderBottom add % Height X X 3 2 roll 1 index sub IconHeight add 3 1 roll % Adjust Y position X reshape % Shape the window X IconX IconY move % Move the icon to its proper place X currentdict X end X } def X X % Write the mail item into the window. X /PaintClient { X 1 fillcanvas 0 setgray X TextFont setfont X Margin ClientHeight Margin sub TextFont fontheight sub moveto X Text { X show X Margin currentpoint exch pop moveto X 0 TextFont fontheight neg rmoveto X } forall X } def X X % Make the Icon look like an envelope. X /PaintIcon { X gsave X IconCanvas setcanvas X 1 fillcanvas 0 strokecanvas X matrix currentmatrix X IconWidth IconHeight scale X 0 0 moveto 0 1 lineto .5 .3 lineto 1 1 lineto X 1 0 lineto closepath clip % Set flap clipping path X 0 0 moveto .5 .7 lineto 1 0 lineto stroke % Draw two lines clipped by flap X initclip % Reset clip path X 0 1 moveto .5 .3 lineto 1 1 lineto stroke % Draw flap X .5 .7 moveto X setmatrix X SmallFont setfont Sender cshow X grestore X } def X Xclassend def X X% Create the window. We create a new process group so that the window X% does not get zapped when the C program closes its socket. X{ X newprocessgroup X sender framebuffer /new MailWindow send X /map exch send X} fork clear *-*-END-of-newsbiff.cps-*-* exit From don@brillig.umd.edu Tue Sep 19 14:17:21 1989 Date: Tue, 19 Sep 89 14:17:21 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: BLowing up Psview From: wind!naughton@sun.com (Patrick Naughton) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <4349@emory.mathcs.emory.edu> km@mathcs.emory.edu (Ken Mandelberg) writes: >The biggest problem I have with psview, is that the print is just too >small. A full page of text scaled to sit in a substantial frame is just >too small for me to examine carfully at the distance I sit from the >monitor. > >Xtroff, an X11 program with a similar goal solves this by making it >easy to display a portion of the page at a larger size, and jockey the >"paper" up and down inside the window. > >Has anyone thought of hacking psview to solve this problem? >-- >Ken Mandelberg | km@mathcs.emory.edu PREFERRED >Emory University | {decvax,gatech}!emory!km UUCP >Dept of Math and CS | km@emory.bitnet NON-DOMAIN BITNET >Atlanta, GA 30322 | Phone: (404) 727-7963 PageView, the PostScript previewer shipped with OpenWindows (aka X11/NeWS) is a total rework of psview which includes this feature as well as many other enhancements. We are hard at work on OpenWindows 1.1, so you should be able to get 1.0 very soon. -Patrick ______________________________________________________________________ Patrick J. Naughton ARPA: naughton@sun.com Window Systems Group UUCP: ...!sun!naughton Sun Microsystems, Inc. AT&T: (415) 336 - 1080 From don@brillig.umd.edu Sat Sep 23 20:18:50 1989 Date: Sat, 23 Sep 89 20:18:50 -0400 To: NeWS-makers@brillig.umd.edu Subject: psload for xnews From: aramis.rutgers.edu!porthos.rutgers.edu!marantz@rutgers.edu (Roy Marantz) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) For whatever anyone thinks it is worth here are the diffs needed to create a version of native psload for openlook/xnews. There are some interesting machinations that I had to go through to get this to work so it is instructive in that respect. Anyway happy hacking Roy cd /usr/local/openwin/share/src/xnews/client diff psload.cps psload.cps /usr/NeWS/clientsrc/client/psload.cps 43d42 < 45,56c44,55 < /Ydivs exch .5 add round def < /client win send setcanvas < ClearColor fillcanvas < /opened? win send < {can} {icn} ifelse setcanvas < RuleColor strokecanvas < initgraphics clippath pathbbox points2rect < Ydivs div exch Xdivs div exch scale pop pop < 1 1 Ydivs 1 sub {0 exch moveto Xdivs 0 rlineto} for < RuleColor setcolor stroke < 0 0 moveto < FillColor setcolor --- > /Ydivs exch .5 add round def > win begin > Iconic? dup { IconCanvas } { ClientCanvas } ifelse > end setcanvas > ClearColor fillcanvas > { RuleColor strokecanvas } if > initgraphics clippath pathbbox points2rect > Ydivs div exch Xdivs div exch scale pop pop > 1 1 Ydivs 1 sub {0 exch moveto Xdivs 0 rlineto} for > RuleColor setcolor stroke > 0 0 moveto > FillColor setcolor 58,59c57 < < /DLV { % loadfactor x => - (draw next loadfactor value) --- > /DLV { % loadfactor x => - (draw next loadfactor value) 63c61 < /paint win send --- > /paintclient win send % client will reset scaling 67a66 > % FillColor setcolor fill 72,118c71,79 < < /AbortProc { < % If we still have win around, destroy it. < /win where { < pop < /destroy win send < } if < } def < /NestedServer {currentfile cvx exec AbortProc} def < NestedServer < < /LoadFrame /defaultclass ClassBaseFrame send [ < /Connection % Holds the connection for the c side of the program < ] < classbegin < /newinit { < /newinit super send < /Connection currentfile def < } def < < /destroy { % need to get rid of the connection < /destroy super send < Connection closefile < } def < < /open { < /open super send < /opened? self send { < /paint self send % need to repaint on open < } if < } def < classend def < < /win [ClassCanvas] [/Footer false] < framebuffer /new LoadFrame send def < title /setlabel win send < % in NeWS 1.1 psload icon the graph uses the whole icon (including the label) < % title /seticonlabel win send < /can /client win send def < /icn /Icon /subframe win send pop def < {(C) print} /setpaintproc can send < {(I) print} /setpaintproc /Icon /sendsubframe win send < /reshapefromuser win send < can setcanvas < /activate win send < /map win send < --- > /win framebuffer /new DefaultWindow send def > { /FrameLabel title def > /IconLabel title def > /PaintClient {(C) print} def > /PaintIcon {(I) print} def > } win send > /reshapefromuser win send > win /ClientCanvas get setcanvas > /map win send -- uucp: {backbone}!rutgers!aramis.rutgers.edu!marantz arpa: marantz@aramis.rutgers.edu From don@brillig.umd.edu Sat Sep 23 20:19:28 1989 Date: Sat, 23 Sep 89 20:19:28 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: BLowing up Psview From: mcsun!ukc!edcastle!lfcs!ajcd@uunet.uu.net (Angus Duggan) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Yes, I've not only thought about it, I've done it. The local version of psview has scroll bars, enlarge and reduce (by a fixed factor, but multiple enlargements/reductions are possible), European page sizes specifiable from the command line (by the -a[0-6] switch), and a hack to allow previewing of postscript files produced by ArborText's DVILASER/PS (version 4.0.6) dvi converter. There is also a box facility, which you can use to draw a frame around any part of the picture, and the dimensions and offset of the frame will be displayed in inches, centimetres, or PostScript points (1/72 in). The dvi hack requires an altered prologue for DVILASER/PS, and a simple program (called psmung) to make the output PostScript closer to conforming PostScript (however, ArborText has said that the latest version of DVILASER/PS will produce conforming files). If there is enough interest, I will post diffs to psview, and the other required parts for dvi previewing. I am prepared to mail this stuff out to individuals also, but please be patient, I am very busy just now. Warning: altering psview was the first time I used LiteItems, or tried to do anything much with overlay canvases, so the code is probably pretty grotty. I had one problem with overlay canvases, which was that I couldn't reshape them, and had to create a new one each time they needed reshaping. Is this a known problem, or am I just doing it wrong? Angus Angus Duggan, Department of Computer Science, | (C) AJCD 1989 University of Edinburgh, JCMB, | USENET: ajcd@lfcs.ed.ac.uk The King's Buildings, Mayfield Road, | JANET: ajcd@uk.ac.ed.lfcs Edinburgh, EH9 3JZ, Scotland. | OR: ajcd%lfcs.ed.ac.uk@nsfnet-relay.ac.uk From don@brillig.umd.edu Sat Sep 23 20:23:46 1989 Date: Sat, 23 Sep 89 20:23:46 -0400 To: NeWS-makers@brillig.umd.edu Subject: NeWS/X11 merge? From: mcsun!ukc!edcastle!lfcs!ajcd@uunet.uu.net (Angus Duggan) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I've just been reading some articles in this newsgroup which seem to imply that the Sun X11/NeWS merge has been released. Is this true? I've been looking for info on it for a while, but haven't seen anything authoratative. Can someone from Sun comment, please? Thanks, Angus -- Angus Duggan, Department of Computer Science, | University of Edinburgh, JCMB, | USENET: ajcd@lfcs.ed.ac.uk The King's Buildings, Mayfield Road, | JANET: ajcd@uk.ac.ed.lfcs Edinburgh, EH9 3JZ, Scotland. | OR: ajcd%lfcs.ed.ac.uk@nsfnet-relay.ac.uk From don@brillig.umd.edu Sat Sep 23 20:56:45 1989 Date: Sat, 23 Sep 89 20:56:45 -0400 To: NeWS-makers@brillig.umd.edu Subject: NeWS & PostScript Training From: dreams!rbogen@sun.com (Richard Bogen) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) The education department of Sun Microsystems offers a number of courses of interest to SunOS programmers which are taught periodically at several locations in the U.S. and abroad. The following information describes one of the offerings of relevance to the readers of this newsgroup. Your inquiry for further information or U.S. registration is welcome by calling the toll-free number (800) 422-8020 between 8 a.m. and 5 p.m. PST. Dedicated classes at a Sun training center and classes at your facility are also available. Those wishing to take classes outside the U.S. should contact their local Sun field office. Sun employees should not use the above number either but should use internal email instead. ===================================================================== NeWS Programming SG-260 Overview: This entry-level class teaches programmers how to develop graphical user interfaces for a distributed-computing environment using the Network extensible Window System (NeWS(TM)). A ground-up approach is taken starting with PostScript(R), progressing to NeWS extensions, and ending with the C-to-PostScript interface. Prerequisites: Before attending this course, students should be able to: * Demonstrate at least two years of programming experience in languages such as C or Pascal * Understand the concept and use of pointers and structures * Use basic SunOS commands * Use the SunView user interface described in SunView 1 Beginner's Guide (Sun part number 800-1706) * Create and edit textfiles using one of the editors, vi or TextEditor. Duration: Five days Objectives: Upon completing this course, students should be able to: * Have a general overview of how NeWS compares to other window systems * Demonstrate PostScript programming, including stack manipulation, path construction, painting, and coordinate transformation * Use NeWS extensions to build canvases, create processes, and handle events * Understand NeWS object-oriented programming and its implementation * Use the Lite toolkits for windows, menus, and items * Use the C-to-PostScript preprocessor to connect client processes to NeWS. Tuition: $1250 Dates: Andover, Mass.: November 6 - 10 Baltimore, Md.: October 9 - 13 December 4 - 8 Milpitas, Cal.: October 2 - 6 From don@brillig.umd.edu Sat Sep 23 20:57:00 1989 Date: Sat, 23 Sep 89 20:57:00 -0400 To: NeWS-makers@brillig.umd.edu Subject: Enhanced psview and DVI previewing (Part 1 of 2) From: mcsun!ukc!edcastle!lfcs!ajcd@uunet.uu.net (Angus Duggan) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I've decided to post my psview enhancements (enlargement/reduction, scrollbars, European paper sizes, box mode), and my DVILASER/PS previewing code. If you only want the psview enhancements, you only need the Part 1. Have fun, Angus -- Angus Duggan, Department of Computer Science, | University of Edinburgh, JCMB, | USENET: ajcd@lfcs.ed.ac.uk The King's Buildings, Mayfield Road, | JANET: ajcd@uk.ac.ed.lfcs Edinburgh, EH9 3JZ, Scotland. | OR: ajcd%lfcs.ed.ac.uk@nsfnet-relay.ac.uk #! /bin/sh # This is a shell archive. Remove anything before this line, then feed it # into a shell via "sh file" or similar. To overwrite existing files, # type "sh file -c". # The tool that generated this appeared in the comp.sources.unix newsgroup; # send mail to comp-sources-unix@uunet.uu.net if you want that tool. # If this archive is complete, you will see the following message at the end: # "End of archive 1 (of 2)." # Contents: README MANIFEST psview.c.diff psview.cps.diff # Wrapped by ajcd@cheops on Thu Sep 21 15:04:03 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(9798 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' X X Here are my diffs to psview, which add scrollbars, enlargement and Xreduction, and a "size box". There are a few other minor differences, none of Xwhich should cause problems. X This shar file also contains the necessary files to use psview for Xpreviewing the output of Arbortext's DVILASER/PS driver. X XWARNING: X NO WARRANTY OF ANY KIND IS PROVIDED WITH THIS SOFTWARE. USE AT YOUR OWN XRISK. NO LIABILITY FOR LOSS OF DATA OR DAMAGE IS ACCEPTED BY THE AUTHOR. X XN.B. X This was also my first attempt at using LiteItems and overlay canvases, Xperhaps some experienced NeWS programmer would care to look over this code and Xtell me what (if anything) is wrong with it. X You may do whatever you want to with this stuff, but I would like some Xacknowledgement if you use them in a product. (Please?) X X------------------------------------------------------------------------------- X XInstallation: X To make the new psview, do X X cd /usr/NeWS/clientsrc/client X patch psview.c XUniversity of Edinburgh, JCMB, | USENET: ajcd@lfcs.ed.ac.uk XThe King's Buildings, Mayfield Road, | JANET: ajcd@uk.ac.ed.lfcs XEdinburgh, EH9 3JZ, Scotland. | OR: ajcd%lfcs.ed.ac.uk@nsfnet-relay.ac.uk END_OF_FILE echo shar: NEWLINE appended to \"'README'\" if test 9799 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' fi if test -f 'MANIFEST' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MANIFEST'\" else echo shar: Extracting \"'MANIFEST'\" \(620 characters\) sed "s/^X//" >'MANIFEST' <<'END_OF_FILE' X File Name Archive # Description X---------------------------------------------------------- X README 1 Description of this shar file X MANIFEST 1 The file you are reading X psview.c.diff 1 Diffs to psview for enhancements X psview.cps.diff 1 Diffs to psview for enhancements X dvips.opt 2 DVILASER/PS option file for NeWS previewing X dvips.pro 2 DVILASER/PS prologue file for NeWS previewing X dviview 2 /bin/sh script to preview dvi file X psmung.c 2 Filter to rearrange DVILASER/PS output END_OF_FILE echo shar: NEWLINE appended to \"'MANIFEST'\" if test 621 -ne `wc -c <'MANIFEST'`; then echo shar: \"'MANIFEST'\" unpacked with wrong size! fi # end of 'MANIFEST' fi if test -f 'psview.c.diff' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'psview.c.diff'\" else echo shar: Extracting \"'psview.c.diff'\" \(5286 characters\) sed "s/^X//" >'psview.c.diff' <<'END_OF_FILE' X*** /home/newswin/NeWS1.1/clientsrc/client/psview.c Mon Feb 22 19:00:44 1988 X--- psview.c Thu Sep 21 10:03:48 1989 X*************** X*** 61,66 **** X--- 61,67 ---- X static int box = 1; X static int recolor; X static int ditroff = 0; X+ static int dvips = 0; X static int direction; X X struct point { X*************** X*** 213,218 **** X--- 214,220 ---- X } X while (fgets(line, sizeof line, f)) X if (line[0] == '%') X+ { X if (line[1] == '%') X switch (line[2]) { X /*- case 'E': X*************** X*** 220,226 **** X EndProlog = ftell(f); X break; */ X case 'P': X! if (strncmp(line + 3, "age:", 4) == 0) { X if (npages >= psize) { X if (psize) X pagestart = (int *) realloc(pagestart, (psize = npages * 3 / 2) * sizeof(int)); X--- 222,229 ---- X EndProlog = ftell(f); X break; */ X case 'P': X! if ((strncmp(line + 3, "age", 3) == 0) && X! (line[6] != 's')) { X if (npages >= psize) { X if (psize) X pagestart = (int *) realloc(pagestart, (psize = npages * 3 / 2) * sizeof(int)); X*************** X*** 236,242 **** X break; X } X else if (line[1] == ' ' && line[2] == 'l' && strncmp(line, "% lib/psdit.pro", 15) == 0) X! ditroff = 1; X if (npages > 0) { X if (EndProlog < 0 || pagestart[0] < EndProlog) X EndProlog = pagestart[0]; X--- 239,248 ---- X break; X } X else if (line[1] == ' ' && line[2] == 'l' && strncmp(line, "% lib/psdit.pro", 15) == 0) X! ditroff = 1; X! else if (line[1] == ' ' && line[3] == 'D' && strncmp(line, "% Dvips.pro", 12) == 0) X! dvips = 1; X! } X if (npages > 0) { X if (EndProlog < 0 || pagestart[0] < EndProlog) X EndProlog = pagestart[0]; X*************** X*** 287,293 **** X ps_startpage(); X PumpBytes(f, pagestart[n], pagestart[n + 1]); X ps_endpage(); X! if (notfirst) X ps_damageall(); X notfirst = 1; X X--- 293,299 ---- X ps_startpage(); X PumpBytes(f, pagestart[n], pagestart[n + 1]); X ps_endpage(); X! /* if (notfirst)*/ X ps_damageall(); X notfirst = 1; X X*************** X*** 325,343 **** X ps_defBG(); X } X } X- if (EndProlog > 0) { X- ps_startprolog(); X- PumpBytes(f, 0, EndProlog); X- ps_endprolog(); X- } X- if (ditroff) X- ps_ditroff_fix(); X if (npages < 2) X make_MIN_MAX(); X if (npages >= 2) X make_MAX(); X X! GotoPage(f, 0); X { X char buf[100]; X #ifndef SYSVREF X--- 331,346 ---- X ps_defBG(); X } X } X if (npages < 2) X make_MIN_MAX(); X if (npages >= 2) X make_MAX(); X X! if (EndProlog > 0 && !dvips) { X! ps_startprolog(); X! PumpBytes(f, 0, EndProlog); X! ps_endprolog(); X! } X { X char buf[100]; X #ifndef SYSVREF X*************** X*** 354,359 **** X--- 357,372 ---- X *dest++ = 0; X ps_setupwindow(buf[0] ? buf : "Preview"); X } X+ if (EndProlog > 0 && dvips) { X+ ps_dvips_fix(); X+ ps_startprolog(); X+ PumpBytes(f, 0, EndProlog); X+ ps_endprolog(); X+ } X+ if (ditroff) X+ ps_ditroff_fix(); X+ ps_prolog_done(); X+ GotoPage(f, 0); X while (!psio_error(PostScriptInput) && !psio_eof(PostScriptInput)) X if (get_page_selection(&page_selection)) X GotoPage(f, page_selection - 1); X*************** X*** 367,377 **** X char *filename = 0; /* The file to be previewed */ X char *tempname = 0; /* The name of a temporary file, if we created X * one */ X ProgramName = argv[0]; X! if (argv[1] == NULL) { X printf("%s: Requires PostScript filename.\n",ProgramName ); X exit(0); X! } X while (--argc > 0) X if ((++argv)[0][0] == '-') X switch (argv[0][1]) { X--- 380,393 ---- X char *filename = 0; /* The file to be previewed */ X char *tempname = 0; /* The name of a temporary file, if we created X * one */ X+ char asize; /* the size of A? paper */ X+ short temp; /* for swapping sizes */ X+ X ProgramName = argv[0]; X! /*- if (argv[1] == NULL) { X printf("%s: Requires PostScript filename.\n",ProgramName ); X exit(0); X! } */ X while (--argc > 0) X if ((++argv)[0][0] == '-') X switch (argv[0][1]) { X*************** X*** 390,395 **** X--- 406,442 ---- X ProgramName, argv[0]); X exit(-1); X } X+ break; X+ case 'a': X+ case 'A': X+ asize = argv[0][2]; X+ if (asize < '0' || asize > '5') { X+ fprintf(stderr, "%s: Bad page size `%s'\n", ProgramName, argv[0]); X+ exit(-1); X+ } X+ size.x = 2381; X+ size.y = 3368; X+ while (asize-- > '0') { X+ short temp; X+ temp = size.y; X+ size.y = size.x; X+ size.x = temp / 2; X+ } X+ switch (argv[0][3]) { X+ case 'L': X+ case 'l': X+ temp = size.x; size.x = size.y; size.y = temp; X+ break; X+ case 'P': X+ case 'p': X+ case '\0': X+ break; X+ default: X+ fprintf(stderr, "%s: Bad page orientation `%s'\n", ProgramName, argv[0]); X+ exit(-1); X+ } X+ center.x = size.x / 2; X+ center.y = size.y / 2; X break; X case 'b': X if (!parse_color(&argv[0][2], &FGBG[1])) { END_OF_FILE echo shar: NEWLINE appended to \"'psview.c.diff'\" if test 5287 -ne `wc -c <'psview.c.diff'`; then echo shar: \"'psview.c.diff'\" unpacked with wrong size! fi # end of 'psview.c.diff' fi if test -f 'psview.cps.diff' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'psview.cps.diff'\" else echo shar: Extracting \"'psview.cps.diff'\" \(12841 characters\) sed "s/^X//" >'psview.cps.diff' <<'END_OF_FILE' X*** /home/newswin/NeWS1.1/clientsrc/client/psview.cps Mon Feb 22 19:00:45 1988 X--- psview.cps Thu Sep 21 10:03:49 1989 X*************** X*** 33,64 **** X /BG 1 1 1 rgbcolor def X /errordict 10 dict def X errordict /rangecheck { stop } put X! systemdict /settransfer /pop load def X /settransfer {pop} def X /currenttransfer { { } } def X /currentscreen { 0 0 { } } def X /setscreen { pop pop pop } def X /definefont { exch dup type /keywordtype ne { ( ) cvs cvn } if X! exch definefont } def X /StandardEncoding magic:AdobeSequence def X magic:fontdict /Encoding StandardEncoding put X! /PGC { } def X /DoBox true def X /privudict 200 dict def X /@Dicts 0 array def X! /ps_paint { X! PSCanvas setcanvas X! initmatrix X! clippath pathbbox X h div exch w div min dup scale pop pop X pathbbox 2 div exch 2 div exch translate pop pop X cx neg cy neg translate X FG setcolor X! DoBox { cx w 2 div sub cy h 2 div sub moveto w h rect stroke } if X! /paint PSItem send X FrameBorderColor strokecanvas X! startmatrix concat X! PGC X } def X [1 0 0 1 0 0] setmatrix X cdef ps_ditroff_fix() X--- 33,83 ---- X /BG 1 1 1 rgbcolor def X /errordict 10 dict def X errordict /rangecheck { stop } put X! % systemdict /settransfer /pop load put X /settransfer {pop} def X /currenttransfer { { } } def X /currentscreen { 0 0 { } } def X /setscreen { pop pop pop } def X /definefont { exch dup type /keywordtype ne { ( ) cvs cvn } if X! exch //definefont } def X /StandardEncoding magic:AdobeSequence def X magic:fontdict /Encoding StandardEncoding put X! /PGC { X! cx cy moveto X! /Times-Roman findfont 20 scalefont setfont X! (Please Wait) cshow X! } def X /DoBox true def X+ /PrologDone false def X+ /PSPageW w def X+ /PSPageH h def X /privudict 200 dict def X /@Dicts 0 array def X! /ps_scale { % canvas => - scale and translate canvas X! setcanvas initmatrix clippath pathbbox X h div exch w div min dup scale pop pop X pathbbox 2 div exch 2 div exch translate pop pop X cx neg cy neg translate X+ PSScale PSPageX PSPageY translate dup scale X+ startmatrix concat X+ } def X+ /ps_paint { X+ PSCanvas ps_scale X FG setcolor X! PrologDone { X! DoBox { cx w 2 div sub cy h 2 div sub moveto X! w h rect stroke } if X! /paint PSSlider send X! /paint PSHbar send /paint PSVbar send X! /paint PScycle send X FrameBorderColor strokecanvas X! } if X! % startmatrix concat X! {PGC} stopped { X! cx cy moveto X! /Times-Roman findfont 20 scalefont setfont X! (Page Display Error) cshow X! } if X } def X [1 0 0 1 0 0] setmatrix X cdef ps_ditroff_fix() X*************** X*** 82,89 **** X /new_page { % new page number => - X dup /PageCount exch store X PAGE_TAG tagprint typedprint X! PSItem /ItemValue PageCount put X! /paint PSItem send X } def X /NEXT { PageCount 1 add dup MAX gt {pop} X { new_page } ifelse } def X--- 101,108 ---- X /new_page { % new page number => - X dup /PageCount exch store X PAGE_TAG tagprint typedprint X! PSSlider /ItemValue PageCount put X! /paint PSSlider send X } def X /NEXT { PageCount 1 add dup MAX gt {pop} X { new_page } ifelse } def X*************** X*** 92,98 **** X--- 111,163 ---- X /REDIS { PageCount new_page } def X /FIRST { MIN new_page } def X /LAST { MAX new_page } def X+ /new_scale { /PSPageX PSHbar /ItemValue get X+ PSScale 1 sub 0 max PSPageW mul mul neg def X+ /PSPageY PSVbar /ItemValue get X+ PSScale 1 sub 0 max PSPageH mul mul neg def X+ } def X+ /ENLARGE { {PSScale 1.41 mul /PSScale exch def X+ new_scale paint} win send X+ } def X+ /REDUCE { {PSScale 1.41 div /PSScale exch def X+ new_scale paint} win send X+ } def X+ /NORMAL { {/PSScale 1 def /PSPageX 0 def /PSPageY 0 def X+ paint} win send X+ } def X+ /LEFT { {PScycle /ItemValue get 0 ne X+ {gsave X+ PSOverlay ps_scale currentcursorlocation 2 copy X+ {y0 sub exch x0 sub exch rect X+ x0 y0 x y points2rect /PSdisplay win send} getanimated X+ waitprocess aload pop points2rect X+ /PSBoxH exch def /PSBoxW exch def X+ /PSBoxY exch def /PSBoxX exch def X+ /PSBoxP PageCount def paintov X+ grestore} {NEXT} ifelse} win send X+ } def X+ /MIDDLE { {PScycle /ItemValue get 0 ne PSBoxP PageCount eq and X+ {gsave X+ PSOverlay ps_scale currentcursorlocation 2 copy X+ {y0 sub PSBoxY add exch x0 sub PSBoxX add exch X+ 2 copy moveto PSBoxW PSBoxH rect X+ PSBoxW PSBoxH /PSdisplay win send} getanimated X+ waitprocess aload pop X+ PSBoxY add exch PSBoxX add X+ 4 -1 roll sub /PSBoxX exch def X+ exch sub /PSBoxY exch def paintov X+ grestore} if} win send X+ } def X /EXIT { EXIT_TAG tagprint } def X+ /clearov { PSOverlay ps_scale erasepage } def X+ /paintov { clearov X+ PScycle /ItemValue get 0 ne PSBoxP PageCount eq and { X+ PSBoxX PSBoxY PSBoxW PSBoxH rectpath stroke X+ PSBoxX PSBoxY PSBoxW PSBoxH PSdisplay X+ } { X+ () /printstring PSmessage send X+ } ifelse X+ } def X /paintfr { X win /FrameLabel fr_label put X /paint win send X*************** X*** 101,116 **** X /fr_data name def X % X /PSWindow DefaultWindow X! /PSCanvas null def % the 2 sub windows X! /PSItem null def % X /PageCount 1 def % current page number, initially = 1 X /MIN 1 def % MIN always = 1, MAX sent by client X % X dictbegin X /FrameLabel fr_label def X! /PaintClient { ps_paint } def X /FrameFillColor BG def X /IconHeight 15 def X % X % gsave X % IconFont setfont X--- 166,196 ---- X /fr_data name def X % X /PSWindow DefaultWindow X! /PSCanvas null def % the image sub window X! /PSScale 1 def % image scale X! /PSPageX 0 def % image translation (in) X! /PSPageY 0 def X! /PSOverlay null def % box overlay X! /PSBoxX 0 def X! /PSBoxY 0 def X! /PSBoxW 0 def X! /PSBoxH 0 def X! /PSBoxP -1 def X! /PSSlider null def % page slider X! /PSHbar null def % scroll bars X! /PSVbar null def % scroll bars X! /PScycle null def % box cycle X! /PSmessage null def % box message X /PageCount 1 def % current page number, initially = 1 X /MIN 1 def % MIN always = 1, MAX sent by client X % X dictbegin X /FrameLabel fr_label def X! /PaintClient { clearov ps_paint paintov } def X /FrameFillColor BG def X /IconHeight 15 def X+ /HbarLen 0 def X+ /VbarLen 0 def X % X % gsave X % IconFont setfont X*************** X*** 131,136 **** X--- 211,219 ---- X % (Redisplay) { REDIS } X (First Page) { FIRST } X (Last Page) { LAST } X+ (Enlarge) { ENLARGE } X+ (Reduce) { REDUCE } X+ (Normal Size) { NORMAL } X (Quit) { EXIT } X ] /new DefaultMenu send def X dictend X*************** X*** 147,176 **** X { page new_page } ifelse X dictend X } def X % Override two methods: the Client create & shape methods X /CreateClientCanvas { X % create the ClientCanvas: X /CreateClientCanvas super send X % Create the slider item: X! /Item_len 200 def X! /PSItem (Page Number: ) [ MIN MAX PageCount ] X /Right {ItemValue /PSset win send} X! ClientCanvas Item_len 0 /new SliderItem send X dup /ItemFrame 1 put X! 20 5 /move 3 index send store X X! % Activate the slider: X! [PSItem] forkitems pop X % Create the PostScript subwindow: X /PSCanvas ClientCanvas newcanvas store X PSCanvas /Mapped true put X } def X /ShapeClientCanvas { X % [Re] Shape the ClientCanvas: X /ShapeClientCanvas super send X ClientCanvas setcanvas X! % Move the slider: X! 20 5 /move PSItem send X % [Re] Shape the PostScript subwindow: X gsave X ClientCanvas setcanvas clippath pathbbox X--- 230,324 ---- X { page new_page } ifelse X dictend X } def X+ /PSHscroll { % frac => - X+ PSScale 1 sub 0 max PSPageW mul mul neg X+ dup PSPageX eq X+ {pop} {/PSPageX exch def paint} ifelse X+ } def X+ /PSVscroll { % frac => - X+ PSScale 1 sub 0 max PSPageH mul mul neg X+ dup PSPageY eq X+ {pop} {/PSPageY exch def paint} ifelse X+ } def X+ /PSdisplay { % x0 y0 x y => - X+ PScycle /ItemValue get { % scale values X+ 1 {4 {1.389 mul cvi 100 div 4 1 roll} repeat} %inches X+ 2 {4 {cvi 4 1 roll} repeat} %points X+ 3 {4 {3.527 mul cvi 100 div 4 1 roll} repeat} %centimetres X+ } case X+ (X=% Y=% W=% H=%) [6 2 roll] /printf PSmessage send X+ } def X % Override two methods: the Client create & shape methods X /CreateClientCanvas { X % create the ClientCanvas: X /CreateClientCanvas super send X+ % ClientCanvas /Transparent false put X+ % ClientCanvas /Mapped true put X+ % set up width factors: X+ /SliderLen 150 def X+ /HbarLen 200 def X+ /VbarLen 200 def X+ /CycleLen 60 def X+ /MessageLen 225 def X+ X % Create the slider item: X! /PSSlider (Page: ) [ MIN MAX PageCount ] X /Right {ItemValue /PSset win send} X! ClientCanvas SliderLen 0 /new SliderItem send X dup /ItemFrame 1 put X! % PSInset 5 /move 3 index send X! store X X! % create scrollbars X! /PSHbar [0 1 .01 .1 null] 0 {ItemValue /PSHscroll win send} X! ClientCanvas 0 HbarLen /new SimpleScrollbar send X! dup /BarVertical? false put X! % PSInset VbarLen PSInset add /move 3 index send X! store X! X! /PSVbar [0 1 .01 .1 null] 1 {ItemValue /PSVscroll win send} X! ClientCanvas 0 VbarLen /new SimpleScrollbar send X! % HbarLen PSInset add PSItemHeight /move 3 index send X! store X! X! % create box cycle X! /PScycle (Box: ) [(off) (in) (pt) (cm)] X! /Right {/paintov win send} X! ClientCanvas CycleLen 0 /new CycleItem send X! dup /ItemFrame 1 put X! % PSInset HbarLen add CycleLen 2 div sub 5 /move 3 index send X! store X! X! % create message box X! /PSmessage () () /Right {} X! ClientCanvas MessageLen 0 /new MessageItem send X! % HbarLen 2 div PSInset add MessageLen 2 div sub 5 /move 3 index send X! store X! X! % Activate the controls X! [PSSlider PSHbar PSVbar PScycle PSmessage] forkitems pop X % Create the PostScript subwindow: X /PSCanvas ClientCanvas newcanvas store X PSCanvas /Mapped true put X+ /PSOverlay PSCanvas createoverlay store X } def X /ShapeClientCanvas { X % [Re] Shape the ClientCanvas: X /ShapeClientCanvas super send X ClientCanvas setcanvas X! % Move the controls X! gsave X! ClientCanvas setcanvas clippath pathbbox points2rect X! PSInset sub PSItemHeight sub /VbarLen exch def X! PSInset 2 mul sub /HbarLen exch def X! pop pop X! grestore X! PSInset 5 /move PSSlider send X! PSInset VbarLen PSItemHeight add HbarLen 16 /reshape PSHbar send X! HbarLen PSInset add PSItemHeight 16 VbarLen /reshape PSVbar send X! PSInset HbarLen add CycleLen sub 5 /move PScycle send X! PSInset HbarLen add CycleLen sub MessageLen sub PSInset sub 5 X! /move PSmessage send X % [Re] Shape the PostScript subwindow: X gsave X ClientCanvas setcanvas clippath pathbbox X*************** X*** 177,182 **** X--- 325,332 ---- X PSInset PSItemHeight translate X PSItemHeight sub PSInset sub exch PSInset 2 mul sub exch X rectpath PSCanvas reshapecanvas X+ % PSCanvas setcanvas clippath PSOverlay reshapecanvas X+ /PSOverlay PSCanvas createoverlay store X grestore X } def X classend def X*************** X*** 197,205 **** X 62 { LAST } def % '>' X 46 { LAST } def % ',' X 36 { LAST } def % '$' X 3 { EXIT } def % ^C X 113 {EXIT } def % 'q' X! /LeftMouseButton {NEXT} def X end X X { % done as a separate process so the file reading X--- 347,359 ---- X 62 { LAST } def % '>' X 46 { LAST } def % ',' X 36 { LAST } def % '$' X+ 101 { ENLARGE } def % 'e' X+ 114 { REDUCE } def % 'r' X+ 110 { NORMAL } def % 'n' X 3 { EXIT } def % ^C X 113 {EXIT } def % 'q' X! /LeftMouseButton {LEFT} def X! /MiddleMouseButton {MIDDLE} def X end X X { % done as a separate process so the file reading X*************** X*** 214,219 **** X--- 368,374 ---- X /Name 200 dict dup begin X 0 1 127 { dup def } for X /LeftMouseButton dup def X+ /MiddleMouseButton dup def X end def X /Action /DownTransition def X /Canvas currentcanvas def X*************** X*** 242,247 **** X--- 397,406 ---- X { countdictstack @DictHeight le { exit } if X end } loop X def X+ cdef ps_dvips_fix() X+ {PSCanvas ps_scale} win send X+ cdef ps_prolog_done() X+ /PrologDone true def X cdef ps_startprolog() X /@DictHeight countdictstack def X privudict begin END_OF_FILE echo shar: NEWLINE appended to \"'psview.cps.diff'\" if test 12842 -ne `wc -c <'psview.cps.diff'`; then echo shar: \"'psview.cps.diff'\" unpacked with wrong size! fi # end of 'psview.cps.diff' fi echo shar: End of archive 1 \(of 2\). cp /dev/null ark1isdone MISSING="" for I in 1 2 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked both archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 Angus Duggan, Department of Computer Science, | University of Edinburgh, JCMB, | USENET: ajcd@lfcs.ed.ac.uk The King's Buildings, Mayfield Road, | JANET: ajcd@uk.ac.ed.lfcs Edinburgh, EH9 3JZ, Scotland. | OR: ajcd%lfcs.ed.ac.uk@nsfnet-relay.ac.uk From don@brillig.umd.edu Sat Sep 23 20:57:49 1989 Date: Sat, 23 Sep 89 20:57:49 -0400 To: NeWS-makers@brillig.umd.edu Subject: Enhanced psview and DVI previewing (Part 2 of 2) From: mcsun!ukc!edcastle!lfcs!ajcd@uunet.uu.net (Angus Duggan) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) #! /bin/sh # This is a shell archive. Remove anything before this line, then feed it # into a shell via "sh file" or similar. To overwrite existing files, # type "sh file -c". # The tool that generated this appeared in the comp.sources.unix newsgroup; # send mail to comp-sources-unix@uunet.uu.net if you want that tool. # If this archive is complete, you will see the following message at the end: # "End of archive 2 (of 2)." # Contents: dvips.opt dvips.pro dviview psmung.c # Wrapped by ajcd@cheops on Thu Sep 21 15:04:05 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'dvips.opt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dvips.opt'\" else echo shar: Extracting \"'dvips.opt'\" \(875 characters\) sed "s/^X//" >'dvips.opt' <<'END_OF_FILE' X% X% This is the version of DVIPS.OPT distributed with X% the Sun Workstation version of DVILASER/PS. X% The Apollo and VAX/VMS versions differ slightly. X% X% Establish local defaults for DVILASER/PS. X% X% Any DVILASER/PS commands can be placed in this file. For X% example, commands to declare the paper width and height X% as well as which PostScript printer is being used. X% X% tfmpath is set up to use the same tfm files as TeX. X% new paths for pixels and tfms AJCD 23/11/88 X% AJS Changed downloaded fonts => memoryavailable has changed Xprinter LaserWriter memoryavailable 1000000 resolution 300 300 Xpixelpath /usr/local/share/tex/fonts/pk/canon /usr/local/share/tex/fonts/pk/arbor /usr/local/share/tex/fonts/pk/dist /usr/local/share/tex/fonts/pk/agfa Xtfmpath /usr/local/share/tex/fonts/tfm Xheight 11.65in Xwidth 8.22in Xreverse off Xxy 1.3in 1.6in Xdownload all prolog X%verbose END_OF_FILE echo shar: NEWLINE appended to \"'dvips.opt'\" if test 876 -ne `wc -c <'dvips.opt'`; then echo shar: \"'dvips.opt'\" unpacked with wrong size! fi # end of 'dvips.opt' fi if test -f 'dvips.pro' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dvips.pro'\" else echo shar: Extracting \"'dvips.pro'\" \(17432 characters\) sed "s/^X//" >'dvips.pro' <<'END_OF_FILE' X% X% Dvips.pro - included prolog for DviLaser-generated PostScript files. X% X% This version hacked for NeWS previewing - AJCD 22/3/89 X% X% Copyright (c) 1986-88, ArborText, Inc. All Rights Reserved. X% X% This PostScript prolog code is part of the proprietary DVILASER/PS X% program package and may not be copied or re-distributed without X% the permission of ArborText, Inc. X% X X/DeFiNeFoNt /definefont load def X X/definefont { X exch {findfont} stopped X {exch DeFiNeFoNt} X {exch pop} X ifelse X} bind def X Xsystemdict /setpacking known % use array packing mode if its available X {/savepackingmode currentpacking def X true setpacking} X if X X/$DviLaser where X {pop} X {/$DviLaser 200 dict def} X ifelse X X% Begin document X/BeginDviLaserDoc { X vmstatus pop pop 0 eq X { $DviLaser begin X InitializeState } X { /DviLaserJob save def X $DviLaser begin X InitializeState X /DviLaserFonts save def } X ifelse X} bind def X X% End document X/EndDviLaserDoc { X vmstatus pop pop 0 eq X { end } X { DviLaserFonts restore X end X DviLaserJob restore } X ifelse X} bind def X X$DviLaser begin X X/tempstr 64 string def X/tempint 0 def X/tempmatrix matrix def X X% X% Debugging routines X% X/DebugMode false def X X/PrintInt { X tempstr cvs print X} bind def X X/PrintLn { X (\n) print flush X} bind def X X/PrintVMStats { X (VM status - ) print X vmstatus X 3 copy X PrintInt (\(total\), ) print X PrintInt (\(used\), ) print X pop X exch sub X PrintInt (\(remaining\), ) print X PrintInt (\(level\)) print X PrintLn X} bind def X X/VMS /PrintVMStats load def X X/VMSDebug { X DebugMode X {PrintVMStats} X {pop} X ifelse X} bind def X X(beginning of common prolog) VMSDebug X X% Make it easy to bind definitions. X/bdef /def load def %{ bind def } bind def X/xdef { exch def } bdef X X% Begin page X/BP { X /Magnification xdef X /DviLaserPage save def X (beginning of page) VMSDebug X} bdef X X% End page X/EP { X DviLaserPage restore X} bdef X X% Exit page (temporarily) to add fonts/characters. X/XP { X % Save current point information so it can be reset later. X /Xpos where {pop Xpos} {0} ifelse X /Ypos where {pop Ypos} {0} ifelse X {currentpoint} stopped {0 0 moveto currentpoint} if X /DviLaserPage where {pop DviLaserPage restore} if X moveto X /Ypos xdef X /Xpos xdef X} bdef X X% Resume page X/RP { X /DviLaserPage save def X} bdef X X% Purge all fonts to reclaim memory space. X/PF { X GlobalMode X LocalMode X} bdef X X% Switch to base save/restore level, saving state information. X/GlobalMode { X /UserSave where {pop UserSave} if % invoke "UserSave" if available X PortraitMode X PaperWidth X PaperHeight X PxlResolution X Resolution X Magnification X Ymax X RasterScaleFactor X % Save current point information so it can be reset later. X /currentpoint cvx stopped {0 0 moveto currentpoint} if X /DviLaserPage where {pop DviLaserPage restore} if X DviLaserFonts restore X RecoverState X} bdef X X% Preserve state at the base level. X/RecoverState { X 10 copy X /Ypos xdef X /Xpos xdef X /RasterScaleFactor xdef X /Ymax xdef X /Magnification xdef X /Resolution xdef X /PxlResolution xdef X /PaperHeight xdef X /PaperWidth xdef X /PortraitMode xdef X DoInitialScaling X PortraitMode not {PaperWidth 0 SetupLandscape} if X Xpos Ypos moveto X} bdef X X% Initialize state variables to default values. X/InitializeState { X /Resolution 3600.0 def X /PxlResolution 300.0 def X /RasterScaleFactor PxlResolution Resolution div def X /PortraitMode true def X GetPageDimensions X 72.0 div Resolution mul /PaperHeight xdef X 72.0 div Resolution mul /PaperWidth xdef X /Ymax PaperHeight def X /Magnification 1000.0 def X /Xpos 0.0 def X /Ypos 0.0 def X /InitialMatrix {{PSCanvas ps_scale matrix currentmatrix} win send} def X} bdef X X% X% Procedure to figure out the current page dimensions. There unfortunately X% is no direct way to obtain this information. This approach works for X% letter, note, and legal page sizes. X% X% GetPageDimensions X% X/GetPageDimensions { X /PSPageW win send 72.0 mul /PSPageH win send 72.0 mul X} bdef X X% Switch from base save/restore level, restoring state information. X/LocalMode { X /Ypos xdef X /Xpos xdef X /RasterScaleFactor xdef X /Ymax xdef X /Magnification xdef X /Resolution xdef X /PxlResolution xdef X /PaperHeight xdef X /PaperWidth xdef X /PortraitMode xdef X DoInitialScaling X PortraitMode not {PaperWidth 0 SetupLandscape} if X Xpos Ypos moveto X /UserRestore where {pop UserRestore} if % invoke "UserRestore" if available X /DviLaserFonts save def X /DviLaserPage save def X} bdef X X% Abbreviations X/S /show load def X/SV /save load def X/RST /restore load def X X/Yadjust {Ymax exch sub} bdef X X% (x,y) position absolute, just set Xpos & Ypos, don't move. X/SXY { X Yadjust X /Ypos xdef /Xpos xdef X} bdef X X% (x,y) position absolute X/XY { X Yadjust X 2 copy /Ypos xdef /Xpos xdef X moveto X} bdef X X% (x,0) position absolute X/X { X currentpoint exch pop X 2 copy /Ypos xdef /Xpos xdef X moveto X} bdef X X% (0,y) position absolute X/Y { X currentpoint pop exch Yadjust X 2 copy /Ypos xdef /Xpos xdef X moveto X} bdef X X% (x,y) position relative X/xy { X neg rmoveto X currentpoint /Ypos xdef /Xpos xdef X} bdef X X% (x,0) position relative X/x { X 0.0 rmoveto X currentpoint /Ypos xdef /Xpos xdef X} bdef X X% (0,y) position relative X/y { X 0.0 exch neg rmoveto X currentpoint /Ypos xdef /Xpos xdef X } bdef X X% Print a rule X/R { X /ht xdef X /wd xdef X gsave X 0 setgray X currentpoint X newpath X moveto X 0.0 ht rlineto X wd 0.0 rlineto X 0.0 ht neg rlineto X wd neg 0.0 rlineto X closepath fill X grestore X wd 0.0 rmoveto X currentpoint /Ypos xdef /Xpos xdef X} bdef X X% X% RES X% X/RES { X /Resolution xdef X /PxlResolution xdef X /RasterScaleFactor PxlResolution Resolution div def X DoInitialScaling X} bdef X X% X% Do initial scaling. X% X/DoInitialScaling { X InitialMatrix setmatrix X 72.0 Resolution div dup scale X} bdef X X% X% PM X% X/PM { X XP X /PaperWidth xdef X /PaperHeight xdef X /Ymax PaperHeight def X /PortraitMode true def X DoInitialScaling X RP X} bdef X X% X% LM X% X/LM { X XP X /PaperWidth xdef X /PaperHeight xdef X /Ymax PaperWidth def X /PortraitMode false def X DoInitialScaling X PaperWidth 0 SetupLandscape X RP X} bdef X X% Change magnification setting X/MAG { X XP X /Magnification xdef X RP X} bdef X X% X% Switch to landscape mode X% X/SetupLandscape { X translate X 90.0 rotate X} bdef X X% X% SPB - begin "\special" mode X% X% This is the PostScript procedure used to transfer from the internal X% environment used for the DVI translation code emitted by DVIPS to X% a standard PostScript environment. X% X% Parameters: 0 - Local X% 1 - Global X% 2 - Inline X% X/SPB { X /spc_mode xdef X spc_mode 0 eq spc_mode 2 eq or X {XP} X {spc_mode 1 eq {GlobalMode} if} X ifelse X Resolution 72.0 div dup scale % Restore default scaling... X Magnification 1000.0 div dup scale % Adjust for any magnification... X /Xpos Xpos 72.0 Resolution div mul 1000.0 Magnification div mul def X /Ypos Ypos 72.0 Resolution div mul 1000.0 Magnification div mul def X} bdef X X% X% SPE - end "\special" mode X% X% This is the PostScript procedure used to reenter the internal X% environment used for the DVI translation code emitted by DVIPS from X% the standard PostScript environment provided for processing user-supplied X% PostScript code. X% X% Parameters: 0 - Local X% 1 - Global X% 2 - Inline X% X/SPE { X /spc_mode xdef X 1000.0 Magnification div dup scale % Un-adjust for any magnification... X 72.0 Resolution div dup scale % Restore default internal scaling... X spc_mode 0 eq spc_mode 2 eq or X {RP} X {spc_mode 1 eq {LocalMode} if} X ifelse X} bdef X X% X% PP X% X/PP { X /#copies xdef X showpage X /#copies 1 def X} bdef X X% X% CLRP X% X/CLRP { X% erasepage X} bdef X X% X% /font-name DMF X% X/DMF { X /psz xdef X /nam xdef X nam findfont psz scalefont setfont X} bdef X X% X% /abcd (xxx) str-concat ==> /abcdxxx X% X/str-concatstr 64 string def X X/str-concat { X /xxx xdef X /nam xdef X /namstr nam str-concatstr cvs def X /newnam namstr length xxx length add string def X newnam 0 namstr putinterval X newnam namstr length xxx putinterval X newnam cvn X} bdef X X% X% /abcdef 2 str-strip ==> /cdef X% X/str-strip { X /num xdef X /nam xdef X /namstr nam tempstr cvs def X /newlen namstr length num sub def X namstr num newlen getinterval X cvn X} bdef X X% X% copydict ==> new-dict on stack X% X/copydict { X dup length 1 add dict /newdict xdef X {1 index /FID ne X {newdict 3 1 roll put} X {pop pop} X ifelse X } forall X newdict X} bdef X X% X% DefineCMEncoding X% X/DefineCMEncoding { X /EncodeType xdef X X /CMEncoding 256 array def X /Times-Roman findfont /Encoding get aload pop CMEncoding astore pop X X EncodeType 11 eq {Do-CM-rm-encoding} if X EncodeType 12 eq {Do-CM-it-encoding} if X EncodeType 13 eq {Do-CM-tt-encoding} if X} bdef X X% X% Do special mappings for the various CM-font types. Characters that X% get "covered up" are repositioned in the range (128,128+32). X% X/Do-standard-CM-encodings { X CMEncoding X dup 0 /.notdef put X dup 1 /.notdef put X dup 2 /.notdef put X dup 3 /.notdef put X dup 4 /.notdef put X dup 5 /.notdef put X dup 6 /.notdef put X dup 7 /.notdef put X X dup 8 /.notdef put X dup 9 /.notdef put X dup 10 /.notdef put X dup 11 /.notdef put X dup 12 /fi put X dup 13 /fl put X dup 14 /.notdef put X dup 15 /.notdef put X X dup 16 /dotlessi put X dup 17 /.notdef put X dup 18 /grave put X dup 19 /acute put X dup 20 /caron put X dup 21 /breve put X dup 22 /macron put X dup 23 /ring put X X dup 24 /cedilla put X dup 25 /germandbls put X dup 26 /ae put X dup 27 /oe put X dup 28 /oslash put X dup 29 /AE put X dup 30 /OE put X dup 31 /Oslash put X dup 127 /dieresis put X X dup 128 /space put X dup 129 /quotedbl put X dup 130 /sterling put X dup 131 /dollar put X dup 132 /less put X dup 133 /greater put X dup 134 /backslash put X dup 135 /asciicircum put X dup 136 /underscore put X dup 137 /braceleft put X dup 138 /bar put X dup 139 /braceright put X dup 140 /asciitilde put X pop X} bdef X X/Do-CM-rm-encoding { X Do-standard-CM-encodings X CMEncoding X dup 32 /.notdef put X dup 34 /quotedblright put X dup 60 /exclamdown put X dup 62 /questiondown put X dup 92 /quotedblleft put X dup 94 /circumflex put X dup 95 /dotaccent put X dup 123 /endash put X dup 124 /emdash put X dup 125 /hungarumlaut put X dup 126 /tilde put X pop X} bdef X X/Do-CM-it-encoding { X Do-standard-CM-encodings X CMEncoding X dup 32 /.notdef put X dup 34 /quotedblright put X dup 36 /sterling put X dup 60 /exclamdown put X dup 62 /questiondown put X dup 92 /quotedblleft put X dup 94 /circumflex put X dup 95 /dotaccent put X dup 123 /endash put X dup 124 /emdash put X dup 125 /hungarumlaut put X dup 126 /tilde put X pop X} bdef X X/Do-CM-tt-encoding { X Do-standard-CM-encodings X CMEncoding X dup 12 /.notdef put X dup 13 /quotesingle put X dup 14 /exclamdown put X dup 15 /questiondown put X pop X} bdef X X% X% DefineCMFont X% X% type 10: "as-is" PostScript font X% type 11: CM-mapped PostScript font - roman X% type 12: CM-mapped PostScript font - text italic X% type 13: CM-mapped PostScript font - typewriter type X% X/int-dict-name {int (-dict) str-concat} bdef X/int-dict {int (-dict) str-concat cvx load} bdef X X/DF { X true % signal that the font is already loaded X DefineCMFont X} bdef X X/DNF { X false % signal that the font is not already loaded X DefineCMFont X} bdef X X/DefineCMFont { X /loaded xdef X /typ xdef X /psz xdef X /ext xdef X /int xdef X X typ 10 ne X { % font_type = 11, 12, 13 X loaded not X { /fnam ext 3 str-strip def X fnam findfont copydict /newdict xdef X typ DefineCMEncoding X newdict /Encoding CMEncoding put X ext newdict definefont pop X } if X% int-dict-name ext findfont psz scalefont def X% currentdict int [int-dict /setfont cvx] cvx put X currentdict int [ext findfont psz scalefont /setfont cvx] cvx put X } X { % font_type = 10 X% /fnam ext def X% int-dict-name fnam findfont psz scalefont def X% currentdict int [int-dict /setfont cvx] cvx put X currentdict int [ext findfont psz scalefont /setfont cvx] cvx put X } X ifelse X} bdef X X% X% X% [llx lly urx ury] DefinePXLFont X% X X/PXLF { X true % signal that the font is already loaded X DefinePXLFont X} bdef X X/PXLNF { X false % signal that the font is not already loaded X DefinePXLFont X} bdef X X/PXLBuildCharDict 17 dict def X X/CMEncodingArray 256 array def X0 1 255 {CMEncodingArray exch dup tempstr cvs cvn put} for X X/RasterConvert {RasterScaleFactor div} bdef X X/TransformBBox { X aload pop X X /BB-ury xdef X /BB-urx xdef X /BB-lly xdef X /BB-llx xdef X X [BB-llx RasterConvert BB-lly RasterConvert X BB-urx RasterConvert BB-ury RasterConvert] X} bdef X X/DefinePXLFont { X /newfont xdef X /bb xdef X /num xdef X /psz xdef X /dsz xdef X /pxlmag xdef X /ext xdef X /int xdef X X /fnam ext (-) str-concat pxlmag tempstr cvs str-concat def X X newfont not { X int-dict-name 13 dict def X X int-dict begin X /FontType 3 def X /FontMatrix [1 dsz div 0 0 1 dsz div 0 0] def X /FontBBox bb TransformBBox def X /Encoding CMEncodingArray def X /BuildChar X { X PXLBuildCharDict begin X /char xdef X /fontdict xdef X X fontdict /CharDict get /Char-Info get char get aload pop X X /rasters xdef X /cols xdef X /rows xdef X /wx xdef X /ury xdef X /urx xdef X /lly xdef X /llx xdef X X rows 0 lt X { /rows rows neg def X /runlength 1 def } X { /runlength 0 def } X ifelse X X wx 0 X llx RasterConvert lly RasterConvert X urx RasterConvert ury RasterConvert setcachedevice X rows 0 ne X { X gsave X llx .5 add lly .5 add translate X cols rows scale % work around NeWS bugs X true rasters imagemaskcanvas X grestore X } if X end X } def X /CharDict 1 dict def X CharDict /Char-Info num array put X end X fnam int-dict definefont pop X } if X X% int-dict-name fnam findfont psz scalefont def X% currentdict int [int-dict /setfont cvx] cvx put X currentdict int [fnam findfont psz scalefont /setfont cvx] cvx put X} bdef X X% X% PXLC X% X/PXLC { X X /rasters xdef X /runlength xdef X /cols xdef X /rows xdef X /ury xdef X /urx xdef X /lly xdef X /llx xdef X /wx xdef X /code xdef X /int xdef X X % See if the long or short format is required X% true cols CKSZ rows CKSZ ury CKSZ urx CKSZ lly CKSZ llx CKSZ X TackRunLengthToRows X int-dict /CharDict get /Char-Info get code X [llx lly urx ury wx rows cols % rasters => build canvas for NeWS X cols rows 1 [RasterScaleFactor 0 0 RasterScaleFactor neg 0 0] X GenerateRasters buildimage X ] put X} bdef X X/CKSZ {abs 127 le and} bdef X/TackRunLengthToRows {runlength 0 ne {/rows rows neg def} if} bdef X X% X% PLOTC X% X/PLOTC { X /rasters xdef X /runlength xdef X /cols xdef X /rows xdef X /ury xdef X /urx xdef X /lly xdef X /llx xdef X /psz xdef X /dsz xdef X /wx xdef X X % "Plot" a character's raster pattern. X rows 0 ne X { X gsave X currentpoint translate X psz dsz div dup scale X% cols rows scale % work around NeWS bugs X% llx ury moveto % NeWS ignores imagemask matrix X cols rows true X RasterScaleFactor 0 0 RasterScaleFactor neg llx .5 add neg ury .5 add X tempmatrix astore X GenerateRasters imagemask X grestore X } if X wx x X} bdef X X% Routine to generate rasters for "imagemask". X/GenerateRasters { X rasters X runlength 1 eq {RunLengthToRasters} if X} bdef X X% Routine to convert from runlength encoding back to rasters. X/RunLengthToRasters { X % ...not done yet... X} bdef X X% X% These procedures handle bitmap processing. X% X% BMbeg X% X/BMbeg { X /BMmagnification xdef X /BMresolution xdef X /BMrows xdef X /BMcols xdef X X /BMcurrentrow 0 def X gsave X 0.0 setgray X Resolution BMresolution div dup scale X currentpoint translate X BMmagnification 1000.0 div dup scale X 0.0 BMrows moveto X BMrows dup scale X currentpoint translate X /BMCheckpoint save def X } bdef X X/BMend { X BMCheckpoint restore X grestore X } bdef X X% X% BMswath X% X/BMswath { X /rows xdef X /rasters xdef X X BMcols rows true X [BMrows 0 0 BMrows neg 0 BMcurrentrow neg] X rasters X imagemask X X /BMcurrentrow BMcurrentrow rows add def X BMcurrentrow % save this on the stack around a restore... X BMCheckpoint restore X /BMcurrentrow xdef X /BMCheckpoint save def X } bdef X X(end of common prolog) VMSDebug X Xend X Xsystemdict /setpacking known X {savepackingmode setpacking} X if X X% X% End of included prolog section. X% END_OF_FILE echo shar: NEWLINE appended to \"'dvips.pro'\" if test 17433 -ne `wc -c <'dvips.pro'`; then echo shar: \"'dvips.pro'\" unpacked with wrong size! fi # end of 'dvips.pro' fi if test -f 'dviview' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dviview'\" else echo shar: Extracting \"'dviview'\" \(201 characters\) sed "s/^X//" >'dviview' <<'END_OF_FILE' Xif [ "$#" != "1" ] Xthen X echo "usage: $0 file.dvi" X exit 1 Xfi Xdvips -nodialog -OPT $NEWSHOME/lib/dvips.opt -FNT $NEWSHOME/lib/dvips.fnt -PRO $NEWSHOME/lib/dvips.pro -dvi $1 -ps - | psmung | psview -a4 END_OF_FILE echo shar: NEWLINE appended to \"'dviview'\" if test 202 -ne `wc -c <'dviview'`; then echo shar: \"'dviview'\" unpacked with wrong size! fi chmod +x 'dviview' # end of 'dviview' fi if test -f 'psmung.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'psmung.c'\" else echo shar: Extracting \"'psmung.c'\" \(4474 characters\) sed "s/^X//" >'psmung.c' <<'END_OF_FILE' X/* psmung.c X * X * This program takes the output of ArborText's dvips and mungs it for NeWS X * previewing. This consists of putting all of the font definitions into X * the end of the prologue. X * Fonts definitions are started by lines of the form X * X * XP /F25 /cmr10 .... RP X * X * Character definitions are started by lines of the form X * X * XP /F25 100 .... X * .... RP X */ X X#include X#include X X/* Reading and Writing files is done a line at a time by the functions X * X * char * GetLine(FILE *stream, char *line) X * PutLine(FILE *stream, char *line) X */ X X Xchar line[BUFSIZ]; X X#define GetLine(stream,line) fgets(line,BUFSIZ,stream) X#define PutLine(stream,line) fputs(line,stream) X X X/* search states */ X#define SCANNING 0 X#define SKIPPING 1 X#define COPYING 2 X X X#define GetNumber(num,ptr) while (isdigit(*ptr)) num = num * 10 + *ptr++ - '0' X#define SkipSpace(ptr) while (isspace(*ptr)) ptr++ X X Xstruct FontInfo { X struct FontInfo *next; X int number; X char named; X char bits[256]; X} *Fontlist; X X#define GetNamed(fptr) ((*fptr).named) X#define SetNamed(fptr) (*fptr).named = 1 X X/*#define GetLetter(fptr,letter) ((*fptr).bits[letter>>3] & (1<<(letter&3))) X#define SetLetter(fptr,letter) (*fptr).bits[letter>>3] |= (1<<(letter&3))*/ X#define GetLetter(fptr,letter) ((*fptr).bits[letter]) X#define SetLetter(fptr,letter) (*fptr).bits[letter] = 1 X X X/* find font array if available, create and clear otherwise */ Xstruct FontInfo *FindFont(font) X int font; X{ X struct FontInfo *fptr = Fontlist; X X while (fptr) { /* linear search for font number */ X if ((*fptr).number == font) X return fptr; X fptr = (*fptr).next; X } X /* number not found: create new entry and link in */ X fptr = (struct FontInfo *)calloc((unsigned)1, X (unsigned)sizeof(struct FontInfo)); X (*fptr).next = Fontlist; X (*fptr).number = font; X Fontlist = fptr; X return fptr; X} X X X/* test if 'RP' found and chop before it */ Xint FoundRP(str) X char *str; X{ X while (*str) { X if (*str++ == 'R') X if (*str == 'P') { X *str = '\0'; X *--str = '\n'; X return 1; X } X } X return 0; X} X X X/* Here we go, here we go, here we go... */ Xmain(argc,argv) X int argc; X char *argv[]; X{ X int state; X FILE *pages; X char *tmpname="/tmp/ps.XXXXXX"; X X Fontlist = NULL; /* initialise font list */ X X /* (re)open stdin file */ X /* (re)open stdout file */ X X pages = fopen(mktemp(tmpname),"w+"); /* open pages file */ X X while (GetLine(stdin,line) && strncmp(line,"%%EndProlog",11)) X PutLine(stdout,line); /* pass header straight through */ X X PutLine(pages,line); /* save first non-header line */ X X PutLine(stdout,"XP\n"); X X state = SCANNING; X while (GetLine(stdin,line)) { X switch (state) { X case SCANNING: /* scan for XP lines */ X if (!strncmp(line,"XP /F",5)) { /* XP_/F found */ X char *cptr = &line[5]; X int fontnum = 0; X struct FontInfo *fontptr; X X GetNumber(fontnum,cptr); /* parse font number */ X SkipSpace(cptr); /* skip white space */ X fontptr = FindFont(fontnum); /* find font record */ X X if (*cptr == '/') { /* font definition found */ X if (GetNamed(fontptr)) { /* check if font definition already done */ X if (!FoundRP(line)) X state = SKIPPING; X } X else { X SetNamed(fontptr); X if (!FoundRP(line)) X state = COPYING; X PutLine(stdout,&line[3]); /* put line without XP & RP */ X } X } X else if (isdigit(*cptr)) { /* character definition found */ X int letter = 0; X GetNumber(letter,cptr); /* parse char number */ X if (!GetNamed(fontptr)) X fprintf(stderr,"Warning: font %d not defined (char %d)\n", X fontnum,letter); X if (GetLetter(fontptr,letter)) { /* check if letter already done */ X if (!FoundRP(line)) X state = SKIPPING; X } X else { X SetLetter(fontptr,letter); X if (!FoundRP(line)) X state = COPYING; X PutLine(stdout,&line[3]); /* put line without XP & RP */ X } X } X else fprintf(stderr,"Ignoring line:\n %s",line); X } else PutLine(pages,line); X break; X case SKIPPING: /* skipping to RP */ X if (FoundRP(line)) X state = SCANNING; X break; X case COPYING: /* copying to RP */ X if (FoundRP(line)) /* FoundRP chops line */ X state = SCANNING; X PutLine(stdout,line); X break; X } X } X X PutLine(stdout,"RP\n"); X X rewind(pages); /* goto start of pages file */ X while (GetLine(pages,line)) X PutLine(stdout,line); /* copy pages to output */ X X fclose(pages); /* close pages file */ X /* delete pages file */ X} END_OF_FILE echo shar: NEWLINE appended to \"'psmung.c'\" if test 4475 -ne `wc -c <'psmung.c'`; then echo shar: \"'psmung.c'\" unpacked with wrong size! fi # end of 'psmung.c' fi echo shar: End of archive 2 \(of 2\). cp /dev/null ark2isdone MISSING="" for I in 1 2 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked both archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 Angus Duggan, Department of Computer Science, | University of Edinburgh, JCMB, | USENET: ajcd@lfcs.ed.ac.uk The King's Buildings, Mayfield Road, | JANET: ajcd@uk.ac.ed.lfcs Edinburgh, EH9 3JZ, Scotland. | OR: ajcd%lfcs.ed.ac.uk@nsfnet-relay.ac.uk From don@brillig.umd.edu Sat Sep 23 20:58:04 1989 Date: Sat, 23 Sep 89 20:58:04 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: NeWS/X11 merge? From: ssgp32!scott@uunet.uu.net (Scott Evernden) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <445@castle.ed.ac.uk>, ajcd@lfcs.ed.ac.uk (Angus Duggan) writes: > I've just been reading some articles in this newsgroup which seem to imply that > the Sun X11/NeWS merge has been released. Is this true? I've been looking for > info on it for a while, but haven't seen anything authoratative. Can someone > from Sun comment, please? > > Thanks, > Angus Me too. Actually, I am now utterly confused as to what Sun's window strategy architecture is/will be. Does the OpenLook GUI sit on top of an X11/News server? Where does SunView fit (below, above, beside)? Can I still pixrect? Will Motif operate on top of this combined thingy? Does it perform well on anything less than a SPARC? Will the X11 implementation support remote X11 clients (e.g., peecees)? How is it all organized? How fat is it? Is this all supported on all Suns? What should I read??? -scott -- Scott Evernden PRIME Computer Inc. scott@ssgp32.Prime.COM Commercial Systems Group uunet!ssgp32!scott Technology Drive (508) 478-8600 x2984 Milford, MA 01757 From don@brillig.umd.edu Sat Sep 23 21:00:58 1989 Date: Sat, 23 Sep 89 21:00:58 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: NeWS/X11 merge? From: auspex!guy@uunet.uu.net (Guy Harris) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) >Does the OpenLook GUI sit on top of an X11/News server? It can. Three implementations of OPEN LOOK toolkits either exist or are under development, that I know of. Two run atop X11, and thus can presumably run atop X11/NeWS, as well as vanilla X11 - AT&T's "XT+" or whatever it's called, which is a set of X Toolkit widgets, and Sun's XView, which has a SunView-like programmatic interface (or, to use the official TLA for those, API). One runs atop NeWS, or possibly only atop the flavor of NeWS implemented in X11/NeWS (I don't know if it runs atop earlier implementations) - Sun's NDE. XView should appear in source form in X11R4 - an alpha version has already been made generally available in source form. I can't speak for the availability of the others, either in source or binary form. There also appear to be three OPEN LOOK window managers in existence or under development, as I remember - one X11-only one done by AT&T, one X11-only one done by Sun which will be available in X11R4 in source form (and which is also available in source form along with XView), and one that is NeWS PostScript(R)-or-whatever-Adobe's-lawyers-would-insist-on- calling-it-given-that-it's-not-based-on-their-implementation running in the server which can presumably manage both X11 and NeWS windows. >Where does SunView fit (below, above, beside)? SunView programs can, I think, share the screen, keyboard, and mouse with the X11/NeWS server; I think the server looks to them like a replacement for the "sunview" program - i.e., manager of the root window. This is a SunOS-specific hack for binary compatibility. The intent, as far as I know, is to replace the SunView tookit with the XView toolkit, which runs atop X11 and should thus be more portable. >Can I still pixrect? If that means "can I still bang on the raw frame buffer", you can still do so to the extent that SunView programs can do so, but you probably don't want to, in general, unless you don't want to have your program run on anything other that Suns. If that means "what do I do about programs that use e.g. memory pixrects", I'll quote a message from one of the XView developers, posted to "comp.windows.x": XView itself does not support operations on memory pixrects, though you can use the Sun pixrect library in conjunction with XView. However, this construct is not portable, since only Suns have the pixrect library. If you're concerned with portability, I would suggest using server images instead of memory pixrects. >Will Motif operate on top of this combined thingy? Ultimately, I presume it will; I suspect the main problems would have to do with the version of X11 upon which the X11 part is based - R2, R3, or whatever. I would expect it to ultimately match R4, but if it currently isn't R3-compatible in ways that break Motif, it may have problems; I have no idea whether it is sufficently R3-compatible to support Motif or not. >Does it perform well on anything less than a SPARC? I've heard claims from Sun people that it is in some ways faster than the MIT server; I assume they're referring to bit-bashing speed. "Well" depends on the observer, ultimately; SunView runs on my 4MB 3/50 fast enough that I consider it usable, but I liked it better on a 32MB 4/280.... >Will the X11 implementation support remote X11 clients (e.g., peecees)? -I've got a slug. -Can it talk? -No. -Well, then it's hardly a proper replacement, then! --M. Python's Flying Circus, Dead Parrot sketch If an X11 implementation doesn't support remote clients on a system that supports the appropriate network connection, I'd hardly consider it a proper X11 implementation. As far as I know, the X11/NeWS X11 implementation supports them the same way any other X11 implementation would. (But you say "peecees" - do you mean remote *clients* or remote *servers*? Are there PCs running as X11 *clients* - i.e., doing their displaying on some screen *other* than the one to which they're directly attached?) >How is it all organized? In what way? Robin Schaufler has given a paper on the way it was implemented, which I think appeared in some USENIX proceedings in the past few years.) From don@brillig.umd.edu Sun Sep 24 18:48:20 1989 Date: Sun, 24 Sep 89 18:48:20 -0400 To: NeWS-makers@brillig.umd.edu Subject: comp.object passes (885 "yes" to 21 "no") From: sei!ajpo!eberard@PT.CS.CMU.EDU (Edward Berard) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Comp.Object Passes Total Votes Received: 906 Total "Yes" Votes: 885 Total "No" Votes: 21 The voting for comp.object is closed. Comp.object has met the criteria for new newsgroup formation, i.e., it has received at least 100 more yes votes than no votes over a 30-day voting period. The actual votes are at the end of this message. The vote is now subject to a five-day "adjustment period." This period will last until Friday, September 29, 1989. During the adjustment period, if there are any problems with how specific votes were tallied, please let me know. Send all adjustment information to: eberard@ajpo.sei.cmu.edu If, at the end of the five-day adjustment period, there are still 100 more yes votes than no votes, the group will be officially created. My thanks to all who voted. -- Edward V. Berard Berard Software Engineering, Inc. 18620 Mateney Road Germantown, Maryland 20874 Phone: (301) 353-9652 FAX: (301) 353-9272 E-Mail: eberard@ajpo.sei.cmu.edu ------------------------------------- 885 "yes" votes were received. They are listed below in order, sorted by e-mail address. 880039l%ACADIA.BITNET@VMA.CC.CMU.EDU Katherine (Layton) Astels 880716a%ACADIA.BITNET@VMA.CC.CMU.EDU Dave aaron@apollo.com Aaron Sawyer aarons%cogs.sussex.ac.uk@NSFnet-Relay.AC.UK Aaron Sloman ab@imperial-software-tech.co.uk Andy Bartlett abvax!calvin.icd.ab.com!jea@uunet.uu.net John Alexander ACARGILE%STANFORD.BITNET@VMA.CC.CMU.EDU Andy Cargile acd4!mjb@uunet.UU.NET Mike Bryan adil@Sun.COM Adil Lotia adiron!jond@uunet.UU.NET Jonathan Doughty adiseker@potomac.ads.com Andrew Diseker adoyle@BBN.COM Allan Doyle afscian@violet.waterloo.edu Anthony Scian aij%computing-maths.cardiff.ac.uk@NSFnet-Relay.AC.UK Andrew C. Jones aiken@aerospace.aero.org Timothy A. Aiken ajcole%ai.leeds.ac.uk@NSFnet-Relay.AC.UK Andrew J Cole akern@potomac.ads.com Art Kernstine Alain.Michard@mirsa.inria.fr Alain Michard alanm@cadnetix.com Alan F. McCartney allbery@NCoast.ORG Brandon S. Allbery allegra!tk@research.att.com Thomas Kirk ALLEN.HERMAN@KBESRL.ME.UIUC.EDU Allen Herman amb@cs.columbia.edu Andrew Boardman amtfocus!troym@chg.mcd.mot.com Troy Monaghen AMXMC-SEL@WSMR-SIMTEL20.ARMY.MIL Mark Oestmann anders@cuisun.unige.ch Bjornerstedt Anders andreasg@boulder.Colorado.EDU Andreas Girgensohn andrew@gec-rl-hrc.co.uk Andrew Haylett Baddow andrew@jhereg.Minnetech.MN.ORG Andrew Esh andry%capsogeti.fr@csinn.uucp Francois Andry andy@ads.com Andy Cromarty andy@cadnetix.com Andy Hewitt andyd@pogo.wv.tek.com Andy Davidson ane@cs.brown.edu Alan Ewald anund@idt.unit.no Anund Lie arc!steve@apple.com Steve Savitzky aro@compsci.aberystwyth.ac.uk Andrew Ormsby array!len@uunet.UU.NET Leonard Vanek asuvax!gtephx!sheppards@ncar.UCAR.EDU Scott Sheppard atexnet!syost@uunet.UU.NET Stephen Yost ath@prosys Anders Thulin atj@prism.TMC.COM Alex T. Jenkins avsd!tortuga!johnt@ucbvax.Berkeley.EDU John Tangney aynang@en.ecn.purdue.edu Yang Aynang b21!ujohn@relay.EU.net Ute John badmal@crl.labs.tek.com Badri baertsch@inf.ethz.ch Martin Baertschi bakken@arizona.edu Dave Bakken bard@cs.cornell.edu Bard Bloom barnett@unclejack.crd.ge.com Bruce G. Barnett bart%BLEKUL60.BITNET@CUNYVM.CUNY.EDU Bart De Decker bates@stat.wisc.edu Douglas M. Bates bbadger%X102C@HARRIS-ATD.COM Badger BA 64810 beard@ux3.lbl.gov Patrick C Beard belanger@philmtl.philips.ca Robert Belanger bengsig@nlhp3.oracle.nl Bjorn Engsig bengtl@MATHS.LTH.Se Bengt Larsson benzinger@nada.kth.se Mikael Benzinger bergman@cs.unc.edu Larry Bergman berkowit@BBN.COM ? berre%si.uninett@nac.no Arne Berre bg@nada.kth.se Bj|rn Gr|nvall bgillett@polyslo.CalPoly.EDU Bradley J. Gillette bill@HUNTSAI.UUCP Bill Davis billa@cvedc.prime.com Bill Anderson billdo@ifs.umich.edu Bill Doster bills@XAIT.Xerox.COM Bill Stackhouse bjornk@ifi.uio.no Bj|rn Kirkerud bjoyce@coherent.com Bob Joyce bjw@bbn.com Benjamin J. Woznick bkero@bangkok.ees.anl.gov Bob Kero blanier@abbott Brian Lanier blondon@ajpo.sei.cmu.edu Bob London bloom@daisy.UUCP Chris Barkley Bloom BMATHEWS@cs.tcd.ie Brian Mathews bmiller@shamash.cdc.com Brad Miller bms@aplpy.jhuapl.edu Brenda Spaur bnr-rsc!bigsur!binky@uunet.UU.NET Glenn Langford bob@odi.com Bob Miner bober@cs.wisc.edu Paul M. Bober Bobrow.pa@Xerox.COM Danny Bobrow BOSCO%FRANCE@cs.umass.edu Michel F. Bosco boubez@bass.rutgers.edu Toufic Boubez bousse@escalier_a.irisa.fr Marc Bousse bpe@cs.brown.edu Page Elmore bradr@Sun.COM Brad Rubenstein braun@ctc.contel.com Chris Braun brendav@uswest.com Brenda Vander Linden brian@apollo.com Brian Holt brianb@kinetics.kinetics.com Brian Bulkowski BRIDGE@MAX.ACS.WASHINGTON.EDU ? brosgol@ajpo.sei.cmu.edu Ben Brosgol bruce@SLC.COM Bruce Schuchardt brunkhorst@Mayo.edu Geoffrey Brunkhorst bwhite@umb.edu Bill White byennaco@East.Sun.COM Robert Yennaco byock@umaxc.weeg.uiowa.edu Bill Yock calmasd.Prime.COM!wlp%sdcsvax@ucsd.edu Walter Peterson capmkt!tim@uunet.uu.net tim carm@umd5.umd.edu Rick Chimera CARVER%Polyester@cs.umass.edu Philip caseau@flash.bellcore.com Yves J Caseau cbnewsl!dog@att.att.com Ed Schiebel cca@newton.physics.purdue.edu Charles C. Allen cci632!ccird7!tvf@cs.rochester.edu Tom Frauenhofer cdaf@iuvax.cs.indiana.edu Charles Daffinger cenkl@linus.MITRE.ORG mike cenkl cew@venera.isi.edu Craig E. Ward chaffee%REED.BITNET@VMA.CC.CMU.EDU Alex Chaffee charlie@genrad.com Charlie D. Havener chd@litp.ibp.fr Christophe Dony cheng%pollux.usc.edu@usc.edu Chien-Ming Cheng chris@harlequin.co.uk Zany Cornetto ciamac@sci.ccny.cuny.edu Ciamac Moallemi ciemo@bananapc.wpd.sgi.com Dave Ciemiewicz cja@ifs.umich.edu charles antonelli cjmchale@cs.tcd.ie CJ claris!drc@ames.arc.nasa.gov Dennis Cohen cline@sun.soe.clarkson.edu Marshall Cline clrk@tank.uchicago.edu Clark Wilson cmcl2!dasys1!rsweeney@rutgers.edu Robert Sweeney cmh@sunspot.larc.nasa.gov C. Michael Holloway cobourn@dingo.ece.cmu.edu Thomas Cobourn cohesive!pryals@Sun.COM Phil Ryals convex!graham@uxc.cso.uiuc.edu Marv Graham convex!rcunning@uxc.cso.uiuc.edu Randy Cunningham cook%hplwrc@hplabs.hp.com William R. Cook coolidge@cato.cs.uiuc.edu John Coolidge cooper@sde.hp.com Ken Cooper COSC5SH@uhvax1.uh.edu Unbeliever cox@stepstone.com Brad Cox crabb@phoenix.Princeton.EDU David W Crabb craigt@sybase.com Craig Thomas csd29%seq1.keele.ac.uk@NSFnet-Relay.AC.UK Athula Herath CSD103%PSUVM.BITNET@VMA.CC.CMU.EDU chanda cspi!geof@ajpo.sei.cmu.edu Geof Cohler csusac!unify!dgh@ucdavis.edu David Harrington csusac!unify!jde@ucdavis.edu Jeff Evarts ctumulur@rodan.acs.syr.edu the 1 and only!!! ctw%sun.central-services.umist.ac.uk@NSFnet-Relay.AC.UK Colin Walls curtis@se-sd.sandiego.ncr.com Curtis cuti@apollo.com Sue d8sjoma@dtek.chalmers.se Martin Sjoeblom D86.DAG-WAHLBERG@CARMEN.DOCS.UU.SE Dag Wahlberg d88-cwe@nada.kth.se Christian Wettergren d88-jwa@nada.kth.se Jon W{tte dag@Control.LTH.Se Dag Michael Bruck dak@tillamook.cs.uoregon.edu David Alan Keldsen dami@cui.uucp Laurent Dami. daniel@a.cs.okstate.edu Ron Daniel Jr. daniels@cse.ogc.edu Scott David Daniels darmois@crcge1.cge.fr Emmanuel Darmois dashman@rti.rti.org Eric Dashman daugher@Cssun.tamu.edu Dr. Walter C. Daugherity dave%munge@rand.org Dave McArthur dave@uswest.com Dave Taenzer daveb@tahoe.wpd.sgi.com Dave Babcock David J. Scheerer | The Johns Hopkins University writes: >Will Motif operate on top of this combined thingy? Ultimately, I presume it will; I am running mwm and Motif applications on top of xnews started with the NOPSWM environment variable set so that the OpenWindows Window Manager does not run. My only problem to date: if you create a window from a shell (like "xterm") that gets created "on top of" the current cursor, the window manager doesn't notice that the cursor is now in a new window and adjust the focus accordingly. I am not sure if this is an xnews problem or an mwm problem, because I used to see problems with focus under olwm as well. /jordan From don@brillig.umd.edu Tue Sep 26 19:49:45 1989 Date: Tue, 26 Sep 89 19:49:45 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: HP's 3D UI style From: swrinde!cs.utexas.edu!ico!auto-trol!marbru@ucsd.edu (Martin Brunecky) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <17707@bellcore.bellcore.com> sjs@bellcore.com (Stan Switzer) writes: >I am rather impressed by the visual impact of HP's 3D UI style. >Apparently, HP claims a copyright on this look. This raises a number >of questions: > If HP is going to claim a copyright on the 3D look, I am REALLY interested in details. In particular because my company has been using this 3D look (shaded buttons etc) in it's product line for at least 5 years now. How can you copyright something that has been used for a LONG time by someone else ? (by the way, our S5000 and S7000 DO have a Copyright ... but I doubt we ever considered suing OSF/Motif or HP...) [opinions expressed here are solely of my own and DO NOT represent official position of Auto-trol Technology Corporation ] -- ############################################################################### Martin Brunecky, Auto-trol Technology Corporation, 12500 North Washington Street, Denver, CO-80241-2404 (303) 252-2499 ncar!ico!auto-trol!marbru From don@brillig.umd.edu Wed Sep 27 01:11:16 1989 Date: Wed, 27 Sep 89 01:11:16 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: NeWS/X11 merge? From: jvc!lpw@uunet.uu.net (Lance Welsh) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <563@ssgp32.UU.NET>, scott@ssgp32.UU.NET (Scott Evernden) writes: > In article <445@castle.ed.ac.uk>, ajcd@lfcs.ed.ac.uk (Angus Duggan) writes: > > I've just been reading some articles in this newsgroup which seem to imply that > > the Sun X11/NeWS merge has been released. Is this true? I've been looking for > > info on it for a while, but haven't seen anything authoratative. Can someone > > from Sun comment, please? > > Me too. Actually, I am now utterly confused as to what Sun's window > strategy architecture is/will be. Does the OpenLook GUI sit on top of an > X11/News server? Where does SunView fit (below, above, beside)? Can I > still pixrect? Will Motif operate on top of this combined thingy? Does it > perform well on anything less than a SPARC? Will the X11 implementation > support remote X11 clients (e.g., peecees)? How is it all organized? How > fat is it? Is this all supported on all Suns? What should I read??? > After attending Sun's technology conference, I have the feeling that they will release OpenWindows (of which a part of that is the X11/NeWS window server) by the end of the month. The recommended platform will be the sparcstation (8 Mbytes). Releases on other systems will probably happen by the end of the year. OpenWindows includes the OpenLook user-interface, a DeskSet application, an X toolkit with a SunView API called XView (not based on the intrinsics), some graphics interface libraries such as PHIGS and GKS (not on top of the window server yet), the X11/NeWS window server, OpenFonts, and support for graphic accelerators such as their GX board. SunView is not part of it, but there is support for PixRect called PixWin via the window server, which uses something new. If Motif is going to run in OpenWindows, it will be the doing of a third party. Sun intends for the merged server to be complete - remote clients and everything. For a good description on the merged window server (architecture and compatibility), there is a good paper on it by Robin Schaufler at Sun. Size, performance, and platform support I am also anxious to discover. The conference was quite good, although X got most of the attention. I wonder if/how the opening of Adobe's fonts will impact the Folio OpenFonts in OpenWindows? -Lance P. Welsh uunet!jvc!lpw JVC Laboratory of America (408) 988-4675 From don Thu Sep 28 21:39:42 1989 Date: Thu, 28 Sep 89 21:39:42 -0400 To: NeWS-makers@brillig.umd.edu Subject: Sun Ships OpenWindows From: tonyb@Sun.COM (Tony Barbagallo -- ESS Product Marketing) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) ----- Begin Included Message ----- From rprobst@paba Tue Sep 26 17:32:06 1989 From: rprobst@paba (Richard Probst) To: xpert@expo.lcs.mit.edu Subject: Sun ships OpenWindows Sun is now shipping OpenWindows 1.0 on SPARC machines. Sun-3 and Sun386i versions will start shipping in 30 days. Here are excerpts from an announcement recently sent to all Sun sales people. OpenWindows is a complete application environment available today: X11/NeWS: A high-performance implementation of the X window system with the PostScript language and imaging model capability of NeWS. OPEN LOOK: The premium user interface for Unified UNIX System V R4. XView: A proven X toolkit based on OPEN LOOK, bringing over 2000 SunView applications to X11 with easy migration. DeskSet: A set of OPEN LOOK desktop applications. OpenFonts: Access to over 50 high quality outline fonts that exactly match printer output. ----------------------------------------------------------- Pricing/Availability of OpenWindows 1.0 Developer's Release Part Number Platform/Description Price FCS OWN-1.0-4-4-5 SPARC -- Doc and Media $ 295 ND ** 9/25/89 OWN-1.0-4-3-5 Sun-3 -- Doc and Media 295 ND ** 10/25/89 OWN-1.0-4-R-5 386i -- Doc and Media 295 ND ** 10/25/89 OWN-1.0-X-X-9 Doc only 195 ND ** 9/25/89 OWN-X-X-X-0 RTU (Right To Use) no charge ** Note that pricing is Non-Discountable. Also note that the Right To Use OpenWindows is bundled with every 8 MB Sun-3, SPARC, and 386i that Sun has shipped or currently is shipping. For example, if a company owns 100 SPARC systems, they can legally purchase one copy of the SPARC version of OpenWindows for $295 and put it on all 100 machines. ----------------------------------------------------------------- Recent questions from the net Q. Will OpenWindows be bundled with SunOS? If so, when? A. In a future release of SunOS, OpenWindows will be included with SunOS, along with SunView/SunWindows. Which release, and on what date, has not yet been announced. Q. When will OpenWindows become Sun's default window system? A. OpenWindows 1.0 is not a SunView replacement. It is intended primarily for developers who need to begin X11 application development, and for end users who need to run X11 applications today. OpenWindows will become Sun's default window system when it can be used as the platform of choice by most end users, which will depend on when the applications that end users need are available on OpenWindows. Sun is actively promoting OpenWindows to ISVs and other developers. An end-of-life strategy for SunView has not yet been determined. Q. Does the OPEN LOOK GUI sit on top of the X11/NeWS server or on top of XView? A. OPEN LOOK is a graphical user interface specification that is implemented by a user interface toolkit. XView is the user interface toolkit in OpenWindows, and XView is based on the OPEN LOOK GUI specification. XView applications run on X11/NeWS, of course, and they also run on other X11 servers. AT&T's 'OPEN LOOK X Toolkit' is another user interface toolkit based on the OPEN LOOK GUI specification. Applications built with this toolkit run on X11/NeWS and on other X11 servers. Sun and AT&T will provide each other's toolkits as part of their respective source offerings; that is, XView source is part of System V R4, and AT&T's OPEN LOOK X Toolkit source is part of the OpenWindows source licensable from Sun. In addition, XView source is part of X11 R4, and an alpha version of XView source is available from MIT today. Q. How does SunView fit in? Can I still pixrect? A. SunView applications can run without modification on OpenWindows, since OpenWindows provides complete SunView binary compatibility. However, to take advantage of the distributed capabilities provided by X11, and of the consistent look and feel provided by OPEN LOOK, SunView applications need to be converted to XView. SunView-to-XView migration is straightforward, as XView very nearly matches SunView's API. Automated conversion utilities are also provided in OpenWindows to accelerate the migration process. Pixrect operations in SunView binaries work unchanged (but only on the local machine, of course). XView supports "memory pixrects", and provides the pixwin interface as a compatibility veneer over Xlib. Q. Will the X11/NeWS server support remote X clients? A. Yes. X11/NeWS is fully X11 R3 compliant, and supports local and remote X clients. However, XView and the OpenWindows window manager are X11 R4 compliant, which means that they support and enforce the ICCCM standard. Applications that are not ICCCM compliant may not work without a simple fix. All X11 R3 compliant applications will work with X11/NeWS, and all ICCCM compliant applications will work with the OpenWindows window manager. Q. Will OpenWindows perform well on architectures other than SPARC? A. OpenWindows will perform well on other architectures. This message was composed on OpenWindows on a Sun 3/80. However, we are recommending SPARC as the platform of choice for OpenWindows because of the good fit between RISC's superior performance and the demands of distributed window systems. ----- End Included Message ----- From don Thu Sep 28 21:40:17 1989 Date: Thu, 28 Sep 89 21:40:17 -0400 To: NeWS-makers@brillig.umd.edu Subject: XNeWs as a Postscript -> Raster filter? From: gem.mps.ohio-state.edu!ginosko!uakari.primate.wisc.edu!ctrsol!emory!km@apple.com (Ken Mandelberg) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Is it possible to use xnews as a postscript -> raster file filter, to drive dot matrix printers? I'm not concerned about the details of putting the raster file in the best format for feeding the printer, but would need to vary the pixel geometry appropriately for different printers. Incidentally, besides the technical issue their could be a legal issue. NeXT apparently can't allow their display postscript software to be used in this way because of an agreement with Adobe. -- Ken Mandelberg | km@mathcs.emory.edu PREFERRED Emory University | {decvax,gatech}!emory!km UUCP Dept of Math and CS | km@emory.bitnet NON-DOMAIN BITNET Atlanta, GA 30322 | Phone: (404) 727-7963 From don Thu Sep 28 21:46:42 1989 Date: Thu, 28 Sep 89 21:46:42 -0400 To: NeWS-makers@brillig.umd.edu Subject: Blankscreen 1.1 From: spectral!sjs@bellcore.com (Stan Switzer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) It's been about six months since I posted "blankscreen 1.0." Since then I've made a number of (umm...) improvements. Here's the bigger, if not better, "blankscreen 1.1." Extensive user documantation is contained in the header comments. I'll just describe the new features and major caveats here. New Features: Easy (as such things go) to add your own animations Contains a number of standard animations and animation base-classes Menu Selection of animations "Exit Desktop" button (can be disabled) Inumerable bugs fixed and much unspeakable hackery cleaned-up Major Caveats: If you use "ksh" or "tcsh" or any shell other than "/bin/sh" or "/bin/csh" read the WARNINGS section below. Basically, the password checking hack will fail. The solution is to be sure that /etc/shells contains the pathname of your login shell (anywhere where you might log in) or to use one of the standard shells and have your .login or .profile file exec your desired shell. Another solution is to disable the "locking" feature. Enquire within... Blankscreen is only known to work on NeWS 1.1 using Sun-3 style keyboards. It very well might work elsewhere, but I be mighty suprised. I'll post a few example user-customization animations in a few days. Enjoy, Stan ---------------------- % % BlankScreen: Lights out! % % Copyright (C) 1989 by Stan Switzer. All rights reserved. % This program is provided for unrestricted use, provided that this % copyright message is preserved. There is no warranty, and no author % or distributer accepts responsibility for any damage caused by this % program. % % DESCRIPTION: % % BlankScreen monitors your keyboard and mouse for activity, % invoking a screen-saver when there has been no activity in a user- % selectable time period. If, after another user-selectable time period, % there has been no keyboard or mouse activity, BlankScreen quietly enters % a "lock" mode which demands your login password before releasing the % workstation. % % Certain locking modes, for instance the default "Randomator," allow % menu selections and, consequently, do not leave the "blanking mode" simply % because of mouse motion. However, any key press or mouse button (except % for the menu button, of course) will exit the blanking mode. % % At invocation, the variables /BlankTime and /LockTime control the amount % of idle time that causes blanking and amount of blanked time that leads % to locking. Changing these values later has no effect (to protect against % accidents). The default times for these values are three minutes % and two minutes respectively. If you find locking objectionable, you % can disable it by setting /LockTime to 0. % % When blankscreen is restarted, it kills any other running (but % unlocked) blankscreen processes. This allows you to change the % timer parameters without compromising the security of the % locking function. % % If /BlankFKey is defined, it is the name of a function key to use to % blank the screen on demand. Similarly for /LockFKey. I use the following: % /BlankFKey /FunctionF6 def /LockFKey /FunctionF7 def % % Unless you define /BlankscreenExitButton to false before % starting blankscreen, there will be an "EXit NeWS" button on the % password-query display. If you press this button, you will exit % NeWS entirely. Assuming that you started NeWS using % "exec news_server" from your login shell, this option affords you a % measure of security while allowing you to be a socially responsible % user of shared facilities. % % The NeWS-clock poem can be changed by assigning a different array of % strings to /Poetry before invoking blankscreen. A value of "null" % disables the poetry entirely. % % The colors used in the blanking display can be changed by assigning values to % the appropriate variables before invocation. Interested parties should % look at the first few lines of source. % % If you don't like the standard animation, there are other alternatives. % You can define the procedure "CreateAnimationObject" to override the % default animation "Randomator". The following definition will % result in a bouncing globe instead: % /CreateAnimationObject { /new WorldBouncer send } def % Other alternatives can be found within. If you don't like any of these % you can write your own animation using any of the classes provided. % (CreateAnimationObject is invoked after all of the classes are defined so % it can define a new subclass and instantiate it.) If you % need subclassing assistance, or have a nice animation you'd like to share, % mail me. If I get enough animations, I'll start a library and forward % it to the the archives periodically. % % It is safe to say that this is a case of a simple hack having % gotten completely out of hand. % % WARNINGS: % % This program checks passwords by trying to connect to your FTP % server (yes, this is a hack). You would do well to see if you can % "ftp localhost" before you begin using this program. If your % login shell is not /bin/sh or /bin/csh (for instance /.../ksh) % you must make sure that the file /etc/shells contains the paths of all % full-service shells or some systems will "protect" you from using % FTP. The idea is to make it so that non-shell logins cannnot be used % to "sneak in" and FTP out files; unfortunately, this policy is overly % cautious. IF ANYONE HAS A BETTER IDEA FOR CHECKING PASSWORDS (without % writing any C), PLEASE SEND ME MAIL. % % Additionally, either (USER) or (LOGNAME) must be in the environment % for the locking mode to know who you are. (If you are running any % of the usual varieties of UNIX, it will be.) % % If either of these assumptions fails to hold true, setting "LockTime" % to 0 disables automatic locking, thus avoiding the problem. % % Because this program goes to great lengths to defeat the keyboard focus % manager, it depends on things that might easily change from one % release of NeWS to another. I only know for sure that it works in % NeWS 1.1 with a Sun-3 keyboard. % % Finally, "forkunix" must work (I don't know about non-UNIX NeWS % implementations), and there must be a reasonably standard "date" % command. % % NeWS Notes: % % I should probably be registering "global" interests relative to a % framebuffer overlay instead of a null canvas. % % Interests having dictionaries of procs for both their Name and Action % do not execute either procedure but instead return both an event and array % from awaitevent. The array contains the two procedures that should have % been executed. Maybe I should have been using "forkeventmgr" anyway to % avoid all of this hassle (then again, for security reasons, maybe not). % % Because a newly created process tends to get the same process table % address as the last reclaimed dead process and because pending % process-specific events are not scrubbed when their process dies, % a process will occasionally receive an event sent to a previous % incarnation of itself. This can be a pain if you get two shuttle events, % for instance, together driving a timing loop. My solution is to include % a "uniquecid" value as the /Action in both the event and the interest so % that we can't get these bogus events. % % There are some interesting techniques in here that you may feel free % to borrow. My favorite is the "condition" handler. A close runner-up % is the FTP password hack (thanks Don) and the date query. Please % do not use the keyboard handling as a model for input handling since % this code intentionally subverts the very mechanisms you should % generally be using. % % ------------ % Stan Switzer sjs@ctt.bellcore.com % % 3/27/89 - SJS % Release 1.0 % 3/29/89 - SJS % Cleaned up animation and timing mechanisms % 8/31/89 - SJS % Various clean-up activities in preparation for 1.1 release % Numerous hacks, tweaks and frobs. % 9/28/89 - SJS % Release 1.1 % Start a new dictionary here to prevent patching of the locking code, prevent % unauthorized access to the /Password entry, and to avoid systemdict % namespace pollution. gsave 100 dict begin { end } pop % { end } pop is to fool formatters! /default { % key val -> - def into current dictionary, val is default 1 index where { 2 index get exch pop } if def } def /BlankTime 180 default /LockTime 120 default /conprint { pop pop } def /Conprint { sprintf console exch writestring console flushfile } def % /conprint /Conprint load def % Colors: /SC { % key grayshade pastelhue-or-color -> - set color dup type /colortype ne { .35 1 hsbcolor } if % pastel hue ColorDisplay? not 3 1 roll ifelse dup type /colortype ne { dup dup rgbcolor } if % gray value default } def /BlankColor 0 0 0 0 rgbcolor SC /HourColor 1 .5 SC /MinColor 1 .5 SC /ClockColor 1 .5 SC /TextColor 1 .5 SC /QuoteColor 1 .5 SC % Is there to be a "server-exit button?" /BlankscreenExitButton true default % Generally, I prefer that users wishing to change the displayed verses do % so by defining the new verses before "running" this file. This way, we % can avoid unnecesary speciation of this program. /Poetry [ (`The time has come', the Walrus said,) ( `To talk of many things:) (Of shoes\320and ships\320and sealing wax\320) ( Of cabbages\320and kings\320) (And why the sea is boiling hot\320) ( And whether pigs have wings.') ( \320 Lewis Carroll) ] default % Likewise, I have defined hooks for you to specify your own animation. % Use them if at all possible. Redefine either proc, as convenient, % to create and/or select the animation. /CreateAnimationObject { % Canvas -> obj /AnimationClass Randomator def % default DefineAnimationClass % backward compatability /new AnimationClass send } default /DefineAnimationClass { % defines the default animation class % The user can redefine /AnimationClass here, using one of her own or % one of the following: % PoetryThing WorldBouncer WorldNeWSBouncer ClockThing % BounceClockThing StarField SkyRockets PoetryAndBouncer % WorldAndStars Circulator Randomator } default % By default we enable the color tricks, but they depend on the ability % of the server to keep retained unmapped canvases: /EnableColorTricks? true default % We are going to be paranoid and hoist certain non-operator procs into % our private dictionary to prevent insertion of trojan horses in the % password collection and checking logic. I know of a few holes here, but % I don't see the point of documenting them, if you get my drift. Still, % considering how "append," for instance, is used in here, it is only % prudent to protect ourselves. /CopyProc { % proc -> proc' dup type /arraytype eq { % array? dup xcheck exch 0 exch { % forall -- exec? n item CopyProc exch 1 add } forall array astore exch { cvx } if } if } def [ /append ] { % hoist these global procs ... dup load CopyProc def } forall /GetDate { % - -> (str) true -or- false { 25 dict begin % fork (to keep events from being confused) /Interest createevent dup begin /Name [ /TimeOut /Date ] def end dup expressinterest def /Timer Interest createevent copy dup begin /Name /TimeOut def /TimeStamp currenttime .25 add def end dup sendevent def (echo "createevent dup begin) ( /Name /Date def /Action (`date`)) append ( def end sendevent" | psh) append forkunix awaitevent dup /Name get /TimeOut eq { pop [ false ] } { Timer recallevent /Action get [ exch true ] } ifelse end } fork waitprocess aload pop } def /GetHHMMSS { % - -> hh mm ss true -or- false GetDate { 3 { ( ) search { % (true) post match pre { exch pop () ne { exit } if ( ) search not { exit } if } loop } if } repeat ( ) search 4 2 roll pop pop pop 2 { (:) search pop exch pop cvi exch } repeat cvi true } { false } ifelse } def /Midnight { Midnightproc waitprocess pop /Midnightproc null store Midnight } def /Midnightproc { /Midnight currenttime GetHHMMSS % try again if it didn't work (maybe server wasn't started yet) true { GetHHMMSS } ifelse % try still again if it didn't work (this time we'll wait a bit) true { 1 sleep GetHHMMSS } ifelse { % worked? 3 -1 roll 60 mul 3 -1 roll add exch 60 div add sub store true } { % not worked? pop pop false } ifelse } fork def % GetUserid: -> % false -- didn't work % (userid) true -- got user id /GetUserid { (USER) { getenv } errored { pop (LOGNAME) { getenv } errored { pop false } true ifelse } true ifelse } def % Check password using ftp server (Don Hopkins thought of using FTP). % % CheckPW: (userid) (password) -> % false -- check didn't work % ok? true -- OK? is true iff PW is correct % % NOTE: we wish to distinguish failure of the checking procedure from % failure of the check itself. /CheckPW { { 25 dict begin /Password exch def /User exch def /S (%socketc21) (rw) file def % socket /R { S exch readline } def % str -> str -- read from socket /W { S exch writestring S flushfile } def % str -> - -- write socket /SR { % (good) (bad) timeoutsec -> good? true -or- false -- srch /Time exch 60 div def /Interest createevent dup begin /Name /DoneEvent def end dup expressinterest def /Bad exch def /Good exch def /Match1 { anchorsearch { pop pop true } { pop false } ifelse } def /Match { dup type /arraytype eq { { Match1 { true exit } if } forall } { Match1 } ifelse } def /Str 200 string def /Proc { % fork { % loop Str R not { /Ugly exit } if dup Good Match { /Good exit } if dup Bad Match { /Bad exit } if pop } loop exch pop Interest createevent copy dup /Action 4 -1 roll put sendevent } fork def /Timer Interest createevent copy dup begin /Action /TimeOut def /TimeStamp currenttime Time add def end dup sendevent def awaitevent /Action get dup /TimeOut eq { Proc killprocess pop /Ugly } { Timer recallevent } ifelse dup /Ugly eq { pop false } { /Good eq true } ifelse Interest revokeinterest } def { % only once through: (220 ) (xxx ) 15 SR not { false exit } if not { false exit } if (user ) User append (\n) append W (331 ) [ (530 ) (500 ) ] 15 SR not { false exit } if not { false exit } if (pass ) Password append (\n) append W (230 ) [ (530 ) (500 ) ] 20 SR not { false exit } if true exit } loop dup 2 1 ifelse array astore (quit\n) W S closefile end } fork exch pop exch pop waitprocess aload pop } def /UserID GetUserid not (Unknown User) if def /BlanketCanvas framebuffer gsave dup setcanvas newcanvas /ptr /ptr_m 2 index setstandardcursor dup begin /Transparent false def /Retained false def /Mapped false def /EventsConsumed /AllEvents def end clippath dup reshapecanvas grestore def % Base class for animations. Handles animation timing and graphics context. % It is "abstract" in the sense that it doesn't make sense to instantiate it. % It must first be subclassed. /Animator Object dictbegin % abstract animator class /AnimatorProc null def /CanW 0 def /CanH 0 def /Canvas null def dictend classbegin % public methods: /new { % canvas -> obj /new super send begin /Canvas exch def gsave Canvas setcanvas clippath pathbbox grestore /CanH exch def /CanW exch def pop pop currentdict end } def /animate { % bool -> - AnimatorProc null ne { % Don't dance! /AnimatorProc dup load killprocess null def GSave FillColor fillcanvas grestore } if { % Dance! /AnimatorProc { %fork GSave InitAnimation Animate } fork def } if } def /paint { GSave gsave FillColor fillcanvas grestore DoPaint grestore } def /monitor_drag true def % Painting methods: /FillColor 0 def /TextColor TextColor def /Font currentfont def /GSave { gsave Canvas setcanvas TextColor setshade Font setfont } def /Paint nullproc def /DoPaint { Paint } def % Animation methods: /Interval 1 60 div def /Animate { createevent dup begin /Name /Animator def % shouldn't have to do this but newly created process sometimes % spoofs as previous one and gets the old event even tho it is % process-specific! /Action uniquecid def end dup expressinterest createevent copy { AnimateStep dup begin /TimeStamp pause currenttime Interval add def end sendevent awaitevent % leave event on stack } loop } def /AnimateStep nullproc def /InitAnimation nullproc def classend def % An "animated thing" class. Some graphical object moves around the screen, % either randomly, according to a "gravitational" trajectory, or according % to the whims of a subclass. It is semi-abstract in that it is intended to % be subclassed, but will work if used directly (it paints a rectangle at % random spots on the screen [big deal]). This class contains a useful % double buffering mechanism--perhaps this one will work regardless of % server canvas retaining policy. /AnimatedThing Animator dictbegin % semi-abstract animation class /X 0 def /Y 0 def dictend classbegin % public methods: /new { % canvas -> - /new super send begin DoubleBuffer? { InstallDoubleBuffer } if currentdict end } def % random motion (default): /MoveRandom { CanW CanH Size 3 -1 roll exch sub random mul cvi 3 1 roll sub random mul cvi exch /Y exch store /X exch store } def /MoveThing /MoveRandom load def % Alternative bouncing motion scheme. % just override as follows: % /MoveThing { MoveBounce } def /InitAnimation { InitBounce } def /dX 8 def /dY 0 def % velocity /d2X 0 def /d2Y -2 def % acceleration (default: down) /bounceX -1 def /bounceY -.95 def % rebound factors /countX 0 def /countY 0 def /maxCount 20 def /da2v { % d a -> v -- distance accel -> velocity mul dup 0 lt -2 2 ifelse mul sqrt cvi % (fizix 101) } def /Outside { % v x lowx highx -> false -or- closest true dup 3 index lt { 4 1 roll pop pop 0 ge { true } { pop false} ifelse } { pop dup 2 index gt { exch pop exch 0 le { true } { pop false} ifelse } { pop pop pop false } ifelse } ifelse } def /InitBounce { % reasonable way to intitialize a bounce /X 0 def /Y CanH Size exch pop sub def /dY 0 def } def /MoveBounce { /dX dX d2X add def /dY dY d2Y add def % acceleration /X X dX add def /Y Y dY add def % velocity Size % W H dX X 0 CanW 6 -1 roll sub Outside { % X rebound /X exch def /dX dX bounceX mul cvi def /countX countX 1 add def countX maxCount ge { /dX CanW Size pop sub d2X da2v def } if } { /countX 0 def } ifelse dY Y 0 CanH 5 -1 roll sub Outside { % Y rebound /Y exch def /dY dY bounceY mul cvi def /countY countY 1 add def countY maxCount ge { /dY CanH Size exch pop sub d2Y da2v def } if } { /countY 0 def } ifelse } def % Painting methods: /FillColor 0 def /TextColor TextColor def /Font currentfont def /GSave { gsave Canvas setcanvas TextColor setshade Font setfont } def /DoPaint { X Y moveto ComputeThing PaintThing } def /ComputeThing nullproc def /PaintThing { Paint } def % Double-buffering scheme: % (a good argument for multiple inheritance) /DoubleBuffer? false def /ColorBuffer? false def /InstallDoubleBuffer { /PaintThing { gsave currentpoint translate Size scale BufferCanvas ImageBufferCanvas grestore } def /ComputeThing { gsave BufferCanvas setcanvas gsave FillColor fillcanvas grestore TextColor setshade 0 0 moveto Paint grestore } def ColorBuffer? { /BuildBufferCanvas { gsave framebuffer dup newcanvas exch setcanvas 0 0 moveto Size rect dup reshapecanvas grestore dup /Retained true put dup /Transparent false put } def /ImageBufferCanvas { imagecanvas } def } if /BufferCanvas BuildBufferCanvas def } def /BuildBufferCanvas { % This would appear to be an officially recognized way % to create a for-sure retained canvas (it has to be parentless) % so we can't simply use newcanvas): Size 1 [ 3 index 0 0 5 index neg 0 1 index ] (some arbitrary initial image data) buildimage } def /ImageBufferCanvas { true exch imagemaskcanvas } def % Animation methods: /Interval 3 60 div def /AnimateStep { X Y Size % for rectpath, after ComputeThing MoveThing ComputeThing rectpath currentcolor FillColor setshade fill setcolor X Y moveto PaintThing } def % Default thing (a small rectangle) /Size { 20 20 } def % totally arbitrary /Paint { Size rect fill % totally arbitrary (gotta do something!) } def classend def % A clock /ClockThing AnimatedThing [] classbegin /ClockRad 36 def /MinHand { ClockRad .8 mul cvi } def /HourHand { ClockRad .45 mul cvi } def /PaintHand { % deg r -> - exch gsave rotate -4 -4 moveto 4 -4 lineto 0 exch lineto closepath fill grestore } def /PaintClock { % - -> - gsave ClockRad dup rmoveto currentpoint translate ClockColor setcolor gsave 12 { 30 rotate -2 ClockRad moveto 4 0 rlineto -2 -6 rlineto closepath fill } repeat grestore currenttime Midnight sub cvi dup 3600 mod 60 div HourColor setcolor -30 mul HourHand PaintHand MinColor setcolor 60 mod -6 mul MinHand PaintHand grestore } def /Paint /PaintClock load def /Size { ClockRad dup add dup } def classend def % A clock that bounces /BounceClockThing ClockThing [] classbegin /DoubleBuffer? true def /MoveThing { MoveBounce } def /InitAnimation { InitBounce } def /Interval .1 60 div def classend def % Propoganda /XBusters AnimatedThing [] classbegin % The official logo of the Ad-Hoc Committee to Rid the World of the % Evil Scourge of the X Windowing System % (In fairness, X has some meritorious features: resource database, % consistent command-line options, serviceable client-side toolkit % support, liberal color management policy, lots of PD S/W, and a % halfway decent terminal emulator, to name a few.) /Interval 15 60 div def /XColor ColorDisplay? { .5 1 .7 hsbcolor } .5 ifelse def /NoColor ColorDisplay? { 0 1 .5 hsbcolor } .25 ifelse def /XLogo { % n => - -- trace an n pt. X logo at current point matrix currentmatrix exch dup scale currentpoint translate currentpoint 0 1 moveto .25 1 lineto .556 .59 lineto .093 0 lineto 0 0 lineto .381 .49 lineto closepath 1 0 moveto .75 0 lineto .444 .41 lineto .907 1 lineto 1 1 lineto .619 .51 lineto closepath moveto setmatrix } def /NoSymbol { % n => - -- trace a "no" symbol at the current point matrix currentmatrix exch dup scale currentpoint translate currentpoint .5 .5 .5 0 360 arc closepath .5 .5 .38 35 235 arcn closepath .5 .5 .38 215 55 arcn closepath moveto setmatrix } def /NoXLogo { % n => - -- trace an n pt. "no X" logo at current point gsave dup NoSymbol NoColor setshade fill grestore gsave dup .1 mul dup rmoveto dup .8 mul XLogo XColor setshade fill grestore pop } def /Paint { Size gsave scale 1 NoXLogo grestore } def /Size { 300 dup } def classend def % Clock, logo, and poetry /PoetryThing ClockThing [] classbegin /Font /Times-Roman findfont 92 scalefont def /String (NeWS) def /Verses Poetry def /NVerses Verses null eq { 0 } { Verses length } ifelse def /Poetry? NVerses 0 gt def /ClockRad Poetry? 48 36 ifelse def /Vfont /Times-Roman findfont 14 scalefont def /LogoUp Poetry? 22 0 ifelse def /VerseNo 0 def /Verse { Verses VerseNo dup 0 lt 1 index NVerses ge or { pop /VerseNo 0 store 0 } if get } def /InitAnimation { /VerseNo -1 store } def /MoveThing { NextVerse /MoveThing super send } def /NextVerse { /VerseNo VerseNo 1 add store } def /Size { /Size super send exch GSave String stringwidth pop Vfont setfont Verses { stringwidth pop max } forall add exch 2 array astore cvx /Size exch def Size grestore } def /Paint { PaintClock ClockRad 2 mul 0 rmoveto gsave 0 LogoUp rmoveto String show grestore Poetry? { gsave Vfont dup setfont fontdescent 0 exch rmoveto QuoteColor setcolor Verse show grestore } if } def classend def % Abstract class to bounce a sequence of images /ImageBouncer AnimatedThing [ /ImageList /N ] classbegin % NB: abstract class /new { % imagelist canvas -> thing /new super send begin /ImageList exch def /N 0 def currentdict end } def % class method! /genlist { % (prefix) (suffix) n -> [ imagelist ] [ 4 1 roll 1 exch 1 exch { % for: mark ... (pre) (suf) i 2 index exch (XXXX) cvs append 1 index append 3 1 roll } for pop pop ] } def /DoubleBuffer? true def /CurrImage { % - -> image ImageList N get dup type /stringtype eq { pause readcanvas pause ImageList N 2 index put } if } def /MoveThing { MoveBounce /N N 1 add dup ImageList length ge { pop 0 } if def } def /InitAnimation { InitBounce } def /WColor .3 1 .4 hsbcolor def /OColor .5 .5 .65 hsbcolor def /TwiddleColors nullproc def % yuck (yuck)! /Paint { gsave currentpoint translate Size scale ColorBuffer? { TwiddleColors } if false CurrImage imagemaskcanvas grestore } def /Interval .05 60 div def classend def % Bounce the world /WorldBouncer ImageBouncer [] classbegin /new { % canvas -> thing GlobeList exch /new super send } def /TwiddleColors { .5 .5 .5 0 360 arc OColor setcolor fill WColor setcolor } def ColorDisplay? EnableColorTricks? and { /ColorBuffer? true def } if /Size { 64 64 } def classend def % List of Globes, shared among various classes /GlobeList (NEWSHOME) getenv (/smi/globes/globe) append (.im1) 30 /genlist ImageBouncer send def % Crass commercialism /WorldNeWSBouncer WorldBouncer [] classbegin /Font { /Times-Roman findfont /Size super send exch pop scalefont /Font 1 index def } def /Size { /Size super send exch gsave Font setfont (NeWS) stringwidth pop grestore add exch 2 array astore cvx /Size exch def Size } def /Paint { gsave currentpoint translate gsave Size exch pop dup scale false CurrImage imagemaskcanvas grestore Size exch pop 0 moveto (NeWS) show grestore } def /ColorBuffer false def classend def % A field of stars, though it might be taken for "granite" /StarField Animator dictbegin /NStars 0 def /Count 0 def dictend classbegin /maxCount 10 def /maxNStars 30 def /minNStars 15 def /AnimateStep { NStars { CanW random mul cvi CanH random mul cvi moveto random .4 le { % blank a patch random 1 add 5.5 mul cvi 0 } { % color a patch random 1.2 mul 1 add cvi ColorDisplay? { 3 { random .3 mul .7 add } repeat rgbcolor } 1 ifelse } ifelse setshade dup rect fill } repeat /Count Count 1 sub def Count 0 lt { /Count maxCount def NStars minNStars gt { /NStars NStars 1 sub def } if } if } def /InitAnimation { /NStars maxNStars def /Count maxCount def } def /DoPaint { InitAnimation } def /Interval .2 60 div def classend def % Simple skyrockets animation, explosion more of a fizzle /SkyRockets AnimatedThing [ /State /dLim1 /dLim2 /explR ] classbegin /Interval .05 60 div def /InitAnimation { % Launch it: /State /Ball def /X CanW random mul cvi def /dX 30 random .5 sub mul cvi def /Y 0 def /dY CanH Size exch pop sub d2Y da2v def % to top /dY dY random 4 div .75 add mul cvi def % times .75 to 1.0 /dLim1 dY -.7 random mul mul cvi def % explode /dLim2 dY -.85 random mul mul cvi def % fizzle dLim1 dLim2 lt { /dLim2 dLim1 /dLim1 dLim2 def def } if } def /MoveThing { MoveBounce dY dLim1 lt { /State /Explode def /explR 4 def } if dY dLim2 lt { InitAnimation } if } def /Size { 60 60 } def /Paint { gsave Size 2 idiv exch 2 idiv exch rmoveto currentpoint translate State { % case /Ball { % -2 -2 5 5 rectpath fill 0 0 3 0 360 arc fill } /Explode { 6 { 120 random mul cvi rotate explR random mul 0 moveto explR 2 mul random .5 add mul 0 lineto stroke } repeat /explR explR 4 add def } } case grestore } def classend def % Run several animations together /Tandomator Object [ /Canvas /Animators ] classbegin % NB: abstract class /new { % canvas classarray -> obj /new super send begin exch /Canvas exch def /Animators exch [ exch { Canvas exch /new exch send } forall ] def currentdict end } def /animate { Animators { 1 index exch /animate exch send } forall pop } def /paint { % Animators { /paint exch send } forall % the "right" way /paint Animators 0 get send % the hack way } def /monitor_drag { true Animators { /monitor_drag exch send and } forall } def classend def % What it sez... /PoetryAndBouncer Tandomator [] classbegin /new { [ PoetryThing WorldBouncer ] /new super send } def classend def % Likewise... /WorldAndStars Tandomator [] classbegin /new { [ StarField WorldBouncer ] /new super send } def classend def % A list of interesting animations to be used by the "Randomator" % and "Circulator." These can be modified in "CreateAnimationObject." /Animations [ PoetryThing % historical interest (sentimental artifact?) WorldNeWSBouncer PoetryAndBouncer WorldAndStars SkyRockets XBusters % propoganda alert! % WorldBouncer StarField % boring but servicable % ClockThing BounceClockThing % just plain boring ] def % Select from among Animations using menu /Selectomator Tandomator [ /Nanimators /Current /N /SelectionMenu ] classbegin /new { % canvas -> obj Animations /new super send begin /Nanimators Animators length def /N 0 def /SelectionMenu [ Animators { /ClassName exch send 50 string cvs } forall ] [ { currentindex { false animate /N exch def true animate } Animation send } ] /new DefaultMenu send { % Make the menu a child of the "blanket" canvas so that it % can never end up "behind" it. Easy, right? Wrong! % This is all I should need to do: /ParentCanvas BlanketCanvas def % but I need these hacks too :-( % 1) because LiteMenu slopily uses "framebuffer" in some places % where it should use "ParentCanvas": /framebuffer BlanketCanvas def % 2) Because LiteMenu depends on obnoxious behavior of % "newcanvas" (in particular, that children of "framebuffer" % have different default attributes than all others): /showat { % instance method ;-) MenuCanvas null eq { /MenuCanvas ParentCanvas newcanvas def MenuCanvas /Retained RetainCanvas? put MenuCanvas /Transparent false put MenuCanvas /EventsConsumed /AllEvents put MenuWidth null eq { layout } if reshape } if % instance method "super send" hack: /showat ParentDict supersend } def } 1 index send def { % fork createevent dup /Name MenuButton put dup /Action /DownTransition put dup /Canvas Canvas put expressinterest { awaitevent /IgnoreClick? true store /showat SelectionMenu send } loop } fork pop currentdict end } def /animate { Current null ne { false /animate Current send /Current null def } if { /Current Animators N get def true /animate Current send } if } def /paint { Current null ne { /paint Current send } if } def /monitor_drag false def classend def % Cyclicly choose from among the animations above /Circulator Selectomator [] classbegin /animate { dup /animate super send { /N N 1 add def N Nanimators ge { /N 0 def } if } if } def classend def % Randomly choose from among the animations above /Randomator Circulator [] classbegin /new { /new super send dup begin Randomize end } def /Randomize { /N Nanimators random mul cvi dup Nanimators ge { pop 0 } if def } def /animate { dup /animate super send { Randomize } if } def classend def /Animation BlanketCanvas CreateAnimationObject def % It would probably be better to subclass the following from some form of % Item. However, to prevent sneaky code inserted in LiteItem from stealing % passwords, we write it from scratch. This is turning out to be a real % Robinson Crusoe (Gilligan's Island?) adventure. /MessageCanvas Object dictbegin /Canvas null def /Message () def /EventProc null def dictend classbegin /Width 350 def /Height 85 def /CornerRadius 10 def /FillColor 1 def /TextColor 0 def /Font /Times-Roman findfont 18 scalefont def /new { /new super send begin % canvas -> obj /Canvas gsave exch dup setcanvas newcanvas dup begin /Transparent false def /Retained false def /Mapped false def end def grestore currentdict end } def /MessagePath { CornerRadius 5 1 roll rrectpath } def /reshape { % x y w h -> - gsave Canvas /Parent get setcanvas 4 2 roll translate 0 0 4 2 roll MessagePath Canvas reshapecanvas grestore } def /ExpressInterests { % Damage Repair createevent dup /Name 1 dict dup begin /Damaged { { GSave damagepath clipcanvas Paint newpath clipcanvas grestore } self 0 pop send } def end put dup /Canvas Canvas put expressinterest } def /StartEventProc { /EventProc { % fork ExpressInterests { awaitevent pop } loop } fork def } def /setmessage { /Message exch def paint } def /map-it { % bool -> - dup { EventProc null eq { StartEventProc } if } if Canvas /Mapped 3 -1 roll put } def /Paint { % - -> - gsave FillColor fillcanvas grestore Width Message stringwidth pop sub .5 mul Height currentfont fontascent sub .5 mul moveto Message show } def /GSave { gsave Canvas setcanvas Font setfont TextColor setshade } def /paint { GSave Paint grestore } def classend def % Error message canvas: /RaspberryMessage BlanketCanvas /new MessageCanvas send { clippath pathbbox 4 2 roll pop pop exch Width sub 2 idiv exch Height sub 2 idiv Width Height reshape } 1 index send def % Password query canvas: /QueryMessage BlanketCanvas /new MessageCanvas send { /Paint { gsave FillColor fillcanvas grestore 12 60 moveto (Userid: ) show UserID show 12 40 moveto (Password: ) show % Password show (#%*&@!%&@#X?#No!*NeWS!*%$#@$@!) % cryptic missive dup length 0 exch PWpos min getinterval show 2 0 rmoveto 5 -5 rlineto -11 0 rlineto closepath fill 30 15 moveto Message show } def clippath pathbbox 4 2 roll pop pop exch Width sub 2 idiv exch Height sub 2 idiv Width Height reshape } 1 index send def /ButtonCanvas MessageCanvas dictbegin /Inside? false def dictend classbegin /UpColor 1 def /DownColor .5 def /FillColor { Inside? DownColor UpColor ifelse } def /Notify nullproc def /ButtonDown { null blockinputqueue { % fork createevent dup /Action 1 dict dup begin /UpTransition { dup /Name get PointButton eq { Inside? { Notify } if } if exit } def end put expressinterest createevent dup /Name 2 dict dup begin /EnterEvent { /Inside? true store paint } def /ExitEvent { /Inside? false store paint } def end put dup /Canvas Canvas put expressinterest unblockinputqueue /Inside? true store paint { awaitevent pop } loop } fork } def /ExpressInterests { /ExpressInterests super send % Left Mouse click: createevent dup /Name 1 dict dup begin PointButton { /ButtonDown self 0 pop send } def end put dup /Canvas Canvas put dup /Action /DownTransition put expressinterest } def classend def /ExitButton null BlankscreenExitButton { pop BlanketCanvas /new ButtonCanvas send { /Message (Exit NeWS) def /Notify {exitcleanly} def GSave /Height currentfont fontheight 20 add def /Width Message stringwidth pop 20 add def grestore { Canvas getcanvaslocation } QueryMessage send exch 400 add exch Width Height reshape } 1 index send } if def /nouse /nouse_m BlanketCanvas setstandardcursor /PWstring 100 string def /PWpos 0 def /Password () def /AddPW { PWpos PWstring length lt { PWstring PWpos 3 -1 roll put /PWpos PWpos 1 add store /Password PWstring 0 PWpos getinterval store } { pop } ifelse % Thanks Don } def /DelPW { /PWpos PWpos 1 sub 0 max store /Password PWstring 0 PWpos getinterval store } def /ClearPW { /PWpos 0 store /Password PWstring 0 PWpos getinterval store 0 1 Password length 1 sub { Password exch 0 put } for % zero PW string } def /seconds { 60 div } def /Member? { % item array -> bool false 3 1 roll { % forall 1 index eq { exch pop true exch } if } forall pop } def /Secure? { State { /Lock /Query /Check /Raspberry } Member? } def /State null def % Timer while in state: /StateTimes 10 dict dup begin /Sleep 15 BlankTime 2 div min seconds def /Monitor BlankTime seconds def /Blank LockTime seconds def /Lock 0 def /Query 30 seconds def /Check 0 def /Raspberry 5 seconds def end def /Conditions [ dictbegin % Invisible monitoring: /Condition { State /Monitor eq } def /Enter { MonitorClicks expressinterest MonitorMouseDrag expressinterest } def /Leave { MonitorClicks revokeinterest MonitorMouseDrag revokeinterest } def dictend dictbegin % Screen is blanked: /Condition { State { /Blank /Lock /Query /Check /Raspberry } Member? } def /Enter { true /animate Animation send pause BlanketCanvas canvastotop BlanketCanvas /Mapped true put } def /Leave { BlanketCanvas /Mapped false put false /animate Animation send } def /Remain { BlanketCanvas canvastotop } def dictend dictbegin % Keyboard and mouse monitoring when blanked: /Condition { State { /Blank /Lock /Raspberry } Member? } def /Enter { MonitorClicks expressinterest /monitor_drag Animation send { MonitorMouseDrag expressinterest } if } def /Leave { MonitorClicks revokeinterest MonitorMouseDrag /IsInterest get { MonitorMouseDrag revokeinterest } if } def dictend dictbegin % Querying: /Condition { State /Query eq } def /Enter { ClearPW (Enter Password.) /setmessage QueryMessage send QueryInterests /expressinterest load forall } def /Leave { QueryInterests /revokeinterest load forall } def dictend dictbegin % Checking: /Condition { State /Check eq } def /Enter { (Checking Password.) /setmessage QueryMessage send CheckInterest expressinterest } def /Leave { CheckInterest revokeinterest } store dictend dictbegin % Querying or checking: /Condition { State { /Query /Check } Member? } def /Enter { true /map-it QueryMessage send ExitButton null ne { true /map-it ExitButton send } if /ptr /ptr_m BlanketCanvas setstandardcursor } def /Leave { false /map-it QueryMessage send ExitButton null ne { false /map-it ExitButton send } if /nouse /nouse_m BlanketCanvas setstandardcursor } def dictend dictbegin % Error Message /Condition { State /Raspberry eq } def /Enter { true /map-it RaspberryMessage send } def /Leave { false /map-it RaspberryMessage send } def dictend ] def % General-purpose condition handler: monitors changes to boolean conditions % and invokes associated handling routines. /HandleConditions { 0 begin Conditions { % forall begin /Value Condition def % evaluate condition Prev Value { { True Same Remain Was } % Is and was { True Different Enter WasNot } % Is and was not } { { False Different Leave Was } % Is not and was { False Same Desists WasNot } % Is not and was not } ifelse ifelse /Prev Value def end } forall end } dup 0 dictbegin /Prev false def % initial value of the condition /Condition {false} def % Condition check proc { /True /False /Enter /Leave /Same /Different /Remain /Desists /Was /WasNot } { nullproc def } forall dictend put def % Change to a new state: /newState { % state -> - (>> % -> %\n) [ State 3 index ] conprint /State exch store HandleConditions TimerEvent /IsQueued get { TimerEvent recallevent } if StateTimes State get dup 0 eq { pop } { (>> Time %\n) [ 2 index ] conprint TimerEvent dup /TimeStamp 4 -1 roll pause currenttime add put sendevent } ifelse } def /SBInitialize { % Express interests, etc. % Must be done in the forked event, so it must be part of a proc. % Still, it'll only be executed once, so after it is executed, we % free up some server memory by having it delete itself! % What to do when the timer expires: /TimerInterest createevent dup begin /Name 2 dict dup begin /Timer { State { % case /Sleep { /Monitor newState } /Monitor { /Blank newState } /Default { /Lock newState } } case } def end def % avoid spurious events from reuse of proocess tbl of killed proc: /Action uniquecid def end dup expressinterest def % External control: /ControlInterest createevent dup begin /Name /BlankScreen def /Action 5 dict dup begin /Destroy { Secure? not { currentprocess killprocessgroup } if } def /Blank { Secure? not { /Blank newState } if } def /Lock { /Lock newState } def /Query { /Query newState } def end def end dup expressinterest def % We clone this event from the interest to get the /Process value: /TimerEvent TimerInterest createevent copy dup begin /Name /Timer def end def /IgnoreClick? false def /MonitorClicks createevent dup begin /Priority 20 def /Exclusivity true def /Action 1 dict dup begin /DownTransition { /IgnoreClick? false def dup redistributeevent pause pause IgnoreClick? not { Secure? /Query /Sleep ifelse newState } if } def end def end def /MonitorMouseDrag createevent dup begin /Priority 5 def /Exclusivity true def /Name 1 dict dup begin /MouseDragged { dup redistributeevent pause Secure? { /Query newState } { /Sleep newState } ifelse } def end def end def % Canvas damage interest createevent dup begin /Name 1 dict dup begin /Damaged { gsave BlanketCanvas setcanvas damagepath clipcanvas /paint Animation send newpath clipcanvas grestore } def end def /Canvas BlanketCanvas def end expressinterest % It is important to understand that this is THE HARD WAY to get keyboard % input and it is done this way solely to subvert the focus manager. % Normally, you would want to cooperate with the focus manager and use % addkbdinterests (which is MUCH simpler). /QueryInterests [ createevent dup begin /Priority 20 def /Name ascii_keymap def /Action 2 dict dup begin /DownTransition { dup /Name get dup 32 ge 1 index 127 lt and { % printable ASCII dup AddPW /paint QueryMessage send } if dup 8 eq 1 index 127 eq or { % BS or DEL DelPW /paint QueryMessage send } if dup 24 eq 1 index 21 eq or { % ^X or ^U ClearPW /paint QueryMessage send } if dup 3 eq { % ^C /Lock newState } if dup 10 eq 1 index 13 eq or { % CR or LF /Check newState { UserID Password ClearPW CheckPW { % worked null (Bad Password) ifelse } (Check Failed) ifelse CheckInterest createevent copy begin /Name /PWresult def /Action exch def currentdict end sendevent } fork pop } if pop } def end def /Exclusivity true def end createevent dup begin % Handle shifts here % priority below key processing /Priority 19 def /Name 20 dict dup begin % reverse engineering at its worst... keyboard_positions { % forall dup 0 get type /arraytype ne { [ exch ] } if % Name [ [key class] [key class] ... ] { % forall aload pop /shift_key ne { pop } { % Name key [ /dup cvx UI_private /begin cvx 5 index /do_shift_key cvx /end cvx ] cvx % Name key { dup D begin Name do_shift_key end } def % in /Name entry of this this interest } ifelse } forall pop } forall end def /Exclusivity true def end createevent dup begin % absorb all other KB & mouse clicks % priority below shift processing /Priority 18 def /Exclusivity true def /Action 1 dict dup begin /DownTransition { dup /Name get type /integertype ne { % let mouse clicks fall through dup redistributeevent } if } def end def end ] def /CheckInterest createevent dup begin /Name 1 dict dup begin /PWresult { dup /Action get dup null eq { % OK pop /Sleep } { /setmessage RaspberryMessage send /Raspberry } ifelse newState } def end def /Canvas /Canvas QueryMessage send def % avoid fraud! end def /Sleep newState currentdict /SBInitialize undef % poof! } def /ScreenBlank { SBInitialize % express interests, etc. { % Event processing loop: awaitevent dup type /arraytype eq { /exec load forall } if (>> Event % % % -> %\n) exch [ exch begin Name Action Canvas end State ] conprint } loop } def % kill our illustrious predecessors createevent dup begin /Name /BlankScreen def /Action /Destroy def end sendevent % bind specified F-keys /BlankFKey where { pop BlankFKey { createevent dup begin /Name /BlankScreen def /Action /Blank def end sendevent } bindkey } if /LockFKey where { pop LockFKey { createevent dup begin /Name /BlankScreen def /Action /Lock def end sendevent } bindkey } if % let the dust settle before we enter the fray! pause pause BlankTime 0 ne { { newprocessgroup ScreenBlank } fork pop } if { begin } pop end grestore % do it this way to fool formatters! From don Fri Sep 29 18:44:32 1989 Date: Fri, 29 Sep 89 18:44:32 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: XNeWs as a Postscript -> Raster filter? From: mstan!jordan@uunet.uu.net (Jordan Hayes) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Ken Mandelberg writes: Is it possible to use xnews as a postscript -> raster file filter, to drive dot matrix printers? A new application that comes with xnews is called pageview. It is a postscript previewer that can optionally create raster output snapshots of a page. I presume you could do it this way ... Do you have a filter for, say, and Epson or an ImageWriter to print raster files? /jordan From don Sat Sep 30 02:25:50 1989 Date: Sat, 30 Sep 89 02:25:50 -0400 To: NeWS-makers@brillig.umd.edu Subject: Final (Adjusted) Total for comp.object (884-21) From: sei!ajpo!eberard@PT.CS.CMU.EDU (Edward Berard) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) The final (adjusted) total for comp.object is 884 "yes" to 21 "no" votes. Stephen J. Friedl pointed out a "yes" vote that was counted twice: > eiffel!Athens!nosmo@uunet.UU.NET Vincent Kraemer > eiffel!nosmo@uunet.UU.NET Vincent Kraemer Robert Stanley sent me the following address corrections: > Although these are not adjustments to the tally, the following e-mail > addresses are all invalid (we have a serious local problem with a > semi-smart mailer and a heavily revised local domain): > > donw@cognos.cognos Don Walker > ^^^^^^^^^^^^^ = cognos.uucp > garym@ulysses.cognos Gary Murphy > ^^^^^^^^^^^^^^ = cognos.uucp > kevinf@spocksbrain.cognos ? > ^^^^^^^^^^^^^^^^^^ = cognos.uucp ^ = Kevin Ferguson > larryw@cognos.cognos Larry Williams > ^^^^^^^^^^^^^ = cognos.uucp > roberts@sunray.UUCP Robert Stanley > ^^^^^^^^^^^ = cognos.uucp > > The userid "kevinf" is Kevin Ferguson. All five userids should be recorded > as cognos.uucp which is the only hostname recorded outside our local domain. > The internet e-mail path is userid%cognos.uucp@uunet.uu.net. If you don't > need this information, just junk it. A few people wrote to inform me of their reactions to the vote, e.g., "wow, what a large voter turnout." Ten (10) additional "yes" votes arrived after the voting closed. Finally, no one informed me of any unrecorded or lost "no" votes. Therefore, comp.object has passed all requirements for becoming a new, and legitimate newsgroup. Thanks to all who participated in the discussions, and in the vote. -- Ed Berard (301) 353-9652 P.S.: See you at OOPSLA! From don Thu Oct 5 21:13:21 1989 Date: Thu, 5 Oct 89 21:13:21 -0400 To: NeWS-makers@brillig.umd.edu Subject: NSE? From: Ralph Freese Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) The Sun Technology magizine said that there would be a special toolkit for PostScript programers. What is the status of that? From don Thu Oct 5 21:15:43 1989 Date: Thu, 5 Oct 89 21:15:43 -0400 To: NeWS-makers@brillig.umd.edu Subject: GUIs for Unix systems (was Re: Voice Mail on Amiga) From: oli-stl!asylum!langz@decwrl.dec.com (Lang Zerner) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <17939@pasteur.Berkeley.EDU> navas@cory.Berkeley.EDU.UUCP (David C. Navas) writes: >In article <1989Oct3.152529.17423@rpi.edu> kudla@pawl.rpi.edu (Robert J. Kudla) writes: >> >>In kim@watsup.waterloo.edu (T. Kim Nguyen) writes: >> >>Nguyen> Nguyen> When did you last see a graphics/mouse-based >>Nguyen> interface for a Unix Nguyen> workstation? >>A SUN 3/50 running Xwindows. Other machines in the lab were running >>NeWS and the Sun proprietary environment. >Woah, hang on there. I think we're referring to two different and distinct >types of 'user-interface.' >When the question is asked -- 'When did you last see a [GUI] for Unix', >the question should have been posed as 'When did you last see a [GUI]Bench for >Unix'. That is, X-Windows IS a GUI, but it has nothng to do (or at least very >little to do) with disk access. All of that garbage is still type-and- >backspace...:-) 'Tis Unfortunate. > >Unless X has something that Berkeley hasn't put on the Suns... The OpenWindows interface for the Sun X/NeWS server includes fairly direct `drag-and-drop' file access and manipulation. An application called filemgr gives you the icon-based file browser (you can also get a one-file-per-line listing, just like w/ the Mac or NeXT). You can drag icons out of the file manager window and put them onto the root window/desktop. You can even -- get this -- drag a text file icon onto a window (or ionified window) awaiting text input to simulate typing the contents of the file into that window. Then there is the `usual' cut, copy and paste from window to window -- you can use a cut buffer or visually drag your selection from one window to another. I have to admit that while I was working at Projet Athena, I thought the NeWS server was an unwieldly hack (yes, even compared to MIT X), but now that I've had a chance to play with OpenWindows on NeWS, I have to change my tune. This has little to do with voice mail or the Amiga. Followups directed to comp.windows.news. -- Be seeing you... --Lang Zerner langz@asylum.sf.ca.us UUCP:bionet!asylum!langz ARPA:langz@athena.mit.edu "...and every morning we had to go and LICK the road clean with our TONGUES!" From don Sat Oct 7 21:43:54 1989 Date: Sat, 7 Oct 89 21:43:54 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: GUIs for Unix systems (was Re: Voice Mail on Amiga) From: texbell!sugar!peter@rutgers.edu (Peter da Silva) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <6390@asylum.SF.CA.US>, langz@asylum.SF.CA.US (Lang Zerner) writes: > The OpenWindows interface for the Sun X/NeWS server includes fairly direct > `drag-and-drop' file access and manipulation. All right! It only took what, 10 years, before someone took something of substance from the Xerox Star instead of just looknfeel. -- Peter "Have you hugged your wolf today" da Silva `-_-' ...texbell!sugar!peter, or peter@sugar.hackercorp.com 'U` ``Back off dude! I'm a topologist!'' -- Andrew Molitor From don Sat Oct 7 21:44:33 1989 Date: Sat, 7 Oct 89 21:44:33 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: NSE? From: Isaac Salzman Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) >The Sun Technology magizine said that there would be a >special toolkit for PostScript programers. What is the status of that? well, first off i think you mean NDE: "NeWS Development Environment". NSE is "Network Software Environment" and is a CASE (computer aided software engineering) tool which is used for doing configuration management and CASE applications integration, etc. (a very poor description, but it'll have to do). NDE was actually renamed to the NeWS Toolkit and it is being destributed with OpenWindows (aka X11/NeWS). it is the standard interface for developing NeWS applications under X11/NeWS. it's a big step up from the liteui (or whatever it was called) stuff and it implements the OPEN LOOK UI. it's a postscript development environment as the liteui stuff was.... -- * Isaac J. Salzman ---- * The RAND Corporation - Information Sciences Dept. /o o/ / * 1700 Main St., PO Box 2138, Santa Monica, CA 90406-2138 | v | | * AT&T : +1 213-393-0411 x6421 or x7923 (ISL lab) _| |_/ * Internet : salzman@rand.org / | | * UUCP : !uunet!rand.org!salzman | | | * CompuServe: 76167,1046 From don Sat Oct 7 21:49:15 1989 Date: Sat, 7 Oct 89 21:49:15 -0400 To: NeWS-makers@brillig.umd.edu Subject: HyperNeWS Announcement From: mcsun!ukc!strath-cs!turing!dug@uunet.uu.net (Dug Scoular) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Hello world, Here is the latest blurb on HyperNeWS. I will be sending out the new versions of GoodNeWS and HyperNeWS to those distribution sites that I originally sent GoodNeWS 1.2 to, all I'm waiting for is the green light from Arthur van Hoff (the author) who is in turn waiting to do his final testing on the FCS release version of X11/NeWS. Doug Scoular "The big print giveth and the Systems Administrator small print taketh away" E-mail: dug@turing.ac.uk Tel: +44 41 552 6400 Postal: The Turing Institue George House 36 N. Hanover Street Glasgow G1 2AD Scotland UK. HyperNeWS update ================ We would like to apologise to everyone who has been waiting for HyperNeWS over the past few months. This note will explain what HyperNeWS is, why we have delayed distribution, and what we will be doing with it in the future. What is HyperNeWS? ================== HyperNeWS is a powerful tool for designing user interfaces, developed at the Turing Institute, and extensively used by us over the past eighteen months. It is somehat like Hypercard in its screen organisation, with windows (or stacks) stacks composed of backgrounds and cards. Each card/background/stack can contain a variety of objects, such as buttons, sliders, dials etc. The system is message-based, with a different scheme of message passing to that used by TNT or Lite. The implementation language is PostScript. Objects scripts are written in PostScript, and HyperNeWS can be used for interesting applications without involving anything but the server. Most people prefer C/Prolog/Lisp to PostScript, and unlike HyperCard HyperNeWS can communicate with external clients. The C interface is type-secure and allows each stack to communicate with a separate client. Interfaces to other languages, such as Prolog, are built on top of the C interface. Here are some of the features we think makes HyperNeWS nice. 1) SIMPLE. For standard applications (i.e. panels) it is not necessary to program. Interfaces can be designed by drawing, cutting and pasting. For example the shape and background drawing of a stack is designed by using the GoodNeWS drawing tool, as are the shape of some buttons. 2) RE-USABLE. Specialised objects can be designed and shared by other users via a NewObjects stack. Each site, given one PostScript "expert" can tailor the types of object they use very easily. 3) GOOD I/O. The C interface is very straightforward. 4) ERROR HANDLINE. You can trace all the messages sent between objects in the system, and message passing is secure. All errors are trapped and displayed with their context. The system (usually) can recover from errors. Essential for PostScript novices (and everyone else). 5) POSTSCRIPT. A snapshot of any system objects can be taken at any time, and the resulting PostScript code saved as a drawing (in EPSF if you want) to be transferred elsewhere. This makes documentation very much easier. There is also a facility to import EPSF files as draw objects, if you must have precision. Why are we waiting? =================== We intended to distribute HyperNeWS this summer, but found that it didn't run under NeWS1.1/FCS -- we had been using an earlier beta release. There was no way to fix this easily as the crashes seemed to have something to do with the garbage collection/reference counts. HyperNeWS has now been ported to X/NeWS beta2, where some major bugs remain, but we have been able to write round them enough to make the system reliable. HyperNeWS runs on both SPARC and 680X0 under X/NeWS. The major problem is that thick lines can't be displayed without crashing the X/NeWS server (!). At the moment we are waiting to receive X/NeWS/FCS. We intend to port HyperNeWS to this system. We assume at this stage that if there are any major bugs SUN will do something (triumph of hope...) to fix them. Our problem has been that HyperNeWS is a more sophisticated NeWS application than most, so tends to break NeWS rather easily. All this means that we should be releasing HyperNeWS for SPARC within 60 days. The 680X0 release should be identical and 30--60 days later. What will you get? ================= HyperNeWS and GoodNeWS, plus on-line manuals and several demo programs to illustrate the PostScript, C and Prolog layers to the system. In our interests as well as yours we hope to set up a bug reporting system via Email, and periodic updates. What about the future? ====================== HyperNeWS is now stable at the user level. As more experience is gained by more people we expect that the programming interface will be revised to increase power and consistency. We hope that people will produce useful tools. Stacks are stored in Ascii (i.e. PostScript) format, so people should be able to create and distribute interesting new objects and programs. >From our experience with HyperNeWS it is much easier for "non-programmers' to use than TNT or associated toolkits, largely because it is a stand-alone programming system. NOTE: Although we are distributing HyperNeWS freely, it is NOT in the public domain. It is available for Academic and Research use, but cannot be incorporated into products for further distribution without our express written permission. Cheap licencing arrangements are available for those who wish to use it in products. -- Tim Niblett E-mail: tim@uk.ac.turing Tel: 041 552 6400 Postal: The Turing Institue George House 36 N. Hanover Street Glasgow G1 2AD Scotland UK. From don Sun Oct 8 17:08:07 1989 Date: Sun, 8 Oct 89 17:08:07 -0400 To: NeWS-makers@brillig.umd.edu Subject: Ready made user interfaces From: cs.dal.ca!ug.cs.dal.ca!lalonde@uunet.uu.net (Paul Lalonde) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I'm working on a class project which involves setting up a calendar note-book. My group has decided to build a pretty front end on a workstation which supports NeWS. After a few days of manual reading I've found no mention of some sort of standardized user interface I can use. I'm looking for something that will support scroll bars (to build something simmilar to the MacIntosh's file picking windows, but not for files), pop up menus and a few buttons. Does anyone know where I can find such a critter? I could sit down and write a lot of Post Script code, but that would be painfull and time consuming. Thanks, Paul Paul A. Lalonde UUCP: ...{uunet|watmath}!dalcs!dalcsug!lalonde Phone: (902)423-4748 BITNET: 05LALOND@AC.DAL.CA "The only true law is that which leads to freedom" - Richard Bach, _Jonathan Livingston Seagull_ From don Tue Oct 10 04:21:34 1989 Date: Tue, 10 Oct 89 04:21:34 -0400 To: NeWS-makers@brillig.umd.edu Subject: NeWS implementations, anyone? From: eru!luth!sunic!dkuug!iesd!iesd!fischer@BLOOM-BEACON.MIT.EDU (Lars P. Fischer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) So, we did it. Developed a commercial application using NeWS, that is. Now, one of the promises of NeWS was that it would be easy to port to other hosts, UNIX or not. I have heard that NeWS exists for the Mac (grasshopper?) and that a port for OS/2 was in progress. I seem to remember seeing NeWS for other UNIX machines than Sun. I also remember having a list of NeWS implementations, but I'm afraid I've lost it, alas. Anyway, it was probably pretty much outdated by now. What I would like to know is this: How many ports of NeWS exists? Where do I get them? Any information would be appreciated. If *you* have ported/developed NeWS for some machine, please let me know. If you use NeWS on a machine other that a Sun, please tell me about your experiences. Please mail to me. I'll summarize to the net. Thanx, /Lars -- Copyright 1989 Lars Fischer; you can redistribute only if your recipients can. Lars Fischer, fischer@iesd.auc.dk, {...}!mcvax!iesd!fischer Department of Computer Science, University of Aalborg, DENMARK. "That makes 100 errors; please try again" --TeX From don Tue Oct 10 04:22:08 1989 Date: Tue, 10 Oct 89 04:22:08 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: NSE? From: eru!luth!sunic!dkuug!iesd!iesd!fischer@bloom-beacon.mit.edu (Lars P. Fischer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <8910060232.AA16560@iris.rand.org> salzman%iris@RAND.ORG (Isaac Salzman) writes: >NDE was actually renamed to the NeWS Toolkit and it is being destributed >with OpenWindows (aka X11/NeWS). it is the standard interface for developing >NeWS applications under X11/NeWS. it's a big step up from the liteui (or >whatever it was called) stuff and it implements the OPEN LOOK UI. it's a >postscript development environment as the liteui stuff was.... It was my understanding that NDE was not part of OpenWindows and that it was not ready yet. If that has changed, it sure sounds good. I would be happy to hear of experiences with NDE/NeWS Toolkit. What features does it have? How does it relate to liteui? How much work to upgrade my liteui applications to work with NDE (hey, why did the name change? NDE is sure easier to type, and NT could be anything :-). Are there any interactive tools? /Lars -- Copyright 1989 Lars Fischer; you can redistribute only if your recipients can. Lars Fischer, fischer@iesd.auc.dk, {...}!mcvax!iesd!fischer Department of Computer Science, University of Aalborg, DENMARK. "That makes 100 errors; please try again" --TeX From don Tue Oct 10 04:22:17 1989 Date: Tue, 10 Oct 89 04:22:17 -0400 To: NeWS-makers@brillig.umd.edu Subject: The NeWS book ?? From: brunix!phoenix.princeton.edu!eho@uunet.uu.net (Eric Ho) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Has anyone seen Jim Gosling et al's "The NeWS book" yet ? I just wonder what you guys think of it (if you've it already) in comparison with whatever manuals came from Sun. -- Eric Ho Princeton University eho@confidence.princeton.edu From don Tue Oct 10 04:22:29 1989 Date: Tue, 10 Oct 89 04:22:29 -0400 To: NeWS-makers@brillig.umd.edu Subject: comments on X11/NeWS so far ?? From: brunix!phoenix.princeton.edu!eho@uunet.uu.net (Eric Ho) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) For those of you who had been using X11/NeWS beta (or even FCS), I wonder what are your impressions so far -- mainly in terms of reliability, speed & bloatness (say from 8 meg Sun-3/50's & 3/75's to 16 meg Sparc boxes). Also, I heard that X11/NeWS (aka OpenWindows + XView) will come with SunOS 4.1. Is that true ? -- Eric Ho Princeton University eho@confidence.princeton.edu From don Tue Oct 10 04:23:29 1989 Date: Tue, 10 Oct 89 04:23:29 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: comments on X11/NeWS so far ?? From: schwartz@psuvax1.cs.psu.edu (Scott Schwartz) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article Eric Ho writes: | For those of you who had been using X11/NeWS beta (or even FCS), I wonder what | are your impressions so far -- mainly in terms of reliability, speed & | bloatness (say from 8 meg Sun-3/50's & 3/75's to 16 meg Sparc boxes). Speed: not bad. It seems a little faster than NeWS 1.1, but that may simply be that I'm running it on 3/60's rather than 3/160's. This is a highly subjective impression, though, so I may be way off base. Startup is pretty slow, in general. Clipping seems faster (i.e. partly obscured windows are smoother.) Implementing something like "undump" might help a lot. The "spinning earth" demo still kills the server, even on a Sun4/280. Bloatness: Sigh. It is fine on diskless 16M 3/60's. 4M 3/50's don't stand a chance. I'm talking 15 minutes to startup and a couple minutes to handle a mouse event. Bad locality of reference, I guess. Running with X only or NeWS only may help; I haven't tried it. Reliability: Some of the X stuff needs fixing up. I've had reports of problems with xhosts from some users. Some NeWS applications die mysteriously. For example, pageview chokes on large documents (may be running out of /tmp space; have to look into that; better diagnostics would be nice), and seems to have trouble with the output of some tex to ps translators. General: Two people I showed xnews to instantly converted to it (from mit X). The problems they run into are outweighed by the advantages of a merged server. Needed: preemptive scheduling in the server. Some server operations take a reletively long time, during which your mouse becomes unresponsive. Users become unhappy. -- Scott Schwartz Now back to our regularly scheduled programming.... From don Wed Oct 11 01:21:09 1989 Date: Wed, 11 Oct 89 01:21:09 -0400 To: NeWS-makers@brillig.umd.edu Subject: A simple "graph" item From: spectral!sjs@bellcore.com (Stan Switzer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Here's a simple "graph" item. Just stuff it into "psh." There's a test routine at the end. Stan Switzer sjs@bellcore.com ------------------- % % GraphItem: a simple "graph" item % % Copyright (C) 1989 by Stan Switzer. All rights reserved. % This program is provided for unrestricted use, provided that this % copyright message is preserved. There is no warranty, and no author % or distributer accepts responsibility for any damage caused by this % program. % % S. J. Switzer 8/14/89 sjs@bellcore.com % GraphItem /GraphItem LabeledItem dictbegin /MinX 0 def /MaxX 0 def /Nticks 0 def /Xlabels 0 def /MinY 0 def /MaxY 0 def /Yticks 0 def /Ylabels 0 def /GraphWidth 0 def /GraphHeight 0 def /GraphX 0 def /GraphY 0 def /GraphD 0 def /dD 0 def /dL 0 def /TrackIndex 0 def /Overlay null def /Array null def dictend classbegin % minx maxx xticks xlabels % miny maxy yticks ylabels % label [ initial-values ] loc notifyproc parentcanvas => instance /new { /new super send begin /Array ItemObject def /Ylabels exch def /Yticks exch def /MaxY exch def /MinY exch def /Xlabels exch def /Xticks exch def /MaxX exch def /MinX exch def currentdict end } def /Xoff 23 def /Yoff 14 def /Tick 3 def /reshape { % x y w h /ItemHeight exch def /ItemWidth exch def LabelSize /LabelHeight exch def /LabelWidth exch def /ObjectWidth ItemWidth def /ObjectHeight ItemHeight def AdjustItemSize /ObjectWidth ItemWidth 2 ItemBorder mul sub def ObjectLoc /Right eq ObjectLoc /Left eq or { /ObjectWidth ObjectWidth LabelWidth sub ItemGap sub def } if CalcObj&LabelXY /GraphWidth ObjectWidth Xoff sub def /GraphHeight ObjectHeight Yoff sub def /GraphX ObjectX Xoff add def /GraphY ObjectY Yoff add def /GraphD GraphWidth Array length 1 sub 1 max div def ItemWidth ItemHeight /reshape super send } def /LabFont /Times-Roman findfont 10 scalefont def /PaintItem { /PaintItem super send ItemBorderColor setcolor LabFont setfont /dD GraphHeight currentfont fontascent sub Ylabels 1 add div def /dL MaxY MinY sub Ylabels 1 add div def 0 1 Ylabels 1 add { ObjectX 2 add GraphY 2 index dD mul add cvi moveto dL mul MinY add (xxxx) cvs show } for /dD GraphWidth MaxX (xxxx) cvs stringwidth pop sub Xlabels 1 add div def /dL MaxX MinX sub Xlabels 1 add div def 0 1 Xlabels 1 add { GraphX 1 index dD mul add cvi ObjectY moveto dL mul MinX add (xxxx) cvs show } for /dD GraphHeight Yticks 1 add div def 0 1 Yticks 1 add { GraphX exch GraphY exch dD mul add cvi moveto Tick neg 0 rlineto stroke } for /dD GraphWidth Xticks 1 add div def 0 1 Xticks 1 add { GraphX exch dD mul add cvi GraphY moveto 0 Tick neg rlineto stroke } for PaintGraph } def /PaintGraph { gsave ItemFillColor setcolor GraphX GraphY GraphWidth GraphHeight rectpath fill grestore GraphX GraphY GraphWidth GraphHeight rectpath stroke % 2 setlinewidth 1 setlinequality 0 1 Array length 1 sub { dup IndexToX Array 2 index get ValToY 2 index 0 eq { moveto } { 2 copy lineto stroke moveto } ifelse pop } for } def /IndexToX { GraphX exch GraphD mul add cvi } def /ValToY { MinY sub MaxY MinY sub div GraphHeight mul GraphY add cvi } def /DragIndex? false def /ClientDown { EventMgrDict /CurrentTextItem known { CurrentTextItem null ne { /stoptext CurrentTextItem /ItemText get send null SetCurrentTextItem } if } if CurrentEvent /XLocation get GraphX sub GraphD .5 mul add GraphD div cvi 0 max Array length 1 sub min /TrackIndex exch def Overlay null eq { /Overlay currentcanvas createoverlay store } if ClientDrag } def /ClientDrag { Overlay setcanvas erasepage DragIndex? { % Thanks, Don! TrackIndex % old CurrentEvent /XLocation get GraphX sub GraphD .5 mul add % old x GraphD div cvi 0 max Array length 1 sub min % old new 2 copy eq { pop pop } { dup 3 1 roll % new old new 2 copy sub 0 lt 1 -1 ifelse exch { % new first step last Array exch EventY put } for % new ItemBegin PaintGraph ItemEnd /TrackIndex exch def % } ifelse } if TrackIndex 0 ne { TrackIndex 1 sub IndexToX Array TrackIndex 1 sub get ValToY moveto } if TrackIndex IndexToX CurrentEvent /YLocation get GraphY max GraphY GraphHeight add min % 2 copy TrackIndex 0 ne { lineto } { moveto } ifelse TrackIndex Array length 1 sub lt { TrackIndex 1 add IndexToX Array TrackIndex 1 add get ValToY lineto } if stroke % LabFont setfont moveto EventY (xxxx) cvs cshow } def /ClientUp { Overlay setcanvas erasepage Array TrackIndex EventY put ItemBegin PaintGraph ItemEnd NotifyUser StopItem } def /EventY { CurrentEvent /YLocation get GraphY sub GraphHeight div 0 max 1 min MaxY MinY sub mul MinY add } def classend def /TestGraph { /win currentcanvas /new DefaultWindow send def { 10 10 200 150 reshape /PaintClient { Items paintitems } def /FrameLabel ( GraphItem Demo ) def ClientCanvas ClientFillColor } win send /fillcol exch def /can exch def /Items dictbegin /Graph 0 256 3 1 0 256 3 1 (Graph) [ 0 64 256 {} for ] /Top { } can 120 60 /new GraphItem send 10 10 /move 3 index send def dictend def Items { /ItemFillColor fillcol put pop } forall /ItemMgr Items forkitems def /map win send } def TestGraph From don Mon Oct 16 23:27:03 1989 Date: Mon, 16 Oct 89 23:27:03 -0400 To: NeWS-makers@brillig.umd.edu Subject: NeWS Pgming Environment? From: njin!jvnca!njitgw!mars.njit.edu!frank5@rutgers.edu (Frank D. Greco CIS Adj. Prof.) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) When interfacing directly with the xnews (or NeWS) server by writing PostScript (NeWS) code, there is the small (ha!) possibility of sending improper sequences of code that hose the server (known in the industry as "boo boos"). Unfortunately, the only way out (that I know of) is to use someone else's workstation to rlogin to yours and kill the server. So, is it possible to run NeWS in a window (ie, recursively)? That way I can debug my NeWS programs in a reasonably safe manner (ie, go to another window and kill the second NeWS server). I saw the LaserTalk PostScript Environment product (by Emerald City Software...I think) advertised for the NeXT box (and the Mac), maybe someone out there in netland knows of a similar environment for NeWS? Frank BTW, some time ago, someone posted a dictionary browser for NeWS. Does anyone know where or who I can contact for this thing? Thanks all From don Mon Oct 16 23:30:12 1989 Date: Mon, 16 Oct 89 23:30:12 -0400 To: NeWS-makers@brillig.umd.edu Subject: docs on tNt (was Re: NSE?) From: kimba!hvr@sun.com (Heather Rose) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article fischer@iesd.auc.dk (Lars P. Fischer) writes: >In article <8910060232.AA16560@iris.rand.org> salzman%iris@RAND.ORG (Isaac Salzman) writes: >>NDE was actually renamed to the NeWS Toolkit and it is being destributed >>with OpenWindows (aka X11/NeWS). it is the standard interface for developing >>NeWS applications under X11/NeWS. it's a big step up from the liteui (or >>whatever it was called) stuff and it implements the OPEN LOOK UI. it's a >>postscript development environment as the liteui stuff was.... > >It was my understanding that NDE was not part of OpenWindows and that >it was not ready yet. If that has changed, it sure sounds good. Perhaps this will clear things up a bit... from the OpenWindows 1.0 pre-FCS RTF section 6: The NeWS Toolkit #BEGIN This release of Open Windows includes a "preliminary" version of new toolkit for NeWS programmers, a flexible class-based system called "The NeWS Toolkit (tNt)". This toolkit is still in development, and Sun cannot provide any support for the current version. Neither your Answer Center nor the technical support engineers are equipped to provide assistance with this software. It is included in this release of Open Windows for two reasons: * The default X11/NeWS window manager, pswm(1), uses it. (This window manager is fully supported, and bugs found in it which are traced to tNt will be fixed.) * We would like to encourage feedback from those adventurous NeWS programmers who would like to get an early look at our replacement for the Lite toolkit. Receiving Documentation: The Open Windows documentation does not include any information about the NeWS Toolkit. People interested in experimenting with this prelimary version can receive documentation in two ways: * By sending electronic mail to: tnt-request@sun.com * Or, by sending US mail to: The NeWS Toolkit Manager Sun Microsystems Inc. 2550 Garcia Ave. Mountain View, CA 94043 Mail Stop 14-40 U.S.A. The NeWS archive server contains tutorial documentation and demonstration code for this toolkit. You can contact this server by sending a mail item with subject "help" or "index" to: news-archive@sun.com To program in tNt you will also need to refer to the NeWS 2.0 Programmer's Guide which is included in this OpenWindows documentation. Where Is It? The PostScript-based components of tNt can be found in the $OPENWINHOME/etc/NeWS/NDE. A library archive of the C-based portion, called the "Wire Service", lives in $OPENWINHOME/lib/libwire.a. Both portions are described in the documentation. Support and Feedback: Sun cannot offer any support at all for this preliminary version of the toolkit. However, we welcome design and interface suggestions and bug reports. These can be mailed to: tnt-feedback@sun.com. Please do not report bugs related to Open Look compliance. tNt is still some distance from being and Open Look-compliant toolkit. How Stable is it? Note well: The NeWS Toolkit is not yet a Sun product, and interfaces will continue to change until that time. The preface to the preliminary tNt reference manual lists those components that are unlikely to change significantly in the future. #END I sent email to the tnt-request alias, here is what I got back: #BEGIN >From tnt-request@sun.com Tue Oct 10 18:23:11 1989 To: hvr@sun Subject: tNt Request for Documentation In-Reply-To: Message from Heather Rose Your request for NeWS Toolkit documentation has been received. Please allow 4 to 6 weeks for this material to arrive at your address. Other tutorial documentation and demonstration code is available on the NeWS archive server. You can contact this server by sending a mail item with subject help or index to news-archive@sun.com. If you would like to provide comments or feedback please address your email to tnt-feedback@sun.com. Please remember this is an experimental version of the toolkit. Sun cannot provide any support for the current version. Neither your Answer Center nor the technical support engineers are equipped to provide assistance with this software. Sun Microsystems makes no commitment to deliver the NeWS Toolkit as a product in the future. Thank you for you interest in the NeWS Toolkit. The NeWS Toolkit Manager. #END From don Mon Oct 16 23:31:07 1989 Date: Mon, 16 Oct 89 23:31:07 -0400 To: NeWS-makers@brillig.umd.edu Subject: News=>X11/News From: china.uu.net!dan@uunet.uu.net (Dan Williams) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I will soon be taking a NeWS application built a year ago and trying to port it into X11/NeWS. We don't have the X11/NeWS product in house yet and I was wondering about experiences that others have had with this. How much has NeWS changed and what is the quickest way to get our application up? -- | Dan Williams (uunet!china!dan) | FRP: It's not just a game, | | MCDONNELL DOUGLAS | it's an adventure! | | Denver CO | "Of course thats just my opinion" | From don Mon Oct 16 23:33:04 1989 Date: Mon, 16 Oct 89 23:33:04 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: The NeWS book ?? From: portal!cup.portal.com!Andre_Louis_Marquis@uunet.uu.net Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) If you've been following the development of NeWS and have read the Sun document ation, I don't think you'll get much out of the book. It has a chapter on window syste history and a chapter on porting NeWS. That's about all there is that's extra You'll even recognize many of the screens. Here is a quote from the preface: "This book is an introduction to NeWS: the Networked, Extensible, Window System from Sun Microsystems. It is oriented towards people who have a basic knowledge of programming and window systems who would like to understand more about windowing systems in general and NeWS in particular. A significant portion of the book is devoted to an overview and history of window sytems. While there is enough detail here to allow readers to write simple NeWS applications, the NeWS Reference Manual [SUN87a] should be consulted for a more complete treatment." Novices and the less experienced should find the book illuminating. Andre Marquis From don Tue Oct 17 02:50:13 1989 Date: Tue, 17 Oct 89 02:50:13 -0400 To: NeWS-makers@brillig.umd.edu Subject: Simple Query From: bucasb!mike@CS.BU.EDU (Michael Cohen) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Does anybody know where I can get a clear document describing the NeWS window system. I've access to an Iris-240/GTX running NeWS and I must say that their documentation is near incomprehensible. We do have adequate postscript documentation though. -mike -- Michael Cohen ---- Center for Adaptive Systems Boston University (617-353-7857) Email: mike@bucasb.bu.edu Smail: Michael Cohen Center for Adaptive System Department of Mathematics, Boston University 111 Cummington Street Boston, Mass 02215 From don Tue Oct 17 02:50:31 1989 Date: Tue, 17 Oct 89 02:50:31 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: pyrnj!esquire!yost@rutgers.edu (David A. Yost) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In answer to why you can't implement double-click in X: In article <1922@bacchus.dec.com> asente@decwrl.dec.com (Paul Asente) writes: >There really is a reason for it. X is network-based. There's no way for >an application to know, upon receiving one button click, whether there's >another one coming along. [and how long should it wait for one?] Thanks for explaining to us how the implementation stands in the way of a robust implementation of a desired policy. (Remember the X motto: implementation, no policy). Of course, users are best served when one starts from a specific user-centered design and then derives the appropriate implementation. Too bad UNIX and X are not from this culture. Isn't double-click commonly accepted enough that X servers should be able to reliably implement it? (i.e. after one click, if another click comes in before the timeout, send a double click event, else when the timeout expires, send a single click event.) What if one wanted to hack the drivers on a Mac so you could use it from an X terminal? "Sorry, no double click." Would someone from the NeWS camp care to add to this? Can you download code to the server to do this so you don't have to beg the protocol designers for the capability? What are some other examples of reasons why you need to be able to download input code? --dave yost From don Tue Oct 17 02:50:42 1989 Date: Tue, 17 Oct 89 02:50:42 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: haffley@purdue.edu (P Michael &) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) If one wanted to use double clicks in X, then one could simply look at the timestamp of the events. By flushing the event buffer after the timeout and then by searching the event list of keypress events, one could determine if a double click has occurred and then do the appropriate thing. It is not restricting double clicks, it just takes some work (and time) to use it. _ __ _ _ _ _ _ , _ ' ) ) ' ) ) ) / // ' ) / /) /) // /--' / / / o _. /_ __. _ // /--/ __. // // // _ __ , / o / ' (_<_(__/ /_(_/|_ /> / X11/News From: fajita!jalapeno!doc@suntan.West.Sun.COM (Tom Dockery) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Dan Williams writes: > > > I will soon be taking a NeWS application built a year ago and >trying to port it into X11/NeWS. We don't have the X11/NeWS product in >house yet and I was wondering about experiences that others have had with >this. How much has NeWS changed and what is the quickest way to get our >application up? > > We have done that very thing, and found not *too* many problems. Because X/NeWS still includes the lite package, as well as the new tNt package, existing NeWS apps may run with no problem. Then again, because there are some differences in the PostScript implementation (especially dealing with paths), and some magic dictionaries have changed, and the fonts are different, and so on, the older stuff may break, render oddly, or behave somewhat weirdly. We have done that very thing, and found not *too* many problems. Because X/NeWS still includes the lite package, as well as the new tNt package, existing NeWS apps may run with no problem. Then again, because there are some differences in the PostScript implementation (especially dealing with paths), and some magic dictionaries have changed, and the fonts are different, and so on, the older stuff may break, render oddly, or behave somewhat weirdly. Our stuff, ClientFocus(tm), now runs reasonably well in both environments, with only an occasional check on which server we're using. Most of our porting problems had to to with path handling when rendering. XNeWS is actually closer to Adobe's implementation of PS, so fixing those problems also cured some bugs we had in printing. The applications that seem to break easiest are things that rely on intrinsic dictionary structures and hacks; Class browsers, color editors, terminal emulators, and such. If you use the lite package, your stuff won't conform to OpenLook specs (if that concerns you). We haven't really used tNt, but it should open an OpenLook look (sorry, I couldn't resist :={) ). The summary of all this is, the quickest way to get your application up is to simply try it under XNeWS; it may work immediately with no, or only cosmetic, problems. If you want OpenLook compliance and the multi- inheritance model that tNt gives you, though, you have quite a bit more work ahead of you. One additional note: XNeWS has gone a *long* way toward curing the server growth problems of NeWS. It even includes tools that aid in the location of problem areas in your NeWS code memory management. And the new "cleanoutdict" function is a big aid there, too. Good Luck. Tom Dockery Market Focus Technologies, Inc. From don Thu Oct 19 00:31:04 1989 Date: Thu, 19 Oct 89 00:31:04 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: NeWS => X11/NeWS From: Rafael Bracho Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I just finished porting a fairly complex NeWS application (close to 75K lines of PostScript) to the merged server, taking me about two weeks of work. These are a few of the issues I found: 1. Input has changed somewhat; in particular, the function keys no longer work with the litewindow toolkit -- we implement a window system that is a descendant of litewindows. 2. The focus (re: the Extended Input System chapter of NeWS 1.1) is no longer and array of canvas and process but rather just a canvas. Some of our code broke because of that. 3. The merged server has the concept of "packed arrays". The command setpacking may be used so the server packs all executable arrays. Unfortunately, the buildimage operator doesn't work with packed arrays. 4. X11/NeWS follows the red book a lot more closely so there were a number of bugs we uncover in our code. For example, erasepage now blanks out the whole canvas, irrespectively of any clipping path that may be in effect. 5. A host of bugs were related to the fact that canvases are, internally, kept in the X11 coordinate system (upper-left corner is the origin) and not in the PostScript one (the origin being the lower-left one). Normally this shouldn't affect anyone since the defaultmatrix is set properly everytime the canvas is reshaped -- previously it was always the identity matrix. In NeWS 1.0, however, the default matrix contained very small translation factors that would become significant with large scaling. We got in the habit of doing "matrix setmatrix" instead of "initmatrix" and in NeWS 1.1, these two were identical. This is obviously no longer the case. 6. Imagecanvas is much more consistent to the PostScript image operator. Under NeWS 1.1, to "imagecanvas" a regular canvas -- i.e., obtained via newcanvas -- the receiving canvas had to be scaled by the size of the source canvas; even though the source canvas' coordinate system was not the unit square. Doing this in X11/NeWS results in double scaling so you'll probably won't get anything on the screen -- the server refuses to "imagecanvas" anything that results in more than 32767 pixels in either dimension. Either make the source canvas be mapped to the unit square, or the receiving canvas have pixel units. 7. Readcanvas returns a canvas with its default coordinate system being the unit square (more consistent with buildimage, and better for imagecanvas, see above). Thus to "imagecanvas" it, one must scale the receiving canvas by the size of the rasterfile read -- this was also true in NeWS 1.1. Previously, however, one could "setcanvas" to the result of readcanvas knowing that the default matrix was in pixels (like a canvas obtained via newcanvas). In general the X11/NeWS server is much nicer than NeWS 1.1. There are a few rough edges, particularly with the CG6 (GX or LEGO) board, and I don't think performance is quite up to par with NeWS 1.1. In our case, we had some bound-checking code in our inner loops to avoid crashing the 1.1 server that is no longer needed so we don't really see *drawing* performance degradation. Interactions, particularly dragging, seem a bit slower, though. Rafael Bracho Schlumberger Austin Systems Center rxb@asc.slb.com From don Thu Oct 19 22:53:09 1989 Date: Thu, 19 Oct 89 22:53:09 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: More than one NeWS From: crdgw1!montnaro@uunet.uu.net (Skip Montanaro) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <126485@sun.Eng.Sun.COM> krempel@appserv.Sun.COM (Henry Krempel) writes: > From: frank5@mars.njit.edu (Frank D. Greco CIS Adj. Prof.) > So, is it possible to run NeWS in a window (ie, recursively)? You can run more than one window system, if you have multiple framebuffers, or a cgfour that you would like to use as more than one framebuffer. The complete instructions are in the xnews(1) man page. Under NeWS 1.1 I thought you could partition the physical display and only use part of it as the "screen" for NeWS. Does this capability still exist in X/NeWS? If so, you might be able to get away with splitting the screen into two (or more) pseudo-displays. If one hosed, you might be able to traipse (sp?) on back to the other to kill the hoser. -- Skip Montanaro (montanaro@crdgw1.ge.com) From don Thu Oct 19 22:53:20 1989 Date: Thu, 19 Oct 89 22:53:20 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: aardvark!john@bellcore.com (John Letourneau) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <6564@ficc.uu.net> peter@ficc.uu.net (Peter da Silva) writes: >In article <1490@esquire.UUCP> yost@esquire.UUCP (David A. Yost) writes: >> Isn't double-click commonly accepted enough >> that X servers should be able to reliably >> implement it? > >No. Double-click is a kludge foisted on the computing world by the >decision to put only one button on the Macintosh mouse. > >Of course, the X people didn't help this situation any by their >blind refusal to dictate policy. As a result the three mouse buttons >don't mean anything, and you have people wanting to double-click. Well, my $.02 as a NeWS user are like this...with a 3 button mouse, you have 3 choices of things->standard is i)selection ii)position iii)menu. Stan Switzer and I talked this one over and using the time element allowed us to include i-a)stretch! i-b)inverse! Basicly what Stan hacked up was to use the selection button to "canvas-to-top" on the border with a "quick-click", "canvas-to-bottom" on the border with a "double-quick-click" and "constrained/un-constrained-stretching" with "click-hold". The end result is we don't have to call up a menu or hit a function-key to do these things. Stan isn't ready to send this stuff out (if he ever will), but he and I are common friendly users of each others hacks, so don't bug him for the code! Sorry Stan, you were slightly out of touch when I responded to this! 8-) -_ .- _ * - ~ _______ "I feel the need... | John P. Letourneau . * = _ .~ _ / 9000 \___ the need for speed!!" | john@ctt.bellcore.com ~_ .~_ . = / Turbo \ | Bellcore ~. - _ = * - \-O------O----| | Piscataway, NJ. From don Fri Oct 20 03:39:30 1989 Date: Fri, 20 Oct 89 03:39:30 -0400 To: NeWS-makers@brillig.umd.edu Subject: More than one NeWS From: appserv!krempel@sun.com (Henry Krempel) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In response to: > From: frank5@mars.njit.edu (Frank D. Greco CIS Adj. Prof.) > Newsgroups: comp.windows.news > Subject: NeWS Pgming Environment? > Date: 5 Oct 89 16:54:06 GMT > Reply-To: frank5@mars.njit.edu (Frank D. Greco CIS Adj. Prof.) > Organization: New Jersey Institute of Technology > So, is it possible to run NeWS in a window (ie, recursively)? > That way I can debug my NeWS programs in a reasonably safe manner > (ie, go to anothe> r window and kill the second NeWS server). > I saw the LaserTalk PostScript Environment product (by Emerald City > Software...I think) advertised for the NeXT box (and the Mac), maybe someone > out there in netland knows of a similar environment for NeWS? You can run more than one window system, if you have multiple framebuffers, or a cgfour that you would like to use as more than one framebuffer. The complete instructions are in the xnews(1) man page. With this method, you can run one Sunview and one X11/NeWS, or 2 X11/NeWS's. Henry B. J. Krempel Sun Microsystems MS 16-08 2550 Garcia Avenue Mountain View, California 94043 From don Fri Oct 20 03:39:35 1989 Date: Fri, 20 Oct 89 03:39:35 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: ficc!peter@uunet.uu.net (Peter da Silva) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <1490@esquire.UUCP> yost@esquire.UUCP (David A. Yost) writes: > Isn't double-click commonly accepted enough > that X servers should be able to reliably > implement it? No. Double-click is a kludge foisted on the computing world by the decision to put only one button on the Macintosh mouse. Of course, the X people didn't help this situation any by their blind refusal to dictate policy. As a result the three mouse buttons don't mean anything, and you have people wanting to double-click. On the Amiga, the two buttons have a meaning: "select" and "menu". A third button, for "perform" would be nice, but the designers of the Amiga user interface fell in with the Mac fad and hid "perform" in "double- click-select". (that, and putting the ^&%^&%& menus at the top of the &^*&^* screen... another Macintosh kludge designed to avoid adding buttons) :-< -- Peter da Silva, *NIX support guy @ Ferranti International Controls Corporation. Biz: peter@ficc.uu.net, +1 713 274 5180. Fun: peter@sugar.hackercorp.com. `-_-' "That particular mistake will not be repeated. There are plenty of 'U` mistakes left that have not yet been used." -- Andy Tanenbaum (ast@cs.vu.nl) From don Fri Oct 20 03:39:50 1989 Date: Fri, 20 Oct 89 03:39:50 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: The NeWS book ?? From: rochester!crdgw1!crdgw1.ge.com!barnett@cu-arpa.cs.cornell.edu (Bruce Barnett) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article , doug@zodiac (Doug Morgan) writes: >The >one that strikes us hardest is NeWS's inability to support any high >performance frame buffer hardware (even a color lookup table) or to >quickly acquire image data. Well, to be fair, the book did mention X/NeWS, and stated that X/NeWS deserves it's own book. -- Bruce G. Barnett uunet!crdgw1!barnett From don Fri Oct 20 04:17:27 1989 Date: Fri, 20 Oct 89 04:17:27 -0400 To: NeWS-makers@brillig.umd.edu Subject: Lite application compatibility in Open Windows 1.0 From: att!cbnewsc!bwong@ucbvax.Berkeley.EDU (bruce.f.wong) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I have not tested the Lite applications that I'm interested in with FCS Open Windows 1.0. But I did test with a post-Beta2/pre-FCS copy and discovered problems I couldn't cope with like missing procs. 1. Is the shipped Open Windows Lite compatible ? 2. If not, has someone built a compatibility package ? 3. If someone has, can they please post it to this newgroup ? -- Bruce F. Wong ATT Bell Laboratories att!iexist!bwong 200 Park Plaza, Rm 1B-232 312-713-5111 Naperville, Ill 60566-7050 From don Fri Oct 20 04:17:38 1989 Date: Fri, 20 Oct 89 04:17:38 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: Robin Schaufler Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) The difficulty with waiting for another event and then looking at the timestamp is knowing how long to wait. In NeWS, this problem is solved by sending oneself a shuttle event timestamped in the future; since distribution of events is ordered by timestamp, if the shuttle arrives before another down transition, then it is known to be a single click. If the down transition arrives before the shuttle, the client can dequeue the shuttle so it never gets distributed. X does not have this notion of timestamp ordering for all events. I don't see any way to implement this sort of shuttle interface. If anyone else does, please enlighten me. -- Robin From don Fri Oct 20 04:17:49 1989 Date: Fri, 20 Oct 89 04:17:49 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: gem.mps.ohio-state.edu!wuarchive!texbell!uhnix1!sugar!ficc!peter@tut.cis.ohio-state.edu (Peter da Silva) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <17943@bellcore.bellcore.com> john@aardvark.UUCP (John Letourneau) writes: > Well, my $.02 as a NeWS user are like this...with a 3 button mouse, you > have 3 choices of things->standard is i)selection ii)position iii)menu. What does "position" do? How do you select-multiple without a "perform" button? A (DO-IT) gadget? No default action? > Stan Switzer and I talked this one over and using the time element allowed us > to include i-a)stretch! i-b)inverse! Basicly what Stan hacked up was > to use the selection button to "canvas-to-top" on the border with a > "quick-click", "canvas-to-bottom" on the border with a "double-quick-click" > and "constrained/un-constrained-stretching" with "click-hold". Try using 'click' as a toggle: if it's obscured, bring it to front. Otherwise drop it to back. This will give you the same semantics for obscured canvasses, and save a click on unobscured ones. This is what the new Amiga windowing system is supposed to do (haven't seen it yet :-<). Click-hold is a different matter... you don't need to use the time domain: just see if the current position changes while the button is down. Doesn't everyone do it this way? What does 'selecting' a border usually do? -- Peter da Silva, *NIX support guy @ Ferranti International Controls Corporation. Biz: peter@ficc.uu.net, +1 713 274 5180. Fun: peter@sugar.hackercorp.com. `-_-' "You can tell when a USENET discussion is getting old when one of the 'U` participants drags out Hitler and the Nazis" -- Richard Sexton From don Sat Oct 21 00:30:41 1989 Date: Sat, 21 Oct 89 00:30:41 -0400 To: NeWS-makers@brillig.umd.edu Subject: Has anyone figured out how to ring the bell? From: pyramid!prls!philabs!ppgbms!paul@decwrl.dec.com (Paul Evan Matz) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I'm sorry if this has been covered before, but I can't seem to remember if there's a way to ring the audible bell from the NeWS server side. I suppose one could forkunix an executable to do it. Is there a better way? Thanks (wishful thinking) Regards, Paul Matz PPG Biomedical Systems One Campus Drive Pleasantville, NY. 10570 914-741-4685 path ppgbms!moe!paul@philabs.philips.com From don Sat Oct 21 00:31:04 1989 Date: Sat, 21 Oct 89 00:31:04 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition From: crdgw1!montnaro@uunet.uu.net (Skip Montanaro) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) This note showed up in comp.windows.news. I thought it might be interesting for those people following the same thread in comp.windows.x. Can somebody speak to Robin's question about timestamp ordering of events in X? ---------- begin included message ---------- From: robin@SUN.COM (Robin Schaufler) Subject: Re: Help with double-click recognition. Date: 20 Oct 89 08:17:38 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet The difficulty with waiting for another event and then looking at the timestamp is knowing how long to wait. In NeWS, this problem is solved by sending oneself a shuttle event timestamped in the future; since distribution of events is ordered by timestamp, if the shuttle arrives before another down transition, then it is known to be a single click. If the down transition arrives before the shuttle, the client can dequeue the shuttle so it never gets distributed. X does not have this notion of timestamp ordering for all events. I don't see any way to implement this sort of shuttle interface. If anyone else does, please enlighten me. -- Robin ---------- end included message ---------- -- Skip Montanaro (montanaro@crdgw1.ge.com) From don Sat Oct 21 00:35:58 1989 Date: Sat, 21 Oct 89 00:35:58 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: crdgw1!crdgw1.ge.com!barnett@uunet.uu.net (Bruce Barnett) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Followup to comp.windows.misc. please. In article <6594@ficc.uu.net>, peter@ficc (Peter da Silva) writes: >Try using 'click' as a toggle: if it's obscured, bring it to front. Otherwise >drop it to back. I HATE this in window systems that have this "feature". I set up the windows the way that I like, and some window system keeps moving my windows around when I don't want to. Example: I want to look at a large window 'cause it has a manual page, data or source, but do work in a smaller window on top of the first. Then I want to select something in the "back" window and move/copy/paste it in front. BANG! my small window goes away. Grr! This is a real pain when the small window is completely covered over by the large window, and both windows are on top of a dozen other windows. It might take me a dozen actions to undo the changes of this "helpfull feature". When I set up my windows, I don't want them changed! But, you ask, how do you change this? >What does 'selecting' a border usually do? Bingo! A lot of window systems use clicks on the border of a window to specify window-manager actions. These clicks can therefore be used to change window hierarchy, iconify state, move or resize windows, or pop up the menus that all window-based applications have. But inside the window, you can make that program use any sort of chord like Shift-Meta-Control-DoubleClick left, middle and right mouse buttons. I have that chord defined to update the database in my Watch! Well, not really. Maybe next week. :-) -- Bruce G. Barnett uunet!crdgw1!barnett From don Sat Oct 21 00:37:15 1989 Date: Sat, 21 Oct 89 00:37:15 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: aardvark!john@bellcore.com (John Letourneau) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <6594@ficc.uu.net> peter@ficc.uu.net (Peter da Silva) writes: >In article <17943@bellcore.bellcore.com> john@aardvark.UUCP (John Letourneau) writes: >> Well, my $.02 as a NeWS user are like this...with a 3 button mouse, you >> have 3 choices of things->standard is i)selection ii)position iii)menu. > >What does "position" do? How do you select-multiple without a "perform" >button? A (DO-IT) gadget? No default action? OK, OK, Sorry, Sorry...position should be DRAG! sheesh I don't understand the rest of the comment. You can define whatever you want on the mouse buttons. The above list is the standard actions for windows and panels. >Try using 'click' as a toggle: if it's obscured, bring it to front. Otherwise We've done this (for a loong time) and interresting things come of it. Since the actual display state is not always know (ie. a window can appear to be TOP to the observer but it's state does not say that) interesting things happen-> the toggle will seem to do nothing to the top screen the first time it is clicked; and on the second click it will go to the bottom as was probably intended with the first click. With an explicit TOP/BOTTOM type of action (double-click) this is avoided. >Click-hold is a different matter... you don't need to use the time domain: >just see if the current position changes while the button is down. Doesn't >everyone do it this way? Ah! You are in the world of implementations and not techonologies. Sure there are a plethora of ways of doing things. We wanted to see how the time element could be used. I'm sure when Stan returns (next week I think) he'll have a few things to add to this discussion. PS. The click and move can get trickey if framebuffer interrest are used for things...trust me on this I tried it. -_ .- _ * - ~ _______ "I feel the need... | John P. Letourneau . * = _ .~ _ / 9000 \___ the need for speed!!" | john@ctt.bellcore.com ~_ .~_ . = / Turbo \ | Bellcore ~. - _ = * - \-O------O----| | Piscataway, NJ. From don Sat Oct 21 01:57:42 1989 Date: Sat, 21 Oct 89 01:57:42 -0400 To: NeWS-makers@brillig.umd.edu Subject: Running NeWS on SG Iris workstations From: snorkelwacker!usc!aero!zevpeter@tut.cis.ohio-state.edu (q) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I'm getting a strange error from the C side when I drive a NeWS program on the Silicon Graphics Iris workstation with cps. The program runs perfect on a Sun-4 workstation. Worse, the * example * program given in the Iris manual (a copy of the Sun example) bombs in the same exact way on two different Iris workstations. Basically, the loader dies with the error message "inet_addr undefined"--as if it were looking for an Internet address! The NeWS code itself works * fine * on both the Sun and the Iris. It's * just * when I use the C driver that it tries to look for "inet_addr". Does anyone have any ideas? (Also, some NeWS programs on Suns can't be ported too well to Iris's...what are the important things one needs to watch out for when writing NeWS code for use on the Iris? ADVThanksANCE Very Much!! From don Mon Oct 23 00:03:38 1989 Date: Mon, 23 Oct 89 00:03:38 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Running NeWS on SG Iris workstations From: unhd!pel@uunet.uu.net (Paul E. Leclerc) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <59852@aerospace.AERO.ORG> zevpeter@aerospace.aero.org (q) writes: >Path: unhd!uunet!snorkelwacker!usc!aero!zevpeter >From: zevpeter@aerospace.aero.org (q) >Newsgroups: comp.windows.news >Keywords: NeWs inet_addr problems >Date: 20 Oct 89 22:12:15 GMT >Organization: back in civilization >Lines: 19 >I'm getting a strange error from the C side when I drive a >NeWS program on the Silicon Graphics Iris workstation with >cps. The program runs perfect on a Sun-4 workstation. Worse, >the * example * program given in the Iris manual (a copy of >the Sun example) bombs in the same exact way on two different >Iris workstations. I tried the example in the Iris manual. At first it didn't even compile correctly. I called SGI. They (after doing some checking) said they got their stuff from Sun and that it is wrong at the source. Summary: Don't use the example in the manual. >Basically, the loader dies with the error message "inet_addr >undefined"--as if it were looking for an Internet address! >The NeWS code itself works * fine * on both the Sun and the >Iris. It's * just * when I use the C driver that it tries to >look for "inet_addr". Does anyone have any ideas? Make sure to also link in the BSD libraries. ie -lbsd and it should work. >(Also, some NeWS programs on Suns can't be ported too well to >Iris's...what are the important things one needs to watch out for >when writing NeWS code for use on the Iris? I am still struggling to learn NeWS and postscript (on any machine). I wish I had a few simple examples of interfacing C and NeWS but so far I have had no luck. I understand that the Sun NeWS manuals are good but alas we do not have access to them. There is a NeWS archive at Sun. Try mailing to news-archive@sun.com with a subject of help >ADVThanksANCE Very Much!! -- =========================================================================== Paul Leclerc, Computer Specialist III |Bitnet: P_LECLERC@UNHH.BITNET University of NH |UUCP: ...uunet!unh!pel From don Mon Oct 23 00:03:46 1989 Date: Mon, 23 Oct 89 00:03:46 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition From: rws@expo.lcs.mit.edu (Bob Scheifler) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) X does not have this notion of timestamp ordering for all events. I don't see any way to implement this sort of shuttle interface. Robin is correct, the core X protocol does not have any support for this. From don Wed Oct 25 02:30:42 1989 Date: Wed, 25 Oct 89 02:30:42 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: spectral!sjs@bellcore.com (Stan Switzer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <6594@ficc.uu.net> peter@ficc.uu.net (Peter da Silva) writes: > Click-hold is a different matter... you don't need to use the time domain: > just see if the current position changes while the button is down. Doesn't > everyone do it this way? Yes, we do. But what if the mousie doesn't move? No matter: In NeWS, it's easy to do this kind of event processing. Just wait for whichever happens first: timeout, click, or for the mouse movement more than a jiggle. AND, if you are careful about how you use blockinputqueue/unblockinputqueue, you'll never miss an event. (I guess that this is the problem with double-click in X, but as I said before, it strikes me as quite odd that you can't detect multi-clicks in X.) Stan sjs@bellcore.com From don Wed Oct 25 02:31:45 1989 Date: Wed, 25 Oct 89 02:31:45 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: spectral!sjs@bellcore.com (Stan Switzer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Well, frankly, it comes a quite a surprise to me that you can't do double click detection in X, but is quite easy in NeWS. Here's a routine to check if a click is, in fact, a double click. After you have detected a single click, invoke this routine to see if there is another click. Since it just checks to see if another click follows the current one, it can be cascaded to detect triple, quadruple, etc. clicks. /DoubleClickDelay .3 60 div def /DoubleClick? { % - -> another click(true) or not(false) null blockinputqueue { % fork ParentCanvas setcanvas currentcursorlocation createevent dup begin /Name /MouseDragged def end expressinterest createevent dup begin /Action /DownTransition def /Exclusivity true def end expressinterest createevent dup begin /Name /Timer def end dup expressinterest createevent copy dup begin /TimeStamp currenttime DoubleClickDelay add def end sendevent unblockinputqueue WaitButIgnoreJiggle /Action get /DownTransition eq % Have we a click? } fork waitprocess } def /JiggleFudge 4 def /WaitButIgnoreJiggle { { % get events until something more than a % mouse jiggle happens awaitevent true % exit flag 1 index /Name get /MouseDragged eq { 1 index begin XLocation YLocation end % stk: origX origY event exflag X Y 4 index sub abs JiggleFudge le exch 5 index sub abs JiggleFudge le and { pop false } if % continue (don't exit) } if { exit } if pop } loop } def If you wanted to be more clever, you could download a global click processor that converted all multiple clicks into distinct events for distribution. It would probably be a bad idea, though, since it would make all single clicks just a little bit sluggish. Stan Switzer sjs@bellcore.com From don Wed Oct 25 02:32:09 1989 Date: Wed, 25 Oct 89 02:32:09 -0400 To: NeWS-makers@brillig.umd.edu Subject: sockets From: prove@tcgould.tn.cornell.edu (Roger Ove) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Could someone please post an example using a socket connection between 2 NeWS processes? I have a pixrect image stored in a string and want to display it with readcanvas imagecanvas, without going to disk. An example receiving the data via separate socket from the C client would also be useful (to avoid NeWS string length restrictions). thanks, Roger Ove ove@ncsa.uiuc.edu From don Wed Oct 25 02:37:45 1989 Date: Wed, 25 Oct 89 02:37:45 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: sun-barr!newstop!texsun!texbell!sugar!ficc!peter@apple.com (Peter da Silva) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <18005@bellcore.bellcore.com> john@aardvark.UUCP (John Letourneau) writes: > In article <6594@ficc.uu.net> peter@ficc.uu.net (Peter da Silva) writes: > >In article <17943@bellcore.bellcore.com> john@aardvark.UUCP (John Letourneau) writes: > >> Well, my $.02 as a NeWS user are like this...with a 3 button mouse, you > >> have 3 choices of things->standard is i)selection ii)position iii)menu. > >What does "position" do? How do you select-multiple without a "perform" > >button? A (DO-IT) gadget? No default action? > OK, OK, Sorry, Sorry...position should be DRAG! sheesh OK, I understand now. You have select/drag/menu. I don't know... I don't move windows around that much, so I can't see giving a mouse button up for that action. I'd rather use a poke point. > I don't understand the rest of the comment. You can define whatever you > want on the mouse buttons. The above list is the standard actions for > windows and panels. From a theoretical viewpoint, having a standard set of actions is desirable. What I mean to say is, suppose you want to "activate" a bunch of icons at once (where activate means start a program, send a signal, or whatever), what is your standard sequence of operations? I'd think you'd SELECT each one, then hit PERFORM. On the Mac, SELECT is a mouse click and PERFORM is a double click. I'd rather make PERFORM a seperate button. Then if you want more than the default action, you use the third button to call up a menu of actions. > >Try using 'click' as a toggle: if it's obscured, bring it to front. Otherwise > We've done this (for a loong time) and interresting things come of it. > Since the actual display state is not always know (ie. a window can appear > to be TOP to the observer but it's state does not say that) Implementation detail. I didn't say "top", I said "obscured". You can tell if a window is obscured either by looking at the clipping list for that window, or by looking at other windows. Whether it's the highest window or not is of little interest to the user. Was it just too much trouble to check for this, or was this information not available to the part of the program that decided on the action? > >Click-hold is a different matter... you don't need to use the time domain: > >just see if the current position changes while the button is down. Doesn't > >everyone do it this way? > Ah! You are in the world of implementations and not techonologies. Not really. If you *think* of the action as being in the time domain, it can be annoying to people whose perception of the time domain is different from yours. If everything depends only on a sequence of actions, instead of worrying about just when the actions occurred, it's a lot easier on the programmer and the user. > PS. The click and move can get trickey if framebuffer interrest are > used for things...trust me on this I tried it. Now it's my turn... what does this refer to? -- Peter da Silva, *NIX support guy @ Ferranti International Controls Corporation. Biz: peter@ficc.uu.net, +1 713 274 5180. Fun: peter@sugar.hackercorp.com. `-_-' "I feared that the committee would decide to go with their previous 'U` decision unless I credibly pulled a full tantrum." -- dmr@alice.UUCP From don Wed Oct 25 02:38:13 1989 Date: Wed, 25 Oct 89 02:38:13 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: gem.mps.ohio-state.edu!lavaca.uh.edu!uhnix1!sugar!ficc!peter@tut.cis.ohio-state.edu (Peter da Silva) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <18015@bellcore.bellcore.com> sjs@bellcore.com (Stan Switzer) writes: > In article <6594@ficc.uu.net> peter@ficc.uu.net (Peter da Silva) writes: > > Click-hold is a different matter... you don't need to use the time domain: > > just see if the current position changes while the button is down. Doesn't > > everyone do it this way? > Yes, we do. But what if the mousie doesn't move? Well, since we're using this to drag something, then if the mousie doesn't move you haven't dragged anything anywhere... so what's the problem? (Personally, I think click-hold is the *only* way to drag... this click here with this button move click there with that button stuff is strictly for the birds. Down with control-alt-meta-cokebottle-hold-your-face-right sequences). -- Peter da Silva, *NIX support guy @ Ferranti International Controls Corporation. Biz: peter@ficc.uu.net, +1 713 274 5180. Fun: peter@sugar.hackercorp.com. `-_-' "I feared that the committee would decide to go with their previous 'U` decision unless I credibly pulled a full tantrum." -- dmr@alice.UUCP From don Wed Oct 25 02:41:22 1989 Date: Wed, 25 Oct 89 02:41:22 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: gem.mps.ohio-state.edu!lavaca.uh.edu!uhnix1!sugar!ficc!peter@tut.cis.ohio-state.edu (Peter da Silva) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I'd agree with this business of "well, it's programmable so you set things up the way you want" but for one thing: I don't have the source code to all the programs so I *can* set them up. Playing games with the system definitions only goes so far: I can't convince Xpic to use hold-and-drag instead of click-move-click, for example, by redefining buttons. I know NeWS is more configurable than X, but I don't get the feeling it's practical to do it en mass: otherwise why would anyone need a mouse help menu? -- Peter da Silva, *NIX support guy @ Ferranti International Controls Corporation. Biz: peter@ficc.uu.net, +1 713 274 5180. Fun: peter@sugar.hackercorp.com. `-_-' "That particular mistake will not be repeated. There are plenty of 'U` mistakes left that have not yet been used." -- Andy Tanenbaum (ast@cs.vu.nl) From don Wed Oct 25 02:41:38 1989 Date: Wed, 25 Oct 89 02:41:38 -0400 To: NeWS-makers@brillig.umd.edu Subject: Load Average From: zodiac!HOCKNEY.ADS.COM!mori@ames.arc.nasa.gov (Shozo Mori) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I am using SUN 3/140. The OS has been "upgraded" from 3.2 to 4.0 (I think). The "Load Average" somewhat stopped working after this upgrade. The "Load Average" is being set up somewhere in init.ps as ........ /applicationsmenu [ (Terminals =>) terminalmenu (Clocks =>) clockmenu (Load Average) { (psload) forkunix } (Calculator) { (calcul) RunDemoPshScript } (Journal) { (journalling) RunDemoPshScript } ] /new DefaultMenu send def ............ I think that "forkunix" tells something but I have no idea what made this break. Could someone out there any idea ? Thank you very much in advance. - Shozo From don Wed Oct 25 02:41:58 1989 Date: Wed, 25 Oct 89 02:41:58 -0400 To: NeWS-makers@brillig.umd.edu Subject: Getting The Name of A Process Running in A Window From: bucasb!mike@CS.BU.EDU (Michael Cohen) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I,m running under Silicon Graphics Window System 4sight which is a version of News ... . The current restart code running in init.ps has a bug in that if the console window is killed then an attempt to connect the console after login to the console window via /etc/gl/startconsole fails to connect the console to the console window. I would like to be able to kill all windows save the console window via a command like /destroy. Is there a simple way to do this without rewriting various object modules. -- Michael Cohen ---- Center for Adaptive Systems Boston University (617-353-7857) Email: mike@bucasb.bu.edu Smail: Michael Cohen Center for Adaptive System Department of Mathematics, Boston University 111 Cummington Street, RM 242 Boston, Mass 02215 From don Wed Oct 25 02:42:08 1989 Date: Wed, 25 Oct 89 02:42:08 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: aardvark!john@bellcore.com (John Letourneau) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <6650@ficc.uu.net> peter@ficc.uu.net (Peter da Silva) writes: >(Personally, I think click-hold is the *only* way to drag... this click > here with this button move click there with that button stuff is strictly > for the birds. Down with control-alt-meta-cokebottle-hold-your-face-right > sequences). AH!!! We agree! In fact this is part of my "anti-menu" feelings when it comes to "common" window activity. I know, what's common for you may not be for be for me (iff 8^)). Even though calling up a menu and doing a selection is just a matter of clicking (single and/or multi) there is still an element of mouse movement. MY feelings are that this counts as a "key-stroke". Your "choose these windows" now "do this" paradigm is OK...actually something I may concider for some applications I've been concidering. Well, I'm tired of talking about this for today. Later......... -_ .- _ * - ~ _______ "I feel the need... | John P. Letourneau . * = _ .~ _ / 9000 \___ the need for speed!!" | john@ctt.bellcore.com ~_ .~_ . = / Turbo \ | Bellcore ~. - _ = * - \-O------O----| | Piscataway, NJ. From don Wed Oct 25 02:42:19 1989 Date: Wed, 25 Oct 89 02:42:19 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Help with double-click recognition. From: aardvark!john@bellcore.com (John Letourneau) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <6648@ficc.uu.net> peter@ficc.uu.net (Peter da Silva) writes: >In article <18005@bellcore.bellcore.com> john@aardvark.UUCP (John Letourneau) writes: >> OK, OK, Sorry, Sorry...position should be DRAG! sheesh > >OK, I understand now. You have select/drag/menu. I don't know... I don't >move windows around that much, so I can't see giving a mouse button up for >that action. I'd rather use a poke point. Weeeell we've got 100+ host on our network; Sun 3's, 4's, sparcstations, Pyramids, uVaxes, 3B2s, and on, and on. I typically have over 5 windows up at least, doing different things. FOR ME, moving windows or selecting them to be unobscured is how I choose to work as oppose to icons opening and closing. Besides I haven't had the time to hack up a "something has happened in the window represented by this icon" code...ie. missing some host event when the icon is up. > >hit PERFORM. On the Mac, SELECT is a mouse click and PERFORM is a double >click. I'd rather make PERFORM a seperate button. Well, YOU prefer the Mac look. Aren't user programmable interfaces neat?! > >Implementation detail. I didn't say "top", I said "obscured". You can tell if >a window is obscured either by looking at the clipping list for that window, Hmmmmmm > >Not really. If you *think* of the action as being in the time domain, it >can be annoying to people whose perception of the time domain is different >from yours. If everything depends only on a sequence of actions, instead >of worrying about just when the actions occurred, it's a lot easier on the >programmer and the user. Ah, I doubt if we'll agree completely (at all?) on some of these points. Maybe not even on the magnitude of their importance. End Of Comment (EOC) > >> PS. The click and move can get trickey if framebuffer interrest are >> used for things...trust me on this I tried it. > >Now it's my turn... what does this refer to? I was afraid you'd ask this...let's see...Ah, I have it set up so that a select click on the framebuffer will open another window on my Sun. When things are slow for whatever reason, I'll click on an existing window frame to unobscure it..I then move the mouse (just slightly) so that it is on the framebuffer..I get a new window instead. This is what I've observed, it doesn't make complete sense to me, I haven't had time to dig into it. It might vary well be a figment of my imagination, or a subtle difference between what event is actually used->down or up transition. Sorry I can't be any more specific than this. -_ .- _ * - ~ _______ "I feel the need... | John P. Letourneau . * = _ .~ _ / 9000 \___ the need for speed!!" | john@ctt.bellcore.com ~_ .~_ . = / Turbo \ | Bellcore ~. - _ = * - \-O------O----| | Piscataway, NJ. From don Wed Oct 25 02:42:34 1989 Date: Wed, 25 Oct 89 02:42:34 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Running NeWS on SG Iris workstations From: sgi!ciemo%bananapc.wpd.sgi.com@ucbvax.Berkeley.EDU (Dave Ciemiewicz) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article , pel@unhd.UUCP (Paul E. Leclerc) writes: > In article <59852@aerospace.AERO.ORG> zevpeter@aerospace.aero.org (q) writes: > > >Path: unhd!uunet!snorkelwacker!usc!aero!zevpeter > >From: zevpeter@aerospace.aero.org (q) > >Newsgroups: comp.windows.news > >Keywords: NeWs inet_addr problems > >Date: 20 Oct 89 22:12:15 GMT > >Organization: back in civilization > >Lines: 19 > > > >I'm getting a strange error from the C side when I drive a > >NeWS program on the Silicon Graphics Iris workstation with > >cps. The program runs perfect on a Sun-4 workstation. Worse, > >the * example * program given in the Iris manual (a copy of > >the Sun example) bombs in the same exact way on two different > >Iris workstations. > I tried the example in the Iris manual. At first it didn't even > compile correctly. I called SGI. They (after doing some checking) > said they got their stuff from Sun and that it is wrong at the > source. Summary: Don't use the example in the manual. > > >Basically, the loader dies with the error message "inet_addr > >undefined"--as if it were looking for an Internet address! > >The NeWS code itself works * fine * on both the Sun and the > >Iris. It's * just * when I use the C driver that it tries to > >look for "inet_addr". Does anyone have any ideas? > Make sure to also link in the BSD libraries. ie -lbsd > and it should work. > I can't comment on whether the examples work or not. You don't even state which example it is that you are using. It does seem, however, that there may be the problem of not loading executable with the proper libraries. Try adding -lbsd to the load command line (ld or cc). > > >(Also, some NeWS programs on Suns can't be ported too well to > >Iris's...what are the important things one needs to watch out for > >when writing NeWS code for use on the Iris? > I am still struggling to learn NeWS and postscript (on any machine). > I wish I had a few simple examples of interfacing C and NeWS but > so far I have had no luck. I understand that the Sun NeWS manuals > are good but alas we do not have access to them. > Some problem areas could be in the area of the window manager code which is derived from the litewin package with many mods. As Sun has claimed in their documentation that litewin was unsupported. Also, there have been some assumptions made about the behaviour of NeWS which are not necessarily supported in all implementations. For instance, 4Sight (SGI's implementation of NeWS) does not support retained canvases (I hope I'm right on this one). If you are looking for a decent example, try the looking in /usr/NeWS/clientsrc/glnews.*. It is an example of a NeWS and GL application communicating together. There are also 4Sight/NeWS customization examples in /usr/people/4Dgifts/.4sight/* which might be of interest to you. Some of these things are in as early as 3.1D. Some new features were added in 3.2. > There is a NeWS archive at Sun. Try mailing to > news-archive@sun.com > with a subject of help > > > >ADVThanksANCE Very Much!! > -- > =========================================================================== > Paul Leclerc, Computer Specialist III |Bitnet: P_LECLERC@UNHH.BITNET > University of NH |UUCP: ...uunet!unh!pel From don Thu Oct 26 01:53:40 1989 Date: Thu, 26 Oct 89 01:53:40 -0400 To: NeWS-makers@brillig.umd.edu Subject: error handler for client application From: eru!luth!sunic!tut!karikukko.tut.fi!ks@bloom-beacon.mit.edu (Syst{ Kari) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Does anybody know how I can recover from postscript errors so that my client (which uses the psio-library) can continue it's execution ? I think that I should do about the same that 'executive' in psh. (Without any prints to to stdout of cource.) -- Yll{oleva on on minun mielipiteeni, ei TTKK:n. -- The above contains my opinions, not the ones of Tamp. Univ. of Technology. -- Samma p} svenska. From don Thu Oct 26 01:54:04 1989 Date: Thu, 26 Oct 89 01:54:04 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Load Average From: gregm@Sun.COM (Greg McLaughlin) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Your problem is likely the permisions on /dev/kmem. In SunOS 3.x /dev/kmem was readable by everyone. For security reasons it was made read for owner in SunOS 4.0. Psload needs to read /dev/kmem to get its statistics. Simply changing the permisions on /dev/kmem (or making psload suid root) will solve your problem. Greg ------------------------------ From NeWS-makers-request@cs.UMD.EDU Tue Oct 24 23:50:25 1989 Date: Wed, 25 Oct 89 02:41:38 -0400 To: NeWS-makers@brillig.umd.edu Subject: Load Average From: zodiac!HOCKNEY.ADS.COM!mori@ames.arc.nasa.gov (Shozo Mori) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I am using SUN 3/140. The OS has been "upgraded" from 3.2 to 4.0 (I think). The "Load Average" somewhat stopped working after this upgrade. The "Load Average" is being set up somewhere in init.ps as ........ /applicationsmenu [ (Terminals =>) terminalmenu (Clocks =>) clockmenu (Load Average) { (psload) forkunix } (Calculator) { (calcul) RunDemoPshScript } (Journal) { (journalling) RunDemoPshScript } ] /new DefaultMenu send def ............ I think that "forkunix" tells something but I have no idea what made this break. Could someone out there any idea ? Thank you very much in advance. - Shozo From don Thu Oct 26 01:54:18 1989 Date: Thu, 26 Oct 89 01:54:18 -0400 To: NeWS-makers@brillig.umd.edu Subject: XNeWS Reference Card From: rbogen@EBay.Sun.COM (Richard Bogen) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In honor of the release of X11/NeWS on SUN3's here is a file which produces a 2 page reference card listing of datatypes & operators. Try sending it to your laserprinter after loading it with card stock. -------------------------Now Cut This Out! ------------------------- %! % NeWS Reference Card % % From: ou@ulowell.UUCP (Chris Katsaounis) % Date: 3 Jul 86 17:04:07 GMT % % Modified: October 20, 1989 by rbogen@sun.com (Richard A. Bogen) % To reflect changes from X11 merge % ========================================================================== % start of my stuff % ========================================================================== % timing stuff if on a printer errordict begin /handleerror {showpage 100 100 moveto $error /errorname get 30 string cvs show} def end /NeWS? systemdict /newcanvas known def /pgsize 14 def /captitlesize 14 def /titlesize 12 def /subheadsize 8 def /normsize 6.9 def % was 7 /subsize 5 def /stackfont /Helvetica findfont normsize scalefont def /emphfont /Helvetica-Oblique findfont normsize scalefont def /cmdfont /Helvetica-Bold findfont normsize scalefont def /symfont /Symbol findfont normsize scalefont def /subfont /Helvetica findfont subsize scalefont def /subheadfont /Helvetica-Bold findfont subheadsize scalefont def /extend { 1.0 mul } def /hvb /Helvetica-Bold findfont def /headpage hvb [ pgsize extend 0 0 pgsize 0 0 ] makefont def /headcaptitle hvb [ captitlesize extend 0 0 captitlesize 0 0 ] makefont def /headtitle hvb [ titlesize extend 0 0 titlesize 0 0 ] makefont def /rmargin 234 def % right margin /halign 75 def % horizontal alignment position /vlimit 65 def % lines per page (was 66) /boxheight 14 def % height of title box /linespace 8.48 def % amount to skip per line (was 8.45) /curline 1 def % current line /hpos 0 def % current horizontal position /pageface 0 def % which logical page (0=init, 1=left, 2=mid, 3=right) /pageno 4 def % page number /suboffset 2 def % subscript offset /linewidth .2 def % standard line width /titlexoff 5 def % title x offset /titleyoff 2 def % title y offset /empty (\320) def /pagestring 2 string def /inch { 72 mul } def /printf { print flush } def % - SETUP - % set up initial environment /SETUP { 90 rotate -7 0 translate % left x shift for symmetry newpath 11 inch 3 div -0.5 inch moveto 0 -7.5 inch rlineto 11 inch 2 mul 3 div -0.5 inch moveto 0 -7.5 inch rlineto linewidth setlinewidth stroke 15 -34 translate % true offset 11 inch 3 div neg 0 translate % negative translate so the next PAGE % will return to the same spot. } def % llx lly urx ury "box" - /box { 4 dict begin /ury exch def /urx exch def /lly exch def /llx exch def gsave newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath linewidth setlinewidth stroke grestore end } def % llx lly urx ury lo hi "fountain" - /fountain { 10 dict begin /fend exch def /fstart exch def /ury exch def /urx exch def /lly exch def /llx exch def /flen fend fstart sub 1 add def /fstr flen string def fstart 1 fend { fstr exch dup 255 div 180 mul cos neg 2 div .5 add 255 mul cvi exch fstart sub exch put } for gsave urx ury translate 180 rotate urx llx sub ury lly sub scale % 128 13 sub 10 8 flen 10 8 % [-128 13 add 0 0 10 128 13 sub 0] {fstr} image [flen neg 0 0 10 flen 0] {fstr} image grestore end } def % - PAGE - % start new page % We want to print the pages in a different order so that the Reference Card % can be folded correctly: 5 6 1 2 3 4 /PAGE { /pageno pageno 1 add def pageno 6 gt { /pageno 1 def } if pageno pagestring cvs /pagesubstring exch def pagesubstring printf pageface 3 mod 0 eq pageface 0 gt and { showpage SETUP } if /pageface pageface 1 add def 11 inch 3 div 0 translate % draw the fountain 0 0 rmargin boxheight 48 239 fountain 0 0 rmargin boxheight box % draw "NeWS Reference Card" in outlines newpath titlexoff titleyoff moveto headcaptitle setfont (NeWS) NeWS? {gsave .5 setgray show grestore} {true charpath} ifelse headcaptitle setfont ( R) NeWS? {gsave .5 setgray show grestore} {true charpath} ifelse headtitle setfont (EFERENCE) NeWS? {gsave .5 setgray show grestore} {true charpath} ifelse headcaptitle setfont ( C) NeWS? {gsave .5 setgray show grestore} {true charpath} ifelse headtitle setfont (ARD) NeWS? {gsave .5 setgray show grestore} {true charpath} ifelse NeWS? not {gsave 1 setgray fill grestore linewidth setlinewidth stroke} if % draw the page number in outlines NeWS? not {headpage setfont newpath 0 0 moveto pagesubstring true charpath pathbbox pop exch pop exch pop rmargin exch sub titlexoff sub titleyoff newpath moveto pagesubstring true charpath gsave 1 setgray fill grestore linewidth setlinewidth stroke} if newpath 0 0 moveto /curline 0 def NL (. ) printf } def % - NL - % newline function /NL { currentpoint exch pop linespace sub 0 exch moveto /curline curline 1 add def curline vlimit gt { PAGE } if } def % vert VNL - % customized newline function /VNL { currentpoint exch pop exch sub 0 exch moveto /curline curline 1 add def curline vlimit gt { PAGE } if } def % - HNL - % half-newline function /HNL { currentpoint exch pop linespace 2 div sub 0 exch moveto /curline curline 0.5 add def curline vlimit gt { PAGE } if } def % cmd args results "C" - /C { /results exch def /args exch def /cmd exch def stackfont setfont /args load xwidth halign exch sub currentpoint exch pop moveto /args load xshow cmdfont setfont ( ) show cmd show ( ) show currentpoint pop /hpos exch def stackfont setfont /results load xshow NL } def % results "CC" - % for alternate results. Prints only the arrow and the results, aligned % to the previous arrow. /CC { /results exch def currentpoint exch pop hpos exch moveto stackfont setfont /results load xshow NL } def % proc|string RJ - % sets proc or string right justified, in emphfont, without a newline /RJ { /rjarg exch def emphfont setfont /rjarg load xwidth rmargin exch sub currentpoint exch pop moveto /rjarg load xshow } def % proc|string CT - % centers proc or string within the current margins, without a newline /CT { dup xwidth rmargin exch sub 2 div currentpoint exch pop moveto xshow } def % x HT - % horizontal tab -- moves to horizontal position x, leaving y unchanged. /HT { currentpoint exch pop moveto } def % (str1) (str2) (str3) T - % sets three strings in cmdfont in three columns, divided evenly % within 0 and rmargin. /T { cmdfont setfont rmargin 3 div 2 mul HT show rmargin 3 div HT show 0 HT show NL } def % =================== utilities for use within xshow ======================= % subscript /- { /savefont currentfont def subfont setfont currentpoint suboffset sub moveto } def /+ { savefont setfont currentpoint suboffset add moveto } def % turnstile /ts { (|) show -1 0 rmoveto (\261) show } def % prime /' { currentfont symfont setfont (\242) show setfont } def % vertical bar /| { currentfont symfont setfont (\275) show setfont } def % ellipses /... { currentfont symfont setfont (\274) show setfont } def % shorthand /+| {+ |} def % note for version 38.0 /v38 { ((v. 38.0)) RJ } def % ========================================================================== % extended show stuff /xdict 20 dict def xdict begin /arraytype { cvx exec } def /booleantype {} def /dicttype {} def /filetype {} def /fonttype {} def /integertype {} def /marktype {} def /nametype { cvx exec } def /nulltype {} def /operatortype {} def /realtype {} def /savetype {} def /stringtype { show } def end % string xshow - % array xshow - % If given a string, xshow simply shows it. % If given an array, xshow evaluates each element of it, as follows: % string: shows it % array: executes it % name: executes it % all other elements are ignored. /xshow { dup type /stringtype eq { show } { xdict begin { dup type exec } forall end } ifelse } def % string|proc xwidth % finds the x width of a string or proc /xwidth { matrix currentmatrix gsave % get CTM for current device nulldevice % install null device so nothing is output setmatrix % set up previous CTM 0 0 moveto xshow currentpoint pop grestore } def % ========================================================================== % set up initial environment (Page: ) printf SETUP PAGE % ===================== Laserwriter-specific stuff ========================= HNL NL subheadfont setfont (NeWS Datatype Extensions) CT NL NL stackfont setfont (Monitor, color, graphicsstate, and path are simple types.) show NL (Canvas, cursor, event, process, environment,) show NL (colormap, colormapentry, and visual are complex objects) show NL (with key-values accessible as with dictionaries.) show NL NL (/Key) (putValue) (getValue) C HNL NL subheadfont setfont (Canvas) CT NL NL stackfont setfont (/TopCanvas) empty (canvas) C (/BottomCanvas) empty {(canvas)| (null)} C (/CanvasAbove) empty {(canvas) | (null)} C (/CanvasBelow) empty {(canvas) | (null)} C (/TopChild) empty {(canvas) | (null)} C (/Parent) {(canvas) | (null)} {(canvas) | (null)} C (/Transparent) (boolean) (boolean) C (/Mapped) (boolean) (boolean) C (/Retained) (boolean) (boolean) C (/SaveBehind) (boolean) empty C (/Color) empty (boolean) C (/EventsConsumed) (name) (name) C (/Interests) empty (array) C (/Cursor) (cursor) {(cursor) | (null)} C (/Colormap) (colormap) (colormap) C (/Visual) empty (visual) C (/VisualList) empty (array) C (/OverrideRedirect) empty (boolean) C (/BorderWidth) {(null) | (integer)} {(null) | (integer)} C (/UserProps) (dict) (dict) C (/XID) empty (number) C (/SharedFile) (string) (string) C (/RowBytes) empty (number) C (/Grabbed) (boolean) (boolean) C (/GrabToken) empty (integer) C HNL NL subheadfont setfont (Cursor) CT NL NL stackfont setfont (/CursorChar) empty (integer) C (/CursorColor) empty (object) C (/CursorFont) empty (object) C (/MaskChar) empty (integer) C (/MaskColor) empty (object) C (/MaskFont) empty (object) C HNL NL subheadfont setfont (Visual) CT NL NL stackfont setfont (/Size) empty (number) C (/Class) empty (object) C (/BitsPerPixel) empty (number) C HNL NL subheadfont setfont (Colormap) CT NL NL stackfont setfont (/Entries) empty (array) C (/Free) empty (number) C (/Installed) (boolean) (boolean) C (/Visual) empty (object) C PAGE HNL NL subheadfont setfont (Colormapentry) CT NL NL stackfont setfont (/Colormap) empty (object) C (/Mask) empty (integer) C (/Slot) empty (integer) C HNL NL subheadfont setfont (Process) CT NL NL stackfont setfont (/BindOverride) (boolean) (boolean) C (/DictionaryStack) empty (array) C (/ErrorCode) empty (name) C (/ErrorDetailLevel) (integer) (integer) C (/Execee) empty (object) C (/ExecutionStack) empty (array) C (/Interests) empty (array) C (/OperandStack) empty (array) C (/State) empty (array) C (/PackedArrays) (boolean) (boolean) C (/Priority) (integer) (integer) C (/ProcessName) (name) (name) C (/Stdout) (file) (file) C (/Stderr) (file) (file) C (/SendContexts) empty (array) C (/SendStack) empty (array) C HNL NL subheadfont setfont (Event) CT NL NL stackfont setfont (/Action) (object) (object) C (/Canvas) {(dict) | (array) | (canvas) | (null)} {(dict) | (array) | (canvas) | (null)} C (/ClientData) (object) (object) C (/Exclusivity) (boolean) (boolean) C (/Interest) empty (event) C (/IsInterest) empty (boolean) C (/IsPreChild) empty (boolean) C (/IsQueued) empty (boolean) C (/KeyState) empty (array) C (/Name) (object) (object) C (/Priority) (number) (number) C (/Process) {(null)|(process)} {(null)|(process)} C (/Serial) empty (number) C (/TimeStamp) (number) (number) C (/XLocation) (number) (number) C (/YLocation) (number) (number) C (/Coordinates) (xnumber ynumber) (xnumber ynumber) C HNL NL subheadfont setfont (Environment) CT NL NL stackfont setfont (/BellDuration) (integer) (integer) C (/BellPitch) (number) (number) C (/BellPercent) (number) (number) C (/KeyClickPercent) (number) (number) C (/Leds) (integer) (integer) C (/AutoRepeat) (boolean) (boolean) C (/KeyRepeatTime) (number) (number) C (/KeyRepeatThresh) (number) (number) C (/MotionCompression) (boolean) (boolean) C (/Threshold) (integer) (integer) C (/AccelNumerator) (number) (number) C (/AccelDenominator) (number) (number) C PAGE %NeWS operators HNL NL subheadfont setfont (NeWS Operators by Type) CT NL NL stackfont setfont HNL NL subheadfont setfont (Path Operators) CT NL NL stackfont setfont (copyarea) (dx dy) empty C (currentpath) empty (path) C (damagepath) empty empty C (emptypath) empty (boolean) C (eocopyarea) (dx dy) empty C (eocurrentpath) empty (path) C (eoextenddamage) empty empty C (eoextenddamageall) empty empty C (extenddamage) empty empty C (extenddamageall) empty empty C (pointinpath) (x y) (boolean) C (setpath) (path) empty C HNL NL subheadfont setfont (Canvas Operators) CT NL NL stackfont setfont (buildimage) (w h bits matrix proc) (canvas) C (canvasesunderpath) empty (array) C (canvasesunderpoint) {(null) | (xnum ynum)} (array) C (canvastobottom) (canvas) empty C (canvastotop) (canvas) empty C (clipcanvas) empty empty C (clipcanvaspath) empty empty C (createdevice) (string) (canvas) C (createoverlay) (canvas) (canvas) C (currentcanvas) empty (canvas) C (eoclipcanvas) empty empty C (eoreshapecanvas) (canvas) empty C (eowritecanvas) {(file) | (string)} empty C (eowritescreen) {(file) | (string)} empty C (getcanvaslocation) (canvas) (x y) C (getcanvashape) empty (path) C (imagecanvas) (canvas) empty C (imagemaskcanvas) (boolean canvas) empty C (insertcanvasabove) (canvas x y) empty C (insertcanvasbelow) (canvas x y) empty C (movecanvas) {(x y)| (x y canvas)} empty C (newcanvas) {(pcan) | (pcan visual cmap)} (ncan) C (readcanvas) {(file) | (string)} (canvas) C (reshapecanvas) {(canvas)| (canvas path width)} empty C (setcanvas) (canvas) empty C (writecanvas) {(file) | (string)} empty C (writescreen) {(file) | (string)} empty C HNL NL subheadfont setfont (Cursor Operators) CT NL NL stackfont setfont (currentcursorlocation) empty (x y) C (getcanvascursor) (canvas) (font char char) C (grabcursor) {(cursor) | (null)} empty C (newcursor) (char char font ) (cursor) C (setcanvascursor) (font char char) empty C (setcursorlocation) (x y) empty C PAGE HNL NL subheadfont setfont (Colormap Operators) CT NL NL stackfont setfont (createcolormap) (visual) (colormap) C (createcolorsegment) (colormap color) (colormapentry) C (createcolorsegment) (colormap int int) (array) C (currentbackpixel) empty (integer) C (currentpixel) empty (integer) C (getcolor) (cmapseg integer) (color) C (putcolor) (cmapseg int color) empty C (setbackpixel) (integer) empty C (setpixel) (integer) empty C HNL NL subheadfont setfont (Color Operators) CT NL NL stackfont setfont (contrastswithcurrent) (color) (boolean) C (currentbackcolor) empty (color) C (currentcolor) empty (color) C (hsbcolor) (h s b) (color) C (rgbcolor) (r g b) (color) C (setcolor) (color) empty C (setbackcolor) (color) empty C HNL NL subheadfont setfont (Process Operators) CT NL NL stackfont setfont (breakpoint) empty empty C (continueprocess) (process) empty C (createmonitor) empty (monitor) C (currentprocess) empty (process) C (currentshared) empty (boolean) C (fork) (proc) (process) C (forkunix) (string) empty C (geteventlogger) empty (process) C (getprocesses) empty (array) C (getprocessgroup) {(process) | (null)} (array) C (killprocess) (process) empty C (killprocessgroup) (process) empty C (monitor) (monitor proc) empty C (monitorlocked) (monitor) (boolean) C (newprocessgroup) empty empty C (pause) empty empty C (seteventlogger) (process) empty C (setshared) (boolean) empty C (suspendprocess) empty empty C (waitprocess) (process) (value) C PAGE HNL NL subheadfont setfont (Event Operators) CT NL NL stackfont setfont (awaitevent) empty (event) C (blockinputqueue) (num) empty C (countinputqueue) empty (num) C (createevent) empty (event) C (expressinterest) {(event)| (event process)} empty C (getmousetranslation) empty (boolean) C (lasteventkeystate) empty (array) C (lasteventtime) empty (num) C (lasteventx) empty (num) C (lasteventy) empty (num) C (postcrossings) (can can name name bool) empty C (recallevent) (event) empty C (redistributeevent) (event) empty C (revokeinterest) {(event)|(event process)} empty C (sendevent) (event) empty C (unblockinputqueue) empty empty C HNL NL subheadfont setfont (File Operators) CT NL NL stackfont setfont (acceptconnection) (listenfile) (file) C (countfileinputtoken) (file) (integer) C (getfileinputtoken) {(int) | (int file)} (object) C (getsocketlocaladdress) (file) (string) C (getsocketpeername) (file) (string) C (setfileinputtoken) (object int ) empty C (tagprint) (num) empty C (typedprint) (object) empty C (writeobject) (file object) empty C HNL NL subheadfont setfont (Mathematical Operators) CT NL NL stackfont setfont (arccos) (num) (num) C (arcsin) (num) (num) C (arctan) (num) (num) C (max) (num num) (num) C (min) (num num) (num) C (random) empty (num) C HNL NL subheadfont setfont (Keyboard and Mouse Operators) CT NL NL stackfont setfont (getkeyboardtranslation) empty (num) C (getmousetranslation) empty (boolean) C (keyboardtype) empty (num) C (setkeyboardtranslation) (boolean) empty C (setmousetranslation) (boolean) empty C PAGE HNL NL subheadfont setfont (Font Operators) CT NL NL stackfont setfont (encodefont) {(font array) | (font name)} (font) C (enumeratefontdicts) empty (names) C (findfilefont) (string) (font) C (fontascent) (font) (integer) C (fontdescent) (font) (integer) C (fontheight) (font) (integer) C HNL NL subheadfont setfont (Miscellaneous Operators) CT NL NL stackfont setfont (currentautobind) empty (boolean) C (currentpacking) empty (boolean) C (currentplanemask) empty (integer) C (currentprintermatch) empty (boolean) C (currentrasteropcode) empty (num) C (currentstate) empty (state) C (currenttime) empty (num) C (getcard32) (string integer) (integer) C (getenv) (string1) (string2) C (harden) (object) (object) C (localhostname) empty (string) C (objectdump) (file) empty C (packedarray) (objects int) (packedarray) C (packedarraytype) (object) (boolean) C (pathforallvec) (array) empty C (putcard32) (string integer integer) empty C (putenv) (string1 string2) empty C (refcnt) (object) (integer integer) C (reffinder) {(object) | (object boolean)} empty C (setautobind) (boolean) empty C (setpacking) (boolean) empty C (setplanemask) (integer) empty C (setprintermatch) (boolean) empty C (setrasteropcode) (num) empty C (setstate) (graphicsstate) empty C (soft) (object) (boolean) C (soften) (object) (object) C (truetype) (object) (name) C (undef) (dictionary key) empty C (vmstatus) (avail used size) empty C %%Trailer showpage From don Thu Oct 26 02:13:02 1989 Date: Thu, 26 Oct 89 02:13:02 -0400 To: NeWS-makers@brillig.umd.edu Subject: moving the mouse with arrow keys From: sgi!shinobu!odin!sgi.com!bh@ucbvax.Berkeley.EDU (Bent Hagemark) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Can anyone give me pointers (!) on how to make NeWS respond to arrow key events by moving the mouse pointer? I did something similar with X by writing a program based on XGrabKey and XWarpPointer (hitting uparrow moved the input focus to the window above). Didn't interfere with a concurrently running uwm if you really did want move your hand over to the mouse, move it, aim it, and move your hand back to the keyboard. :-) Bent bh@sgi.com From don Thu Oct 26 02:35:25 1989 Date: Thu, 26 Oct 89 02:35:25 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: moving the mouse with arrow keys From: don (Don Hopkins) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Date: 25 Oct 89 16:56:52 GMT From: sgi!shinobu!odin!sgi.com!bh@ucbvax.Berkeley.EDU (Bent Hagemark) Subject: moving the mouse with arrow keys To: news-makers@brillig.umd.edu Can anyone give me pointers (!) on how to make NeWS respond to arrow key events by moving the mouse pointer? I did something similar with X by writing a program based on XGrabKey and XWarpPointer (hitting uparrow moved the input focus to the window above). Didn't interfere with a concurrently running uwm if you really did want move your hand over to the mouse, move it, aim it, and move your hand back to the keyboard. :-) Bent bh@sgi.com Here's a program I wrote to do what you describe on a Sun keyboard, under NeWS 1.1. You may have to change the key names if you have a different kind of keyboard. I haven't tested it under X11/NeWS, but the principle is probably the same. I think you'd have to detect the shift keys differently (my guess is that you could sending a message to ClassKeyboard to look up the symbols of the key codes in the event's KeyState array, before the case statement). Does anybody know the "official" way to detect shift keys in X11/NeWS? Things to do: Make the cursor keys autorepeat. Cursor position stack for flipping between windows from the keyboard (push current position, next position, last position, pop position). Make the cursor position stack record mouse positions relative to the canvas under the cursor (or the input focus canvas), so the right thing happens even after you move windows around. Automatically bring the canvas (or its enclosing frame) to the top when you warp the cursor into it. On the fly journal macros (like emacs keyboard macros, that replay relative mouse motion, clicks, and keystrokes) ... Who knows if it would be useful, but it would be easy enough to try! -Don %! % Simulate mouse movement and clicks, with shifted keypad arrows % % Don Hopkins, University of Maryland Human Computer Interaction Lab % % Copyright (C) 1988 by Don Hopkins. All rights reserved. % This program is provided for unrestricted use, provided that this % copyright message is preserved. There is no warranty, and no author % or distributer accepts responsibility for any damage caused by this % program. % % Fake mouse movement: % % Control: small step (1 point) % Shift: medium step (16 points) % Meta: big step (100 points) % % R7 R8 R9 % R10 R12 % R13 R14 R15 % % Fake mouse clicks: % % Control-R11: Left mouse click % Shift-R11: Middle mouse click % Meta-R11: Right mouse click % % Unshifted function keys are just send through. % systemdict begin % Later: % Express interest in function key UpTransitions some how, leave % the Action field alone, and just send one event... /fake-button { % event name => event 1 index createevent copy % event name event begin % event name /Name exch def % event currentdict end % event FakeDownEvent dup createevent copy % event FakeDownEvent FakeDownEvent sendevent % event FakeDownEvent begin % event /Action /UpTransition def currentdict end % event FakeUpEvent sendevent % event } def /push-button { true 1 index /KeyState get { { /Control { pop /LeftMouseButton fake-button false exit } /Shift { pop /MiddleMouseButton fake-button false exit } /Meta { pop /RightMouseButton fake-button false exit } } case } forall { redistributeevent } if } def /move-mouse { % event dx dy => event gsave framebuffer setcanvas 2 index begin /Name /MouseDragged def YLocation add /YLocation exch def XLocation add /XLocation exch def XLocation YLocation setcursorlocation currentdict end sendevent grestore } def /mouse-small-step 1 def /mouse-medium-step 16 def /mouse-big-step 100 def /push-mouse { % event x y => event true 3 index /KeyState get { { /Control { pop mouse-small-step mul exch mouse-small-step mul exch move-mouse false exit } /Shift { pop mouse-medium-step mul exch mouse-medium-step mul exch move-mouse false exit } /Meta { pop mouse-big-step mul exch mouse-big-step mul exch move-mouse false exit } } case } forall { pop pop redistributeevent } if } def /FunctionR7 { -1 1 push-mouse } bindkey /FunctionR8 { 0 1 push-mouse } bindkey /FunctionR9 { 1 1 push-mouse } bindkey /FunctionR10 { -1 0 push-mouse } bindkey /FunctionR12 { 1 0 push-mouse } bindkey /FunctionR13 { -1 -1 push-mouse } bindkey /FunctionR14 { 0 -1 push-mouse } bindkey /FunctionR15 { 1 -1 push-mouse } bindkey /FunctionR11 { push-button } bindkey end % systemdict From don Thu Oct 26 09:43:22 1989 Date: Thu, 26 Oct 89 09:43:22 -0400 To: NeWS-makers@brillig.umd.edu Subject: X11/NeWS keyboard stuff (was: moving the mouse with arrow keys) From: don (Don Hopkins) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) ...In NeWS 1.1 you can look at the "KeyState" array in events to see which keys were down when the event happened, and you'll see the symbolic names of the shift keys that were down (/Control, /Shift, /LeftShift, etc...), due to the way keyboard translation is handled by a central process, which translates the raw key codes in the Names of hardware-generated events to ascii and symbolic values, and redistributes the events to the input focus. In X11/NeWS, the keyboard translation isn't handled by a global process -- each keyboard client (more efficiently) does its own translation (via ClassKeysInterest), so the translated names don't end up going through the event queue (thus the symbols don't make it into the event KeyState array). [I think the way the KeyState array works is that it contains the Name of every event that had gone by with an Action of /DownTransition, without a matching event with an Action of /UpTransition. So you could send a Name=/LeftEyelid, Action=/DownTransition event by hand, and the name /LeftEyelid would appear in the KeyState array of delivered events until you sent out a Name=/LeftEyelid, Action=/UpTransition event. NeWS Puzzle: write an event manager that translates {Left,Right}Eyelid {Up,Down}Transition events into higher level /Wink and /Blink events.] So if you use ClassKeysInterest, the keyboard events are delivered to you directly, instead of indirecting through a keyboard translation process as with addkbdinterests. X11/NeWS has a LiteUI compatibility package that LiteUI clients use via the old addkbdinterests, which forks off its own personal (or is it shared?) keyboard translation manager, that translates and redistributes the events to the LiteUI client. (There's also some amazing stuff for doing selection event translation.) The LiteUI compatibility manager expresses a ClassKeysInterest, and sends the translated keyboard events through the event queue, so their translated symbolic names make it into the KeyStates array, that shows up in every delivered event, for any NeWS process to see. But they won't ever be there unless you're running something that's using the old LiteUI compatibility package (or anything that sends translated keyboard events through the event queue). If you just use "bindkey" in X11/NeWS to bind a function key to a procedure that looks in its triggering event's KeyState for the symbols /Control, /Meta, /Shift, or whatever, all you will see will be the untranslated key codes (big meaningless numbers, not ascii values or symbolic names) that are down, *unless* you're running some NeWS 1.1 application that uses "addkbdinterests". So I think it's a bad idea to depend on symbolic or ascii values showing up in the /KeyState array of an event. Just do the translation from symbols to key codes yourself, ala "/keyforsymbol ClassKeyboard send", and look for the key codes in the KeyState array. So an X11/NeWS version of keypad.ps probably couldn't get away with the symbolic key name constants in the case statement, and could probably just use a dictionary mapping the shift key codes (looked up at load time) to procedures instead. Or maybe there's a suclass of ClassKeysInterest that could help with this... LiteUI was one of the most confusing parts of NeWS 1.1, but I must say that the keyboard and selection UI code in X11/NeWS is *much* nicer! (it's still confusing, but quite an improvement!) It's all object oriented, and it separates the user interface from the programmer (application) interface. You can switch to a totally different user interface style on the fly without running applications noticing! (Like a different selection policy [SunView's point/extend -vs- Mac's drag through], focus policy [focus follows cursor -vs- the dreaded click to type], window manager [Open Look -vs- Close Feel], etc...) I may be completely confused or deluded (so please correct me where I'm wrong!), or just plain boring (so hopefully you haven't read this far), but I'm typing this in to help anyone having similar problems porting NeWS 1.1 applications to X11/NeWS, and to start some discussion along those lines. -Don From don Thu Oct 26 09:43:29 1989 Date: Thu, 26 Oct 89 09:43:29 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: Getting The Name of A Process Running in A Window From: pixar!mike@ucbvax.Berkeley.EDU (Mike Russell) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article mike@bucasb.bu.edu (Michael Cohen) writes: > .... description of bug provoked by a missing console window ... >I would like to be able >to kill all windows save the console window via a command like /destroy. >Is there a simple way to do this without rewriting various object >modules. >-- How about this: {FrameLabel (console) ne { destroy } if} AllWin You may need to tweak the string (console) to match your console window label. -- Mike Russell ucbvax!pixar!mike When the vark gets ard, the ard get varking. From don Thu Oct 26 11:54:46 1989 Date: Thu, 26 Oct 89 11:54:46 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: sockets From: prove@tcgould.tn.cornell.edu (Roger Ove) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In response to my own query: > Could someone please post an example using a socket connection > between 2 NeWS processes? I have a pixrect image stored in a string > and want to display it with readcanvas imagecanvas, without going to > disk. An example receiving the data via separate socket from the C > client would also be useful (to avoid NeWS string length restrictions). There is no difficulty in passing data between the C Client and NeWS process via a secondary socket connection, the most obvious thing works (I'll mail the example if anyone is interested). Help with the first question would still be appreciated. thanks, Roger Ove ove@ncsa.uiuc.edu From don Fri Oct 27 21:09:20 1989 Date: Fri, 27 Oct 89 21:09:20 -0400 To: NeWS-makers@brillig.umd.edu Subject: sockets From: mailrus!jarvis.csri.toronto.edu!utgpu!utzoo!censor!isgtec!andrew@iuvax.cs.indiana.edu (Andrew) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Roger, This sounds very interesting. Could you please post any responses you receive. (Post to the net, becuase my mailer is down.) Thanks in advance. >Could someone please post an example using a socket connection >between 2 NeWS processes? I have a pixrect image stored in a string >and want to display it with readcanvas imagecanvas, without going to >disk. An example receiving the data via separate socket from the C >client would also be useful (to avoid NeWS string length restrictions). -- Andrew MacLean ...uunet!mnetor!lsuc!isgtec!andrew Success is a journey, not an adventure! ...utzoo!lsuc!isgtec!andrew ISG Technologies Inc. 3030 Orlando Dr. Mississauga. Ont. Can. L4V 1S8 From don Fri Oct 27 21:09:46 1989 Date: Fri, 27 Oct 89 21:09:46 -0400 To: NeWS-makers@brillig.umd.edu Subject: NeWS protocol tracer (a socket example) From: spectral!sjs@bellcore.com (Stan Switzer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I threw this together one evening when I was trying to figure out what tagprint really does (the manual is none too clear). It's a dreadfully inefficient NeWS program which interposes itself between a client and the server and traces the protocol to a file. I think someone (Josh Siegel?) posted one a long time ago but I couldn't find it. Anyway, it can be mighty useful, and it's a nice example of playing socket games in NeWS. Stan sjs@bellcore.com "No X is good X" From don Fri Oct 27 21:10:41 1989 Date: Fri, 27 Oct 89 21:10:41 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: sockets From: spectral!sjs@bellcore.com (Stan Switzer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In article <9150@batcomputer.tn.cornell.edu> prove@batcomputer.tn.cornell.edu (Roger Ove) writes: > In response to my own query: > > > Could someone please post an example using a socket connection > > between 2 NeWS processes? I have a pixrect image stored in a string > > and want to display it with readcanvas imagecanvas, without going to > > disk. An example receiving the data via separate socket from the C > > client would also be useful (to avoid NeWS string length restrictions). > > There is no difficulty in passing data between the C Client and > NeWS process via a secondary socket connection, the most obvious > thing works (I'll mail the example if anyone is interested). > Help with the first question would still be appreciated. > > thanks, > Roger Ove ove@ncsa.uiuc.edu OK, here's an example. The trick is that file names of the form (%socket[cl]nnn[.nnnnn]) are special. "c" means connect. "l" means listen. The first number is the socket number. The second number, if present, is the internet address (in decimal!). If the address is left off, localhost is the default. I have the opposite problem. I want to send a rasterfile via writecanvas to a C client from NeWS. I basically know how to do it, but I haven't done much socket hacking (in C) so an example would be greatly appreciated. I don't think you can do UDP sockets though, which is too bad since I am sorely tempted to write a SunRPC handler in NeWS so that I can write a yellow-pages client. Example follows. I haven't the foggiest idea why normal EOF detection on "currentfile" doesn't work. Stan Switzer sjs@bellcore.com ---------- #!/usr/NeWS/bin/psh % simple socket I/O example /buff1 100 string def /buff2 100 string def /receiver { /insocket (%socketl2345) (r) file acceptconnection def { % loop... insocket buff1 readline not { exit } if % read a line from socket == % print a line } loop (End of Input) == } fork def pause pause % give the process a chance to get launched { % sender: /outsocket (%socketc2345) (w) file def { % loop... currentfile buff2 readline not { exit } if % read a line from stdin dup (EOF) eq { exit } if outsocket exch writestring outsocket (\n) writestring outsocket flushfile } loop /outsocket null def % close output socket receiver waitprocess } exec line 1 another line line 3 last line EOF From don Fri Oct 27 21:11:09 1989 Date: Fri, 27 Oct 89 21:11:09 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: NeWS protocol tracer (a socket example) From: spectral!sjs@bellcore.com (Stan Switzer) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) In a previous article, I wrote: > I threw this together one evening when I was trying to figure out what > tagprint really does (the manual is none too clear). > > It's a dreadfully inefficient NeWS program which interposes itself > between a client and the server and traces the protocol to a file. It would have helped if I had included the program. > Stan sjs@bellcore.com "No X is good X" Yeah, whatever. -------------- #!/bin/sh # # tracenews: trace the NeWS client-server protocol # # Copyright (C) 1989 by Stan Switzer. All rights reserved. # This program is provided for unrestricted use, provided that this # copyright message is preserved. There is no warranty, and no author # or distributer accepts responsibility for any damage caused by this # program. # # tracenews file cmd ... # # Stan Switzer sjs@bellcore.com TRACEFILE=`echo $1` # expand ~, if present shift case "$TRACEFILE" in /* ) ;; * ) TRACEFILE=`pwd`/$TRACEFILE;; esac cat </dev/null 2>/dev/null; } /tracefile ($TRACEFILE) (w) file def % systemdict /NextSocket known not { systemdict /NextSocket 2011 put } if /ServerSocket systemdict begin % NextSocket /NextSocket NextSocket 1 add def 7469 % why not? end def /FakeServer (NEWSSERVER) getenv (;) search pop exch pop (.) search pop exch pop exch % sys addr port pop ServerSocket 20 string cvs (.) exch append append exch (;) exch append append def clear (%socketl) //ServerSocket 20 string cvs append (r) file % accept one connection: { FakeServer (\n) append print } fork pop acceptconnection /user exch def /server (NEWSSERVER) getenv (;) search pop exch pop (.) search pop pop append exch append def /server (%socketc) server append (rw) file def /mode (X) def { % writer process { % writer loop server (X) readstring not { exit } if dup user exch writestring user flushfile tracefile mode (S) ne { dup (\nServer: ) writestring /mode (S) def } if exch writestring } loop currentprocess killprocessgroup } fork pop { % reader process { % reader loop user (X) readstring not { exit } if dup server exch writestring server flushfile tracefile mode (U) ne { dup (\nUser: ) writestring /mode (U) def } if exch writestring } loop currentprocess killprocessgroup } fork pop { % flusher process createevent dup /Name /Tick put dup expressinterest createevent copy { % flusher loop dup /TimeStamp currenttime 5 60 div add put sendevent awaitevent tracefile flushfile } loop } fork !! From don Fri Oct 27 21:12:46 1989 Date: Fri, 27 Oct 89 21:12:46 -0400 To: NeWS-makers@brillig.umd.edu Subject: Mouse-Based text editor in NeWS.... From: spock!slavitch@uunet.uu.net (Michael Slavitch) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) I'm just beginning to run NeWS on a Sun 3/60, and all we have at our site is the basic package with demos and the like. There is no easy text editor like TextEdit (yes, you may gag at this point), and I'm getting sick of emacs's keyboard-based input style. Is there a freeware mouse based text editor for NeWS yet? I notice that there have been 1268 postings to this group at our site. I've only read the last dozen or so. There's gotta be some source for one lying around somewhere. P.S. could some kind person please E-MAIL me the source for the NeWS goodies that appeared on the net before I stumbled upon it? (Things like a mailtool, a text editor, and a 'calentool' would be REALLY appreciated). -- ************** * make waves * Michael Slavitch, Software Grunt Extrodinaire. * or die! * uunet!mitel!spock!slavitch ************** From don Fri Oct 27 21:13:03 1989 Date: Fri, 27 Oct 89 21:13:03 -0400 To: NeWS-makers@brillig.umd.edu Subject: pageview and laser-prep From: cs.utexas.edu!swrinde!ksp@tut.cis.ohio-state.edu (Keith S. Pickens) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) We would like to be able to use pageview to view postscript files generated on a Macintosh. The version of laser-prep with which we preface Mac-postscript files to allow printing from a Sun does not work. This laser-prep file plus a Mac-postscript file either causes an error or crashes xnews. Has anyone hacked a version of laser-prep which will work with pageview to allow viewing of Macintosh generated postscript? Any pointers would be greatly appreciated. -keith ksp@maxwell.nde.swri.edu From don Fri Oct 27 21:13:57 1989 Date: Fri, 27 Oct 89 21:13:57 -0400 To: NeWS-makers@brillig.umd.edu Subject: Porting NeWS to Hewlett Packard. From: eru!luth!sunic!ifi!asgeir@BLOOM-BEACON.MIT.EDU (Asgeir Finnseth) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) At the University of Tromsoe, Norway, we want to port NeWS to Hewlett-Packard Workstations. We are basically interested in the final result, not in the porting task itself. Hence we'll appreciate all kind of help, including obtaining object and/or source code from someone who have done the port already. Target machines are Hewlett-Packard 9000, series 300. Displays are 98549 (low resolution) and 98550 (high resolution, catseye). Our final goal is to port X11/NeWS, but we are preared to start with NeWS 1.1. Currently we only have the source code and the source license for NeWS 1.1 and a "prerelease evaluation agreement" for X11/NeWS. We hope to obtain the X11/NeWS source code (beta reference version) from Sun soon. The port is important for us. It will increase our pool of "NeWS-machines" from 4 to more than 60. Any information that will ease our work are very welcome: - Source code of key modules or entire ports - Executable code (HP9000/300 display 98549/98550) - Hints and advices Thanks in advance. : Asgeir Finnseth Work Address: Dept. of Computer Science Phone: +47 83 80298 (private) PB 953, University of Tromsoe +47 83 44039 (work) 9000 Tromsoe Email: asgeir@sfd.uit.no NORWAY From don Sat Oct 28 00:16:33 1989 Date: Sat, 28 Oct 89 00:16:33 -0400 To: NeWS-makers@brillig.umd.edu Subject: Re: X11/NeWS questions From: gem.mps.ohio-state.edu!wuarchive!mailrus!jarvis.csri.toronto.edu!utgpu!utzoo!censor!isgtec!andrew@ohio-state.arpa (Andrew) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Hello Andrew Hunt, I have had trouble trying to respond to you by mail, so I'm posting the answers to the net. (PS If you need to contact me, use the net as well since our mail seems to be completely broken!!!) Question 1 from before: ~~~~~~~~~~~~~~~~~~~~~~~ >> >> Is this true? Is there no way to use X windows to display a memory pixrect >> into? >> >Could you please foward me any info you get on this one. I will be >attempting something similar in a couple of months. I just received the FCS version of software about a week ago, and poof, 90 percent of my problems vanished. That includes the problem of using pixrects. I can now have an X window, and with some fidgetting, figure out where to place the pixrect in that window. The speed is 10 times faster doing it this way, than by using XPutImage. The problem of course is that you cannot run this program over the network, but that is the choice we made. Question 2 from before: ~~~~~~~~~~~~~~~~~~~~~~~ >> >> The OpenWindows documentation says to type the following commands while >> running the server: >> psh >> stopwm >> At this point, I am supposed to be able to run another window manager. >> WRONG!!! Only new clients are looked after by the new window manager. >> Any clients that were started up with the server are inactive. >> > >I have the same problem and have not figured out what to do yet. > >If you get any info on this one could you please foward it to me. > Here are the resposes that I received: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. It appears as if you are running a pre-release version of OpenWindows. Most of your problems do not occur in the FCS software and the documentation goes into greater detail on how to switch window managers. I would recommend switching to FCS OpenWindows as soon as possible. 2. Your first step should be to get an up-to-date version of the software, i.e. 1.0, not 1.0 beta2 or anything like that. Talk to your local Sun contact to find out how to get a copy. The 1.0 documentation has changed, so make sure to get a copy of it along with the software. Basically, the answer is to run "ps ax | grep pswm" to find the process id of the window manager, and then send it a TERM signal. 3. You might try setting the NOPSWM environment variable before starting X/NeWS. You also ought to be using pre-FCS or FCS versions of the server. I'm not sure if NOPSWM was supported under beta-2. 4. I am running pre-FCS xnews, and someone long ago gave me some pointers for effectively turning off the postscript in xnews. This also has the effect NEVER STARTING pswm (yay! -- doesn't even start the postscript interpreter if i remember correctly). I'm assuming this works in (post-FCS) 1.0 xnews, but I have no evidence since we are still using pre-FCS. To run xnews, go to your home directory and say something like: xinit xterm -- xnews In your home directory, create the following file (.startup.ps) with the following contents: /RunX11? true def /XOnly? true def UserProfile begin /ViewStop /FunctionL9 def /ViewAgain /FunctionL9 def /ViewProps /FunctionL9 def /ViewUndo /FunctionL9 def /ViewFront /FunctionL9 def /ViewPut /FunctionL9 def /ViewOpen /FunctionL9 def /ViewGet /FunctionL9 def /ViewFind /FunctionL9 def /ViewDelete /FunctionL9 def /FocusStyle /CursorFocus def end % UserProfile You may also have to create empty files called .openwin-init and/or .user.ps, but i have no real evidence that these files do anything, some NeWS guru just told me to put them there. Mine is not to reason why... Anyway, all this has the effect of turning xnews into your standard X server, which makes me willing to use a very non-standard X server. Oh yeah, and if you're sick of the static visual being the default visual, do 'setenv USE_MIT_VISUALS t' before running the xnews server, and the psuedocolor visual will become the default visual. This makes (for example) rubber-banding window managers, and hardheaded image-display programs happy. Question 3 that you just asked: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >3. We have been running a beta2.0 copys of Open Windows on both a >Sun4/110 and Sun386i for a couple of months. We are due to receive the FCS >version for the Sun4/110 any day now, but will have to persist for a while >with beta2.0 on the Sun386i. Is there any way in the beta2.0 version of >killing the window manager or starting up the server with no window >manager running? The programs "stopwm" and "startwm" mentioned on p26 of >the X11/NeWS Server Guide, seem to be absent from the distribution. >Setting the environment variable NOPSWM, as described in some net postings >recently does not seem to have any affect on starting up the server. > These questions have basically been answered above, but here is some additions. Setting the environment variable does NOT have any effect in the Beta versions. It does work with FCS version 1.0 and later. The programs stopwm and startwm exist in the file $OPENWINHOME/etc/NeWS/wm.ps You do not want to touch these programs. I managed to kill the PS window manager by editing the init.ps file. Unfortunatley, I don't have the Beta version any more, so I can't send it to you. What you need to do is to locate the routine that I believe is called Main. (Do a search for wm and it will be located in two places, main and somewhere else.) Then just use % to comment out the lines that reference the window manager. It isn't perfect, but it works to a small degree. (OR you can try the method listed above.) Anyways, good luck. Any problems, just post another message. -- Andrew MacLean ...uunet!mnetor!lsuc!isgtec!andrew Success is a journey, not an adventure! ...utzoo!lsuc!isgtec!andrew ISG Technologies Inc. 3030 Orlando Dr. Mississauga. Ont. Can. L4V 1S8 From don Sat Oct 28 02:19:40 1989 Date: Sat, 28 Oct 89 02:19:40 -0400 To: NeWS-makers@brillig.umd.edu Subject: Mac NeWS From: mcsun!ukc!icdoc!sot-ecs!lac@uunet.uu.net (Les Carr) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) the NeWS Book seems to imply the existence of NeWS for the Macintosh. can anyone out there give me some pointers to a product (UK available!) or am i just suffering from wishful thinking? PS is the extra space between the e & w in NeWS now mandatory? (or only if you're using troff for your documentation :-) ) -- L.Carr@ecs.soton.ac.uk Les Carr Tel: +44 703 593649 Dept of Electronics and Computer Science Fax: +44 703 593939 University of Southampton Telex: 47661 SOTONU G Southampton SO9 5NH England From don Mon Oct 30 04:43:03 1989 Date: Mon, 30 Oct 89 04:43:03 -0500 To: NeWS-makers@brillig.umd.edu Subject: (X)NeWS terminal? From: gem.mps.ohio-state.edu!ctrsol!emory!km@tut.cis.ohio-state.edu (Ken Mandelberg) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Has there been any hint that any of the X-terminal vendors will eventually release an X-NeWS version? -- Ken Mandelberg | km@mathcs.emory.edu PREFERRED Emory University | {decvax,gatech}!emory!km UUCP Dept of Math and CS | km@emory.bitnet NON-DOMAIN BITNET Atlanta, GA 30322 | Phone: (404) 727-7963 From don Mon Oct 30 04:43:26 1989 Date: Mon, 30 Oct 89 04:43:26 -0500 To: NeWS-makers@brillig.umd.edu Subject: Missing Client Source on Openwindows From: gem.mps.ohio-state.edu!ctrsol!emory!km@tut.cis.ohio-state.edu (Ken Mandelberg) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) Some of the xnews client source is missing in the Openwindow distribution. For example, the pageview.ps file #included in pageview.cps is missing. The Makefile expects to get it from a non-existant SCCS directory. Is the postscript missing on purpose, or is it an accident? If the latter, can someone at Sun send me pageview.ps? -- Ken Mandelberg | km@mathcs.emory.edu PREFERRED Emory University | {decvax,gatech}!emory!km UUCP Dept of Math and CS | km@emory.bitnet NON-DOMAIN BITNET Atlanta, GA 30322 | Phone: (404) 727-7963 From don Tue Oct 31 20:31:57 1989 Date: Tue, 31 Oct 89 20:31:57 -0500 To: NeWS-makers@brillig.umd.edu Subject: Re: Missing Client Source on Openwindows From: uflorida!stat!vsserv!prism!robert%shangri-la.gatech.edu@g.ms.uky.edu (Robert Viduya) Sender: NeWS-makers-request@brillig.umd.edu (Don Hopkins) > > Some of the xnews client source is missing in the Openwindow > distribution. For example, the pageview.ps file #included in > pageview.cps is missing. The Makefile expects to get it from a > non-existant SCCS directory. > pageview.ps can be found in the demo/PostScript directory. -- Robert Viduya robert@shangri-la.gatech.edu Office of Computing Services Georgia Institute of Technology (404) 894-6296 Atlanta, Georgia 30332-0275