Add checking for inconsistent tab usage
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index 21583ac..c2cb151 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -125,6 +125,11 @@
 	tok->prompt = tok->nextprompt = NULL;
 	tok->lineno = 0;
 	tok->level = 0;
+	tok->filename = NULL;
+	tok->altwarning = 0;
+	tok->alterror = 0;
+	tok->alttabsize = 1;
+	tok->altindstack[0] = 0;
 	return tok;
 }
 
@@ -422,6 +427,24 @@
 }
 
 
+static int
+indenterror(tok)
+	struct tok_state *tok;
+{
+	if (tok->alterror) {
+		tok->done = E_INDENT;
+		tok->cur = tok->inp;
+		return 1;
+	}
+	if (tok->altwarning) {
+		fprintf(stderr, "%s: inconsistent tab/space usage\n",
+			tok->filename);
+		tok->altwarning = 0;
+	}
+	return 0;
+}
+
+
 /* Get next token, after space stripping etc. */
 
 int
@@ -440,15 +463,19 @@
 	/* Get indentation level */
 	if (tok->atbol) {
 		register int col = 0;
+		register int altcol = 0;
 		tok->atbol = 0;
 		for (;;) {
 			c = tok_nextc(tok);
 			if (c == ' ')
-				col++;
-			else if (c == '\t')
+				col++, altcol++;
+			else if (c == '\t') {
 				col = (col/tok->tabsize + 1) * tok->tabsize;
+				altcol = (altcol/tok->alttabsize + 1)
+					* tok->alttabsize;
+			}
 			else if (c == '\014') /* Control-L (formfeed) */
-				col = 0; /* For Emacs users */
+				col = altcol = 0; /* For Emacs users */
 			else
 				break;
 		}
@@ -469,6 +496,10 @@
 		if (!blankline && tok->level == 0) {
 			if (col == tok->indstack[tok->indent]) {
 				/* No change */
+				if (altcol != tok->altindstack[tok->indent]) {
+					if (indenterror(tok))
+						return ERRORTOKEN;
+				}
 			}
 			else if (col > tok->indstack[tok->indent]) {
 				/* Indent -- always one */
@@ -478,8 +509,13 @@
 					tok->cur = tok->inp;
 					return ERRORTOKEN;
 				}
+				if (altcol <= tok->altindstack[tok->indent]) {
+					if (indenterror(tok))
+						return ERRORTOKEN;
+				}
 				tok->pendin++;
 				tok->indstack[++tok->indent] = col;
+				tok->altindstack[tok->indent] = altcol;
 			}
 			else /* col < tok->indstack[tok->indent] */ {
 				/* Dedent -- any number, must be consistent */
@@ -495,6 +531,10 @@
 					tok->cur = tok->inp;
 					return ERRORTOKEN;
 				}
+				if (altcol != tok->altindstack[tok->indent]) {
+					if (indenterror(tok))
+						return ERRORTOKEN;
+				}
 			}
 		}
 	}