If I understand you correctly, you're saying that on executing this script, "using" (right-clicking) the attached monitor does not result in the computer printing "TOUCH" (or anything else, for that matter)? Just browsing the code, I confess I can't see how that would be the case...
The only obvious "error" that I'm seeing is line 60, which should be using "greater/lessor
or equal to" for its checks, like so:
if var_x >= var_buttonList[var_loop1][0] and var_y == var_buttonList[var_loop1][1] and var_x <= var_buttonList[var_loop1][2] then
But I'd still expect you to get some output regardless.
Some notes on yielding, which I feel may be relevant here:
When a computer/turtle starts running code, ComputerCraft starts a ~ten second timer. If that code doesn't yield before that timer ends then ComputerCraft will either crash the script or the whole computer (depending on the nature of the functions your script is calling). After each yield, any other systems waiting to run code may do so, then after they've all yielded, processing continues with a new time limit.
The reason why is that running your code chews up valuable server processing power, and so it shouldn't be able to monopolise it. In fact, only ONE CC device can run code at a time: While one is doing something, none of the others can do anything until it yields.
Whether or not it takes more than ten seconds for your code to execute has a little to do with the power of the Minecraft server it's running on, and a lot to do with how often you allow your code to yield. Pulling events (eg getting typed characters or checking timers) triggers a yield, and many commands (eg turtle movements, sleeping, or getting text input from the user) have to pull events to work anyway. Basically, anything that triggers a pause is pulling an event in order to do it, and in order to pull an event the code yields.
The two functions in the parallel API work by switching control between the functions you pass it whenever they yield (as need be). In your code, you've got two functions you're currently passing to parallel.waitForAll(): awaitTouch and mainProcess. awaitTouch spends most of its time yielding, waiting for monitor touch events. mainProcess, on the other hand, never yields; instead, it performs all the work it has to do, and then
completes. You could achieve the exact same result by simply calling mainProcess and then awaitTouch directly after it - there's no need to use the parallel API here at all. Your current calling process should indeed work as-is, it's simply making a redundant step.
(Mind you, if you'd used parallel.waitFor
Any(), then that'd result in your script terminating nearly instantly, as mainProcess() completes within an instant...)