test_ss.c revision d1154eb460efe588eaed3d439c1caaca149fa362
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
27extern ss_request_table test_cmds;
28
29#define TRUE 1
30#define FALSE 0
31
32static char subsystem_name[] = "test_ss";
33static char version[] = "1.0";
34
35static 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
84int 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
139void 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