home *** CD-ROM | disk | FTP | other *** search
/ Big Green CD 8 / BGCD_8_Dev.iso / NEXTSTEP / UNIX / Mail / mailapp-utilities-2.1-MIHS / Source / optutil.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-02  |  1.5 KB  |  65 lines

  1. /*+++*
  2.  *  title:    optutil.c
  3.  *  RCS         optutil.c,v 1.3 1998/02/03 00:35:16 tom Exp
  4.  *  abstract:    command-line option handling support stuff.
  5.  *  author:    Tom Hageman, The Netherlands <tom@basil.icce.rug.nl>
  6.  *  created:    November 1996
  7.  *  modified:    31 May 1997
  8.  *---*/
  9.  
  10. #import <stdio.h>
  11. #import <stdlib.h>
  12. #import <string.h>
  13.  
  14. #import "compat.h"
  15. #import "optutil.h"
  16. #import "version.h"
  17.  
  18. #if NEXTSTEP
  19. #   define OSVERSION    "NEXTSTEP"
  20. #elif OPENSTEP
  21. #   define OSVERSION    "OPENSTEP"
  22. #elif RHAPSODY
  23. #   define OSVERSION    "Rhapsody"
  24. #else
  25. #   define OSVERSION    "unknown"
  26. #endif
  27.  
  28. const char *basename(const char *path)
  29. {
  30.    const char *s = strrchr(path, '/');
  31.  
  32.    return (s ? ++s : path);
  33. }
  34.  
  35. const char *_progname = "(unset)";
  36.  
  37. #ifndef __GNUC__
  38. void set_progname(const char *name)  { _progname = basename(name); }
  39. const char *progname()               { return _progname; }
  40. #endif
  41.  
  42. void handle_usage_help_version(int what, const char *usage, const char *help)
  43. {
  44.    switch (what)
  45.    {
  46.    case EXIT_USAGE:
  47.       fprintf(stderr, usage, progname());
  48.       fprintf(stderr, "try `%s -H' for more information.\n", progname()); 
  49.       break;
  50.    case EXIT_HELP:
  51.       printf(usage, progname());
  52.       printf(help, progname());
  53.       what = EXIT_SUCCESS;
  54.       break;
  55.    case EXIT_VERSION:
  56.       printf("%s: %s version %s, %s. (%s)\n",
  57.              progname(), PACKAGE, VERSION, VERSION_DATE, OSVERSION);
  58.       what = EXIT_SUCCESS;
  59.       break;
  60.    default:
  61.       return; /* no-op. */
  62.    }
  63.    exit(what);
  64. }
  65.