home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * TESTIPC <appname> <file> <file> <file> ... <inputfile
- *
- * input file format:
- *
- * appname delay file text
- *
- */
-
- #include <local/typedefs.h>
- #include <local/ipc.h>
- #include <local/xmisc.h>
- #include <stdio.h>
-
- 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 <appname> <subname> ... <subname> <inputfile");
- puts("input file format:");
- puts("<appname> <delay-1/50ths> <subname> <text>");
- 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);
- }
- }
- }
-
-