Anton
Err... You've lost me... and I'm wide awake 8).
Terry

----- Original Message -----
From: "Anton" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, May 09, 2001 12:12 PM
Subject: [REBOL] Re: IRSee.r now with ENCRYPTED white board.


> Look at this code:
>
> ; example 1
> view layout [button "L" 16x16 [wait 2]]
>
> ; example 2
> view layout [button "L" 16x16 [forever [wait 3]]]
>
> In example 1, you can press the button, then quit straight away,
> and you have control at the console. That makes me think that
> wait can be interrupted by a 'quit event (or something like that).
>
> In example 2, you press the button, it should wait forever right?
> No, the window is still receiving events. You can move the mouse
> over and away from the button and it reacts, the close button
> works too. I think wait listens to the window events.
>
> I think example 2 is an example you should never try to implement
> in your program, because you are trying to block window events ;)
>
> Anyway, I recommend, in your code below, that you use 'rate 1...
> First I think something like this:
>
> do-it?: no
> view layout [
>     button "L" 16x16 [do-it?: yes]
>         rate 1 feel [engage: func [face event action][
>             if event = 'time [print if do-it? ["show"]]
>         ]
>     ]
> ]
>
> but I have killed button's nice and useful feel function
> that listens to me when I click mouse on it etc...
>
> So I get the button style code like this:
>
>   probe get-style 'button
>
> Copy and paste the code inside:
>
>   feel: make object! [  ... get this code here ... ]
>
> And this monster of a hack is what I end up with:
>
> do-it?: no
> view layout [
>     button "L" 16x16 [print "hello" do-it?: yes]
>         rate 1 feel [
>         redraw: func [face act pos /local state][
>             face/edge/effect: pick [ibevel bevel] face/state
>             if face/texts [face/text: face/texts/1]
>             all [face/state face/texts face/text: any [face/texts/2
> face/texts/1]]
>             state: either not face/state [face/blinker] [true]
>             if face/colors [face/color: pick face/colors not state]
>             if face/effects [face/effect: pick face/effects not state]
>         ]
>         detect: none
>         over: func [face action event][
>             if all [face/font face/font/colors] [
>                 face/font/color: pick face/font/colors not action
>                 show face
>                 face/font/color: first face/font/colors
>             ]
>         ]
>         engage: func [face action event][
>             switch action [
>                 time [
>                     print if do-it? ["show"] ; <-- this is our addition
>                     if not face/state [face/blinker: not face/blinker]
>                 ]
>                 down [face/state: on]
>                 alt-down [face/state: on]
>                 up [if face/state [do-face face none] face/state: off]
>                 alt-up [if face/state [do-face-alt face none] face/state:
> off]
>                 over [face/state: on]
>                 away [face/state: off]
>             ]
>             cue face action
>             show face
>         ]
>         cue: none
>         blink: none
>     ]
> ]
>
> Notice the change inside the engage function...
>
> I hope this helps.
> Maybe someone can suggest a better way to insert that one
> line into the engage function.
>
> Actually, maybe I can do it.
>
> Do each line here as I have done.
> probe               get-style 'button
> probe        get in get-style 'button 'feel
> probe get in get in get-style 'button 'feel 'engage
>
> Engage is a function, so to get the function body, we use second:
>  probe second get in get in get-style 'button 'feel 'engage
>
> We are interested in the third item, ('switch is first, 'action second).
>  probe third second get in get in get-style 'button 'feel 'engage
>
> Finally, the 'time code is in here.
>  probe select third second get in get in get-style 'button 'feel 'engage
> 'time
>
> All we have to do is modify a copy of the button style.
> Petr Krenzelok showed us how to copy a style back in 14-Nov-2000,
> in rebol list.
>
> Err... I'm losing it... can't stay awake .. any longer...
>
> Anton.
>
> > IRSee now has an "Encrypted" white board.
> > Available at the LFReD rebsite (may require a reload) or below.
> > Special thanks to Mr. Kamp for the canvas.r pane.
> >
> > In theory, the "L" load button on the whiteboard canvas should
> > start a loop that
> > continuously refreshes the drawing, but it doesn't. Requires
> > hitting the "L" button again and again.
> > Any ideas?
> >
> > Terry Brownell
> >
> >
> > REBOL [
> >    Title: "LFReD IRSee"
> >    Author: "Terry Brownell"
> >    Email: [EMAIL PROTECTED]
> >    Date: 09-May-2001
> >    File: %IRSee.r
> >    History: [{
> >        Ver 1.4
> > Added encrypted white board.
> > Lowered encryption strength for foreign users.
> > Added encryption capabilities
> >
> >    }]
> > ]
> >
> > irc-in: http://216.232.249.87/cgi-bin/irc-in.LFReD?room=
> > irc-out: http://216.232.249.87/cgi-bin/irc-out.LFReD?
> > crypted: ftp://IRSee:[EMAIL PROTECTED]/crypt-chat/
> >
> > ;------ Encryption ---------------
> > key-maker: func [str][checksum/secure str]
> >
> > crypt: func [
> >         "Encrypts or decrypts with compression. Returns result."
> >         data [any-string!] "Data to encrypt or decrypt"
> >         akey [binary!] "The encryption key"
> >         /decrypt "Decrypt the data"
> >         /binary "Produce binary decryption result."
> >         /local port
> >     ][
> >         port: open [
> >             scheme: 'crypt
> >             direction: pick [encrypt decrypt] not decrypt
> >             key: akey
> >             padding: true
> >   strength: 'export
> >         ]
> >         if not decrypt [data: compress data]
> >         insert port data
> >         update port
> >         data: copy port
> >         close port
> >         if decrypt [data: decompress data]
> >         if not binary [data: to-string data]
> >     ]
> >
> >
> >
> > ;---------painter ---------------
> > ;Canvas.r script by Allen Kamp
> > draw-styles: stylize [
> >  canvas: image with [
> >   size: 100x100
> >   edge: [size: 2x2 effect: 'ibevel color: 110.120.130]
> >   color: ivory
> >   saved-area: none
> >   line: none
> >   reset: does [clear line append line compose [pen (pen) line]]
> >   set-pen: func [color][old-pen: pen pen: color
> >    if pen <> old-pen [append line compose [pen (pen) line]]
> >   ]
> >   pen: black
> >   old-pen: pen
> >   feel: make feel [
> >    engage: func [f a e] [
> >     if find [down over] a [
> >      append f/line e/offset - 2x2
> >      show f
> >     ]
> >     if a = 'up [append f/line [line]]
> >    ]
> >   ]
> >   words: [pen [new/pen: second args next args]]
> >   init: [
> >    if (1 >= length? self/effect) [
> >     self/effect: copy/deep compose/deep [draw [pen (self/pen) line]]
> >    ]
> >    self/line: second self/effect
> >   ]
> >  ]
> > ]
> >
> > set 'make-painter func [outersize][ the-key: key-maker key-string/text
> >  make face [
> >   cv: none
> >   edge: none
> >   pnl: none
> >   size: (outersize)
> >   color: rebolor
> >   pane: get in layout [
> >    styles draw-styles origin 0
> >    space 0x0
> >    across cv: canvas 304x276
> >    pnl: panel [
> >     style toggle toggle 16x16 red [cv/set-pen face/color] of 'cols
> >     origin 0
> >     size 22x272
> >     space 4x0 below
> >     toggle red
> >     toggle orange
> >     toggle yellow
> >      toggle black true
> >     toggle mint
> >     toggle olive
> >     toggle leaf
> >      toggle green
> >     toggle blue
> >      toggle sky
> >     toggle maroon
> >     toggle purple
> >     toggle pink
> >     toggle white
> >     button 16x16 "C" [cv/reset show cv]
> >     button 16x16 "S" [ the-pic: rejoin [crypted room/text
> > ".Lpic"] done: crypt mold cv/effect the-key save the-pic done]
> >     get-it: button "L" 16x16 [the-pic: rejoin [crypted room/text
> > ".Lpic"] forever      [wait 3
> >       cv/effect: load crypt/decrypt load the-pic the-key
> >      cv/line: second cv/effect
> >      show cv
> >      ;set pen to current col
> >      cv/set-pen none
> >      foreach tgl face/parent-face/pane [
> >       if all [tgl/style = 'toggle tgl/state][cv/set-pen tgl/color exit]]
> >      ]
> >     ]
> >    ]
> >   ] 'pane
> >  ]
> > ]
> > ;---------Main ---------------
> >
> > main: layout [
> > backdrop 103.134.170 effect [ grid 5x5 93.124.160 ]
> > origin 10x10
> > guide
> > h2 "LFReD IRSee"
> >
> > h4 "Chat Room" room: field "General" ivory 100
> > h4 "Name/Handle" handle: field "Handle" ivory 100
> > h4 "Encryption String" key-string: field ivory 100
> >
> > button "Enter" 100 93.124.160 75x25 [the-room: rejoin [irc-in
> > room/text] either empty? key-string/text
> > [the-room: rejoin [irc-in room/text]
> > forever [ m/text: copy read the-room show m wait 3]]
> > [the-key: key-maker key-string/text the-room: rejoin [crypted
> > room/text ".txt"]
> > if error? try [read/binary the-room][write the-room crypt rejoin
> > ["This is a previously unused room." newline] the-key]
> > forever [m/text: crypt/decrypt read/binary the-room the-key show
> > m wait 3]]
> > ]
> >
> > button "Quit" 100 93.124.160 75x25 [quit]
> >
> > button 100 93.124.160 75x25 "Submit" #"^M" [either empty?
key-string/text
> > [read rejoin [irc-out "said=" rejoin [handle/text ": "
> > message/text]"&room=" room/text]message/text: copy "" show
> > message focus message]
> >
> > [the-key: key-maker key-string/text the-room: rejoin [crypted
> > room/text ".txt"]
> >
> > the-whole: crypt/decrypt read/binary the-room the-key
> > coded1: rejoin [the-whole handle/text ": " message/text newline]
> > coded: crypt coded1 the-key
> > write/binary the-room coded
> >
> > message/text: copy "" show message focus message]
> > ]
> >
> > return
> >
> > pad 20
> > panels: box 320x276 coal
> >
> > across
> > m: info 420x150 ivory wrap
> >  across
> > s4: slider 14x150 93.124.160 [scroll-para m s4]
> > return
> > message: field {Type your message here and hit "Enter" or press
> > "Submit"} ivory 420
> >
> > ]
> >
> > m/text: {Welcome.^/IRSee is a chat/news and whiteboard
> > application, both of which are encrypted.^/^/Instructions:^/1.
> > Enter a room name.("General" is for public chat. Please leave
> > this room unencrypted)^/2. Enter your name or handle.^/3. Enter
> > an encryption string such as "The geese fly east". Send this
> > string and the room name to your comrades. (Leave the encryption
> > string blank to create a public room.)^/4. Click "Enter"^/^/Using
> > the Whiteboard^/Once you have created and entered a room, simply
> > make your drawing and save it by pressing "S". To re-load the
> > whiteboard press "R" and to clear press "C"^/^/Known bugs: Any
> > attempt to enter a previously created private room with the wrong
> > encryption string will crash the script.^/Attempting to load a
> > pic in a new room BEFORE saving one will crash the script as
> > well. These will be fixed sooner or later.}
> > panels/pane: make-painter 320x276
> > view main
>
> --
> To unsubscribe from this list, please send an email to
> [EMAIL PROTECTED] with "unsubscribe" in the
> subject, without the quotes.
>

-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to