summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2022-10-29 12:05:28 +0200
committerIgor Pashev <pashev.igor@gmail.com>2022-10-29 12:05:28 +0200
commitfb668086b8653fe2e1fc0d07eb483ae6d7b04b1f (patch)
tree7fe6b43af76feceda59b2c48f3f33f4ab08e3b2c
parentc5ad9e230e93ada3c5284acdc1db175467a31518 (diff)
downloadopen-axiom-debian-fb668086b8653fe2e1fc0d07eb483ae6d7b04b1f.tar.gz
open-axiom (1.5.0+2022.09.17.git.be9640c+ds-0pin2)
-rw-r--r--debian/changelog6
-rw-r--r--debian/patches/2022.10.28.patch1254
-rw-r--r--debian/patches/no-missing-messages.patch10
-rw-r--r--debian/patches/series1
4 files changed, 1266 insertions, 5 deletions
diff --git a/debian/changelog b/debian/changelog
index 4604fe8..84f96f7 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+open-axiom (1.5.0+2022.09.17.git.be9640c+ds-0pin2) unstable; urgency=medium
+
+ * Add a massive 2022.10.28.patch to fix various issue including a crash
+
+ -- Igor Pashev <pashev.igor@gmail.com> Sat, 29 Oct 2022 12:04:03 +0200
+
open-axiom (1.5.0+2022.09.17.git.be9640c+ds-0pin1) unstable; urgency=low
* New upstream version.
diff --git a/debian/patches/2022.10.28.patch b/debian/patches/2022.10.28.patch
new file mode 100644
index 0000000..45ce4f4
--- /dev/null
+++ b/debian/patches/2022.10.28.patch
@@ -0,0 +1,1254 @@
+commit 8df721df25864f89772c58a4486314855bf1a37e
+Author: Igor Pashev <pashev.igor@gmail.com>
+Date: Fri Oct 28 04:00:00 2022 +0200
+
+ Fix some compiler warnings & buffer overflows
+
+diff --git a/src/clef/edible.c b/src/clef/edible.c
+index 7a6c4826..c3022060 100644
+--- a/src/clef/edible.c
++++ b/src/clef/edible.c
+@@ -69,7 +69,6 @@ using namespace OpenAxiom;
+
+ #define Cursor_shape(x)
+
+-static void check_flip(void);
+ static void catch_signals(void);
+ static void init_parent(void);
+ static void set_function_chars(void);
+diff --git a/src/etc/asq.c.pamphlet b/src/etc/asq.c.pamphlet
+index 44771f36..0ef9c5ef 100644
+--- a/src/etc/asq.c.pamphlet
++++ b/src/etc/asq.c.pamphlet
+@@ -450,7 +450,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ /* asq is a mini browser for the AXIOM databases */
+
+-#define VERSION 7
++#define ASQ_VERSION 7
+ /* 040206007 tpd fix anal compiler warnings */
+ /* 030710006 tpd remove share directory */
+ /* 940112005 tpd cleanup of printinfo */
+@@ -1448,7 +1448,7 @@ int pprintcond(int seekpt,char *path);
+ printf("searchkey can be either a domain or its abbreviation.\n");
+ printf("\n e.g. %s -so Integer\n",arg);
+ printf(" will give the source file name written to stdout\n");
+- printf(" (Version %d)\n",VERSION);
++ printf(" (Version %d)\n", ASQ_VERSION);
+ return(0);
+ }
+
+diff --git a/src/graph/include/view.h b/src/graph/include/view.h
+index 5d77d46f..6df571a0 100644
+--- a/src/graph/include/view.h
++++ b/src/graph/include/view.h
+@@ -34,8 +34,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ /* This file is to be included by all the viewport files */
+
+ #define check(code) checker(code,__LINE__,"")
+-#undef saymem
++#ifndef saymem
+ #define saymem(a,b,c) saymemWithLine(a,b,c,__LINE__)
++#endif
+ #define exitWithAck(ACK,ACKsize,i) \
+ check(write(Socket,&(ACK),sizeof(ACKsize))); exit(i);
+ #define NIL(type) ((type *)NULL)
+diff --git a/src/graph/view2D/header2.h b/src/graph/view2D/header2.h
+index c7d63985..bbd11a10 100644
+--- a/src/graph/view2D/header2.h
++++ b/src/graph/view2D/header2.h
+@@ -228,7 +228,7 @@ typedef struct _buttonStruct {
+ typedef struct _controlPanelStruct {
+ int numOfButtons;
+ Window controlWindow,messageWindow,colormapWindow;
+- char message[40];
++ char message[80];
+ struct _buttonStruct buttonQueue[maxButtons2D];
+ } controlPanelStruct;
+
+diff --git a/src/graph/view2D/process2d.c b/src/graph/view2D/process2d.c
+index 276948ef..52c326f6 100644
+--- a/src/graph/view2D/process2d.c
++++ b/src/graph/view2D/process2d.c
+@@ -493,7 +493,7 @@ processEvents(void)
+ Window whichWindow;
+ XWindowAttributes graphWindowAttrib;
+ buttonStruct *controlButton;
+- mouseCoord mouseXY;
++ mouseCoord mouseXY = {0.0, 0.0};
+ int i,
+ someInt,
+ mouseW4,
+@@ -561,7 +561,7 @@ processEvents(void)
+ switch(((XEvent *)event)->type) {
+
+ case ClientMessage:
+- if (event->xclient.data.l[0] == wm_delete_window) {
++ if ((Atom)event->xclient.data.l[0] == wm_delete_window) {
+ goodbye(-1);
+ }
+ else {
+@@ -799,7 +799,7 @@ processEvents(void)
+ for (i=0; i<maxGraphs; i++) {
+ if (graphStateArray[i].showing && graphStateArray[i].selected) {
+ if (zoomXON) {
+- graphStateArray[i].scaleX *= (1 - mouseXY.y * 0.3);
++ graphStateArray[i].scaleX *= (1 - mouseXY.x * 0.3);
+ if (graphStateArray[i].scaleX > maxScale)
+ graphStateArray[i].scaleX = maxScale;
+ else if (graphStateArray[i].scaleX < minScale)
+diff --git a/src/graph/view2D/write2d.c b/src/graph/view2D/write2d.c
+index 4431da08..395b821a 100644
+--- a/src/graph/view2D/write2d.c
++++ b/src/graph/view2D/write2d.c
+@@ -47,33 +47,31 @@
+ #include "Gfun.H1"
+
+
+-#define numBits (8*sizeof(int))
++#define numBits ((int)(8*sizeof(int)))
+
+ int
+ writeViewport(int thingsToWrite)
+ {
+
+ FILE *viewDataFile;
+- char viewDirName[80],
+- viewBitmapFilename[80],viewDataFilename[80],command[80];
++ char buf[1024];
+ int i,j,k,ii;
+ pointListStruct *aList;
+ pointStruct *aPoint;
+ XWindowAttributes vwInfo;
+
+ XGetWindowAttributes(dsply,viewport->titleWindow,&vwInfo);
+- sprintf(viewDirName,"%s%s",filename,".VIEW");
+- sprintf(command,"%s%s%s","rm -r ",viewDirName," > /dev/null 2>&1");
+- system(command);
+- sprintf(command,"%s%s%s","mkdir ",viewDirName," > /dev/null 2>&1");
+- if (system(command)) {
+- fprintf(stderr," Error: Cannot create %s\n",viewDirName);
++ sprintf(buf, "rm -f %s.VIEW", filename);
++ system(buf);
++ sprintf(buf, "mkdir %s.VIEW", filename);
++ if (system(buf)) {
++ fprintf(stderr," Error: Cannot create %s.VIEW\n", filename);
+ return(-1);
+ } else {
+ /*** Create the data file ***/
+- sprintf(viewDataFilename,"%s%s",viewDirName,"/data");
+- if ((viewDataFile = fopen(viewDataFilename,"w")) == NULL) {
+- fprintf(stderr," Error: Cannot create %s\n",viewDataFilename);
++ sprintf(buf,"%s.VIEW/data", filename);
++ if ((viewDataFile = fopen(buf,"w")) == NULL) {
++ fprintf(stderr," Error: Cannot create %s\n", buf);
+ perror("fopen");
+ return(-1);
+ } else {
+@@ -101,9 +99,9 @@ writeViewport(int thingsToWrite)
+ fclose(viewDataFile);
+ for (i=0; i<maxGraphs; i++) {
+ if (graphArray[i].key) {
+- sprintf(viewDataFilename,"%s%s%d",viewDirName,"/graph",i);
+- if ((viewDataFile = fopen(viewDataFilename,"w")) == NULL) {
+- fprintf(stderr," Error: Cannot create %s\n",viewDataFilename);
++ sprintf(buf,"%s.VIEW/graph%d", filename, i);
++ if ((viewDataFile = fopen(buf,"w")) == NULL) {
++ fprintf(stderr," Error: Cannot create %s\n", buf);
+ perror("fopen");
+ return(-1);
+ } else {
+@@ -143,37 +141,37 @@ writeViewport(int thingsToWrite)
+ switch (ii) {
+ case Pixmap:
+ /*** Create the pixmap (bitmaps need leaf name) ***/
+- sprintf(viewBitmapFilename,"%s%s",viewDirName,"/image.xpm");
++ sprintf(buf,"%s.VIEW/image.xpm", filename);
+ XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo);
+- write_pixmap_file(dsply,scrn,viewBitmapFilename,
++ write_pixmap_file(dsply,scrn,buf,
+ viewport->titleWindow,0,0,vwInfo.width,
+ vwInfo.height+titleHeight);
+ break;
+ case Bitmap:
+ /*** Create the bitmap (bitmaps need leaf name) ***/
+- sprintf(viewBitmapFilename,"%s%s",viewDirName,"/image.bm");
++ sprintf(buf,"%s.VIEW/image.bm", filename);
+ XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo);
+- XWriteBitmapFile(dsply,viewBitmapFilename,
++ XWriteBitmapFile(dsply,buf,
+ viewport->titleWindow,vwInfo.width,
+ vwInfo.height+vwInfo.border_width+20,-1,-1);
+ break;
+ case Image:
+ /*** Create the pixmap (bitmaps need leaf name) ***/
+- sprintf(viewBitmapFilename,"%s%s",viewDirName,"/image.xpm");
++ sprintf(buf,"%s.VIEW/image.xpm", filename);
+ XResizeWindow(dsply,viewport->titleWindow,300,300+titleHeight);
+ XResizeWindow(dsply,viewport->viewWindow,300,300);
+ XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo);
+ drawViewport(Xoption);
+ writeTitle();
+- write_pixmap_file(dsply,scrn,viewBitmapFilename,
++ write_pixmap_file(dsply,scrn,buf,
+ viewport->titleWindow,0,0,vwInfo.width,
+ vwInfo.height+titleHeight);
+ /*** Create the bitmap (bitmaps need leaf name) ***/
+ mono = 1;
+ drawViewport(Xoption);
+ writeTitle();
+- sprintf(viewBitmapFilename,"%s%s%s",viewDirName,"/","image.bm");
+- XWriteBitmapFile(dsply,viewBitmapFilename,
++ sprintf(buf,"%s.VIEW/image.bm", filename);
++ XWriteBitmapFile(dsply,buf,
+ viewport->titleWindow,vwInfo.width,
+ vwInfo.height+vwInfo.border_width+20,-1,-1);
+ mono = 0;
+@@ -181,7 +179,7 @@ writeViewport(int thingsToWrite)
+
+ case Postscript:
+ /*** Create postscript output for viewport (in axiom2D.ps) ***/
+- sprintf(PSfilename,"%s%s",viewDirName,"/axiom2D.ps");
++ sprintf(PSfilename,"%s.VIEW/axiom2D.ps", filename);
+ if (PSInit(viewport->viewWindow,viewport->titleWindow) == psError)
+ return (-1);
+ drawViewport(PSoption); /* write new script file in /tmp */
+diff --git a/src/graph/view3D/header.h b/src/graph/view3D/header.h
+index 53dd24ab..e029f12b 100644
+--- a/src/graph/view3D/header.h
++++ b/src/graph/view3D/header.h
+@@ -134,19 +134,12 @@
+ /*** colors ***/
+ /******************************/
+
+-#define totalHuesConst 27
+-
+-#define hueEnd 360
+-
+-#undef hueStep
+-#define hueStep (hueEnd/totalHuesConst)
+
+ #define black BlackPixel(dsply,scrn)
+ #define white WhitePixel(dsply,scrn)
+ #define numPlanes 1
+ #define numColors 10
+ #define startColor 0
+-#define maxColors (DisplayCells(dsply,scrn)-1)
+ #define maxPlanes (DefaultVisual((dpy),(scr))->bits_per_rgb)
+
+ /**********************************/
+diff --git a/src/graph/view3D/lighting3d.c b/src/graph/view3D/lighting3d.c
+index 666c708c..5d0b5489 100644
+--- a/src/graph/view3D/lighting3d.c
++++ b/src/graph/view3D/lighting3d.c
+@@ -79,6 +79,26 @@
+ #define arrowHead (control->buttonQueue[lightTranslucent].buttonX + 5)
+ static viewTriple point0 = {0,0,0};
+
++static float labels[basicScreen][7] = {
++ {105,0,4,106,0,3,labelColor}, /* script x label - 4 segments */
++ {106,0,3,112,0,10,labelColor},
++ {112,0,10,114,0,9,labelColor},
++ {106,0,10,113,0,3,labelColor},
++ {0,106,9,0,107,10,labelColor}, /* script y label - 7 segments */
++ {0,107,10,0,107,6,labelColor},
++ {0,107,6,0,113,5,labelColor},
++ {0,113,10,0,113,-3,labelColor},
++ {0,113,-3,0,111,-5,labelColor},
++ {0,111,-5,0,110,-1,labelColor},
++ {0,110,-1,0,114,3,labelColor},
++ {0,5,114,0,6,115,labelColor}, /* script z label - 8 segments */
++ {0,6,115,0,11,116,labelColor},
++ {0,11,116,0,12,113,labelColor},
++ {0,12,113,0,10,111,labelColor},
++ {0,10,111,0,11,110,labelColor},
++ {0,11,110,0,11,103,labelColor},
++ {0,11,103,0,9,102,labelColor},
++ {0,9,102,0,9,105,labelColor}};
+
+ /***************************
+ * int makeLightingPanel() *
+diff --git a/src/graph/view3D/process3d.c b/src/graph/view3D/process3d.c
+index 5c5e7d68..f5adbf9e 100644
+--- a/src/graph/view3D/process3d.c
++++ b/src/graph/view3D/process3d.c
+@@ -856,7 +856,7 @@ processEvents(void)
+ XEvent *event, tempEvent;
+ Window whichWindow;
+ buttonStruct *controlButton;
+- mouseCoord mouseXY, linearMouseXY;
++ mouseCoord mouseXY = {0.0, 0.0}, linearMouseXY = {0.0, 0.0};
+ int someInt, mouseW4, mouseH4;
+ int toggleReady =yes;
+ int checkButton = no;
+@@ -939,7 +939,7 @@ processEvents(void)
+
+ switch(((XEvent *)event)->type) {
+ case ClientMessage:
+- if (event->xclient.data.l[0] == wm_delete_window) {
++ if ((Atom)event->xclient.data.l[0] == wm_delete_window) {
+ goodbye(-1);
+ }
+ else {
+diff --git a/src/graph/view3D/smoothShade3d.c b/src/graph/view3D/smoothShade3d.c
+index 5d09a4ed..b794f210 100644
+--- a/src/graph/view3D/smoothShade3d.c
++++ b/src/graph/view3D/smoothShade3d.c
+@@ -753,7 +753,7 @@ showAxesLabels(int dFlag)
+ else GSetForeground(GC9991,psBlack,dFlag);
+
+ /* axes label for X */
+- if ((int)axesZ[0][0] >= (int)axesZ[0][2]) {
++ if ((int)axesZ[0][0] >= (int)axesZ[0][1]) {
+ if (axesXY[0][2] < axesXY[0][0]) xcoord2 = axesXY[0][2]-5;
+ else xcoord2 = axesXY[0][2] + 5;
+ if (axesXY[0][3] < axesXY[0][1]) ycoord2 = axesXY[0][3]-5;
+diff --git a/src/graph/view3D/static.h b/src/graph/view3D/static.h
+index 201f272b..8175c642 100644
+--- a/src/graph/view3D/static.h
++++ b/src/graph/view3D/static.h
+@@ -40,24 +40,4 @@ static float axes[3][6] = {{-117,0,0,117,0,0}, /* x axis */
+ {0,-117,0,0,117,0}, /* y axis */
+ {0,0,-117,0,0,117}}; /* z axis */
+
+-/* text labels are currently used */
+-static float labels[basicScreen][7] = {
+- {105,0,4,106,0,3,labelColor}, /* script x label - 4 segments */
+- {106,0,3,112,0,10,labelColor},
+- {112,0,10,114,0,9,labelColor},
+- {106,0,10,113,0,3,labelColor},
+- {0,106,9,0,107,10,labelColor}, /* script y label - 7 segments */
+- {0,107,10,0,107,6,labelColor},
+- {0,107,6,0,113,5,labelColor},
+- {0,113,10,0,113,-3,labelColor},
+- {0,113,-3,0,111,-5,labelColor},
+- {0,111,-5,0,110,-1,labelColor},
+- {0,110,-1,0,114,3,labelColor},
+- {0,5,114,0,6,115,labelColor}, /* script z label - 8 segments */
+- {0,6,115,0,11,116,labelColor},
+- {0,11,116,0,12,113,labelColor},
+- {0,12,113,0,10,111,labelColor},
+- {0,10,111,0,11,110,labelColor},
+- {0,11,110,0,11,103,labelColor},
+- {0,11,103,0,9,102,labelColor},
+- {0,9,102,0,9,105,labelColor}};
++
+diff --git a/src/graph/view3D/volume3d.c b/src/graph/view3D/volume3d.c
+index 348a39d6..87bce529 100644
+--- a/src/graph/view3D/volume3d.c
++++ b/src/graph/view3D/volume3d.c
+@@ -698,7 +698,7 @@ void
+ drawVolumePanel (void)
+ {
+
+- int i,strlength;
++ size_t i,strlength;
+
+
+ /* Draw some lines for volume panel. */
+@@ -733,13 +733,16 @@ drawVolumePanel (void)
+ 100,100,Xoption);
+
+
+- for (i=0; i<strlen(clipMess); i++)
++ strlength = strlen(clipMess);
++ for (i=0; i<strlength; i++)
+ GDrawString(trashGC,volumeWindow,clipMessX,clipMessY + i*clipMessDy,
+ &(clipMess[i]),1,Xoption);
+- for (i=0; i<strlen(eyeMess1); i++)
++ strlength = strlen(eyeMess1);
++ for (i=0; i<strlength; i++)
+ GDrawString(trashGC,volumeWindow,eyeMess1X,eyeMess1Y + i*eyeMess1Dy,
+ &(eyeMess1[i]),1,Xoption);
+- for (i=0; i<strlen(eyeMess2); i++)
++ strlength = strlen(eyeMess2);
++ for (i=0; i<strlength; i++)
+ GDrawString(trashGC,volumeWindow,eyeMess2X,eyeMess2Y + i*eyeMess2Dy,
+ &(eyeMess2[i]),1,Xoption);
+
+diff --git a/src/graph/view3D/write3d.c b/src/graph/view3D/write3d.c
+index 724fe5cc..7eeaf15b 100644
+--- a/src/graph/view3D/write3d.c
++++ b/src/graph/view3D/write3d.c
+@@ -51,7 +51,7 @@
+ #include "all_3d.H1"
+
+ /* upper limit as to how many kinds of files could be written (numBits-1) */
+-#define numBits (8*sizeof(int))
++#define numBits ((int)(8*sizeof(int)))
+ #define StellarColors 9
+
+ int
+@@ -64,25 +64,21 @@ writeViewport (int thingsToWrite)
+ viewTriple *aPt;
+ XWindowAttributes vwInfo;
+ FILE *viewDataFile;
+- char viewDirName[80], viewDataFilename[80],
+- viewBitmapFilename[80], viewPixmapFilename[80],
+- command[80];
++ char buf[1024];
+
+ XGetWindowAttributes(dsply,viewport->titleWindow,&vwInfo);
+- sprintf(viewDirName,"%s%s",filename,".VIEW");
+- sprintf(command,"%s%s%s","rm -r ",viewDirName," > /dev/null 2>&1");
+- system(command);
+- sprintf(command,"%s%s%s","mkdir ",viewDirName," > /dev/null 2>&1");
+- system(command);
+- if (0) {
+- fprintf(stderr," Error: Cannot create %s\n",viewDirName);
++ sprintf(buf, "rm -f %s.VIEW", filename);
++ system(buf);
++ sprintf(buf, "mkdir %s.VIEW", filename);
++ if (system(buf)) {
++ fprintf(stderr," Error: Cannot create %s.VIEW\n", filename);
+ return(-1);
+ } else {
+
+ /*** Create the data file ***/
+- sprintf(viewDataFilename,"%s%s",viewDirName,"/data");
+- if ((viewDataFile = fopen(viewDataFilename,"w")) == NULL) {
+- fprintf(stderr," Error: Cannot create %s\n",viewDataFilename);
++ sprintf(buf,"%s.VIEW/data", filename);
++ if ((viewDataFile = fopen(buf,"w")) == NULL) {
++ fprintf(stderr," Error: Cannot create %s\n", buf);
+ perror("fopen");
+ return(-1);
+ } else {
+@@ -140,18 +136,18 @@ writeViewport (int thingsToWrite)
+ switch (ii) {
+ case Bitmap:
+ /*** Create the pixmap (bitmaps need leaf name) ***/
+- sprintf(viewBitmapFilename,"%s%s%s",viewDirName,"/","image.bm");
++ sprintf(buf,"%s.VIEW/image.bm", filename);
+ XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo);
+- XWriteBitmapFile(dsply,viewBitmapFilename,
++ XWriteBitmapFile(dsply,buf,
+ viewport->titleWindow,vwInfo.width,
+ vwInfo.height+vwInfo.border_width+20,-1,-1);
+ break;
+
+ case Pixmap:
+ /*** Create the pixmap (bitmaps need leaf name) ***/
+- sprintf(viewPixmapFilename,"%s%s%s",viewDirName,"/","image.xpm");
++ sprintf(buf,"%s.VIEW/image.xpm", filename);
+ XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo);
+- write_pixmap_file(dsply,scrn,viewPixmapFilename,
++ write_pixmap_file(dsply,scrn,buf,
+ viewport->titleWindow,0,0,vwInfo.width,
+ vwInfo.height+titleHeight);
+ break;
+@@ -159,7 +155,7 @@ writeViewport (int thingsToWrite)
+ case Image:
+ /*** Create the image (bitmaps need leaf name) ***/
+ writeImage = yes;
+- sprintf(viewPixmapFilename,"%s%s%s",viewDirName,"/","image.xpm");
++ sprintf(buf,"%s.VIEW/image.xpm", filename);
+ XResizeWindow(dsply,viewport->titleWindow,300,300+titleHeight);
+ XResizeWindow(dsply,viewport->viewWindow,300,300);
+ viewport->hueTop = totalHues-1; viewport->hueOffset = 0;
+@@ -174,7 +170,7 @@ writeViewport (int thingsToWrite)
+ drawViewport(Xoption);
+ writeTitle();
+ XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo);
+- write_pixmap_file(dsply,scrn,viewPixmapFilename,
++ write_pixmap_file(dsply,scrn,buf,
+ viewport->titleWindow,0,0,vwInfo.width,
+ vwInfo.height+titleHeight);
+ viewport->monoOn = 1;
+@@ -182,8 +178,8 @@ writeViewport (int thingsToWrite)
+ firstTime = 1;
+ drawViewport(Xoption);
+ writeTitle();
+- sprintf(viewBitmapFilename,"%s%s%s",viewDirName,"/","image.bm");
+- XWriteBitmapFile(dsply,viewBitmapFilename,
++ sprintf(buf,"%s.VIEW/image.bm", filename);
++ XWriteBitmapFile(dsply,buf,
+ viewport->titleWindow,vwInfo.width,
+ vwInfo.height+vwInfo.border_width+20,-1,-1);
+
+@@ -192,7 +188,7 @@ writeViewport (int thingsToWrite)
+
+ case Postscript:
+ /*** Create postscript output for viewport (in axiom3D.ps) ***/
+- sprintf(PSfilename,"%s%s",viewDirName,"/axiom3D.ps");
++ sprintf(PSfilename,"%s.VIEW/axiom3D.ps", filename);
+ if (PSInit(viewport->viewWindow,viewport->titleWindow) == psError)
+ return(-1);
+ drawViewport(PSoption); /* write new script file in /tmp */
+diff --git a/src/graph/viewAlone/spoon2D.c b/src/graph/viewAlone/spoon2D.c
+index 00f46e31..912d834b 100644
+--- a/src/graph/viewAlone/spoon2D.c
++++ b/src/graph/viewAlone/spoon2D.c
+@@ -58,7 +58,7 @@ spoonView2D(void)
+ {
+
+ int i,code,pipe0[2],pipe1[2],there;
+- char envAXIOM[100],runView[100];
++ char runView[100];
+
+ sprintf(errorStr,"%s","creating pipes");
+ check(pipe(pipe0));
+@@ -84,8 +84,7 @@ spoonView2D(void)
+ close(pipe1[1]);
+ printf("(spoon2D child) start the TwoDimensionalViewport process\n");
+ sprintf(errorStr,"%s","(viewAlone) execution of the TwoDimensionalViewport process");
+- sprintf(envAXIOM,"%s",oa_getenv("AXIOM"));
+- sprintf(runView,"%s%s",envAXIOM,"/lib/view2D");
++ sprintf(runView,"%s/lib/view2D",oa_getenv("AXIOM"));
+ check(execl(runView,runView, (char*)NULL));
+ fprintf(stderr,"Could not execute view2D! Check that view2D is on your path variable.\n");
+ exit(-1);
+@@ -215,7 +214,7 @@ makeView2DFromFileData(view2DStruct *doView2D)
+ int i,j,k;
+ char title[256];
+ FILE *graphFile;
+- char graphFilename[256];
++ char graphFilename[512];
+ pointListStruct *aList;
+ pointStruct *aPoint;
+ printf("(spoon2D makeView2DFromFileData)\n");
+@@ -280,7 +279,7 @@ makeView2DFromFileData(view2DStruct *doView2D)
+ for (i=0; i<maxGraphs; i++) {
+ if (graphArray[i].key) {
+ /** OPEN FILE FOR GRAPHS **/
+- sprintf(graphFilename,"%s%s%d",pathname,"/graph",i);
++ sprintf(graphFilename,"%s/graph%d",pathname,i);
+ if ((graphFile = fopen(graphFilename,"r")) == NULL) {
+ fprintf(stderr," Error: Cannot find the file %s\n",graphFilename);
+ perror("fopen");
+diff --git a/src/graph/viewAlone/spoonComp.c b/src/graph/viewAlone/spoonComp.c
+index 5714d04f..0b3be3ba 100644
+--- a/src/graph/viewAlone/spoonComp.c
++++ b/src/graph/viewAlone/spoonComp.c
+@@ -60,7 +60,7 @@ spoonView3D(int type)
+ {
+
+ int i,j,k,code,pipe0[2],pipe1[2];
+- char envAXIOM[100],runView[100];
++ char runView[100];
+ LLPoint *anLLPoint;
+ LPoint *anLPoint;
+ int *anIndex;
+@@ -86,8 +86,7 @@ spoonView3D(int type)
+
+ sprintf(errorStr,"%s",
+ "(viewAlone) execution of the ThreeDimensionalViewport process");
+- sprintf(envAXIOM,"%s",oa_getenv("AXIOM"));
+- sprintf(runView,"%s%s",envAXIOM,"/lib/view3D");
++ sprintf(runView,"%s/lib/view3D",oa_getenv("AXIOM"));
+ check(execl(runView,runView, (char*) NULL));
+ fprintf(stderr,"Could not execute view3D!\n");
+ exit(-1);
+diff --git a/src/graph/viewman/fun2D.c b/src/graph/viewman/fun2D.c
+index af7724d9..17fedab5 100644
+--- a/src/graph/viewman/fun2D.c
++++ b/src/graph/viewman/fun2D.c
+@@ -183,7 +183,7 @@ forkView2D(void)
+ int there;
+ int pipe0[2], pipe1[2];
+
+- char envAXIOM[100],runView[100];
++ char envAXIOM[100], runView[200];
+
+ #ifdef DEBUG
+ fprintf(stderr,"fun2D:Pipe calls for 2D\n");
+diff --git a/src/graph/viewman/fun3D.c b/src/graph/viewman/fun3D.c
+index 35f79cc4..93645a29 100644
+--- a/src/graph/viewman/fun3D.c
++++ b/src/graph/viewman/fun3D.c
+@@ -235,7 +235,7 @@ forkView3D(int typeOfViewport)
+ int pipe0[2],pipe1[2];
+ int *anIndex;
+
+- char envAXIOM[100],runView[100];
++ char envAXIOM[100], runView[200];
+ int j,k;
+ LLPoint *anLLPoint;
+ LPoint *anLPoint;
+diff --git a/src/hyper/ReadBitmap.c b/src/hyper/ReadBitmap.c
+index d1ada58c..ee8e89d2 100644
+--- a/src/hyper/ReadBitmap.c
++++ b/src/hyper/ReadBitmap.c
+@@ -58,7 +58,6 @@ HTReadBitmapFile(Display *display,int screen,char * filename,
+ XImage *image;
+ FILE *fd;
+ char Line[256], Buff[256];
+- int num_chars;
+ char *ptr;
+ int rch;
+ int version;
+@@ -134,7 +133,6 @@ HTReadBitmapFile(Display *display,int screen,char * filename,
+ (image)->bytes_per_line = chars_line = (*width + 7) / 8;
+ file_chars_line = chars_line + padding;
+
+- num_chars = chars_line * (*height);
+ file_chars = file_chars_line * (*height);
+ (image)->data = (char *) halloc((image)->bytes_per_line * (image)->height,
+ "Read Pixmap--Image data");
+diff --git a/src/hyper/dialog.c b/src/hyper/dialog.c
+index fe7b78aa..e3ae5122 100644
+--- a/src/hyper/dialog.c
++++ b/src/hyper/dialog.c
+@@ -87,6 +87,13 @@ static void overwrite_buffer(char * buffer , InputItem * item);
+ static void redraw_win();
+ static void tough_enter(InputItem * sym);
+
++static void
++strnmov(char *dest, const char *src, size_t n)
++{
++ while (n-- && (*dest++ = *src++));
++}
++
++
+ static void
+ redraw_win()
+ {
+@@ -248,7 +255,7 @@ move_sym_forward(LineStruct *line, int num, int size, InputItem *sym)
+ return 1;
+ }
+ else {
+- strncpy(&line->buffer[num], line->buffer, line->len);
++ strnmov(&line->buffer[num], line->buffer, line->len);
+ line->len += num;
+ line->changed = 1;
+ return 0;
+@@ -310,7 +317,7 @@ insert_buffer(char *buffer, InputItem *sym)
+ else {
+ line->next->buffer[0] = line->buffer[size - 1];
+ line->changed = 1;
+- strncpy(&line->buffer[line->buff_pntr + 1],
++ strnmov(&line->buffer[line->buff_pntr + 1],
+ &line->buffer[line->buff_pntr], size - line->buff_pntr - 1);
+ line->buffer[line->buff_pntr++] = buffer[0];
+ line->changed = 1;
+@@ -346,7 +353,7 @@ insert_buffer(char *buffer, InputItem *sym)
+ /* we are not the leaders */
+ newline->buffer[0] = line->buffer[size - 1];
+ newline->len = 1;
+- strncpy(&line->buffer[line->buff_pntr + 1],
++ strnmov(&line->buffer[line->buff_pntr + 1],
+ &line->buffer[line->buff_pntr], size - line->buff_pntr);
+ if (line->buff_pntr < size - 1) {
+ line->buffer[line->buff_pntr++] = buffer[0];
+@@ -672,7 +679,7 @@ move_rest_back(LineStruct *line, int size)
+ return c;
+
+ while (line->next != NULL && line->len > size) {
+- strncpy(line->buffer, &(line->buffer[1]), size - 1);
++ strnmov(line->buffer, &(line->buffer[1]), size - 1);
+ line->buffer[size - 1] = line->next->buffer[0];
+ line->changed = 1;
+ line = line->next;
+@@ -685,7 +692,7 @@ move_rest_back(LineStruct *line, int size)
+ if (line->len > 0) {
+ line->changed = 1;
+ if (line->len > 1)
+- strncpy(line->buffer, &(line->buffer[1]), line->len - 1);
++ strnmov(line->buffer, &(line->buffer[1]), line->len - 1);
+ line->buffer[--line->len] = 0;
+ if (line->len == 0) {
+ /* I have to fix the previous line */
+@@ -867,7 +874,7 @@ move_back_one_char(InputItem *sym)
+ else if (line->len > 0) {
+ d = line->buffer[0];
+ if (line->len <= sym->size) {
+- strncpy(line->buffer, &(line->buffer[1]), line->len - 1);
++ strnmov(line->buffer, &(line->buffer[1]), line->len - 1);
+ if (c == 0) {
+ line->len--;
+ line->buffer[line->len] = 0;
+@@ -876,7 +883,7 @@ move_back_one_char(InputItem *sym)
+ line->buffer[line->len - 1] = c;
+ }
+ else {
+- strncpy(line->buffer, &(line->buffer[1]), sym->size - 2);
++ strnmov(line->buffer, &(line->buffer[1]), sym->size - 2);
+ if (c == 0) {
+ line->buffer[sym->size - 1] = 0;
+ line->len--;
+@@ -905,7 +912,7 @@ move_back_one_char(InputItem *sym)
+
+
+ if (line->len <= sym->size) {
+- strncpy(&line->buffer[line->buff_pntr - 1],
++ strnmov(&line->buffer[line->buff_pntr - 1],
+ &(line->buffer[line->buff_pntr]),
+ line->len - line->buff_pntr);
+ if (c == 0)
+@@ -914,7 +921,7 @@ move_back_one_char(InputItem *sym)
+ line->buffer[line->len - 1] = c;
+ }
+ else {
+- strncpy(&(line->buffer[line->buff_pntr - 1]),
++ strnmov(&(line->buffer[line->buff_pntr - 1]),
+ &(line->buffer[line->buff_pntr]),
+ sym->size - line->buff_pntr);
+ if (c == 0) {
+@@ -1040,7 +1047,7 @@ delete_one_char(InputItem *sym)
+ * exists at the end
+ */
+ if (line->len <= sym->size) {
+- strncpy(&line->buffer[line->buff_pntr],
++ strnmov(&line->buffer[line->buff_pntr],
+ &(line->buffer[line->buff_pntr + 1]),
+ line->len - line->buff_pntr);
+ if (c == 0)
+@@ -1049,7 +1056,7 @@ delete_one_char(InputItem *sym)
+ line->buffer[line->len - 1] = c;
+ }
+ else {
+- strncpy(&(line->buffer[line->buff_pntr]),
++ strnmov(&(line->buffer[line->buff_pntr]),
+ &(line->buffer[line->buff_pntr + 1]),
+ sym->size - line->buff_pntr);
+ if (c == 0) {
+diff --git a/src/hyper/extent1.c b/src/hyper/extent1.c
+index 0642957c..95766791 100644
+--- a/src/hyper/extent1.c
++++ b/src/hyper/extent1.c
+@@ -1319,12 +1319,9 @@ compute_header_extent(HyperDocPage *page)
+ * for the header here
+ */
+
+- int ty; /* UNUSED */
+-
+ gExtentRegion = Header;
+ right_margin_space = non_scroll_right_margin_space;
+ init_extents();
+- ty = text_y = 3 * top_margin + line_height + max(page->title->height, twheight);
+ gLineNode = page->header->next;
+ compute_text_extent(page->header->next);
+ page->header->height = text_height(page->header->next,
+diff --git a/src/hyper/htadd.c b/src/hyper/htadd.c
+index 21321ae7..b3a5962a 100644
+--- a/src/hyper/htadd.c
++++ b/src/hyper/htadd.c
+@@ -94,7 +94,7 @@ main(int argc, char **argv)
+ using namespace OpenAxiom;
+ /*int i;*/
+ char db_dir[256]; /* the directory where the db file is */
+- char dbfilename[256]; /* the database filename */
++ char dbfilename[512]; /* the database filename */
+ char *filenames[1000]; /* the files to be added */
+ char **fnames = filenames;
+ short flag; /* flag for deleting or adding */
+diff --git a/src/hyper/hthits.c b/src/hyper/hthits.c
+index 470bf297..4e628b16 100644
+--- a/src/hyper/hthits.c
++++ b/src/hyper/hthits.c
+@@ -220,7 +220,7 @@ handlePage(FILE* infile, PgInfo* pg)
+ static char *pgBuf = 0;
+ static int pgBufSize = 0;
+
+- char *title, *body;
++ char *title = NULL, *body = NULL;
+
+ if (pg->size > pgBufSize - 1) {
+ if (pgBuf)
+diff --git a/src/hyper/htinp.c b/src/hyper/htinp.c
+index 7799c194..b44047f8 100644
+--- a/src/hyper/htinp.c
++++ b/src/hyper/htinp.c
+@@ -439,7 +439,7 @@ send_command(char *command,int com_type)
+ }
+ else {
+ FILE *f;
+- char name[512], str[512]/*, *c*/;
++ char name[512], str[1024]/*, *c*/;
+
+ sprintf(name, "/tmp/hyper%s.input", oa_getenv("SPADNUM"));
+ f = fopen(name, "w");
+diff --git a/src/hyper/initx.c b/src/hyper/initx.c
+index 0ee4afa0..c69c2071 100644
+--- a/src/hyper/initx.c
++++ b/src/hyper/initx.c
+@@ -1018,7 +1018,7 @@ is_it_850(XFontStruct *fontarg)
+ /* return 1 if it is 850 */
+
+ s = XGetAtomName(gXDisplay,(Atom)fontarg->properties[i].card32);
+- val = !( strcmp("850",s) * strcmp("ibm-850",s));
++ val = !( strcmp("850",s) && strcmp("ibm-850",s));
+ XFree(s);
+ return( val );
+ }
+diff --git a/src/hyper/keyin.c b/src/hyper/keyin.c
+index eef07e7b..fa8af8de 100644
+--- a/src/hyper/keyin.c
++++ b/src/hyper/keyin.c
+@@ -82,7 +82,7 @@ unsigned int UnsupportedModMask = LockMask | ControlMask
+ static unsigned int
+ get_modifier_mask(KeySym sym)
+ {
+- unsigned int i, mask;
++ unsigned int mask;
+ XModifierKeymap *mod;
+ KeyCode kcode;
+ const int masks[8] = {
+@@ -94,7 +94,7 @@ get_modifier_mask(KeySym sym)
+ kcode = XKeysymToKeycode(gXDisplay,sym);
+
+ if (mod) {
+- for (i = 0; i < (8 * mod->max_keypermod); i++){
++ for (int i = 0; i < (8 * mod->max_keypermod); i++){
+ if (!mod->modifiermap[i]) continue;
+ else if (kcode == mod->modifiermap[i]){
+ mask = masks[i / mod->max_keypermod];
+diff --git a/src/hyper/lex.c b/src/hyper/lex.c
+index d571e6cd..ed281403 100644
+--- a/src/hyper/lex.c
++++ b/src/hyper/lex.c
+@@ -435,7 +435,7 @@ AGAIN:
+ input_string = sock_buf;
+ goto AGAIN;
+ default:
+- fprintf(stderr, "Get Char: Unknown type of input: %d\n", input_type);
++ fprintf(stderr, "Get Char: Unknown type of input: %d\n", (int)input_type);
+ return -1;
+ }
+ }
+diff --git a/src/hyper/macro.c b/src/hyper/macro.c
+index 0b0d1889..7bf0f77b 100644
+--- a/src/hyper/macro.c
++++ b/src/hyper/macro.c
+@@ -101,7 +101,6 @@ number(const char *str)
+ static char *
+ load_macro(MacroStore *macro)
+ {
+- int ret_val;
+ long start_fpos;
+ int size = 0;
+ char *trace;
+@@ -158,7 +157,7 @@ load_macro(MacroStore *macro)
+ }
+ start_fpos = fpos;
+ scan_HyperDoc();
+- ret_val = fseek(cfile, macro->fpos.pos + start_fpos, 0);
++ fseek(cfile, macro->fpos.pos + start_fpos, 0);
+ size = fpos - start_fpos;
+ macro_buff = (char *) halloc((size + 1) * sizeof(char), "Macro_buf");
+ for (size = 0, trace = macro_buff; size < fpos - (start_fpos) - 1; size++)
+diff --git a/src/hyper/parse-aux.c b/src/hyper/parse-aux.c
+index 4c7600b9..24efcf89 100644
+--- a/src/hyper/parse-aux.c
++++ b/src/hyper/parse-aux.c
+@@ -512,7 +512,6 @@ int
+ get_filename()
+ {
+ int c, ws;
+- static int seen_white = 0; /*UNUSED */
+ static char buffer[256];
+ char *buf = buffer;
+
+@@ -524,8 +523,6 @@ get_filename()
+ keyword_fpos = fpos;
+ c = get_char();
+ ws = whitespace(c);
+- if (ws)
+- seen_white = 1;
+ } while (ws);
+ switch (c) {
+ case EOF:
+@@ -545,7 +542,6 @@ get_filename()
+ *buf = '\0';
+ token.type = openaxiom_Word_token;
+ token.id = buffer;
+- seen_white = 0;
+ break;
+ }
+ return 1;
+diff --git a/src/hyper/parse-input.c b/src/hyper/parse-input.c
+index 1c619151..727acc9d 100644
+--- a/src/hyper/parse-input.c
++++ b/src/hyper/parse-input.c
+@@ -562,9 +562,9 @@ parse_radioboxes()
+
+ /* quick search for the name in the current list */
+ if (already_there(newrb->name)) {
++ fprintf(stderr, "Tried to redefine radioboxes %s\n", newrb->name);
+ free(newrb->name);
+ free(newrb);
+- fprintf(stderr, "Tried to redefine radioboxes %s\n", newrb->name);
+ print_page_and_filename();
+ jump();
+ }
+diff --git a/src/hyper/parse-types.c b/src/hyper/parse-types.c
+index f5a42cd9..e42d93f9 100644
+--- a/src/hyper/parse-types.c
++++ b/src/hyper/parse-types.c
+@@ -196,9 +196,9 @@ parse_condnode()
+ break;
+ default:
+ {
+- char eb[128];
++ char eb[160];
+ token_name(token.type);
+- sprintf(eb, "Unexpected Token %s\n", eb);
++ sprintf(eb, "Unexpected Token %s\n", ebuffer);
+ htperror(eb, HTCONDNODE);
+ }
+ break;
+diff --git a/src/hyper/parse.c b/src/hyper/parse.c
+index 1ca0f77e..cddaa8ae 100644
+--- a/src/hyper/parse.c
++++ b/src/hyper/parse.c
+@@ -298,8 +298,8 @@ parse_header(HyperDocPage *page)
+ static void
+ init_parse_page(HyperDocPage *page)
+ {
+- gEndedPage = gInDesc = gStringValueOk = gInIf =
+- gInButton = gInOptional = gInVerbatim = gInPaste = gInItems =
++ gEndedPage = false; gInDesc = false; gStringValueOk = false; gInIf = false;
++ gInButton = false; gInOptional = false; gInVerbatim = false; gInPaste = false; gInItems = false;
+ gInSpadsrc = false;
+ example_number = 1;
+ cur_page = page;
+@@ -325,8 +325,8 @@ init_parse_page(HyperDocPage *page)
+ void
+ init_parse_patch(HyperDocPage *page)
+ {
+- gEndedPage = gInDesc = gStringValueOk = gInIf =
+- gInButton = gInOptional = gInVerbatim = gInPaste = gInItems =
++ gEndedPage = false; gInDesc = false; gStringValueOk = false; gInIf = false;
++ gInButton = false; gInOptional = false; gInVerbatim = false; gInPaste = false; gInItems = false;
+ gInSpadsrc = false;
+ gParserMode = AllMode;
+ gParserRegion = Scrolling;
+diff --git a/src/hyper/show-types.c b/src/hyper/show-types.c
+index 1942901b..e34498d8 100644
+--- a/src/hyper/show-types.c
++++ b/src/hyper/show-types.c
+@@ -464,10 +464,8 @@ show_input(TextNode *node)
+ /*Window root, child;*/
+ /*int root_x, root_y, win_x, win_y, buttons;*/
+ InputItem *item;
+- char *inpbuffer;
+
+ item = node->link->reference.string;
+- inpbuffer = item->curr_line->buffer;
+
+ wc.border_width = 0;
+ wc.x = node->x;
+diff --git a/src/hyper/spadint.c b/src/hyper/spadint.c
+index aa381ba0..df2cd526 100644
+--- a/src/hyper/spadint.c
++++ b/src/hyper/spadint.c
+@@ -137,7 +137,7 @@ static void
+ send_pile(openaxiom_sio *sock,char * str)
+ {
+ FILE *f;
+- char name[512], command[512];
++ char name[512], command[532];
+
+ sprintf(name, "/tmp/hyper%s.input", oa_getenv("SPADNUM"));
+ f = fopen(name, "w");
+@@ -218,7 +218,7 @@ start_user_buffer(HyperDocPage *page)
+
+ SPAD = (char *) oa_getenv("AXIOM");
+ if (SPAD == NULL) {
+- sprintf(SPAD, "/spad/mnt/rios");
++ SPAD = "/spad/mnt/rios";
+ }
+ sprintf(spadbuf, "%s/lib/spadbuf", SPAD);
+ sprintf(complfile, "%s/lib/command.list", SPAD);
+@@ -542,16 +542,18 @@ print_to_string1(TextNode *command,int * sizeBuf)
+ case openaxiom_StringValue_token:
+ item = return_item(node->data.text);
+ if (item != NULL) {
+- if (node->space)
++ if (node->space) {
+ storeChar(' ');
++ }
+ curr_line = item->lines;
+ while (curr_line != NULL) {
+ for (lcount = 0, s = curr_line->buffer; *s && lcount < item->size;
+ s++, lcount++) {
+ storeChar(funnyUnescape(*s));
+ }
+- if (curr_line->len <= item->size && curr_line->next)
++ if (curr_line->len <= item->size && curr_line->next) {
+ storeChar('\n');
++ }
+ curr_line = curr_line->next;
+ }
+ }
+@@ -1032,8 +1034,9 @@ print_source_to_string1(TextNode *command,int * sizeBuf)
+ s++, lcount++) {
+ storeChar(funnyUnescape(*s));
+ }
+- if (curr_line->len <= item->size && curr_line->next)
++ if (curr_line->len <= item->size && curr_line->next) {
+ storeChar('\n');
++ }
+ curr_line = curr_line->next;
+ }
+ }
+diff --git a/src/include/edin.h b/src/include/edin.h
+index 65f77aeb..f010aa2a 100644
+--- a/src/include/edin.h
++++ b/src/include/edin.h
+@@ -49,6 +49,8 @@ extern int convert_buffer(char * , char * , int * , int );
+ extern void init_buff(char * , int );
+ extern void forwardcopy(char * , char * , int );
+ extern void forwardflag_cpy(int * ,int * , int );
++extern void strmov(char *, const char*);
++extern void strnmov(char *, const char*, size_t);
+ extern void flagcpy(int * , int * );
+ extern void flagncpy(int * , int * , int );
+ extern void send_function_to_child(void);
+diff --git a/src/include/open-axiom/token b/src/include/open-axiom/token
+index a586fa6d..7f379593 100644
+--- a/src/include/open-axiom/token
++++ b/src/include/open-axiom/token
+@@ -483,13 +483,15 @@ namespace OpenAxiom {
+ comment_token(t, TokenValue::Commentary);
+ pos.column = frag(pos).length();
+ break;
+- case '-':
+- if (pos.column + 1 < frag(pos).size()
+- and frag(pos)[pos.column + 1] == '>') {
++ case '-': {
++ std::size_t c = pos.column + 1;
++ if (c < frag(pos).size()
++ and frag(pos)[c] == '>') {
+ t.value = TokenValue::MapsTo;
+ pos.column += 2;
+ }
+ break;
++ }
+ default: break;
+ }
+ }
+diff --git a/src/include/spadcolors.h b/src/include/spadcolors.h
+index 63621599..a9541e73 100644
+--- a/src/include/spadcolors.h
++++ b/src/include/spadcolors.h
+@@ -50,13 +50,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #define startColor 0
+ #define endColor (startColor+numColors)
+
+-#define colorStep ((maxColors+1)/numColors)
+-
+ #define yes 1
+ #define no 0
+
+ #define smoothConst 50
++#ifndef saymem
+ #define saymem(a,b,c) saymemWithLine(a,b,c,0)
++#endif
+ #define Colorcells 256 /* KF number of elements in permutation vector */
+ /* #define shade 5 */
+ #define saturation 0.8
+@@ -76,6 +76,4 @@ extern Colormap colorMap;
+ extern int num;
+ extern int scrn;
+
+-#define maxColors DisplayCells(dsply,scrn)-1
+-
+ #endif /* OPENAXIOM_SPADCOLORS_included */
+diff --git a/src/io/InputFragment.cxx b/src/io/InputFragment.cxx
+index 595b88b1..827aa372 100644
+--- a/src/io/InputFragment.cxx
++++ b/src/io/InputFragment.cxx
+@@ -76,16 +76,18 @@ namespace OpenAxiom {
+
+ // Return true if line is entirely a positive comment, i.e. a description.
+ static bool positive_comment(const Line& line) {
+- if (line.indent + 1 >= line.length())
++ std::size_t i = line.indent + 1;
++ if (i >= line.length())
+ return false;
+- return line[line.indent] == '+' and line[line.indent + 1] == '+';
++ return line[line.indent] == '+' and line[i] == '+';
+ }
+
+ // Return true if line is entirely a negative comment.
+ static bool negative_comment(const Line& line) {
+- if (line.indent + 1 >= line.length())
++ std::size_t i = line.indent + 1;
++ if (i >= line.length())
+ return false;
+- return line[line.indent] == '-' and line[line.indent + 1] == '-';
++ return line[line.indent] == '-' and line[i] == '-';
+ }
+
+ // Clean up and dress up the line with indentation information.
+diff --git a/src/lib/cfuns-c.cxx b/src/lib/cfuns-c.cxx
+index 11c28691..5dbcd6bc 100644
+--- a/src/lib/cfuns-c.cxx
++++ b/src/lib/cfuns-c.cxx
+@@ -79,11 +79,6 @@
+ #endif
+
+ namespace OpenAxiom {
+- // Make a copy of string data on free store.
+- static char*
+- copy_c_str(const std::string& s) {
+- return strdup(s.c_str());
+- }
+
+ OPENAXIOM_C_EXPORT int
+ addtopath(char *dir)
+diff --git a/src/lib/edin.c b/src/lib/edin.c
+index f85a632a..568bb77a 100644
+--- a/src/lib/edin.c
++++ b/src/lib/edin.c
+@@ -792,6 +792,18 @@ forwardflag_cpy(int *buff1,int * buff2,int num)
+ buff1[count] = buff2[count];
+ }
+
++void
++strnmov(char *dest, const char *src, size_t n)
++{
++ while (n-- && (*dest++ = *src++));
++}
++
++void
++strmov(char *dest, const char *src)
++{
++ while ((*dest++ = *src++));
++}
++
+ void
+ flagcpy(int *s,int *t)
+ {
+diff --git a/src/lib/prt.c b/src/lib/prt.c
+index f111e2d9..ee5b3af0 100644
+--- a/src/lib/prt.c
++++ b/src/lib/prt.c
+@@ -152,7 +152,7 @@ delete_current_char(void)
+ if (buff_flag[curr_pntr] == 1 || buff_flag[curr_pntr] == 0) {
+ myputchar(_BLANK);
+ myputchar(_BKSPC);
+- strcpy(&buff[curr_pntr],
++ strmov(&buff[curr_pntr],
+ &buff[curr_pntr + 1]);
+ flagcpy(&buff_flag[curr_pntr],
+ &buff_flag[curr_pntr + 1]);
+@@ -165,7 +165,7 @@ delete_current_char(void)
+ myputchar(_BLANK);
+ myputchar(_BKSPC);
+ myputchar(_BKSPC);
+- strcpy(&buff[curr_pntr],
++ strmov(&buff[curr_pntr],
+ &buff[curr_pntr + 2]);
+ flagcpy(&buff_flag[curr_pntr],
+ &buff_flag[curr_pntr + 2]);
+@@ -380,7 +380,7 @@ back_over_current_char(void)
+ myputchar(_BLANK);
+ myputchar(_BKSPC);
+ myputchar(_BKSPC);
+- strcpy(&buff[curr_pntr - 2],
++ strmov(&buff[curr_pntr - 2],
+ &buff[curr_pntr]);
+ flagcpy(&buff_flag[curr_pntr - 2],
+ &buff_flag[curr_pntr]);
+@@ -392,7 +392,7 @@ back_over_current_char(void)
+ myputchar(_BKSPC);
+ myputchar(_BLANK);
+ myputchar(_BKSPC);
+- strcpy(&buff[curr_pntr - 1],
++ strmov(&buff[curr_pntr - 1],
+ &buff[curr_pntr]);
+ flagcpy(&buff_flag[curr_pntr - 1],
+ &buff_flag[curr_pntr]);
+diff --git a/src/lib/sockio-c.cxx b/src/lib/sockio-c.cxx
+index 24b8f475..dda95ec3 100644
+--- a/src/lib/sockio-c.cxx
++++ b/src/lib/sockio-c.cxx
+@@ -1123,7 +1123,7 @@ init_purpose_table()
+ OPENAXIOM_C_EXPORT int
+ make_server_number()
+ {
+- spad_server_number = oa_getpid();
++ spad_server_number = oa_getpid() % 1024;
+ return spad_server_number;
+ }
+
+diff --git a/src/lib/wct.c b/src/lib/wct.c
+index 35cc01e9..44510558 100644
+--- a/src/lib/wct.c
++++ b/src/lib/wct.c
+@@ -572,7 +572,7 @@ rescan_wct(void)
+ else if (new_len < old_len) {
+ /* this time I simply copy backwards and do the substituting */
+ diff = old_len - new_len;
+- strncpy(&buff[curr_pntr - diff],
++ strnmov(&buff[curr_pntr - diff],
+ &buff[curr_pntr],
+ buff_pntr - curr_pntr);
+ flagncpy(&buff_flag[curr_pntr - diff],
+diff --git a/src/rt/Lisp.cc b/src/rt/Lisp.cc
+index fae3e02f..045d087c 100644
+--- a/src/rt/Lisp.cc
++++ b/src/rt/Lisp.cc
+@@ -327,7 +327,7 @@ namespace OpenAxiom {
+ unimplemented(x);
+ if (auto op = special_operator(*s))
+ return op(ctx, x);
+- auto fun = symbol_function(ctx, *s);
++ return to_value( symbol_function(ctx, *s));
+ }
+
+ Value
+diff --git a/src/sman/session.c b/src/sman/session.c
+index e7edf001..20a29307 100644
+--- a/src/sman/session.c
++++ b/src/sman/session.c
+@@ -105,6 +105,7 @@ term_handler(int sig)
+ exit(1);
+ }
+
++#ifdef DEBUG
+ static void
+ pr()
+ {
+@@ -116,6 +117,7 @@ pr()
+ }
+ fprintf(stderr,"\n");
+ }
++#endif
+
+ static void
+ close_client(int frame)
+diff --git a/src/syntax/Parser.cxx b/src/syntax/Parser.cxx
+index ada3963b..be73b088 100644
+--- a/src/syntax/Parser.cxx
++++ b/src/syntax/Parser.cxx
+@@ -72,24 +72,6 @@ namespace {
+ TokenSequence::size_type position;
+ };
+
+- const Token* next_token(ParsingContext& ctx) {
+- while (auto t = ctx.current_token()) {
+- switch (t->category) {
+- case TokenCategory::Whitespace:
+- break;
+-
+- case TokenCategory::Comment:
+- if (t->value == TokenValue::Wisecrack)
+- break;
+-
+- default:
+- return t;
+- }
+- ctx.advance();
+- }
+- return nullptr;
+- }
+-
+ // Simple wrapper around standard file streams, along with the pathname
+ // to the file.
+ template<typename T>
+diff --git a/src/utils/command.cc b/src/utils/command.cc
+index f560f169..55716bc1 100644
+--- a/src/utils/command.cc
++++ b/src/utils/command.cc
+@@ -302,7 +302,7 @@ static void print_usage(void) {
+ print_line(" --optimize=<n> Set compiler optimization level to <n>, a natural number.");
+ print_line("");
+ print_line("If invoked without options and without an input file "
+- "OpenAxiom will start as an interative program with Superman"
++ "OpenAxiom will start as an interactive program with Superman"
+ " as the master process, the majority of uses. If invoked "
+ "with a file as single argument, OpenAxiom assumes the file is a Spad "
+ "script and will attempt to execute it as such.");
diff --git a/debian/patches/no-missing-messages.patch b/debian/patches/no-missing-messages.patch
index 38c2f9f..7752389 100644
--- a/debian/patches/no-missing-messages.patch
+++ b/debian/patches/no-missing-messages.patch
@@ -2,11 +2,11 @@ Description: suppress "program not found" messages. This programs are
in separated packages, and open-axiom recommends them.
Forwarded: not-needed
Origin: vendor
-Index: open-axiom/src/sman/sman.c
+Index: open-axiom-debian/src/sman/sman.c
===================================================================
---- open-axiom.orig/src/sman/sman.c 2013-09-01 11:22:27.000000000 +0400
-+++ open-axiom/src/sman/sman.c 2013-09-01 11:22:27.000000000 +0400
-@@ -449,7 +449,6 @@
+--- open-axiom-debian.orig/src/sman/sman.c
++++ open-axiom-debian/src/sman/sman.c
+@@ -448,7 +448,6 @@ start_the_hypertex(Command* cmd)
const char* command = oa_concatenate_string(root_dir,HypertexProgram);
if (readablep(command) != 1) {
@@ -14,7 +14,7 @@ Index: open-axiom/src/sman/sman.c
return;
}
if (PasteFile){
-@@ -479,8 +478,6 @@
+@@ -478,8 +477,6 @@ start_the_graphics(Command* cmd)
if (readablep(command) == 1)
spawn_of_hell(command, DoItAgain);
diff --git a/debian/patches/series b/debian/patches/series
index 9f66152..c80d3e0 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
no-missing-messages.patch
non-static-open-axiom-binary.patch
gui-c++20.patch
+2022.10.28.patch