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 "config.h"
     18 #include <unistd.h>
     19 #include <stdlib.h>
     20 #include <stdio.h>
     21 #ifdef HAVE_GETOPT_H
     22 #include <getopt.h>
     23 #endif
     24 #include <string.h>
     25 #include "ss.h"
     26 
     27 extern ss_request_table test_cmds;
     28 
     29 #define TRUE 1
     30 #define FALSE 0
     31 
     32 static char subsystem_name[] = "test_ss";
     33 static char version[] = "1.0";
     34 
     35 static int source_file(const char *cmd_file, int sci_idx)
     36 {
     37 	FILE		*f;
     38 	char		buf[256];
     39 	char		*cp;
     40 	int		exit_status = 0;
     41 	int		retval;
     42 	int 		noecho;
     43 
     44 	if (strcmp(cmd_file, "-") == 0)
     45 		f = stdin;
     46 	else {
     47 		f = fopen(cmd_file, "r");
     48 		if (!f) {
     49 			perror(cmd_file);
     50 			exit(1);
     51 		}
     52 	}
     53 	fflush(stdout);
     54 	fflush(stderr);
     55 	setbuf(stdout, NULL);
     56 	setbuf(stderr, NULL);
     57 	while (!feof(f)) {
     58 		if (fgets(buf, sizeof(buf), f) == NULL)
     59 			break;
     60 		if (buf[0] == '#')
     61 			continue;
     62 		noecho = 0;
     63 		if (buf[0] == '-') {
     64 			noecho = 1;
     65 			buf[0] = ' ';
     66 		}
     67 		cp = strchr(buf, '\n');
     68 		if (cp)
     69 			*cp = 0;
     70 		cp = strchr(buf, '\r');
     71 		if (cp)
     72 			*cp = 0;
     73 		if (!noecho)
     74 			printf("test_icount: %s\n", buf);
     75 		retval = ss_execute_line(sci_idx, buf);
     76 		if (retval) {
     77 			ss_perror(sci_idx, retval, buf);
     78 			exit_status++;
     79 		}
     80 	}
     81 	return exit_status;
     82 }
     83 
     84 int main(int argc, char **argv)
     85 {
     86 	int c, code;
     87 	char *request = (char *)NULL;
     88 	char		*cmd_file = 0;
     89 	int sci_idx;
     90 	int exit_status = 0;
     91 
     92 	while ((c = getopt (argc, argv, "wR:f:")) != EOF) {
     93 		switch (c) {
     94 		case 'R':
     95 			request = optarg;
     96 			break;
     97 		case 'f':
     98 			cmd_file = optarg;
     99 			break;
    100 		default:
    101 			com_err(argv[0], 0, "Usage: test_ss [-R request] "
    102 				"[-f cmd_file]");
    103 			exit(1);
    104 		}
    105 	}
    106 
    107 	sci_idx = ss_create_invocation(subsystem_name, version,
    108 				       (char *)NULL, &test_cmds, &code);
    109 	if (code) {
    110 		ss_perror(sci_idx, code, "creating invocation");
    111 		exit(1);
    112 	}
    113 
    114 	(void) ss_add_request_table (sci_idx, &ss_std_requests, 1, &code);
    115 	if (code) {
    116 		ss_perror (sci_idx, code, "adding standard requests");
    117 		exit (1);
    118 	}
    119 
    120 	printf("test_ss %s.  Type '?' for a list of commands.\n\n",
    121 	       version);
    122 
    123 	if (request) {
    124 		code = ss_execute_line(sci_idx, request);
    125 		if (code) {
    126 			ss_perror(sci_idx, code, request);
    127 			exit_status++;
    128 		}
    129 	} else if (cmd_file) {
    130 		exit_status = source_file(cmd_file, sci_idx);
    131 	} else {
    132 		ss_listen(sci_idx);
    133 	}
    134 
    135 	exit(exit_status);
    136 }
    137 
    138 
    139 void test_cmd (argc, argv)
    140     int argc;
    141     char **argv;
    142 {
    143     printf("Hello, world!\n");
    144     printf("Args: ");
    145     while (++argv, --argc) {
    146 	printf("'%s'", *argv);
    147 	if (argc > 1)
    148 	    fputs(", ", stdout);
    149     }
    150     putchar ('\n');
    151 }
    152