#include <stdio.h>

char	termbuf[128];
char	*termp = termbuf;
char	expandbuf[128];

char	*tgetstr(), *getenv();

/* expand string `s' in buffer `d' */

void
expand(d, s)
register char	*d, *s;
{
	register char	*t;
	register int	c;

	while (c = *s++) {
		if ((c &= 0377) <= 040) {
			/* special escapes */
			for (t = "\bb\nn\rr\33E\tt\ff s";
			     *t && (*t++ != c);
			     t++) ;
			if (*t)
				*d++ = '\\', *d++ = *t;
			else
				*d++ = '^', *d++ = c + '@';
		}
		else if (c >= 0177) {
			sprintf(d, "\\%03o", c);
			d += 4;
		}
		else switch (c) {
		case ':':
		case '^':
		case ',':
		case '\\':
			*d++ = '\\';
		default:
			*d++ = c;
		}
	}
	*d = '\0';
}

main(argc, argv)
int	argc;
char	*argv[];
{
	char		buf[2048];
	register char	*t;
	register char	id[2];
	register int	n;

	if (tgetent(buf, argc > 1 ? argv[1] : getenv("TERM")) != 1) {
		fprintf(stderr, "tgetent failed\n");
		exit(1);
	}
	/* brute force */
	for (id[0] = 041; id[0] < 0177; id[0]++)
		for (id[1] = 041; id[1] < 0177; id[1]++) {
			if (t = tgetstr(id, &termp)) {
				termp = termbuf;
				expand(expandbuf, t);
				printf("%.2s=%s\n", id, expandbuf);
			}
			else if (tgetflag(id))
				printf("%.2s\n", id);
			else if ((n = tgetnum(id)) >= 0)
				printf("%.2s#%d\n", id, n);
		}

	return 0;
}
	
		
