/*********************************************************************** * * * This software is part of the ast package * * Copyright (c) 1985-2007 AT&T Knowledge Ventures * * and is licensed under the * * Common Public License, Version 1.0 * * by AT&T Knowledge Ventures * * * * A copy of the License is available at * * http://www.opensource.org/licenses/cpl1.0.txt * * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * * * * Information and Software Systems Research * * AT&T Research * * Florham Park NJ * * * * Glenn Fowler * * David Korn * * Phong Vo * * * ***********************************************************************/ #pragma prototyped #include #include #define IDENT 01 #define USAGE 02 /* * format what(1) and/or ident(1) string a */ char* fmtident(const char* a) { register char* s = (char*)a; register char* t; char* buf; int i; i = 0; for (;;) { while (isspace(*s)) s++; if (s[0] == '[') { while (*++s && *s != '\n'); i |= USAGE; } else if (s[0] == '@' && s[1] == '(' && s[2] == '#' && s[3] == ')') s += 4; else if (s[0] == '$' && s[1] == 'I' && s[2] == 'd' && s[3] == ':' && isspace(s[4])) { s += 5; i |= IDENT; } else break; } if (i) { i &= IDENT; for (t = s; isprint(*t) && *t != '\n'; t++) if (i && t[0] == ' ' && t[1] == '$') break; while (t > s && isspace(t[-1])) t--; i = t - s; buf = fmtbuf(i + 1); memcpy(buf, s, i); s = buf; s[i] = 0; } return s; }