|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ T t ┃
Length: 2573 (0xa0d) Types: TextFile Names: »tgetnum.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─ ⟦this⟧ »EUUGD11/euug-87hel/sec1/micrognu/sys/vms/termcap/tgetnum.c«
/************************************************************************ * * * 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. * * * ************************************************************************ */ /* Modified: * 30-Apr-86 Mic Kaczmarczik * Use ctype.h macros instead of the function isdigit(). * #define index to strchr if VAXC */ \f /* * 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 <id>, or -1 if <id> * is not found. Knows about octal numbers, which * begin with 0. * */ #include <stdio.h> #include <ctype.h> #ifdef VAXC #define index strchr #endif extern char *_tcpbuf; /* Termcap entry buffer pointer */ \f /* * 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); }