home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!munnari.oz.au!goanna!escargot!minyos.xx.rmit.oz.au!s902113
- From: s902113@minyos.xx.rmit.oz.au (Luke Mewburn)
- Newsgroups: comp.unix.bsd
- Subject: Re: ->386bsd! man-pages.Z ?
- Message-ID: <1dr6fkINN95s@escargot.xx.rmit.OZ.AU>
- Date: 11 Nov 92 14:48:20 GMT
- References: <1992Nov11.053352.29060@utkux1.utk.edu>
- Organization: RMIT Computer Centre
- Lines: 237
- NNTP-Posting-Host: minyos.xx.rmit.oz.au
-
- frank@martha.utcc.utk.edu (frank segner (phrank)) writes:
-
- >hi folks !
-
- >recently i made a du (-k) /usr/share/man... (just about 4 Mb ascii... ;-( )
- >that reminded me of the time i ran isc, there it was !better! (manpage.0.Z)
- >my 'zcat whatever.Z |less' would be fast enough...
- >does someone have an idea where to find a decent replacement for the
- >original man?
- >if so -> let me know ; flames -> /dev/null ;-]
- >so long
-
- As an experiment, I hacked the man sources to do this. Unfortunately,
- my hack is not the best, and can die when you do man -a intro (or
- something with lots of manuals - I since found out that the normal
- man command does the same thing - there is a patch available for this
- latter bug but my hack doesn't include it.) I can post my diffs to the
- net.
- (Note, I admit my way is a kludge, but it works, albiet a little
- slowly - you have to wait whilst it temporarily uncompresses _all_
- manuals you ask for, cause I didn't hack the way it built up the list
- of files to display)
-
- PS: I just noticed - the diffs add some printfs I had as a leftover
- from debugging... They can be easily found after you apply the patch -
- just look for a printf() in col 0:)
-
- -- diffs --
- *** orig.man.c Tue Aug 18 01:40:10 1992
- --- man.c Tue Aug 18 01:57:58 1992
- ***************
- *** 48,53 ****
- --- 48,54 ----
- #include <ctype.h>
- #include <string.h>
- #include <stdlib.h>
- + #include <unistd.h>
- #include "pathnames.h"
-
- extern int errno;
- ***************
- *** 56,61 ****
- --- 57,69 ----
- char *command, *machine, *p_augment, *p_path, *pager, *progname;
- extern char **arorder, *pathbuf;
-
- + #ifdef COMPRESSED
- + #define ZAKERREXIT { perror("man"); exit(1); }
- +
- + char **tmpfilelist, tmpfilename[MAXPATHLEN + 1];
- + int tmpfilecnt,tmpindexpos;
- + #endif /* COMPRESSED */
- +
- main(argc, argv)
- int argc;
- register char **argv;
- ***************
- *** 64,71 ****
- --- 72,90 ----
- extern int optind;
- int ch, res;
- char *section[2], *check_pager(), *getpath(), **getorder(), *tmp;
- + #ifdef COMPRESSED
- + void cleanup();
- +
- + tmpfilecnt=0;
- + if (( tmpfilelist=calloc(argc,sizeof(char *))) == NULL)
- + ZAKERREXIT
- + atexit(cleanup);
- + (void) tmpnam(tmpfilename);
- + tmpindexpos=strlen(tmpfilename);
- + #endif /* COMPRESSED */
-
- progname = "man";
- +
- while ((ch = getopt(argc, argv, "-acfhkM:m:P:w")) != EOF)
- switch((char)ch) {
- case 'a':
- ***************
- *** 146,151 ****
- --- 165,171 ----
- }
-
- for (; *argv; ++argv) {
- + printf("argv is :%s:\n",*argv);
- if (p_augment)
- res = manual(p_augment, *argv);
- res = manual(p_path, *argv);
- ***************
- *** 156,161 ****
- --- 176,190 ----
- exit(1);
- }
-
- + #ifdef COMPRESSED
- + printf("command is :%s:\n",command);
- + /* wait for uncompressing children */
- + while ((res = wait(NULL)) != -1)
- + printf("child %d finished.\n",res);
- + if (errno != ECHILD)
- + ZAKERREXIT
- + #endif
- +
- /* use system(3) in case someone's pager is "pager arg1 arg2" */
- if (command)
- (void)system(command);
- ***************
- *** 175,180 ****
- --- 204,214 ----
- register char *end;
- char fname[MAXPATHLEN + 1];
-
- + #ifdef COMPRESSED
- + register int is_compressed,pid;
- + char zcatpath[MAXPATHLEN + 1];
- + #endif /* COMPRESSED */
- +
- for (res = 0;; path = end + 1) {
- if (!*path) /* foo: */
- break;
- ***************
- *** 183,203 ****
- continue;
- *end = '\0';
- }
- (void)sprintf(fname, "%s/%s.0", path, name);
- if (access(fname, R_OK)) {
- (void)sprintf(fname, "%s/%s/%s.0", path, machine, name);
- if (access(fname, R_OK))
- continue;
- }
-
- if (f_where)
- (void)printf("man: found in %s.\n", fname);
- ! else if (f_cat)
- cat(fname);
- else if (f_how)
- how(fname);
- else
- add(fname);
- if (!f_all)
- return(1);
- res = 1;
- --- 217,276 ----
- continue;
- *end = '\0';
- }
- + #ifdef COMPRESSED
- + is_compressed=0;
- + #endif /* COMPRESSED */
- (void)sprintf(fname, "%s/%s.0", path, name);
- if (access(fname, R_OK)) {
- (void)sprintf(fname, "%s/%s/%s.0", path, machine, name);
- if (access(fname, R_OK))
- + #ifdef COMPRESSED
- + {
- + (void)sprintf(fname, "%s/%s.0.Z", path, name);
- + if (access(fname, R_OK)) {
- + (void)sprintf(fname, "%s/%s/%s.0.Z", path, machine, name);
- + if (access(fname, R_OK))
- + continue;
- + }
- + }
- + is_compressed++;
- + #else
- continue;
- + #endif /* COMPRESSED */
- }
-
- if (f_where)
- (void)printf("man: found in %s.\n", fname);
- ! else
- ! #ifdef COMPRESSED
- ! {
- ! if (is_compressed)
- ! {
- ! sprintf(tmpfilename+tmpindexpos,"%.2d",tmpfilecnt);
- ! (void)fprintf(stderr,"Uncompressing %s to %s.\n",fname,tmpfilename);
- ! sprintf(zcatpath,"%s %s > %s",_PATH_ZCAT,fname,tmpfilename);
- ! if ((pid=fork()) == -1)
- ! ZAKERREXIT
- ! if (pid == 0)
- ! {
- ! printf("child is %d.\n",getpid());
- ! if (system(zcatpath))
- ! ZAKERREXIT
- ! _exit(0);
- ! }
- ! tmpfilelist[tmpfilecnt++] = strdup(tmpfilename);
- ! strcpy(fname, tmpfilename);
- ! }
- ! #endif /* COMPRESSED */
- ! if (f_cat)
- cat(fname);
- else if (f_how)
- how(fname);
- else
- add(fname);
- + #ifdef COMPRESSED
- + } /* end the brace from elseif (f_cat). */
- + #endif /* COMPRESSED */
- if (!f_all)
- return(1);
- res = 1;
- ***************
- *** 370,372 ****
- --- 443,462 ----
- "usage: man [-ac] [-M path] [-m path] [section] title ...\n");
- exit(1);
- }
- +
- + #ifdef COMPRESSED
- + void cleanup()
- + {
- + int lp;
- + for (lp=0;lp<tmpfilecnt;lp++)
- + {
- + if (tmpfilelist[lp] != NULL)
- + {
- + unlink(tmpfilelist[lp]);
- + if ((errno) && (errno != ENOENT))
- + perror("man");
- + }
- + }
- + _exit(0); /* for when used in sig handlers... */
- + }
- + #endif /* COMPRESSED */
-
- > frank
- >--
- >frank@martha.utk.edu please don't spit on the floor ?!
-
- --
- Luke Mewburn [Zak]
- s902113@minyos.xx.rmit.oz.au zak@rmit.edu.au
- "Nobody dies on the Discworld, they just become dimensionally
- disadvantaged." Terry Pratchett in alt.fan.pratchett
-