mikew@wyse.wyse.com (Mike Wexler) (01/10/89)
Submitted-by: jim@expo.lcs.mit.edu (Jim Fulton) Posting-number: Volume 2, Issue 82 Archive-name: x11.3/patch7 Created on Monday, 9 January 1989 PART 3 of 3 Fixes 5, 6, and 7 are part of a single update to the xman program. Together they affect the following files: clients/xman/CHANGES clients/xman/README clients/xman/ScrollByL.c clients/xman/TODO clients/xman/buttons.c clients/xman/defs.h clients/xman/globals.c clients/xman/globals.h clients/xman/handler.c clients/xman/help.c clients/xman/main.c clients/xman/man.c clients/xman/man.h clients/xman/menu.c clients/xman/misc.c clients/xman/pages.c clients/xman/search.c clients/xman/tkfuncs.c clients/xman/version.h clients/xman/xman.help clients/xman/xman.man To apply these fixes, concatenate all three files and pipe them to patch -p0 from the top of your X sources: % cat fix5 fix6 fix7 | patch -p0 The following is fix7 (you will also need fix5 and fix6): *** /tmp/,RCSt1a17111 Fri Jan 6 18:56:24 1989 --- clients/xman/CHANGES Fri Jan 6 18:42:34 1989 *************** *** 3,56 **** Here is the list of changes to xman. Unresolved bug fixes and neat features are listed in the TODO file. ------------------------------------------------------------ ! Version 3.0 (X11R2 Tape) -> Version 3.0.2 ------------------------------------------------------------ ! Additional Features: ! 1) Startup time is now 3 times faster. ! 2) Manual page searches now SCREAM, speed MUCH improved. ! 3) -pagesize argument added and documented in manual page. ! 4) List widget used for directory, may new features of directory ! a) vertical or horizontal orientation via the "verticalList" resource ! vertical is now the default. ! e.g xman*verticalList: False ! b) current manual page is highlighted in the directory listing. ! c) resizing the window now creates more columns in directory ! (see bug fix #4). ! d) Pixmaps no longer created for each directory listing. ! you people with color workstations should like this one. ! 5) Xman no longer uses the window widget, and it has been removed from ! the distribution. If you want a copy send me e-mail. ! Bug Fixes: ! 1) The height of the directory items was wrong if a different ! font is used for the directory than for the manual pages. ! 2) The topBox resource for the initial "Manual Browser" box now ! can be specified. This allows the geometry of this box to be ! set with resources. ! e.g xman*topBox.geometry: =100x100+2+2 ! 3) Xman now handles the case of no help file correctly. ! 4) Resizing the directory now causes the columns to fill in the new area. ! This causes more of the directory to be visable in wider windows, and ! resizing narrower does not lose information. ! Know bugs yet to be resolved: ! 1) Resizing the man page causes the directory to grow too big. ! and the manpage to get real small. (1 pixel). ------------------------------------------------------------ Version 3.0.2 -> 3.0.3 --- 3,94 ---- Here is the list of changes to xman. Unresolved bug fixes and neat features are listed in the TODO file. + I have changed this in to reverse chronological order to make it + easier to read. + ------------------------------------------------------------ ! Version 3.1 -> 3.1.1 ------------------------------------------------------------ ! Bug Fixes. ! 1) Manual Pages now handle text properly if partially obscured. ! 2) Manual Pages smaller than one screen do not cause xman to die. ! 3) Command line arguments and resources work properly again. ! 4) Scrollbars on man pages and directories are the same size by default. ! 5) Better handling of the decision to boldify. ! 6) Searching with multiple manual pages visable now works correctly. ! 7) Resources are all in a structure, so that machines with the MSB set ! on pointers will do the right thing. ! THANKS TO: Martin Streicher ! 8) Default width, is no longer dependant on the width of the display, ! but is set with #define DEFAULT_WIDTH in defs.h. Problems may still ! occur with displays that are not 75 dpi. ! 9) Fixes to man.c (internal maual page finding functions) ! a) xman knows about "mano" by default now. ! 10) Right button paging in manual pages works correctly on all machines. ! 11) The box with the message "Would you like to save this formatted manpage" ! comes up correctly in the center of the manual page. ! 12) Manual pages of the form foo.3x11.z show up as: foo(x11). + 13) Reverse video works correctly. ! 14) AproposFilter now uses "man -k" rather than "apropos" ! THANKS TO: Arthur David Olson. ! 15) When searching for manual pages, highlight now reflects current ! manual page. ! ! FEATURES: ! ! 1) Overstrike is now supported. ! THANKS TO: clyde@rutgers.edu ! ! 2) Addition to of "no default sections" option to mandesc file, read the ! latest man page for details. ! ! 3) Warning messages printed to manual page window as well as stdout. ! ! ------------------------------------------------------------ ! Version 3.0.4 -> 3.1 (X11R3) ! ------------------------------------------------------------ ! ! List widget is part of Xaw and removed from this directory. ! ! ------------------------------------------------------------ ! Version 3.0.3 -> 3.0.4 ! ------------------------------------------------------------ ! ! Bug fixes. ! ! 1) First directory now comes up with all entries when the default ! size is used. ! ! 2) Command line syntax printed if an argument is not understood. ! ! 3) manpage rewritten. ! ! 4) Apropos no longer blows out with very long MANPATH's. ! ! 5) Better handling of mandesc file. ! ! Features: ! ! 1) additional command line arguments (see manpage for details): ! a) -notopbox ! b) -bothshown ! c) -helpfile <filename> ------------------------------------------------------------ Version 3.0.2 -> 3.0.3 *************** *** 86,121 **** 10) Left over highlight in menu have been fixed. ------------------------------------------------------------ ! Version 3.0.3 -> 3.0.4 ------------------------------------------------------------ ! Bug fixes. ! 1) First directory now comes up with all entries when the default ! size is used. ! 2) Command line syntax printed if an argument is not understood.n ! 3) manpage rewritten. ! 4) Apropos no longer blows out with very long MANPATH's. ! 5) Better handling of mandesc file. ! Features: ! 1) additional command line arguments (see manpage for details): ! a) -notopbox ! b) -bothshown ! c) -helpfile <filename> ! ------------------------------------------------------------ ! Version 3.0.4 -> 3.1 (X11R3) ! ------------------------------------------------------------ ! List widget is part of Xaw and removed from this directory. Chris D. Peterson Project Athena --- 124,180 ---- 10) Left over highlight in menu have been fixed. + ------------------------------------------------------------ ! Version 3.0 (X11R2 Tape) -> Version 3.0.2 ------------------------------------------------------------ ! Additional Features: ! 1) Startup time is now 3 times faster. ! 2) Manual page searches now SCREAM, speed MUCH improved. ! 3) -pagesize argument added and documented in manual page. ! 4) List widget used for directory, may new features of directory ! a) vertical or horizontal orientation via the "verticalList" resource ! vertical is now the default. ! e.g xman*verticalList: False ! b) current manual page is highlighted in the directory listing. ! c) resizing the window now creates more columns in directory ! (see bug fix #4). ! d) Pixmaps no longer created for each directory listing. ! you people with color workstations should like this one. ! 5) Xman no longer uses the window widget, and it has been removed from ! the distribution. If you want a copy send me e-mail. ! Bug Fixes: ! 1) The height of the directory items was wrong if a different ! font is used for the directory than for the manual pages. ! 2) The topBox resource for the initial "Manual Browser" box now ! can be specified. This allows the geometry of this box to be ! set with resources. + e.g xman*topBox.geometry: =100x100+2+2 + + 3) Xman now handles the case of no help file correctly. + + 4) Resizing the directory now causes the columns to fill in the new area. + This causes more of the directory to be visable in wider windows, and + resizing narrower does not lose information. + + + Know bugs yet to be resolved: + + 1) Resizing the man page causes the directory to grow too big. + and the manpage to get real small. (1 pixel). + + ------------------------------------------------------------ Chris D. Peterson Project Athena *** /tmp/,RCSt1a17125 Fri Jan 6 18:56:26 1989 --- clients/xman/README Fri Jan 6 18:42:35 1989 *************** *** 7,14 **** /* * xman - X window system manual page display program. * ! * $XConsortium: README,v 1.3 88/10/07 17:25:10 jim Exp $ ! * $Athena: README,v 3.4 88/08/31 21:14:20 kit Locked $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * --- 7,14 ---- /* * xman - X window system manual page display program. * ! * $XConsortium: README,v 1.4 89/01/06 18:42:34 kit Exp $ ! * $Athena: README,v 4.3 88/12/19 13:49:06 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * *************** *** 52,58 **** pain. Oh yes, I also came up with what I think is a useful tool for all users who wish to browse the manual pages. ! The ScrollByLine widget, while it looked like a good idea at t the time, is really a hack and for widget examples please use the widget set that came on the X tape, as the ScrollByLine Wiget was written about three months and many Xtk intrinsic revisions ago. It still works for --- 52,58 ---- pain. Oh yes, I also came up with what I think is a useful tool for all users who wish to browse the manual pages. ! The ScrollByLine widget, while it looked like a good idea at the time, is really a hack and for widget examples please use the widget set that came on the X tape, as the ScrollByLine Wiget was written about three months and many Xtk intrinsic revisions ago. It still works for *************** *** 83,96 **** both the naive user and the experience unix hacker in mind. Thus Xman is: ! 1) Easy to use, start it up, and click the help button to start. ! 2) Uses the same default key bindings as other Xtk applications (xmh, xmore). ! 3) Conserves Screen space, and is usable even when resized fairly small. ! 4) Readily reconfigurable, this allows the experienced user to remove most ! information that is not necessary from his xman display. ! 5) Fast - once it has started up it has all the information in ! memory and can find and display formatted manual pages quite ! quickly. Changes from version 3.0 (Distributed with X11R2) are in the | file CHANGES. A list of bugs, and nice features is in the file TODO. | --- 83,98 ---- both the naive user and the experience unix hacker in mind. Thus Xman is: ! 1) Easy to use Start it up, and click the help button ! to start. ! 2) More or less Standard Uses the same default key bindings as ! other Xtk applications (xmh, xmore). ! 3) Conserves Screen space Xman is usable even when resized fairly small. ! 4) Readily reconfigurable Xman allows the experienced user to ! personalize the interface (somewhat :-) ! 5) Fast Once it has started up it has all the ! information in memory and can find and ! display formatted manual pages quite quickly. Changes from version 3.0 (Distributed with X11R2) are in the | file CHANGES. A list of bugs, and nice features is in the file TODO. | *** /tmp/,RCSt1a17142 Fri Jan 6 18:56:31 1989 --- clients/xman/TODO Fri Jan 6 18:42:36 1989 *************** *** 20,30 **** How about a "print this manpage" command that would confirm the printer choice and go do a psroff -man? ! One more thing. It would be nice if "help" told you about the Xresources used by xman (like xman*topBox.geometry) ... show message when formatting manpage. Implement searches within manpages. Redo menus. --- 20,32 ---- How about a "print this manpage" command that would confirm the printer choice and go do a psroff -man? ! It would be nice if "help" told you about the Xresources used by xman (like xman*topBox.geometry) ... show message when formatting manpage. + Handle Compressed manual pages, by page and by directory. + Implement searches within manpages. Redo menus. *************** *** 38,40 **** --- 40,44 ---- on to select one of those pages without having to switch sections and then pick the manpage. + + ** This needs to be added to the Athena List Widget. *** /tmp/,RCSt1a17158 Fri Jan 6 18:56:37 1989 --- clients/xman/defs.h Fri Jan 6 18:41:57 1989 *************** *** 1,8 **** /* * xman - X window system manual page display program. * ! * $XConsortium: defs.h,v 1.6 88/10/20 19:03:47 jim Exp $ ! * $Athena: defs.h,v 4.0 88/08/31 22:11:42 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * --- 1,8 ---- /* * xman - X window system manual page display program. * ! * $XConsortium: defs.h,v 1.7 89/01/06 18:41:55 kit Exp $ ! * $Athena: defs.h,v 4.8 89/01/06 15:56:19 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * *************** *** 73,85 **** #define INIT_SEARCH_STRING "xman" /* Intial search string. */ #define SEARCH_STRING_LENGTH 30 ! /* * The command filters for the manual and apropos searches. */ ! #define APROPOSCOMMAND "apropos -M" ! #define APROPOSFILTER "pr -h Apropos" #define MANUALCOMMAND "man -M" #ifdef macII #define FORMAT "pcat" /* The format command. */ --- 73,84 ---- #define INIT_SEARCH_STRING "xman" /* Intial search string. */ #define SEARCH_STRING_LENGTH 30 ! #define NO_SECTION_DEFAULTS ("no default sections") /* * The command filters for the manual and apropos searches. */ ! #define APROPOSFILTER ("man -M %s -k %s | pr -h Apropos > %s") #define MANUALCOMMAND "man -M" #ifdef macII #define FORMAT "pcat" /* The format command. */ *************** *** 89,103 **** #define CANCEL "Cancel" ! #define MAXSECT 25 /* The maximum number of sections. */ ! #define FIXEDSECT 11 /* The number of predefined sections. ! 0 - 8 and n, and l = 11. */ #define MAXENTRY 800 /* The maximum number of entries in one ! section. */ #define NLINES 66 /* This is the number of lines to wait until we boldify the line again, this allows me to bold the first line of each page.*/ #define LMAN 3 /* Name and length of the man and cat dirs. */ #define MAN "man" --- 88,109 ---- #define CANCEL "Cancel" ! #define DEFAULT_WIDTH 500 /* The default width of xman. */ ! #define MAXSECT 62 /* The maximum number of sections. ! one for each of (1-9) & (a-z) & (A-Z) */ ! #ifdef sun ! #define MAXENTRY 2000 /* The maximum number of entries in one ! section, on a sun. */ ! #else #define MAXENTRY 800 /* The maximum number of entries in one ! section, on other machines. */ ! #endif ! #define NLINES 66 /* This is the number of lines to wait until we boldify the line again, this allows me to bold the first line of each page.*/ + #define INITIAL_DIR 0 /* The Initial Directory displayed. */ #define LMAN 3 /* Name and length of the man and cat dirs. */ #define MAN "man" *************** *** 165,173 **** /* man.c */ int Man(); - void MatchEntries(),AddStruct(),SortAndRemove(); - Boolean GetEntry(); - void SetManNames(); char * StrAlloc(); /* menu.c is self contained */ --- 171,176 ---- *************** *** 175,181 **** /* misc.c */ void PrintError(),PrintWarning(),KillManpage(), ChangeLabel(); ! void RemovePixmaps(),PositionCenter(),AddCursor(); FILE *FindFilename(),*Format(), *OpenEntryFile(); /* pages.c */ --- 178,184 ---- /* misc.c */ void PrintError(),PrintWarning(),KillManpage(), ChangeLabel(); ! void RemovePixmaps(),PositionCenter(),AddCursor(),ParseEntry(); FILE *FindFilename(),*Format(), *OpenEntryFile(); /* pages.c */ *** /tmp/,RCSt1a17166 Fri Jan 6 18:56:39 1989 --- clients/xman/globals.c Fri Jan 6 18:41:58 1989 *************** *** 1,7 **** /* * xman - X window system manual page display program. * ! * $XConsortium: globals.c,v 1.2 88/09/06 17:47:38 jim Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * --- 1,7 ---- /* * xman - X window system manual page display program. * ! * $XConsortium: globals.c,v 1.3 89/01/06 18:41:57 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * *************** *** 20,45 **** */ #if ( !defined(lint) && !defined(SABER)) ! static char rcs_version[] = "$Athena: globals.c,v 4.0 88/08/31 22:11:49 kit Exp $"; #endif #include "man.h" ! /* Resource manager sets these. */ ! XmanFonts fonts; /* The fonts used for the man pages. */ ! XmanCursors cursors; /* The cursors for xman. */ ! Boolean both_shown_initial; /* The initial state of the manual pages ! show two screens or only one. */ ! Boolean top_box_active; /* Put up the Top Box. */ ! int directory_height; /* The default height of directory in ! both_shown mode. */ ! char * help_file; /* The name of the help file. */ Widget help_widget; /* The help widget. */ - /* bookkeeping global variables. */ - int default_height,default_width; /* Approximately the default with and height, of the manpage when shown, the the top level manual page --- 20,36 ---- */ #if ( !defined(lint) && !defined(SABER)) ! static char rcs_version[] = "$Athena: globals.c,v 4.5 88/12/19 13:46:53 kit Exp $"; #endif #include "man.h" ! Xman_Resources resources; /* Resource manager sets these. */ ! /* bookkeeping global variables. */ Widget help_widget; /* The help widget. */ int default_height,default_width; /* Approximately the default with and height, of the manpage when shown, the the top level manual page *************** *** 51,53 **** --- 42,45 ---- int man_pages_shown; /* The current number of manual pages being shown, if 0 we exit. */ + Widget initial_widget; /* The initial widget, never realized. */ *** /tmp/,RCSt1a17176 Fri Jan 6 18:56:41 1989 --- clients/xman/globals.h Fri Jan 6 18:41:59 1989 *************** *** 1,8 **** /* * xman - X window system manual page display program. * ! * $XConsortium: globals.h,v 1.2 88/09/06 17:47:41 jim Exp $ ! * $Athena: globals.h,v 4.0 88/08/31 22:11:54 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * --- 1,8 ---- /* * xman - X window system manual page display program. * ! * $XConsortium: globals.h,v 1.3 89/01/06 18:41:58 kit Exp $ ! * $Athena: globals.h,v 4.5 88/12/19 13:46:58 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * *************** *** 22,42 **** #include "man.h" ! /* Resource manager sets these. */ ! extern XmanFonts fonts; /* The fonts used for the man pages. */ ! extern XmanCursors cursors; /* The cursors for xman. */ ! extern Boolean both_shown_initial; /* The initial state of the manual ! pages show two screens or only one. */ ! extern Boolean top_box_active; /* Put up the Top Box. */ ! extern int directory_height; /* The default height of directory in ! both_shown mode. */ ! extern char * help_file; /* The name of the help file. */ extern Widget help_widget; /* The help widget. */ - /* bookkeeping global variables. */ - extern int default_height,default_width; /* Approximately the default with and height, of the manpage when shown, the the top level manual page --- 22,33 ---- #include "man.h" ! extern Xman_Resources resources; /* Resource manager sets these. */ ! /* bookkeeping global variables. */ extern Widget help_widget; /* The help widget. */ extern int default_height,default_width; /* Approximately the default with and height, of the manpage when shown, the the top level manual page *************** *** 47,50 **** extern Manual manual[MAXSECT]; /* The manual structure. */ extern int sections; /* The number of manual sections. */ ! --- 38,41 ---- extern Manual manual[MAXSECT]; /* The manual structure. */ extern int sections; /* The number of manual sections. */ ! extern Widget initial_widget; /* The initial widget, never realized. */ *** /tmp/,RCSt1a17190 Fri Jan 6 18:56:45 1989 --- clients/xman/help.c Fri Jan 6 18:42:04 1989 *************** *** 1,7 **** /* * xman - X window system manual page display program. * ! * $XConsortium: help.c,v 1.2 88/09/06 17:48:01 jim Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * --- 1,7 ---- /* * xman - X window system manual page display program. * ! * $XConsortium: help.c,v 1.3 89/01/06 18:42:03 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * *************** *** 55,61 **** XtManageChild( man_globals->manpagewidgets.manpage ); XtRealizeWidget( help_widget ); ! AddCursor( help_widget, cursors.manpage); return(TRUE); } --- 55,61 ---- XtManageChild( man_globals->manpagewidgets.manpage ); XtRealizeWidget( help_widget ); ! AddCursor( help_widget, resources.cursors.manpage); return(TRUE); } *************** *** 85,92 **** { FILE * help_file_ptr; ! if( (help_file_ptr = fopen(help_file, "r")) == NULL ) { ! PrintWarning("Could not open help file, NO HELP WILL BE AVALIABLE."); return(FALSE); } InitManpage(man_globals, man_globals->manpagewidgets.manpage, help_file_ptr); --- 85,93 ---- { FILE * help_file_ptr; ! if( (help_file_ptr = fopen(resources.help_file, "r")) == NULL ) { ! PrintWarning(man_globals, ! "Could not open help file, NO HELP WILL BE AVALIABLE."); return(FALSE); } InitManpage(man_globals, man_globals->manpagewidgets.manpage, help_file_ptr); *** /tmp/,RCSt1a17213 Fri Jan 6 18:56:52 1989 --- clients/xman/man.h Fri Jan 6 18:42:19 1989 *************** *** 1,8 **** /* * xman - X window system manual page display program. * ! * $XConsortium: man.h,v 1.2 88/09/06 17:48:12 jim Exp $ ! * $Athena: man.h,v 4.0 88/08/31 22:12:43 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * --- 1,8 ---- /* * xman - X window system manual page display program. * ! * $XConsortium: man.h,v 1.3 89/01/06 18:42:18 kit Exp $ ! * $Athena: man.h,v 4.6 89/01/06 12:17:38 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * *************** *** 80,109 **** directory, /* The widget in which all directories will appear. */ box[MAXSECT]; /* The boxes containing the sections. */ - Boolean created_box[MAXSECT]; /* Has this box been created yet?. */ } ManPageWidgets; /* ! * How we store each entry such as cat.1, sh.1 etc. */ - struct entry { - char *label; /* The filename of the entry. */ - char *path; /* The path for this entry. */ - /* So that't why this is a structure, good thinking Barry. */ - }; - - /* - * the manual sections and entries - */ typedef struct tManual { char * blabel; /* The button label. */ ! char * sect; /* the section man directory. */ ! struct entry *entries; /* the individual man page file names and paths*/ int nentries; /* how many */ - int longest; /* The length (in pixels) of the longest - entry. */ - int ncols,nrows; /* The number of rows and columns */ } Manual; /* --- 80,95 ---- directory, /* The widget in which all directories will appear. */ box[MAXSECT]; /* The boxes containing the sections. */ } ManPageWidgets; /* ! * The manual sections and entries */ typedef struct tManual { char * blabel; /* The button label. */ ! char ** entries; /* the individual man page file names. */ int nentries; /* how many */ } Manual; /* *************** *** 133,139 **** put_up_manpage, /* The button that puts up the manpage. */ put_up_directory, /* The button that puts up the directory. */ text_widget; /* text widget containing search string. */ ! char * search_string; /* The search string. */ char manpage_title[80]; /* The label to use for the current manpage. */ char filename[80]; /* the name of the file that we are currently looking at.*/ --- 119,125 ---- put_up_manpage, /* The button that puts up the manpage. */ put_up_directory, /* The button that puts up the directory. */ text_widget; /* text widget containing search string. */ ! char search_string[SEARCH_STRING_LENGTH]; /* The search string. */ char manpage_title[80]; /* The label to use for the current manpage. */ char filename[80]; /* the name of the file that we are currently looking at.*/ *************** *** 151,153 **** --- 137,153 ---- this manpage. */ } ManpageGlobals; + + + /* Resource manager sets these. */ + + typedef struct _Xman_Resources { + XmanFonts fonts; /* The fonts used for the man pages. */ + XmanCursors cursors; /* The cursors for xman. */ + Boolean both_shown_initial; /* The initial state of the manual pages + show two screens or only one. */ + Boolean top_box_active; /* Put up the Top Box. */ + int directory_height; /* The default height of directory in + both_shown mode. */ + char * help_file; /* The name of the help file. */ + } Xman_Resources; *** /tmp/,RCSt1a17227 Fri Jan 6 18:56:57 1989 --- clients/xman/menu.c Fri Jan 6 18:42:21 1989 *************** *** 1,7 **** /* * xman - X window system manual page display program. * ! * $XConsortium: menu.c,v 1.2 88/09/04 20:27:31 swick Exp $ * $oHeader: menu.c,v 4.0 88/08/31 22:12:49 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology --- 1,7 ---- /* * xman - X window system manual page display program. * ! * $XConsortium: menu.c,v 1.3 89/01/06 18:42:20 kit Exp $ * $oHeader: menu.c,v 4.0 88/08/31 22:12:49 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology *************** *** 21,27 **** */ #if ( !defined(lint) && !defined(SABER)) ! static char rcs_version[] = "$Athena: menu.c,v 4.0 88/08/31 22:12:49 kit Exp $"; #endif /* std headers */ --- 21,27 ---- */ #if ( !defined(lint) && !defined(SABER)) ! static char rcs_version[] = "$Athena: menu.c,v 4.2 88/12/19 13:47:51 kit Exp $"; #endif /* std headers */ *** /tmp/,RCSt1a17241 Fri Jan 6 18:57:00 1989 --- clients/xman/pages.c Fri Jan 6 18:42:27 1989 *************** *** 1,7 **** /* * xman - X window system manual page display program. * ! * $XConsortium: pages.c,v 1.2 88/09/06 17:48:20 jim Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * --- 1,7 ---- /* * xman - X window system manual page display program. * ! * $XConsortium: pages.c,v 1.3 89/01/06 18:42:26 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * *************** *** 20,26 **** */ #if ( !defined(lint) && !defined(SABER)) ! static char rcs_version[] = "$Athena: pages.c,v 4.0 88/08/31 22:13:10 kit Exp $"; #endif #include <ctype.h> --- 20,26 ---- */ #if ( !defined(lint) && !defined(SABER)) ! static char rcs_version[] = "$Athena: pages.c,v 4.5 88/12/19 13:48:09 kit Exp $"; #endif #include <ctype.h> *************** *** 179,184 **** --- 179,186 ---- * Returns: none. */ + /* ARGSUSED */ + void PrintManpage(w,struct_pointer,data) Widget w; *************** *** 237,258 **** * export the font height. */ ! height = (fonts.normal->max_bounds.ascent + ! fonts.normal->max_bounds.descent); bold_gc = XCreateGC(disp,window,0,NULL); XSetForeground(disp,bold_gc,(unsigned long) fgcolor); ! XSetFont(disp,bold_gc,fonts.bold->fid); normal_gc = XCreateGC(disp,window,0,NULL); XSetForeground(disp,normal_gc,(unsigned long) fgcolor); ! XSetFont(disp,normal_gc,fonts.normal->fid); italic_gc = XCreateGC(disp,window,0,NULL); XSetForeground(disp,italic_gc,(unsigned long) fgcolor); ! XSetFont(disp,italic_gc,fonts.italic->fid); ! width = XTextWidth(fonts.normal," ",8); /* Width of a tab stop. */ /* * Because XDrawString uses the bottom of the text as a position --- 239,261 ---- * export the font height. */ ! height = (resources.fonts.normal->max_bounds.ascent + ! resources.fonts.normal->max_bounds.descent); bold_gc = XCreateGC(disp,window,0,NULL); XSetForeground(disp,bold_gc,(unsigned long) fgcolor); ! XSetFont(disp,bold_gc,resources.fonts.bold->fid); normal_gc = XCreateGC(disp,window,0,NULL); XSetForeground(disp,normal_gc,(unsigned long) fgcolor); ! XSetFont(disp,normal_gc,resources.fonts.normal->fid); italic_gc = XCreateGC(disp,window,0,NULL); XSetForeground(disp,italic_gc,(unsigned long) fgcolor); ! XSetFont(disp,italic_gc,resources.fonts.italic->fid); ! /* Width of a tab stop. */ ! width = XTextWidth(resources.fonts.normal," ",8); /* * Because XDrawString uses the bottom of the text as a position *************** *** 260,266 **** * to the ScollByLine position reference. */ ! y_loc = scroll_info->location + fonts.normal->max_bounds.ascent; /* * Ok, here's the more than mildly heuristic man page formatter. --- 263,269 ---- * to the ScollByLine position reference. */ ! y_loc = scroll_info->location + resources.fonts.normal->max_bounds.ascent; /* * Ok, here's the more than mildly heuristic man page formatter. *************** *** 334,340 **** XDrawString(disp,window,normal_gc,col,y_loc,buf,strlen(buf)); bufp = buf; italicflag = 0; ! cur_pos = XTextWidth(fonts.normal,buf,strlen(buf)) + col; col = cur_pos - (cur_pos % width) + width; break; --- 337,343 ---- XDrawString(disp,window,normal_gc,col,y_loc,buf,strlen(buf)); bufp = buf; italicflag = 0; ! cur_pos = XTextWidth(resources.fonts.normal,buf,strlen(buf)) + col; col = cur_pos - (cur_pos % width) + width; break; *************** *** 342,347 **** --- 345,406 ---- c++; /* should always be esc-x */ break; + /* + * Overstrike code supplied by: cs.utexas.edu!ut-emx!clyde@rutgers.edu + * Since my manual pages do not have overstrike I couldn't test this. + */ + + case BACKSPACE: /* Backspacing for nroff bolding */ + if (c[-1] == c[1] && c[1] != BACKSPACE) { /* overstriking one char */ + *--bufp = '\0'; /* Zap 1st instance of char to bolden */ + if (bufp > &buf[0]) { + if (italicflag) { + XDrawString(disp,window,italic_gc,col,y_loc,buf,strlen(buf)); + col += XTextWidth(resources.fonts.italic,buf,strlen(buf)); + } + else { + XDrawString(disp,window,normal_gc,col,y_loc,buf,strlen(buf)); + col += XTextWidth(resources.fonts.normal,buf,strlen(buf)); + } + bufp = buf; + } + /* + * It is painful writing one bold char at a time but + * it is the only safe way to do it. We trust that the library + * buffers these one-char draw requests and sends one large + * request packet. + */ + *bufp = c[1]; + XDrawString(disp,window,bold_gc,col,y_loc,bufp,1); + col += XTextWidth(resources.fonts.bold,bufp,1); + *bufp = '\0'; + first = FALSE; + + /* + * Nroff bolding looks like: + * C\bC\bC\bCN... + * c points to ----^ ^ + * it needs to point to --^ + */ + while (*c == BACKSPACE && c[-1] == c[1]) + c += 2; + c--; /* Back up to previous char */ + } + else { + if ((c[-1] == 'o' && c[1] == '+') /* Nroff bullet */ + || (c[-1] == '+' && c[1] == 'o')) { /* Nroff bullet */ + /* I would prefer to put a 'bullet' char here */ + *bufp++ = 'o'; + c++; + } + else { /* 'real' backspace - back up output ptr */ + bufp--; + } + } + break; + + /* End of contributed overstrike code. */ + case '_': /* look for underlining [italicize] */ c++; if(*c != BACKSPACE) { *************** *** 354,360 **** *bufp = '\0'; XDrawString(disp,window,normal_gc,col,y_loc, buf,strlen(buf)); ! col += XTextWidth(fonts.normal,buf,strlen(buf)); bufp = buf; *bufp = '\0'; italicflag = 1; --- 413,419 ---- *bufp = '\0'; XDrawString(disp,window,normal_gc,col,y_loc, buf,strlen(buf)); ! col += XTextWidth(resources.fonts.normal,buf,strlen(buf)); bufp = buf; *bufp = '\0'; italicflag = 1; *************** *** 368,374 **** if(italicflag) { /* font change? */ *bufp = '\0'; XDrawString(disp,window,italic_gc,col,y_loc,buf,strlen(buf)); ! col += XTextWidth(fonts.italic,buf,strlen(buf)); bufp = buf; *bufp = '\0'; italicflag = 0; --- 427,433 ---- if(italicflag) { /* font change? */ *bufp = '\0'; XDrawString(disp,window,italic_gc,col,y_loc,buf,strlen(buf)); ! col += XTextWidth(resources.fonts.italic,buf,strlen(buf)); bufp = buf; *bufp = '\0'; italicflag = 0; *************** *** 400,406 **** length = strlen(sp); for (sp_pointer = sp, count = 0; count < length; sp_pointer++,count++) ! if (islower(*sp_pointer)) return(0); return(1); } --- 459,465 ---- length = strlen(sp); for (sp_pointer = sp, count = 0; count < length; sp_pointer++,count++) ! if ( !isupper(*sp_pointer) && !isspace(*sp_pointer) ) return(0); return(1); } *** /tmp/,RCSt1a17256 Fri Jan 6 18:57:04 1989 --- clients/xman/tkfuncs.c Fri Jan 6 18:42:31 1989 *************** *** 1,7 **** /* * xman - X window system manual page display program. * ! * $XConsortium: tkfuncs.c,v 1.2 88/09/06 17:48:23 jim Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * --- 1,7 ---- /* * xman - X window system manual page display program. * ! * $XConsortium: tkfuncs.c,v 1.3 89/01/06 18:42:30 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * *************** *** 20,26 **** */ #if ( !defined(lint) && !defined(SABER)) ! static char rcs_version[] = "$Athena: tkfuncs.c,v 4.0 88/08/31 22:13:27 kit Exp $"; #endif #include <X11/X.h> --- 20,26 ---- */ #if ( !defined(lint) && !defined(SABER)) ! static char rcs_version[] = "$Athena: tkfuncs.c,v 4.5 88/12/19 13:48:24 kit Exp $"; #endif #include <X11/X.h> *************** *** 141,147 **** also the parent of the lable.*/ Widget w; XtGeometryResult answer; /* result of geometery test. */ ! Cardinal awidth,aheight; /* The height and width of the reply. */ int width = 0; /* The width of the biggest button */ int i; --- 141,147 ---- also the parent of the lable.*/ Widget w; XtGeometryResult answer; /* result of geometery test. */ ! Dimension awidth,aheight; /* The height and width of the reply. */ int width = 0; /* The width of the biggest button */ int i; *** /tmp/,RCSt1a17261 Fri Jan 6 18:57:06 1989 --- clients/xman/version.h Fri Jan 6 18:42:32 1989 *************** *** 1,8 **** /* * xman - X window system manual page display program. * ! * $XConsortium: version.h,v 1.2 88/09/06 17:48:28 jim Exp $ ! * $Athena: version.h,v 4.0 88/08/31 22:13:33 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * --- 1,8 ---- /* * xman - X window system manual page display program. * ! * $XConsortium: version.h,v 1.3 89/01/06 18:42:31 kit Exp $ ! * $Athena: version.h,v 4.5 88/12/19 13:48:30 kit Exp $ * * Copyright 1987, 1988 Massachusetts Institute of Technology * *************** *** 20,24 **** * Created: July 18, 1988 */ ! #define XMAN_VERSION "Xman_Version 3.1" --- 20,24 ---- * Created: July 18, 1988 */ ! #define XMAN_VERSION "Xman_Version 3.1.1" *** /tmp/,RCSt1a17267 Fri Jan 6 18:57:07 1989 --- clients/xman/xman.help Fri Jan 6 18:42:38 1989 *************** *** 2,16 **** XMAN is an X Window System manual browsing tool, built upon the XToolkit. ! CREDITS: ! Version 3.1 Based Upon: Xman for X10 by Barry Shein - Boston Univ. Written By: Chris Peterson - MIT Project Athena. Copyright 1988 Massachusetts Institute of Technology ! GETTING STARTED: By default, XMAN starts by creating a small window that contains three "buttons" (places on which to click a mouse button). Two of --- 2,16 ---- XMAN is an X Window System manual browsing tool, built upon the XToolkit. ! CREDITS ! Version 3.1.1 Based Upon: Xman for X10 by Barry Shein - Boston Univ. Written By: Chris Peterson - MIT Project Athena. Copyright 1988 Massachusetts Institute of Technology ! GETTING STARTED By default, XMAN starts by creating a small window that contains three "buttons" (places on which to click a mouse button). Two of *************** *** 31,37 **** the middle button returns you to the manual page previously on the screen. ! SCROLLING TEXT: The scrollbars are similar to xterm, xmh, and xmore scrollbars; clicking the left or right mouse buttons with the pointer at the --- 31,37 ---- the middle button returns you to the manual page previously on the screen. ! SCROLLING TEXT The scrollbars are similar to xterm, xmh, and xmore scrollbars; clicking the left or right mouse buttons with the pointer at the *************** *** 46,52 **** down or up one page, respectively. You may also type 'f' or <space bar> to scroll down one page, and 'b' to scroll up one page. ! RESIZING THINGS: You can resize any of the windows in xman with your favorite window manager, and xman will to the best it can to resize everything --- 46,52 ---- down or up one page, respectively. You may also type 'f' or <space bar> to scroll down one page, and 'b' to scroll up one page. ! RESIZING THINGS You can resize any of the windows in xman with your favorite window manager, and xman will to the best it can to resize everything *************** *** 60,71 **** the mouse button is released xman will move the pane boundry to the newly specified location. ! FOR FURTHER INFORMATION: Information on customizing xman through resource and command line options can be found in the xman manpage. ! SUMMARY OF BASIC ACTIONS: Any time: --- 60,71 ---- the mouse button is released xman will move the pane boundry to the newly specified location. ! FOR FURTHER INFORMATION Information on customizing xman through resource and command line options can be found in the xman manpage. ! SUMMARY OF BASIC ACTIONS Any time: *************** *** 90,96 **** CLICK RIGHT: Move Up - more if pointer is near bottom of window, less if at top. ! EXTENDED COMMANDS: To reach the extended commands simply move the mouse over the label at the top of the manual page display window; this will activate the --- 90,96 ---- CLICK RIGHT: Move Up - more if pointer is near bottom of window, less if at top. ! EXTENDED COMMANDS To reach the extended commands simply move the mouse over the label at the top of the manual page display window; this will activate the *** /tmp/,RCSt1a17274 Fri Jan 6 18:57:08 1989 --- clients/xman/xman.man Fri Jan 6 18:42:39 1989 *************** *** 1,6 **** .TH XMAN 1 "24 October 1988" "X Version 11" .SH NAME ! xman - display manual pages .SH SYNOPSIS .B xman [-options ...] --- 1,6 ---- .TH XMAN 1 "24 October 1988" "X Version 11" .SH NAME ! xman - Manual page display program for the X Window System. .SH SYNOPSIS .B xman [-options ...] *************** *** 18,50 **** help information. The rest of this manual page will discuss customization of \fIxman\fP. .PP .I Xman ! accomodates new manual sections by the use of the environment variable ! MANPATH and by directory description files named \fImandesc\fP. ! .I Xman ! will search each directory specified in the environment variable ! MANPATH for the following subdirectories only: man0, man1, ..., man8, ! manl (local), and mann (new). ! (It usually ignores the ! information in man0 unless there is a \fImandesc\fP file that specifically ! tells it not to.) ! These subdirectories each represent ! a separate section of the manual. These subdirectories should contain ! man pages. Any manual section can be renamed by an optional ! \fImandesc\fP file. .PP ! As an example, if MANPATH was set to \fI/usr/man:/usr/sipb/man\fP ! and there was no \fImandesc\fP file in /usr/man, \fIxman\fP ! would put all of the files in the default section names ! (e.g. manl gets a section name of local). ! But if there were a \fImandesc\fP file in ! /usr/sipb/man which contained the line \fIlSIPB Programs\fP, ! then \fIxman\fP would put all files in the ! manl subdirectory in a new section ! called ``SIPB Programs''. \fIXman\fP will search the \fImandesc\fP file until ! there are no more lines of information. This flexibility is ideal ! for courses that have their own manual pages. .PP .I Xman creates temporary files in /tmp for all unformatted man pages and all apropos searches. --- 18,130 ---- help information. The rest of this manual page will discuss customization of \fIxman\fP. .PP + .sh "CUSTOMIZING XMAN" + .PP .I Xman ! allows customization of both the directories to be searched for manual pages, ! and the name that each directory will map to in the \fIManual Sections\fP ! menu. Xman determines which direcories it will ! search by reading the \fIMANPATH\fP environment variable. This enviroment ! is expected to be a colon seperated list of directories for xman to search. ! .nf ! ! setenv MANPATH /mit/kit/man:/usr/man ! .fi .PP ! By default, ! .I xman ! will search each of the following directories (in each of the directories ! specified in the users MANPATH) for manual pages. If manual pages exist ! in that directory then they are added to list of manual pages for ! the corrosponding menu item. ! A menu item is only displayed for those sections that actually contain ! manual pages. ! .ta 1.5i ! .nf ! ! Directory Section Name ! --------- ------------ ! man1 User Commands (1) ! man2 System Calls (2) ! man3 Subroutines (3) ! man4 Devices (4) ! man5 File Formats (5) ! man6 Games (6) ! man7 Miscellaneous (7) ! man8 Sys. Administration (8) ! manl Local (l) ! mann New (n) ! mano Old (o) ! ! .fi ! For instance, a user has three directories in her manual path and each ! contain a directory called \fIman3\fP. All these manual pages will appear ! alphabetically sorted when the user clicks on the menu item called ! \fISubroutines (3)\fP. If there is no directory called \fImano\fP in ! any of the directories in her MANPATH, or there are no manual pages ! in any of the directories called \fImano\fP then no menu item will be ! displayed for the section called \fIOld (o)\fP. .PP + .sh "THE MANDESC FILE" + .PP + By using the \fImandesc\fP file a user or system manager is able to + more closely control which manual pages will appear in each of the sections + represented by menu items in the \fIManual Sections\fP menu. This + functionality is only avaliable on a section by section basis, and individual + manual pages may not be handled in this manner (Although generous use of + symbolic links - ln(1) - will allow almost any configuration you can imagine). + The format of the mandesc file is a character followed by a label. The + character determines which of the sections will be added under this label. + For instance suppose that you would like to create an extra menu item that + contains all programmer subroutines. This label should contain all manual + pages in both sections two and three. The \fImandesc\fP file + would look like this. + .nf + + 2Programmer Subroutines + 3Programmer Subroutines + + .fi + This will add a menu item to the \fIManual Sections\fP menu that would + bring up a listing of all manual pages in sections two and three of + Unix Programmers Manual. Since the label names are \fIexactly\fP the + same they will be added to the same section. Note, however, that the + original sections still exist. + .PP + If you want to completely ignore the default sections in a manual directory + the add the line: + .nf + + no default sections + + .fi + Anywhere in your mandesc file. This keeps xman from searching + the default manual sections \fIIn that directory only\fP. As an example, + suppose you want to do the same thing as above, but you don't think that + it is useful to have the \fISystem Calls\fP or \fISubroutines\fP sections + any longer. You would need to duplicate the default entries, as well as + adding your new one. + .nf + + no default sections + 1User Commands (1) + 2Programmer Subroutines + 3Programmer Subroutines + 4Devices (4) + 5File Formats (5) + 6Games (6) + 7Miscellaneous (7) + 8Sys. Administration (8) + lLocal (l) + nNew (n) + oOld (o) + + .fi + Xman will read any section that is of the from \fIman<character>\fP, where + <character> is an upper or lower case letter (they are treated distinctly) or + a numeral (0-9). Be warned, however, that man(1) and catman(8) will + not search directories that are non-standard. + .PP .I Xman creates temporary files in /tmp for all unformatted man pages and all apropos searches. *************** *** 186,192 **** mandesc .PP .SH "SEE ALSO" ! X(1), X(8C), man(1), apropos(1) .PP .SH ENVIRONMENT DISPLAY - the default host and display to use. --- 266,272 ---- mandesc .PP .SH "SEE ALSO" ! X(1), X(8C), man(1), apropos(1), catman(8) .PP .SH ENVIRONMENT DISPLAY - the default host and display to use. -- Mike Wexler(wyse!mikew) Phone: (408)433-1000 x1330 Moderator of comp.sources.x