- better support for extensions functions that do not have the same
  name in windows and in Unix.
- support the NV_vertex_array_range extension.

diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl
index e848611..97a6f47 100755
--- a/dlls/opengl32/make_opengl
+++ b/dlls/opengl32/make_opengl
@@ -265,101 +265,107 @@
 #
 %norm_functions = ();
 %ext_functions  = 
-    ( "MultiTexCoord1dSGIS" => [ "glMultiTexCoord1dSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLdouble", "s" ] ] ],
-      "MultiTexCoord1dvSGIS" => [ "glMultiTexCoord1dvSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLdouble *", "v" ] ] ],
-      "MultiTexCoord1fSGIS" => [ "glMultiTexCoord1fSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLfloat", "s" ] ] ],
-      "MultiTexCoord1fvSGIS" => [ "glMultiTexCoord1fvSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "const GLfloat *", "v" ] ] ],
-      "MultiTexCoord1iSGIS" => [ "glMultiTexCoord1iSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLint", "s" ] ] ],
-      "MultiTexCoord1ivSGIS" => [ "glMultiTexCoord1ivSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLint *", "v" ] ] ],
-      "MultiTexCoord1sSGIS" => [ "glMultiTexCoord1sSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLshort", "s" ] ] ],
-      "MultiTexCoord1svSGIS" => [ "glMultiTexCoord1svSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLshort *", "v" ] ] ],
-      "MultiTexCoord2dSGIS" => [ "glMultiTexCoord2dSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLdouble", "s"], 
-								    [ "GLdouble", "t" ] ] ],
-      "MultiTexCoord2dvSGIS" => [ "glMultiTexCoord2dvSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLdouble *", "v" ] ] ],
-      "MultiTexCoord2fSGIS" => [ "glMultiTexCoord2fSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLfloat", "s" ], 
-								    [ "GLfloat", "t" ] ] ],
-      "MultiTexCoord2fvSGIS" => [ "glMultiTexCoord2fvSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLfloat *", "v" ] ] ],
-      "MultiTexCoord2iSGIS" => [ "glMultiTexCoord2iSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLint", "s" ], 
-								    [ "GLint", "t" ] ] ],
-      "MultiTexCoord2ivSGIS" => [ "glMultiTexCoord2ivSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLint *", "v" ] ] ],
-      "MultiTexCoord2sSGIS" => [ "glMultiTexCoord2sSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLshort", "s" ], 
-								    [ "GLshort", "t" ] ] ],
-      "MultiTexCoord2svSGIS" => [ "glMultiTexCoord2svSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLshort *", "v" ] ] ],
-      "MultiTexCoord3dSGIS" => [ "glMultiTexCoord3dSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLdouble", "s" ], 
-								    [ "GLdouble", "t" ], 
-								    [ "GLdouble", "r" ] ] ],
-      "MultiTexCoord3dvSGIS" => [ "glMultiTexCoord3dvSGIS", "void", [ [ "GLenum", "target" ],
-								      [ "GLdouble *", "v" ] ] ],
-      "MultiTexCoord3fSGIS" => [ "glMultiTexCoord3fSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLfloat", "s" ], 
-								    [ "GLfloat", "t" ], 
-								    [ "GLfloat", "r" ] ] ],
-      "MultiTexCoord3fvSGIS" => [ "glMultiTexCoord3fvSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLfloat *", "v" ] ] ],
-      "MultiTexCoord3iSGIS" => [ "glMultiTexCoord3iSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLint", "s" ], 
-								    [ "GLint", "t" ], 
-								    [ "GLint", "r" ] ] ],
-      "MultiTexCoord3ivSGIS" => [ "glMultiTexCoord3ivSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLint *", "v" ] ] ],
-      "MultiTexCoord3sSGIS" => [ "glMultiTexCoord3sSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLshort", "s" ], 
-								    [ "GLshort", "t" ], 
-								    [ "GLshort", "r" ] ] ],
-      "MultiTexCoord3svSGIS" => [ "glMultiTexCoord3svSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLshort *", "v" ] ] ],
-      "MultiTexCoord4dSGIS" => [ "glMultiTexCoord4dSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLdouble", "s" ], 
-								    [ "GLdouble", "t" ], 
-								    [ "GLdouble", "r" ], 
-								    [ "GLdouble", "q" ] ] ],
-      "MultiTexCoord4dvSGIS" => [ "glMultiTexCoord4dvSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLdouble *", "v" ] ] ],
-      "MultiTexCoord4fSGIS" => [ "glMultiTexCoord4fSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLfloat", "s" ], 
-								    [ "GLfloat", "t" ], 
-								    [ "GLfloat", "r" ], 
-								    [ "GLfloat", "q" ] ] ],
-      "MultiTexCoord4fvSGIS" => [ "glMultiTexCoord4fvSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLfloat *", "v" ] ] ],
-      "MultiTexCoord4iSGIS" => [ "glMultiTexCoord4iSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLint", "s" ], 
-								    [ "GLint", "t" ], 
-								    [ "GLint", "r" ], 
-								    [ "GLint", "q" ] ] ],
-      "MultiTexCoord4ivSGIS" => [ "glMultiTexCoord4ivSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLint *", "v" ] ] ],
-      "MultiTexCoord4sSGIS" => [ "glMultiTexCoord4sSGIS", "void", [ [ "GLenum", "target" ], 
-								    [ "GLshort", "s" ], 
-								    [ "GLshort", "t" ], 
-								    [ "GLshort", "r" ], 
-								    [ "GLshort", "q" ] ] ],
-      "MultiTexCoord4svSGIS" => [ "glMultiTexCoord4svSGIS", "void", [ [ "GLenum", "target" ], 
-								      [ "GLshort *", "v" ] ] ],
-      "MultiTexCoordPointerSGIS" => [ "glMultiTexCoordPointerSGIS", "void", [ [ "GLenum", "target" ], 
-									      [ "GLint", "size" ], 
-									      [ "GLenum", "type" ],
-									      [ "GLsizei", "stride" ], 
-									      [ "GLvoid *", "pointer" ] ] ],
-      "SelectTextureSGIS" => [ "glSelectTextureSGIS", "void", [ [ "GLenum", "target" ] ] ],
-      "SelectTextureCoordSetSGIS" => [ "glSelectTextureCoordSetSGIS", "void", [ [ "GLenum", "target" ] ] ] );
+    ( "glMultiTexCoord1dSGIS" => [ "glMultiTexCoord1dSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLdouble", "s" ] ],  "glMultiTexCoord1dSGIS" ],
+      "glMultiTexCoord1dvSGIS" => [ "glMultiTexCoord1dvSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLdouble *", "v" ] ], "glMultiTexCoord1dvSGIS" ],
+      "glMultiTexCoord1fSGIS" => [ "glMultiTexCoord1fSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLfloat", "s" ] ], "glMultiTexCoord1fSGIS" ],
+      "glMultiTexCoord1fvSGIS" => [ "glMultiTexCoord1fvSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "const GLfloat *", "v" ] ], "glMultiTexCoord1fvSGIS" ],
+      "glMultiTexCoord1iSGIS" => [ "glMultiTexCoord1iSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLint", "s" ] ], "glMultiTexCoord1iSGIS" ],
+      "glMultiTexCoord1ivSGIS" => [ "glMultiTexCoord1ivSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLint *", "v" ] ], "glMultiTexCoord1ivSGIS" ],
+      "glMultiTexCoord1sSGIS" => [ "glMultiTexCoord1sSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLshort", "s" ] ], "glMultiTexCoord1sSGIS" ],
+      "glMultiTexCoord1svSGIS" => [ "glMultiTexCoord1svSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLshort *", "v" ] ], "glMultiTexCoord1svSGIS" ],
+      "glMultiTexCoord2dSGIS" => [ "glMultiTexCoord2dSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLdouble", "s"], 
+								      [ "GLdouble", "t" ] ], "glMultiTexCoord2dSGIS" ],
+      "glMultiTexCoord2dvSGIS" => [ "glMultiTexCoord2dvSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLdouble *", "v" ] ], "glMultiTexCoord2dvSGIS" ],
+      "glMultiTexCoord2fSGIS" => [ "glMultiTexCoord2fSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLfloat", "s" ], 
+								      [ "GLfloat", "t" ] ], "glMultiTexCoord2fSGIS" ],
+      "glMultiTexCoord2fvSGIS" => [ "glMultiTexCoord2fvSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLfloat *", "v" ] ], "glMultiTexCoord2fvSGIS" ],
+      "glMultiTexCoord2iSGIS" => [ "glMultiTexCoord2iSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLint", "s" ], 
+								      [ "GLint", "t" ] ], "glMultiTexCoord2iSGIS" ],
+      "glMultiTexCoord2ivSGIS" => [ "glMultiTexCoord2ivSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLint *", "v" ] ], "glMultiTexCoord2ivSGIS" ],
+      "glMultiTexCoord2sSGIS" => [ "glMultiTexCoord2sSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLshort", "s" ], 
+								      [ "GLshort", "t" ] ], "glMultiTexCoord2sSGIS" ],
+      "glMultiTexCoord2svSGIS" => [ "glMultiTexCoord2svSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLshort *", "v" ] ], "glMultiTexCoord2svSGIS" ],
+      "glMultiTexCoord3dSGIS" => [ "glMultiTexCoord3dSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLdouble", "s" ], 
+								      [ "GLdouble", "t" ], 
+								      [ "GLdouble", "r" ] ], "glMultiTexCoord3dSGIS" ],
+      "glMultiTexCoord3dvSGIS" => [ "glMultiTexCoord3dvSGIS", "void", [ [ "GLenum", "target" ],
+									[ "GLdouble *", "v" ] ], "glMultiTexCoord3dvSGIS" ],
+      "glMultiTexCoord3fSGIS" => [ "glMultiTexCoord3fSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLfloat", "s" ], 
+								      [ "GLfloat", "t" ], 
+								      [ "GLfloat", "r" ] ], "glMultiTexCoord3fSGIS" ],
+      "glMultiTexCoord3fvSGIS" => [ "glMultiTexCoord3fvSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLfloat *", "v" ] ], "glMultiTexCoord3fvSGIS" ],
+      "glMultiTexCoord3iSGIS" => [ "glMultiTexCoord3iSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLint", "s" ], 
+								      [ "GLint", "t" ], 
+								      [ "GLint", "r" ] ], "glMultiTexCoord3iSGIS" ],
+      "glMultiTexCoord3ivSGIS" => [ "glMultiTexCoord3ivSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLint *", "v" ] ], "glMultiTexCoord3ivSGIS" ],
+      "glMultiTexCoord3sSGIS" => [ "glMultiTexCoord3sSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLshort", "s" ], 
+								      [ "GLshort", "t" ], 
+								      [ "GLshort", "r" ] ], "glMultiTexCoord3sSGIS" ],
+      "glMultiTexCoord3svSGIS" => [ "glMultiTexCoord3svSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLshort *", "v" ] ], "glMultiTexCoord3svSGIS" ],
+      "glMultiTexCoord4dSGIS" => [ "glMultiTexCoord4dSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLdouble", "s" ], 
+								      [ "GLdouble", "t" ], 
+								      [ "GLdouble", "r" ], 
+								      [ "GLdouble", "q" ] ], "glMultiTexCoord4dSGIS" ],
+      "glMultiTexCoord4dvSGIS" => [ "glMultiTexCoord4dvSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLdouble *", "v" ] ], "glMultiTexCoord4dvSGIS" ],
+      "glMultiTexCoord4fSGIS" => [ "glMultiTexCoord4fSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLfloat", "s" ], 
+								      [ "GLfloat", "t" ], 
+								      [ "GLfloat", "r" ], 
+								      [ "GLfloat", "q" ] ], "glMultiTexCoord4fSGIS" ],
+      "glMultiTexCoord4fvSGIS" => [ "glMultiTexCoord4fvSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLfloat *", "v" ] ], "glMultiTexCoord4fvSGIS" ],
+      "glMultiTexCoord4iSGIS" => [ "glMultiTexCoord4iSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLint", "s" ], 
+								      [ "GLint", "t" ], 
+								      [ "GLint", "r" ], 
+								      [ "GLint", "q" ] ], "glMultiTexCoord4iSGIS" ],
+      "glMultiTexCoord4ivSGIS" => [ "glMultiTexCoord4ivSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLint *", "v" ] ], "glMultiTexCoord4ivSGIS" ],
+      "glMultiTexCoord4sSGIS" => [ "glMultiTexCoord4sSGIS", "void", [ [ "GLenum", "target" ], 
+								      [ "GLshort", "s" ], 
+								      [ "GLshort", "t" ], 
+								      [ "GLshort", "r" ], 
+								      [ "GLshort", "q" ] ], "glMultiTexCoord4sSGIS" ],
+      "glMultiTexCoord4svSGIS" => [ "glMultiTexCoord4svSGIS", "void", [ [ "GLenum", "target" ], 
+									[ "GLshort *", "v" ] ], "glMultiTexCoord4svSGIS" ],
+      "glMultiTexCoordPointerSGIS" => [ "glMultiTexCoordPointerSGIS", "void", [ [ "GLenum", "target" ], 
+										[ "GLint", "size" ], 
+										[ "GLenum", "type" ],
+										[ "GLsizei", "stride" ], 
+										[ "GLvoid *", "pointer" ] ], "glMultiTexCoordPointerSGIS" ],
+      "glSelectTextureSGIS" => [ "glSelectTextureSGIS", "void", [ [ "GLenum", "target" ] ], "glSelectTextureSGIS" ],
+      "glSelectTextureCoordSetSGIS" => [ "glSelectTextureCoordSetSGIS", "void", [ [ "GLenum", "target" ] ], "glSelectTextureCoordSetSGIS" ],
+      "wglAllocateMemoryNV" => [ "wglAllocateMemoryNV", "void *", [ [ "GLsizei", "size" ],
+								    [ "GLfloat", "readfreq" ],
+								    [ "GLfloat", "writefreq"], 
+								    [ "GLfloat", "priority" ] ], "glXAllocateMemoryNV" ],
+      "wglFreeMemoryNV" => [ "wglFreeMemoryNV", "void", [ [ "GLvoid *", "pointer" ] ], "glXFreeMemoryNV" ]
+      );
 
 
 while ($line = <REGISTRY>) {
@@ -440,13 +446,14 @@
 	}
 	$func_ref = [ "gl" . $funcname, 
 		      $ret_type,
-		      $arg_ref ];
+		      $arg_ref,
+		      "gl" . $funcname ];
 	
 	# Now, put in one or the other hash table
 	if ($norm_categories{$category}) {
-	    $norm_functions{$funcname} = $func_ref;
+	    $norm_functions{"gl" . $funcname} = $func_ref;
 	} else {
-	    $ext_functions{$funcname} = $func_ref;
+	    $ext_functions{"gl" . $funcname} = $func_ref;
 	}
     }
 }
@@ -600,7 +607,7 @@
 $i = 0;
 foreach (sort keys %ext_functions) {
     $func_ref = $ext_functions{$_};
-    print EXT "  { \"" . $func_ref->[0] . "\", (void *) wine_" . $func_ref->[0] . ", (void **) (&" . $ext_prefix . $func_ref->[0] . ") }";
+    print EXT "  { \"" . $func_ref->[0] . "\", \"" . $func_ref->[3] . "\", (void *) wine_" . $func_ref->[0] . ", (void **) (&" . $ext_prefix . $func_ref->[0] . ") }";
     if ($i != $#tmp) {
 	print EXT ",";
     }