home *** CD-ROM | disk | FTP | other *** search
- /* roscli.c
- * Roscli source file
- * (c) Chris Rutter 1997
- * Substantially messed about and unixified - CRJ, 7/12/97
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
-
- static void appendstr(char **sptr, char *str) {
- int l=strlen(str);
- memcpy(*sptr, str, l);
- *sptr+=l;
- }
-
- static void appendchar(char **sptr, char c) {
- *(*sptr)++=c;
- }
-
- int main (int argc, char *argv[])
- {
- int sock;
- int argp=1;
- struct hostent *hostaddr;
- struct sockaddr_in addr;
- char *arg0=argv[0];
- char *host; /* Host name */
- char command[256], *cend=command; /* Command buffer and end pointer */
-
- argv++; argc--; /* Skip argv[0] */
-
- if (*argv && strcmp(*argv,"-wimp")==0) {
- appendstr(&cend, "OscliD_Task ");
- argv++; argc--;
- }
-
- if (argc < 2)
- {
- fprintf(stderr, "Syntax: %s [-wimp] host command...\n", arg0);
- exit (1);
- }
-
- host=*argv++; argc--;
-
- while (argc) {
- appendstr(&cend, *argv);
- appendchar(&cend, ' ');
- argv++; argc--;
- }
-
- cend[-1]='\0'; /* Turn the final space into a terminating null */
-
- if ((hostaddr = gethostbyname (host)) == NULL)
- {
- fprintf(stderr, "%s: failed to resolve %s.\n", arg0, host);
- exit (1);
- }
-
- memset(&addr, '\0', sizeof(addr));
- addr.sin_family = AF_INET;
- addr.sin_port = htons (8805);
- memcpy (&addr.sin_addr, hostaddr->h_addr, hostaddr->h_length);
-
- sock = socket(AF_INET, SOCK_DGRAM, 0);
-
- setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, &argp, sizeof argp);
-
- sendto (sock, command, cend-command, 0x00, &addr, sizeof (addr));
-
- }
-