STATIC TOKEN_T lexDollar( void ) /******************************* * pre: $ read off input * post: 0 or more characters of token read * returns: MAC token type */ { STRM_T s; TOKEN_T t; s = PreGetCH(); if( (Glob.compat_nmake || Glob.compat_posix) && ismsspecial( s ) ) { t = LexMSDollar( s ); GetModifier(); return( t ); } switch( s ) { case DOLLAR: return( MAC_DOLLAR ); case COMMENT: return( MAC_COMMENT ); case '(': return( MAC_OPEN ); case '+': return( MAC_EXPAND_ON ); case '-': return( MAC_EXPAND_OFF ); case '^': return( lexFormQualifier( MAC_CUR ) ); case '[': return( lexFormQualifier( MAC_FIRST ) ); case ']': return( lexFormQualifier( MAC_LAST ) ); case '@': CurAttr.u.form = FORM_FULL; return( MAC_CUR ); /* UNIX */ case '*': CurAttr.u.form = FORM_NOEXT; return( MAC_CUR ); /* UNIX */ case '<': CurAttr.u.form = FORM_FULL; return( MAC_ALL_DEP ); /* UNIX */ case '?': CurAttr.u.form = FORM_FULL; return( MAC_YOUNG_DEP ); /* UNIX */ default: UnGetCH( s ); return( MAC_START ); } }
TOKEN_T LexToken( enum LexMode mode ) /******************************************* * returns: next token of input */ { STRM_T s; TOKEN_T t = TOK_NULL; s = PreGetCHR(); switch( mode ) { case LEX_MAC_DEF: t = LexMacDef( s ); break; case LEX_MAC_SUBST: t = LexMacSubst( s ); break; case LEX_PARSER: t = LexParser( s ); break; case LEX_PATH: t = LexPath( s ); break; case LEX_MS_MAC: t = LexMSDollar ( s ); break; } return( t ); }