Original message bounced, reposted.
Date: Thu, 11 Oct 2012 19:46:53 -0400
Subject: LIBBCC.H header bugfix for C++
Hi,
The following patch would correct a few "undefined" symbols if libbcc.h is used in a C++ program.
Specifically, if a macro is cancelled for a BGI call (like, line() called as a regular function) or a special-case, macro-less call
(e.g. getfillsettings()) is made, they will not be found by the linker (because seen as C++ calls, per the original header, thus mangled),
without any warnings at the compilation stage.
sample.cpp:
#include <grx20.h>
#include <libbcc.h>
#undef line // avoid macro interference
int main(void)
{
line(1,2,3,4); // real function call now
arc(1,2,3,4,5); // arc() has no macro defined, so real call here as well
return 0;
}
gcc -Wall -o sample sample.cpp -lgrx20 -lgdi32
sample.o:sample.cpp:(.text+0x2e): undefined reference to `line(int, int, int, int)'
sample.o:sample.cpp:(.text+0x5a): undefined reference to `arc(int, int, int, int, int)'
*** libbcc.h.orig 2007-03-08 16:21:40.000000000 -0500
--- libbcc.h 2012-10-11 19:07:57.297854900 -0400
*************** void __gr_set_BGI_mode_whc(int *gd, int
*** 494,503 ****
int __gr_get_BGI_mode_pages(void);
void __gr_set_BGI_mode_pages(int p);
- #ifdef __cplusplus
- }
- #endif
-
/* ----------------------------------------------------------------- */
/* --- API functions with macro equivalents --- */
/* --- (for inlining) --- */
--- 494,499 ----
*************** int getactivepage(void);
*** 551,556 ****
--- 547,556 ----
void setvisualpage(int p);
int getvisualpage(void);
+ #ifdef __cplusplus
+ }
+ #endif
+
/* ----------------------------------------------------------------- */
#define restorecrtmode() __gr_restorecrtmode()
#define getgraphmode() (__gr_INIT ? __gr_Mode : (__gr_Result=grNoInitGraph))
---
Cheers,
AL