+static char *
+decode_at_digraphs (char *in)
+{
+ char *out_start = xnmalloc (strlen (in)+1, sizeof *out_start);
+ char *out;
+ for (out = out_start; *in != '\0'; ++in, ++out)
+ {
+ if (*in == '@')
+ {
+ switch (*++in)
+ {
+ case '@': *out = '@'; break;
+ case '{': *out = '['; break;
+ case '}': *out = ']'; break;
+ default:
+ if (*in != '\0')
+ in[1] = '\0';
+ fatal ("invalid @ in skeleton: %s", in-1);
+ break;
+ }
+ }
+ else
+ *out = *in;
+ }
+ *out = '\0';
+ return out_start;