been quite busy for a while, first time on here, or even thinking about minecraft, in over a month... not sure I'll be particularly active in the immediate future either. While I'm here...
Fenthis: You can call addEventHandler functions to handle ANY events, not just ggui-specific events. For example, the login sample program has this listener line:
guiScreen.addEventHandler( {"button_activate", guiScreen.id, loginButton} , onLogin )
which calls the onLogin function (defined in the example) when an event "button_activate" occurs, where it's first argument equals guiScreen.id (the id of the screen) and the second argument is loginButton, the id of the login button. You could just as easily do something like this:
local onRednetMessage(event,modemSide, senderChannel, replyChannel, message, senderDistance)
--//yer code here
end
guiScreen.addEventHandler( {"modem_message" } , onRednetMessage )
This would cause onRednetMessage to be called every time a modem_message event occurs. This can also be used with any custom event types, sent by your code or other APIs using os.queueEvent(). Thanks to this system, many common things you might be tempted to do with coroutines, you can do without coroutines, using only event handlers. (my past APIs and programs had been rather coroutine-heavy, something I made a deliberate effort to move away from with the ggui api, because coroutines are resource-intensive in luaj)
If you do have background coroutines, I can't think of any reason that any number of coroutines can't modify the ggui at the same time, as long as they have a way to access the same gui objects, which they should if the coroutines are defined in the same program.