home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 22 / AACD 22.iso / AACD / Programming / RMH / Examples / nsfather.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  2001-05-24  |  1.4 KB  |  86 lines

  1. /*
  2. ** NamedSpace & MacroNotify
  3. ** Father Macro:
  4. ** set up a named space
  5. ** Runs 10 children macros, waits 10 seconds and exists
  6. **
  7. **/
  8.  
  9. signal on halt
  10. signal on break_c
  11.  
  12. l="rmh.library";if ~show("L",l) then;if ~addlib(l,0,-30) then exit
  13.  
  14. call MacroEnv("env")
  15.  
  16. name=pragma("ID")
  17. mns=MacroNotifyCreate(name)
  18. if mns=0 then do
  19.     call info "Can't create MacroNotify"
  20.     exit
  21. end
  22.  
  23. res=NamedSpaceCreate(name)
  24. if res>0 then do
  25.     call info "Can't create NamedSpace"
  26.     exit
  27. end
  28. do i=0 to 9
  29.     var.i="Ciao" i
  30. end
  31. call NamedSpaceExport(name,"var")
  32.  
  33. tim=CreateTimer()
  34. ts=TimerSignal(tim)
  35. ctrL_c=2**12
  36. mask=or(mns,ts,ctrl_c)
  37.  
  38. call StartTimer(tim,10)
  39.  
  40. m=0
  41. do forever
  42.  
  43.     if m<9 then do
  44.         call RxsCall("nschild" name m)
  45.         m=m+1
  46.     end
  47.  
  48.     recv=Wait(mask)
  49.  
  50.     if and(recv,ctrl_c)>0 then do
  51.         call info "interrupted"
  52.         exit
  53.     end
  54.  
  55.     if and(recv,ts)>0 then do
  56.         call info "timeout"
  57.         exit
  58.     end
  59.  
  60.     if and(recv,mns)>0 then call HandleMacroNotify
  61. end
  62. /* never reached */
  63.  
  64. HandleMacroNotify:
  65.     do forever
  66.         ev=MacroNotifyGetEvent(name)
  67.         if ev="" then return
  68.         parse var ev ev id more
  69.         select
  70.             when ev="STARTED" then call info "Macro" id "started"
  71.             when ev="ENDED" then call info "Macro" id "exited"
  72.             otherwise nop
  73.         end
  74.     end
  75.     /* never reached */
  76.  
  77. info:
  78. parse arg msg
  79.     say env.prg":" msg
  80.     return
  81.  
  82. break_c:
  83. halt:
  84.     call info "interrupted"
  85.     exit
  86.