#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/neutrino.h>
#include <process.h>
#include <string.h>

int main(int argc, char *argv[]) {
    const char *MODULE_3_PATH = "/home/host/m3/x86/o/m3";

    char *pnum = argv[2];
    char pname[10];
    sprintf(pname, "P%s", pnum);

    int grandparentChid = atoi(argv[1]);

    int chid = ChannelCreate(0);
    printf("%s running with chid = %d\n", pname, chid);

    char buffer[20];
    char *strChid = itoa(chid, buffer, 10);

    int childPid = spawnl(P_NOWAIT, MODULE_3_PATH, MODULE_3_PATH, strChid, argv[2], NULL);
    if (childPid < 0)
        printf("%s1 spawn error\n", pname);

    int rcvid = -1;
    char msg[512];
    _msg_info info;

    int replyMsg[2];
    replyMsg[0] = grandparentChid;
    replyMsg[1] = getppid();

    while (rcvid == -1) {
        rcvid = MsgReceive(chid, msg, sizeof(msg), &info);
        if (rcvid == -1)
            printf("%s msg receive error\n", pname);
        else
            printf("%s\n", msg);
        MsgReply(rcvid, 0, replyMsg, sizeof(replyMsg));
    }

    printf("%s OK\n", pname);
    return EXIT_SUCCESS;
}
