home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (c) 1988 Bellcore
- ** All Rights Reserved
- ** Permission is granted to copy or use this program, EXCEPT that it
- ** may not be sold for profit, the copyright notice must be reproduced
- ** on copies, and credit should be given to Bellcore where it is due.
- ** BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM.
- */
-
-
- #ifndef K_INCLUDED
- #include "float.h"
- #include "tol.h"
- #include "strings.h"
-
- #define K_MAXTOKENS 50000
- /*
- ** values for token type
- */
- #define K_LIT 1
- #define K_FLO_NUM 2
-
-
- typedef struct {
- int linenum; /* line that the token started on */
- int pos; /* position on the line where token started */
- int type; /* token type */
- char *text; /* literal token text */
- /*
- ** canonical floationg point representation
- */
- F_float flo_num;
- T_tol tolerance;
- } _K_str, *K_token;
-
- /*
- ** this should really be a two dimensional array
- ** but i'm too lazy to recode it
- */
- extern K_token _K_ato[]; /* storage for the tokens */
- extern K_token _K_bto[];
- /*
- ** save token X from file
- */
- extern void K_settoken(/*file,X,ptr*/);
- #define K_gettoken(file, X) (file?(_K_bto[X]):(_K_ato[X]))
-
- extern int _K_atm; /* count of tokens */
- extern int _K_btm;
-
- /*
- ** get token number X from file
- */
- #define K_get_token(file, X) (file?(_K_bto[X]):(_K_ato[X]))
-
- #define K_gettmax(file) (file?_K_btm:_K_atm)
- #define K_settmax(file,value) (file?(_K_btm=(value)):(_K_atm=(value)))
- /*
- ** increment and return true on overflow
- */
- #define K_inctmax(file) ((file?(++_K_btm):(++_K_atm))>=K_MAXTOKENS)
-
- #define K_setline(x,y) (x->linenum = y)
- #define K_setpos(x,y) (x->pos = y)
- #define K_settext(x,y) (x->text = y)
- #define K_savetext(x,y,z) S_savestr(&(x->text),y)
- #define K_saventext(x,y,z) S_savenstr(&(x->text),y,z)
- #define K_setfloat(x,y) (x->flo_num = y)
- #define K_settol(x,y) (x->tolerance = y)
- #define K_settype(x,y) (x->type = y)
-
- #define K_getline(x) (x->linenum)
- #define K_getpos(x) (x->pos)
- #define K_gettext(x) (x->text)
- #define K_getfloat(x) (x->flo_num)
- #define K_gettol(x) (x->tolerance)
- #define K_gettype(x) (x->type)
-
- #define K_maketoken() (Z_ALLOC(1,_K_str))
-
- #define K_INCLUDED
- #endif
-