A standard-conforming Funge-98 interpreter.
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.
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 iando
- 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)