<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">From b6d0b096a6a4730a4255efb50191e03cfa9b5496 Mon Sep 17 00:00:00 2001
From: Tim Edwards &lt;tim@opencircuitdesign.com&gt;
Date: Wed, 27 Mar 2024 15:50:30 -0400
Subject: [PATCH 1/1] Corrected a long-standing error in which ending text with
 a literal backslash generates output that cannot be correctly read back in
 because the backslash-parenthesis gets treated as a literal parenthesis
 instead of a PostScript string delimiter.

---
 VERSION |  2 +-
 files.c | 12 ++++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/files.c b/files.c
index b4f38df..92d7357 100644
--- a/files.c
+++ b/files.c
@@ -2548,6 +2548,18 @@ u_char *find_delimiter(u_char *fstring)
    while (*++search != '\0') {
       if (*search == source &amp;&amp; *(search - 1) != '\\') count++;
       else if (*search == target &amp;&amp; *(search - 1) != '\\') count--;
+      else if (*search == target &amp;&amp; *(search - 1) == '\\' &amp;&amp; *(search - 2) == '\\') {
+	 /* An even number of backslashes indicates that the nearest backslash
+	  * is not an escape, but a backslash.
+	  */
+	 char *bsrch;
+	 int bscnt = 0;
+
+	 for (bsrch = search - 1; bsrch &gt;= fstring &amp;&amp; *bsrch == '\\'; bsrch++) {
+	    bscnt++;
+	 }
+	 if ((bscnt % 1) == 0) count--;
+      }
       if (count == 0) break;
    }
    return search;
-- 
2.50.1

From c6f8e2313cbf19285fea807d50e211587269a225 Mon Sep 17 00:00:00 2001
From: Adam Sampson &lt;ats@offog.org&gt;
Date: Fri, 11 Jul 2025 01:27:47 +0100
Subject: [PATCH 1/5] Include math.h rather than prototyping atan2

In C23 mode, this prototype means that the function takes no arguments,
so it causes build failure with GCC 15. Just use the standard definition
instead.
---
 elements.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/elements.c b/elements.c
index c7705f4..ac599f8 100644
--- a/elements.c
+++ b/elements.c
@@ -10,6 +10,7 @@
 #include &lt;stdio.h&gt;
 #include &lt;stdlib.h&gt;
 #include &lt;string.h&gt;
+#include &lt;math.h&gt;
 
 #ifndef XC_WIN32
 #include &lt;X11/Intrinsic.h&gt;
@@ -54,8 +55,6 @@ extern colorindex *colorlist;
 extern Pixmap dbuf;
 #endif
 
-extern double atan2();
-
 /*------------------------------------------------------------------------*/
 /* Declarations of global variables                                       */
 /*------------------------------------------------------------------------*/
-- 
2.50.1

From f202331d1695e917a6fe4dd422359af308e21b13 Mon Sep 17 00:00:00 2001
From: Adam Sampson &lt;ats@offog.org&gt;
Date: Fri, 11 Jul 2025 01:37:25 +0100
Subject: [PATCH 2/5] Update pre-ANSI-C function definitions

GCC 15 warns about these in C23 mode.

These are the definitions that are used when building with Tk graphics;
there are lots more in the Xw code.
---
 functions.c  |  3 +--
 tkSimple.c   | 52 +++++++++++++++++++++++++++++-----------------------
 xcircdnull.c |  7 ++-----
 xcircexec.c  |  7 ++-----
 xcircuit.c   | 26 +++++++++++++++-----------
 5 files changed, 49 insertions(+), 46 deletions(-)

diff --git a/functions.c b/functions.c
index b193f50..e04312b 100644
--- a/functions.c
+++ b/functions.c
@@ -907,8 +907,7 @@ void InvertCTM(Matrix *ctm)
 
 /*------------------------------------------------------------------------*/
 
-void UCopyCTM(fctm, tctm)
-   Matrix *fctm, *tctm;
+void UCopyCTM(Matrix *fctm, Matrix *tctm)
 {
    tctm-&gt;a = fctm-&gt;a;
    tctm-&gt;b = fctm-&gt;b;
diff --git a/tkSimple.c b/tkSimple.c
index 1cf0d13..d657c90 100644
--- a/tkSimple.c
+++ b/tkSimple.c
@@ -133,12 +133,13 @@ static int		SimpleWidgetObjCmd _ANSI_ARGS_((ClientData clientData,
  */
 
 int
-Tk_SimpleObjCmd(clientData, interp, objc, objv)
-    ClientData clientData;	/* Main window associated with
+Tk_SimpleObjCmd(
+    ClientData clientData,	/* Main window associated with
 				 * interpreter. */
-    Tcl_Interp *interp;		/* Current interpreter. */
-    int objc;			/* Number of arguments. */
-    Tcl_Obj *CONST objv[];	/* Argument objects. */
+    Tcl_Interp *interp,		/* Current interpreter. */
+    int objc,			/* Number of arguments. */
+    Tcl_Obj *CONST objv[]	/* Argument objects. */
+    )
 {
     Tk_Window tkwin = (Tk_Window) clientData;
     Simple *simplePtr;
@@ -262,11 +263,12 @@ Tk_SimpleObjCmd(clientData, interp, objc, objv)
  */
 
 static int
-SimpleWidgetObjCmd(clientData, interp, objc, objv)
-    ClientData clientData;	/* Information about simple widget. */
-    Tcl_Interp *interp;		/* Current interpreter. */
-    int objc;			/* Number of arguments. */
-    Tcl_Obj *CONST objv[];	/* Argument objects. */
+SimpleWidgetObjCmd(
+    ClientData clientData,	/* Information about simple widget. */
+    Tcl_Interp *interp,		/* Current interpreter. */
+    int objc,			/* Number of arguments. */
+    Tcl_Obj *CONST objv[]	/* Argument objects. */
+    )
 {
     static char *simpleOptions[] = {
 	"cget", "configure", (char *) NULL
@@ -361,8 +363,9 @@ SimpleWidgetObjCmd(clientData, interp, objc, objv)
  */
 
 static void
-DestroySimple(memPtr)
-    char *memPtr;		/* Info about simple widget. */
+DestroySimple(
+    char *memPtr		/* Info about simple widget. */
+    )
 {
     register Simple *simplePtr = (Simple *) memPtr;
 
@@ -397,13 +400,14 @@ DestroySimple(memPtr)
  */
 
 static int
-ConfigureSimple(interp, simplePtr, objc, objv, flags)
-    Tcl_Interp *interp;		/* Used for error reporting. */
-    register Simple *simplePtr;	/* Information about widget;  may or may
+ConfigureSimple(
+    Tcl_Interp *interp,		/* Used for error reporting. */
+    register Simple *simplePtr,	/* Information about widget;  may or may
 				 * not already have values for some fields. */
-    int objc;			/* Number of valid entries in objv. */
-    Tcl_Obj *CONST objv[];	/* Arguments. */
-    int flags;			/* Flags to pass to Tk_ConfigureWidget. */
+    int objc,			/* Number of valid entries in objv. */
+    Tcl_Obj *CONST objv[],	/* Arguments. */
+    int flags			/* Flags to pass to Tk_ConfigureWidget. */
+    )
 {
   /* char *oldMenuName; (jdk) */
     
@@ -445,9 +449,10 @@ ConfigureSimple(interp, simplePtr, objc, objv, flags)
  */
 
 static void
-SimpleEventProc(clientData, eventPtr)
-    ClientData clientData;	/* Information about window. */
-    register XEvent *eventPtr;	/* Information about event. */
+SimpleEventProc(
+    ClientData clientData,	/* Information about window. */
+    register XEvent *eventPtr	/* Information about event. */
+    )
 {
     register Simple *simplePtr = (Simple *) clientData;
 
@@ -502,8 +507,9 @@ SimpleEventProc(clientData, eventPtr)
  */
 
 static void
-SimpleCmdDeletedProc(clientData)
-    ClientData clientData;	/* Pointer to widget record for widget. */
+SimpleCmdDeletedProc(
+    ClientData clientData	/* Pointer to widget record for widget. */
+    )
 {
     Simple *simplePtr = (Simple *) clientData;
     Tk_Window tkwin = simplePtr-&gt;tkwin;
diff --git a/xcircdnull.c b/xcircdnull.c
index dffbbd6..a4f9b60 100644
--- a/xcircdnull.c
+++ b/xcircdnull.c
@@ -18,8 +18,7 @@
 /*----------------------------------------------------------------------*/
 
 int
-xcircuit_AppInit(interp)
-    Tcl_Interp *interp;
+xcircuit_AppInit(Tcl_Interp *interp)
 {
     if (Tcl_Init(interp) == TCL_ERROR) {
 	return TCL_ERROR;
@@ -43,9 +42,7 @@ xcircuit_AppInit(interp)
 /*----------------------------------------------------------------------*/
 
 int
-main(argc, argv)
-   int argc;
-   char **argv;
+main(int argc, char **argv)
 {
     Tcl_Main(argc, argv, xcircuit_AppInit);
     return 0;
diff --git a/xcircexec.c b/xcircexec.c
index 36678af..5f2b045 100644
--- a/xcircexec.c
+++ b/xcircexec.c
@@ -45,8 +45,7 @@
 /*----------------------------------------------------------------------*/
 
 int
-xcircuit_AppInit(interp)
-    Tcl_Interp *interp;
+xcircuit_AppInit(Tcl_Interp *interp)
 {
     if (Tcl_Init(interp) == TCL_ERROR) {
 	return TCL_ERROR;
@@ -69,9 +68,7 @@ xcircuit_AppInit(interp)
 /*----------------------------------------------------------------------*/
 
 int
-main(argc, argv)
-   int argc;
-   char **argv;
+main(int argc, char **argv)
 {
     Tk_Main(argc, argv, xcircuit_AppInit);
     return 0;
diff --git a/xcircuit.c b/xcircuit.c
index 9d7e267..0afb687 100644
--- a/xcircuit.c
+++ b/xcircuit.c
@@ -1426,8 +1426,9 @@ static Tcl_ObjType tclHandleType = {
 /*----------------------------------------------------------------------*/
 
 static void
-UpdateStringOfHandle(objPtr)
-    Tcl_Obj *objPtr;   /* Int object whose string rep to update. */
+UpdateStringOfHandle(
+    Tcl_Obj *objPtr	/* Int object whose string rep to update. */
+    )
 {
     char buffer[TCL_INTEGER_SPACE];
     int len;
@@ -1443,9 +1444,10 @@ UpdateStringOfHandle(objPtr)
 /*----------------------------------------------------------------------*/
 
 static int
-SetHandleFromAny(interp, objPtr)
-    Tcl_Interp *interp;         /* Used for error reporting if not NULL. */
-    Tcl_Obj *objPtr;   /* The object to convert. */
+SetHandleFromAny(
+    Tcl_Interp *interp,	/* Used for error reporting if not NULL. */
+    Tcl_Obj *objPtr	/* The object to convert. */
+    )
 {  
     Tcl_ObjType *oldTypePtr = (Tcl_ObjType *)objPtr-&gt;typePtr;
     char *string, *end;
@@ -1577,8 +1579,9 @@ nexthier:
 /*----------------------------------------------------------------------*/
 
 Tcl_Obj *
-Tcl_NewHandleObj(optr)
-    void *optr;      /* Int used to initialize the new object. */
+Tcl_NewHandleObj(
+    void *optr	/* Int used to initialize the new object. */
+    )
 {
     Tcl_Obj *objPtr;
 
@@ -1593,10 +1596,11 @@ Tcl_NewHandleObj(optr)
 /*----------------------------------------------------------------------*/
 
 int
-Tcl_GetHandleFromObj(interp, objPtr, handlePtr)
-    Tcl_Interp *interp;		/* Used for error reporting if not NULL. */
-    Tcl_Obj *objPtr;	/* The object from which to get a int. */
-    void **handlePtr;	/* Place to store resulting int. */
+Tcl_GetHandleFromObj(
+    Tcl_Interp *interp,	/* Used for error reporting if not NULL. */
+    Tcl_Obj *objPtr,	/* The object from which to get a int. */
+    void **handlePtr	/* Place to store resulting int. */
+    )
 {
     long l;
     int result;
-- 
2.50.1

From 7953b5fba8f793cde146d61ff11e48f838ef01f5 Mon Sep 17 00:00:00 2001
From: Adam Sampson &lt;ats@offog.org&gt;
Date: Fri, 11 Jul 2025 01:41:40 +0100
Subject: [PATCH 3/5] Fix comparison of different pointer types

GCC 15 warns about comparing char * and u_char * here.
---
 files.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/files.c b/files.c
index 92d7357..7c3d953 100644
--- a/files.c
+++ b/files.c
@@ -2552,7 +2552,7 @@ u_char *find_delimiter(u_char *fstring)
 	 /* An even number of backslashes indicates that the nearest backslash
 	  * is not an escape, but a backslash.
 	  */
-	 char *bsrch;
+	 u_char *bsrch;
 	 int bscnt = 0;
 
 	 for (bsrch = search - 1; bsrch &gt;= fstring &amp;&amp; *bsrch == '\\'; bsrch++) {
-- 
2.50.1

From 6e7e5aa970f03ed9a99c02239311c561ab4db811 Mon Sep 17 00:00:00 2001
From: Adam Sampson &lt;ats@offog.org&gt;
Date: Fri, 11 Jul 2025 01:51:34 +0100
Subject: [PATCH 4/5] Make pagestr definitely long enough for any number

GCC 15 warns that sprintf may overrun the buffer here. Make it long
enough that even a 64-bit int would fit.
---
 events.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/events.c b/events.c
index 1f846e6..88d73ae 100644
--- a/events.c
+++ b/events.c
@@ -4479,7 +4479,7 @@ short *xc_undelete(objinstptr thisinstance, objectptr delobj, short mode,
 
 void printname(objectptr curobject)
 {
-   char editstr[10], pagestr[10];
+   char editstr[10], pagestr[30];
    short ispage;
 
 #ifndef TCL_WRAPPER
-- 
2.50.1

From b9d02dd63c391b67e7575e1e1a44e0a690da2563 Mon Sep 17 00:00:00 2001
From: Adam Sampson &lt;ats@offog.org&gt;
Date: Fri, 11 Jul 2025 01:56:47 +0100
Subject: [PATCH 5/5] Use a standard "fall through" comment

This matches how they are written elsewhere in the code. GCC 15
recognises a comment in this style and suppresses the warning about
implicit fallthrough.
---
 events.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/events.c b/events.c
index 88d73ae..e32d335 100644
--- a/events.c
+++ b/events.c
@@ -2195,8 +2195,9 @@ int functiondispatch(int function, short value, int x, int y)
 	 exchange();
 	 break;
       case XCF_Library_Move:
-	 /* Don't allow from library directory.  Then fall through to XCF_Move */
+	 /* Don't allow from library directory. */
 	 if (areawin-&gt;topinstance == xobjs.libtop[LIBLIB]) break;
+	 /* fall through */
       case XCF_Move:
 	 if (areawin-&gt;selects == 0) {
 	    was_preselected = FALSE;
-- 
2.50.1

</pre></body></html>