/* * TESTIPC ... #include #include #include extern int Enable_Abort; extern PORT *OpenIPC(); char **Av; short Ac; main(ac, av) char *av[]; { PORT *port; Av = av; Ac = ac; if (ac == 1) { puts("TESTIPC ... "); exit(1); } Enable_Abort = 0; if (openlibs(DRES_LIB) <= 0) { puts("Unable to open dres.library"); exit(1); } port = OpenIPC(av[1], 0); if (port == NULL) { puts("unable to open port"); closelibs(-1); exit(1); } printf("port: %08lx\n", port); { char apname[32]; long delay; char subname[32]; char text[64]; char tbuf[128]; IPCMSG msg; extern void handler(); BZero(&msg, sizeof(msg)); msg.Msg.mn_ReplyPort = CreatePort(NULL, 0); puts("scanf"); while (scanf("%s %ld %s %s", apname, &delay, subname, text) == 4) { printf("DO(%s %ld %s %s) ", apname, delay, subname, text); fflush(stdout); strcpy(tbuf, subname); strcpy(tbuf+strlen(subname)+1, text); msg.TBuf = (APTR)tbuf; msg.TLen = strlen(subname)+strlen(text)+2; DoIPC2(apname, &msg, handler, port); if (msg.RFlags & IF_NOTFND) { if (msg.RFlags & IF_NOAPP) puts("Application not found"); else puts("subname not found"); } else { if (msg.RFlags & IF_ERROR) printf("Error: %s\n", msg.RBuf); else printf("OK: %s\n", msg.RBuf); } FreeIPC(&msg); if (delay) Delay(delay); if (CheckPort(port)) handler(port); } DeletePort(msg.Msg.mn_ReplyPort); } CloseIPC(port); closelibs(-1); } void handler(port) PORT *port; { IPCMSG *msg; short i, j; while (msg = GetMsg(port)) { register char *ptr = (char *)msg->TBuf; printf("Received IPC command: %s ", ptr); for (j = 0; ptr[j] && ptr[j] != ' '; ++j); for (i = 2; i < Ac; ++i) { if (strlen(Av[i]) == j && strncmp(Av[i], ptr, j) == 0) break; } if (i < Ac) { puts("MATCH"); ReplyIPC(msg, "GotIt!", 7, 0); } else { puts("PASSED"); ReplyIPC(msg, "Failed", 7, IF_NOTFND); } } }