All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.jnngl.system.Terminal Maven / Gradle / Ivy
/*
Plugin for computers in vanilla minecraft!
Copyright (C) 2022 JNNGL
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
package com.jnngl.system;
import com.jnngl.totalcomputers.system.TotalOS;
import com.jnngl.totalcomputers.system.desktop.ApplicationHandler;
import com.jnngl.totalcomputers.system.desktop.ConsoleApplication;
import java.io.*;
import java.nio.charset.StandardCharsets;
public class Terminal extends ConsoleApplication {
private File path;
public static void main(String[] args) {
ApplicationHandler.open(Terminal.class, args[0]);
}
public Terminal(TotalOS os, String path) {
super(os, "Terminal", os.screenWidth/3*2, os.screenHeight/3*2, path);
}
@Override
protected void onStart() {
path = new File(os.fs.root()+"/usr");
putString(os.name).putString("$").putString(path.getPath().replace(os.fs.root(), "")).putString(": ");
}
@Override
protected boolean onClose() {
return true;
}
private void processCommand(String name, String[] args) {
switch (name) {
case "cd": {
File probe = new File(path.getPath()+"/"+args[0]);
if(args[0].startsWith("/")) probe = new File(os.fs.root()+args[0]);
if(!probe.exists()) {
putString("Directory '").putString(args[0]).putString("' does not exists.\n");
break;
}
if(!probe.isDirectory()) {
putString("'").putString(args[0]).putString("' is a file.\n");
break;
}
path = probe;
break;
}
// case "ls": {
// boolean A = false;
// boolean a = false;
//
// String directory = path.getPath();
//
// for(String arg : args) {
// if(arg.equals("")) continue;
// if(arg.startsWith("-") && !arg.startsWith("--")) {
// if(arg.contains("a")) {
// a = true;
// }
// if(arg.contains("A")) {
// a = true;
// A = true;
// }
// } else if(arg.startsWith("--")) {
//
// } else {
// if(arg.startsWith("/")) directory = os.fs.root()+arg;
// else directory = path.getPath()+"/"+arg;
// }
// }
//
// boolean finalA = a;
// File[] files = new File(directory).listFiles((dir, name1) -> {
// if(name1.startsWith(".")) {
// if(!finalA) return false;
// }
//
// return true;
// });
//
// if(files == null) {
// putString("Failed to access directory '").putString(directory).putString("'.\n");
// break;
// }
// if(a && !A) putString(".\n..");
// for(File file : files) {
// putString(file.getName()).putString("\n");
// }
//
// break;
// }
case "open": {
if(args.length > 0) {
String filename = args[0];
File file =new File(path, filename);
if(!file.exists()) {
putString("`"+filename+"'").putString(" does not exists.");
break;
}
os.fs.executeFile(file);
} else putString("open ");
break;
}
default: {
if(!os.fs.launchFromApplication("/sys/bin/"+name)
&& !os.fs.launchFromApplication("/sys/bin/"+name+".app")) {
if(!os.fs.launchFromApplication("/usr/Applications"+name)
&& !os.fs.launchFromApplication("/sys/bin/"+name+".app")) {
if(!os.fs.launchFromApplication(path.getPath()+"/"+name)
&& !os.fs.launchFromApplication("/sys/bin/"+name+".app")) {
String[] cmd;
if(System.getProperty("os.name").toLowerCase().startsWith("windows")) {
cmd = new String[args.length+3];
cmd[0] = "cmd.exe";
cmd[1] = "/c";
cmd[2] = name;
System.arraycopy(args, 0, cmd, 3, args.length);
} else {
cmd = new String[args.length+1];
cmd[0] = name;
System.arraycopy(args, 0, cmd, 1, args.length);
}
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(path);
try {
Process p = pb.start();
class OutputRedirect extends Thread {
InputStream is;
ConsoleOutput out;
OutputRedirect(InputStream is, ConsoleOutput out) {
this.is = is;
this.out = out;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while((line = br.readLine()) != null) {
out.write(line+"\n");
renderCanvas();
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
OutputRedirect out = new OutputRedirect(p.getInputStream(), stdout);
OutputRedirect err = new OutputRedirect(p.getErrorStream(), stderr);
out.start();
err.start();
try {
err.join();
out.join();
} catch (InterruptedException e) {
putString(e.getLocalizedMessage()+"\n");
}
putString("\n");
} catch (IOException e) {
putString(e.getLocalizedMessage()+"\n");
}
}
}
}
break;
}
}
}
@Override
public void update() {
if(hasNext()) {
String cmd = next();
String[] parts = cmd.split(" ");
String[] args = new String[parts.length-1];
System.arraycopy(parts, 1, args, 0, args.length);
processCommand(parts[0], args);
putString(os.name).putString("$").putString(path.getPath().replace(os.fs.root(), "")).putString(": ").renderCanvas();
}
}
}