DOS driver update
diff --git a/docs/README.DJ b/docs/README.DJ
index 8b4e6dc..e92d36c 100644
--- a/docs/README.DJ
+++ b/docs/README.DJ
@@ -1,5 +1,5 @@
-		     Mesa 4.0 DOS/DJGPP Port version 0.4

-		     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+			Mesa 4.0 DOS/DJGPP Port v1.0

+			~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

@@ -20,11 +20,13 @@
 Installation:

 ~~~~~~~~~~~~~

 

-Type "make -f Makefile.DJ" to compile the libraries. Long filename support is

-required during compilation. Also, you must have the DXE2 package (available

-on SimTel.Net, courtesy of Andrew Zabolotny) installed in order to build the

-dynamic modules; if you encounter errors, you can fetch a patched version from

-my web page.

+Type "make -f Makefile.DJ" to compile the libraries. Make accepts some options

+which are passed to compiler: the target cpu (CPU=..., default=`pentium') and

+X86 specific options (HAVE_X86=1, HAVE_MMX=1, HAVE_SSE=1, HAVE_3DNOW=1). The

+core library (libGL) requires LFN support during compilation. Also, you must

+have the DXE2 package (available on SimTel.Net, courtesy of Andrew Zabolotny)

+installed in order to build the dynamic modules; if you encounter errors, you

+can fetch a patched version from my web page.

 The demos are not built automagically (see Pitfalls below). To make them, use

 one of the following rules:

 	Static:

@@ -72,7 +74,7 @@
 libGLU:

 ~~~~~~~

 

-Mesa GLU sources are required. No comment!

+Mesa GLU sources are required.

 

 

 

@@ -118,20 +120,7 @@
 History:

 ~~~~~~~~

 

-v0.1	feb-2002	initial release

-v0.2	feb-2002	+ fast triangle rasterizers

-			+ enabled sw and 1.3 extensions

-			+ hardware acceleration: FreeBE/AF

-			+ single-buffer modes (15-, 16-, and 32-bit)

-			* video mode is set by CreateVisual, not MakeCurrent

-			* internal changes to support multi-buf (unfinished)

-			! fixed some alpha issues... (thanks, Brian)

-			+ glut has now an internal timer

-			* glut changed to support multi-window (unfinished)

-			! minor PC_HW corrections

-v0.3	mar-2002	- removed FreeBE/AF code

-			- removed single-buffer modes

-v0.4	mar-2002	+ dynamic module support

+v1.0	mar-2002	initial release

 

 

 

diff --git a/include/GL/dmesa.h b/include/GL/dmesa.h
index eaf0eca..ab91bac 100644
--- a/include/GL/dmesa.h
+++ b/include/GL/dmesa.h
@@ -23,7 +23,7 @@
  */

 

 /*

- * DOS/DJGPP device driver v0.2 for Mesa 4.0

+ * DOS/DJGPP device driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

@@ -62,6 +62,10 @@
 

 void DMesaDestroyContext (DMesaContext c);

 

+GLboolean DMesaViewport (DMesaBuffer b,

+                         GLint xpos, GLint ypos,

+                         GLint width, GLint height);

+

 GLboolean DMesaMakeCurrent (DMesaContext c, DMesaBuffer b);

 

 void DMesaSwapBuffers (DMesaBuffer b);

diff --git a/src/glu/mesa/Makefile.DJ b/src/glu/mesa/Makefile.DJ
index 0232fe5..5b9ae7b 100644
--- a/src/glu/mesa/Makefile.DJ
+++ b/src/glu/mesa/Makefile.DJ
@@ -20,7 +20,7 @@
 # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

 # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 

-# DOS/DJGPP glu makefile v0.4 for Mesa 4.0

+# DOS/DJGPP glu makefile v1.0 for Mesa 4.0

 #

 #  Copyright (C) 2002 - Borca Daniel

 #  Email : dborca@yahoo.com

@@ -31,7 +31,7 @@
 

 TOP = ..

 CC = gcc

-CFLAGS = -I$(TOP)/include -Wall -W -Wno-unused -mcpu=pentium -ffast-math -O2

+CFLAGS = -I$(TOP)/include -Wall -W -Wno-unused -mcpu=$(CPU) -ffast-math -O2

 AR = ar

 ARFLAGS = ruv

 LIBDIR = $(TOP)/lib

@@ -73,10 +73,10 @@
 

 $(LIBDIR)/$(GLU_DXE) $(LIBDIR)/$(GLU_IMP): $(OBJECTS)

 ifeq ($(DXE2GEN),)

-	@echo Missing DXE2GEN and/or DXE2.LD! You must have DXE2GEN

-	@echo somewhere in PATH, and DXE2.LD in DJGPP/LIB directory.

+	$(warning Missing DXE2GEN and/or DXE2.LD! You must have DXE2GEN)

+	$(warning somewhere in PATH, and DXE2.LD in DJGPP/LIB directory.)

 else

-	dxe2gen -o $(LIBDIR)/$(GLU_DXE) -I $(LIBDIR)/$(GLU_IMP) $(OBJECTS) -D "Glu" -U

+	dxe2gen -o $(LIBDIR)/$(GLU_DXE) -I $(LIBDIR)/$(GLU_IMP) $(OBJECTS) -D "Mesa DOS GLU" -U

 endif

 

 clean:

diff --git a/src/glut/dos/Makefile.DJ b/src/glut/dos/Makefile.DJ
index 7a26eb2..02bc31b 100644
--- a/src/glut/dos/Makefile.DJ
+++ b/src/glut/dos/Makefile.DJ
@@ -20,7 +20,7 @@
 # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

 # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 

-# DOS/DJGPP glut makefile v0.4 for Mesa 4.0

+# DOS/DJGPP glut makefile v1.0 for Mesa 4.0

 #

 #  Copyright (C) 2002 - Borca Daniel

 #  Email : dborca@yahoo.com

@@ -31,7 +31,7 @@
 

 TOP = ..

 CC = gcc

-CFLAGS = -I$(TOP)/include -Wall -W -Wno-unused -mcpu=pentium -ffast-math -O2

+CFLAGS = -I$(TOP)/include -Wall -W -Wno-unused -mcpu=$(CPU) -ffast-math -O2

 AR = ar

 ARFLAGS = ruv

 LIBDIR = $(TOP)/lib

@@ -59,23 +59,23 @@
 	teapot.c \

 	window.c

 

-PC_HW_OBJECTS = \

-	PC_HW/pc_hw.o \

-	PC_HW/pc_keyb.o \

-	PC_HW/pc_mouse.o \

-	PC_HW/pc_timer.o \

-	PC_HW/pc_irq.o

+PC_HW_SOURCES = \

+	PC_HW/pc_hw.c \

+	PC_HW/pc_keyb.c \

+	PC_HW/pc_mouse.c \

+	PC_HW/pc_timer.c \

+	PC_HW/pc_irq.S

 

-SOURCES = $(CORE_SOURCES)

+SOURCES = $(CORE_SOURCES) $(PC_HW_SOURCES)

 

-OBJECTS = $(SOURCES:.c=.o) $(PC_HW_OBJECTS)

+OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))

 

+.c.o:

+	gcc -o $@ -c $(CFLAGS) $<

 .S.o:

 	gcc -o $@ -c $(CFLAGS) $<

 .s.o:

 	gcc -o $@ -c $(CFLAGS) $(<:.s=.S)

-.c.o:

-	gcc -o $@ -c $(CFLAGS) $<

 

 all: $(LIBDIR)/$(GLUT_LIB) $(LIBDIR)/$(GLUT_DXE) $(LIBDIR)/$(GLUT_IMP)

 

@@ -84,10 +84,10 @@
 

 $(LIBDIR)/$(GLUT_DXE) $(LIBDIR)/$(GLUT_IMP): $(OBJECTS)

 ifeq ($(DXE2GEN),)

-	@echo Missing DXE2GEN and/or DXE2.LD! You must have DXE2GEN

-	@echo somewhere in PATH, and DXE2.LD in DJGPP/LIB directory.

+	$(warning Missing DXE2GEN and/or DXE2.LD! You must have DXE2GEN)

+	$(warning somewhere in PATH, and DXE2.LD in DJGPP/LIB directory.)

 else

-	dxe2gen -o $(LIBDIR)/$(GLUT_DXE) -I $(LIBDIR)/$(GLUT_IMP) $(OBJECTS) -D "DOS Glut" -U

+	dxe2gen -o $(LIBDIR)/$(GLUT_DXE) -I $(LIBDIR)/$(GLUT_IMP) $(OBJECTS) -D "Mesa DOS GLUT" -U

 endif

 

 clean:

@@ -102,7 +102,7 @@
 menu.o: menu.c ../include/GL/glut.h

 models.o: models.c ../include/GL/glut.h

 overlay.o: overlay.c ../include/GL/glut.h

-state.o: state.c ../include/GL/glut.h internal.h pc_hw/pc_hw.h

+state.o: state.c ../include/GL/glut.h internal.h PC_HW/pc_hw.h

 teapot.o: teapot.c ../include/GL/glut.h

 window.o: window.c ../include/GL/glut.h ../include/GL/dmesa.h internal.h \

   PC_HW/pc_hw.h

diff --git a/src/glut/dos/PC_HW/pc_hw.c b/src/glut/dos/PC_HW/pc_hw.c
index d6ffd56..09ab461 100644
--- a/src/glut/dos/PC_HW/pc_hw.c
+++ b/src/glut/dos/PC_HW/pc_hw.c
@@ -1,5 +1,5 @@
 /*

- * PC/HW routine collection v0.1 for DOS/DJGPP

+ * PC/HW routine collection v1.0 for DOS/DJGPP

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/PC_HW/pc_hw.h b/src/glut/dos/PC_HW/pc_hw.h
index 09fe805..47fcf78 100644
--- a/src/glut/dos/PC_HW/pc_hw.h
+++ b/src/glut/dos/PC_HW/pc_hw.h
@@ -1,5 +1,5 @@
 /*

- * PC/HW routine collection v0.1 for DOS/DJGPP

+ * PC/HW routine collection v1.0 for DOS/DJGPP

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

@@ -189,12 +189,11 @@
 

 #define KEY_MAX               115

 

-extern volatile char pc_key[KEY_MAX];

-

 int pc_install_keyb (void);

 void pc_remove_keyb (void);

 int pc_keypressed (void);

 int pc_readkey (void);

+int pc_keydown (int code);

 

 /*

  * timer

@@ -205,13 +204,12 @@
 /*

  * mouse

  */

-extern volatile int pc_mouse_x, pc_mouse_y, pc_mouse_b;

-

 int pc_install_mouse (void);

 void pc_remove_mouse (void);

 MFUNC pc_install_mouse_handler (MFUNC handler);

 void pc_mouse_area (int x1, int y1, int x2, int y2);

 void pc_mouse_speed (int xspeed, int yspeed);

+int pc_query_mouse (int *x, int *y);

 void pc_show_mouse (void);

 void pc_scare_mouse (void);

 void pc_unscare_mouse (void);

diff --git a/src/glut/dos/PC_HW/pc_irq.S b/src/glut/dos/PC_HW/pc_irq.S
index 8f19f8e..1965460 100644
--- a/src/glut/dos/PC_HW/pc_irq.S
+++ b/src/glut/dos/PC_HW/pc_irq.S
@@ -1,5 +1,5 @@
 /*

- * PC/HW routine collection v0.2 for DOS/DJGPP

+ * PC/HW routine collection v1.0 for DOS/DJGPP

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/PC_HW/pc_keyb.c b/src/glut/dos/PC_HW/pc_keyb.c
index d3987d8..50ef94b 100644
--- a/src/glut/dos/PC_HW/pc_keyb.c
+++ b/src/glut/dos/PC_HW/pc_keyb.c
@@ -1,5 +1,5 @@
 /*

- * PC/HW routine collection v0.4 for DOS/DJGPP

+ * PC/HW routine collection v1.0 for DOS/DJGPP

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/PC_HW/pc_mouse.c b/src/glut/dos/PC_HW/pc_mouse.c
index aa1fbe4..72d3886 100644
--- a/src/glut/dos/PC_HW/pc_mouse.c
+++ b/src/glut/dos/PC_HW/pc_mouse.c
@@ -1,5 +1,5 @@
 /*

- * PC/HW routine collection v0.4 for DOS/DJGPP

+ * PC/HW routine collection v1.0 for DOS/DJGPP

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/PC_HW/pc_timer.c b/src/glut/dos/PC_HW/pc_timer.c
index a8c58f6..ec348e2 100644
--- a/src/glut/dos/PC_HW/pc_timer.c
+++ b/src/glut/dos/PC_HW/pc_timer.c
@@ -1,5 +1,5 @@
 /*

- * PC/HW routine collection v0.1 for DOS/DJGPP

+ * PC/HW routine collection v1.0 for DOS/DJGPP

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/callback.c b/src/glut/dos/callback.c
index 0e49c3a..a9260cb 100644
--- a/src/glut/dos/callback.c
+++ b/src/glut/dos/callback.c
@@ -19,7 +19,7 @@
  */

 

 /*

- * DOS/DJGPP glut driver v0.1 for Mesa 4.0

+ * DOS/DJGPP glut driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/color.c b/src/glut/dos/color.c
index b755459..9a77545 100644
--- a/src/glut/dos/color.c
+++ b/src/glut/dos/color.c
@@ -19,7 +19,7 @@
  */

 

 /*

- * DOS/DJGPP glut driver v0.1 for Mesa 4.0

+ * DOS/DJGPP glut driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/font.c b/src/glut/dos/font.c
index c1303ff..1c31c15 100644
--- a/src/glut/dos/font.c
+++ b/src/glut/dos/font.c
@@ -19,7 +19,7 @@
  */

 

 /*

- * DOS/DJGPP glut driver v0.1 for Mesa 4.0

+ * DOS/DJGPP glut driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/globals.c b/src/glut/dos/globals.c
index 9bdfe8e..342cf3d 100644
--- a/src/glut/dos/globals.c
+++ b/src/glut/dos/globals.c
@@ -19,7 +19,7 @@
  */

 

 /*

- * DOS/DJGPP glut driver v0.1 for Mesa 4.0

+ * DOS/DJGPP glut driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/init.c b/src/glut/dos/init.c
index 9cda3a8..a6d7e83 100644
--- a/src/glut/dos/init.c
+++ b/src/glut/dos/init.c
@@ -19,7 +19,7 @@
  */

 

 /*

- * DOS/DJGPP glut driver v0.4 for Mesa 4.0

+ * DOS/DJGPP glut driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/internal.h b/src/glut/dos/internal.h
index 2822c2c..e23d485 100644
--- a/src/glut/dos/internal.h
+++ b/src/glut/dos/internal.h
@@ -19,7 +19,7 @@
  */

 

 /*

- * DOS/DJGPP glut driver v0.2 for Mesa 4.0

+ * DOS/DJGPP glut driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/menu.c b/src/glut/dos/menu.c
index 48354ed..eccc51d 100644
--- a/src/glut/dos/menu.c
+++ b/src/glut/dos/menu.c
@@ -19,7 +19,7 @@
  */

 

 /*

- * DOS/DJGPP glut driver v0.1 for Mesa 4.0

+ * DOS/DJGPP glut driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/overlay.c b/src/glut/dos/overlay.c
index b2c392f..ab4f561 100644
--- a/src/glut/dos/overlay.c
+++ b/src/glut/dos/overlay.c
@@ -19,7 +19,7 @@
  */

 

 /*

- * DOS/DJGPP glut driver v0.1 for Mesa 4.0

+ * DOS/DJGPP glut driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/state.c b/src/glut/dos/state.c
index 94ef0ca..b463f4a 100644
--- a/src/glut/dos/state.c
+++ b/src/glut/dos/state.c
@@ -19,7 +19,7 @@
  */

 

 /*

- * DOS/DJGPP glut driver v0.2 for Mesa 4.0

+ * DOS/DJGPP glut driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/glut/dos/window.c b/src/glut/dos/window.c
index c110715..f43533c 100644
--- a/src/glut/dos/window.c
+++ b/src/glut/dos/window.c
@@ -19,7 +19,7 @@
  */

 

 /*

- * DOS/DJGPP glut driver v0.2 for Mesa 4.0

+ * DOS/DJGPP glut driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

@@ -171,11 +171,24 @@
 

 void APIENTRY glutPositionWindow (int x, int y)

 {

+ if (DMesaViewport(buffer[window], x, y, g_width, g_height)) {

+    g_xpos = x;

+    g_ypos = y;

+ }

 }

 

 

 void APIENTRY glutReshapeWindow (int width, int height)

 {

+ if (DMesaViewport(buffer[window], g_xpos, g_ypos, width, height)) {

+    g_width = width;

+    g_height = height;

+    if (reshape_func) {

+       reshape_func(width, height);

+    } else {

+       glViewport(0, 0, width, height);

+    }

+ }

 }

 

 

diff --git a/src/mesa/drivers/dos/dmesa.c b/src/mesa/drivers/dos/dmesa.c
index 454b891..559204f 100644
--- a/src/mesa/drivers/dos/dmesa.c
+++ b/src/mesa/drivers/dos/dmesa.c
@@ -23,7 +23,7 @@
  */

 

 /*

- * DOS/DJGPP device driver v0.3 for Mesa 4.0

+ * DOS/DJGPP device driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

@@ -76,9 +76,10 @@
  * Add system-specific fields to it.

  */

 struct dmesa_buffer {

-   GLframebuffer *gl_buffer;    /* The depth, stencil, accum, etc buffers */

+   GLframebuffer gl_buffer;     /* The depth, stencil, accum, etc buffers */

    void *the_window;            /* your window handle, etc */

 

+   int bypp;                    /* bytes per pixel */

    int xpos, ypos;              /* position */

    int width, height;           /* size in pixels */

    int bwidth, len;             /* bytes in a line, then total */

@@ -540,12 +541,12 @@
  * If anything special has to been done when the buffer/window is

  * resized, do it now.

  */

-static void get_buffer_size (GLcontext *ctx, GLuint *width, GLuint *height)

+static void get_buffer_size (GLframebuffer *buffer, GLuint *width, GLuint *height)

 {

- DMesaContext c = (DMesaContext)ctx->DriverCtx;

+ DMesaBuffer b = (DMesaBuffer)buffer;

 

- *width  = c->Buffer->width;

- *height = c->Buffer->height;

+ *width  = b->width;

+ *height = b->height;

 }

 

 

@@ -554,7 +555,7 @@
 {

  switch (name) {

         case GL_RENDERER:

-             return (const GLubyte *)"DOS Mesa";

+             return (const GLubyte *)"Mesa DOS\0DJGPP port (c) Borca Daniel 31-mar-2002";

         default:

              return NULL;

  }

@@ -636,7 +637,7 @@
  ctx->Driver.Accum = _swrast_Accum;

  ctx->Driver.Bitmap = _swrast_Bitmap;

  ctx->Driver.Clear = clear;

- ctx->Driver.ResizeBuffersMESA = _swrast_alloc_buffers;

+ ctx->Driver.ResizeBuffers = _swrast_alloc_buffers;

  ctx->Driver.CopyPixels = _swrast_CopyPixels;

  ctx->Driver.DrawPixels = _swrast_DrawPixels;

  ctx->Driver.ReadPixels = _swrast_ReadPixels;

@@ -804,17 +805,17 @@
 

  if ((b=(DMesaBuffer)calloc(1, sizeof(struct dmesa_buffer)))!=NULL) {

 

-    b->gl_buffer = _mesa_create_framebuffer(visual->gl_visual,

-                                            visual->gl_visual->depthBits > 0,

-                                            visual->gl_visual->stencilBits > 0,

-                                            visual->gl_visual->accumRedBits > 0,

-                                            visual->gl_visual->alphaBits > 0);

+    _mesa_initialize_framebuffer(&b->gl_buffer,

+                                 visual->gl_visual,

+                                 visual->gl_visual->depthBits > 0,

+                                 visual->gl_visual->stencilBits > 0,

+                                 visual->gl_visual->accumRedBits > 0,

+                                 visual->gl_visual->alphaBits > 0);

     b->xpos = xpos;

     b->ypos = ypos;

     b->width = width;

-    b->bwidth = width * ((visual->depth+7)/8);

     b->height = height;

-    b->len = b->bwidth * b->height;

+    b->bypp = (visual->depth+7)/8;

  }

 

  return b;

@@ -825,7 +826,7 @@
 void DMesaDestroyBuffer (DMesaBuffer b)

 {

  free(b->the_window);

- _mesa_destroy_framebuffer(b->gl_buffer);

+ _mesa_free_framebuffer_data(&b->gl_buffer);

  free(b);

 }

 

@@ -871,23 +872,45 @@
 

 

 

+GLboolean DMesaViewport (DMesaBuffer b,

+                         GLint xpos, GLint ypos,

+                         GLint width, GLint height)

+{

+ void *new_window;

+

+ if ((new_window=vl_sync_buffer(b->the_window, xpos, ypos, width, height))==NULL) {

+    return GL_FALSE;

+ } else {

+    b->the_window = new_window;

+    b->xpos = xpos;

+    b->ypos = ypos;

+    b->width = width;

+    b->height = height;

+    b->bwidth = width * b->bypp;

+    b->len = b->bwidth * height;

+    return GL_TRUE;

+ }

+}

+

+

+

 /*

  * Make the specified context and buffer the current one.

  */

 GLboolean DMesaMakeCurrent (DMesaContext c, DMesaBuffer b)

 {

  if (c&&b) {

-    if ((b->the_window=vl_sync_buffer(b->the_window, b->xpos, b->ypos, b->width, b->height))==NULL) {

+    if (!DMesaViewport(b, b->xpos, b->ypos, b->width, b->height)) {

        return GL_FALSE;

     }

 

     c->Buffer = b;

 

     dmesa_update_state(c->gl_ctx, 0);

-    _mesa_make_current(c->gl_ctx, b->gl_buffer);

+    _mesa_make_current(c->gl_ctx, &b->gl_buffer);

     if (c->gl_ctx->Viewport.Width==0) {

        /* initialize viewport to window size */

-       _mesa_Viewport(0, 0, c->Buffer->width, c->Buffer->height);

+       _mesa_Viewport(0, 0, b->width, b->height);

     }

  } else {

     /* Detach */

diff --git a/src/mesa/drivers/dos/dpmi.c b/src/mesa/drivers/dos/dpmi.c
index 26400ac..0cc0a89 100644
--- a/src/mesa/drivers/dos/dpmi.c
+++ b/src/mesa/drivers/dos/dpmi.c
@@ -23,7 +23,7 @@
  */

 

 /*

- * DOS/DJGPP device driver v0.3 for Mesa 4.0

+ * DOS/DJGPP device driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/mesa/drivers/dos/dpmiint.h b/src/mesa/drivers/dos/dpmiint.h
index 8494ee6..d0171fb 100644
--- a/src/mesa/drivers/dos/dpmiint.h
+++ b/src/mesa/drivers/dos/dpmiint.h
@@ -23,7 +23,7 @@
  */

 

 /*

- * DOS/DJGPP device driver v0.3 for Mesa 4.0

+ * DOS/DJGPP device driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/mesa/drivers/dos/video.c b/src/mesa/drivers/dos/video.c
index 9d50952..d31037d 100644
--- a/src/mesa/drivers/dos/video.c
+++ b/src/mesa/drivers/dos/video.c
@@ -23,7 +23,7 @@
  */

 

 /*

- * DOS/DJGPP device driver v0.4 for Mesa 4.0

+ * DOS/DJGPP device driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

@@ -416,14 +416,12 @@
  if (width&3) {

     return NULL;

  } else {

-    current_offset = video_scanlen * y + video_bypp * x;

     if ((newbuf=realloc(buffer, width*height*video_bypp))!=NULL) {

+       current_offset = video_scanlen * y + video_bypp * x;

        current_width = width;

        current_delta = video_scanlen - video_bypp * width;

-       return newbuf;

-    } else {

-       return NULL;

     }

+    return newbuf;

  }

 }

 

diff --git a/src/mesa/drivers/dos/video.h b/src/mesa/drivers/dos/video.h
index c806aa7..46a1e22 100644
--- a/src/mesa/drivers/dos/video.h
+++ b/src/mesa/drivers/dos/video.h
@@ -23,7 +23,7 @@
  */

 

 /*

- * DOS/DJGPP device driver v0.4 for Mesa 4.0

+ * DOS/DJGPP device driver v1.0 for Mesa 4.0

  *

  *  Copyright (C) 2002 - Borca Daniel

  *  Email : dborca@yahoo.com

diff --git a/src/mesa/main/Makefile.DJ b/src/mesa/main/Makefile.DJ
index fc540dc..afe95f0 100644
--- a/src/mesa/main/Makefile.DJ
+++ b/src/mesa/main/Makefile.DJ
@@ -20,7 +20,7 @@
 # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

 # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 

-# DOS/DJGPP core makefile v0.4 for Mesa 4.0

+# DOS/DJGPP core makefile v1.0 for Mesa 4.0

 #

 #  Copyright (C) 2002 - Borca Daniel

 #  Email : dborca@yahoo.com

@@ -31,7 +31,7 @@
 

 TOP = ..

 CC = gcc

-CFLAGS = -I$(TOP)/include -I. -Wall -W -Wno-unused -mcpu=pentium -ffast-math -O2

+CFLAGS = -I$(TOP)/include -I. -Wall -W -Wno-unused -mcpu=$(CPU) -ffast-math -O2

 AR = ar

 ARFLAGS = ruv

 LIBDIR = $(TOP)/lib

@@ -165,14 +165,65 @@
 	tnl/t_vb_texmat.c \

 	tnl/t_vb_vertex.c

 

+X86_SOURCES = \

+	X86/x86.c \

+	X86/glapi_x86.S \

+	X86/common_x86.c \

+	X86/common_x86_asm.S \

+	X86/x86_xform2.S \

+	X86/x86_xform3.S \

+	X86/x86_xform4.S \

+	X86/x86_vertex.S \

+	X86/x86_cliptest.S

+

+MMX_SOURCES =

+

+SSE_SOURCES = \

+	X86/sse.c \

+	X86/sse_xform2.S \

+	X86/sse_xform3.S \

+	X86/sse_xform4.S \

+	X86/sse_vertex.S \

+	X86/sse_normal.S

+

+D3NOW_SOURCES = \

+	X86/3dnow.c \

+	X86/3dnow_xform2.S \

+	X86/3dnow_xform3.S \

+	X86/3dnow_xform4.S \

+	X86/3dnow_vertex.S

+

+ifdef HAVE_MMX

+X86_SOURCES += $(MMX_SOURCES)

+CFLAGS += -DUSE_MMX_ASM

+HAVE_X86 = 1

+endif

+ifdef HAVE_SSE

+X86_SOURCES += $(SSE_SOURCES)

+CFLAGS += -DUSE_SSE_ASM

+HAVE_X86 = 1

+endif

+ifdef HAVE_3DNOW

+X86_SOURCES += $(D3NOW_SOURCES)

+CFLAGS += -DUSE_3DNOW_ASM

+HAVE_X86 = 1

+endif

+ifdef HAVE_X86

+CFLAGS += -DUSE_X86_ASM

+else

+X86_SOURCES =

+endif

+

 DRIVER_SOURCES = DOS/dmesa.c DOS/video.c DOS/dpmi.c

 

-SOURCES = $(CORE_SOURCES) $(DRIVER_SOURCES)

+SOURCES = $(CORE_SOURCES) $(X86_SOURCES) $(DRIVER_SOURCES)

 

-OBJECTS = $(SOURCES:.c=.o)

+OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))

 

 .c.o:

 	gcc -o $@ -c $(CFLAGS) $<

+.S.o:

+	gcc -o $@ -c $(CFLAGS) $<

 

 all: $(LIBDIR)/$(GL_LIB) $(LIBDIR)/$(GL_DXE) $(LIBDIR)/$(GL_IMP)

 

@@ -181,21 +232,24 @@
 

 $(LIBDIR)/$(GL_DXE) $(LIBDIR)/$(GL_IMP): $(OBJECTS)

 ifeq ($(DXE2GEN),)

-	@echo Missing DXE2GEN and/or DXE2.LD! You must have DXE2GEN

-	@echo somewhere in PATH, and DXE2.LD in DJGPP/LIB directory.

+	$(warning Missing DXE2GEN and/or DXE2.LD! You must have DXE2GEN)

+	$(warning somewhere in PATH, and DXE2.LD in DJGPP/LIB directory.)

 else

-	dxe2gen -o $(LIBDIR)/$(GL_DXE) -I $(LIBDIR)/$(GL_IMP) $(OBJECTS) -D "DOS Mesa" -U

+	dxe2gen -o $(LIBDIR)/$(GL_DXE) -I $(LIBDIR)/$(GL_IMP) $(OBJECTS) -D "Mesa DOS GL" -U

 endif

 

 clean:

 	-$(RM) *.o

+ifdef HAVE_X86

+	-$(RM) X86\*.o

+endif

 	-$(RM) DOS\*.o

 

 include depend

 

 DOS/dmesa.o: DOS/dmesa.c glheader.h ../include/GL/gl.h context.h glapi.h \

-  mtypes.h config.h glapitable.h glthread.h math/m_matrix.h dd.h \

-  ../include/GL/dmesa.h extensions.h macros.h matrix.h mmath.h texformat.h \

+  mtypes.h config.h glapitable.h glthread.h math/m_matrix.h dd.h macros.h \

+  ../include/GL/dmesa.h extensions.h matrix.h mmath.h texformat.h \

   texstore.h array_cache/acache.h swrast/s_context.h swrast/swrast.h \

   swrast/s_depth.h swrast/s_lines.h swrast/s_triangle.h swrast/s_trispan.h \

   swrast_setup/swrast_setup.h tnl/tnl.h tnl/t_context.h math/m_vector.h \