Hi Ivan,
GCC 14 is more strict regarding casting pointers types and implicit
declaration of functions. Now both -Wincompatible-pointer-types and
-Wimplicit-function-declaration are errors, and those affect ezxdisp.
More details here: https://gcc.gnu.org/gcc-14/porting_to.html
The attached patch makes the compilation with GCC 14 work. I've also
tested it with GCC 12 and TCC 0.9.27.
https://github.com/mario-goulart/chickollect-x11-bar seems to work ok
with the patch.
Please take a closer look at the use of make-locative in make-ezx-color
(not sure if that is correct).
All the best.
Mario
--
http://parenteses.org/mario
diff --git a/ezxdisp.h b/ezxdisp/3.0/ezxdisp.h
index ef3b5147..bf1af72e 100644
--- a/ezxdisp.h
+++ b/ezxdisp.h
@@ -114,6 +114,10 @@ void ezx_arc_2d(ezx_t *e, int x, int y, int w, int h, double angle1,
double angle2, const ezx_color_t *col, int width);
void ezx_fillarc_2d(ezx_t *e, int x, int y, int w, int h, double angle1,
double angle2, const ezx_color_t *col);
+void ezx_lines_2d_lolevel (ezx_t *e, int *points, int npoints,
+ const ezx_color_t *col, int width);
+void ezx_poly_2d_lolevel(ezx_t *e,int *points, int npoints,
+ const ezx_color_t *col);
// 3D graphics
void ezx_c3d_to_2d(ezx_t *e, double sx, double sy, double sz, double *dx,
@@ -129,5 +133,7 @@ void ezx_poly_3d(ezx_t *e, double *points, double hx, double hy,
double hz, int npoints, const ezx_color_t *col);
void ezx_circle_3d(ezx_t *e, double x0, double y0, double z0, double r,
const ezx_color_t *col);
+void ezx_poly_3d_lolevel (ezx_t *e, double *points, double hx, double hy,
+ double hz, int npoints, const ezx_color_t *col);
#endif
diff --git a/ezxdisp.scm b/ezxdisp/3.0/ezxdisp.scm
index 950dd4c3..0a60789a 100644
--- a/ezxdisp.scm
+++ b/ezxdisp.scm
@@ -50,7 +50,7 @@
ezx:CLOSE
)
- (import scheme (chicken base)
+ (import scheme (chicken base) (chicken locative)
(except (chicken foreign) foreign-declare)
srfi-4 bind)
@@ -119,33 +119,33 @@ void ezx_resize(ezxp e, int size_x, int size_y);
void ezx_wipe(ezxp e);
void ezx_wipe_layer(ezxp e, int lay);
void ezx_select_layer(ezxp e, int lay);
-void ezx_set_background(ezxp e, double * col);
+void ezx_set_background(ezxp e, const ezx_color_t *col);
void ezx_window_name(ezxp e, char *window_name);
int ezx_isclosed(ezxp e);
int ezx_sensebutton(ezxp e, ___out int *x, ___out int *y);
int ezx_pushbutton(ezxp e, ___out int *x, ___out int *y);
// for 2D graphics
-void ezx_point_2d(ezxp e, int x, int y, double * col);
-void ezx_line_2d(ezxp e, int x0, int y0, int x1, int y1, double * col, int width);
-void ezx_lines_2d_lolevel(ezxp e, int *points, int npoints, double * col, int width);
-void ezx_poly_2d_lolevel(ezxp e,int *points, int npoints, double * col);
-void ezx_str_2d(ezxp e, double x0, double y0, char *str, double * col);
-void ezx_rect_2d(ezxp e, int x0, int y0, int x1, int y1, double * col, int width);
-void ezx_fillrect_2d(ezxp e, double x0, double y0, double x1, double y1, double * col);
-void ezx_circle_2d(ezxp e, int x, int y, int r, double * col, int width);
-void ezx_fillcircle_2d(ezxp e, int x0, int y0, int r, double * col);
-void ezx_arc_2d(ezxp e, int x, int y, int w, int h, double angle1, double angle2, double * col, int width);
-void ezx_fillarc_2d(ezxp e, int x, int y, int w, int h, double angle1, double angle2, double * col);
+void ezx_point_2d(ezxp e, int x, int y, const ezx_color_t *col);
+void ezx_line_2d(ezxp e, int x0, int y0, int x1, int y1, const ezx_color_t *col, int width);
+void ezx_lines_2d_lolevel(ezxp e, int *points, int npoints, ezx_color_t * col, int width);
+void ezx_poly_2d_lolevel(ezxp e,int *points, int npoints, const ezx_color_t * col);
+void ezx_str_2d(ezxp e, double x0, double y0, char *str, const ezx_color_t * col);
+void ezx_rect_2d(ezxp e, int x0, int y0, int x1, int y1, const ezx_color_t * col, int width);
+void ezx_fillrect_2d(ezxp e, double x0, double y0, double x1, double y1, const ezx_color_t * col);
+void ezx_circle_2d(ezxp e, int x, int y, int r, const ezx_color_t * col, int width);
+void ezx_fillcircle_2d(ezxp e, int x0, int y0, int r, const ezx_color_t * col);
+void ezx_arc_2d(ezxp e, int x, int y, int w, int h, double angle1, double angle2, const ezx_color_t * col, int width);
+void ezx_fillarc_2d(ezxp e, int x, int y, int w, int h, double angle1, double angle2, const ezx_color_t * col);
// for 3D graphics
void ezx_c3d_to_2d(ezxp e, double sx, double sy, double sz, ___out double *dx, ___out double *dy);
-void ezx_line_3d(ezxp e, double x0, double y0, double z0, double x1, double y1, double z1, double * col, int width);
+void ezx_line_3d(ezxp e, double x0, double y0, double z0, double x1, double y1, double z1, const ezx_color_t * col, int width);
void ezx_set_light_3d(ezxp e, double ex, double ey, double ez);
void ezx_set_view_3d(ezxp e, double ex, double ey, double ez, double vx, double vy, double vz, double m);
-void ezx_str_3d(ezxp e, double x0, double y0, double z0, char *str, double * col);
-void ezx_poly_3d_lolevel(ezxp e, double *points, double hx, double hy, double hz, int npoints, double * col);
-void ezx_circle_3d(ezxp e, double x0, double y0, double z0, double r, double * col);
+void ezx_str_3d(ezxp e, double x0, double y0, double z0, char *str, const ezx_color_t * col);
+void ezx_poly_3d_lolevel(ezxp e, double *points, double hx, double hy, double hz, int npoints, ezx_color_t * col);
+void ezx_circle_3d(ezxp e, double x0, double y0, double z0, double r, const ezx_color_t *col);
int get_next_event(ezxp e, ___out int *x, ___out int *y, ___out unsigned int *state, ___out unsigned int *kb);
@@ -153,7 +153,7 @@ EOF
)
(define (make-ezx-color r g b)
- (f64vector r g b) )
+ (make-locative (f64vector r g b) ))
(define ezx-next-event get-next-event)