bug_16190 fixed 14/21314/8
Cedric Delamarre [Wed, 12 Feb 2020 17:38:50 +0000 (18:38 +0100)]
    first fix https://codereview.scilab.org/#/c/21086/

Change-Id: I021a4dee3192f2a1ea8f0e0c335e5fbeae6ecfc3

scilab/modules/ast/src/cpp/system_env/configvariable.cpp
scilab/modules/console/src/c/cmdLine/initConsoleMode.c
scilab/modules/core/Makefile.am
scilab/modules/core/Makefile.in
scilab/modules/core/src/c/csignal.c
scilab/modules/core/src/c/resizesignal.c [new file with mode: 0644]
scilab/modules/core/src/c/resizesignal.h [new file with mode: 0644]
scilab/modules/core/src/c/signal_mgmt.c

index f1c2083..89c746a 100644 (file)
@@ -32,9 +32,6 @@ extern "C"
 #include "os_string.h"
 #include "sci_malloc.h"
 #include "strsubst.h"
-#ifdef HAVE_TERMCAP_H
-#include <termcap.h>
-#endif
 }
 
 /*
@@ -202,16 +199,6 @@ void ConfigVariable::setConsoleWidth(int _iConsoleWidth)
 
 int ConfigVariable::getConsoleWidth(void)
 {
-#ifndef _MSC_VER
-    if (getScilabMode() == SCILAB_NWNI || getScilabMode() == SCILAB_NW)
-    {
-        char tc_buf[1024];       /* holds termcap buffer */
-        if (tgetent(tc_buf, getenv("TERM")) == 1)
-        {
-            return tgetnum((char *)"co");
-        }
-    }
-#endif
     return m_iConsoleWidth;
 }
 /*
index 3410ee9..64905bb 100644 (file)
@@ -23,6 +23,7 @@
 #include "sci_malloc.h"
 #include "cliDisplayManagement.h"
 #include "initConsoleMode.h"
+#include "scilines.h"
 
 static void canonicMode(struct termios *t)
 {
@@ -122,5 +123,8 @@ int initConsoleMode(int bin)
         return 0;
     }
 
+    // set default lines at startup
+    scilinesdefault();
+
     return setAttr(bin);
 }
index 109a8bc..a7bb22f 100644 (file)
@@ -13,6 +13,7 @@
 
 CORE_C_SOURCES = \
     src/c/csignal.c \
+    src/c/resizesignal.c \
     src/c/md5.c \
     src/c/getmodules.c \
     src/c/getmemory.c \
index e0dab97..5bcb43f 100644 (file)
@@ -200,6 +200,7 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES)
 libscicore_algo_la_LIBADD =
 am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_1 = src/c/libscicore_algo_la-csignal.lo \
+       src/c/libscicore_algo_la-resizesignal.lo \
        src/c/libscicore_algo_la-md5.lo \
        src/c/libscicore_algo_la-getmodules.lo \
        src/c/libscicore_algo_la-getmemory.lo \
@@ -473,6 +474,7 @@ am__depfiles_remade =  \
        src/c/$(DEPDIR)/libscicore_algo_la-islittleendian.Plo \
        src/c/$(DEPDIR)/libscicore_algo_la-loadversion.Plo \
        src/c/$(DEPDIR)/libscicore_algo_la-md5.Plo \
+       src/c/$(DEPDIR)/libscicore_algo_la-resizesignal.Plo \
        src/c/$(DEPDIR)/libscicore_algo_la-returnanan.Plo \
        src/c/$(DEPDIR)/libscicore_algo_la-saveCWDInPreferences.Plo \
        src/c/$(DEPDIR)/libscicore_algo_la-sci_mem_alloc.Plo \
@@ -877,6 +879,7 @@ top_srcdir = @top_srcdir@
 yacc_present = @yacc_present@
 CORE_C_SOURCES = \
     src/c/csignal.c \
+    src/c/resizesignal.c \
     src/c/md5.c \
     src/c/getmodules.c \
     src/c/getmemory.c \
@@ -1227,6 +1230,8 @@ src/c/$(DEPDIR)/$(am__dirstamp):
        @: > src/c/$(DEPDIR)/$(am__dirstamp)
 src/c/libscicore_algo_la-csignal.lo: src/c/$(am__dirstamp) \
        src/c/$(DEPDIR)/$(am__dirstamp)
+src/c/libscicore_algo_la-resizesignal.lo: src/c/$(am__dirstamp) \
+       src/c/$(DEPDIR)/$(am__dirstamp)
 src/c/libscicore_algo_la-md5.lo: src/c/$(am__dirstamp) \
        src/c/$(DEPDIR)/$(am__dirstamp)
 src/c/libscicore_algo_la-getmodules.lo: src/c/$(am__dirstamp) \
@@ -1657,6 +1662,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscicore_algo_la-islittleendian.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscicore_algo_la-loadversion.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscicore_algo_la-md5.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscicore_algo_la-resizesignal.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscicore_algo_la-returnanan.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscicore_algo_la-saveCWDInPreferences.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscicore_algo_la-sci_mem_alloc.Plo@am__quote@ # am--include-marker
@@ -1719,6 +1725,13 @@ src/c/libscicore_algo_la-csignal.lo: src/c/csignal.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscicore_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/c/libscicore_algo_la-csignal.lo `test -f 'src/c/csignal.c' || echo '$(srcdir)/'`src/c/csignal.c
 
+src/c/libscicore_algo_la-resizesignal.lo: src/c/resizesignal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscicore_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/c/libscicore_algo_la-resizesignal.lo -MD -MP -MF src/c/$(DEPDIR)/libscicore_algo_la-resizesignal.Tpo -c -o src/c/libscicore_algo_la-resizesignal.lo `test -f 'src/c/resizesignal.c' || echo '$(srcdir)/'`src/c/resizesignal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/c/$(DEPDIR)/libscicore_algo_la-resizesignal.Tpo src/c/$(DEPDIR)/libscicore_algo_la-resizesignal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/c/resizesignal.c' object='src/c/libscicore_algo_la-resizesignal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscicore_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/c/libscicore_algo_la-resizesignal.lo `test -f 'src/c/resizesignal.c' || echo '$(srcdir)/'`src/c/resizesignal.c
+
 src/c/libscicore_algo_la-md5.lo: src/c/md5.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscicore_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/c/libscicore_algo_la-md5.lo -MD -MP -MF src/c/$(DEPDIR)/libscicore_algo_la-md5.Tpo -c -o src/c/libscicore_algo_la-md5.lo `test -f 'src/c/md5.c' || echo '$(srcdir)/'`src/c/md5.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/c/$(DEPDIR)/libscicore_algo_la-md5.Tpo src/c/$(DEPDIR)/libscicore_algo_la-md5.Plo
@@ -2806,6 +2819,7 @@ distclean: distclean-am
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-islittleendian.Plo
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-loadversion.Plo
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-md5.Plo
+       -rm -f src/c/$(DEPDIR)/libscicore_algo_la-resizesignal.Plo
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-returnanan.Plo
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-saveCWDInPreferences.Plo
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-sci_mem_alloc.Plo
@@ -2959,6 +2973,7 @@ maintainer-clean: maintainer-clean-am
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-islittleendian.Plo
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-loadversion.Plo
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-md5.Plo
+       -rm -f src/c/$(DEPDIR)/libscicore_algo_la-resizesignal.Plo
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-returnanan.Plo
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-saveCWDInPreferences.Plo
        -rm -f src/c/$(DEPDIR)/libscicore_algo_la-sci_mem_alloc.Plo
index 0730774..9d4bf15 100644 (file)
@@ -28,14 +28,6 @@ void controlC_handler(int sig)
 
 int csignal(void)
 {
-
-#ifdef _MSC_VER
-    if (signal(SIGINT, controlC_handler) == SIG_ERR)
-    {
-        fprintf(stderr, "Could not set the signal SIGINT to the handler.\n");
-        return -1;
-    }
-#else
     struct sigaction act_controlC;
 
     memset(&act_controlC, 0, sizeof(act_controlC));
@@ -45,6 +37,6 @@ int csignal(void)
         fprintf(stderr, "Could not set the signal SIGINT to the handler.\n");
         return -1;
     }
-#endif
+
     return 0;
 }
diff --git a/scilab/modules/core/src/c/resizesignal.c b/scilab/modules/core/src/c/resizesignal.c
new file mode 100644 (file)
index 0000000..21367e3
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2020 - ESI Group - Cedric Delamarre
+ *
+ * This file is hereby licensed under the terms of the GNU GPL v2.0,
+ * pursuant to article 5.3.4 of the CeCILL v.2.1.
+ * This file was originally licensed under the terms of the CeCILL v2.1,
+ * and continues to be available under such terms.
+ * For more information, see the COPYING file which you should have received
+ * along with this program.
+ *
+ */
+#include <stdio.h>
+#include "resizesignal.h"
+#include "scilines.h"
+#include "configvariable_interface.h"
+
+/* Set the console width read from the term size. */
+void resize_handler(int sig)
+{
+    // save the number of lines
+    int lines = getConsoleLines();
+    // set the width and lines from the actual term size
+    scilinesdefault();
+    // avoid the message which ask if we want to continue to print
+    // when the number of lines is too small
+    setConsoleLines(lines);
+}
+
+int resizesignal(void)
+{
+    struct sigaction act;
+
+    memset(&act, 0, sizeof(act));
+    act.sa_sigaction = resize_handler;
+    if (sigaction(SIGWINCH, &act, NULL) != 0)
+    {
+        fprintf(stderr, "Could not set the signal SIGWINCH to the handler.\n");
+        return -1;
+    }
+
+    return 0;
+}
diff --git a/scilab/modules/core/src/c/resizesignal.h b/scilab/modules/core/src/c/resizesignal.h
new file mode 100644 (file)
index 0000000..236984c
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2007 - INRIA - Sylvestre LEDRU
+ *
+ * Copyright (C) 2012 - 2016 - Scilab Enterprises
+ *
+ * This file is hereby licensed under the terms of the GNU GPL v2.0,
+ * pursuant to article 5.3.4 of the CeCILL v.2.1.
+ * This file was originally licensed under the terms of the CeCILL v2.1,
+ * and continues to be available under such terms.
+ * For more information, see the COPYING file which you should have received
+ * along with this program.
+ *
+ */
+#ifndef __RESIZESIGNAL_H__
+#define __RESIZESIGNAL_H__
+#include <signal.h>
+
+/**
+ * Set the console width read from the term size.
+ */
+void resize_handler(int sig);
+
+
+/**
+* register the signal SIGWINCH.
+*/
+int resizesignal(void);
+
+#endif /* __RESIZESIGNAL_H__ */
index 71a50df..36c56aa 100644 (file)
@@ -36,6 +36,7 @@
 #include <unistd.h>             /* gethostname */
 
 #include "csignal.h"
+#include "resizesignal.h"
 #include "localization.h"
 #include "backtrace.h"
 #include "signal_mgmt.h"
@@ -464,6 +465,7 @@ void base_error_init(void)
     sigaction(SIGCONT, &ToContinue, NULL);
     /* Signal handlers */
     csignal();
+    resizesignal();
     memset(&act, 0, sizeof(act));
     act.sa_sigaction = sig_fatal;
     act.sa_flags = SA_SIGINFO;