+skin(name)
+ char *name;
+{
+ register int c;
+ register char *cp, *cp2;
+ char *bufend;
+ int gotlt, lastsp;
+ char nbuf[BUFSIZ];
+ int nesting;
+
+ if (name == NOSTR)
+ return(NOSTR);
+ if (index(name, '(') == NOSTR && index(name, '<') == NOSTR
+ && index(name, ' ') == NOSTR)
+ return(name);
+ gotlt = 0;
+ lastsp = 0;
+ bufend = nbuf;
+ for (cp = name, cp2 = bufend; c = *cp++; ) {
+ switch (c) {
+ case '(':
+ /*
+ * Start of a "comment".
+ * Ignore it.
+ */
+ nesting = 1;
+ while ((c = *cp) != 0) {
+ cp++;
+ switch (c) {
+ case '\\':
+ if (*cp == 0)
+ goto outcm;
+ cp++;
+ break;
+ case '(':
+ nesting++;
+ break;
+
+ case ')':
+ --nesting;
+ break;
+ }
+
+ if (nesting <= 0)
+ break;
+ }
+ outcm:
+ lastsp = 0;
+ break;
+
+ case '"':
+ /*
+ * Start of a "quoted-string".
+ * Copy it in its entirety.
+ */
+ while ((c = *cp) != 0) {
+ cp++;
+ switch (c) {
+ case '\\':
+ if ((c = *cp) == 0)
+ goto outqs;
+ cp++;
+ break;
+ case '"':
+ goto outqs;
+ }
+ *cp2++ = c;
+ }
+ outqs:
+ lastsp = 0;
+ break;
+
+ case ' ':
+ if (cp[0] == 'a' && cp[1] == 't' && cp[2] == ' ')
+ cp += 3, *cp2++ = '@';
+ else
+ if (cp[0] == '@' && cp[1] == ' ')
+ cp += 2, *cp2++ = '@';
+ else
+ lastsp = 1;
+ break;
+
+ case '<':
+ cp2 = bufend;
+ gotlt++;
+ lastsp = 0;
+ break;
+
+ case '>':
+ if (gotlt) {
+ gotlt = 0;
+ while (*cp != ',' && *cp != 0)
+ cp++;
+ if (*cp == 0 )
+ goto done;
+ *cp2++ = ',';
+ *cp2++ = ' ';
+ bufend = cp2;
+ break;
+ }
+
+ /* Fall into . . . */
+
+ default:
+ if (lastsp) {
+ lastsp = 0;
+ *cp2++ = ' ';
+ }
+ *cp2++ = c;
+ break;
+ }
+ }
+done:
+ *cp2 = 0;
+
+ return(savestr(nbuf));
+}
+
+/*
+ * Fetch the sender's name from the passed message.
+ * Reptype can be
+ * 0 -- get sender's name for display purposes
+ * 1 -- get sender's name for reply
+ * 2 -- get sender's name for Reply
+ */
+char *
+name1(mp, reptype)