User Interface, Using A buffer with a module

No experience with software serial but I'm sure you can use the same principles from the Serial Input Basics thread. I also have no idea about GSM shields but I guess they

Using approach 2,
Mega receives from PS2
Mega sends to Uno
Uno sends to GSM shield
GSM shield sends to UNO
UNO sends status to Mega (success or failure).
Mega displays status

Note that if you have multiple communication paths (e.g. hardware serial and software serial), you basically need to implement buffers ('receivedChars'), flags ('newData') and functions (rcvWithEndMarker') for each of them.