When working through MathLink with slave kernel I have a problem with correct parsing TextPackets. In particular when such packet corresponds to a Message generated by the slave kernel I do not understand how to handle it correctly at all. I need such Messages to be printed in the evaluation notebook as if they were generated by master kernel (but with some mark to make clear that it comes from the slave). And I need to separate TextPackets corresponding to Messages from just to Print[] commands. The latter I need to parse correctly too, printing them in the evaluation notebook with a little mark that it is from the slave kernel.
Here is an example of what happens:
link = LinkLaunch[First[$CommandLine] <> " -mathlink"]
Print@LinkRead[link]
LinkWrite[link,
Unevaluated[EnterExpressionPacket[Print[a]; 1/0; Print[b]]]]
While[Not@MatchQ[packet = LinkRead[link], InputNamePacket[_]],
Print[packet]]
The Message by default comes through MathLink in the form:
TextPacket[ 1
Power::infy: Infinite expression - encountered.
0]
It looks ugly. The only way to make it better I have found is to evaluate in the slave kernel
$MessagePrePrint = InputForm;
But I think there should be more straightforward solution. In particular when dealing this way I get TextPackets with HoldForms inside:
TextPacket[Power::infy: Infinite expression HoldForm[0^(-1)] encountered.]
I do not know how to convert such string into a form appropriate for printing as a Message.
P.S. This question comes from that question.