Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!rutgers!sun-barr!cs.utexas.edu!uunet!mcvax!ukc!icdoc!qmc-cs!ads From: ads@cs.qmc.ac.uk (Adam Billyard) Newsgroups: comp.windows.news Subject: Re: Surprising NeWS - feature Message-ID: <1025@sequent.cs.qmc.ac.uk> Date: 30 May 89 09:15:56 GMT References: <117*knut-skog@rglab.uit.uninett> Reply-To: ads@cs.qmc.ac.uk (Adam Billyard) Organization: Computer Science Dept, Queen Mary College, University of London, UK. Lines: 102 Summary: Expires: Sender: Followup-To: Distribution: Keywords: In article <117*knut-skog@rglab.uit.uninett> knut-skog%rglab.uit.uninett@NORUNIX.BITNET (Knut Skog) writes: > ... >Can anybody tell me why the createevent operator is effected >by my careless def-ing of z into the eventdict. I expected >to get a 'dictfull' message. However, it looks as if >the defing effects the uninitiated eventdict so that all >later eventdicts created now has the this z-field. This will >last until the server is reinitiated (I think). >It is easy to make a def where you mean store. If this happens >when the current dict is an event dictionary the side-effect is >rather surprising. >I'm grateful if some of you would comment on this feature. >I myselfe tend to believe that it is a bug. I suspect this behaviour is due to event dictionaries being magical, and not just regular dictionaries. I had a horrible time trying to write a event preprocessor to be inserted into "forkeventmgr" so that I got Clicked and Pressed events rather than the simple Up/DownTransitions. The problem I had was that a 'store' into the Action field of an event simply doesn't work. I had to write my own 'store' (imaginatively named mystore) to make this work. The moral of the story is dont mess with Magic Events. Adam. % define mystore to be used instead of store systemdict /mystore % key val => - { exch dup where {3 1 roll exch put}{exch def} ifelse } put % % Econv converts events from Up/DownTransition to Clicked/Pressed % % Written 30/11/88 AMB % % fast way to do conditional ORs, lookup Key known = key1|..|keyN /lookup 3 dict dup begin /LeftMouseButton null def /MiddleMouseButton null def /RightMouseButton null def end def /Cspeed 0.18 60 div def % click time in seconds /Econv % event => event { begin lookup Name known { Action DownTransition eq { 3 dict begin /term1ev createevent def term1ev /Name Name put term1ev /Action UpTransition put /term2ev createevent def term2ev /Name /CTimer put /timer createevent def timer /Name /CTimer put timer /TimeStamp currenttime Cspeed add put timer sendevent term1ev expressinterest term2ev expressinterest awaitevent begin Name { /CTimer { /Pressed % new Action field is.. } % case should really check to see if Key evaluates to a Literal so we could use MenuButton etc. Sigh. /LeftMouseButton /MiddleMouseButton /RightMouseButton { timer recallevent % cancel timer /Clicked % new Action field is.. } } case end term2ev revokeinterest term1ev revokeinterest end /Action exch mystore % replace Action field } if } if currentdict end } def % % To make forkeventmgr do conversion of event before CallBack % % /EventMgrFore where pop /EventMgrFore {Econv} put -- JANET: ads@cs.qmc.ac.uk ARPA: ads%cs.qmc.ac.uk@nss.cs.ucl.ac.uk BITNET: ads%uk.ac.qmc.cs@ukacrl.bitnet