home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / programs / programming / osclid / roscli / Unix / roscli_c
Encoding:
Text File  |  1997-12-07  |  1.6 KB  |  76 lines

  1. /* roscli.c
  2.  * Roscli source file
  3.  * (c) Chris Rutter 1997
  4.  * Substantially messed about and unixified - CRJ, 7/12/97
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <sys/types.h>
  11. #include <sys/socket.h>
  12. #include <netinet/in.h>
  13. #include <netdb.h>
  14.  
  15. static void appendstr(char **sptr, char *str) {
  16.   int l=strlen(str);
  17.   memcpy(*sptr, str, l);
  18.   *sptr+=l;
  19. }
  20.  
  21. static void appendchar(char **sptr, char c) {
  22.   *(*sptr)++=c;
  23. }
  24.  
  25. int main (int argc, char *argv[])
  26. {
  27.         int sock;
  28.     int argp=1;
  29.     struct hostent *hostaddr;
  30.     struct sockaddr_in addr;
  31.     char *arg0=argv[0];
  32.     char *host; /* Host name */
  33.     char command[256], *cend=command; /* Command buffer and end pointer */
  34.  
  35.     argv++; argc--; /* Skip argv[0] */
  36.  
  37.     if (*argv && strcmp(*argv,"-wimp")==0) {
  38.       appendstr(&cend, "OscliD_Task ");
  39.       argv++; argc--;
  40.     }
  41.       
  42.     if (argc < 2)
  43.     {
  44.         fprintf(stderr, "Syntax: %s [-wimp] host command...\n", arg0);
  45.         exit (1);
  46.     }
  47.  
  48.     host=*argv++; argc--;
  49.  
  50.     while (argc) {
  51.       appendstr(&cend, *argv);
  52.       appendchar(&cend, ' ');
  53.       argv++; argc--;
  54.     }
  55.  
  56.     cend[-1]='\0'; /* Turn the final space into a terminating null */
  57.  
  58.     if ((hostaddr = gethostbyname (host)) == NULL)
  59.     {
  60.         fprintf(stderr, "%s: failed to resolve %s.\n", arg0, host);
  61.         exit (1);
  62.     }
  63.  
  64.     memset(&addr, '\0', sizeof(addr));
  65.      addr.sin_family = AF_INET;
  66.      addr.sin_port = htons (8805);
  67.      memcpy (&addr.sin_addr, hostaddr->h_addr, hostaddr->h_length);
  68.  
  69.     sock = socket(AF_INET, SOCK_DGRAM, 0);
  70.  
  71.     setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, &argp, sizeof argp);
  72.  
  73.     sendto (sock, command, cend-command, 0x00, &addr, sizeof (addr));
  74.  
  75. }
  76.