"Edward L. Sutter" <els@sage.sage.att.com> Perhaps there is already a better way to do this, but since I couldn'd find one, I'd like to make a suggestion that has helped me quite a bit for getting the proper hypertext links. Keep in mind that this is under the context of me converting "man" directories with their typical sub-directories of man1, man2, etc... to an equivalently structured "html" directory with the same sub-directory heirarchy. I added an option to rman that allows it to search for the files over a specified set of directories. This allows (for example) manpages under man1 that reference something under man3 to be properly linked. rman.c v2.4 ... ... /* ELS: added to support a smarter external reference generator. */ char *SearchDirs=0; int HrefSearch(); ... /* ELS: added the -S option: */ while ((c=getopt(argc,argv,"Kh?f:l:r:bckmTpvn:t:s:yS:"))!=-1) switch (c) { case 'k': fHeadfoot=1; break; case 'b': fSubsections=1; break; case 'c': fChangeleft=1; break; case 'S': SearchDirs=optarg; break; ... void HTML(enum command cmd) { ... case BEGINMANREF: for (p=hitxt; *p && *p!='('; p++) /* empty */; *p++='\0'; p0=p; for (; *p && *p!=')'; p++) /* empty */; *p='\0'; /* ELS: added a call to HrefSearch() if the -S option is set.. */ if (SearchDirs) HrefSearch(hitxt,p0); else { printf("<A HREF=\""); printf(manRef, hitxt, p0); printf("\">"); } break; ... /* ELS... HrefSearch(): Active only with command line option -S... Called when rman -fHTML has determined that it is going to add a hypertext link. The user tells rman where to search for the hypertext links (local machine search only) and if HrefSearch() finds the file SRCHDIR/manname.section where SRCHDIR is one of the colon-delimited paths specified with the -S option; manname is the text that rman found preceding a "manname(##)" detection; section is the string within the parens of the manname spec; then it will use that path to build the HREF line. If not found, then <A> is all that is inserted. This is generally only helpful when you are simply attempting to turn a man directory into an html directory. Note that if the first char of SearchDirs is a colon, then if HrefSearch does not find the reference, it defaults to what rman used to do (use manRef, -r option); otherwise, it will not add a hypertext link at all. */ HrefSearch(manname,section) char *manname, *section; { char *dir, *colon, tmp; int DefaultToManRef; FILE *fp; static char path[256]; tmp = 0; again: if (SearchDirs[0] == ':') { dir = &SearchDirs[1]; DefaultToManRef = 1; } else { dir = SearchDirs; DefaultToManRef = 0; } /* Make 2 passes on all search directories... */ /* First pass is with the path dir/manname.section */ /* Second pass is with the path dir/manname.section[0] */ /* This allows the spec manname(3x) to be found as manname.3 */ /* just in cast manname.3x doesn't exist. */ /* Note that the second pass is only necessary if the section */ /* string is more than one character in length. */ while(1) { colon = strchr(dir,':'); if (colon) *colon = 0; sprintf(path,"%s/%s.%s.html",dir,manname,section); if ((fp = fopen(path,"rw")) != NULL) { printf("<A HREF=\""); printf("%s",path); printf("\">"); fclose(fp); if (colon) *colon = ':'; fprintf(stderr,"HREF @ %s\n",path); return(1); } if (colon) { *colon = ':'; dir = colon+1; } else break; } if (section[1]) { tmp = section[1]; section[1] = 0; dir = SearchDirs; goto again; } if (tmp) section[1] = tmp; if (DefaultToManRef) { printf("<A HREF=\""); printf(manRef, manname, section); printf("\">"); } else printf("<A>"); return(1); } /* End ELS additions. */