diff --git a/src/lex.c b/src/lex.c
index 0cb7b442866ae0209331074fe75ce89109ed592b..7e0e3065d728a8c8fb31a845fea42f8d8fc8ad1b 100644
--- a/src/lex.c
+++ b/src/lex.c
@@ -4,7 +4,7 @@
 ||| See the files COPYING and DISCLAIMER for more information.
 \*/
 #include "global.h"
-RCSID("$Id: lex.c,v 1.30 1997/11/08 01:34:40 hubbe Exp $");
+RCSID("$Id: lex.c,v 1.31 1997/12/16 22:31:25 grubba Exp $");
 #include "language.h"
 #include "array.h"
 #include "lex.h"
@@ -1868,6 +1868,70 @@ static void low_lex(void)
 	  UNGETSTR(" 0 ",3);
 
 	continue;
+      } else if (!strcmp("resolv", my_yylval.str)) {
+	int res = 0;
+	struct svalue *oldsp = sp;
+
+	SKIPWHITE();
+	if (!GOBBLE('(')) {
+	  yyerror("Missing '(' in #if resolv().\n");
+	  return;
+	}
+	READBUF(isidchar(C));
+
+	/* code from low_idents here */
+	if (get_master) {
+	  push_text(buf);
+	  current_file->refs++;
+	  push_string(current_file);
+
+	  SAFE_APPLY_MASTER("resolv", 2);
+
+	  if ((throw_value.type != T_STRING) &&
+	      (!(IS_ZERO(sp-1) && sp[-1].subtype == 1))) {
+	    res = 1;
+	  }
+	} else {
+	  res = 0;
+	}
+
+	while(GOBBLE('.')) {
+	  READBUF(isidchar(C));
+	  if (res) {
+	    JMP_BUF recovery;
+
+	    push_text(buf);
+
+	    free_svalue(&throw_value);
+	    throw_value.type = T_INT;
+
+	    if (SETJMP(recovery)) {
+	      res = 0;
+	    } else {
+	      f_index(2);
+	      if (IS_ZERO(sp-1) && sp[-1].subtype == 1) {
+		res = 0;
+	      }
+	    }
+	    UNSETJMP(recovery);
+	  }
+	}
+	
+	if (!GOBBLE(')')) {
+	  yyerror("Missing ')' in #if resolv().\n");
+	  return;
+	}
+
+	if (sp > oldsp) {
+	  pop_n_elems(sp - oldsp);
+	}
+
+	if (res) {
+	  UNGETSTR(" 1 ", 3);
+	} else {
+	  UNGETSTR(" 0 ", 3);
+	}
+	continue;
       }
 
       s=findstring(my_yylval.str);