home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.muug.mb.ca
/
2014.06.ftp.muug.mb.ca.tar
/
ftp.muug.mb.ca
/
pub
/
src
/
linux
/
old-src
/
ncurses-1.8.5
/
dump.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-11-04
|
3KB
|
139 lines
/* This work is copyrighted. See COPYRIGHT.OLD & COPYRIGHT.NEW for *
* details. If they are missing then this copy is in violation of *
* the copyright conditions. */
/*
* dump.c - dump the contents of a compiled terminfo file in a
* human-readable format.
*
*/
#include <stdlib.h>
#include <stdio.h>
#include <term.h>
/*
#include "compiler.h"
*/
#define SRCDIR "/usr/lib/terminfo"
static void expand(unsigned char *);
static void usage(void);
void main(argc, argv)
int argc;
char *argv[];
{
int i;
int cur_column;
char buffer[1024];
TERMINAL current_term;
char *terminal;
char *terminfo;
cur_term = ¤t_term;
if((terminal = getenv("TERM")) == NULL)
{
fprintf(stderr,"untic: environment variable TERM not set\n");
exit(1);
}
if((terminfo = getenv("TERMINFO")) == NULL)
{
terminfo = SRCDIR;
}
switch(argc) {
case 1:
/* no parameters */
sprintf(buffer, "%s/%c/%s", terminfo, *terminal, terminal);
break;
case 2:
/* parameter is terminal name */
if(argv[1][0] == '-' && (argv[1][1] == '?' || argv[1][1] == 'h'))
usage();
else
sprintf(buffer, "%s/%c/%s", terminfo, *argv[1], argv[1]);
break;
case 3:
/* parameter is "-f filename" */
if(argv[1][0] == '-' && argv[1][1] == 'f')
sprintf(buffer, "%s", &argv[1][3]);
else
usage();
break;
default:
usage();
}
if (read_entry(buffer, cur_term) < 0) {
fprintf(stderr, "file %s may not be a terminfo entry\n", buffer);
exit(1);
}
printf("%s,\n\t", cur_term->term_names);
cur_column = 9;
for (i=0; i < BOOLCOUNT; i++)
{
printf("%s\n", boolnames[i]);
cur_column += strlen(boolnames[i]) + 2;
}
for (i=0; i < NUMCOUNT; i++)
{
printf("%s#%d\n", numnames[i], cur_term->Numbers[i]);
cur_column += strlen(numnames[i]) + 5;
}
for (i=0; i < STRCOUNT; i++)
{
sprintf(buffer, "%s=%s, ", strnames[i], cur_term->Strings[i]);
expand(buffer);
printf("%s\n", buffer);
cur_column += strlen(buffer);
}
putchar('\n');
}
void expand(unsigned char *str)
{
char buffer[1024];
int bufp;
unsigned char *ptr;
bufp = 0;
ptr = str;
while (*str) {
if (*str < ' ') {
buffer[bufp++] = '^';
buffer[bufp++] = *str + '@';
}
else if (*str < '\177')
buffer[bufp++] = *str;
else {
sprintf(&buffer[bufp], "\\%03o", *str);
bufp += 4;
}
str++;
}
buffer[bufp] = '\0';
strcpy(ptr, buffer);
}
void
usage()
{
fprintf(stderr,"\nusage: untic [term] [-f file] - decompile terminfo database entry\n");
fprintf(stderr," term - terminal name to be decompiled\n");
fprintf(stderr," -f file - filename to be used to decompile\n");
fprintf(stderr," no options - terminal name and terminfo path got from TERM/TERMINFO\n\n");
exit(1);
}