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)
 

Reply via email to