RE: [REBOL] Re: 'do - question

Hi Andreas,
was in translations mood yesterday.
script %launch-by-do.r below.
complete (german) "ide" in "volker"-rebsite.

[EMAIL PROTECTED] wrote:
> 
> 
> Thanks Volker, Thanks Andrew!
> 
> Sunday, November 11, 2001, 5:55:38 AM, nitsch-lists wrote:
> 
> > carl suggested something like
> >>> catch/name[throw/name "goodbye" 'quit] 'quit      
> > == "goodbye"
> 
> > real-quit: :quit
> > quit: [throw/name 'quit]
> > catch/name[unview/all do your-file] 'quit]
> 
> That's exactly with what I've come up yesterday night. As I know that
> the script I call does not use any unnamed catch, it does work fine ;)
> 
> > you should also catch errors, reset directory and figure out if you
> > need some unview/all to stop event-loop.
> 
> > i have an extended version for that in my ide, runs some unprepared
> > foreign scripts well. but german yet..
> 
> hmm, german would be no problem, as this is my native language ;)
> 
> -- 
> Best regards,
>  Andreas                            mailto:[EMAIL PROTECTED]
> 
REBOL [
        title: "launch-by-do"
        file: %launch-by-do.r
        purpose: {
 if one wants to start other scripts while launch disabled,
 this script may help.
 it starts them with do, but sets some stuff
 so when script terminate the launcher continues.
 mostly it patches quit. 
 be carefull because these scripts run with launchers security-settings.
}
        features: {
 * 'quit is "redirected" to throw/name 'quit 'quit,
   so the usual quit-button returns. 
   except there is an unnamed catch around..
 * uses some unview/all
   view behaves differently if there is a window open.
   with no window open it blocks with do-events, 
   with some it continues.
   scripts which rely on blocking should be started without windows open..
 * saves and resets directory
 * has special protect-system.
   protects only up to a specified word.
   replace 'rebsite-ed there with the first word you define,
   that and everything loaded later will not be protected.
   allows for test scripts with protect-system twice in the same exe.
 * saves and restores system/view/screen-face/pane, 
   after closing all windows and doing the script the old windows
   appear magically.
 * has some requesters: informs about termination by 
   error, quit or throw. search for 'alert and 'confirm to change them.
}
]
;do/args %build-pack.r 'test

demo: does [
        ; set to true if to disable "trusted?"-question.
        debug-in-exe: false
        ; set to something which forms an error, like Bo's print-error. 
        form-error: :mold
        ;launch %pad.r
        set-launch-by-do
        launch [quit] ;we can launch blocks now, side-effect
        ;launch %pad.r
]
set-launch-by-do: func [] [
        if not native? :launch [
                unprotect 'protect-system
                protect-system: does [
                        foreach word first system/words [
                                if 'rebsite-ed = word [break]
                                if value? word [protect word]
                        ]
                ]
                unprotect 'launch
                launch: func [arg /secure-cmd
                        /local got-error thrown system-worte debug-quit
                        sf sf-bak system-quit my-dir set-back
                ] [
                        set-back: does [
                                unprotect 'quit
                                quit: :system-quit
                                change-dir my-dir
                        ]
                        sf-bak: copy system/view/screen-face/pane
                        if any [debug-in-exe confirm reform [
                                        "OOPS! file gets executed with 'do !"
                                        "security risk. really?"
                                ]
                        ] [
                                unprotect 'quit
                                system-quit: :quit
                                if thrown: catch [
                                        unview/all
                                        quit: func [[catch]] [
                                                unview/all
                                                throw/name 'quit 'quit
                                        ]
                                        my-dir: what-dir
                                        if error? got-error: try [
                                                do arg none
                                        ] [
                                                alert probe form-error disarm got-error
                                        ]
                                        none
                                ] [
                                        if not confirm probe reform [
                                                "there was" mold :thrown "thrown"
                                                "continue debugging?"
                                        ] [set-back quit]
                                ]
                                set-back unview/all
                                ;view/new -> no hotkeys.. needs hacking
                                sf: system/view/screen-face
                                sf/pane: sf-bak
                                show sf
                        ]
                ]
        ]
]
demo
 
-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to