[BACK]Return to main.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/main.c between version 1.182 and 1.183

version 1.182, 2014/08/21 00:32:15 version 1.183, 2014/08/22 03:42:18
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011, 2012, 2014 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010, 2011, 2012, 2014 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>   * Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>
  *   *
Line 21 
Line 21 
 #include <sys/types.h>  #include <sys/types.h>
   
 #include <assert.h>  #include <assert.h>
   #include <errno.h>
 #include <stdio.h>  #include <stdio.h>
 #include <stdint.h>  #include <stdint.h>
 #include <stdlib.h>  #include <stdlib.h>
Line 84  static void    mmsg(enum mandocerr, enum mandoclevel,
Line 85  static void    mmsg(enum mandocerr, enum mandoclevel,
                                 const char *, int, int, const char *);                                  const char *, int, int, const char *);
 static  void              parse(struct curparse *, int,  static  void              parse(struct curparse *, int,
                                 const char *, enum mandoclevel *);                                  const char *, enum mandoclevel *);
   static  void              spawn_pager(void);
 static  int               toptions(struct curparse *, char *);  static  int               toptions(struct curparse *, char *);
 static  void              usage(enum argmode) __attribute__((noreturn));  static  void              usage(enum argmode) __attribute__((noreturn));
 static  void              version(void) __attribute__((noreturn));  static  void              version(void) __attribute__((noreturn));
Line 111  main(int argc, char *argv[])
Line 113  main(int argc, char *argv[])
         enum mandoclevel rc;          enum mandoclevel rc;
         enum outmode     outmode;          enum outmode     outmode;
         int              show_usage;          int              show_usage;
           int              use_pager;
         int              options;          int              options;
         int              c;          int              c;
   
Line 145  main(int argc, char *argv[])
Line 148  main(int argc, char *argv[])
         options = MPARSE_SO;          options = MPARSE_SO;
         defos = NULL;          defos = NULL;
   
           use_pager = 1;
         show_usage = 0;          show_usage = 0;
         outmode = OUTMODE_DEF;          outmode = OUTMODE_DEF;
         while (-1 != (c = getopt(argc, argv, "aC:fI:ikM:m:O:S:s:T:VW:w"))) {  
           while (-1 != (c = getopt(argc, argv, "aC:cfI:ikM:m:O:S:s:T:VW:w"))) {
                 switch (c) {                  switch (c) {
                 case 'a':                  case 'a':
                         outmode = OUTMODE_ALL;                          outmode = OUTMODE_ALL;
Line 155  main(int argc, char *argv[])
Line 160  main(int argc, char *argv[])
                 case 'C':                  case 'C':
                         conf_file = optarg;                          conf_file = optarg;
                         break;                          break;
                   case 'c':
                           use_pager = 0;
                           break;
                 case 'f':                  case 'f':
                         search.argmode = ARG_WORD;                          search.argmode = ARG_WORD;
                         break;                          break;
Line 223  main(int argc, char *argv[])
Line 231  main(int argc, char *argv[])
                 switch (search.argmode) {                  switch (search.argmode) {
                 case ARG_FILE:                  case ARG_FILE:
                         outmode = OUTMODE_ALL;                          outmode = OUTMODE_ALL;
                           use_pager = 0;
                         break;                          break;
                 case ARG_NAME:                  case ARG_NAME:
                         outmode = OUTMODE_ONE;                          outmode = OUTMODE_ONE;
Line 319  main(int argc, char *argv[])
Line 328  main(int argc, char *argv[])
         if ( ! moptions(&options, auxpaths))          if ( ! moptions(&options, auxpaths))
                 return((int)MANDOCLEVEL_BADARG);                  return((int)MANDOCLEVEL_BADARG);
   
           if (use_pager && isatty(STDOUT_FILENO))
                   spawn_pager();
   
         curp.mp = mparse_alloc(options, curp.wlevel, mmsg, defos);          curp.mp = mparse_alloc(options, curp.wlevel, mmsg, defos);
   
         /*          /*
Line 620  mmsg(enum mandocerr t, enum mandoclevel lvl,
Line 632  mmsg(enum mandocerr t, enum mandoclevel lvl,
                 fprintf(stderr, ": %s", msg);                  fprintf(stderr, ": %s", msg);
   
         fputc('\n', stderr);          fputc('\n', stderr);
   }
   
   static void
   spawn_pager(void)
   {
           int      fildes[2];
   
           if (pipe(fildes) == -1) {
                   fprintf(stderr, "%s: pipe: %s\n",
                       progname, strerror(errno));
                   return;
           }
   
           switch (fork()) {
           case -1:
                   fprintf(stderr, "%s: fork: %s\n",
                       progname, strerror(errno));
                   exit((int)MANDOCLEVEL_SYSERR);
           case 0:
                   close(fildes[0]);
                   if (dup2(fildes[1], STDOUT_FILENO) == -1) {
                           fprintf(stderr, "%s: dup output: %s\n",
                               progname, strerror(errno));
                           exit((int)MANDOCLEVEL_SYSERR);
                   }
                   return;
           default:
                   close(fildes[1]);
                   if (dup2(fildes[0], STDIN_FILENO) == -1) {
                           fprintf(stderr, "%s: dup input: %s\n",
                               progname, strerror(errno));
                   } else {
                           execlp("more", "more", "-s", NULL);
                           fprintf(stderr, "%s: exec: %s\n",
                               progname, strerror(errno));
                   }
                   exit((int)MANDOCLEVEL_SYSERR);
           }
 }  }

Legend:
Removed from v.1.182  
changed lines
  Added in v.1.183

CVSweb