/* %Src=tu-toks.h %Dir=\rltraynh/c/stuff/ %Date=92/10/13-10:18am Ttoks.h */ #ifndef TU_TOKS_H #define TU_TOKS_H /*----------------------- Dedicate a bit more than 12-K for Tok stuff ---*/ #define TOK_MAX 48 #define MAX_TOKS 48 #define TOK_ARRAY_DIM_MAX 49 #define TOK_SIZE 256 short Ntoks; /* Number of toks pulled */ char *GG_tok; /* And the current one accessed as "first" */ short Cur_TOK = 0; short GG_comment_mode = 0; short TOK_cur_col, TOK_prev_col; char *Tok [TOK_ARRAY_DIM_MAX]; short TOK_col [TOK_ARRAY_DIM_MAX]; char *Junk_tok = NULL; #define TOK_IS_UNKNOWN 0 #define TOK_IS_PLUS_OR_MINUS_SIGN 1 #define TOK_IS_UNARY_MINUS 2 #define TOK_IS_UNARY_PLUS 3 #define TOK_IS_MULT_OR_DIV_SIGN 4 #define TOK_IS_VARIABLE 5 /* The following macro is used by Pull_toks_as_args AND Pull_tokens (etc) */ /* It assumes that Xd -> GG_tok (at init time), etc. */ #define SAVE_TOK do { if (Ntoks < TOK_MAX) Ntoks++;\ *Xd = '\0';\ strcpy (Tok[Ntoks], GG_tok);\ TOK_col [Ntoks] = TOK_prev_col;\ TOK_prev_col = TOK_cur_col;\ *GG_tok = '\0';\ Xd = GG_tok;\ } while (1==0) #define EXTRACT_DOUBLE_SLASH_COMMENT do {\ Xc = GG_comment;\ while ( (*Xs != '\0')\ && (*Xs != '\04')\ ) *Xc++ = *Xs++;\ *Xc = '\0';\ Cur_TOK = 1;\ return;\ } while (1==0) #define TERMINATE_COMMENT_ON_THIS_LINE do {\ GG_comment_mode = 0;\ *Xc++ = *Xs++;\ *Xc++ = *Xs++;\ TOK_cur_col += 2;\ *Xc = '\0';\ } while (1==0) #define EXTRACT_SLASH_STAR_COMMENT do {\ Xc = GG_comment;\ *Xc++ = *Xs++;\ *Xc++ = *Xs++;\ TOK_cur_col += 2;\ GG_comment_mode = 1;\ while ( (*Xs != '\0')\ && (*Xs != '\04')\ && (GG_comment_mode == 1)\ )\ {\ *Xc++ = *Xs++; TOK_cur_col++;\ Xj = Xs; Xj++;\ if ((*Xs == '*') && (*Xj == '/'))\ TERMINATE_COMMENT_ON_THIS_LINE;\ }\ } while (1==0) /* Usage example: Xs = GG_src_line; | | while (*Xs != '\0') | { | Xj = Xs; Xj++; | if ( (*Xs == '/') | && ((*Xj == '/') || (*Xj = '*')) | ) EXTRACT_GG_COMMENT; | el some actual statement processing | } +------------------------------------------------------------------*/ #define EXTRACT_GG_COMMENT\ do {\ if (*Xj == '/') EXTRACT_DOUBLE_SLASH_COMMENT;\ el EXTRACT_SLASH_STAR_COMMENT;\ } while (1==0) #define TAB_SETTING 9 int TABO; #define CONVERT_TABS_XD_XS do { for (TABO=0; TABO