Hi Raul,

I haven't used Test or If Empy, but I can help with the rest.  Here's a prototype example of subroutines:

wait for: and so it begins
subroutine: $ALPHA
subroutine: $BETA
notify: Success...
exit

$ALPHA:
wait for: some junk
send: some other junk
return

$BETA:
wait for: some other other junk
send: junk completion
return

Here's a working example that uses a timer, on error,  and goto statements to answer repeated OK? N=> prompts with Y.  When the questions stop the timer runs down and the script terminates.

$looper:

on error: $terminate
timer: 100
wait for: OK? N=>
goto $prompted
goto $terminate

$prompted:
timer: 0
send: Y<CR>
goto: $looper

$terminate:
Exit

The real key when working with scripts is to only expect them to do exactly as told.  I remind myself constantly that the scripting language is only minorly dynamic and that I cannot treat it as a programming language.

John

What about something like Syncthing?  I use it to keep company files mirrored & backed up.  It's the same technology as BitTorrent Sync.  I avoid BitTorrent sync intentionally to prevent my data from going through their servers.

I did once use Syncthing to perform a Windows file server migration from a Win 2K server to an Isilon.  Most/Many/All of the users used different combinations of mapped drives, network locations, and shortcuts.  I used Syncthing to mirror the data between the two locations while I was able to migrate the users over time and normalize the methods they used to access files.

Depending on the amount of data this may not be a viable solution for you.  

Depending upon your version of Caché you may also have the %SYSTEM.WorkMgr and %SYSTEM.WorkMgrIPQ classes available to use.  In WorkMgr child jobs on their own can write back to the parent processes main device so it isn't quite IPC in the sense that you're likely used to.  However, it does make multithreading a job a bit easier than spawning children and then monitoring them.  I've not used the WorkMgrIPQ class myself (at least, not yet) but the class documentation is closer to IPC in that structured data can be sent back to the parent/host process.

My method for dealing with the pop-up boxes is to not deal with them at all.

In IDXTerm, under the Edit menu select 'User Settings'.  In the window that appears change the 'Terminal Type' from "IDXTerm" to "Plain".  Click Save and Apply and start up a new session for good measure.

Changing this setting will prevent IDXTerm from responding to the extended control character sequences.  Anything that would have been displayed in a pop-up window will now be displayed in the terminal area itself, which will make it an easy target of the IDXTerm scripting language.

My experience has been that changing this setting makes IDXTerm scripting infinitely more useful for repetitive tasks.

Best of luck!

John