lesstest.c revision 1.1.1.1
1#include <setjmp.h>
2#include "lesstest.h"
3
4extern TermInfo terminfo;
5
6int verbose = 0;
7int less_quit = 0;
8int details = 0;
9int err_only = 0;
10char* lt_screen = "./lt_screen";
11char* lt_screen_opts = NULL;
12
13static char* testfile = NULL;
14
15static int usage(void) {
16	fprintf(stderr, "usage: lesstest -o file.lt [-w#] [-h#] [-eEdv] [-S lt_screen-opts] [--] less.exe [flags] textfile\n");
17	fprintf(stderr, "   or: lesstest -t file.lt less.exe\n");
18	return 0;
19}
20
21static int setup(int argc, char* const* argv) {
22	char* logfile = NULL;
23	int ch;
24	while ((ch = getopt(argc, argv, "deEo:s:S:t:v")) != -1) {
25		switch (ch) {
26		case 'd':
27			details = 1;
28			break;
29		case 'e':
30			err_only = 1;
31			break;
32		case 'E':
33			err_only = 2;
34			break;
35		case 'o':
36			logfile = optarg;
37			break;
38		case 's':
39			lt_screen = optarg;
40			break;
41		case 'S':
42			lt_screen_opts = optarg;
43			break;
44		case 't':
45			testfile = optarg;
46			break;
47		case 'v':
48			verbose = 1;
49			break;
50		default:
51			return usage();
52		}
53	}
54	if (logfile != NULL && !log_open(logfile)) {
55		fprintf(stderr, "cannot create %s: %s\n", logfile, strerror(errno));
56		return 0;
57	}
58	return 1;
59}
60
61int main(int argc, char* const* argv, char* const* envp) {
62	if (!setup(argc, argv))
63		return RUN_ERR;
64	int ok = 0;
65	if (testfile != NULL) { // run existing test
66		if (optind+1 != argc) {
67			usage();
68			return RUN_ERR;
69		}
70		ok = run_testfile(testfile, argv[optind]);
71	} else { // gen; create new test
72		if (optind+2 > argc) {
73			usage();
74			return RUN_ERR;
75		}
76		log_file_header();
77		ok = run_interactive(argv+optind, argc-optind, envp);
78		log_close();
79	}
80	return ok ? RUN_OK : RUN_ERR;
81}
82