Home | History | Annotate | Download | only in ss
      1 /*
      2  * test_ss.c
      3  *
      4  * Copyright 1987, 1988 by MIT Student Information Processing Board
      5  *
      6  * Permission to use, copy, modify, and distribute this software and
      7  * its documentation for any purpose is hereby granted, provided that
      8  * the names of M.I.T. and the M.I.T. S.I.P.B. not be used in
      9  * advertising or publicity pertaining to distribution of the software
     10  * without specific, written prior permission.  M.I.T. and the
     11  * M.I.T. S.I.P.B. make no representations about the suitability of
     12  * this software for any purpose.  It is provided "as is" without
     13  * express or implied warranty.
     14 
     15  */
     16 
     17 #include <unistd.h>
     18 #include <stdlib.h>
     19 #include <stdio.h>
     20 #ifdef HAVE_GETOPT_H
     21 #include <getopt.h>
     22 #endif
     23 #include <string.h>
     24 #include "ss.h"
     25 
     26 extern ss_request_table test_cmds;
     27 
     28 #define TRUE 1
     29 #define FALSE 0
     30 
     31 static char subsystem_name[] = "test_ss";
     32 static char version[] = "1.0";
     33 
     34 static int source_file(const char *cmd_file, int sci_idx)
     35 {
     36 	FILE		*f;
     37 	char		buf[256];
     38 	char		*cp;
     39 	int		exit_status = 0;
     40 	int		retval;
     41 	int 		noecho;
     42 
     43 	if (strcmp(cmd_file, "-") == 0)
     44 		f = stdin;
     45 	else {
     46 		f = fopen(cmd_file, "r");
     47 		if (!f) {
     48 			perror(cmd_file);
     49 			exit(1);
     50 		}
     51 	}
     52 	setbuf(stdout, NULL);
     53 	setbuf(stderr, NULL);
     54 	while (!feof(f)) {
     55 		if (fgets(buf, sizeof(buf), f) == NULL)
     56 			break;
     57 		if (buf[0] == '#')
     58 			continue;
     59 		noecho = 0;
     60 		if (buf[0] == '-') {
     61 			noecho = 1;
     62 			buf[0] = ' ';
     63 		}
     64 		cp = strchr(buf, '\n');
     65 		if (cp)
     66 			*cp = 0;
     67 		cp = strchr(buf, '\r');
     68 		if (cp)
     69 			*cp = 0;
     70 		if (!noecho)
     71 			printf("test_icount: %s\n", buf);
     72 		retval = ss_execute_line(sci_idx, buf);
     73 		if (retval) {
     74 			ss_perror(sci_idx, retval, buf);
     75 			exit_status++;
     76 		}
     77 	}
     78 	return exit_status;
     79 }
     80 
     81 int main(int argc, char **argv)
     82 {
     83 	int c, code;
     84 	char *request = (char *)NULL;
     85 	char		*cmd_file = 0;
     86 	int sci_idx;
     87 	int exit_status = 0;
     88 	const char	*usage = "Usage: test_ss [-R request] [-f cmd_file]";
     89 
     90 	while ((c = getopt (argc, argv, "wR:f:")) != EOF) {
     91 		switch (c) {
     92 		case 'R':
     93 			request = optarg;
     94 			break;
     95 		case 'f':
     96 			cmd_file = optarg;
     97 			break;
     98 		default:
     99 			com_err(argv[0], 0, usage);
    100 			exit(1);
    101 		}
    102 	}
    103 
    104 	sci_idx = ss_create_invocation(subsystem_name, version,
    105 				       (char *)NULL, &test_cmds, &code);
    106 	if (code) {
    107 		ss_perror(sci_idx, code, "creating invocation");
    108 		exit(1);
    109 	}
    110 
    111 	(void) ss_add_request_table (sci_idx, &ss_std_requests, 1, &code);
    112 	if (code) {
    113 		ss_perror (sci_idx, code, "adding standard requests");
    114 		exit (1);
    115 	}
    116 
    117 	printf("test_ss %s.  Type '?' for a list of commands.\n\n",
    118 	       version);
    119 
    120 	if (request) {
    121 		code = ss_execute_line(sci_idx, request);
    122 		if (code) {
    123 			ss_perror(sci_idx, code, request);
    124 			exit_status++;
    125 		}
    126 	} else if (cmd_file) {
    127 		exit_status = source_file(cmd_file, sci_idx);
    128 	} else {
    129 		ss_listen(sci_idx);
    130 	}
    131 
    132 	exit(exit_status);
    133 }
    134 
    135 
    136 void test_cmd (argc, argv)
    137     int argc;
    138     char **argv;
    139 {
    140     printf("Hello, world!\n");
    141     printf("Args: ");
    142     while (++argv, --argc) {
    143 	printf("'%s'", *argv);
    144 	if (argc > 1)
    145 	    fputs(", ", stdout);
    146     }
    147     putchar ('\n');
    148 }
    149