aboutsummaryrefslogtreecommitdiff
path: root/development/opencomal
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2017-12-11 20:03:09 +0000
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2017-12-16 07:32:03 +0700
commitc21cc4e428899d1db364beaff51fb26ae65d6708 (patch)
treef6997cc54b715657040594d11e56b1e114c0260c /development/opencomal
parent2f57a1d6a53e01675e43d0583001bf414b96c5a7 (diff)
development/opencomal: Added (interpreter for Comal).
Signed-off-by: David Spencer <idlemoor@slackbuilds.org>
Diffstat (limited to 'development/opencomal')
-rw-r--r--development/opencomal/README10
-rw-r--r--development/opencomal/README.beta11
-rw-r--r--development/opencomal/opencomal.SlackBuild92
-rw-r--r--development/opencomal/opencomal.info10
-rw-r--r--development/opencomal/patches/01-missing_includes.diff81
-rw-r--r--development/opencomal/patches/02-vsprintf.diff93
-rw-r--r--development/opencomal/patches/03-fix_auto_segfault.diff18
-rw-r--r--development/opencomal/patches/04-mkdir.diff12
-rw-r--r--development/opencomal/patches/05-sys_errlist.diff225
-rw-r--r--development/opencomal/patches/06-noreturn.diff24
-rw-r--r--development/opencomal/patches/README23
-rw-r--r--development/opencomal/slack-desc19
12 files changed, 618 insertions, 0 deletions
diff --git a/development/opencomal/README b/development/opencomal/README
new file mode 100644
index 000000000000..e817b8534659
--- /dev/null
+++ b/development/opencomal/README
@@ -0,0 +1,10 @@
+opencomal (interpreter for Comal programming language)
+
+OpenComal is a portable and free implementation of the Comal programming
+language written by Jos Visser. Currently supported platforms are Unix,
+MsDos and Win32. Comal is a crossover between Basic and Pascal, with
+the best features of both and none of the drawbacks of either.
+
+opencomal development stopped in January 2002. By default, this script
+builds the last stable release of opencomal. If you'd rather build
+the last beta, see README.beta.
diff --git a/development/opencomal/README.beta b/development/opencomal/README.beta
new file mode 100644
index 000000000000..2edaac5a43ca
--- /dev/null
+++ b/development/opencomal/README.beta
@@ -0,0 +1,11 @@
+By default, this script builds the last stable release of opencomal,
+0.2.6, from December 2002. It's also possible to build the last beta,
+0.2.7-pre1-work, from January 2003. To do this, download the source from:
+
+http://www.josvisser.nl/opencomal/opencomal-0.2.7-pre1-work.tar.gz
+
+The md5sum is 43b90700cec264e8da4bd728b3e70cb1.
+
+Save the file in the same directory as opencomal.SlackBuild, then run
+the script with BETA=yes set in the environment. The resulting package
+will have a version number of 0.2.7pre1 (no hyphen or -work suffix).
diff --git a/development/opencomal/opencomal.SlackBuild b/development/opencomal/opencomal.SlackBuild
new file mode 100644
index 000000000000..235d1eb5dfc0
--- /dev/null
+++ b/development/opencomal/opencomal.SlackBuild
@@ -0,0 +1,92 @@
+#!/bin/sh
+
+# Slackware build script for opencomal
+
+# Written by B. Watson (yalhcru@gmail.com)
+
+# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
+
+PRGNAM=opencomal
+VERSION=${VERSION:-0.2.6}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_SBo}
+
+if [ "${BETA:-no}" = "yes" ]; then
+ VERSION="0.2.7pre1"
+ TARVER="0.2.7-pre1-work"
+else
+ TARVER="$VERSION"
+fi
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+CWD=$(pwd)
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $PRGNAM-$TARVER
+tar xvf $CWD/$PRGNAM-$TARVER.tar.gz
+cd $PRGNAM-$TARVER
+rm -rf bin/* # do not use prebuilt binaries
+chown -R root:root .
+find . -type d -exec chmod 755 {} \+
+find . -type f -exec chmod 644 {} \+
+chmod 755 tools/*
+
+# see patches/README to find out what all these patches are for.
+for i in $CWD/patches/*.diff; do
+ echo "Applying $(basename $i)"
+ patch -p1 < $i
+done
+
+# no point building in debug symbols that we strip out afterwards.
+sed -i 's,-ggdb,,' src/Makefile
+
+# not 100% sure -j1 is needed, but this is a small program anyway.
+make -j1 -C src PROFILE="$SLKCFLAGS"
+
+# no 'make install' target.
+mkdir -p $PKG/usr/bin
+install -s -m0755 bin/* $PKG/usr/bin
+
+# don't need to install build docs.
+rm -f doc/BUILD
+
+# no man pages. neither binary takes any flags, so I don't see much point
+# in creating them.
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a doc/* samples $PKG/usr/doc/$PRGNAM-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
diff --git a/development/opencomal/opencomal.info b/development/opencomal/opencomal.info
new file mode 100644
index 000000000000..da83d4478cc7
--- /dev/null
+++ b/development/opencomal/opencomal.info
@@ -0,0 +1,10 @@
+PRGNAM="opencomal"
+VERSION="0.2.6"
+HOMEPAGE="http://www.josvisser.nl/opencomal/"
+DOWNLOAD="http://www.josvisser.nl/opencomal/opencomal-0.2.6.tar.gz"
+MD5SUM="5d87ef48af35320f84a61a591a1b58ed"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES=""
+MAINTAINER="B. Watson"
+EMAIL="yalhcru@gmail.com"
diff --git a/development/opencomal/patches/01-missing_includes.diff b/development/opencomal/patches/01-missing_includes.diff
new file mode 100644
index 000000000000..618623e373c0
--- /dev/null
+++ b/development/opencomal/patches/01-missing_includes.diff
@@ -0,0 +1,81 @@
+diff -Naur opencomal-0.2.6/src/pdccmd.c opencomal-0.2.6.patched/src/pdccmd.c
+--- opencomal-0.2.6/src/pdccmd.c 2002-09-22 13:36:49.000000000 -0400
++++ opencomal-0.2.6.patched/src/pdccmd.c 2017-12-10 16:51:45.087203071 -0500
+@@ -22,6 +22,7 @@
+ #include "pdcsqash.h"
+ #include "pdcenv.h"
+
++#include <string.h>
+
+ PRIVATE void cmd_list_horse(struct string *filename, long from, long to)
+ {
+diff -Naur opencomal-0.2.6/src/pdcenv.c opencomal-0.2.6.patched/src/pdcenv.c
+--- opencomal-0.2.6/src/pdcenv.c 2002-09-17 12:20:06.000000000 -0400
++++ opencomal-0.2.6.patched/src/pdcenv.c 2017-12-10 16:52:01.592203099 -0500
+@@ -16,6 +16,8 @@
+ #include "pdcseg.h"
+ #include "pdcid.h"
+
++#include <string.h>
++
+ PUBLIC struct comal_env *env_new(char *name)
+ {
+ struct comal_env *work = GETCORE(MISC_POOL, struct comal_env);
+diff -Naur opencomal-0.2.6/src/pdcexp.c opencomal-0.2.6.patched/src/pdcexp.c
+--- opencomal-0.2.6/src/pdcexp.c 2002-12-06 06:02:35.000000000 -0500
++++ opencomal-0.2.6.patched/src/pdcexp.c 2017-12-10 16:52:33.823203154 -0500
+@@ -20,7 +20,7 @@
+ #include "pdcstr.h"
+ #include "pdcval.h"
+
+-
++#include <string.h>
+ #include <math.h>
+
+ #ifdef HAS_ROUND
+diff -Naur opencomal-0.2.6/src/pdcext.c opencomal-0.2.6.patched/src/pdcext.c
+--- opencomal-0.2.6/src/pdcext.c 2002-12-05 02:17:02.000000000 -0500
++++ opencomal-0.2.6.patched/src/pdcext.c 2017-12-10 16:53:06.231203208 -0500
+@@ -18,6 +18,8 @@
+ #include "pdcval.h"
+ #include "version.h"
+
++#include <string.h>
++
+ struct inpfile_stkent {
+ struct inpfile_stkent *next;
+ FILE *inpfile;
+diff -Naur opencomal-0.2.6/src/pdclist.c opencomal-0.2.6.patched/src/pdclist.c
+--- opencomal-0.2.6/src/pdclist.c 2002-11-30 09:39:49.000000000 -0500
++++ opencomal-0.2.6.patched/src/pdclist.c 2017-12-10 16:52:20.328203131 -0500
+@@ -15,6 +15,8 @@
+ #include "pdcparss.h"
+ #include "pdcmisc.h"
+
++#include <string.h>
++
+ PUBLIC int show_exec = 0;
+
+ PRIVATE void list_horse();
+diff -Naur opencomal-0.2.6/src/pdcmisc.c opencomal-0.2.6.patched/src/pdcmisc.c
+--- opencomal-0.2.6/src/pdcmisc.c 2002-12-06 05:58:13.000000000 -0500
++++ opencomal-0.2.6.patched/src/pdcmisc.c 2017-12-10 16:51:25.608203038 -0500
+@@ -18,6 +18,7 @@
+ #include "pdcexec.h"
+ #include "pdclist.h"
+
++#include <string.h>
+ #include <math.h>
+ #include <fcntl.h>
+
+diff -Naur opencomal-0.2.6/src/pdcsqash.c opencomal-0.2.6.patched/src/pdcsqash.c
+--- opencomal-0.2.6/src/pdcsqash.c 2002-11-30 09:40:16.000000000 -0500
++++ opencomal-0.2.6.patched/src/pdcsqash.c 2017-12-10 16:52:52.257203185 -0500
+@@ -17,6 +17,7 @@
+ #include "pdcexec.h"
+ #include <fcntl.h>
+ #include <sys/stat.h>
++#include <string.h>
+
+ PRIVATE void sqash_exp();
+ PRIVATE void sqash_horse();
diff --git a/development/opencomal/patches/02-vsprintf.diff b/development/opencomal/patches/02-vsprintf.diff
new file mode 100644
index 000000000000..4f254064ddc9
--- /dev/null
+++ b/development/opencomal/patches/02-vsprintf.diff
@@ -0,0 +1,93 @@
+diff -Naur opencomal-0.2.6/src/pdcexec.c opencomal-0.2.6.patched/src/pdcexec.c
+--- opencomal-0.2.6/src/pdcexec.c 2002-11-30 09:58:16.000000000 -0500
++++ opencomal-0.2.6.patched/src/pdcexec.c 2017-12-10 17:29:51.489206949 -0500
+@@ -25,6 +25,7 @@
+ #include "pdcexec.h"
+ #include "pdcdsys.h"
+
++#include <stdarg.h>
+ #include <fcntl.h>
+ #include <string.h>
+ #include <sys/stat.h>
+@@ -42,10 +43,13 @@
+
+ PUBLIC void run_error(int error, char *s, ...)
+ {
++ va_list ap;
+ char *buf;
+ char buf2[MAX_LINELEN];
+
+- vsprintf(buf2, s, (char *) &s + sizeof(s));
++ va_start(ap, s);
++ vsprintf(buf2, s, ap);
++ va_end(ap);
+
+ curenv->error = curenv->lasterr = error;
+ mem_free(curenv->lasterrmsg);
+diff -Naur opencomal-0.2.6/src/pdcmisc.c opencomal-0.2.6.patched/src/pdcmisc.c
+--- opencomal-0.2.6/src/pdcmisc.c 2017-12-10 17:23:13.344206273 -0500
++++ opencomal-0.2.6.patched/src/pdcmisc.c 2017-12-10 17:24:52.465206441 -0500
+@@ -18,6 +18,7 @@
+ #include "pdcexec.h"
+ #include "pdclist.h"
+
++#include <stdarg.h>
+ #include <string.h>
+ #include <math.h>
+ #include <fcntl.h>
+@@ -58,9 +59,12 @@
+
+ PUBLIC void my_printf(int stream, int newline, char *s, ...)
+ {
++ va_list ap;
+ char buf[MAX_LINELEN];
+
+- vsprintf(buf, s, (char *) &s + sizeof(s));
++ va_start(ap, s);
++ vsprintf(buf, s, ap);
++ va_end(ap);
+ my_put(stream, buf, -1L);
+
+ if (newline)
+@@ -70,9 +74,12 @@
+
+ PUBLIC void fatal(char *s, ...)
+ {
++ va_list ap;
+ char buf[140];
+
+- vsprintf(buf, s, (char *) &s + sizeof(s));
++ va_start(ap, s);
++ vsprintf(buf, s, ap);
++ va_end(ap);
+ my_printf(MSG_ERROR, 1, "FATAL error: %s", buf);
+
+ longjmp(RESTART, ERR_FATAL);
+diff -Naur opencomal-0.2.6/src/pdcparss.c opencomal-0.2.6.patched/src/pdcparss.c
+--- opencomal-0.2.6/src/pdcparss.c 2002-11-30 03:22:16.000000000 -0500
++++ opencomal-0.2.6.patched/src/pdcparss.c 2017-12-10 17:29:21.935206898 -0500
+@@ -16,6 +16,8 @@
+ #include "pdcstr.h"
+ #include "pdcparss.h"
+
++#include <stdarg.h>
++
+ PRIVATE int pars_error_happened = 0;
+ PRIVATE char pars_errtxt[MAX_LINELEN];
+
+@@ -282,11 +284,14 @@
+
+ PUBLIC void pars_error(char *s, ...)
+ {
++ va_list ap;
+ if (pars_error_happened)
+ return;
+
+ pars_error_happened = lex_pos();
+- vsprintf(pars_errtxt, s, (char *) &s + sizeof(s));
++ va_start(ap, s);
++ vsprintf(pars_errtxt, s, ap);
++ va_end(ap);
+ }
+
+
diff --git a/development/opencomal/patches/03-fix_auto_segfault.diff b/development/opencomal/patches/03-fix_auto_segfault.diff
new file mode 100644
index 000000000000..2a07685e2bab
--- /dev/null
+++ b/development/opencomal/patches/03-fix_auto_segfault.diff
@@ -0,0 +1,18 @@
+diff -Naur opencomal-0.2.6/src/pdccmd.c opencomal-0.2.6.patched/src/pdccmd.c
+--- opencomal-0.2.6/src/pdccmd.c 2017-12-10 17:36:56.144207669 -0500
++++ opencomal-0.2.6.patched/src/pdccmd.c 2017-12-10 17:37:14.539207700 -0500
+@@ -260,9 +260,11 @@
+
+ aline = crunch_line(buf);
+
+- direct_cmd = !aline->ld;
+- result = process_comal_line(aline);
+- nr += step;
++ if(aline) {
++ direct_cmd = !aline->ld;
++ result = process_comal_line(aline);
++ nr += step;
++ }
+ }
+
+ return result;
diff --git a/development/opencomal/patches/04-mkdir.diff b/development/opencomal/patches/04-mkdir.diff
new file mode 100644
index 000000000000..47e94354f9f9
--- /dev/null
+++ b/development/opencomal/patches/04-mkdir.diff
@@ -0,0 +1,12 @@
+diff -Naur opencomal-0.2.6/src/pdclinux.c opencomal-0.2.6.patched/src/pdclinux.c
+--- opencomal-0.2.6/src/pdclinux.c 2002-11-30 03:40:20.000000000 -0500
++++ opencomal-0.2.6.patched/src/pdclinux.c 2017-12-10 17:48:17.357208824 -0500
+@@ -486,7 +486,7 @@
+
+ PUBLIC void sys_mkdir(char *dir)
+ {
+- if (!mkdir(dir,0777)<0)
++ if (mkdir(dir,0777)<0)
+ run_error(DIR_ERR,strerror(errno));
+ }
+
diff --git a/development/opencomal/patches/05-sys_errlist.diff b/development/opencomal/patches/05-sys_errlist.diff
new file mode 100644
index 000000000000..7bf3794e0f52
--- /dev/null
+++ b/development/opencomal/patches/05-sys_errlist.diff
@@ -0,0 +1,225 @@
+diff -Naur opencomal-0.2.6/src/pdccmd.c opencomal-0.2.6.patched/src/pdccmd.c
+--- opencomal-0.2.6/src/pdccmd.c 2017-12-10 17:36:56.144207669 -0500
++++ opencomal-0.2.6.patched/src/pdccmd.c 2017-12-10 17:52:49.942209286 -0500
+@@ -36,7 +36,7 @@
+
+ if (!listfile)
+ run_error(OPEN_ERR, "File open error %s",
+- sys_errlist[errno]);
++ strerror(errno));
+
+ setvbuf(listfile, NULL, _IOFBF, TEXT_BUFSIZE);
+ } else {
+@@ -126,7 +126,7 @@
+
+ if (!yyenter)
+ run_error(OPEN_ERR, "File open error: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+
+ setvbuf(yyenter, NULL, _IOFBF, TEXT_BUFSIZE);
+ ++entering;
+@@ -138,7 +138,7 @@
+ if (!feof(yyenter))
+ run_error(CMD_ERR,
+ "Error when reading ENTER file: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+ } else {
+ aline = crunch_line(tline);
+
+diff -Naur opencomal-0.2.6/src/pdcexec.c opencomal-0.2.6.patched/src/pdcexec.c
+--- opencomal-0.2.6/src/pdcexec.c 2017-12-10 17:37:01.335207678 -0500
++++ opencomal-0.2.6.patched/src/pdcexec.c 2017-12-10 17:53:27.853209351 -0500
+@@ -1218,7 +1218,7 @@
+ frec->hfno = open(name->s, flags | O_BINARY, S_IREAD | S_IWRITE);
+
+ if (frec->hfno == -1)
+- run_error(OPEN_ERR, "OPEN error: %s", sys_errlist[errno]);
++ run_error(OPEN_ERR, "OPEN error: %s", strerror(errno));
+
+ frec->next = curenv->fileroot;
+ curenv->fileroot = frec;
+@@ -1244,7 +1244,7 @@
+ if (close(walk->hfno) == -1)
+ run_error(CLOSE_ERR,
+ "Close error on file %ld: %s",
+- walk->cfno, sys_errlist[errno]);
++ walk->cfno, strerror(errno));
+
+ walk = mem_free(walk);
+ }
+@@ -1268,7 +1268,7 @@
+ if (close(walk->hfno) == -1)
+ run_error(CLOSE_ERR,
+ "CLOSE error on file %ld: %s",
+- walk->cfno, sys_errlist[errno]);
++ walk->cfno, strerror(errno));
+ else {
+ if (last)
+ last->next = walk->next;
+@@ -1314,7 +1314,7 @@
+ -1)
+ run_error(POS_ERR,
+ "Random file positioning error: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+ }
+
+ return f;
+@@ -1391,7 +1391,7 @@
+
+ if (r < 0)
+ run_error(READ_ERR, "INPUT/READ file error: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+ }
+
+
+@@ -1534,7 +1534,7 @@
+
+ if (w < 0)
+ run_error(WRITE_ERR, "File write error: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+ }
+
+
+@@ -1703,7 +1703,7 @@
+ if (fclose(*f))
+ run_error(SELECT_ERR,
+ "Error when closing current SELECT file: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+
+ calc_exp(exp, (void **) &result, &type);
+
+@@ -1715,7 +1715,7 @@
+ if (!*f)
+ run_error(SELECT_ERR,
+ "Error when opening new SELECT file: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+ }
+
+ mem_free(result);
+diff -Naur opencomal-0.2.6/src/pdcexp.c opencomal-0.2.6.patched/src/pdcexp.c
+--- opencomal-0.2.6/src/pdcexp.c 2017-12-10 17:36:56.144207669 -0500
++++ opencomal-0.2.6.patched/src/pdcexp.c 2017-12-10 17:54:02.343209409 -0500
+@@ -220,7 +220,7 @@
+
+ if (result == -1)
+ run_error(EOF_ERR, "Error when checking for EOF: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+
+ return result;
+ }
+diff -Naur opencomal-0.2.6/src/pdcext.c opencomal-0.2.6.patched/src/pdcext.c
+--- opencomal-0.2.6/src/pdcext.c 2017-12-10 17:36:56.144207669 -0500
++++ opencomal-0.2.6.patched/src/pdcext.c 2017-12-10 17:54:53.239209496 -0500
+@@ -248,7 +248,7 @@
+ pop_inpfile();
+ run_error(SYS_ERR,
+ "Error opening sysin: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+ }
+ }
+
+@@ -280,7 +280,7 @@
+
+ if (!sys_outfile && name->s[0])
+ run_error(SYS_ERR, "Error opening sysout: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+
+ return 0;
+ } else if (strcmp(cmd, "memdump") == 0) {
+@@ -323,7 +323,7 @@
+
+ if (!eof)
+ run_error(SYS_ERR, "Error reading sysin: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+
+ return ext_get(stream, line, maxlen, prompt);
+ }
+diff -Naur opencomal-0.2.6/src/pdcmisc.c opencomal-0.2.6.patched/src/pdcmisc.c
+--- opencomal-0.2.6/src/pdcmisc.c 2017-12-10 17:37:01.335207678 -0500
++++ opencomal-0.2.6.patched/src/pdcmisc.c 2017-12-10 17:50:59.802209100 -0500
+@@ -39,7 +39,7 @@
+ if (fputc('\n', sel_outfile) == EOF)
+ run_error(SELECT_ERR,
+ "Error when writing to SELECT OUTPUT file %s",
+- sys_errlist[errno]);
++ strerror(errno));
+ } else
+ sys_nl(stream);
+ }
+@@ -51,7 +51,7 @@
+ if (fputs(buf, sel_outfile) == EOF)
+ run_error(SELECT_ERR,
+ "Error when writing to SELECT OUTPUT file %s",
+- sys_errlist[errno]);
++ strerror(errno));
+ } else
+ sys_put(stream, buf, len);
+ }
+diff -Naur opencomal-0.2.6/src/pdcsqash.c opencomal-0.2.6.patched/src/pdcsqash.c
+--- opencomal-0.2.6/src/pdcsqash.c 2017-12-10 17:36:56.145207669 -0500
++++ opencomal-0.2.6.patched/src/pdcsqash.c 2017-12-10 17:54:58.873209505 -0500
+@@ -39,7 +39,7 @@
+ close(sqash_file);
+ run_error(SQASH_ERR,
+ "Error when writing to file: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+ }
+
+ sqash_i = 0;
+@@ -543,7 +543,7 @@
+
+ if (sqash_file < 0)
+ run_error(OPEN_ERR, "File open error: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+
+ sqash_buf = mem_alloc(MISC_POOL, SQASH_BUFSIZE);
+ sqash_i = 0;
+@@ -568,7 +568,7 @@
+
+ if (close(sqash_file) < 0)
+ run_error(CLOSE_ERR, "Error closing file: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+ }
+
+
+@@ -583,7 +583,7 @@
+ if (sqash_hwm < 0) {
+ close(sqash_file);
+ run_error(SQASH_ERR, "Error when reading from file: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+ }
+
+ sqash_i = 0;
+@@ -1276,7 +1276,7 @@
+
+ if (sqash_file < 0)
+ run_error(OPEN_ERR, "File open error: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+
+ sqash_buf = mem_alloc(MISC_POOL, SQASH_BUFSIZE);
+ sqash_i = MAXUNSIGNED;
+@@ -1332,7 +1332,7 @@
+
+ if (close(sqash_file) < 0)
+ run_error(CLOSE_ERR, "Error closing file: %s",
+- sys_errlist[errno]);
++ strerror(errno));
+
+ return root;
+ }
diff --git a/development/opencomal/patches/06-noreturn.diff b/development/opencomal/patches/06-noreturn.diff
new file mode 100644
index 000000000000..a64537df5a7d
--- /dev/null
+++ b/development/opencomal/patches/06-noreturn.diff
@@ -0,0 +1,24 @@
+diff -Naur opencomal-0.2.6/src/pdcexec.h opencomal-0.2.6.patched/src/pdcexec.h
+--- opencomal-0.2.6/src/pdcexec.h 2002-09-17 12:20:06.000000000 -0400
++++ opencomal-0.2.6.patched/src/pdcexec.h 2017-12-10 18:11:31.222211188 -0500
+@@ -10,7 +10,7 @@
+
+ /* Line execution routines header file */
+
+-extern void run_error(int error, char *s, ...);
++extern void run_error(int error, char *s, ...) __attribute__((noreturn));
+ extern void exec_call(struct expression *exp, int calltype, void **result,
+ enum VAL_TYPE *type);
+ extern int exec_trap(struct comal_line *line);
+diff -Naur opencomal-0.2.6/src/pdcmisc.h opencomal-0.2.6.patched/src/pdcmisc.h
+--- opencomal-0.2.6/src/pdcmisc.h 2002-12-06 05:31:50.000000000 -0500
++++ opencomal-0.2.6.patched/src/pdcmisc.h 2017-12-10 18:06:37.942210691 -0500
+@@ -13,7 +13,7 @@
+ extern void my_nl(int stream);
+ extern void my_put(int stream, char *buf, long len);
+ extern void my_printf(int stream, int newline, char *s, ...);
+-extern void fatal(char *s, ...);
++extern void fatal(char *s, ...) __attribute__((noreturn));
+ extern void *my_reverse(void *root);
+ extern void free_list(struct my_list *root);
+ extern int exp_list_of_nums(struct exp_list *root);
diff --git a/development/opencomal/patches/README b/development/opencomal/patches/README
new file mode 100644
index 000000000000..834168aa3836
--- /dev/null
+++ b/development/opencomal/patches/README
@@ -0,0 +1,23 @@
+opencomal needed a lot of patching to get it building & running on modern
+Slackware. All these patches are by the SlackBuild author.
+
+01-missing_includes.diff
+ #include <string.h>
+
+02-vsprintf.diff
+ bizarre non-standards-compliant handling of vsprintf() causes immediate
+ segfault on startup, when it tries to print the banner.
+
+03-fix_auto_segfault.diff
+ missing NULL check, causes segfault in 'auto' mode when a syntax error
+ is entered, followed by ^C.
+
+04-mkdir.diff
+ fix the mkdir command so it actually reports errors.
+
+05-sys_errlist.diff
+ fix deprecation warning.
+
+06-noreturn.diff
+ squelch a bunch of spurious 'might be used uninitialized' warnings.
+ there are still a couple left, caveat emptor...
diff --git a/development/opencomal/slack-desc b/development/opencomal/slack-desc
new file mode 100644
index 000000000000..134b35a75a9f
--- /dev/null
+++ b/development/opencomal/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+opencomal: opencomal (interpreter for Comal programming language)
+opencomal:
+opencomal: OpenComal is a portable and free implementation of the Comal
+opencomal: programming language written by Jos Visser. Currently supported
+opencomal: platforms are Unix, MsDos and Win32. Comal is a crossover between
+opencomal: Basic and Pascal, with the best features of both and none of the
+opencomal: drawbacks of either.
+opencomal:
+opencomal:
+opencomal:
+opencomal: