#!/bin/bash # # Author: Arnold Doray # Date: 15 Nov 2023 # Compiles Smojo VM (Java) and runs any app. # Requires Java 8+. # ARGS="${@:3}" function missing(){ if [ -z "$1" ]; then echo "Missing $2" exit 1 fi } CURL=$(which curl) missing "$CURL" "Curl" JAVA=$(which java) missing "$JAVA" "Java Runtime (java)" JAVAC=$(which javac) missing "$JAVAC" "Java Compiler (javac)" JAR=$(which jar) missing "$JAR" "Java Archiver (jar)" function help(){ echo -ne " Usage: -c -- to grab and compile the latest Java SmojoVM -r username/program -- to run a program from a user. -h -- this help. " } TEMP=. function compile(){ echo "javac=\"${JAVAC}\"" > smojo.txt echo "classpath=\"${TEMP}/smojo.jar\"" >> smojo.txt cd $TEMP URL=https://app.smojo.org/arnold/vm.java echo "Using: ${URL}" $CURL -k $URL > SmojoVM.java mkdir ./smojo rm ./smojo/*.class 2> /dev/null $JAVAC -d ./smojo SmojoVM.java $JAR cfe smojo.jar SmojoVM -C ./smojo . rm SmojoVM.java rm ./smojo/*.class 2> /dev/null } function run(){ $JAVA -cp $TEMP/smojo.jar smojo.ai.SmojoVM https://app.smojo.org/$1.json $ARGS } # Check for smojo.jar and compile immediately if not found. if [ ! -f $TEMP/smojo.jar ]; then compile fi while getopts chr:x: flag do case "${flag}" in h) help;; c) compile;; r) run "$OPTARG";; x) compile "$OPTARG";; esac done