From a4d049363ee73224135782914386fd1224ffbf5f Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr>
Date: Fri, 22 Mar 2019 13:35:46 +0100
Subject: [PATCH] Update on terminal handling

---
 src/main/java/cli/Interpreter.java            | 30 ++++++++-
 src/main/java/myutil/Terminal.java            | 25 +++++---
 .../myutil/TerminalProviderInterface.java     | 61 +++++++++++++++++++
 ...rIntegerExprParsingAndEvaluationTests.java |  1 +
 4 files changed, 105 insertions(+), 12 deletions(-)
 create mode 100644 src/main/java/myutil/TerminalProviderInterface.java

diff --git a/src/main/java/cli/Interpreter.java b/src/main/java/cli/Interpreter.java
index 67ec801640..08721af650 100644
--- a/src/main/java/cli/Interpreter.java
+++ b/src/main/java/cli/Interpreter.java
@@ -59,7 +59,7 @@ import java.util.*;
  *
  * @author Ludovic APVRILLE
  */
-public class Interpreter implements Runnable  {
+public class Interpreter implements Runnable, TerminalProviderInterface  {
     public final static Command[] commands = {new Help(), new Quit(), new Action(),
             new Set(), new Wait(), new Print(), new History(), new TestSpecific()};
 
@@ -85,6 +85,7 @@ public class Interpreter implements Runnable  {
     private boolean ttoolStarted = false;
     public MainGUI mgui;
     private Vector<String> formerCommands;
+    private Terminal term;
 
 
     public Interpreter(String script, InterpreterOutputInterface printInterface, boolean show) {
@@ -93,6 +94,8 @@ public class Interpreter implements Runnable  {
         variables = new HashMap<>();
         this.show = show;
         formerCommands = new Vector<>();
+        term = new Terminal();
+        term.setTerminalProvider(this);
     }
 
     @Override
@@ -102,6 +105,18 @@ public class Interpreter implements Runnable  {
 
 
     public void interact() {
+        Terminal term = new Terminal();
+        term.setTerminalProvider(this);
+
+        String line;
+        int cptLine = 0;
+        while ((line = term.getNextCommand()) != null) {
+            executeLine(line, cptLine, false);
+            cptLine ++;
+        }
+    }
+
+    public void interactIntegratedTerminal() {
         /*if (RawConsoleInput.isWindows) {
             print("In Windows");
         } else  {
@@ -141,7 +156,7 @@ public class Interpreter implements Runnable  {
 
     private void executeLine(String line, int cptLine, boolean exitOnError) {
         // Comment
-        TraceManager.addDev("Executing line:" + line);
+        //TraceManager.addDev("Executing line:" + line);
 
         line = line.trim();
         if (line.length() == 0) {
@@ -167,7 +182,7 @@ public class Interpreter implements Runnable  {
                 begOfLine = begOfLine.substring(0, index).trim();
             }
 
-            TraceManager.addDev("Handling line: " + lineWithNoVariable);
+            //TraceManager.addDev("Handling line: " + lineWithNoVariable);
             String [] commandInfo = lineWithNoVariable.split(" ");
 
             if ((commandInfo == null) || (commandInfo.length < 1)){
@@ -297,5 +312,14 @@ public class Interpreter implements Runnable  {
         return null;
     }
 
+    // Terminal provider interface
+    public String getMidPrompt() {
+        return "> ";
+    }
+
+    public void tabAction(String buffer) {
+
+    }
+
 
 }
diff --git a/src/main/java/myutil/Terminal.java b/src/main/java/myutil/Terminal.java
index d103fee8c7..7ae9eb8474 100644
--- a/src/main/java/myutil/Terminal.java
+++ b/src/main/java/myutil/Terminal.java
@@ -45,30 +45,36 @@ package myutil;
 import java.util.Vector;
 
 /**
- * Class GenericTree
- * Creation: 13/03/2003
- * Version 2.0 25/10/2007
+ * Class Terminal
+ * Creation: 21/03/2019
+ * Version 2.0 21/03/2019
  * @author Ludovic APVRILLE
  */
 public class Terminal {
     private final static int MAX_BUFFER_SIZE = 5000;
 
     private Vector<String> buffer;
-    int maxbufferSize = MAX_BUFFER_SIZE;
+    private int maxbufferSize = MAX_BUFFER_SIZE;
+    private TerminalProviderInterface terminalProvider;
+    private int cpt;
 
    public Terminal() {
        buffer = new Vector<>();
+       cpt = 0;
    }
 
-   public String getNextString() {
+   public void setTerminalProvider(TerminalProviderInterface tp) {
+       terminalProvider = tp;
+   }
+
+   public String getNextCommand() {
 
        char x = 110;
        int val = 0;
-       int cpt = 0;
+
 
        printPrompt(cpt);
        String currentBuf = "";
-
        try {
            while(val != 3) {
 
@@ -81,8 +87,8 @@ public class Terminal {
                }
                if (val == 10) {
                    cpt ++;
-                   myPrint("\n");
-                   printPrompt(cpt);
+                   //myPrint("\n");
+
                    return currentBuf;
                }
            }
@@ -109,6 +115,7 @@ public class Terminal {
 
 
 
+
     public void printPrompt(int cpt) {
 	    System.out.print("" + cpt + "> ");
     }
diff --git a/src/main/java/myutil/TerminalProviderInterface.java b/src/main/java/myutil/TerminalProviderInterface.java
new file mode 100644
index 0000000000..7bde18bf3e
--- /dev/null
+++ b/src/main/java/myutil/TerminalProviderInterface.java
@@ -0,0 +1,61 @@
+/* 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,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * 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;
+
+
+
+/**
+ * Class TerminalProviderInterface
+ * Creation: 21/03/2019
+ * Version 1.0 21/03/2019
+ * @author Ludovic APVRILLE
+ */
+public interface TerminalProviderInterface {
+
+
+    public String getMidPrompt();
+
+    public void tabAction(String buffer);
+
+
+
+}
diff --git a/ttool/src/test/java/avatartranslator/AvatarIntegerExprParsingAndEvaluationTests.java b/ttool/src/test/java/avatartranslator/AvatarIntegerExprParsingAndEvaluationTests.java
index 31f51b8d1e..a417e569a0 100644
--- a/ttool/src/test/java/avatartranslator/AvatarIntegerExprParsingAndEvaluationTests.java
+++ b/ttool/src/test/java/avatartranslator/AvatarIntegerExprParsingAndEvaluationTests.java
@@ -93,6 +93,7 @@ public class AvatarIntegerExprParsingAndEvaluationTests {
 
     private void testExpr(String command, double expectedResult, boolean expectedBool) {
 
+
         AvatarTransition at = new AvatarTransition(block, "at", null);
         at.addAction(command);
 
-- 
GitLab