pmars,pmars-x11: init at 0.9.4

This commit is contained in:
OPNA2608 2024-11-12 20:45:11 +01:00
parent 71091397cc
commit 98cf6cd0b5
4 changed files with 252 additions and 0 deletions

View File

@ -0,0 +1,92 @@
diff '--color=auto' -ruN a/src/cdb.c b/src/cdb.c
--- a/src/cdb.c 1970-01-01 01:00:01.000000000 +0100
+++ b/src/cdb.c 2024-10-08 11:28:57.892951658 +0200
@@ -1564,7 +1564,7 @@
(warriorsLeft ? warriorsLeft : 1));
substitute(buf[bi1], "CYCLE", outs, buf[bi2]);
SWITCHBI;
- sprintf(outs, "%d", round);
+ sprintf(outs, "%d", roundCounter);
substitute(buf[bi1], "ROUND", outs, buf[bi2]);
SWITCHBI;
@@ -1875,7 +1875,7 @@
#endif
int nFuture, nPast, count, taskHalf = (coreSize <= 10000 ? 7 : 5);
- sprintf(outs, roundOfCycle, round, rounds,
+ sprintf(outs, roundOfCycle, roundCounter, rounds,
(cycle + (warriorsLeft ? warriorsLeft : 1) - 1) /
(warriorsLeft ? warriorsLeft : 1));
cdb_fputs(outs, COND);
diff '--color=auto' -ruN a/src/curdisp.c b/src/curdisp.c
--- a/src/curdisp.c 1970-01-01 01:00:01.000000000 +0100
+++ b/src/curdisp.c 2024-10-08 11:29:52.129955266 +0200
@@ -156,7 +156,7 @@
wstandend(corewin);
if (!--refreshCounter) {
refreshCounter = refreshInterval;
- update_statusline(round);
+ update_statusline(roundCounter);
wrefresh(corewin);
}
}
@@ -542,7 +542,7 @@
text_display_close()
{
if (displayLevel) {
- update_statusline(round - 1);
+ update_statusline(roundCounter - 1);
wstandout(corewin);
mvwaddstr(corewin, 0, 0, pressAnyKey);
wrefresh(corewin);
diff '--color=auto' -ruN a/src/sim.c b/src/sim.c
--- a/src/sim.c 1970-01-01 01:00:01.000000000 +0100
+++ b/src/sim.c 2024-10-08 11:28:21.848284678 +0200
@@ -173,7 +173,7 @@
mem_struct FAR *memory;
long cycle;
-int round;
+int roundCounter;
char alloc_p = 0; /* indicate whether memory has been allocated */
int warriorsLeft; /* number of warriors still left in core */
@@ -328,7 +328,7 @@
#endif
display_init();
- round = 1;
+ roundCounter = 1;
do { /* each round */
#if defined(DOS16) && !defined(SERVER) && !defined(DOSTXTGRAPHX) && !defined(DOSGRXGRAPHX) && !defined(DJGPP)
fputc('\r', stdout); /* enable interruption by Ctrl-C */
@@ -1421,13 +1421,13 @@
#ifndef SERVER
if (debugState == BREAK) {
if (warriorsLeft == 1 && warriors != 1)
- sprintf(outs, warriorTerminatedEndOfRound, W - warrior, W->name, round);
+ sprintf(outs, warriorTerminatedEndOfRound, W - warrior, W->name, roundCounter);
else
- sprintf(outs, endOfRound, round);
+ sprintf(outs, endOfRound, roundCounter);
debugState = cdb(outs);
}
#endif
- } while (++round <= rounds);
+ } while (++roundCounter <= rounds);
display_close();
#ifdef PERMUTATE
diff '--color=auto' -ruN a/src/sim.h b/src/sim.h
--- a/src/sim.h 1970-01-01 01:00:01.000000000 +0100
+++ b/src/sim.h 2024-10-08 11:27:46.730634854 +0200
@@ -89,7 +89,7 @@
#define FAR
#endif
-extern int round;
+extern int roundCounter;
extern long cycle;
extern ADDR_T progCnt; /* program counter */
extern warrior_struct *W; /* indicate which warrior is running */

View File

@ -0,0 +1,52 @@
diff '--color=auto' -ruN a/src/pmars.c b/src/pmars.c
--- a/src/pmars.c 2024-11-12 20:36:28.142766807 +0100
+++ b/src/pmars.c 2024-11-12 20:39:48.096710063 +0100
@@ -72,7 +72,7 @@
#ifdef PSPACE
void pspace_init(void);
#endif
-#if defined(unix) || defined(__MSDOS__) || defined(VMS)
+#if defined(unix) || defined(__MSDOS__) || defined(VMS) || defined(__MACH__)
void sighandler(int dummy);
#endif
#if defined(CURSESGRAPHX)
@@ -87,7 +87,7 @@
#ifdef PSPACE
void pspace_init();
#endif
-#if defined(unix) || defined(__MSDOS__)
+#if defined(unix) || defined(__MSDOS__) || defined(__MACH__)
void sighandler();
#endif
#if defined(CURSESGRAPHX)
@@ -224,7 +224,7 @@
}
/* called when ctrl-c is pressed; prepares for debugger entry */
-#if defined(unix) || defined(__MSDOS__) || defined (__OS2__)
+#if defined(unix) || defined(__MSDOS__) || defined (__OS2__) || defined(__MACH__)
void
#ifdef __OS2__
_cdecl
@@ -290,7 +290,7 @@
int argc;
char **argv;
{
-#if defined(unix) && !defined(DJGPP)
+#if (defined(unix) && !defined(DJGPP)) || defined(__MACH__)
#ifdef SIGINT
signal(SIGINT, sighandler);
#endif
diff '--color=auto' -ruN a/src/xwindisp.c b/src/xwindisp.c
--- a/src/xwindisp.c 2024-11-12 20:36:28.143766827 +0100
+++ b/src/xwindisp.c 2024-11-12 20:37:39.708178145 +0100
@@ -61,6 +61,9 @@
#define YELLOW 14
#define WHITE 15
+/* defined in pmars.c */
+extern void sighandler(int dummy);
+
/* X names of the colors we allocate */
static char *xColorNames[MAXXCOLOR] = {
"black", "blue3", "green3", "cyan3",

View File

@ -0,0 +1,106 @@
{
stdenv,
lib,
fetchzip,
installShellFiles,
libX11,
ncurses,
pkg-config,
enableXwinGraphics ? false,
}:
let
options = [
"${if enableXwinGraphics then "XWIN" else "CURSES"}GRAPHX"
"EXT94"
"PERMUTATE"
"RWLIMIT"
];
pkgConfigLibs =
lib.optionals enableXwinGraphics [ "x11" ]
++ lib.optionals (!enableXwinGraphics) [ "ncurses" ];
in
stdenv.mkDerivation (finalAttrs: {
pname = "pmars";
version = "0.9.4";
src = fetchzip {
url = "http://www.koth.org/pmars/pmars-${finalAttrs.version}.zip";
hash = "sha256-68zsH9HWWp13pozjMajayS/VhY8iTosUp1CvcAmj/dE=";
};
patches = [
# Error under Clang due to global "round" variable: redefinition of 'round' as different kind of symbol
./0001-fix-round-redefinition.patch
# call to undeclared function 'sighandler' & undefined sighandler on Darwin
./0002-fix-sighandler.patch
];
postPatch = ''
substituteInPlace src/Makefile \
--replace-fail 'CC = gcc' "CC = $CC" \
--replace-fail '@strip' "@$STRIP" \
--replace-fail 'CFLAGS = -O -DEXT94 -DXWINGRAPHX -DPERMUTATE -DRWLIMIT' "CFLAGS = ${
lib.concatMapStringsSep " " (opt: "-D${opt}") options
} ${
lib.optionalString (
pkgConfigLibs != [ ]
) "$($PKG_CONFIG --cflags ${lib.strings.concatStringsSep " " pkgConfigLibs})"
}" \
--replace-fail 'LIB = -L/usr/X11R6/lib -lX11' "LIB = ${
lib.optionalString (
pkgConfigLibs != [ ]
) "$($PKG_CONFIG --libs ${lib.strings.concatStringsSep " " pkgConfigLibs})"
}"
'';
nativeBuildInputs = [ installShellFiles ] ++ lib.optionals (pkgConfigLibs != [ ]) [ pkg-config ];
buildInputs =
lib.optionals enableXwinGraphics [ libX11 ]
++ lib.optionals (!enableXwinGraphics) [ ncurses ];
preConfigure = ''
cd src
'';
hardeningDisable = [ "format" ];
enableParallelBuilding = true;
installPhase = ''
runHook preInstall
install -Dm755 pmars $out/bin/pmars
mkdir -p $out/share/pmars
cp -R -t $out/share/pmars/ ../{AUTHORS,COPYING,README,config,warriors}
installManPage ../doc/pmars.6
mkdir -p $out/share/doc/pmars
cp -t $out/share/doc/pmars/ ../doc/{primer.*,redcode.ref}
runHook postInstall
'';
passthru = {
inherit options;
};
meta = {
description = "Official Core War simulator";
longDescription = ''
Portable MARS is the official Core War simulator of the ICWS and the rec.games.corewar newsgroup. pMARS serves as
a test bed for new Redcode standards and tournament styles. It has also been used in genetic algorithm experiments
and as an assembly language teaching aid. pMARS is under active development by a group of Core War enthusiasts who
put a lot of time into this project.
'';
homepage = "http://www.koth.org/pmars/";
license = lib.licenses.gpl2Plus;
mainProgram = "pmars";
maintainers = with lib.maintainers; [ OPNA2608 ];
platforms = lib.platforms.unix;
};
})

View File

@ -16929,6 +16929,8 @@ with pkgs;
heroic = callPackage ../games/heroic/fhsenv.nix { };
pmars-x11 = pmars.override { enableXwinGraphics = true; };
wipeout-rewrite = callPackage ../games/wipeout-rewrite {
inherit (darwin.apple_sdk.frameworks) Foundation;
};