{"slug": "ysh-terminal-v8-1-4", "title": "YSH Terminal v8.1.4", "summary": "A developer released YSH Terminal v8.1.4, a Java Swing-based command-line emulator that implements an in-memory file and folder system, a note-taking subsystem, LAN chat and file sharing over sockets with multi-client support, command history, theming, and a Konami-code easter egg. The single-file Java program uses javax.swing components with a custom DocumentFilter to manage prompt positioning and input handling.", "body_md": "|  | // YSH is Built through verions NOT Generated. | \n|  | // Comments are for better understanding not AI prove ( dont be chay . ) | \n|  | // JAVA CLASSES | \n|  | import javax.swing.*; | \n|  | import javax.swing.text.BadLocationException; | \n|  | import javax.swing.text.DefaultCaret; | \n|  | import javax.swing.text.DocumentFilter; | \n|  | import javax.swing.text.AttributeSet; | \n|  | import java.awt.*; | \n|  | import java.io.*; | \n|  | import java.net.*; | \n|  | import java.nio.file.*; | \n|  | import java.util.*; | \n|  | // CLASS | \n|  | public class YSH { | \n|  | // FILE SYSTEM | \n|  | static class FileNode { | \n|  | String name; | \n|  | String content = \"\"; | \n|  | FileNode(String name) { | \n|  | this.name = name; | \n|  | } | \n|  | } | \n|  | // FOLDER SYSTEM | \n|  | static class Folder { | \n|  | String name; | \n|  | Folder parent; | \n|  | ArrayList<Folder> children = new ArrayList<>(); | \n|  | ArrayList<FileNode> files = new ArrayList<>(); | \n|  | Folder(String name, Folder parent) { | \n|  | this.name = name; | \n|  | this.parent = parent; | \n|  | } | \n|  | } | \n|  | // ========== VARIABLES ========== | \n|  | // ROOT | \n|  | static Path currentPath = Paths.get(System.getProperty(\"user.home\")); | \n|  | static final Path homePath = Paths.get(System.getProperty(\"user.home\")); | \n|  | static Path copiedPath = null; | \n|  | // CALC | \n|  | static boolean waitingForCalc = false; | \n|  | // DEV ROOT INDI | \n|  | static boolean developerMode = false; | \n|  | // NOTE | \n|  | static boolean waitingForNoteAction = false; | \n|  | static boolean waitingForNoteTitle = false; | \n|  | static boolean waitingForNoteText = false; | \n|  | static boolean waitingForNoteView = false; | \n|  | static String noteAction = \"\"; | \n|  | static String tempTitle = \"\"; | \n|  | static ArrayList<String> noteTitles = new ArrayList<>(); | \n|  | static ArrayList<String> noteTexts = new ArrayList<>(); | \n|  | // GUI | \n|  | static JTextArea terminal; | \n|  | // YSH v8 TERMINAL | \n|  | static int promptPosition = 0; | \n|  | static String currentPrompt = \"YSH /> \"; | \n|  | static ArrayList<String> commandHistory = new ArrayList<>(); | \n|  | static int historyIndex = -1; | \n|  | static boolean clearingTerminal = false; | \n|  | // KONAMI CODE | \n|  | static int[] konami = { | \n|  | java.awt.event.KeyEvent.VK_UP, | \n|  | java.awt.event.KeyEvent.VK_UP, | \n|  | java.awt.event.KeyEvent.VK_DOWN, | \n|  | java.awt.event.KeyEvent.VK_DOWN, | \n|  | java.awt.event.KeyEvent.VK_LEFT, | \n|  | java.awt.event.KeyEvent.VK_RIGHT, | \n|  | java.awt.event.KeyEvent.VK_LEFT, | \n|  | java.awt.event.KeyEvent.VK_RIGHT, | \n|  | java.awt.event.KeyEvent.VK_B, | \n|  | java.awt.event.KeyEvent.VK_A | \n|  | }; | \n|  | static int konamiIndex = 0; | \n|  | // THEME | \n|  | static Color bgColor = Color.WHITE; | \n|  | static Color textColor = Color.BLACK; | \n|  | static Color inputColor = Color.BLACK; | \n|  | // CHAT SYSTEM | \n|  | static ServerSocket serverSocket; | \n|  | static Socket socket; | \n|  | static PrintWriter out; | \n|  | static BufferedReader in; | \n|  | static boolean isChatRunning = false; | \n|  | static boolean isHost = false; | \n|  | // FILE SHARE ( LAN ) | \n|  | static ServerSocket fileServerSocket; | \n|  | static boolean isFileServerRunning = false; | \n|  | // USERNAME | \n|  | static String username = \"Guest\"; | \n|  | // MULTI CLIENT SUPPORT | \n|  | static ArrayList<ClientHandler> clients = new ArrayList<>(); | \n|  | // NOTES SYSTEM | \n|  | static ArrayList<String> notes = new ArrayList<>(); | \n|  | // CLIENT HANDLER | \n|  | static class ClientHandler extends Thread { | \n|  | Socket socket; | \n|  | BufferedReader in; | \n|  | PrintWriter out; | \n|  | String username = \"Guest\"; | \n|  | ClientHandler(Socket socket) { | \n|  | this.socket = socket; | \n|  | try { | \n|  | in = new BufferedReader( | \n|  | new InputStreamReader(socket.getInputStream()) | \n|  | ); | \n|  | out = new PrintWriter( | \n|  | socket.getOutputStream(), | \n|  | true | \n|  | ); | \n|  | } | \n|  | catch (Exception e) { | \n|  | // BOARD @%25 NUMBER !$# 143 @ 143 | \n|  | terminal.append(\"client error\\n\"); | \n|  | } | \n|  | } | \n|  | @Override | \n|  | public void run() { | \n|  | try { | \n|  | // first message = username | \n|  | username = in.readLine(); | \n|  | terminal.append(username + \" joined chat\\n\"); | \n|  | broadcast(\"[SYSTEM] \" + username + \" joined\"); | \n|  | String msg; | \n|  | while ((msg = in.readLine())!= null) { | \n|  | terminal.append( | \n|  | \"[\" + username + \"]: \" + msg + \"\\n\" | \n|  | ); | \n|  | broadcast( | \n|  | \"[\" + username + \"]: \" + msg | \n|  | ); | \n|  | } | \n|  | } | \n|  | catch (Exception e) { | \n|  | terminal.append(username + \" disconnected\\n\"); | \n|  | } | \n|  | finally { | \n|  | clients.remove(this); | \n|  | broadcast( | \n|  | \"[SYSTEM] \" + username + \" left\" | \n|  | ); | \n|  | try { | \n|  | socket.close(); | \n|  | } | \n|  | catch (Exception ignored) {} | \n|  | } | \n|  | } | \n|  | void send(String msg) { | \n|  | out.println(msg); | \n|  | } | \n|  | } | \n|  | public static void main(String[] args) { | \n|  | // WINDOW FRAME | \n|  | JFrame frame = new JFrame(\"YSH Terminal v8\"); | \n|  | // • removed | \n|  | frame.setSize(760, 470); | \n|  | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | \n|  | frame.setLayout(new BorderLayout()); | \n|  | // INPUT DIALOG | \n|  | terminal = new JTextArea(); | \n|  | terminal.setEditable(true); | \n|  | terminal.setLineWrap(false); | \n|  | terminal.setFont(new Font(\"Consolas\", Font.PLAIN, 15)); | \n|  | terminal.setBackground(Color.BLACK); | \n|  | terminal.setForeground(new Color(0, 255, 70)); | \n|  | terminal.setCaretColor(new Color(0, 255, 70)); | \n|  | terminal.setBorder( | \n|  | BorderFactory.createEmptyBorder(0, 2, 0, 2) | \n|  | ); | \n|  | terminal.setMargin(new Insets(0, 0, 0, 0)); | \n|  | terminal.setFocusable(true); | \n|  | ((javax.swing.text.AbstractDocument) terminal.getDocument()) | \n|  | .setDocumentFilter(new TerminalFilter()); | \n|  | // SCROLL BAR | \n|  | JScrollPane scroll = new JScrollPane(terminal); | \n|  | JScrollBar bar = scroll.getVerticalScrollBar(); | \n|  | bar.setPreferredSize(new Dimension(8, 0)); | \n|  | bar.setBackground(bgColor); | \n|  | UIManager.put(\"ScrollBar.width\", 8); | \n|  | scroll.setHorizontalScrollBarPolicy( | \n|  | JScrollPane.HORIZONTAL_SCROLLBAR_NEVER | \n|  | ); | \n|  | DefaultCaret caret = (DefaultCaret) | \n|  | terminal.getCaret(); | \n|  | caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); | \n|  | // TERMINAL SHORTCUT SYSTEM | \n|  | terminal.addKeyListener(new java.awt.event.KeyAdapter() { | \n|  | @Override | \n|  | public void keyPressed(java.awt.event.KeyEvent e) { | \n|  | // KONAMI CODE | \n|  | if (e.getKeyCode() == konami[konamiIndex]) { | \n|  | konamiIndex++; | \n|  | if (konamiIndex == konami.length) { | \n|  | terminal.append(\"\"\" | \n|  | ______________________________ | \n|  | ACHIEVEMENT | \n|  | Developer Instincts | \n|  | ______________________________ | \n|  | \"\"\"); | \n|  | developerMode = true; | \n|  | devmode(); | \n|  | konamiIndex = 0; | \n|  | printPrompt(); | \n|  | e.consume(); | \n|  | return; | \n|  | } | \n|  | } | \n|  | else { | \n|  | konamiIndex = 0; | \n|  | } | \n|  | int key = e.getKeyCode(); | \n|  | // CTRL + UP / DOWN = SCROLL | \n|  | if (e.isControlDown()) { | \n|  | JScrollBar sb = scroll.getVerticalScrollBar(); | \n|  | int amount = 60; | \n|  | if (key == java.awt.event.KeyEvent.VK_UP) { | \n|  | sb.setValue(sb.getValue() - amount); | \n|  | e.consume(); | \n|  | return; | \n|  | } | \n|  | if (key == java.awt.event.KeyEvent.VK_DOWN) { | \n|  | sb.setValue(sb.getValue() + amount); | \n|  | e.consume(); | \n|  | return; | \n|  | } | \n|  | } | \n|  | // ENTER = EXECUTE | \n|  | if (key == java.awt.event.KeyEvent.VK_ENTER) { | \n|  | e.consume(); | \n|  | executeCurrentCommand(); | \n|  | return; | \n|  | } | \n|  | // UP = PREVIOUS COMMAND | \n|  | if (key == java.awt.event.KeyEvent.VK_UP) { | \n|  | historyUp(); | \n|  | e.consume(); | \n|  | return; | \n|  | } | \n|  | // DOWN = NEXT COMMAND | \n|  | if (key == java.awt.event.KeyEvent.VK_DOWN) { | \n|  | historyDown(); | \n|  | e.consume(); | \n|  | return; | \n|  | } | \n|  | // TAB = COMMAND COMPLETION | \n|  | if (key == java.awt.event.KeyEvent.VK_TAB) { | \n|  | e.consume(); | \n|  | completeCommand(); | \n|  | return; | \n|  | } | \n|  | // CTRL + L = CLEAR | \n|  | if (e.isControlDown() && | \n|  | key == java.awt.event.KeyEvent.VK_L) { | \n|  | e.consume(); | \n|  | terminal.setText(\"\"); | \n|  | printBanner(); | \n|  | printPrompt(); | \n|  | return; | \n|  | } | \n|  | // CTRL + C = CANCEL CURRENT INPUT | \n|  | if (e.isControlDown() && | \n|  | key == java.awt.event.KeyEvent.VK_C) { | \n|  | e.consume(); | \n|  | terminal.append(\"^C\\n\"); | \n|  | printPrompt(); | \n|  | return; | \n|  | } | \n|  | // HOME = START OF COMMAND | \n|  | if (key == java.awt.event.KeyEvent.VK_HOME) { | \n|  | terminal.setCaretPosition(promptPosition); | \n|  | e.consume(); | \n|  | return; | \n|  | } | \n|  | // END = END OF COMMAND | \n|  | if (key == java.awt.event.KeyEvent.VK_END) { | \n|  | terminal.setCaretPosition( | \n|  | terminal.getDocument().getLength() | \n|  | ); | \n|  | e.consume(); | \n|  | } | \n|  | } | \n|  | }); | \n|  | applyTheme(); | \n|  | timeGreeting(); | \n|  | printBanner(); | \n|  | printPrompt(); | \n|  | frame.add(scroll, BorderLayout.CENTER); | \n|  | frame.setVisible(true); | \n|  | } | \n|  | // EXECUTE CURRENT TERMINAL INPUT | \n|  | static void executeCurrentCommand() { | \n|  | try { | \n|  | int length = | \n|  | terminal.getDocument().getLength() - promptPosition; | \n|  | if (length < 0) { | \n|  | return; | \n|  | } | \n|  | String command = | \n|  | terminal.getText(promptPosition, length).trim(); | \n|  | terminal.append(\"\\n\"); | \n|  | if (!command.isEmpty()) { | \n|  | commandHistory.add(command); | \n|  | historyIndex = commandHistory.size(); | \n|  | execute(command); | \n|  | } | \n|  | printPrompt(); | \n|  | } catch (Exception e) { | \n|  | terminal.append(\"YSH: input error\\n\"); | \n|  | printPrompt(); | \n|  | } | \n|  | } | \n|  | // HISTORY UP | \n|  | static void historyUp() { | \n|  | if (commandHistory.isEmpty()) { | \n|  | return; | \n|  | } | \n|  | if (historyIndex > 0) { | \n|  | historyIndex--; | \n|  | } | \n|  | replaceCurrentInput( | \n|  | commandHistory.get(historyIndex) | \n|  | ); | \n|  | } | \n|  | // HISTORY DOWN | \n|  | static void historyDown() { | \n|  | if (commandHistory.isEmpty()) { | \n|  | return; | \n|  | } | \n|  | if (historyIndex < commandHistory.size() - 1) { | \n|  | historyIndex++; | \n|  | replaceCurrentInput( | \n|  | commandHistory.get(historyIndex) | \n|  | ); | \n|  | } else { | \n|  | historyIndex = commandHistory.size(); | \n|  | replaceCurrentInput(\"\"); | \n|  | } | \n|  | } | \n|  | // REPLACE CURRENT COMMAND | \n|  | static void replaceCurrentInput(String text) { | \n|  | try { | \n|  | terminal.getDocument().remove( | \n|  | promptPosition, | \n|  | terminal.getDocument().getLength() - promptPosition | \n|  | ); | \n|  | terminal.getDocument().insertString( | \n|  | promptPosition, | \n|  | text, | \n|  | null | \n|  | ); | \n|  | terminal.setCaretPosition( | \n|  | terminal.getDocument().getLength() | \n|  | ); | \n|  | } catch (Exception e) { | \n|  | terminal.append(\"YSH: input error\\n\"); | \n|  | } | \n|  | } | \n|  | // COMMAND COMPLETION | \n|  | static void completeCommand() { | \n|  | String input; | \n|  | try { | \n|  | int length = | \n|  | terminal.getDocument().getLength() - promptPosition; | \n|  | input = | \n|  | terminal.getText(promptPosition, length).trim(); | \n|  | } catch (Exception e) { | \n|  | return; | \n|  | } | \n|  | if (input.isEmpty()) { | \n|  | return; | \n|  | } | \n|  | String[] commands = { | \n|  | \"help\", | \n|  | \"mkdir\", | \n|  | \"touch\", | \n|  | \"rm\", | \n|  | \"rename\", | \n|  | \"copy\", | \n|  | \"paste\", | \n|  | \"move\", | \n|  | \"ls\", | \n|  | \"search\", | \n|  | \"cat\", | \n|  | \"write\", | \n|  | \"cd\", | \n|  | \"pwd\", | \n|  | \"home\", | \n|  | \"calc\", | \n|  | \"echo\", | \n|  | \"clear\", | \n|  | \"whatsup\", | \n|  | \"sysinfo\", | \n|  | \"theme\", | \n|  | \"open\", | \n|  | \"run\", | \n|  | \"check\", | \n|  | \"developer\", | \n|  | \"note\", | \n|  | \"chat\", | \n|  | \"scan\", | \n|  | \"msg\", | \n|  | \"username\", | \n|  | \"listusers\", | \n|  | \"kick\", | \n|  | \"announce\", | \n|  | \"fileshare\", | \n|  | \"sudo\", | \n|  | \"whoami\", | \n|  | \"whocreatedyou\", | \n|  | \"easteregg\", | \n|  | \"exit\" | \n|  | }; | \n|  | ArrayList<String> matches = new ArrayList<>(); | \n|  | for (String command : commands) { | \n|  | if (command.startsWith(input)) { | \n|  | matches.add(command); | \n|  | } | \n|  | } | \n|  | if (matches.size() == 1) { | \n|  | replaceCurrentInput(matches.get(0)); | \n|  | } else if (matches.size() > 1) { | \n|  | terminal.append(\"\\n\"); | \n|  | for (String match : matches) { | \n|  | terminal.append(match + \" \"); | \n|  | } | \n|  | terminal.append(\"\\n\"); | \n|  | printPrompt(); | \n|  | replaceCurrentInput(input); | \n|  | } | \n|  | } | \n|  | // TERMINAL INPUT PROTECTION | \n|  | static class TerminalFilter extends DocumentFilter { | \n|  | @Override | \n|  | public void insertString( | \n|  | FilterBypass fb, | \n|  | int offset, | \n|  | String string, | \n|  | AttributeSet attr | \n|  | ) throws BadLocationException { | \n|  | if (offset >= promptPosition) { | \n|  | fb.insertString(offset, string, attr); | \n|  | } | \n|  | } | \n|  | @Override | \n|  | public void remove( | \n|  | FilterBypass fb, | \n|  | int offset, | \n|  | int length | \n|  | ) throws BadLocationException { | \n|  | if (clearingTerminal \\|\\| offset >= promptPosition) { | \n|  | int allowedLength = | \n|  | Math.min(length, fb.getDocument().getLength() - promptPosition); | \n|  | if (allowedLength > 0) { | \n|  | fb.remove(offset, allowedLength); | \n|  | } | \n|  | } | \n|  | } | \n|  | @Override | \n|  | public void replace( | \n|  | FilterBypass fb, | \n|  | int offset, | \n|  | int length, | \n|  | String text, | \n|  | AttributeSet attrs | \n|  | ) throws BadLocationException { | \n|  | if (clearingTerminal \\|\\| offset >= promptPosition) { | \n|  | int allowedLength = | \n|  | Math.min(length, fb.getDocument().getLength() - promptPosition); | \n|  | fb.replace(offset, allowedLength, text, attrs); | \n|  | } | \n|  | } | \n|  | } | \n|  | // EXECUTOR | \n|  | static void execute(String inputText) { | \n|  | if (inputText == null \\|\\| inputText.trim().isEmpty()) return; | \n|  | String command; | \n|  | String args; | \n|  | inputText = inputText.trim(); | \n|  | if (inputText.contains(\" \")) { | \n|  | command = inputText.substring(0, inputText.indexOf(\" \")); | \n|  | args = inputText.substring(inputText.indexOf(\" \") + 1); | \n|  | } | \n|  | else { | \n|  | command = inputText; | \n|  | args = \"\"; | \n|  | } | \n|  | // INLINE CALC + WAITING FOR EXPRESSION | \n|  | if (waitingForCalc) { | \n|  | try { | \n|  | String exp = inputText.trim(); | \n|  | exp = exp.replace(\"×\", \"*\").replace(\"÷\", \"/\"); | \n|  | double result = evalSimple(exp); | \n|  | terminal.append(\"= \" + result + \"\\n\"); | \n|  | } | \n|  | catch (Exception e) { | \n|  | terminal.append(\"Invalid expression\\n\"); | \n|  | } | \n|  | waitingForCalc = false; | \n|  | return; | \n|  | } | \n|  | // NOTE SYSTEM | \n|  | if (waitingForNoteAction) { | \n|  | noteAction = inputText.toLowerCase(); | \n|  | switch (noteAction) { | \n|  | case \"add\": | \n|  | terminal.append(\"Title: \"); | \n|  | waitingForNoteTitle = true; | \n|  | break; | \n|  | case \"list\": | \n|  | for (int i = 0; i < noteTitles.size(); i++) { | \n|  | terminal.append((i + 1) + \". \" + noteTitles.get(i) + \"\\n\"); | \n|  | } | \n|  | break; | \n|  | case \"view\": | \n|  | terminal.append(\"Note number: \"); | \n|  | waitingForNoteView = true; | \n|  | break; | \n|  | default: | \n|  | terminal.append(\"Unknown note command.\\n\"); | \n|  | } | \n|  | waitingForNoteAction = false; | \n|  | return; | \n|  | } | \n|  | // NOTE TITLE | \n|  | if (waitingForNoteTitle) { | \n|  | tempTitle = inputText; | \n|  | terminal.append(\"Text: \"); | \n|  | waitingForNoteTitle = false; | \n|  | waitingForNoteText = true; | \n|  | return; | \n|  | } | \n|  | // NOTE TEXT ( content ) | \n|  | if (waitingForNoteText) { | \n|  | noteTitles.add(tempTitle); | \n|  | noteTexts.add(inputText); | \n|  | terminal.append(\"Saved.\\n\"); | \n|  | waitingForNoteText = false; | \n|  | return; | \n|  | } | \n|  | // NOTE VIEW | \n|  | if (waitingForNoteView) { | \n|  | try { | \n|  | int index = Integer.parseInt(inputText) - 1; | \n|  | if (index >= 0 && index < noteTitles.size()) { | \n|  | terminal.append(\"[\" + noteTitles.get(index) + \"]\\n\"); | \n|  | terminal.append(noteTexts.get(index) + \"\\n\"); | \n|  | } | \n|  | else { | \n|  | terminal.append(\"Invalid note.\\n\"); | \n|  | } | \n|  | } | \n|  | catch (Exception e) { | \n|  | terminal.append(\"Invalid note number.\\n\"); | \n|  | } | \n|  | waitingForNoteView = false; | \n|  | // 505 - Arctic Monkeys | \n|  | return; | \n|  | } | \n|  | // *COMMAND INPUT SYSTEM* | \n|  | switch (command) { | \n|  | // HELP | \n|  | case \"help\": | \n|  | help(); | \n|  | break; | \n|  | // MAKE FOLDER | \n|  | case \"mkdir\": | \n|  | mkdir(args); | \n|  | break; | \n|  | // CREATE FILE | \n|  | case \"touch\": | \n|  | touch(args); | \n|  | break; | \n|  | // OMAR (E) | \n|  | case \"omarkhaa\": | \n|  | omar(); | \n|  | break; | \n|  | // DELETE | \n|  | case \"rm\": | \n|  | delete(args); | \n|  | break; | \n|  | // RENAME | \n|  | case \"rename\": | \n|  | rename(args); | \n|  | break; | \n|  | // COPY | \n|  | case \"copy\": | \n|  | copy(args); | \n|  | break; | \n|  | // PASTE | \n|  | case \"paste\": | \n|  | paste(); | \n|  | break; | \n|  | // MOVE | \n|  | case \"move\": | \n|  | move(args); | \n|  | break; | \n|  | // LIST | \n|  | case \"ls\": | \n|  | ls(); | \n|  | break; | \n|  | // SEARCH | \n|  | case \"search\": | \n|  | search(args); | \n|  | break; | \n|  | // READ FILE | \n|  | case \"cat\": | \n|  | cat(args); | \n|  | break; | \n|  | // WRITE FILE | \n|  | case \"write\": | \n|  | write(args); | \n|  | break; | \n|  | // CHANGE DIRECTORY | \n|  | case \"cd\": | \n|  | cd(args); | \n|  | break; | \n|  | // PATH | \n|  | case \"pwd\": | \n|  | terminal.append(currentPath.toAbsolutePath() + \"\\n\"); | \n|  | break; | \n|  | // HOME | \n|  | case \"home\": | \n|  | currentPath = homePath; | \n|  | terminal.append(currentPath.toAbsolutePath() + \"\\n\"); | \n|  | break; | \n|  | // 7743 (E) | \n|  | case \"7743\": | \n|  | seven(); | \n|  | break; | \n|  | // YSH (E) | \n|  | case \"YSH\": | \n|  | ysh(); | \n|  | break; | \n|  | // BRUH (E) | \n|  | case\"bruh\": | \n|  | bruh(); | \n|  | break; | \n|  | // APPOCALYPSE (E) | \n|  | case \"appocalypse\": | \n|  | appocalypse(); | \n|  | break; | \n|  | // THANKS (E) | \n|  | case \"thanks\": | \n|  | thanks(); | \n|  | break; | \n|  | // CALCULATOR - CLI | \n|  | case \"calc\": | \n|  | terminal.append(\"Expression: \"); | \n|  | waitingForCalc = true; | \n|  | break; | \n|  | // ECHO | \n|  | case \"echo\": | \n|  | terminal.append(args + \"\\n\"); | \n|  | break; | \n|  | // CLEAR | \n|  | case \"clear\": | \n|  | case \"cls\": | \n|  | clearTerminal(); | \n|  | break; | \n|  | // DATE AND TIME | \n|  | case \"whatsup\": | \n|  | terminal.append(new Date().toString()+ \"\\n\"); | \n|  | break; | \n|  | // SYSTEM INFORMATION | \n|  | case \"sysinfo\": | \n|  | sysinfo(); | \n|  | break; | \n|  | // THEME | \n|  | case \"theme\": | \n|  | setTheme(args); | \n|  | break; | \n|  | // CHECK | \n|  | case \"check\": | \n|  | check(); | \n|  | break; | \n|  | // DEVELOPER MODE | \n|  | case \"developer\": | \n|  | developerMode = !developerMode; | \n|  | if(developerMode) { | \n|  | devmode(); | \n|  | } | \n|  | else { | \n|  | terminal.append(\"Developer Mode disabled.\\n\"); | \n|  | } | \n|  | break; | \n|  | // OPEN / RUN APP | \n|  | case \"open\": | \n|  | case \"run\": | \n|  | openApp(args); | \n|  | break; | \n|  | // EXIT | \n|  | case \"exit\": | \n|  | System.exit(0); | \n|  | break; | \n|  | // NOTE - CLI | \n|  | case \"note\": | \n|  | terminal.append(\"Commands: add, list, view\\n\"); | \n|  | waitingForNoteAction = true; | \n|  | break; | \n|  | // TANVEER (E) | \n|  | case \"tanveer\": | \n|  | case \"tanvir\": | \n|  | tanveer(); | \n|  | break; | \n|  | // IBRAHIM (E) | \n|  | case \"ibrahim\": | \n|  | ibrahim(); | \n|  | break; | \n|  | // MUQTADIR (E) | \n|  | case \"muqtadir\": | \n|  | muqtadir();; | \n|  | break; | \n|  | // MANZIL (E) | \n|  | case \"manzil\": | \n|  | manzil(); | \n|  | break; | \n|  | // CHAT | \n|  | case \"chat\": | \n|  | chatCommand(args); | \n|  | break; | \n|  | // SCAN CHATROOMS | \n|  | case \"scan\": | \n|  | scanLAN(); | \n|  | break; | \n|  | // MESSAGE | \n|  | case \"msg\": | \n|  | sendMsg(args); | \n|  | break; | \n|  | // USERNAME | \n|  | case \"username\": | \n|  | setUsername(args); | \n|  | break; | \n|  | // LIST USERS | \n|  | case \"listusers\": | \n|  | listUsers(); | \n|  | break; | \n|  | // KICK USER | \n|  | case \"kick\": | \n|  | kickUser(args); | \n|  | break; | \n|  | // ANNOUNCEMENT | \n|  | case \"announce\": | \n|  | announce(args); | \n|  | break; | \n|  | // FILE SHARE | \n|  | case \"fileshare\": | \n|  | fileShareCommand(args); | \n|  | break; | \n|  | // SUDO (E) | \n|  | case \"sudo\": | \n|  | sudo(); | \n|  | break; | \n|  | // WHOAMI (E) | \n|  | case \"whoami\": | \n|  | whoami(); | \n|  | break; | \n|  | // CREATOR (E) | \n|  | case \"whocreatedyou\": | \n|  | creator(); | \n|  | break; | \n|  | // EASTER EGG AHH (E) | \n|  | case \"easteregg\": | \n|  | easter(); | \n|  | break; | \n|  | default: | \n|  | terminal.append( command + \" is not recognized as an System or LAN command.\\n\"); | \n|  | } | \n|  | } | \n|  | // DELETE FILE OR DIRECTORY FUNCTION | \n|  | static void delete(String name) { | \n|  | if (name.isEmpty()) { | \n|  | terminal.append(\"usage: rm name\\n\"); | \n|  | return; | \n|  | } | \n|  | try { | \n|  | Path target = currentPath.resolve(name).normalize(); | \n|  | if (!Files.exists(target)) { | \n|  | terminal.append(\"rm: not found\\n\"); | \n|  | return; | \n|  | } | \n|  | Files.delete(target); | \n|  | terminal.append( | \n|  | Files.isDirectory(target) | \n|  | ? \"folder deleted\\n\" | \n|  | : \"file deleted\\n\" | \n|  | ); | \n|  | } catch (DirectoryNotEmptyException e) { | \n|  | terminal.append(\"rm: directory not empty\\n\"); | \n|  | } catch (IOException e) { | \n|  | terminal.append(\"rm: \" + e.getMessage() + \"\\n\"); | \n|  | } | \n|  | } | \n|  | // MAKE DIRECTORY FUNCTION | \n|  | static void mkdir(String name) { | \n|  | if (name.isEmpty()) { | \n|  | terminal.append(\"usage: mkdir name\\n\"); | \n|  | return; | \n|  | } | \n|  | try { | \n|  | Path directory = currentPath.resolve(name).normalize(); | \n|  | if (Files.exists(directory)) { | \n|  | terminal.append(\"mkdir: already exists\\n\"); | \n|  | return; | \n|  | } | \n|  | Files.createDirectory(directory); | \n|  | terminal.append(\"folder created\\n\"); | \n|  | } catch (IOException e) { | \n|  | terminal.append(\"mkdir: \" + e.getMessage() + \"\\n\"); | \n|  | } | \n|  | } | \n|  | // SYSTEM INFORMATION FUNCTION | \n|  | static void sysinfo() { | \n|  | terminal.append(\" \\n\"); | \n|  | terminal.append(\"OS: \"+ System.getProperty(\"os.name\")+ \"\\n\"); | \n|  | terminal.append(\"Version: \"+ System.getProperty(\"os.version\")+ \"\\n\"); | \n|  | terminal.append(\"User: \"+ System.getProperty(\"user.name\")+ \"\\n\"); | \n|  | terminal.append(\"CPU cores: \"+ Runtime.getRuntime().availableProcessors()+ \"\\n\"); | \n|  | terminal.append(\"Total Memory: \"+ Runtime.getRuntime().totalMemory()/1024/1024+ \"Mb\\n\"); | \n|  | terminal.append(\"Max Memory: \"+ Runtime.getRuntime().maxMemory()/1024/1024+ \"Mb\\n\"); | \n|  | terminal.append(\"Free Memory: \"+ Runtime.getRuntime().freeMemory()/1024/1024+ \"Mb\\n\"); | \n|  | terminal.append(\" or better type \"+\" open System Information\"); | \n|  | terminal.append(\" \\|\\| better type \"+\" run System Information\"); | \n|  | terminal.append(\" \\n\"); | \n|  | } | \n|  | // HELP FUNCTION | \n|  | static void help() { | \n|  | terminal.append(\"\"\" | \n|  | ===================== YSH HELP ================================= | \n|  | FILE COMMANDS-- | \n|  | mkdir \"name\" -> create a folder | \n|  | touch \"name\" -> create a file | \n|  | rm \"name\" -> delete a file or folder | \n|  | rename \"oldname\" \"newname\" -> rename a file or folder | \n|  | copy \"name\" -> copy a file or folder | \n|  | paste -> paste copied item | \n|  | move \"folder/file\" -> move file/folder | \n|  | ls -> list contents | \n|  | search \"name\" -> search files/folders | \n|  | MODE-- | \n|  | developer -> Developer mode | \n|  | up up down down < > < > B A -> Konami Developer Code | \n|  | KDE Plasma (for Arch users) -> \\|\\|~ (COMMING SOON) ~\\|\\| | \n|  | FILE CONTENT-- | \n|  | cat \"file\" -> read file contents | \n|  | write \"file\" \"text\" -> write text to file | \n|  | NAVIGATION-- | \n|  | cd \"folder\" -> enter folder | \n|  | cd .. -> go back | \n|  | pwd -> show current path | \n|  | home -> go to root | \n|  | SYSTEM-- | \n|  | calc -> to perform calculations | \n|  | echo \"text\" -> print text | \n|  | clear -> clear terminal | \n|  | whatsup -> date and time | \n|  | sysinfo -> system information | \n|  | theme \"name\" -> change theme | \n|  | open \"app\" -> launch app | \n|  | run \"app\" -> launch app | \n|  | check -> YSH check | \n|  | help -> show commands | \n|  | exit -> close YSH | \n|  | easteregg -> helping msg | \n|  | NETWORK / CHAT-- | \n|  | chat host -> start chat server | \n|  | chat join \"ip\" -> join LAN chat | \n|  | msg \"text\" -> send message | \n|  | FILE SHARE-- | \n|  | fileshare host -> start file server on port 6001 | \n|  | fileshare get \"ip\" \"filename\" -> get text file from host | \n|  | NOTES-- | \n|  | note add -> add notes | \n|  | note list -> list notes | \n|  | note view -> view the saved notes according | \n|  | to their serial in note list | \n|  | THEMES-- | \n|  | matrix \\| blue \\| purple \\| red \\| dark \\| light | \n|  | ================================================================ | \n|  | \"\"\"); | \n|  | } | \n|  | // 7743 FUNCTION | \n|  | static void seven() { | \n|  | terminal.append(\"\"\" | \n|  | Found an Easter Egg there are more. | \n|  | Learn Java. | \n|  | github.com/YousufProjs-exe | \n|  | \"\"\"); | \n|  | } | \n|  | // APPOCALYPSE FUNCTION | \n|  | static void appocalypse() { | \n|  | terminal.append(\"\"\" | \n|  | No internet? | \n|  | No problem | \n|  | YSH LAN is built for this. | \n|  | \"\"\"); | \n|  | } | \n|  | // THNAKS FUNCTION | \n|  | static void thanks() { | \n|  | terminal.append(\"\"\" | \n|  | Thanks for using YSH. | \n|  | Report bugs on github. | \n|  | github.com/YousufProjs-exe | \n|  | and its my pleasure. | \n|  | \"\"\"); | \n|  | } | \n|  | // TANVEER FUNCTION | \n|  | static void tanveer() { | \n|  | terminal.append(\"\"\" | \n|  | Tanveer D. Luffy | \n|  | watch MHA & Your Name buddy. | \n|  | Lol!! MHA won the anime of the year | \n|  | \"\"\"); | \n|  | } | \n|  | // IBRAHIM FUNCTION | \n|  | static void ibrahim() { | \n|  | terminal.append(\"\"\" | \n|  | Ibrahim M. Zoro | \n|  | watch A Silent Voice buddy. | \n|  | ~ Dabi, Toya Todoroki | \n|  | \"\"\"); | \n|  | } | \n|  | // MUQTADIR FUNCTION | \n|  | static void muqtadir() { | \n|  | terminal.append(\"\"\" | \n|  | Muqtadir Jiraiya | \n|  | watch MHA & Another World buddy. | \n|  | rynosuke | \n|  | \"\"\"); | \n|  | } | \n|  | // MANZIL FUNCTION | \n|  | static void manzil() { | \n|  | terminal.append(\"\"\" | \n|  | Faxeel PVP Master | \n|  | and.... idk | \n|  | \"\"\"); | \n|  | } | \n|  | // OMAR FUNCTION | \n|  | static void omar() { | \n|  | terminal.append(\"\"\" | \n|  | OMAR KHAAAA | \n|  | PRO MC and idk... | \n|  | \"\"\"); | \n|  | } | \n|  | // SUDO FUNCTION | \n|  | static void sudo() { | \n|  | terminal.append(\"\"\" | \n|  | Administrator privilages denied. | \n|  | Nice try Linux user | \n|  | Reason: | \n|  | You are not him. | \n|  | \"\"\"); | \n|  | } | \n|  | // WHOAMI FUNCTION | \n|  | static void whoami() { | \n|  | terminal.append(\"\"\" | \n|  | Guest / Bot / maybe a NPC | \n|  | \"\"\"); | \n|  | } | \n|  | // WHOCREATEDYOU FUNCTION | \n|  | static void creator() { | \n|  | terminal.append(\"\"\" | \n|  | Built by: | \n|  | Khaja Yousuf Uddin \\|\\| Saad | \n|  | ~ yousuf.env | \n|  | ~ YousufProjs-exe | \n|  | \"\"\"); | \n|  | } | \n|  | // EASTER EGG FUNCTION | \n|  | static void easter() { | \n|  | terminal.append(\"\"\" | \n|  | Life aint this easy bruh.. | \n|  | Hidden archive found. | \n|  | \"THE SHELL REMEMBERS\". | \n|  | \"\"\"); | \n|  | } | \n|  | // YSH FUNCTION | \n|  | static void ysh() { | \n|  | terminal.append(\"\"\" | \n|  | huh try something better... | \n|  | something like: \"7743\" , \"appocalypse\" & \"easteregg\" | \n|  | \"\"\"); | \n|  | } | \n|  | // BRUH FUNCTION | \n|  | static void bruh() { | \n|  | terminal.append(\"\"\" | \n|  | wdym??! | \n|  | better try \"help\" | \n|  | \"\"\"); | \n|  | } | \n|  | // CHECK FUNCTION | \n|  | static void check() { | \n|  | try { | \n|  | terminal.append(\"Booting YSH\"); | \n|  | Thread.sleep(500); | \n|  | terminal.append(\".\"); | \n|  | Thread.sleep(600); | \n|  | terminal.append(\"..\"); | \n|  | Thread.sleep(700); | \n|  | terminal.append(\"...\\n\"); | \n|  | terminal.append(\"[OK] Filesystem\\n\"); | \n|  | terminal.append(\"[OK] Calculator\\n\"); | \n|  | terminal.append(\"[OK] Notes\\n\"); | \n|  | terminal.append(\"[OK] LAN Chat\\n\"); | \n|  | terminal.append(\"[OK] File Share\\n\\n\"); | \n|  | } | \n|  | catch (InterruptedException e) { | \n|  | terminal.append(\"[ERROR 7743] Contact Yousuf\"); | \n|  | } | \n|  | } | \n|  | // CLEAR TERMINAL | \n|  | static void clearTerminal() { | \n|  | javax.swing.text.AbstractDocument doc = | \n|  | (javax.swing.text.AbstractDocument) terminal.getDocument(); | \n|  | javax.swing.text.DocumentFilter oldFilter = | \n|  | doc.getDocumentFilter(); | \n|  | doc.setDocumentFilter(null); | \n|  | terminal.setText(\"\"); | \n|  | doc.setDocumentFilter(oldFilter); | \n|  | promptPosition = 0; | \n|  | printBanner(); | \n|  | } | \n|  | // DEVMODE FUNCTION | \n|  | static void devmode() { | \n|  | terminal.append(\"\"\" | \n|  | __ __ _______ __ __ | \n|  | __ __ \\|\\| \\|\\| \\|\\| | \n|  | __ __ \\|\\| \\|\\| \\|\\| | \n|  | __ \\|\\|_____ \\|\\|_____\\|\\| | \n|  | __ \\|\\| \\|\\| \\|\\| | \n|  | __ \\|\\| \\|\\| \\|\\| | \n|  | __ _____\\|\\| __ __ | \n|  | ______________________________ | \n|  | YSH TERMINAL v7 | \n|  | Developer Edition | \n|  | ______________________________ | \n|  | Status : Ready | \n|  | JDK : 17 | \n|  | Mode : GUI DEV EDITION | \n|  | Type 'help' or continue anyways. | \n|  | \"\"\"); | \n|  | } | \n|  | // CREATE FILE FUNCTION | \n|  | static void touch(String name) { | \n|  | if (name.isEmpty()) { | \n|  | terminal.append(\"usage: touch name\\n\"); | \n|  | return; | \n|  | } | \n|  | try { | \n|  | Path file = currentPath.resolve(name).normalize(); | \n|  | if (Files.exists(file)) { | \n|  | terminal.append(\"touch: file already exists\\n\"); | \n|  | return; | \n|  | } | \n|  | Files.createFile(file); | \n|  | terminal.append(\"file created\\n\"); | \n|  | } catch (IOException e) { | \n|  | terminal.append(\"touch: \" + e.getMessage() + \"\\n\"); | \n|  | } | \n|  | } | \n|  | // CD FUNCTION | \n|  | static void cd(String name) { | \n|  | if (name.isEmpty()) { | \n|  | terminal.append(\"usage: cd directory\\n\"); | \n|  | return; | \n|  | } | \n|  | try { | \n|  | Path target; | \n|  | if (name.equals(\"..\")) { | \n|  | target = currentPath.getParent(); | \n|  | if (target == null) { | \n|  | return; | \n|  | } | \n|  | } else if (name.equals(\"~\") \\|\\| name.equals(\"/\")) { | \n|  | target = homePath; | \n|  | } else { | \n|  | target = currentPath.resolve(name); | \n|  | } | \n|  | target = target.normalize(); | \n|  | if (!Files.exists(target)) { | \n|  | terminal.append(\"cd: no such file or directory\\n\"); | \n|  | return; | \n|  | } | \n|  | if (!Files.isDirectory(target)) { | \n|  | terminal.append(\"cd: not a directory\\n\"); | \n|  | return; | \n|  | } | \n|  | currentPath = target; | \n|  | } catch (Exception e) { | \n|  | terminal.append(\"cd: \" + e.getMessage() + \"\\n\"); | \n|  | } | \n|  | } | \n|  | // LIST FILESYSTEM | \n|  | static void ls() { | \n|  | try { | \n|  | try (DirectoryStream<Path> stream = Files.newDirectoryStream(currentPath)) { | \n|  | for (Path path : stream) { | \n|  | if (Files.isDirectory(path)) { | \n|  | terminal.append(\"[DIR] \" + path.getFileName() + \"\\n\"); | \n|  | } else { | \n|  | terminal.append(\"[FILE] \" + path.getFileName() + \"\\n\"); | \n|  | } | \n|  | } | \n|  | } | \n|  | } catch (IOException e) { | \n|  | terminal.append(\"ls: \" + e.getMessage() + \"\\n\"); | \n|  | } | \n|  | } | \n|  | // READ FUNCTION | \n|  | static void cat(String name) { | \n|  | if (name.isEmpty()) { | \n|  | terminal.append(\"usage: cat file\\n\"); | \n|  | return; | \n|  | } | \n|  | try { | \n|  | Path file = currentPath.resolve(name).normalize(); | \n|  | if (!Files.exists(file)) { | \n|  | terminal.append(\"cat: file not found\\n\"); | \n|  | return; | \n|  | } | \n|  | if (!Files.isRegularFile(file)) { | \n|  | terminal.append(\"cat: not a file\\n\"); | \n|  | return; | \n|  | } | \n|  | String content = Files.readString(file); | \n|  | terminal.append(content); | \n|  | if (!content.endsWith(\"\\n\")) { | \n|  | terminal.append(\"\\n\"); | \n|  | } | \n|  | } catch (IOException e) { | \n|  | terminal.append(\"cat: \" + e.getMessage() + \"\\n\"); | \n|  | } | \n|  | } | \n|  | // WRITE FILE FUNCTION | \n|  | static void write(String args) { | \n|  | if (args.isEmpty()) { | \n|  | terminal.append(\"usage: write file text\\n\"); | \n|  | return; | \n|  | } | \n|  | String[] p = args.split(\" \", 2); | \n|  | if (p.length < 2) { | \n|  | terminal.append(\"usage: write file text\\n\"); | \n|  | return; | \n|  | } | \n|  | try { | \n|  | Path file = currentPath.resolve(p[0]).normalize(); | \n|  | if (!Files.exists(file)) { | \n|  | terminal.append(\"write: file not found\\n\"); | \n|  | return; | \n|  | } | \n|  | if (!Files.isRegularFile(file)) { | \n|  | terminal.append(\"write: not a file\\n\"); | \n|  | return; | \n|  | } | \n|  | Files.writeString( | \n|  | file, | \n|  | p[1], | \n|  | StandardOpenOption.TRUNCATE_EXISTING | \n|  | ); | \n|  | terminal.append(\"written\\n\"); | \n|  | } catch (IOException e) { | \n|  | terminal.append(\"write: \" + e.getMessage() + \"\\n\"); | \n|  | } | \n|  | } | \n|  | // RENAME FILE OR DIRECTORY FUNCTION | \n|  | static void rename(String args) { | \n|  | String[] p = args.split(\" \", 2); | \n|  | if (p.length < 2) { | \n|  | terminal.append(\"usage: rename oldname newname\\n\"); | \n|  | return; | \n|  | } | \n|  | try { | \n|  | Path oldPath = currentPath.resolve(p[0]).normalize(); | \n|  | Path newPath = currentPath.resolve(p[1]).normalize(); | \n|  | if (!Files.exists(oldPath)) { | \n|  | terminal.append(\"rename: not found\\n\"); | \n|  | return; | \n|  | } | \n|  | if (Files.exists(newPath)) { | \n|  | terminal.append(\"rename: destination already exists\\n\"); | \n|  | return; | \n|  | } | \n|  | Files.move(oldPath, newPath); | \n|  | terminal.append(\"renamed\\n\"); | \n|  | } catch (IOException e) { | \n|  | terminal.append(\"rename: \" + e.getMessage() + \"\\n\"); | \n|  | } | \n|  | } | \n|  | // COPY FILE OR DIRECTORY FUNCTION | \n|  | static void copy(String name) { | \n|  | if (name.isEmpty()) { | \n|  | terminal.append(\"usage: copy name\\n\"); | \n|  | return; | \n|  | } | \n|  | Path source = currentPath.resolve(name).normalize(); | \n|  | if (!Files.exists(source)) { | \n|  | terminal.append(\"copy: not found\\n\"); | \n|  | return; | \n|  | } | \n|  | copiedPath = source; | \n|  | terminal.append( | \n|  | Files.isDirectory(source) | \n|  | ? \"folder copied\\n\" | \n|  | : \"file copied\\n\" | \n|  | ); | \n|  | } | \n|  | // PASTE FILE OR DIRECTORY FUNCTION | \n|  | static void paste() { | \n|  | if (copiedPath == null) { | \n|  | terminal.append(\"nothing copied\\n\"); | \n|  | return; | \n|  | } | \n|  | try { | \n|  | if (!Files.exists(copiedPath)) { | \n|  | terminal.append(\"paste: source no longer exists\\n\"); | \n|  | copiedPath = null; | \n|  | return; | \n|  | } | \n|  | Path destination = | \n|  | currentPath.resolve(copiedPath.getFileName().toString() + \"_copy\"); | \n|  | if (Files.exists(destination)) { | \n|  | terminal.append(\"paste: destination already exists\\n\"); | \n|  | return; | \n|  | } | \n|  | if (Files.isDirectory(copiedPath)) { | \n|  | Files.createDirectory(destination); | \n|  | } else { | \n|  | Files.copy(copiedPath, destination); | \n|  | } | \n|  | terminal.append(\"pasted\\n\"); | \n|  | } catch (IOException e) { | \n|  | terminal.append(\"paste: \" + e.getMessage() + \"\\n\"); | \n|  | } | \n|  | } | \n|  | // MOVE FILE OR DIRECTORY FUNCTION | \n|  | static void move(String args) { | \n|  | String[] p = args.split(\" \", 2); | \n|  | if (p.length < 2) { | \n|  | terminal.append(\"usage: move item destination\\n\"); | \n|  | return; | \n|  | } | \n|  | try { | \n|  | Path source = currentPath.resolve(p[0]).normalize(); | \n|  | Path destination = currentPath.resolve(p[1]).normalize(); | \n|  | if (!Files.exists(source)) { | \n|  | terminal.append(\"move: source not found\\n\"); | \n|  | return; | \n|  | } | \n|  | if (!Files.exists(destination)) { | \n|  | terminal.append(\"move: destination not found\\n\"); | \n|  | return; | \n|  | } | \n|  | if (!Files.isDirectory(destination)) { | \n|  | terminal.append(\"move: destination is not a directory\\n\"); | \n|  | return; | \n|  | } | \n|  | Path target = | \n|  | destination.resolve(source.getFileName().toString()); | \n|  | if (Files.exists(target)) { | \n|  | terminal.append(\"move: destination already exists\\n\"); | \n|  | return; | \n|  | } | \n|  | Files.move(source, target); | \n|  | terminal.append(\"moved\\n\"); | \n|  | } catch (IOException e) { | \n|  | terminal.append(\"move: \" + e.getMessage() + \"\\n\"); | \n|  | } | \n|  | } | \n|  | // SEARCH FILESYSTEM | \n|  | static void search(String keyword) { | \n|  | if (keyword.isEmpty()) { | \n|  | terminal.append(\"usage: search name\\n\"); | \n|  | return; | \n|  | } | \n|  | final String target = keyword.toLowerCase(); | \n|  | boolean found = false; | \n|  | try { | \n|  | try (var stream = Files.walk(currentPath)) { | \n|  | for (Path path : (Iterable<Path>) stream::iterator) { | \n|  | if (path.equals(currentPath)) { | \n|  | continue; | \n|  | } | \n|  | String name = path.getFileName().toString(); | \n|  | if (name.toLowerCase().contains(target)) { | \n|  | if (Files.isDirectory(path)) { | \n|  | terminal.append(\"[DIR] \" + path + \"\\n\"); | \n|  | } else { | \n|  | terminal.append(\"[FILE] \" + path + \"\\n\"); | \n|  | } | \n|  | found = true; | \n|  | } | \n|  | } | \n|  | } | \n|  | } catch (IOException e) { | \n|  | terminal.append(\"search: \" + e.getMessage() + \"\\n\"); | \n|  | return; | \n|  | } | \n|  | if (!found) { | \n|  | terminal.append(\"nothing found\\n\"); | \n|  | } | \n|  | } | \n|  | // LAUNCH APP SYSTEM | \n|  | static void openApp(String app) { | \n|  | try { | \n|  | switch (app.toLowerCase()) { | \n|  | case \"notepad\": | \n|  | Runtime.getRuntime().exec(\"cmd /c start notepad\"); | \n|  | break; | \n|  | case \"calc\": | \n|  | Runtime.getRuntime().exec(\"cmd /c start calc\"); | \n|  | break; | \n|  | case \"chrome\": | \n|  | Runtime.getRuntime().exec(\"cmd /c start chrome\"); | \n|  | break; | \n|  | case \"System Information\": | \n|  | Runtime.getRuntime().exec(\"cmd /c start System Information\"); | \n|  | break; | \n|  | default: | \n|  | Runtime.getRuntime().exec(\"cmd /c start \" + app); | \n|  | } | \n|  | terminal.append(\"app launched\\n\"); | \n|  | } | \n|  | catch (Exception e) { | \n|  | terminal.append(\"failed to launch\\n\"); | \n|  | } | \n|  | } | \n|  | // CHAT SYSTEM | \n|  | static void chatCommand(String arg) { | \n|  | try { | \n|  | if (arg.equals(\"host\")) { | \n|  | serverSocket = new ServerSocket(6000); | \n|  | isChatRunning = true; | \n|  | isHost = true; | \n|  | terminal.append(\"chat server started on port 6000\\n\"); | \n|  | new Thread(() -> { | \n|  | while (true) { | \n|  | try { | \n|  | Socket clientSocket = serverSocket.accept(); | \n|  | ClientHandler client = new ClientHandler(clientSocket); | \n|  | clients.add(client); | \n|  | client.start(); | \n|  | } | \n|  | catch (Exception e) { | \n|  | break; | \n|  | } | \n|  | } | \n|  | }).start(); | \n|  | } | \n|  | else if (arg.startsWith(\"join\")) { | \n|  | // BOARD @%25 NUMBER !$# 143 @ 1430 | \n|  | String[] p = arg.split(\" \"); | \n|  | if (p.length < 2) { | \n|  | terminal.append(\"usage: chat join ip\\n\"); | \n|  | return; | \n|  | } | \n|  | String ip = p[1]; | \n|  | socket = new Socket(ip, 6000); | \n|  | in = new BufferedReader( | \n|  | new InputStreamReader(socket.getInputStream()) | \n|  | ); | \n|  | out = new PrintWriter( | \n|  | socket.getOutputStream(), | \n|  | true | \n|  | ); | \n|  | isChatRunning = true; | \n|  | out.println(username); | \n|  | new Thread(() -> { | \n|  | try { | \n|  | String msg; | \n|  | while ((msg = in.readLine())!= null) { | \n|  | terminal.append(msg + \"\\n\"); | \n|  | } | \n|  | } | \n|  | catch (Exception e) { | \n|  | terminal.append(\"Disconnected\\n\"); | \n|  | } | \n|  | }).start(); | \n|  | terminal.append(\"connected to \" + ip + \"\\n\"); | \n|  | } | \n|  | } | \n|  | catch (Exception e) { | \n|  | terminal.append(\"Connection Failed\\n\"); | \n|  | } | \n|  | } | \n|  | // MESSAGE SYSTEM | \n|  | static void sendMsg(String msg) { | \n|  | if (!isChatRunning) { | \n|  | terminal.append(\"chat not running\\n\"); | \n|  | return; | \n|  | } | \n|  | if (!isHost && out!= null) { | \n|  | out.println(msg); | \n|  | } | \n|  | else if (isHost) { | \n|  | terminal.append(\"[YOU]: \" + msg + \"\\n\"); | \n|  | broadcast(\"[\" + username + \"]: \" + msg); | \n|  | // 505 at 1505 | \n|  | } | \n|  | } | \n|  | // CLIENT SYSTEM | \n|  | static void broadcast(String msg) { | \n|  | for (ClientHandler client : clients) { | \n|  | client.send(msg); | \n|  | } | \n|  | } | \n|  | // USERNAME SYSTEM | \n|  | static void setUsername(String name) { | \n|  | if (name.isEmpty()) { | \n|  | terminal.append(\"usage: username name\\n\"); | \n|  | return; | \n|  | } | \n|  | username = name; | \n|  | terminal.append(\"username set to \" + username + \"\\n\"); | \n|  | if (isChatRunning && out!= null) { | \n|  | out.println(username); | \n|  | } | \n|  | } | \n|  | // FILE TRANSFER SERVER - HOST | \n|  | static void isFileServer() { | \n|  | if (isFileServerRunning) | \n|  | return; | \n|  | isFileServerRunning = true; | \n|  | new Thread(() -> { | \n|  | try { | \n|  | fileServerSocket = new ServerSocket(6001); | \n|  | terminal.append(\"File server started on port 6001\\n\"); | \n|  | while(true) { | \n|  | Socket fs = fileServerSocket.accept(); | \n|  | new Thread(() -> handleFileTransfer(fs)).start(); | \n|  | } | \n|  | } | \n|  | catch (Exception e) { | \n|  | terminal.append(\"File server error\\n\"); | \n|  | } | \n|  | }).start(); | \n|  | } | \n|  | // FILE TRANSFER HANDLER | \n|  | static void handleFileTransfer(Socket fs) { | \n|  | try { | \n|  | BufferedReader fin = new BufferedReader(new InputStreamReader(fs.getInputStream())); | \n|  | PrintWriter fout = new PrintWriter(fs.getOutputStream(), true); | \n|  | String request = fin.readLine(); | \n|  | if (request != null && request.startsWith(\"GET \")) { | \n|  | String filename = request.substring(4); | \n|  | Path file = currentPath.resolve(filename).normalize(); | \n|  | if (Files.exists(file) && Files.isRegularFile(file)) { | \n|  | fout.println(\"OK\"); | \n|  | fout.println(Files.readString(file)); | \n|  | terminal.append( | \n|  | \"Sent file: \" + filename + \"\\n\" | \n|  | ); | \n|  | } | \n|  | else { | \n|  | fout.println(\"NOTFOUND\"); | \n|  | } | \n|  | fs.close(); | \n|  | return; | \n|  | } | \n|  | } | \n|  | catch (Exception e) { | \n|  | terminal.append(\"File transfer error\\n\"); | \n|  | } | \n|  | } | \n|  | // FILE SHARE SYSTEM | \n|  | static void fileShareCommand(String args) { | \n|  | String[] p = args.split(\" \"); | \n|  | if (p.length == 0) { | \n|  | terminal.append(\"usage: fileshare host \\| fileshare get ip filename\\n\"); | \n|  | return; | \n|  | } | \n|  | if (p[0].equals(\"host\")) { | \n|  | isFileServer(); | \n|  | } | \n|  | else if (p[0].equals(\"get\")) { | \n|  | if (p.length < 3) { | \n|  | terminal.append(\"usage: fileshare get ip filename\\n\"); | \n|  | return; | \n|  | } | \n|  | String ip = p[1]; | \n|  | String filename = p[2]; | \n|  | new Thread(() -> { | \n|  | try { | \n|  | Socket s = new Socket(ip, 6001); | \n|  | PrintWriter pw = new PrintWriter(s.getOutputStream(), true); | \n|  | BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); | \n|  | // longest line | \n|  | pw.println(\"GET \" + filename); | \n|  | String status = br.readLine(); | \n|  | if (\"OK\".equals(status)) { | \n|  | String content = br.readLine(); | \n|  | Path file = currentPath.resolve(filename).normalize(); | \n|  | Files.writeString( | \n|  | file, | \n|  | content, | \n|  | StandardOpenOption.CREATE, | \n|  | StandardOpenOption.TRUNCATE_EXISTING | \n|  | ); | \n|  | terminal.append( | \n|  | \"File received: \" + filename + \"\\n\" | \n|  | ); | \n|  | } | \n|  | else { | \n|  | terminal.append(\"File not found on host\\n\"); | \n|  | } | \n|  | s.close(); | \n|  | } | \n|  | catch (Exception e) { | \n|  | terminal.append(\"Failed to get file\\n\"); | \n|  | } | \n|  | }).start(); | \n|  | } | \n|  | } | \n|  | // LIST USERS FUNCTION | \n|  | static void listUsers() { | \n|  | if (!isHost) { | \n|  | terminal.append(\"host only command\\n\"); | \n|  | return; | \n|  | } | \n|  | terminal.append(\"Connected Users:\\n\"); | \n|  | for (ClientHandler c : clients) { | \n|  | terminal.append(c.username + \"\\n\"); | \n|  | } | \n|  | } | \n|  | // KICK USER SYSTEM | \n|  | static void kickUser(String name) { | \n|  | if (!isHost) { | \n|  | terminal.append(\"host only command\\n\"); | \n|  | return; | \n|  | } | \n|  | for (ClientHandler c : clients) { | \n|  | if (c.username.equals(name)) { | \n|  | c.send(\"[SYSTEM] You were kicked\"); | \n|  | try { | \n|  | c.socket.close(); | \n|  | } | \n|  | catch (Exception ignored) {} | \n|  | clients.remove(c); | \n|  | terminal.append(name + \" kicked\\n\"); | \n|  | return; | \n|  | } | \n|  | } | \n|  | terminal.append(\"user not found\\n\"); | \n|  | } | \n|  | // ANNOUNCEMENT FUNCTION | \n|  | static void announce(String msg) { | \n|  | if (!isHost) { | \n|  | terminal.append(\"host only command\\n\"); | \n|  | return; | \n|  | } | \n|  | broadcast(\"[ANNOUNCEMENT]: \" + msg); | \n|  | terminal.append(\"announcement sent\\n\"); | \n|  | } | \n|  | // SCAN CHATROOM SYSTEM | \n|  | static void scanLAN() { | \n|  | terminal.append(\"Scanning network...\\n\"); | \n|  | new Thread(() -> { | \n|  | try { | \n|  | String localIP = InetAddress.getLocalHost().getHostAddress(); | \n|  | String subnet = localIP.substring(0, localIP.lastIndexOf(\".\") + 1); | \n|  | for (int i = 1; i <= 254; i++) { | \n|  | String host = subnet + i; | \n|  | try { | \n|  | InetAddress address = InetAddress.getByName(host); | \n|  | if (address.isReachable(200)) { | \n|  | SwingUtilities.invokeLater(() -> | \n|  | terminal.append(\"[ONLINE] \" + host + \"\\n\") | \n|  | ); | \n|  | } | \n|  | } catch (Exception ignored) {} | \n|  | } | \n|  | SwingUtilities.invokeLater(() -> | \n|  | terminal.append(\"Scan complete.\\n\") | \n|  | ); | \n|  | } | \n|  | catch (Exception e) { | \n|  | terminal.append(\"Scan failed.\\n\"); | \n|  | } | \n|  | }).start(); | \n|  | } | \n|  | // *BANNER* | \n|  | static void printBanner() { | \n|  | terminal.append(\"YSH - Yousuf Shell [Version v8.GUI]\\n\"); | \n|  | terminal.append(\"(c) K.Yousuf 25061-CS-010\\n\"); | \n|  | terminal.append(\"Type 'help' to see available commands\\n\\n\"); | \n|  | } | \n|  | // SHELL PROMPT | \n|  | static void printPrompt() { | \n|  | currentPrompt = developerMode | \n|  | ? \">_ \" | \n|  | : \"YSH /> \"; | \n|  | terminal.append(currentPrompt); | \n|  | promptPosition = | \n|  | terminal.getDocument().getLength(); | \n|  | } | \n|  | // TIME GREETING | \n|  | static void timeGreeting() { | \n|  | Calendar cal = Calendar.getInstance(); | \n|  | int hour = cal.get(Calendar.HOUR_OF_DAY); | \n|  | if (hour >= 0 && hour < 5) { | \n|  | terminal.append(\"\"\" | \n|  | ________________________________ | \n|  | Late Night Session on YSH | \n|  | Respect. | \n|  | also try \"theme dark\" | \n|  | ________________________________ | \n|  | \\n \"\"\"); | \n|  | } | \n|  | } | \n|  | // DEFAULT THEME SYSTEM | \n|  | static void applyTheme() { | \n|  | terminal.setBackground(bgColor); | \n|  | terminal.setForeground(textColor); | \n|  | terminal.setCaretColor(textColor); | \n|  | } | \n|  | // CUSTOM THEME SYSTEM | \n|  | static void setTheme(String t) { | \n|  | switch (t.toLowerCase()) { | \n|  | case \"matrix\": | \n|  | bgColor = Color.BLACK; | \n|  | textColor = Color.GREEN; | \n|  | inputColor = Color.GREEN; | \n|  | break; | \n|  | case \"blue\": | \n|  | bgColor = Color.DARK_GRAY; | \n|  | textColor = Color.CYAN; | \n|  | inputColor = Color.CYAN; | \n|  | break; | \n|  | case \"purple\": | \n|  | bgColor = new Color(30, 0, 50); | \n|  | textColor = new Color(200, 120, 255); | \n|  | inputColor = new Color(200, 120, 255); | \n|  | break; | \n|  | case \"red\": | \n|  | bgColor = new Color(50, 0, 0); | \n|  | textColor = Color.RED; | \n|  | inputColor = Color.RED; | \n|  | break; | \n|  | case \"dark\": | \n|  | case \"black\": | \n|  | bgColor = Color.BLACK; | \n|  | textColor = Color.LIGHT_GRAY; | \n|  | inputColor = Color.LIGHT_GRAY; | \n|  | break; | \n|  | case \"light\": | \n|  | case \"default\": | \n|  | bgColor = Color.WHITE; | \n|  | textColor = Color.BLACK; | \n|  | inputColor = Color.BLACK; | \n|  | break; | \n|  | default: | \n|  | terminal.append(\"themes: matrix \\| blue \\| purple \\| red \\| dark \\| light \\n\"); | \n|  | return; | \n|  | } | \n|  | applyTheme(); | \n|  | } | \n|  | // CALC SYSTEM ( Fav Sys ) | \n|  | static double evalSimple(String exp) { | \n|  | exp = exp.replaceAll(\"\\\\s+\", \"\"); | \n|  | if (exp.contains(\"+\")) { | \n|  | String[] p = exp.split(\"\\\\+\", 2); | \n|  | return Double.parseDouble(p[0]) + Double.parseDouble(p[1]); | \n|  | } | \n|  | else if (exp.contains(\"-\")) { | \n|  | String[] p = exp.split(\"-\", 2); | \n|  | return Double.parseDouble(p[0]) - Double.parseDouble(p[1]); | \n|  | } | \n|  | else if (exp.contains(\"*\") \\|\\| exp.contains(\"×\")) { | \n|  | String[] p = exp.split(\"\\\\*\\|×\", 2); | \n|  | return Double.parseDouble(p[0]) * Double.parseDouble(p[1]); | \n|  | } | \n|  | else if (exp.contains(\"/\") \\|\\| exp.contains(\"÷\")) { | \n|  | String[] p = exp.split(\"/\\|÷\", 2); | \n|  | return Double.parseDouble(p[0]) / Double.parseDouble(p[1]); | \n|  | } | \n|  | return Double.parseDouble(exp); | \n|  | } | \n|  | // \" • \"\" in output becoming \" â€¢ \" | \n|  | // UTF-8 ( Encoding ) doesnt supports ASCII | \n|  | // JDK 17 | \n|  | // YSH v1-v5 CLI | \n|  | // YSH v5 | \n|  | // YSH v5.GUI | \n|  | // YSH v7.GUI | \n|  | // YSH v7 | \n|  | // YSH v8 | \n|  | // YSH v8 Linux | \n|  | // YSH Ecosystem Support and Help | \n|  | // Real File System | \n|  | // LAN Networking | \n|  | // -- Direct and Group Chats | \n|  | // -- File Share , secured with exact details | \n|  | // Secured | \n|  | // Actual Shell | \n|  | // 50+ commands | \n|  | // 2 Achievement | \n|  | // Konami Pattern | \n|  | // 2 Modes | \n|  | // 15+ Easter Eggs | \n|  | // 4 In Line Comment Messages | \n|  | // Time sensetive message ( 12am - 5am ) | \n|  | // Intel Pentinium friendly btw ~ | \n|  | // YSH.jar available for your Linux | \n|  | // YSH.exe available for your Windows | \n|  | // Open Source YSH.java and YSH/ available for you and your other machines | \n|  | // Can I get a coffee Please 🙂 | \n|  | } |", "url": "https://wpnews.pro/news/ysh-terminal-v8-1-4", "canonical_source": "https://gist.github.com/YousufProjs-exe/9d4901fbd1afcc324668b260024cd075", "published_at": "2026-10-02 17:04:58+00:00", "updated_at": "2026-10-02 17:06:49.867463+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["YSH Terminal", "Java", "Swing"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/ysh-terminal-v8-1-4", "markdown": "https://wpnews.pro/news/ysh-terminal-v8-1-4.md", "text": "https://wpnews.pro/news/ysh-terminal-v8-1-4.txt", "jsonld": "https://wpnews.pro/news/ysh-terminal-v8-1-4.jsonld"}}