<Message did not seem to arrive, 2nd attempt...>

Dear All,

>This is a long desired feature - currently only available using server-side
>Lingo and the Multiuser Server.  Best approach (sloppy but it works) is to
>have each handler post their symbol (or other ID) to a global variable when
>they start running:
>
>on yourHandler ...
>   gCurrentHandler = #yourHandler
>   -- actual code goes here
>end yourHandler

Indeed a very desired feature, and so I have decided to let lingo 
generate those scripting additions rather then typing it manually 
into each handler... the addHandler will add a line to each script 
regsitrating its names, all sent variable names and their values in a 
global string to use at the alerthook:

----------------------------------------------------

on addHandlerRegistration
   temp=the itemdelimiter
   the itemdelimiter=","

   repeat with c=1 to the number of castlibs
     repeat with m=1 to the number of members of castlib c
       mem=member(m,c)

       if mem.type=#script then

         t=mem.scriptText
         memnam=mem.name
         if memnam="" then memnam = string(mem)
        
         repeat with l = 1 to t.line.count
           th=t.line[l]
          
           if th starts "on " then
             if offset("(",th)<>0 then put space into char 
(offset("(",th)) of th
             if offset(")",th)<>0 then put space into char 
(offset(")",th)) of th
             nam=th.word[2]
             if nam="addHandlerRegistration" or 
nam="removeHandlerRegistration" or nam="regisrateHandler" or 
nam="getPropertyDescriptionList" or memnam="show error" or 
nam="alertHook" then next repeat
             rest=th.word[3..th.word.count]
             if rest starts "--" then rest = ""
             if offset("--",rest)<>0 then 
rest=rest.char[1..(offset("--",rest)-1)]
             varstr=""
             repeat with v=1 to rest.item.count
               if rest="" then exit repeat
               var=rest.item[v]
               repeat while var.char[1]=" "
                 delete char 1 of var
               end repeat
               varstr=varstr&quote&var&&" = "&&quote&"&string("&var&")&return"
               if v<>rest.item.count then varstr=varstr&"&"
             end repeat
            
             isvars=""
             if varstr<>"" then isvars=","&varstr
 
zin="regisrateHandler("&quote&nam&quote&","&quote&memnam&quote&isvars&")"
            
             if t.line[l+1] starts "regisrateHandler" then
               put zin into line[l+1] of t
             else
               if t.line[l+1]<>zin then put return&zin after line l of t   
             end if
            
           end if
         end repeat
        
         mem.scriptText=t
       end if
     end repeat -- members
   end repeat -- castlibs

   the itemdelimiter=temp
end

------- to clean the program after debugging

on removeHandlerRegistration
   repeat with c=1 to the number of castlibs
     repeat with m=1 to the number of members of castlib c
       mem=member(m,c)
       if mem.type=#script then  
         t=mem.scriptText
         if not (t contains "regisrateHandler") then next repeat
         repeat with l = 1 to (t.line.count-1)   
           th=t.line[l+1]
           repeat while th.char[1]=space
             delete char 1 of th
           end repeat
           ch=th.char[1..16]
           if ch="regisrateHandler" then
             delete line (l+1) of t
           end if
         end repeat
         mem.scriptText=t
       end if
     end repeat
   end repeat
end

-------- this is the registering handler itself, being called from 
each handler at runtime

on regisrateHandler nam, mem, vars
   global continueRegistrating
   if not continueRegistrating then exit
   global ErrorString
   ErrorString="handler "&nam&" of member "&mem&":"&return&return&Vars
end

--------

on alertHook me, err, msg
   global continueRegistrating
   continueRegistrating=0 -- making sure registration stops after the error
   errorReport=err&return&msg&return&ErrorString
   -- here you can do whatever you wish with the resulting error string
end

---------------------------------------------------

it does work wonderfully, even if slowing the application quite a 
bit. another option is to add a first line to scripts that should not 
be marked for registration, either because they happen to often and 
therefore will slow the whole too much, or simply if they are not 
likely to produce an error.

I wonder if macromedia is working on lingo tools for shockwave 
debugging at all. these seem quite nesseccary considering the amount 
of time it takes to trace a simple bug in such a 'minimal feedback' 
environment.

Best Regards to all,

Enjoy,

Yariv Alter Fin


[To remove yourself from this list, or to change to digest mode, go to
http://www.penworks.com/LUJ/lingo-l.cgi  To post messages to the list,
email [EMAIL PROTECTED]  (Problems, email [EMAIL PROTECTED])
Lingo-L is for learning and helping with programming Lingo.  Thanks!]

Reply via email to