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