Handle \$* and \$@ escapes. diff -ruN -x '*.rej' -x '*.orig' man-1.6e-old/man2html/man2html.c man-1.6e/man2html/man2html.c --- man-1.6e-old/man2html/man2html.c 2007-04-17 00:34:40.000000000 +0200 +++ man-1.6e/man2html/man2html.c 2007-04-17 00:29:47.000000000 +0200 @@ -615,6 +615,7 @@ static char * scan_escape(char *c) { char *h=NULL; + char *tmp = NULL; char b[10]; INTDEF *intd; int exoutputp,exskipescape; @@ -630,8 +631,26 @@ case '$': if (argument) { c++; - i=(*c -'1'); - if (!(h=argument[i])) h=""; + if (*c == '*' || *c == '@') { + int len = 0; + int quote = (*c == '@') ? 2 : 0; + + for (i = 0; ((h = argument[i])); i++) + len += strlen(h) + 1 + quote; + tmp = (char*) xmalloc(len + 1); + *tmp = 0; + + for (i = 0; ((h = argument[i])); i++) { + sprintf(tmp, "%s %s%s%s", tmp, + quote ? "\"" : "", + h, + quote ? "\"" : ""); + }; + h = tmp + 1; + } else { + i=(*c -'1'); + if (!(h=argument[i])) h=""; + } } break; case 'z': @@ -791,6 +810,7 @@ } c++; if (!skip_escape) out_html(h); + if (tmp) free(tmp); return c; }