fprintf(fout, separator);
fprintf(fout, "%s", separator);
pdeclaration(name, dec, tab, separator)	char *name;	declaration *dec;	int tab;	char *separator;{	char buf[8];	/* enough to hold "struct ", include NUL */	char *prefix;	char *type;	if (streq(dec->type, "void"))		return;	tabify(fout, tab);	if (streq(dec->type, name) && !dec->prefix) {		fprintf(fout, "struct ");	}	if (streq(dec->type, "string")) {		fprintf(fout, "char *%s", dec->name);	} else {		prefix = "";		if (streq(dec->type, "bool")) {			type = "bool_t";		} else if (streq(dec->type, "opaque")) {			type = "char";		} else {			if (dec->prefix) {				snprintf(buf, sizeof buf, "%s ", dec->prefix);				prefix = buf;			}			type = dec->type;		}		switch (dec->rel) {		case REL_ALIAS:			fprintf(fout, "%s%s %s", prefix, type, dec->name);			break;		case REL_VECTOR:			fprintf(fout, "%s%s %s[%s]", prefix, type, dec->name,				dec->array_max);			break;		case REL_POINTER:			fprintf(fout, "%s%s *%s", prefix, type, dec->name);			break;		case REL_ARRAY:			fprintf(fout, "struct {\n");			tabify(fout, tab);			fprintf(fout, "\tu_int %s_len;\n", dec->name);			tabify(fout, tab);			fprintf(fout, "\t%s%s *%s_val;\n", prefix, type, dec->name);			tabify(fout, tab);			fprintf(fout, "} %s", dec->name);			break;		}	}	fprintf(fout, separator);}