d758d9a925c23e65ea3c7355ca1dcf5e77e15ce6
[scilab.git] / scilab / modules / console / src / c / scilines.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007 - INRIA - Allan CORNET
4  * Copyright (C) 2008 - INRIA - Sylvestre LEDRU (Detection of the term size)
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
11  *
12  */
13 /*--------------------------------------------------------------------------*/
14
15 #include "machine.h"
16
17 /* for getenv() */
18 #ifdef HAVE_STDLIB_H
19 #include <stdlib.h>
20 #endif
21
22 #ifndef _MSC_VER
23
24 #  if defined(HAVE_CURSES_H)
25 #    include <curses.h>
26 #  elif defined(HAVE_NCURSES_H)
27 #    include <ncurses.h>
28 #  endif
29
30
31 #ifdef HAVE_TERMCAP_H
32 #include <termcap.h>
33 #endif
34
35 #ifndef HAVE_TERMCAP_H
36 #ifdef HAVE_TERM_H
37 #include <term.h>
38 #endif
39 #endif
40
41 #endif /* !defined(_MSC_VER) */
42
43 #include "scilines.h"
44 #include "core_math.h"
45 #include "stack-def.h"
46 #ifdef _MSC_VER
47 #include "../../../windows_tools/src/c/scilab_windows/console.h"
48 #endif
49 #include "configvariable_interface.h"
50 /*--------------------------------------------------------------------------*/
51 #define DEFAULT_NUMBERS_LINES 28
52 #define DEFAULT_NUMBERS_COLUMNS 80
53 #define MIN_NUMBERS_LINES 0
54 #define MIN_NUMBERS_COLUMNS 10
55 /*--------------------------------------------------------------------------*/
56 int scilines(int nblines, int nbcolumns)
57 {
58     setConsoleLines(nblines);
59     setConsoleWidth(nbcolumns);
60     return 0;
61 }
62 /*--------------------------------------------------------------------------*/
63 int scilinesdefault(void)
64 {
65 #ifndef _MSC_VER
66
67     char tc_buf[1024];       /* holds termcap buffer */
68     if (tgetent(tc_buf, getenv("TERM")) == 1)
69     {
70         setConsoleLines(tgetnum("li")); /* retrieve from the term info the number
71                                                                                 of lines */
72         setConsoleWidth(tgetnum("co")); /* And the number of columns */
73     }
74     else
75     {
76         /* Haven't been able to detect the terminal */
77         setConsoleLines(DEFAULT_NUMBERS_LINES);
78         setConsoleWidth(DEFAULT_NUMBERS_COLUMNS);
79     }
80
81 #else
82     if ( (getScilabMode() != SCILAB_STD) && (getScilabMode() != SCILAB_API) )
83     {
84         /* -NW or -NWNI mode */
85         int X = getXConsoleScreenSize();
86         int Y = getYConsoleScreenSize();
87
88         if (X < DEFAULT_NUMBERS_COLUMNS)
89         {
90             X = DEFAULT_NUMBERS_COLUMNS;
91         }
92         if (Y < DEFAULT_NUMBERS_LINES)
93         {
94             Y = DEFAULT_NUMBERS_LINES;
95         }
96         setConsoleWidth(X);
97         setConsoleLines(Y);
98     }
99     else
100     {
101         setConsoleLines(DEFAULT_NUMBERS_LINES);
102         setConsoleWidth(DEFAULT_NUMBERS_COLUMNS);
103     }
104 #endif
105     return 0;
106 }
107 /*--------------------------------------------------------------------------*/
108 int C2F(scilines)(int *nblines, int *nbcolumns)
109 {
110     return scilines(*nblines, *nbcolumns);
111 }
112 /*--------------------------------------------------------------------------*/
113 int C2F(scilinesdefault)(void)
114 {
115     return scilinesdefault();
116 }
117 /*--------------------------------------------------------------------------*/