about summary refs log tree commit diff stats
path: root/src/LYCurses.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/LYCurses.c')
-rw-r--r--src/LYCurses.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/LYCurses.c b/src/LYCurses.c
index c6cf922e..14f8e0b2 100644
--- a/src/LYCurses.c
+++ b/src/LYCurses.c
@@ -662,11 +662,12 @@ PUBLIC void LYnoVideo ARGS1(
  * If newterm is not defined, assume a curses subset which
  * supports only initscr.  --gil
  */
-#ifdef    HAVE_NEWTERM
+#if defined(HAVE_NEWTERM) && !defined(NCURSES) && !defined(HAVE_RESIZETERM)
 static SCREEN *LYscreen = NULL;
-#define LYDELSCR(scr) { \
-    delscreen(scr);     \
-    scr = NULL; }
+#define LYDELSCR() { \
+if (recent_sizechange) { \
+    delscreen(LYscreen); \
+    LYscreen = NULL; } }
 /*
  * Surrogates for newterm annd delscreen
  */
@@ -674,8 +675,16 @@ static SCREEN *LYscreen = NULL;
 static WINDOW *LYscreen = NULL;
 #undef  newterm
 #define newterm(type, out, in) (initscr())
-#define LYDELSCR(scr)  /* nothing */
+#define LYDELSCR()  /* nothing */
 #endif /* HAVE_NEWTERM   */
+#else  /* !defined(VMS) && !defined(USE_SLANG) */
+/*
+ * Provide last recourse definitions of LYscreen and LYDELSCR for
+ * stop_curses, which only tests LYscreen for zero/nonzero but
+ * never uses it as a pointer or L-value.
+ */
+#define LYscreen TRUE
+#define LYDELSCR()  /* nothing */
 #endif /* !defined(VMS) && !defined(USE_SLANG) */
 
 PUBLIC void start_curses NOARGS
@@ -810,6 +819,7 @@ PUBLIC void start_curses NOARGS
 	 *  If we're not VMS then only do initscr() one time,
 	 *  and one time only!
 	 */
+#if defined(HAVE_NEWTERM) && !defined(NCURSES) && !defined(HAVE_RESIZETERM)
 	{
 	    static char lines_putenv[] = "LINES=abcde",
 			cols_putenv[]  = "COLUMNS=abcde";
@@ -824,6 +834,7 @@ PUBLIC void start_curses NOARGS
 	    putenv(cols_putenv);
 	    CTRACE((tfp, "start_curses putenv %s, %s\n", lines_putenv, cols_putenv));
 	}
+#endif /* HAVE_NEWTERM   */
 	if (!(LYscreen=newterm(NULL,stdout,stdin))) {  /* start curses */
 	    fprintf(tfp, "%s\n",
 		gettext("Terminal initialisation failed - unknown terminal type?"));
@@ -1051,12 +1062,10 @@ PUBLIC void stop_curses NOARGS
      */
     if(LYCursesON == TRUE)	{
 	lynx_enable_mouse (0);
-#if !defined(NCURSES) && !defined(VMS) && !defined(USE_SLANG) && (!defined(WIN_EX) || defined(__CYGWIN__))	/* @@@ */
+#if (!defined(WIN_EX) || defined(__CYGWIN__))	/* @@@ */
 	if(LYscreen) {
 	    endwin();	/* stop curses */
-	    if (recent_sizechange) {
-		LYDELSCR(LYscreen);
-	    }
+	    LYDELSCR();
 	 }
 #endif
     }
@@ -1070,7 +1079,7 @@ PUBLIC void stop_curses NOARGS
 #endif
 
     fflush(stdout);
-#endif /* DJGPP */
+#endif /* defined(DOSPATH) && !(defined(USE_SLANG) || _WIN_CC) */
     fflush(stderr);
 
     LYCursesON = FALSE;
n.cc?h=main&id=0487a30e7078861ed7de42bdb21b5c71fb9b54a1'>0487a30e ^
0487a30e ^
827898fc ^
98f7918b ^


88be3dbc ^
98f7918b ^
bc643692 ^

0487a30e ^
98f7918b ^
57699011 ^
98f7918b ^
051c4738 ^
0487a30e ^
bc643692 ^
0487a30e ^




bc643692 ^
0487a30e ^


051c4738 ^
0487a30e ^
bc643692 ^
0487a30e ^


1848b18f ^

98f7918b ^
363be37f ^
e236973b ^
4e49b29e ^


5f98a10c ^
4e49b29e ^




98f7918b ^

0487a30e ^
4e49b29e ^
0487a30e ^
0487a30e ^
827898fc ^
98f7918b ^


88be3dbc ^
98f7918b ^
bc643692 ^

0487a30e ^
98f7918b ^
57699011 ^
d7e11237 ^
051c4738 ^
0487a30e ^
bc643692 ^
0487a30e ^




bc643692 ^
0487a30e ^


051c4738 ^
0487a30e ^
bc643692 ^
0487a30e ^


1848b18f ^

d7e11237 ^
363be37f ^
e236973b ^
4e49b29e ^

5f98a10c ^
4e49b29e ^



5f98a10c ^
4e49b29e ^




d7e11237 ^

e4630643 ^
ac0e9db5 ^
827898fc ^
0487a30e ^
d7e11237 ^


88be3dbc ^
d7e11237 ^
bc643692 ^
0487a30e ^
d7e11237 ^
57699011 ^
0487a30e ^


bc643692 ^
0487a30e ^



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
                      
 
                                             
    
                                        
                            
                                       


                                                              
                                                                                                                                                        




                                       

                                                
                     
                                                       
                                               
                     
                                   


        
               
             

                     
                                       
 
                             
 
                 
             
                       




                             
                          


                             
                          
             
                          


                             

                                             
                                        
                          
                                       


                                                              
                                                                                                                                                        




                                       

                                                
                      
                                                       
                                               
                     
                                   


        
              
             

                     
                                      
 
                             
 
                
             
                      




                             
                          


                             
                         
             
                         


                             

                                             
                                        
                            
                                       

                                                     
                                                                                                                                           



                                                              
                                                                                                                                                        




                                       

                                                
                                     
                                                         
                                                       
   


        
               
             
                     
                            
 
                             


                        
                                                



                             
//: Boolean primitives

:(before "End Primitive Recipe Declarations")
AND,
:(before "End Primitive Recipe Numbers")
Recipe_ordinal["and"] = AND;
:(before "End Primitive Recipe Checks")
case AND: {
  for (long long int i = 0; i < SIZE(inst.ingredients); ++i) {
    if (!is_mu_scalar(inst.ingredients.at(i))) {
      raise_error << maybe(Recipe[r].name) << "'and' requires boolean ingredients, but got " << inst.ingredients.at(i).original_string << '\n' << end();
      goto finish_checking_instruction;
    }
  }
  break;
}
:(before "End Primitive Recipe Implementations")
case AND: {
  bool result = true;
  for (long long int i = 0; i < SIZE(ingredients); ++i)
    result = result && ingredients.at(i).at(0);
  products.resize(1);
  products.at(0).push_back(result);
  break;
}

:(scenario and)
recipe main [
  1:boolean <- copy 1
  2:boolean <- copy 0
  3:boolean <- and 1:boolean, 2:boolean
]
+mem: storing 0 in location 3

:(scenario and_2)
recipe main [
  1:boolean <- and 1, 1
]
+mem: storing 1 in location 1

:(scenario and_multiple)
recipe main [
  1:boolean <- and 1, 1, 0
]
+mem: storing 0 in location 1

:(scenario and_multiple_2)
recipe main [
  1:boolean <- and 1, 1, 1
]
+mem: storing 1 in location 1

:(before "End Primitive Recipe Declarations")
OR,
:(before "End Primitive Recipe Numbers")
Recipe_ordinal["or"] = OR;
:(before "End Primitive Recipe Checks")
case OR: {
  for (long long int i = 0; i < SIZE(inst.ingredients); ++i) {
    if (!is_mu_scalar(inst.ingredients.at(i))) {
      raise_error << maybe(Recipe[r].name) << "'and' requires boolean ingredients, but got " << inst.ingredients.at(i).original_string << '\n' << end();
      goto finish_checking_instruction;
    }
  }
  break;
}
:(before "End Primitive Recipe Implementations")
case OR: {
  bool result = false;
  for (long long int i = 0; i < SIZE(ingredients); ++i)
    result = result || ingredients.at(i).at(0);
  products.resize(1);
  products.at(0).push_back(result);
  break;
}

:(scenario or)
recipe main [
  1:boolean <- copy 1
  2:boolean <- copy 0
  3:boolean <- or 1:boolean, 2:boolean
]
+mem: storing 1 in location 3

:(scenario or_2)
recipe main [
  1:boolean <- or 0, 0
]
+mem: storing 0 in location 1

:(scenario or_multiple)
recipe main [
  1:boolean <- and 0, 0, 0
]
+mem: storing 0 in location 1

:(scenario or_multiple_2)
recipe main [
  1:boolean <- or 0, 0, 1
]
+mem: storing 1 in location 1

:(before "End Primitive Recipe Declarations")
NOT,
:(before "End Primitive Recipe Numbers")
Recipe_ordinal["not"] = NOT;
:(before "End Primitive Recipe Checks")
case NOT: {
  if (SIZE(inst.products) > SIZE(inst.ingredients)) {
    raise_error << maybe(Recipe[r].name) << "'not' cannot have fewer ingredients than products in '" << inst.to_string() << "'\n" << end();
    break;
  }
  for (long long int i = 0; i < SIZE(inst.ingredients); ++i) {
    if (!is_mu_scalar(inst.ingredients.at(i))) {
      raise_error << maybe(Recipe[r].name) << "'not' requires boolean ingredients, but got " << inst.ingredients.at(i).original_string << '\n' << end();
      goto finish_checking_instruction;
    }
  }
  break;
}
:(before "End Primitive Recipe Implementations")
case NOT: {
  products.resize(SIZE(ingredients));
  for (long long int i = 0; i < SIZE(ingredients); ++i) {
    products.at(i).push_back(!ingredients.at(i).at(0));
  }
  break;
}

:(scenario not)
recipe main [
  1:boolean <- copy 1
  2:boolean <- not 1:boolean
]
+mem: storing 0 in location 2

:(scenario not_multiple)
recipe main [
  1:boolean, 2:boolean, 3:boolean <- not 1, 0, 1
]
+mem: storing 0 in location 1
+mem: storing 1 in location 2
+mem: storing 0 in location 3