In an attempt to produce a working "make bgitest" for bcc, I tried to link the BGI test programs against Borland graphics.lib, but failed. Albeit similar, Borland and GRX implementations of BGI are different, so I decided to port GRX BGI to Borland C. What's in the patch below: - all header and source files include libbcc.h and not graphics.h - modename uses long color values - GRX for BCC includes the GRX BGI modules - fontplay "requires DJGPP/GRX", removed from test\bgi\makefile.bcc - getch(), getkey() and kbhit() from test\bgi* synced with test\keys - some compatibility fixes Compiled and tested with Borland C/C++ 5.01 - some of the static inline functions generate harmless warnings - test\bgi\tellipse displays something... well, for sure not ellipse - test\bgi\colortst displays black screen for some modes - all other bgi tests work properly More work is probably required, but this is still better (IMHO) than having non-working/incompatible BGI for BCC, right? And GRX BGI can not be ported to work on top of Borland BGI, they are too different.
diff -Nru3 grx245p3/include/bgiext.h grx/include/bgiext.h --- grx245p3/include/bgiext.h Fri Jan 12 03:36:56 2001 +++ grx/include/bgiext.h Mon Jun 24 13:56:12 2002 @@ -24,12 +24,7 @@ #ifndef __BGIEXT_H #define __BGIEXT_H
-#ifdef __TURBOC__ -# include <graphics.h> -#endif -#ifdef __GNUC__ -# include <libbcc.h> -#endif +#include <libbcc.h>
#ifdef __cplusplus extern "C" { diff -Nru3 grx245p3/src/bgi/modename.c grx/src/bgi/modename.c --- grx245p3/src/bgi/modename.c Fri Jan 12 19:36:44 2001 +++ grx/src/bgi/modename.c Mon Jun 24 13:48:24 2002 @@ -47,9 +47,9 @@ if (!__gr_getmode_whc(mode_number, &xw, &yw, &nc)) return NULL; switch (nc) { - case 1<<15 : strcpy(cols,"32K"); break; - case 1<<16 : strcpy(cols,"64K"); break; - case 1<<24 : strcpy(cols,"16M"); break; + case 1L<<15 : strcpy(cols,"32K"); break; + case 1L<<16 : strcpy(cols,"64K"); break; + case 1L<<24 : strcpy(cols,"16M"); break; default : sprintf(cols, "%ld", nc); break; } diff -Nru3 grx245p3/src/bgi/text.h grx/src/bgi/text.h --- grx245p3/src/bgi/text.h Sun Dec 23 03:15:42 2001 +++ grx/src/bgi/text.h Mon Jun 24 13:41:40 2002 @@ -33,7 +33,7 @@ typedef signed char schar; typedef unsigned short _ushort;
-#if defined(_MSC_VER) && defined(_WIN32) +#if defined(__TURBOC__) || (defined(_MSC_VER) && defined(_WIN32)) #include <io.h> #else #include <unistd.h> diff -Nru3 grx245p3/src/makefile.bcc grx/src/makefile.bcc --- grx245p3/src/makefile.bcc Sun Jun 16 02:04:16 2002 +++ grx/src/makefile.bcc Mon Jun 24 13:46:32 2002 @@ -28,10 +28,12 @@ GRX20STa= ..\lib$(GRX_LIB_SUBDIR)\temp1.lib GRX20STb= ..\lib$(GRX_LIB_SUBDIR)\temp2.lib GRX20STc= ..\lib$(GRX_LIB_SUBDIR)\temp3.lib +GRX20STd= ..\lib$(GRX_LIB_SUBDIR)\temp4.lib +GRX20STe= ..\lib$(GRX_LIB_SUBDIR)\temp5.lib TEMP_LIB= ..\lib$(GRX_LIB_SUBDIR)\temp?.lib
INCDIR= -I. -I./include -I../include -I$(BCCROOT)/include\ - -I./vdrivers + -I./vdrivers -I./bgi LIBDIR= -L$(BCCROOT)/lib
OP=+ @@ -83,7 +85,9 @@ LOBJ1=$(STD_1:/=) $(STD_2:/=) $(STD_3:/=) $(STD_4:/=) LOBJ2=$(STD_5:/=) $(STD_6:/=) $(STD_7:/=) $(STD_8:/=) LOBJ3=$(STD_9:/=) $(STD_10:/=) -LOBJ4=$(STD_11:/=) $(BCCOBJ) $(DBG_O) +LOBJ4=$(BGI_1:/=) $(BGI_2:/=) $(BGI_3:/=) +LOBJ5=$(BGI_4:/=) $(BGI_5:/=) $(BGI_6:/=) +LOBJ6=$(STD_11:/=) $(BCCOBJ) $(DBG_O)
UTILP = \ ..\bin\vesaif16.exe \ @@ -126,13 +130,15 @@ if exist $(GRX20ST) del $(GRX20ST)
# the & tells TLIB to continue on next line -$(GRX20ST): $(GRX20STa) $(GRX20STb) $(GRX20STc) $(LOBJ4:+=) +$(GRX20ST): $(GRX20STa) $(GRX20STb) $(GRX20STc) $(GRX20STd) $(GRX20STe) $(LOBJ6:+=) if exist $(GRX20ST) del $(GRX20ST) $(TLIB) $(LIBPAGE) /C $(GRX20ST) @&&! +$(GRX20STa) & +$(GRX20STb) & +$(GRX20STc) & - $(LOBJ4) + +$(GRX20STd) & + +$(GRX20STe) & + $(LOBJ6) !
$(GRX20STa): $(LOBJ1:+=) @@ -151,6 +157,18 @@ if exist $(GRX20STc) del $(GRX20STc) $(TLIB) $(LIBPAGE) /C $(GRX20STc) @&&! $(LOBJ3) +! + +$(GRX20STd): $(LOBJ4:+=) + if exist $(GRX20STd) del $(GRX20STd) + $(TLIB) $(LIBPAGE) /C $(GRX20STd) @&&! + $(LOBJ4) +! + +$(GRX20STe): $(LOBJ5:+=) + if exist $(GRX20STe) del $(GRX20STe) + $(TLIB) $(LIBPAGE) /C $(GRX20STe) @&&! + $(LOBJ5) !
..\bin\vesaif16.exe: utilprog\vesainfo.c $(GRX20ST) config.bcc diff -Nru3 grx245p3/test/bgi/bccbgi.c grx/test/bgi/bccbgi.c --- grx245p3/test/bgi/bccbgi.c Thu Nov 29 22:59:30 2001 +++ grx/test/bgi/bccbgi.c Mon Jun 24 14:43:12 2002 @@ -12,7 +12,10 @@
#if defined(__MSDOS__) # include <dos.h> -# include <pc.h> +# if defined(__DJGPP__) +# include <conio.h> +# include <pc.h> +# endif #elif defined(__WIN32__) # include "bccw32.h" #else diff -Nru3 grx245p3/test/bgi/bgilink.c grx/test/bgi/bgilink.c --- grx245p3/test/bgi/bgilink.c Thu May 31 13:21:48 2001 +++ grx/test/bgi/bgilink.c Mon Jun 24 14:47:12 2002 @@ -2,6 +2,7 @@ * Copyright (C) 1993-97 by Hartmut Schirmer */
+#include <stdlib.h> /* NULL, exit() */ #include <string.h> #include "libbcc.h"
diff -Nru3 grx245p3/test/bgi/colortst.c grx/test/bgi/colortst.c --- grx245p3/test/bgi/colortst.c Sat Mar 10 17:02:20 2001 +++ grx/test/bgi/colortst.c Mon Jun 24 14:43:50 2002 @@ -4,11 +4,8 @@
#include <stdio.h> #include <string.h> -#ifdef __GNUC__ -# include "libbcc.h" -#else -# include <graphics.h> -#endif + +#include "libbcc.h"
static void testmode(int mode) { diff -Nru3 grx245p3/test/bgi/makefile.bcc grx/test/bgi/makefile.bcc --- grx245p3/test/bgi/makefile.bcc Tue Jan 16 03:31:16 2001 +++ grx/test/bgi/makefile.bcc Mon Jun 24 14:16:28 2002 @@ -14,7 +14,6 @@ bgilink.exe \ bccbgi.exe \ colortst.exe \ - fontplay.exe \ small.exe \ tellipse.exe \ tfill.exe \ diff -Nru3 grx245p3/test/bgi/small.c grx/test/bgi/small.c --- grx245p3/test/bgi/small.c Sat Mar 10 23:29:20 2001 +++ grx/test/bgi/small.c Mon Jun 24 14:42:12 2002 @@ -1,8 +1,4 @@ -#ifdef __GNUC__ -# include <libbcc.h> -#else -# include <graphics.h> -#endif +#include <libbcc.h>
#if defined(__WIN32__) int GRXMain(void) diff -Nru3 grx245p3/test/bgi/tellipse.c grx/test/bgi/tellipse.c --- grx245p3/test/bgi/tellipse.c Thu Nov 29 22:59:30 2001 +++ grx/test/bgi/tellipse.c Mon Jun 24 14:44:40 2002 @@ -2,17 +2,15 @@ #include <stdlib.h> #include <math.h>
-#ifdef __GNUC__ -# include <libbcc.h> -# ifdef __MSDOS__ -# include <pc.h> -# else - extern int kbhit(void), getkey(void); -# endif -# define getch() getkey() +#include <libbcc.h> + +#ifdef __DJGPP__ +#include <conio.h> +#include <pc.h> #else -# include <graphics.h> -# include <conio.h> +extern int getch(void); +extern int getkey(void); +extern int kbhit(void); #endif
#if defined(__WIN32__) diff -Nru3 grx245p3/test/bgi/tfill.c grx/test/bgi/tfill.c --- grx245p3/test/bgi/tfill.c Thu Nov 29 22:59:30 2001 +++ grx/test/bgi/tfill.c Mon Jun 24 14:45:34 2002 @@ -1,17 +1,15 @@ #include <stdio.h> #include <stdlib.h> -#ifdef __GNUC__ -# include <libbcc.h> -# ifdef __MSDOS__ -# include <pc.h> -# else - extern int kbhit(void); - extern int getkey(void); -# endif -# define getch() getkey() + +#include <libbcc.h> + +#ifdef __DJGPP__ +#include <conio.h> +#include <pc.h> #else -# include <graphics.h> -# include <conio.h> +extern int getch(void); +extern int getkey(void); +extern int kbhit(void); #endif
#if defined(__WIN32__) diff -Nru3 grx245p3/test/bgi/tpoly.c grx/test/bgi/tpoly.c --- grx245p3/test/bgi/tpoly.c Thu Nov 29 22:59:30 2001 +++ grx/test/bgi/tpoly.c Mon Jun 24 14:45:18 2002 @@ -1,16 +1,15 @@ #include <stdio.h> #include <stdlib.h> -#ifdef __GNUC__ -# include <libbcc.h> -# ifdef __MSDOS__ -# include <pc.h> -# else - extern int kbhit(void), getkey(void); -# endif -# define getch() getkey() + +#include <libbcc.h> + +#ifdef __DJGPP__ +#include <conio.h> +#include <pc.h> #else -# include <graphics.h> -# include <conio.h> +extern int getch(void); +extern int getkey(void); +extern int kbhit(void); #endif
#if defined(__WIN32__) diff -Nru3 grx245p3/test/bgi/ttext.c grx/test/bgi/ttext.c --- grx245p3/test/bgi/ttext.c Thu Nov 29 22:59:30 2001 +++ grx/test/bgi/ttext.c Mon Jun 24 14:46:22 2002 @@ -1,16 +1,15 @@ #include <stdio.h> #include <stdlib.h> -#ifdef __GNUC__ -# include <libbcc.h> -# ifdef __MSDOS__ -# include <pc.h> -# else - extern int khbit(void), getkey(void); -# endif -# define getch() getkey() + +#include <libbcc.h> + +#ifdef __DJGPP__ +#include <conio.h> +#include <pc.h> #else -# include <graphics.h> -# include <conio.h> +extern int getch(void); +extern int getkey(void); +extern int kbhit(void); #endif
void play_font(char *name, char *file, int *x, int *y)
In an attempt to produce a working "make bgitest" for bcc, I tried to
Hi, Dimitar. Have you read the doc/readme.bgi file? Do you think your patch makes sense?
Really I has never used the bgi interface, so I don't care to apply the patch, but I think is not in the original author feeling.
More opinions?
Greetings, M.Alvarez
Hi.
26.06.2002 00:23:54, Mariano Alvarez Fernandez malfer@telefonica.net wrote:
In an attempt to produce a working "make bgitest" for bcc, I tried to
Hi, Dimitar. Have you read the doc/readme.bgi file? Do you think your patch makes sense?
Yes to both. The idea of bcc2grx is to get a Borland BGI program, convert it to GRX BGI and have it faster and better. But in the process of conversion or future development, such a program becomes incompatible with the Borland BGI, and because GRX does not support GRX BGI for BCC, the program will run on all platforms except for BCC/DOS. The patch tries to fix this issue.
If a program is compatible with both Borland BGI and GRX BGI, it can easily be changed to use either:
#if defined(__TURBOC__) && defined(__MSDOS__) #include <graphics.h> #else #include <libbcc.h>
and should be linked with _either_ graphics.lib (BCC/DOS) or GRX (all others), but not with both; so there is no problem to define the BGI symbols in GRX/BCC.
Now the bgi tests. They are mostly incompatible with Borland BGI, so either GRX BGI for BCC should be present, or there should be no bgi tests in makefile.bcc at all. The choice is yours.
Really I has never used the bgi interface, so I don't care to apply the patch
Well then simply edit makefiel.bcc and remove the bgi tests. It makes no sense to test GRX BGI for a platforform on which it is not supported by definition, and even less to use Borland graphics.lib for testing GRX library programs.
E-gards: Jimmy
Really I has never used the bgi interface, so I don't care to apply the patch
Ummm... my bad english. Really I wanted to say: I don't have problems to apply the patch.
So if there are no other comments I will apply it, but Dimitar, I think we need to change (or add) some things in the readme.bgi file.
M.Alvarez