home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 332.lha / IPC_nov89 / Sources / Quit.c < prev    next >
C/C++ Source or Header  |  1990-01-09  |  3KB  |  94 lines

  1. /************************************************************
  2.  *                                                          *
  3.  *                IPC "QUIT" Requestor                      *
  4.  *                                                          *
  5.  *                Pete Goodeve 89:4:01                      *
  6.  *                                                          *
  7.  *  [This module has only been compiled under Lattice;      *
  8.  *   it will need some modification for Manx/Aztec;         *
  9.  *   ... I'd be very grateful if someone would do the       *
  10.  *   conversion...]                                         *
  11.  *                                                          *
  12.  *                                                          *
  13.  *  Invoke from the CLI with the required port names as     *
  14.  *  arguments (remember case is important).  A simple       *
  15.  *  QUIT message (no optional items) will be sent to each   *
  16.  *  in turn.                                                *
  17.  *                                                          *
  18.  ************************************************************/
  19.  
  20.  
  21.  
  22. #ifdef LATTICE
  23. #if LATTICE_40 | LATTICE_50
  24. #include "IPC_proto.h"
  25. /* ...else (not recent Lattice) will need library linkage stubs (IPC.o) */
  26. #include <proto/exec.h>
  27. #endif
  28. #endif
  29.  
  30. #include "IPC.h"
  31.  
  32. /*
  33.  *  Define the ID codes recognized by the print format server
  34.  *
  35.  *  (MAKE_ID is defined in IPC.h)
  36.  */
  37.  
  38. /* Message IDs: */
  39. #define QUIT  MAKE_ID('Q','U','I','T')
  40.  
  41.  
  42. struct Library * IPCBase = NULL;
  43.  
  44. struct IPCPort *port=NULL; /* will point to server port */
  45. struct MsgPort *rport=NULL; /* where we get our replies */
  46. struct IPCMessage *imsg=NULL; /* this one message is used repeatedly */
  47.  
  48. void Cleanup();
  49.  
  50. void main(argc,argv) char **argv;
  51. {
  52.     /* Before anything else, we need the IPC Library: */
  53.     IPCBase = OpenLibrary("ppipc.library",0);
  54.     if (!IPCBase)
  55.         exit(20);
  56.  
  57.     /* First we set up a reply port: */
  58.  
  59.     rport = CreatePort(NULL,0);
  60.     if (!rport) {
  61.         Cleanup();
  62.         exit(21);
  63.     }
  64.  
  65.  
  66.     /* ... then make a message block */
  67.     imsg = CreateIPCMsg(0,0,rport);
  68.     if (!imsg) {Cleanup(); exit(22);}
  69.     imsg->ipc_Id = QUIT;
  70.  
  71.  
  72.     /* then send a QUIT to every port in the command line: */
  73.     argv++;
  74.     while(--argc > 0) {
  75.         port = GetIPCPort(*argv);
  76.         if (!port) continue; /* ignore unrecognized arguments */
  77.         if (PutIPCMsg(port, imsg)) {
  78.             WaitPort(rport);
  79.             GetMsg(rport);
  80.         }
  81.         DropIPCPort(port);
  82.         argv++;
  83.     }
  84.     Cleanup();
  85. }
  86.  
  87. void Cleanup()
  88. {
  89.     if (rport) DeletePort(rport);
  90.     if (imsg) DeleteIPCMsg(imsg);
  91.     CloseLibrary(IPCBase);
  92. }
  93.  
  94.