DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T t

⟦c0afd5b68⟧ TextFile

    Length: 2573 (0xa0d)
    Types: TextFile
    Names: »tgetnum.c«

Derivation

└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
    └─ ⟦this⟧ »EUUGD11/euug-87hel/sec1/micrognu/sys/vms/termcap/tgetnum.c« 

TextFile

/************************************************************************
 *									*
 *			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);
}