JFunge
A standard-conforming Funge-98 interpreter.
Usage
usage: jfunge [--env] [-f <file> | --help | --license | --version] [-i <file>]
[--maxiter <iterations>] [-o <file>] [--perl] [--sock] [--syscall] [-t]
[--trefunge]
JFunge, a Funge98 interpeter for java.
--env Allows the interpreter to access the environment
variables of the host system.
-f,--file <file> The file to load into the interpreter at the origin
on startup.
--help Displays this help page
-i,--readperm <file> Enables read access to the specified file or
directory (i instruction). Specify / to allow read
access to every file on the system (dangerous). Can
specify multiple files/folders.
--license Prints the license of the program.
--maxiter <iterations> The maximum number of iterations the program can
run for. Anything less than 1 will run until the
program terminates by itself. Default is unlimited.
-o,--writeperm <file> Enables write access to the specified file or
directory (o instruction). Specify / to allow write
access to every file on the system (dangerous). Can
specify multiple files/folders.
--perl Enable the PERL fingerprint. This requires the
working directory of the interpreter to be
writable, and is also an arbitrary code execution
risk.
--sock Enable the SOCK and SCKE fingerprints. This allows
the program to open a socket and listen for
connections, as well as connect to external hosts.
This is a very dangerous permission to grant, it
can potentially allow remote code execution.
--syscall Enables the syscall feature (= instruction). This
is a very dangerous permission to grant, it can
call any arbitrary program on your system.
-t,--concurrent Enables the Concurrent Funge extension (t
instruction). Buggy programs can potentially
forkbomb the interpreter.
--trefunge Enable 3D (Trefunge) mode. By default, the
interpreter emulates 2D Befunge for compatibility.
--version Prints the current program version, along with the
handprint and version given by befunge's y
instruction.
Compatibility
The interpreter's handprint is 0x74708578
("JFUN")
The version number given to befunge is major * 256 * 256 + minor * 256 + patch
, where major, minor, patch are the 3
primary version numbers in the standard semver format.
The interpreter supports the following Funge-98 specification extensions:
- The entire Befunge base syntax (tested against Mycology and Mycorand)
- Buffered IO
- File IO with
i
ando
- System calls with
=
(paradigm 1,system()
-like) - Concurrency (pseudo-multithreading) with
t
- Optional Trefunge mode (experimental)
Additionally, the following fingerprints are currently supported (more to come):
- 3DSP
- BASE
- CPLI
- DATE
- DIRF
- EVAR
- FING
- FIXP
- FPDP
- FPSP
- HRTI
- INDV
- JSTR
- MODE
- MODU
- NULL
- ORTH
- PERL (Disabled by default, needs command line flag)
- REFC
- ROMA
- SOCK
- SCKE
- STRN
- TOYS
- TURT (Broken, disabled in source code, will be fixed in the future)
Version Release Checklist
- Update the version number inside the pom
- Update the version string and FUNGE_VERSION inside Globals
- Create a new git tag with the same version number, and push it to master
- Never push tags outside master!