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