A lot more languages

This commit is contained in:
Radon Rosborough 2020-06-09 12:58:21 -06:00
parent 1ae424f328
commit c34ccf26e8
2 changed files with 660 additions and 9 deletions

View File

@ -4,16 +4,70 @@ export interface LangConfig {
name: string; name: string;
monacoLang: string; monacoLang: string;
repl?: string; repl?: string;
main?: string; main: string;
prefix?: string; prefix?: string;
suffix?: string; suffix?: string;
compile?: string; compile?: string;
run?: string; run: string;
template?: string; template: string;
hacks?: "ghci-config"[]; hacks?: "ghci-config"[];
} }
export const langs: { [key: string]: LangConfig } = { export const langs: { [key: string]: LangConfig } = {
ada: {
name: "Ada",
monacoLang: "plaintext",
main: "main.adb",
compile: "x86_64-linux-gnu-gnatmake-9 main.adb",
run: "./main",
template: `with Ada.Text_IO;
procedure Main is
begin
Ada.Text_IO.Put_Line("Hello, world!");
end Main;
`,
},
algol: {
name: "ALGOL 68",
monacoLang: "plaintext",
main: "main.alg",
run: "a68g main.alg",
template: `print(("Hello, world!",new line))
`,
},
arm: {
name: "ARM",
monacoLang: "plaintext",
main: "main.S",
compile: "arm-linux-gnueabihf-gcc main.S -o main -static",
run: "qemu-arm-static main",
template: ` .text
.globl main
main:
mov r7, #4
mov r0, #1
ldr r1, =message
mov r2, #14
swi 0
mov r7, #1
mov r0, #0
swi 0
.data
message:
.string "Hello, world!\\n"
`,
},
ats: {
name: "ATS",
monacoLang: "postiats",
main: "main.dats",
compile: "patscc main.dats -o main",
run: "./main",
template: `val _ = print ("Hello, world!\\n")
implement main0 () = ()
`,
},
bash: { bash: {
name: "Bash", name: "Bash",
monacoLang: "shell", monacoLang: "shell",
@ -30,6 +84,14 @@ export const langs: { [key: string]: LangConfig } = {
main: "main.bas", main: "main.bas",
run: "bwbasic main.bas", run: "bwbasic main.bas",
template: `PRINT "Hello, world!" template: `PRINT "Hello, world!"
`,
},
befunge: {
name: "Befunge",
monacoLang: "plaintext",
main: "main.be",
run: "befunge-repl main.be",
template: `64+"!dlrow ,olleH">:#,_@
`, `,
}, },
brainf: { brainf: {
@ -80,6 +142,24 @@ int main() {
printf("Hello, world!\\n"); printf("Hello, world!\\n");
return 0; return 0;
} }
`,
},
cmd: {
name: "Cmd",
monacoLang: "bat",
repl: "wine cmd",
main: "main.bat",
run: `pkill wineserver64; while pgrep wineserver64 >/dev/null; do sleep 0.05; done; wine cmd /k main.bat`,
template: `echo "Hello, world!"
`,
},
commonlisp: {
name: "Common Lisp",
monacoLang: "plaintext",
repl: "rlwrap sbcl",
main: "main.lisp",
run: "rlwrap sbcl --userinit main.lisp",
template: `(format t "Hello, world!")
`, `,
}, },
cpp: { cpp: {
@ -124,6 +204,28 @@ int main() {
main: "main.clj", main: "main.clj",
run: "clojure -i main.clj -r", run: "clojure -i main.clj -r",
template: `(println "Hello, world!") template: `(println "Hello, world!")
`,
},
clojurescript: {
name: "ClojureScript",
monacoLang: "clojure",
repl: "lumo -r",
main: "main.cljs",
run: "lumo -i main.cljs -r",
template: `(println "Hello, world!")
`,
},
cobol: {
name: "COBOL",
monacoLang: "plaintext",
main: "main.cbl",
compile: "cobc -free -x main.cbl -o main",
run: "./main",
template: `IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
PROCEDURE DIVISION.
DISPLAY "Hello, world!".
STOP RUN.
`, `,
}, },
coffeescript: { coffeescript: {
@ -137,6 +239,19 @@ eval.apply(this, [require("fs").readFileSync("main.js", {encoding: "utf-8"})])
require("/usr/lib/node_modules/coffeescript/repl").start() require("/usr/lib/node_modules/coffeescript/repl").start()
'`, '`,
template: `console.log "Hello, world!" template: `console.log "Hello, world!"
`,
},
d: {
name: "D",
monacoLang: "plaintext",
main: "main.d",
compile: "dmd main.d",
run: "./main",
template: `import std.stdio;
void main() {
writeln("Hello, world!");
}
`, `,
}, },
dart: { dart: {
@ -156,6 +271,18 @@ require("/usr/lib/node_modules/coffeescript/repl").start()
main: "main.exs", main: "main.exs",
run: "iex main.exs", run: "iex main.exs",
template: `IO.puts("Hello, world!") template: `IO.puts("Hello, world!")
`,
},
elm: {
name: "Elm",
monacoLang: "plaintext",
repl: "elm repl",
main: "Main.elm",
run: "cp /opt/elm/elm.json elm.json && run-elm Main.elm; elm repl",
template: `module Main exposing (..)
output : String
output = "Hello, world!"
`, `,
}, },
elvish: { elvish: {
@ -187,7 +314,7 @@ require("/usr/lib/node_modules/coffeescript/repl").start()
-export([main/0]). -export([main/0]).
main() -> main() ->
io:fwrite("Hello, world!\n"). io:fwrite("Hello, world!\\n").
`, `,
}, },
fish: { fish: {
@ -256,6 +383,31 @@ main = putStrLn "Hello, world!"
`, `,
hacks: ["ghci-config"], hacks: ["ghci-config"],
}, },
intercal: {
name: "INTERCAL",
monacoLang: "plaintext",
main: "main.i",
compile: "ick main.i",
run: "./main",
template: `DO ,1 <- #14
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
PLEASE DO ,1 SUB #13 <- #162
DO ,1 SUB #14 <- #52
PLEASE READ OUT ,1
PLEASE GIVE UP
`,
},
java: { java: {
name: "Java", name: "Java",
monacoLang: "java", monacoLang: "java",
@ -276,6 +428,18 @@ main = putStrLn "Hello, world!"
main: "main.jl", main: "main.jl",
run: "julia -L main.jl", run: "julia -L main.jl",
template: `println("Hello, world!") template: `println("Hello, world!")
`,
},
kalyn: {
name: "Kalyn",
monacoLang: "plaintext",
main: "src-kalyn/Main.kalyn",
compile: "kalyn",
run: "out-kalyn/Main",
template: `(import "/opt/kalyn/Stdlib.kalyn")
(public def main (IO Empty)
(print "Hello, world!\\n"))
`, `,
}, },
kotlin: { kotlin: {
@ -313,6 +477,47 @@ KTHXBYE
main: "main.lua", main: "main.lua",
run: "lua -i main.lua", run: "lua -i main.lua",
template: `print("Hello, world!") template: `print("Hello, world!")
`,
},
malbolge: {
name: "Malbolge",
monacoLang: "plaintext",
main: "main.mb",
run: "malbolge main.mb",
template:
" (=<`#9]~6ZY32Vx/4Rs+0No-&Jk)\"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc\n",
},
mips: {
name: "MIPS",
monacoLang: "mips",
main: "main.S",
compile: "mips64-linux-gnuabi64-gcc main.S -o main -static",
run: "qemu-mips64-static main",
template: ` .text
.global main
main:
li $v0, 5001
li $a0, 1
dla $a1, message
li $a2, 14
syscall
li $v0, 5058
li $a0, 0
syscall
.data
message:
.string "Hello, world!\\n"
`,
},
mumps: {
name: "MUMPS",
monacoLang: "plaintext",
main: "main.m",
run:
"gtm_dist=/usr/lib/x86_64-linux-gnu/fis-gtm/V6.3-007_x86_64 /usr/lib/x86_64-linux-gnu/fis-gtm/V6.3-007_x86_64/utf8/mumps -r main main.m",
template: `main()
write "Hello, world!",!
quit
`, `,
}, },
nim: { nim: {
@ -351,6 +556,27 @@ int main() {
[pool drain]; [pool drain];
return 0; return 0;
} }
`,
},
octave: {
name: "Octave",
monacoLang: "plaintext",
repl: "octave",
main: "main.m",
run: "octave --persist main.m",
template: `disp("Hello, world!")
`,
},
pascal: {
name: "Pascal",
monacoLang: "pascal",
main: "main.pas",
compile: "fpc main.pas",
run: "./main",
template: `program Main;
begin
writeln('Hello, world!');
end.
`, `,
}, },
perl: { perl: {
@ -380,6 +606,18 @@ echo "Hello, world!\\n";
main: "main.ps1", main: "main.ps1",
run: "SHELL=/usr/bin/pwsh pwsh -NoExit main.ps1", run: "SHELL=/usr/bin/pwsh pwsh -NoExit main.ps1",
template: `Write-Host "Hello, world!" template: `Write-Host "Hello, world!"
`,
},
prolog: {
name: "Prolog",
monacoLang: "plaintext",
repl: "prolog",
main: "main.pl",
run: "prolog main.pl",
template: `:- initialization main.
main :-
write("Hello, world!"), nl.
`, `,
}, },
python: { python: {
@ -398,6 +636,16 @@ echo "Hello, world!\\n";
main: ".Rprofile", main: ".Rprofile",
run: "R --no-save", run: "R --no-save",
template: `print("Hello, world!") template: `print("Hello, world!")
`,
},
racket: {
name: "Racket",
monacoLang: "plaintext",
repl: "racket",
main: "main.rkt",
run: `racket -i -e '(enter! "main.rkt") (display "[ type (enter! \\"main.rkt\\") to access local variables ]\\n")'`,
template: `#lang racket/base
(display "Hello, world!\\n")
`, `,
}, },
reasonml: { reasonml: {
@ -407,6 +655,28 @@ echo "Hello, world!\\n";
compile: "bsc main.re > main.js", compile: "bsc main.re > main.js",
run: "NODE_PATH=/usr/lib/node_modules node main.js", run: "NODE_PATH=/usr/lib/node_modules node main.js",
template: `print_string("Hello, world!\\n") template: `print_string("Hello, world!\\n")
`,
},
riscv: {
name: "RISC-V",
monacoLang: "plaintext",
main: "main.S",
compile: "riscv64-linux-gnu-gcc main.S -o main -static",
run: "qemu-riscv64-static main",
template: ` .text
.global main
main:
addi a7, x0, 64
addi a0, x0, 1
la a1, message
addi a2, x0, 14
ecall
addi a7, x0, 93
addi a0, x0, 0
ecall
.data
message:
.string "Hello, world!\\n"
`, `,
}, },
ruby: { ruby: {
@ -463,6 +733,123 @@ binding_irb.run(IRB.conf)
main: ".profile", main: ".profile",
run: "SHELL=/usr/bin/sh HOME=. posh -l", run: "SHELL=/usr/bin/sh HOME=. posh -l",
template: `echo "Hello, world!" template: `echo "Hello, world!"
`,
},
shakespeare: {
name: "Shakespeare",
monacoLang: "plaintext",
repl: "shakespeare console",
main: "main.spl",
suffix: "\n[A pause]",
run: "shakespeare debug main.spl",
template: `The Infamous Hello World Program.
Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Hamlet, the flatterer of Andersen Insulting A/S.
Act I: Hamlet's insults and flattery.
Scene I: The insulting of Romeo.
[Enter Hamlet and Romeo]
Hamlet:
You lying stupid fatherless big smelly half-witted coward!
You are as stupid as the difference between a handsome rich brave
hero and thyself! Speak your mind!
You are as brave as the sum of your fat little stuffed misused dusty
old rotten codpiece and a beautiful fair warm peaceful sunny summer's
day. You are as healthy as the difference between the sum of the
sweetest reddest rose and my father and yourself! Speak your mind!
You are as cowardly as the sum of yourself and the difference
between a big mighty proud kingdom and a horse. Speak your mind.
Speak your mind!
[Exit Romeo]
Scene II: The praising of Juliet.
[Enter Juliet]
Hamlet:
Thou art as sweet as the sum of the sum of Romeo and his horse and his
black cat! Speak thy mind!
[Exit Juliet]
Scene III: The praising of Ophelia.
[Enter Ophelia]
Hamlet:
Thou art as lovely as the product of a large rural town and my amazing
bottomless embroidered purse. Speak thy mind!
Thou art as loving as the product of the bluest clearest sweetest sky
and the sum of a squirrel and a white horse. Thou art as beautiful as
the difference between Juliet and thyself. Speak thy mind!
[Exeunt Ophelia and Hamlet]
Act II: Behind Hamlet's back.
Scene I: Romeo and Juliet's conversation.
[Enter Romeo and Juliet]
Romeo:
Speak your mind. You are as worried as the sum of yourself and the
difference between my small smooth hamster and my nose. Speak your
mind!
Juliet:
Speak YOUR mind! You are as bad as Hamlet! You are as small as the
difference between the square of the difference between my little pony
and your big hairy hound and the cube of your sorry little
codpiece. Speak your mind!
[Exit Romeo]
Scene II: Juliet and Ophelia's conversation.
[Enter Ophelia]
Juliet:
Thou art as good as the quotient between Romeo and the sum of a small
furry animal and a leech. Speak your mind!
Ophelia:
Thou art as disgusting as the quotient between Romeo and twice the
difference between a mistletoe and an oozing infected blister! Speak
your mind!
[Exeunt]
`,
},
smalltalk: {
name: "Smalltalk",
monacoLang: "plaintext",
repl: "gst",
main: "main.st",
run: "gst main.st; gst",
template: `'Hello, world!' displayNl !
`,
},
snobol: {
name: "SNOBOL",
monacoLang: "plaintext",
repl: "snobol4",
main: "main.sno",
run: "snobol4 main.sno; snobol4",
template: ` OUTPUT = "Hello, world!"
END
`, `,
}, },
sqlite: { sqlite: {
@ -472,6 +859,15 @@ binding_irb.run(IRB.conf)
main: "main.sql", main: "main.sql",
run: `sqlite3 -cmd "$(< main.sql)"`, run: `sqlite3 -cmd "$(< main.sql)"`,
template: `SELECT "Hello, world!" template: `SELECT "Hello, world!"
`,
},
standardml: {
name: "Standard ML",
monacoLang: "plaintext",
repl: "rlwrap sml",
main: "main.sml",
run: "rlwrap sml main.sml",
template: `print "Hello, world!\\n";
`, `,
}, },
swift: { swift: {
@ -525,6 +921,57 @@ binding_irb.run(IRB.conf)
main: "main.vim", main: "main.vim",
run: `vim -c "$(< main.vim)"`, run: `vim -c "$(< main.vim)"`,
template: `:echo "Hello, world!" template: `:echo "Hello, world!"
`,
},
visualbasic: {
name: "Visual Basic",
monacoLang: "vb",
main: "main.vb",
compile: "vbnc main.vb",
run: "mono main.exe",
template: `Module Main
Sub Main(args As String())
Console.WriteLine("Hello, world!")
End Sub
End Module
`,
},
whitespace: {
name: "Whitespace",
monacoLang: "plaintext",
main: "main.ws",
run: "whitespace main.ws",
template: `Hello, world! \t \t \n\t\n \t\t \t \t\n\t\n \t\t \t\t \n\t\n \t\t \t\t \n\t\n \t\t \t\t\t\t\n\t\n \t \t\t \n\t\n \t \n\t\n \t\t\t \t\t\t\n\t\n \t\t \t\t\t\t\n\t\n \t\t\t \t \n\t\n \t\t \t\t \n\t\n \t\t \t \n\t\n \n\n\n`,
},
wolframlanguage: {
name: "Wolfram Language",
monacoLang: "plaintext",
repl: "mathics",
main: "main.wls",
run: "mathics --persist main.wls",
template: `Print["Hello, world!"]
`,
},
x86: {
name: "x86",
monacoLang: "plaintext",
main: "main.S",
compile: "clang main.S -o main",
run: "./main",
template: ` .text
.globl main
main:
movq $1, %rax
movq $1, %rdi
leaq message(%rip), %rsi
movq $14, %rdx
syscall
movq $60, %rax
movq $0, %rdi
syscall
.data
message:
.string "Hello, world!\\n"
`, `,
}, },
zsh: { zsh: {

View File

@ -10,9 +10,11 @@ fi
uid="$1" uid="$1"
dpkg --add-architecture i386
export DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND=noninteractive
apt-get update apt-get update
apt-get install -y apt-transport-https curl gnupg lsb-release wget apt-get install -y apt-transport-https curl gnupg lsb-release software-properties-common wget
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
curl -sSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - curl -sSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -
@ -35,6 +37,8 @@ deb https://dl.yarnpkg.com/debian/ stable main
deb-src https://deb.nodesource.com/node_14.x focal main deb-src https://deb.nodesource.com/node_14.x focal main
EOF EOF
add-apt-repository -y -n ppa:deadsnakes/ppa
packages=" packages="
# Needed for project infrastructure # Needed for project infrastructure
@ -42,6 +46,7 @@ bash
git git
make make
nodejs nodejs
python3-pip
yarn yarn
# Handy utilities # Handy utilities
@ -49,6 +54,7 @@ bsdmainutils
curl curl
emacs-nox emacs-nox
git git
htop
jq jq
lsof lsof
make make
@ -59,6 +65,19 @@ tmux
vim vim
wget wget
# Ada
gnat
# Algol
algol68g
# ARM
gcc-arm-linux-gnueabihf
qemu-system-static
# ATS
ats2-lang
# BASIC # BASIC
bwbasic bwbasic
@ -77,6 +96,17 @@ mono-mcs
# Clojure # Clojure
clojure clojure
# Cmd
wine
wine32
# COBOL
gnucobol
# Common Lisp
rlwrap
sbcl
# Crystal # Crystal
crystal crystal
@ -114,12 +144,18 @@ golang
cabal-install cabal-install
ghc ghc
# INTERCAL
intercal
# Java # Java
default-jdk default-jdk
# Julia # Julia
julia julia
# Kalyn
haskell-stack
# Ksh # Ksh
ksh ksh
@ -129,6 +165,13 @@ cmake
# Lua # Lua
lua5.3 lua5.3
# MIPS
gcc-mips64-linux-gnuabi64
qemu-system-static
# MUMPS
fis-gtm
# Nim # Nim
nim nim
@ -140,6 +183,12 @@ yarn
gcc gcc
gnustep-devel gnustep-devel
# Octave
octave
# Pascal
fpc
# Perl # Perl
perl perl
perlconsole perlconsole
@ -147,6 +196,9 @@ perlconsole
# PHP # PHP
php php
# Prolog
swi-prolog
# Python # Python
python3 python3
python3-pip python3-pip
@ -155,6 +207,13 @@ python3-venv
# R # R
r-base r-base
# Racket
racket
# RISC-V
gcc-riscv64-linux-gnu
qemu-system-static
# Ruby # Ruby
ruby ruby
@ -170,9 +229,19 @@ mit-scheme
# Sh # Sh
posh posh
# Smalltalk
gnu-smalltalk
# SNOBOL
m4
# SQLite # SQLite
sqlite sqlite
# Standard ML
rlwrap
smlnj
# Swift # Swift
libpython2.7 libpython2.7
@ -188,6 +257,15 @@ unlambda
# Vimscript # Vimscript
vim vim
# Visual Basic
mono-vbnc
# Wolfram Language
python3.7
# x86
clang
# Zsh # Zsh
zsh zsh
@ -198,17 +276,37 @@ apt-get update
apt-get install -y $(grep -v "^#" <<< "$packages") apt-get install -y $(grep -v "^#" <<< "$packages")
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
npm config set unsafe-perm true
# Befunge
npm install -g befunge93 prompt-sync
# ClojureScript
npm install -g lumo-cljs
# CoffeeScript # CoffeeScript
npm install -g coffeescript npm install -g coffeescript
# TypeScript # Elm
npm install -g ts-node typescript npm install -g run-elm
# Perl
cpan Devel::REPL
# ReasonML # ReasonML
npm install -g bs-platform npm install -g bs-platform
# Perl # Shakespeare
cpan Devel::REPL pip3 install shakespearelang
# TypeScript
npm install -g ts-node typescript
# Whitespace
pip3 install whitespace
# Wolfram Language
python3.7 -m pip install install mathics
# Needed for project infrastructure # Needed for project infrastructure
cd /tmp cd /tmp
@ -216,6 +314,18 @@ wget -nv https://github.com/watchexec/watchexec/releases/download/1.13.1/watchex
dpkg -i watchexec-*.deb dpkg -i watchexec-*.deb
rm watchexec-*.deb rm watchexec-*.deb
# D
cd /tmp
wget -nv http://downloads.dlang.org/releases/2.x/2.092.0/dmd_2.092.0-0_amd64.deb
# Elm
cd /tmp
wget -nv https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz
gunzip binary-for-linux-64-bit.gz
chmod +x binary-for-linux-64-bit
mv binary-for-linux-64-bit /usr/bin/elm
rm binary-for-linux-64-bit.gz
# Kotlin # Kotlin
cd /tmp cd /tmp
wget -nv https://github.com/JetBrains/kotlin/releases/download/v1.3.72/kotlin-compiler-1.3.72.zip wget -nv https://github.com/JetBrains/kotlin/releases/download/v1.3.72/kotlin-compiler-1.3.72.zip
@ -231,6 +341,16 @@ mkdir /opt/powershell
tar -xf powershell-*.tar.gz -C /opt/powershell tar -xf powershell-*.tar.gz -C /opt/powershell
ln -s /opt/powershell/pwsh /usr/bin/pwsh ln -s /opt/powershell/pwsh /usr/bin/pwsh
# SNOBOL
wget -nv ftp://ftp.snobol4.org/snobol/snobol4-2.0.tar.gz
tar -xf snobol4-*.tar.gz
rm snobol4-*.tar.gz
pushd snobol4-*
make || true
mv snobol4 /usr/bin/snobol4
popd
rm -rf snobol4-*
# Swift # Swift
cd /tmp cd /tmp
wget -nv https://swift.org/builds/swift-5.2.4-release/ubuntu2004/swift-5.2.4-RELEASE/swift-5.2.4-RELEASE-ubuntu20.04.tar.gz wget -nv https://swift.org/builds/swift-5.2.4-release/ubuntu2004/swift-5.2.4-RELEASE/swift-5.2.4-RELEASE-ubuntu20.04.tar.gz
@ -239,6 +359,17 @@ tar -xf swift-*.tar.gz -C /opt/swift --strip-components=2
ln -s /opt/swift/bin/swiftc /usr/bin/swiftc ln -s /opt/swift/bin/swiftc /usr/bin/swiftc
rm swift-*.tar.gz rm swift-*.tar.gz
# Kalyn
cd /tmp
git clone https://github.com/raxod502/kalyn
pushd kalyn >/dev/null
stack build kalyn
mv "$(stack exec which kalyn)" /usr/bin/kalyn
mkdir /opt/kalyn
cp -R src-kalyn/Stdlib src-kalyn/Stdlib.kalyn /opt/kalyn/
popd
rm -rf kalyn
# LOLCODE # LOLCODE
cd /tmp cd /tmp
git clone https://github.com/justinmeza/lci.git git clone https://github.com/justinmeza/lci.git
@ -247,6 +378,50 @@ python3 install.py --prefix=/usr
popd >/dev/null popd >/dev/null
rm -rf lci rm -rf lci
# Malbolge
cd /tmp
git clone https://github.com/bipinu/malbolge.git
clang malbolge/malbolge.c -o /usr/bin/malbolge
rm -rf malbolge
# ActionScript
tee /usr/bin/amxmlc >/dev/null <<"EOF"
#!/bin/sh
exec /opt/actionscript/bin/amxmlc "$@"
EOF
chmod +x /usr/bin/amxmlc
# Befunge
tee /usr/bin/befunge-repl >/dev/null <<"EOF"
#!/usr/bin/env -S NODE_PATH=/usr/lib/node_modules node
const fs = require("fs");
const Befunge = require("befunge93");
const prompt = require("prompt-sync")();
const befunge = new Befunge();
befunge.onInput = prompt;
befunge.onOutput = (output) => {
if (typeof output === "string") {
process.stdout.write(output);
} else {
process.stdout.write(output + " ");
}
};
const args = process.argv.slice(2);
if (args.length !== 1) {
console.error("usage: befunge-repl FILE");
process.exit(1);
}
befunge.run(fs.readFileSync(args[0], { encoding: "utf-8" })).catch((err) => {
console.error(err);
process.exit(1);
});
EOF
chmod +x /usr/bin/befunge-repl
# BrainF # BrainF
tee /usr/bin/brainf-repl >/dev/null <<"EOF" tee /usr/bin/brainf-repl >/dev/null <<"EOF"
#!/usr/bin/env python3 #!/usr/bin/env python3
@ -279,6 +454,35 @@ while True:
EOF EOF
chmod +x /usr/bin/brainf-repl chmod +x /usr/bin/brainf-repl
# Elm
mkdir /opt/elm
tee /opt/elm/elm.json >/dev/null <<"EOF"
{
"type": "application",
"source-directories": [
"."
],
"elm-version": "0.19.1",
"dependencies": {
"direct": {
"elm/browser": "1.0.2",
"elm/core": "1.0.5",
"elm/html": "1.0.0"
},
"indirect": {
"elm/json": "1.1.3",
"elm/time": "1.0.0",
"elm/url": "1.0.0",
"elm/virtual-dom": "1.0.2"
}
},
"test-dependencies": {
"direct": {},
"indirect": {}
}
}
EOF
# Unlambda # Unlambda
tee /usr/bin/unlambda-repl >/dev/null <<"EOF" tee /usr/bin/unlambda-repl >/dev/null <<"EOF"
#!/usr/bin/env python3 #!/usr/bin/env python3