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
source_file(const char * cmd_file,int sci_idx)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 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
main(int argc,char ** argv)83 int 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
test_cmd(argc,argv)138 void 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