xref: /netbsd-src/external/bsd/less/dist/lesstest/lesstest.c (revision e4a6e799a67c2028562d75b4e61407b22434aa36)
1 #include <setjmp.h>
2 #include "lesstest.h"
3 
4 extern TermInfo terminfo;
5 
6 int verbose = 0;
7 int less_quit = 0;
8 int details = 0;
9 int err_only = 0;
10 char* lt_screen = "./lt_screen";
11 char* lt_screen_opts = NULL;
12 
13 static char* testfile = NULL;
14 
usage(void)15 static 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 
setup(int argc,char * const * argv)21 static 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 
main(int argc,char * const * argv,char * const * envp)61 int 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