diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 2fce55f11f8240b6c3ffd8f63f05cbd15f055eaf..4844d94f011c059a23eab9cf93fb3754d3e1bb10 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.15 2001-01-11 14:11:56 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.16 2001-01-11 16:00:28 colignon Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -15,7 +15,20 @@
 #include "GUI.h"
 #include "Callbacks.h"
 
+#include <FL/Fl.H>
+#include <FL/Fl_Button.H>
+#include <FL/Fl_Window.H>
+#include <FL/Fl_Input.H>
 #include <FL/fl_file_chooser.H>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <FL/fl_file_chooser.H>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
 
 extern GUI       *WID;
 extern Mesh       M;
diff --git a/Graphics/CreateFile.cpp b/Graphics/CreateFile.cpp
index 1cd92be5dc809fc29ec5061436ffdb7f97bfb56b..8fd922c612048c798caca4ae2a01e9ae37098c7e 100644
--- a/Graphics/CreateFile.cpp
+++ b/Graphics/CreateFile.cpp
@@ -1,4 +1,4 @@
-// $Id: CreateFile.cpp,v 1.8 2001-01-11 14:18:07 geuzaine Exp $
+// $Id: CreateFile.cpp,v 1.9 2001-01-11 16:00:28 colignon Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -22,7 +22,7 @@ extern XContext_T  XCTX;
 #include "gl2ps.h"
 #include "gl2gif.h"
 
-#if !defined(WIN32) && !defined(__CYGWIN__)
+#if !defined(WIN32)
 #include "gl2jpeg.h"
 #endif
 
@@ -104,7 +104,7 @@ void CreateFile (char *name, int format) {
     break;
 #endif
 
-#if !defined(WIN32) && !defined(__CYGWIN__)
+#if !defined(WIN32)
   case FORMAT_JPEG :
     if(!(fp = fopen(name,"wb"))) {
       Msg(WARNING, "Unable to Open File '%s'", name); 
diff --git a/Graphics/gl2jpeg.cpp b/Graphics/gl2jpeg.cpp
index 081323d8102dd0a63b9864387549b05850541055..fc327011cb1f8afa85eafc30928715125fe6f42f 100644
--- a/Graphics/gl2jpeg.cpp
+++ b/Graphics/gl2jpeg.cpp
@@ -1,6 +1,6 @@
-// $Id: gl2jpeg.cpp,v 1.5 2001-01-11 14:18:07 geuzaine Exp $
+// $Id: gl2jpeg.cpp,v 1.6 2001-01-11 16:00:28 colignon Exp $
 
-#if !defined(WIN32) && !defined(__CYGWIN__)
+#if !defined(WIN32)
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -61,5 +61,5 @@ void create_jpeg(FILE *outfile, int width, int height, int quality){
 }
 
 
-#endif //if !defined(__CYGWIN__)
+#endif //if !defined(WIN32)
 
diff --git a/Makefile b/Makefile
index 3aadf6da87ce5ef277d016dc0c2a3980fc7718d0..f0e18bc262d5a9440d3c5f1f6c2d6c8b3c9936aa 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.36 2001-01-11 14:26:18 geuzaine Exp $
+# $Id: Makefile,v 1.37 2001-01-11 16:00:28 colignon Exp $
 # ----------------------------------------------------------------------
 #  Makefile for Gmsh  
 # ----------------------------------------------------------------------
@@ -35,6 +35,7 @@ MESA_MOTIF_STATIC_LIB = $(HOME)/SOURCES/Mesa-static/lib/libGLw.a
         GMSH_DIR = Adapt Common DataStr Geo Graphics Mesh Parser Motif Fltk jpeg utils
  GMSH_XMOTIF_DIR = Adapt Common DataStr Geo Graphics Mesh Parser Motif jpeg
    GMSH_FLTK_DIR = Adapt Common DataStr Geo Graphics Mesh Parser Fltk jpeg
+GMSH_FLTKWIN_DIR = Adapt Common DataStr Geo Graphics Mesh Parser Fltk
     GMSH_BOX_DIR = Adapt Box Common DataStr Geo Mesh Parser
   GMSH_UTILS_DIR = utils
     GMSH_BIN_DIR = bin
@@ -47,6 +48,8 @@ GMSH_ARCHIVE_DIR = archives
                                      -lAdapt -lCommon -lDataStr $(JPEG_LIB)
    GMSH_FLTK_LIB = -L$(GMSH_LIB_DIR) -lFltk -lParser -lGraphics -lMesh -lGeo\
                                      -lAdapt -lCommon -lDataStr $(JPEG_LIB)
+GMSH_FLTKWIN_LIB = -L$(GMSH_LIB_DIR) -lFltk -lParser -lGraphics -lMesh -lGeo\
+                                     -lAdapt -lCommon -lDataStr
     GMSH_BOX_LIB = -L$(GMSH_LIB_DIR) -lBox -lParser -lMesh -lGeo\
                                      -lAdapt -lCommon -lDataStr
     GMSH_ARCHIVE = $(GMSH_ARCHIVE_DIR)/gmsh-`date "+%Y.%m.%d"`
@@ -78,6 +81,26 @@ fltk: initialtag
            "GUI_INCLUDE=$(FLTK_INC)" \
         ); done
 
+fltkwin: initialtag
+	@for i in $(GMSH_FLTKWIN_DIR); do (cd $$i && $(MAKE) \
+           "CC=g++ -mno-cygwin -I/mingw/include" \
+           "C_FLAGS=-O2 -DWIN32" \
+           "OS_FLAGS=-D_LITTLE_ENDIAN" \
+           "VERSION_FLAGS=-D_FLTK" \
+           "GL_INCLUDE=$(OPENGL_INC)" \
+           "GUI_INCLUDE=$(FLTK_INC)" \
+        ); done
+
+fltkcygwin: initialtag
+	@for i in $(GMSH_FLTKWIN_DIR); do (cd $$i && $(MAKE) \
+           "CC=g++" \
+           "C_FLAGS=-O2 -DWIN32" \
+           "OS_FLAGS=-D_LITTLE_ENDIAN" \
+           "VERSION_FLAGS=-D_FLTK" \
+           "GL_INCLUDE=$(OPENGL_INC)" \
+           "GUI_INCLUDE=$(FLTK_INC)" \
+        ); done
+
 threads: initialtag
 	@for i in $(GMSH_XMOTIF_DIR); do (cd $$i && $(MAKE) \
            "CC=$(CC)" \
@@ -113,8 +136,11 @@ gmsh3:
                  $(FLTK_LIB) -lm
 
 gmshwin:
-	$(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) \
-                 -L$(HOME)/SOURCES/fltk/lib -lfltk -lglu32 -lopengl32 -lgdi32 -lwsock32 -lm
+	g++ -mno-cygwin -L/mingw/lib -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTKWIN_LIB) \
+                 $(HOME)/SOURCES/fltk/lib/libfltk.a -lglu32 -lopengl32 -lgdi32 -lwsock32 -lm
+gmshcygwin:
+	g++ -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTKWIN_LIB) \
+                 $(HOME)/SOURCES/fltk/lib/libfltk.a -lglu32 -lopengl32 -lgdi32 -lwsock32 -lm
 
 gmsh4:
 	$(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(MESA_LIB) \
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 38062597e8beb9608d2b2a5841936f17c9b9a3a2..0c3573c4e5d143a0d0d4666ae4c4facb2e9e69bc 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -170,7 +170,7 @@
 #line 1 "Gmsh.y"
  
 
-// $Id: Gmsh.tab.cpp,v 1.59 2001-01-10 10:06:19 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.60 2001-01-11 16:00:28 colignon Exp $
 
 #include <stdarg.h>
 
@@ -2500,7 +2500,7 @@ static const short yycheck[] = {    23,
    166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   175
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/local/share/bison.simple"
+#line 3 "/usr/share/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -2693,7 +2693,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 
-#line 196 "/usr/local/share/bison.simple"
+#line 196 "/usr/share/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -4595,12 +4595,12 @@ case 203:
       }
       else if(!strcmp(yyvsp[-2].c, "Print")){
 
-	if(!CTX.interactive) CreateFile(yyvsp[-1].c, CTX.print.format);
+	//if(!CTX.interactive) CreateFile($2, CTX.print.format);
 
       }
       else if(!strcmp(yyvsp[-2].c, "Save")){
 
-	CreateFile(yyvsp[-1].c, CTX.mesh.format);
+	//CreateFile($2, CTX.mesh.format);
 
       }
       else if(!strcmp(yyvsp[-2].c, "Merge")){
@@ -5871,7 +5871,7 @@ case 342:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/local/share/bison.simple"
+#line 498 "/usr/share/bison.simple"
 
   yyvsp -= yylen;
   yyssp -= yylen;
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index ff26e03edf93c4315e180a0c60313b581518c2ff..8820bedddd5a325dfa000ea08a7da9d4e0c8c92e 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,6 +1,6 @@
 %{ 
 
-// $Id: Gmsh.y,v 1.52 2001-01-09 13:28:49 geuzaine Exp $
+// $Id: Gmsh.y,v 1.53 2001-01-11 16:00:28 colignon Exp $
 
 #include <stdarg.h>
 
@@ -1630,12 +1630,12 @@ Command :
       }
       else if(!strcmp($1, "Print")){
 
-	if(!CTX.interactive) CreateFile($2, CTX.print.format);
+	//if(!CTX.interactive) CreateFile($2, CTX.print.format);
 
       }
       else if(!strcmp($1, "Save")){
 
-	CreateFile($2, CTX.mesh.format);
+	//CreateFile($2, CTX.mesh.format);
 
       }
       else if(!strcmp($1, "Merge")){
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index b639cfa7d298d71cb1b8092a679ef7bead7c91ba..e6d918e4ccede961d837455a9053d6689b8212ec 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.59 2001-01-10 10:06:20 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.60 2001-01-11 16:00:28 colignon Exp $
  */
 
 #define FLEX_SCANNER
@@ -127,7 +127,6 @@ extern FILE *yyin, *yyout;
 		{ \
 		/* Undo effects of setting up yytext. */ \
 		*yy_cp = yy_hold_char; \
-		YY_RESTORE_YY_MORE_OFFSET \
 		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
 		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
 		} \
@@ -237,7 +236,7 @@ void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
 
 YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *str ));
 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
 
 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
@@ -971,13 +970,12 @@ static char *yy_last_accepting_cpos;
 #define REJECT reject_used_but_not_detected
 #define yymore() yymore_used_but_not_detected
 #define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
 #line 1 "Gmsh.l"
 #define INITIAL 0
 #line 2 "Gmsh.l"
 
-// $Id: Gmsh.yy.cpp,v 1.59 2001-01-10 10:06:20 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.60 2001-01-11 16:00:28 colignon Exp $
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -1020,7 +1018,7 @@ void   skipline(void);
 	     && ferror( yyin ) )					\
      YY_FATAL_ERROR( "input in flex scanner failed" );
 
-#line 1024 "Gmsh.yy.cpp"
+#line 1022 "Gmsh.yy.cpp"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1042,10 +1040,6 @@ static void yyunput YY_PROTO(( int c, char *buf_ptr ));
 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
 #endif
 
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen YY_PROTO(( yyconst char * ));
-#endif
-
 #ifndef YY_NO_INPUT
 #ifdef __cplusplus
 static int yyinput YY_PROTO(( void ));
@@ -1174,7 +1168,7 @@ YY_DECL
 #line 63 "Gmsh.l"
 
 
-#line 1178 "Gmsh.yy.cpp"
+#line 1172 "Gmsh.yy.cpp"
 
 	if ( yy_init )
 		{
@@ -2148,7 +2142,7 @@ YY_RULE_SETUP
 #line 273 "Gmsh.l"
 ECHO;
 	YY_BREAK
-#line 2152 "Gmsh.yy.cpp"
+#line 2146 "Gmsh.yy.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2159,7 +2153,6 @@ case YY_STATE_EOF(INITIAL):
 
 		/* Undo the effects of YY_DO_BEFORE_ACTION. */
 		*yy_cp = yy_hold_char;
-		YY_RESTORE_YY_MORE_OFFSET
 
 		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
 			{
@@ -2305,7 +2298,7 @@ static int yy_get_next_buffer()
 		{ /* Don't try to fill the buffer, so this is an EOF. */
 		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
 			{
-			/* We matched a single character, the EOB, so
+			/* We matched a singled characater, the EOB, so
 			 * treat this as a final EOF.
 			 */
 			return EOB_ACT_END_OF_FILE;
@@ -2332,7 +2325,7 @@ static int yy_get_next_buffer()
 		/* don't do the read, it's not guaranteed to return an EOF,
 		 * just force an EOF
 		 */
-		yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+		yy_n_chars = 0;
 
 	else
 		{
@@ -2387,8 +2380,6 @@ static int yy_get_next_buffer()
 		/* Read in more data. */
 		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
 			yy_n_chars, num_to_read );
-
-		yy_current_buffer->yy_n_chars = yy_n_chars;
 		}
 
 	if ( yy_n_chars == 0 )
@@ -2513,8 +2504,7 @@ register char *yy_bp;
 
 		yy_cp += (int) (dest - source);
 		yy_bp += (int) (dest - source);
-		yy_current_buffer->yy_n_chars =
-			yy_n_chars = yy_current_buffer->yy_buf_size;
+		yy_n_chars = yy_current_buffer->yy_buf_size;
 
 		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
 			YY_FATAL_ERROR( "flex scanner push-back overflow" );
@@ -2552,31 +2542,19 @@ static int input()
 
 		else
 			{ /* need more input */
-			int offset = yy_c_buf_p - yytext_ptr;
+			yytext_ptr = yy_c_buf_p;
 			++yy_c_buf_p;
 
 			switch ( yy_get_next_buffer() )
 				{
-				case EOB_ACT_LAST_MATCH:
-					/* This happens because yy_g_n_b()
-					 * sees that we've accumulated a
-					 * token and flags that we need to
-					 * try matching the token before
-					 * proceeding.  But for input(),
-					 * there's no matching to consider.
-					 * So convert the EOB_ACT_LAST_MATCH
-					 * to EOB_ACT_END_OF_FILE.
-					 */
-
-					/* Reset buffer status. */
-					yyrestart( yyin );
-
-					/* fall through */
-
 				case EOB_ACT_END_OF_FILE:
 					{
 					if ( yywrap() )
+						{
+						yy_c_buf_p =
+						yytext_ptr + YY_MORE_ADJ;
 						return EOF;
+						}
 
 					if ( ! yy_did_buffer_switch_on_eof )
 						YY_NEW_FILE;
@@ -2588,8 +2566,17 @@ static int input()
 					}
 
 				case EOB_ACT_CONTINUE_SCAN:
-					yy_c_buf_p = yytext_ptr + offset;
+					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
 					break;
+
+				case EOB_ACT_LAST_MATCH:
+#ifdef __cplusplus
+					YY_FATAL_ERROR(
+					"unexpected last match in yyinput()" );
+#else
+					YY_FATAL_ERROR(
+					"unexpected last match in input()" );
+#endif
 				}
 			}
 		}
@@ -2753,9 +2740,6 @@ YY_BUFFER_STATE b;
 #endif
 
 	{
-	if ( ! b )
-		return;
-
 	b->yy_n_chars = 0;
 
 	/* We always need two end-of-buffer characters.  The first causes
@@ -2815,17 +2799,17 @@ yy_size_t size;
 
 #ifndef YY_NO_SCAN_STRING
 #ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+YY_BUFFER_STATE yy_scan_string( yyconst char *str )
 #else
-YY_BUFFER_STATE yy_scan_string( yy_str )
-yyconst char *yy_str;
+YY_BUFFER_STATE yy_scan_string( str )
+yyconst char *str;
 #endif
 	{
 	int len;
-	for ( len = 0; yy_str[len]; ++len )
+	for ( len = 0; str[len]; ++len )
 		;
 
-	return yy_scan_bytes( yy_str, len );
+	return yy_scan_bytes( str, len );
 	}
 #endif
 
@@ -2946,7 +2930,7 @@ char msg[];
 		{ \
 		/* Undo effects of setting up yytext. */ \
 		yytext[yyleng] = yy_hold_char; \
-		yy_c_buf_p = yytext + n; \
+		yy_c_buf_p = yytext + n - YY_MORE_ADJ; \
 		yy_hold_char = *yy_c_buf_p; \
 		*yy_c_buf_p = '\0'; \
 		yyleng = n; \
@@ -2972,22 +2956,6 @@ int n;
 	}
 #endif
 
-#ifdef YY_NEED_STRLEN
-#ifdef YY_USE_PROTOS
-static int yy_flex_strlen( yyconst char *s )
-#else
-static int yy_flex_strlen( s )
-yyconst char *s;
-#endif
-	{
-	register int n;
-	for ( n = 0; s[n]; ++n )
-		;
-
-	return n;
-	}
-#endif
-
 
 #ifdef YY_USE_PROTOS
 static void *yy_flex_alloc( yy_size_t size )
diff --git a/tutorial/t2.geo b/tutorial/t2.geo
index 016e737193eaf4be4a38c3ba2d8960c1c0114cb9..2eb9d55624bcf0cb43f438d7bc5f73464b73cf60 100644
--- a/tutorial/t2.geo
+++ b/tutorial/t2.geo
@@ -83,3 +83,4 @@ Physical Volume (1) = {146,147} ;
 
 // Congratulations! You've created your first fully unstructured
 // tetrahedral 3D mesh!
+Line(147) = {2,8};