home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / X / mit / clients / xman / main.c.orig < prev    next >
Encoding:
Text File  |  1991-06-04  |  8.6 KB  |  236 lines

  1. /*
  2.  * xman - X window system manual page display program.
  3.  *
  4.  * $XConsortium: main.c,v 1.19 91/06/05 09:50:04 dave Exp $
  5.  *
  6.  * Copyright 1987, 1988 Massachusetts Institute of Technology
  7.  *
  8.  * Permission to use, copy, modify, and distribute this software and its
  9.  * documentation for any purpose and without fee is hereby granted, provided
  10.  * that the above copyright notice appear in all copies and that both that
  11.  * copyright notice and this permission notice appear in supporting
  12.  * documentation, and that the name of M.I.T. not be used in advertising or
  13.  * publicity pertaining to distribution of the software without specific,
  14.  * written prior permission.  M.I.T. makes no representations about the
  15.  * suitability of this software for any purpose.  It is provided "as is"
  16.  * without express or implied warranty.
  17.  *
  18.  * Author:    Chris D. Peterson, MIT Project Athena
  19.  * Created:   October 22, 1987
  20.  */
  21.  
  22. #include "globals.h"
  23. #ifndef ZERO
  24. #include <X11/Xaw/Cardinals.h>
  25. #endif /* ZERO */
  26.  
  27. #if ( !defined(lint) && !defined(SABER)) /* Version can be retrieved */
  28.   static char version[] = XMAN_VERSION;  /* via strings. */
  29. #endif
  30.  
  31. static void ArgError();
  32.  
  33. #define Offset(field) (XtOffsetOf(Xman_Resources , field))
  34.  
  35. static XtResource my_resources[] = {
  36.   {"directoryFontNormal", XtCFont, XtRFontStruct, sizeof(XFontStruct *),
  37.      Offset(fonts.directory), XtRString, DIRECTORY_NORMAL},
  38.   {"bothShown", XtCBoolean, XtRBoolean, sizeof(Boolean),
  39.      Offset(both_shown_initial), XtRString, "False"},
  40.   {"directoryHeight", "DirectoryHeight", XtRInt, sizeof(int),
  41.      Offset(directory_height), XtRString, "150"},  
  42.   {"topCursor", XtCCursor, XtRCursor, sizeof(Cursor), 
  43.      Offset(cursors.top), XtRString, XMAN_CURSOR},
  44.   {"helpCursor", XtCCursor, XtRCursor, sizeof(Cursor),
  45.      Offset(cursors.help), XtRString, HELP_CURSOR},
  46.   {"manpageCursor", XtCCursor, XtRCursor, sizeof(Cursor),
  47.      Offset(cursors.manpage), XtRString, MANPAGE_CURSOR},
  48.   {"searchEntryCursor", XtCCursor, XtRCursor, sizeof(Cursor),
  49.      Offset(cursors.search_entry), XtRString, SEARCH_ENTRY_CURSOR},
  50.   {"pointerColor", XtCForeground, XtRPixel, sizeof(Pixel),
  51.      Offset(cursors.fg_color), XtRString, "XtDefaultForeground"},
  52.   {"pointerColorBackground", XtCBackground, XtRPixel, sizeof(Pixel),
  53.      Offset(cursors.bg_color), XtRString, "XtDefaultBackground"},
  54.   {"help", XtCBoolean, XtRBoolean, sizeof(Boolean),
  55.      Offset(show_help_syntax), XtRImmediate, FALSE},
  56.   {"helpFile", XtCFile, XtRString, sizeof(char *),
  57.      Offset(help_file), XtRString, HELPFILE},
  58.   {"topBox", XtCBoolean, XtRBoolean, sizeof(Boolean),
  59.      Offset(top_box_active), XtRString, "True"},
  60.   {"clearSearchString", "ClearSearchString", XtRBoolean, sizeof(Boolean),
  61.      Offset(clear_search_string), XtRImmediate, (caddr_t) TRUE},
  62.   {"title", XtCString, XtRString, sizeof(char *),
  63.      Offset(title), XtRString, "xman"},
  64.   {"iconic", XtCBoolean, XtRBoolean, sizeof(Boolean),
  65.      Offset(iconic), XtRString, "False"},
  66. };
  67.  
  68. #undef Offset
  69.  
  70. /*
  71.  * The resource that we absolutely need.
  72.  */
  73.  
  74. static char * fallback_resources[] = { "Xman*quitButton.translations:    #override \\n   <Btn1Up>: Quit() reset()",
  75.  "Xman*helpButton.sensitive:                    FALSE",
  76.  "Xman*manpageButton.sensitive:                 FALSE",
  77.  "Xman*helpButton.Label:            Help",
  78.  "Xman*quitButton.Label:            Quit",
  79.  "Xman*manpageButton.Label:                Manual Page",
  80.  "Xman*topLabel.label:                         No App-Defaults File",
  81.  NULL,
  82. };
  83.  
  84. /*
  85.  * This is necessary to keep all TopLevel shells from becoming
  86.  * the size that is specified on the command line.
  87.  */
  88.  
  89. static XrmOptionDescRec xman_options[] = {
  90. {"-geometry", "*topBox.geometry",        XrmoptionSepArg, (caddr_t) NULL},
  91. {"-help",     "help",                    XrmoptionNoArg,  (caddr_t) "True"},
  92. {"=",         "*topBox.geometry",        XrmoptionIsArg,  (caddr_t) NULL},
  93. {"-pagesize", "*manualBrowser.geometry", XrmoptionSepArg, (caddr_t) NULL},
  94. {"-notopbox", "topBox",                  XrmoptionNoArg,  (caddr_t) "False"},
  95. {"-helpfile", "helpFile",                XrmoptionSepArg, (caddr_t) NULL},
  96. {"-bothshown","bothShown",               XrmoptionNoArg,  (caddr_t) "True"},
  97. {"-title",    "title",                   XrmoptionSepArg, (caddr_t) "xman"}, 
  98. {"-iconic",   "iconic",                  XrmoptionNoArg,  (caddr_t) "True"},
  99. };
  100.  
  101. XtActionsRec xman_actions[] = {
  102.   {"GotoPage",          GotoPage},
  103.   {"Quit",              Quit},
  104.   {"Search",            Search},
  105.   {"PopupHelp",         PopupHelp},
  106.   {"PopupSearch",       PopupSearch},
  107.   {"CreateNewManpage",  CreateNewManpage},
  108.   {"RemoveThisManpage", RemoveThisManpage},
  109.   {"SaveFormattedPage", SaveFormattedPage},
  110.   {"ShowVersion",       ShowVersion},
  111. };
  112.  
  113. /*    Function Name: main
  114.  *    Description: This is the main driver for Xman.
  115.  *    Arguments: argc, argv - the command line arguments.
  116.  *    Returns: return, what return.
  117.  */
  118.  
  119. void 
  120. main(argc,argv)
  121. char ** argv;
  122. int argc;
  123. {
  124.   XtAppContext app_con;
  125.  
  126.   initial_widget = XtAppInitialize(&app_con, "Xman", xman_options,
  127.                    XtNumber(xman_options), &argc, argv,
  128.                    fallback_resources, NULL, ZERO);
  129.  
  130.   manglobals_context = XStringToContext(MANNAME);
  131.  
  132.   XtGetApplicationResources( initial_widget, (caddr_t) &resources, 
  133.                 my_resources, XtNumber(my_resources),
  134.                 NULL, (Cardinal) 0);
  135.  
  136.   if ( (argc != 1) || (resources.show_help_syntax) ) {
  137.     ArgError(argc, argv);
  138.     exit(1);
  139.   }
  140.  
  141.   XtAppAddActions(app_con, xman_actions, XtNumber(xman_actions));
  142.  
  143.   if (!resources.fonts.directory)
  144.     PrintError("Failed to get the directory font.");
  145.  
  146. #ifdef DEBUG
  147.   printf("debugging mode\n");
  148. #endif
  149.  
  150. /*
  151.  * Set the default width and height.
  152.  * I am not real happy with this method, but it will usually do something
  153.  * reasonable, if not the "right" thing.  It is not a real big issue since
  154.  * it is easy to change the values with resources or command line options.
  155.  * NOTE: if you are in a 100 dpi display you will lose.
  156.  */
  157.  
  158.   default_width = DEFAULT_WIDTH;
  159.   default_height=DisplayHeight(XtDisplay(initial_widget), 
  160.                    XtDisplay(initial_widget)->default_screen);
  161.   default_height *= 3;
  162.   default_height /= 4;
  163.  
  164.   if ( (sections = Man()) == 0 )
  165.     PrintError("There are no manual sections to display, check your MANPATH.");
  166.  
  167.   if (resources.top_box_active) 
  168.     MakeTopBox();    
  169.   else
  170.     (void) CreateManpage(NULL);
  171.  
  172. /*
  173.  * We need to keep track of the number of manual pages that are shown on
  174.  * the screen so that if this user does not have a top box then when he
  175.  * removes all his manual pages we can kill off the xman process.
  176.  * To make things easier we will consider the top box a shown manual page
  177.  * here, but since you cannot remove it, man_page_shown only goes to zero when
  178.  * no top box is present.
  179.  */
  180.  
  181.   man_pages_shown = 1;        
  182.  
  183.   XtAppMainLoop(app_con);
  184. }
  185.  
  186. /*    Function Name: ArgError
  187.  *    Description:  Prints error message about unknow arguments.
  188.  *    Arguments: argc, argv - args not understood.
  189.  *    Returns: none.
  190.  */
  191.  
  192. static void 
  193. ArgError(argc, argv)
  194. char ** argv;
  195. int argc;
  196. {
  197.   int i;
  198.  
  199.   static char **syntax, *syntax_def[] = {
  200.   "-help",                   "Print this message",
  201.   "-helpfile <filename>",    "Specifies the helpfile to use.",
  202.   "-bothshown",              "Show both the directory and manpage at once.",
  203.   "-notopbox",               "Starts with manpage rather than topbox.",
  204.   "-geometery <geom>",       "Specifies the geometry of the top box.",
  205.   "=<geom>",                 "Specifies the geometry of the top box.",
  206.   "-pagesize <geom>",        "Specifies the geometry of the manual page.",
  207.   "-bw <pixels>",            "Width of all window borders.",
  208.   "-borderwidth <pixels>",   "Width of all window borders.",
  209.   "-bd <color>",             "Color of all window borders.",
  210.   "-bordercolor <color>",    "Color of all window borders.",
  211.   "-fg <color>",             "Foreground color for the application.",
  212.   "-foreground <color>",     "Foreground color for the application.",
  213.   "-bg <color>",             "Background color for the application.",
  214.   "-background <color>",     "Background color for the application.",
  215.   "-display <display name>", "Specify a display that is not the default",
  216.   "-fn <font>",              "Font to be used for button and label text.",
  217.   "-font <font>",            "Font to be used for button and label text.",
  218.   "-name <name>",            "Change the name used for retrieving resources.",
  219.   "-title <name>",           "Change the name without affecting resources.",
  220.   "-xrm <resource>",         "Specifies a resource on the command line.",
  221.   NULL, NULL,
  222.   };
  223.   
  224.   syntax = syntax_def;
  225.  
  226.   for (i = 1; i < argc ; i++) 
  227.     (void) printf("This argument is unknown to Xman: %s\n", argv[i]);
  228.   
  229.   (void) printf("\nKnown arguments are:\n");
  230.  
  231.   while ( *syntax != NULL ) {
  232.     printf("%-30s - %s\n", syntax[0], syntax[1]);
  233.     syntax += 2;
  234.   }
  235. }
  236.