diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..30501bd --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/zork-1.0.2.tar.gz +/zork-1.0.3.tar.gz +/zork-1.1.0.tar.gz diff --git a/README.md b/README.md new file mode 100644 index 0000000..99a421f --- /dev/null +++ b/README.md @@ -0,0 +1,133 @@ +``` +Welcome to Dungeon. This version created 11-MAR-91. +You are in an open field west of a big white house with a boarded front door. +There is a small mailbox here. +> +``` + +# DUNGEON (AKA Zork) + +**Public Domain Source Code for the Mainframe Game "Dungeon"** + +This repository contains the Public Domain source code for *Dungeon*, the mainframe version of the game that served as the precursor to Infocom's commercial *Zork* trilogy. +This codebase is a C port derived from the FORTRAN source of **Zork 2.6**. + + +## Installation + +### Fedora Linux + +This package is available in the official Fedora Linux repositories. +You can install it directly via the command-line: + +```bash +sudo dnf install zork +``` + +### Building from Source + +To build the game from the source files in this repository: + +```bash +make +``` + + +## Modern Maintainership & Philosophy (2013-12 to present) + +**Current Maintainers:** + +* Shane Thomas ([@devshane](https://github.com/devshane)) +* Jan Drögehoff ([@Jan200101](https://github.com/Jan200101)) +* Justin Wheeler ([@justwheel](https://github.com/justwheel)) + +**Project Philosophy:** + +This project utilizes the FORTRAN source of *Dungeon* (Zork 2.6) as its foundation. +The primary design goal is code preservation. +We aim to maintain the logic and behavior of the game as accurately as possible while updating the codebase to compile and run on modern C compilers and operating systems. + + +## History of the Implementation + +This version of *Dungeon* has been modified from FORTRAN to C. +The historical lineage of this code is as follows: + +1. **Original Development (MDL)**: + The original game (initially titled *Zork*) was written in the MDL programming language (MUDDLE) at the MIT Laboratory for Computer Science. +2. **PDP-11 Translation (FORTRAN)**: + Bob Supnik translated the MDL source into DEC FORTRAN for the PDP-11, renaming the game *Dungeon*. +3. **UNIX Port (f77)**: + The FORTRAN version was subsequently ported to `f77` for UNIX systems. +4. **C Translation**: + The C translation was generated from the `f77` version using `f2c`. + `f2c` is a FORTRAN-to-C translator written by David Gay (AT&T Bell Labs), Stu Feldman (Bellcore), Mark Maimone (Carnegie-Mellon University), and Norm Schryer (AT&T Bell Labs). + +*Note on Zork I:* +While often conflated, *Dungeon* differs from *Zork I*. +*Zork I* is a microcomputer adaptation comprising approximately one-third of the original mainframe game's map and puzzles. +*Dungeon* represents the more complete, albeit earlier, mainframe experience. + +### I. From original game documentation + +To: Dungeon Players +From: "The Translator" +Subj: Game Information +Date: 8-OCT-80 + + +This is the first (and last) source release of the PDP-11 version of +Dungeon. + +Please note that Dungeon has been superceded by the game ZORK(tm). +The following is an extract from the new product announcement for +ZORK in the September, 1980 issue of the RT-11 SIG newsletter: + + "'ZORK: The Great Underground Empire - Part I' ...was developed + by the original authors based on their ZORK (Dungeon) game for + the PDP-10. It features a greatly improved parser; command + input and transcript output files; SAVEs to any device and + file name; and adaptation to different terminal types, + including a status line on VT100s. Note: this is not the + FORTRAN version that has been available through DECUS. This + version has been completely rewritten to run efficiently on + small machines - up to 10 times as fast as the DECUS version. + + ...ZORK runs under RT-ll, HT-ll, or RSTS/E and requires as + little as 20K words of memory and a single floppy disk drive. + The game package, consisting of an RX01-format diskette and + an instruction booklet, is available from Infocom, Inc., + P.O. Box 120, Kendall Station, Cambridge, Ma. 02142." + +ZORK(tm) is a trademark of Infocom, Inc. It is available for several +popular personal computers as well as for the PDP-ll. + +### II. DEC FORTRAN to f77 Conversion (1981-11-17) + +The conversion from DEC FORTRAN to Unix f77 was done by **Randy Dietrich, Lynn Cochran and Sig Peterson**. +Much hacking was done to get it to fit in the limited address space of a PDP-11/44 (split I/D). +Suffice it to say that by leaving out the debugging package and not linking in the f77 i/o library, they managed to get it to run. + +### III. PDP to VAX (1985-12) + +Based on the work of Randy, Lynn and Sig, **Bill Randle** folded in the full save/restore functions and the game debugging package (gdt) into the PDP version to create a Vax/Unix version. +This version also uses f77 i/o, thus eliminating the extra speak and listen processes needed on the PDP. + +### IV. Cleanup I (1986-12-11) + +**John Gilmore** (hoptoad!gnu) cleaned up the source files by moving most of the common declarations into include files and added comments from the original (_FORTRAN or MDL?_) source. +His efforts are greatly appreciated. + +### V. Cleanup II (1987-02-09) + +**Bill Randle** added the PDP dependencies back into the Vax source files with `#ifdef`s in order to have just one set of sources. +Previously, there were two sets of source: one for the PDP and one for the Vax. +In addition, a shell escape of the form `!cmd` was added and the wizard can enter the gdt without having to recompile the source. +Finally, a man page was generated, based on the `dungeon.doc` file. + +### VI. f77 to C (1991-03-11) + +**Ian Lance Taylor** used the `f2c` translator to generate C source code. +The resulting code was modified to remove the FORTRAN I/O library, to add simple more processing, and to change the format of the database file. +**Andre Srinivasan** helped test it. +**Jonathan Mark** made it work under MS-DOS and Microsoft C. diff --git a/dead.package b/dead.package deleted file mode 100644 index a72aec0..0000000 --- a/dead.package +++ /dev/null @@ -1 +0,0 @@ -epel8-playground decommissioned : https://pagure.io/epel/issue/136 diff --git a/sources b/sources new file mode 100644 index 0000000..61464b3 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (zork-1.1.0.tar.gz) = e72082b4e2e3ff8a68588ce19409fa132921e16e4d15cfef84c9471b3ac989a4d1c251bf2518ddfa7770b803b7dfc40c264377d5a1310688551413b73471cb3d diff --git a/zork-tweak-makefile.patch b/zork-tweak-makefile.patch new file mode 100644 index 0000000..6ed401d --- /dev/null +++ b/zork-tweak-makefile.patch @@ -0,0 +1,53 @@ +From ce241188ca387a42c3ab09454c881acfe30c955e Mon Sep 17 00:00:00 2001 +From: "Justin Wheeler" +Date: Tue, 30 Apr 2019 15:36:07 -0400 +Subject: [PATCH 1/1] Makefile: Change compile options for Fedora RPM package + +--- + Makefile | 6 +++--- + dinit.c | 2 +- + 2 files changed, 4 insertions(+), 4 deletions(-) + +--- a/Makefile ++++ b/Makefile +@@ -42,7 +42,7 @@ + # Uncomment the following line if you want to have access to the game + # debugging tool. This is invoked by typing "gdt". It is not much + # use except for debugging. +-GDTFLAG = -DALLOW_GDT ++# GDTFLAG = -DALLOW_GDT + + # Compilation flags + CFLAGS = -g #-static +@@ -70,7 +70,7 @@ + $(CC) $(CFLAGS) -o zork $(OBJS) $(LDFLAGS) $(LIBS) + + install: zork dtextc.dat +- mkdir -p $(BINDIR) $(LIBDIR) $(MANDIR)/man6 ++ mkdir -p $(BINDIR) $(DATADIR) $(LIBDIR) $(MANDIR)/man6 + cp zork $(BINDIR) + cp dtextc.dat $(DATADIR) + cp dungeon.6 $(MANDIR)/man6/ +@@ -94,7 +94,7 @@ + $(CC) $(CFLAGS) $(GDTFLAG) -c local.c + + supp.o: supp.c funcs.h vars.h +- $(CC) $(CFLAGS) $(TERMFLAG) -c supp.c ++ $(CC) $(CFLAGS) $(TERMFLAG) -c supp.c + + actors.o: funcs.h vars.h + ballop.o: funcs.h vars.h +--- a/dinit.c ++++ b/dinit.c +@@ -24,7 +24,7 @@ + #define TEXTFILE "lib:dtextc.dat" + #else /* ! __AMOS__ */ + #ifdef unix +-#define TEXTFILE "/usr/games/lib/dunlib/dtextc.dat" ++#define TEXTFILE "/usr/share/zork/dtextc.dat" + #else /* ! unix */ + I need a definition for TEXTFILE + #endif /* ! unix */ +-- +2.20.1 + diff --git a/zork.spec b/zork.spec new file mode 100644 index 0000000..ae81461 --- /dev/null +++ b/zork.spec @@ -0,0 +1,116 @@ +Name: zork +Version: 1.1.0 +Release: %autorelease +Summary: Public Domain original DUNGEON game (AKA, Zork) + +License: LicenseRef-Fedora-Public-Domain +URL: https://github.com/devshane/zork +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +Patch0: zork-tweak-makefile.patch + +BuildRequires: gcc +BuildRequires: make +BuildRequires: ncurses-devel + + +%description +Public Domain Source Code for the Mainframe Game "Dungeon". This repository contains the Public Domain source code for +Dungeon, the mainframe version of the game that served as the precursor to Infocom's commercial Zork trilogy. This +codebase is a C port derived from the FORTRAN source of Zork 2.6. + + +%prep +%autosetup + +%build +%make_build \ + CFLAGS="%{optflags} -std=c17" \ + DATADIR="%{_datadir}/%{name}" \ + LDFLAGS="%{__global_ldflags}" + +%install +%make_install \ + BINDIR="%{buildroot}%{_bindir}" \ + DATADIR="%{buildroot}%{_datadir}/%{name}/" \ + LIBDIR="%{buildroot}%{_datadir}" \ + MANDIR="%{buildroot}%{_mandir}" +echo ".so dungeon.6" > %{buildroot}%{_mandir}/man6/zork.6 + + +%files +%doc history +%doc README.md +%license readme.txt +%{_bindir}/%{name} +%{_datadir}/%{name}/dtextc.dat +%{_mandir}/man6/dungeon.6.gz +%{_mandir}/man6/zork.6* + + +%changelog +* Tue Jun 30 2026 Justin Wheeler - 1.1.0-1 +- Update to v1.1.0 +- Upstream bug fixes: out-of-bounds array access, missing unistd.h header, + localtime prototype, curses header preprocessor guard +- Upstream build improvements: LDFLAGS support in Makefile +- Migrate to %%autorelease +- Remove unnecessary %%global _hardened_build 1 (default since F23) + +* Sun Feb 22 2026 Justin Wheeler - 1.0.3-12 +- Fix FTBFS. Thanks @limb for the hotfix. +- Upstream work ongoing for improved support with newer versions of the C programming language and compilers. + +* Sat Jan 17 2026 Fedora Release Engineering - 1.0.3-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Fri Jul 25 2025 Fedora Release Engineering - 1.0.3-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Sun Jan 19 2025 Fedora Release Engineering - 1.0.3-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Sat Jul 20 2024 Fedora Release Engineering - 1.0.3-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Sat Jan 27 2024 Fedora Release Engineering - 1.0.3-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jul 22 2023 Fedora Release Engineering - 1.0.3-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Sat Jan 21 2023 Fedora Release Engineering - 1.0.3-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sat Jul 23 2022 Fedora Release Engineering - 1.0.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Sat Jan 22 2022 Fedora Release Engineering - 1.0.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Fri Jul 23 2021 Fedora Release Engineering - 1.0.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Mar 02 2021 Justin Wheeler - 1.0.3-1 +- Fix reused integers from being optimized out. +- Props to Jan Drögehoff (FAS: sentry) for sending this fix upstream to avoid carrying a Fedora-specific patch. +- Remove grues. + +* Wed Feb 17 2021 Justin Wheeler - 1.0.2-6 +- Remove compiler optimization flag to workaround segfault while upstream change is assessed + +* Thu Jan 28 2021 Fedora Release Engineering - 1.0.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jul 29 2020 Fedora Release Engineering - 1.0.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Mar 03 2020 Justin Wheeler - 1.0.2-3 +- Add manpage alias for zork, to match binary executable +- Add upstream 'history' file as a doc + +* Tue Apr 30 2019 Justin Wheeler - 1.0.2-2 +- Use Fedora CFLAGS during compilation + +* Mon Apr 29 2019 Justin Wheeler - 1.0.2-1 +- First zork package