+ if (p->type == para_Config &&
+ !ustricmp(p->keyword, L"info-dir-entry")) {
+ wchar_t *section, *shortname, *longname, *kw;
+ char *s;
+
+ section = uadv(p->keyword);
+ shortname = *section ? uadv(section) : NULL;
+ longname = *shortname ? uadv(shortname) : NULL;
+ kw = *longname ? uadv(longname) : NULL;
+
+ if (!*longname) {
+ error(err_infodirentry, &p->fpos);
+ continue;
+ }
+
+ rdaddsc(&intro_text, "INFO-DIR-SECTION ");
+ s = utoa_dup(section);
+ rdaddsc(&intro_text, s);
+ sfree(s);
+ rdaddsc(&intro_text, "\nSTART-INFO-DIR-ENTRY\n* ");
+ s = utoa_dup(shortname);
+ rdaddsc(&intro_text, s);
+ sfree(s);
+ rdaddsc(&intro_text, ": (");
+ s = dupstr(conf.filename);
+ if (strlen(s) > 5 && !strcmp(s+strlen(s)-5, ".info"))
+ s[strlen(s)-5] = '\0';
+ rdaddsc(&intro_text, s);
+ sfree(s);
+ rdaddsc(&intro_text, ")");
+ if (*kw) {
+ keyword *kwl = kw_lookup(keywords, kw);
+ if (kwl && kwl->para->private_data) {
+ node *n = (node *)kwl->para->private_data;
+ rdaddsc(&intro_text, n->name);
+ }
+ }
+ rdaddsc(&intro_text, ". ");
+ s = utoa_dup(longname);
+ rdaddsc(&intro_text, s);
+ sfree(s);
+ rdaddsc(&intro_text, "\nEND-INFO-DIR-ENTRY\n\n");
+ }
+
+ for (p = sourceform; p; p = p->next)