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.