diff --git a/src/main/java/myutil/Terminal.java b/src/main/java/myutil/Terminal.java index 9e136687ecdf5feb73a92532204d37feabc1ecd0..ca143f68474fd959a1fd008bde498014d09e85ba 100644 --- a/src/main/java/myutil/Terminal.java +++ b/src/main/java/myutil/Terminal.java @@ -1,26 +1,26 @@ /* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille - * + * * ludovic.apvrille AT enst.fr - * + * * This software is a computer program whose purpose is to allow the * edition of TURTLE analysis, design and deployment diagrams, to * allow the generation of RT-LOTOS or Java code from this diagram, * and at last to allow the analysis of formal validation traces * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP * from INRIA Rhone-Alpes. - * + * * This software is governed by the CeCILL license under French law and * abiding by the rules of distribution of free software. You can use, * modify and/ or redistribute the software under the terms of the CeCILL * license as circulated by CEA, CNRS and INRIA at the following URL * "http://www.cecill.info". - * + * * As a counterpart to the access to the source code and rights to copy, * modify and redistribute granted by the license, users are provided only * with a limited warranty and the software's author, the holder of the * economic rights, and the successive licensors have only limited * liability. - * + * * In this respect, the user's attention is drawn to the risks associated * with loading, using, modifying and/or developing or reproducing the * software by the user in light of its specific status of free software, @@ -31,14 +31,12 @@ * requirements in conditions enabling the security of their systems and/or * data to be ensured and, more generally, to use and operate it in the * same conditions as regards security. - * + * * The fact that you are presently reading this means that you have had * knowledge of the CeCILL license and that you accept its terms. */ - - package myutil; @@ -48,6 +46,7 @@ import java.util.Vector; * Class Terminal * Creation: 21/03/2019 * Version 2.0 21/03/2019 + * * @author Ludovic APVRILLE */ public class Terminal { @@ -63,7 +62,7 @@ public class Terminal { private final static int TAB = 9; private Vector<String> buffer; - private int bufferPointer ; + private int bufferPointer; private int cursorPosition; private int promptLength = 0; private int maxbufferSize = MAX_BUFFER_SIZE; @@ -73,231 +72,231 @@ public class Terminal { private String os; + public Terminal() { + buffer = new Vector<>(); + cpt = 0; + os = System.getProperty("os.name").toLowerCase(); + System.out.println("Detected OS:" + os); + os = os.split(" ")[0]; + } - public Terminal() { - buffer = new Vector<>(); - cpt = 0; - os = System.getProperty("os.name").toLowerCase(); - System.out.println("Detected OS:" + os); - os = os.split(" ")[0]; - } - - public void setTerminalProvider(TerminalProviderInterface tp) { - terminalProvider = tp; - } + public void setTerminalProvider(TerminalProviderInterface tp) { + terminalProvider = tp; + } - public String getNextCommand() { + public String getNextCommand() { - char x; - int val = 0; - cursorPosition = 0; + char x; + int val = 0; + cursorPosition = 0; - printPrompt(cpt); + printPrompt(cpt); - String currentBuf = ""; - sequence = null; - long timeSeq = 0; + String currentBuf = ""; + sequence = null; + long timeSeq = 0; - try { - while(val != 3) { - val = (RawConsoleInput.read(true)); - x = (char) val; + try { + while (val != 3) { + val = (RawConsoleInput.read(true)); + x = (char) val; - // Special sequence? - if (sequence == null) { - if (val == ESC) { - sequence = ""; - timeSeq = System.currentTimeMillis(); - } - } else { - //Time check - long now = System.currentTimeMillis(); - if (now - timeSeq > 10) { - sequence = null; - } else { - sequence += x; - } - } + // Special sequence? + if (sequence == null) { + if (val == ESC) { + sequence = ""; + timeSeq = System.currentTimeMillis(); + } + } else { + //Time check + long now = System.currentTimeMillis(); + if (now - timeSeq > 10) { + sequence = null; + } else { + sequence += x; + } + } /*if (sequence != null) { TraceManager.addDev("Sequence=" + sequence); printSequence(sequence); }*/ - if ((sequence != null) && (sequence.length() == 2)) { + if ((sequence != null) && (sequence.length() == 2)) { - //UP? - if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 65)) { + //UP? + if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 65)) { - //System.out.println("UP"); - delCurrent(currentBuf); - bufferPointer = (bufferPointer > 0)? bufferPointer-1:bufferPointer; - currentBuf = buffer.get(bufferPointer); - //printPrompt(cpt); - myPrint(currentBuf); - sequence = null; - val = -1; + //System.out.println("UP"); + delCurrent(currentBuf); + bufferPointer = (bufferPointer > 0) ? bufferPointer - 1 : bufferPointer; + currentBuf = buffer.get(bufferPointer); + //printPrompt(cpt); + myPrint(currentBuf); + cursorPosition = currentBuf.length(); + sequence = null; + val = -1; - // DOWN? - } else if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 66)) { + // DOWN + } else if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 66)) { - //System.out.println("DOWN"); - delCurrent(currentBuf); - bufferPointer = (bufferPointer==(buffer.size()-1))?bufferPointer:bufferPointer+1; - currentBuf = buffer.get(bufferPointer); - //printPrompt(cpt); - myPrint(currentBuf); - sequence = null; - val = -1; + //System.out.println("DOWN"); + delCurrent(currentBuf); + bufferPointer = (bufferPointer == (buffer.size() - 1)) ? bufferPointer : bufferPointer + 1; + currentBuf = buffer.get(bufferPointer); + //printPrompt(cpt); + myPrint(currentBuf); + cursorPosition = currentBuf.length(); + sequence = null; + val = -1; - // BACKWARD - } else if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 68)) { + // BACKWARD + } else if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 68)) { - //System.out.println("DOWN"); - backward(); - sequence = null; - val = -1; + //System.out.println("DOWN"); + backward(); + sequence = null; + val = -1; - // FORWARD + // FORWARD } else if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 67)) { - //System.out.println("DOWN"); - forward(currentBuf); - sequence = null; - val = -1; - // DEL - //TraceManager.addDev("DEL"); - } - } + //System.out.println("DOWN"); + forward(currentBuf); + sequence = null; + val = -1; + // DEL + //TraceManager.addDev("DEL"); + } + } - if ((sequence != null) && (sequence.length() == 3)) { + if ((sequence != null) && (sequence.length() == 3)) { - // DEL - if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 51) && - (sequence.charAt(2) == 126)) { - currentBuf = del(currentBuf); - cursorPosition --; + // DEL + if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 51) && + (sequence.charAt(2) == 126)) { + currentBuf = del(currentBuf); + cursorPosition--; - sequence = null; + sequence = null; val = -1; - //TraceManager.addDev("DEL"); - } - - } - - // Usual CHAR - if ((sequence == null) && (val != -1)) { - - // CR - if (val == CR) { - cursorPosition = 0; - if (currentBuf.length() == 0) { - myPrint("\n"); - printPrompt(cpt); - } else { - cpt++; - - //if (!(os.startsWith("mac"))) { - myPrint("\n"); - //} - addToBuffer(currentBuf); - return currentBuf; - } - } - - //BACKSPACE - if ((val == BACKSPACE) || (val == DEL)) { - currentBuf = del(currentBuf); - - - //TAB - } else if (val == TAB) { - System.out.println("TAB"); - if (terminalProvider != null) { - boolean b =terminalProvider.tabAction(currentBuf); - if (b) { - printPrompt(cpt); - } - } - - // Regular character - } else if (val >= 32) { - //System.out.print("" + x + "(val=" + val + ");"); - if (cursorPosition == currentBuf.length()) { - myPrint("" + x); - currentBuf += x; - } else { - //System.out.println("Tricky cursor position"); - int sep = currentBuf.length()- cursorPosition; - currentBuf = currentBuf.substring(0,cursorPosition) + x + currentBuf.substring(cursorPosition, currentBuf.length()); - //TraceManager.addDev("buffer=" + currentBuf); - myPrint(currentBuf.substring(cursorPosition, currentBuf.length())); + //TraceManager.addDev("DEL"); + } + + } + + // Usual CHAR + if ((sequence == null) && (val != -1)) { + + // CR + if (val == CR) { + cursorPosition = 0; + if (currentBuf.length() == 0) { + myPrint("\n"); + printPrompt(cpt); + } else { + cpt++; + + //if (!(os.startsWith("mac"))) { + myPrint("\n"); + //} + addToBuffer(currentBuf); + return currentBuf; + } + } + + //BACKSPACE + if ((val == BACKSPACE) || (val == DEL)) { + currentBuf = del(currentBuf); + + + //TAB + } else if (val == TAB) { + System.out.println("TAB"); + if (terminalProvider != null) { + boolean b = terminalProvider.tabAction(currentBuf); + if (b) { + printPrompt(cpt); + } + } + + // Regular character + } else if (val >= 32) { + //System.out.print("" + x + "(val=" + val + ");"); + if (cursorPosition == currentBuf.length()) { + myPrint("" + x); + currentBuf += x; + } else { + //System.out.println("Tricky cursor position"); + int sep = currentBuf.length() - cursorPosition; + currentBuf = currentBuf.substring(0, cursorPosition) + x + currentBuf.substring(cursorPosition, currentBuf.length()); + //TraceManager.addDev("buffer=" + currentBuf); + myPrint(currentBuf.substring(cursorPosition, currentBuf.length())); // Must move cursor to previous psition + 1 - for(int i=0; i<sep; i++) { - backwardCode(); - } - //TraceManager.addDev("buffer=" + currentBuf); - } - cursorPosition ++; + for (int i = 0; i < sep; i++) { + backwardCode(); + } + //TraceManager.addDev("buffer=" + currentBuf); + } + cursorPosition++; - } - } + } + } - } - } catch (Exception e) { - TraceManager.addDev("Exception in terminal:" + e.getMessage()); - return null; - } + } + } catch (Exception e) { + TraceManager.addDev("Exception in terminal:" + e.getMessage()); + return null; + } - return ""; - } + return ""; + } - private void addToBuffer (String newBuf) { - // Add at bufferPointer - // Therefore remove all elements after bufferPointer - for(int i=buffer.size()-1; i>=bufferPointer; i--) { - buffer.removeElementAt(i); - } + private void addToBuffer(String newBuf) { + // Add at bufferPointer + // Therefore remove all elements after bufferPointer + for (int i = buffer.size() - 1; i >= bufferPointer; i--) { + buffer.removeElementAt(i); + } - buffer.add(newBuf); + buffer.add(newBuf); - if (buffer.size() > maxbufferSize) { - buffer.removeElementAt(0); - } + if (buffer.size() > maxbufferSize) { + buffer.removeElementAt(0); + } - bufferPointer = buffer.size(); + bufferPointer = buffer.size(); - } + } - private String del(String currentBuf) { - if (currentBuf.length() > 0) { - myPrint("\b \b"); - currentBuf = currentBuf.substring(0, currentBuf.length() - 1); - cursorPosition --; - } - return currentBuf; - } + private String del(String currentBuf) { + if (currentBuf.length() > 0) { + myPrint("\b \b"); + currentBuf = currentBuf.substring(0, currentBuf.length() - 1); + cursorPosition--; + } + return currentBuf; + } - public void myPrint(String s) { - //if (os.compareTo("mac") != 0) { - System.out.print(s); + public void myPrint(String s) { + //if (os.compareTo("mac") != 0) { + System.out.print(s); //} - System.out.flush(); - } - + System.out.flush(); + } private String delCurrent(String currentBuf) { if (buffer.size() > 0) { int size = currentBuf.length(); - for(int i=0; i<size; i++) { - currentBuf = del(currentBuf); + for (int i = 0; i < size; i++) { + currentBuf = del(currentBuf); } } return currentBuf; @@ -306,17 +305,17 @@ public class Terminal { public void printPrompt(int cpt) { - String p = "" + cpt + "> "; - promptLength = p.length(); - System.out.print(p); + String p = "" + cpt + "> "; + promptLength = p.length(); + System.out.print(p); } private void backward() { - if (cursorPosition == 0) { - return; - } - backwardCode(); - cursorPosition --; + if (cursorPosition == 0) { + return; + } + backwardCode(); + cursorPosition--; } private void backwardCode() { @@ -324,14 +323,12 @@ public class Terminal { } private void forward(String currentBuf) { - if (cursorPosition == currentBuf.length()) { - return ; - } + if (cursorPosition >= currentBuf.length()) { + return; + } System.out.print("\033[1C"); - cursorPosition ++; + cursorPosition++; } - - }