aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-12-05 21:55:04 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-12-05 21:55:04 +0000
commit8ab08110b5bb5922ad0d60987200b4119d60443e (patch)
tree97ba3cf6ebc62ba0933b8b25dd013626b226b146
parente28ee7cf328a34bf7093917705979f206814e966 (diff)
downloadmandoc-8ab08110b5bb5922ad0d60987200b4119d60443e.tar.gz
mandoc-8ab08110b5bb5922ad0d60987200b4119d60443e.tar.zst
mandoc-8ab08110b5bb5922ad0d60987200b4119d60443e.zip
implement help(1)
-rw-r--r--main.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/main.c b/main.c
index b97d664b..d55a5e8e 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.201 2014/12/02 11:31:51 schwarze Exp $ */
+/* $Id: main.c,v 1.202 2014/12/05 21:55:04 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011, 2012, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -96,6 +96,8 @@ static void version(void) __attribute__((noreturn));
static int woptions(struct curparse *, char *);
static const int sec_prios[] = {1, 4, 5, 8, 6, 3, 7, 2, 9};
+static char help_arg[] = "help";
+static char *help_argv[] = {help_arg, NULL};
static const char *progname;
@@ -142,6 +144,8 @@ main(int argc, char *argv[])
search.argmode = ARG_EXPR;
else if (strncmp(progname, "whatis", 6) == 0)
search.argmode = ARG_WORD;
+ else if (strncmp(progname, "help", 4) == 0)
+ search.argmode = ARG_NAME;
else
search.argmode = ARG_FILE;
@@ -273,15 +277,24 @@ main(int argc, char *argv[])
resp = NULL;
#endif
- /* Quirk for a man(1) section argument without -s. */
+ /*
+ * Quirks for help(1)
+ * and for a man(1) section argument without -s.
+ */
- if (search.argmode == ARG_NAME &&
- argv[0] != NULL &&
- isdigit((unsigned char)argv[0][0]) &&
- (argv[0][1] == '\0' || !strcmp(argv[0], "3p"))) {
- search.sec = argv[0];
- argv++;
- argc--;
+ if (search.argmode == ARG_NAME) {
+ if (*progname == 'h') {
+ if (argc == 0) {
+ argv = help_argv;
+ argc = 1;
+ }
+ } else if (argv[0] != NULL &&
+ isdigit((unsigned char)argv[0][0]) &&
+ (argv[0][1] == '\0' || !strcmp(argv[0], "3p"))) {
+ search.sec = argv[0];
+ argv++;
+ argc--;
+ }
}
rc = MANDOCLEVEL_OK;