/************************************************************************ * * * Copyright (c) 1982, Fred Fish * * All Rights Reserved * * * * This software and/or documentation is released for public * * distribution for personal, non-commercial use only. * * Limited rights to use, modify, and redistribute are hereby * * granted for non-commercial purposes, provided that all * * copyright notices remain intact and all changes are clearly * * documented. The author makes no warranty of any kind with * * respect to this product and explicitly disclaims any implied * * warranties of merchantability or fitness for any particular * * purpose. * * * ************************************************************************ */ /* * LIBRARY FUNCTION * * tgetnum extract numeric option from termcap entry * * KEY WORDS * * termcap * ce functions * * SYNOPSIS * * tgetnum(id) * char *id; * * DESCRIPTION * * Returns numeric value of capability , or -1 if * is not found. Knows about octal numbers, which * begin with 0. * */ #include extern char *_tcpbuf; /* Termcap entry buffer pointer */ /* * PSEUDO CODE * * Begin tgetnum * Initialize pointer to the termcap entry buffer. * While there is a field to process * Skip over the field separator character. * If this is the entry we want then * If the entry is not a numeric then * Return failure value. * Else * Initialize value to zero. * If number begins with zero then * Set accumulation base to 8. * Else * Set accumulation base to 10. * End if * While there is a numeric character * Accumulate the value. * End while * Return value. * End if * End if * End while * Return failure value. * End tgetnum * */ tgetnum(id) char *id; { int value, base; char *bp; extern char *index(); bp = _tcpbuf; while ((bp = index(bp,':')) != NULL) { bp++; if (*bp++ == id[0] && *bp != NULL && *bp++ == id[1]) { if (*bp != NULL && *bp++ != '#') { return(-1); } else { value = 0; if (*bp == '0') { base = 8; } else { base = 10; } while (isdigit(*bp)) { value *= base; value += (*bp++ - '0'); } return(value); } } } return(-1); }