View | Details | Raw Unified | Return to bug 58238
Collapse All | Expand All

(-)cider/Makefile (-1 / +2 lines)
Lines 7-13 Link Here
7
7
8
PORTNAME=	cider
8
PORTNAME=	cider
9
PORTVERSION=	1.b1
9
PORTVERSION=	1.b1
10
PORTREVISION=	2
10
PORTREVISION=	3
11
CATEGORIES=	cad
11
CATEGORIES=	cad
12
MASTER_SITES=	ftp://ic.eecs.berkeley.edu/pub/Cider/new/
12
MASTER_SITES=	ftp://ic.eecs.berkeley.edu/pub/Cider/new/
13
DISTNAME=	cider1b1
13
DISTNAME=	cider1b1
Lines 15-20 Link Here
15
MAINTAINER=	amakawa@jp.FreeBSD.org
15
MAINTAINER=	amakawa@jp.FreeBSD.org
16
COMMENT=	A mixed-level circuit and device simulator (includes SPICE3)
16
COMMENT=	A mixed-level circuit and device simulator (includes SPICE3)
17
17
18
CONFLICTS=	spice-*
18
WRKSRC=		${WRKDIR}/sim
19
WRKSRC=		${WRKDIR}/sim
19
USE_XLIB=	yes
20
USE_XLIB=	yes
20
MAN1=		sconvert.1 nutmeg.1 spice.1 cider.1
21
MAN1=		sconvert.1 nutmeg.1 spice.1 cider.1
(-)cider/files/FreeBSD (-2 / +2 lines)
Lines 5-10 Link Here
5
CC_OPT          = $(CFLAGS)
5
CC_OPT          = $(CFLAGS)
6
#CC_OPT_SAFE     = $(CFLAGS) -fno-strength-reduce
6
#CC_OPT_SAFE     = $(CFLAGS) -fno-strength-reduce
7
X_DIR		= $(X11BASE)
7
X_DIR		= $(X11BASE)
8
LDFLAGS		= -L$(X11BASE)/lib -lreadline -lm -ltermcap
8
LDFLAGS		= -L$(X11BASE)/lib -lm -ltermcap
9
ASM_HACK	= < /dev/null
9
ASM_HACK	= < /dev/null
10
SYS_CFLAGS	= -Dbsd -DHAS_GNUREADLINE
10
SYS_CFLAGS	= -Dbsd
(-)cider/files/patch-ad (-178 / +6 lines)
Lines 1-20 Link Here
1
--- spice/common/src/bin/main.c.orig	Sat Mar 12 08:22:28 1994
1
--- spice/common/src/bin/main.c.orig	Sat Mar 12 08:22:28 1994
2
+++ spice/common/src/bin/main.c	Wed Sep 19 11:06:34 2001
2
+++ spice/common/src/bin/main.c	Fri Oct 17 22:11:28 2003
3
@@ -25,6 +25,13 @@
3
@@ -36,6 +36,11 @@
4
 #include <pwd.h>
5
 #endif
6
 
7
+#ifdef HAS_GNUREADLINE
8
+/* Added GNU Readline Support 11/3/97 -- Andrew Veliath <veliaa@rpi.edu> */
9
+#include <readline/readline.h>
10
+#include <readline/history.h>
11
+#include "fteinput.h"
12
+#endif
13
+
14
 #ifdef HAS_UNIX_SIGS
15
 #include <signal.h>
16
 #endif
17
@@ -36,6 +43,11 @@
18
 #endif
4
 #endif
19
 
5
 
20
 #include "patchlev.h"
6
 #include "patchlev.h"
Lines 26-197 Link Here
26
 #include "suffix.h"
12
 #include "suffix.h"
27
 
13
 
28
 /* (Virtual) Machine architecture parameters */
14
 /* (Virtual) Machine architecture parameters */
29
@@ -53,6 +65,11 @@
15
@@ -214,6 +219,10 @@
30
 bool ft_intrpt = false;     /* Set by the (void) signal handlers. */
16
     FILE	*fp;
31
 bool ft_setflag = false;    /* Don't abort after an interrupt. */
17
     FILE	*circuit_file;
32
 
18
 
33
+#ifdef HAS_GNUREADLINE
34
+char gnu_history_file[512];
35
+static char *application_name;
36
+#endif
19
+#endif
37
+
20
+
38
 struct variable *(*if_getparam)( );
39
 
40
 #ifdef BATCH
41
@@ -185,6 +202,95 @@
42
 
43
 #endif
44
 
45
+#ifdef HAS_GNUREADLINE
46
+/* Adapted ../lib/cp/lexical.c:prompt() for GNU Readline -- Andrew Veliath <veliaa@rpi.edu> */
47
+static char *
48
+prompt()
49
+{
50
+    static char pbuf[128];
51
+    int n = sizeof(pbuf);
52
+    char *p = pbuf, *s;
53
+
54
+    if (cp_interactive == false)
55
+        return;
56
+    if (cp_promptstring == NULL)
57
+        s = "-> ";
58
+    else
59
+        s = cp_promptstring;
60
+    if (cp_altprompt)
61
+        s = cp_altprompt;
62
+    while (*s && (n > 1)) {
63
+	int w;
64
+        switch (strip(*s)) {
65
+	case '!':
66
+	    w = snprintf(p, n, "%d", where_history() + 1);
67
+	    w = (w >= n) ? n - 1 : w;
68
+	    p += w;
69
+	    n -= w;
70
+	    break;
71
+	case '\\':
72
+	    if (*(s + 1)) ++s;
73
+	default:
74
+	    *p = strip(*s); ++p;
75
+	    --n;
76
+	    break;
77
+        }
78
+        s++;
79
+    }
80
+    *p = 0;
81
+    return pbuf;
82
+}
83
+
84
+/* Process device events in Readline's hook since there is no where
85
+   else to do it now - AV */
86
+int rl_event_func()
87
+{
88
+    static REQUEST reqst = { checkup_option, 0 };
89
+    Input(&reqst, NULL);
90
+    return 0;
91
+}
92
+
93
+/* Added GNU Readline Support -- Andrew Veliath <veliaa@rpi.edu> */
94
+void app_rl_readlines()
95
+{
96
+    char *line, *expanded_line;
97
+
98
+    strcpy(gnu_history_file, getenv("HOME"));
99
+    strcat(gnu_history_file, "/.");
100
+    strcat(gnu_history_file, application_name);
101
+    strcat(gnu_history_file, "_history");
102
+
103
+    using_history();
104
+    read_history(gnu_history_file);
105
+
106
+    rl_readline_name = application_name;
107
+    rl_instream = cp_in;
108
+    rl_outstream = cp_out;
109
+    rl_event_hook = rl_event_func;
110
+	
111
+    while (1) {
112
+	history_set_pos(history_length);
113
+	line = readline(prompt());
114
+	if (line && *line) {
115
+	    int s = history_expand(line, &expanded_line);
116
+		    
117
+	    if (s == 2) {
118
+		fprintf(stderr, "-> %s\n", expanded_line);
119
+	    } else if (s == -1) {
120
+		fprintf(stderr, "readline: %s\n", expanded_line);
121
+	    } else {
122
+		cp_evloop(expanded_line);
123
+		add_history(expanded_line);
124
+	    }
125
+	    free(expanded_line);
126
+	}
127
+	if (line) free(line);
128
+	else if (line == NULL) cp_evloop("quit");
129
+    }
130
+    /* History gets written in ../fte/misccoms.c com_quit */
131
+}
132
+#endif /* HAS_GNUREADLINE */
133
+
134
 char *hlp_filelist[] = { "spice", 0 };
135
 
136
 void
137
@@ -216,6 +322,10 @@
138
 
139
 #endif
140
 
141
+#ifdef __FreeBSD__
21
+#ifdef __FreeBSD__
142
+    fpsetmask(fpgetmask() & ~FP_X_INV & ~FP_X_DZ & ~FP_X_OFL);
22
+    fpsetmask(fpgetmask() & ~FP_X_INV & ~FP_X_DZ & ~FP_X_OFL);
143
+#endif
144
+
145
     /* MFB tends to jump to 0 on errors.  This tends to catch it. */
146
     if (started) {
147
         fprintf(cp_err, "main: Internal Error: jump to zero\n");
148
@@ -236,6 +346,13 @@
149
     ARCHsize = 1;
150
 #endif /* PARALLEL_ARCH */
151
 
152
+#ifdef HAS_GNUREADLINE
153
+    if (!(application_name = strrchr(av[0],'/')))
154
+        application_name = av[0];
155
+    else
156
+        ++application_name;
157
+#endif
158
+
159
 #ifdef HAS_MAC_ARGCARGV
160
     ac = initmac(&av);
161
 #endif
162
@@ -472,7 +589,11 @@
163
 #  ifdef HAS_UNIX_SIGS
164
     /* Set up (void) signal handling */
165
     if (!ft_batchmode) {
166
+#    ifdef HAS_GNUREADLINE
167
+        (void) signal(SIGINT, SIG_IGN);
168
+#    else
169
         (void) signal(SIGINT, ft_sigintr);
170
+#    endif
171
         (void) signal(SIGFPE, sigfloat);
172
 #    ifdef SIGTSTP
173
         (void) signal(SIGTSTP, sigstop);
174
@@ -668,7 +789,11 @@
175
     } else {
176
         (void) setjmp(jbuf);
177
         cp_interactive = true;
178
+#ifdef HAS_GNUREADLINE
179
+	app_rl_readlines();
180
+#else
181
 	while (cp_evloop((char *) NULL) == 1) ;
182
+#endif /* ifelse HAS_GNUREADLINE */
183
     }
184
 
185
 #  else /* if BATCH */
186
@@ -708,7 +833,11 @@
187
     /* Nutmeg "main" */
188
     (void) setjmp(jbuf);
189
     cp_interactive = true;
190
+#ifdef HAS_GNUREADLINE
191
+    app_rl_readlines();
192
+#else
193
     while (cp_evloop((char *) NULL) == 1) ;
194
+#endif /* ifelse HAS_GNUREADLINE */
195
 
196
 #endif
23
 #endif
197
 
24
 
25
     /* MFB tends to jump to 0 on errors.  This tends to catch it. */
(-)cider/files/patch-ae (-81 lines)
Lines 1-81 Link Here
1
*** spice/common/src/lib/cp/history.c.orig	Sat Jan 29 18:44:09 1994
2
--- spice/common/src/lib/cp/history.c	Sun Dec 12 14:56:43 1999
3
***************
4
*** 11,16 ****
5
--- 11,24 ----
6
  #include "cpdefs.h"
7
  #include "suffix.h"
8
  
9
+ #ifdef HAS_GNUREADLINE
10
+ 
11
+ /* Added GNU Readline Support -- Andrew Veliath <veliaa@rpi.edu> */
12
+ #include <readline/readline.h>
13
+ #include <readline/history.h>
14
+ 
15
+ #endif /* HAS_GNUREADLINE */
16
+ 
17
  static char *dohs();
18
  static void freehist();
19
  static wordlist *dohmod();
20
***************
21
*** 19,24 ****
22
--- 27,33 ----
23
  static wordlist *hpattern();
24
  static wordlist *hprefix();
25
  
26
+ 
27
  struct histent *cp_lastone = NULL;
28
  int cp_maxhistlength = 1000;
29
  char cp_hat = '^';
30
***************
31
*** 345,352 ****
32
--- 354,363 ----
33
      cp_lastone->hi_next = NULL;
34
      cp_lastone->hi_event = event;
35
      cp_lastone->hi_wlist = wl_copy(wlist);
36
+ #ifndef HAS_GNUREADLINE
37
      freehist(histlength - cp_maxhistlength);
38
      histlength++;
39
+ #endif
40
      return;
41
  }
42
  
43
***************
44
*** 483,492 ****
45
--- 494,529 ----
46
          wl = wl->wl_next;
47
          rev = true;
48
      }
49
+ #ifdef HAS_GNUREADLINE
50
+     /* Added GNU Readline Support -- Andrew Veliath <veliaa@rpi.edu> */
51
+     {
52
+ 	HIST_ENTRY *he;
53
+ 	int i, N;
54
+ 
55
+ 	N = (wl == NULL) ? history_length : atoi(wl->wl_word);
56
+ 
57
+ 	if (N < 0) N = 0;
58
+ 	if (N > history_length) N = history_length;
59
+ 
60
+ 	if (rev)
61
+ 	    for (i = history_length; i > 0 && N; --i, --N) {
62
+ 		he = history_get(i);
63
+ 		if (!he) return;
64
+ 		fprintf(cp_out, "%d\t%s\n", i, he->line);
65
+ 	    }
66
+ 	else
67
+ 	    for (i = history_length - N + 1; i <= history_length; ++i) {
68
+ 		he = history_get(i);
69
+ 		if (!he) return;
70
+ 		fprintf(cp_out, "%d\t%s\n", i, he->line);
71
+ 	    }
72
+     }
73
+ #else
74
      if (wl == NULL)
75
          cp_hprint(cp_event - 1, cp_event - histlength, rev);
76
      else
77
          cp_hprint(cp_event - 1, cp_event - 1 - atoi(wl->wl_word), rev);
78
+ #endif /* ifelse HAS_GNUREADLINE */
79
      return;
80
  }
81
  
(-)cider/files/patch-af (-36 lines)
Lines 1-36 Link Here
1
*** spice/common/src/lib/fte/misccoms.c.orig	Wed Mar  9 04:15:44 1994
2
--- spice/common/src/lib/fte/misccoms.c	Sun Dec 12 14:56:44 1999
3
***************
4
*** 11,16 ****
5
--- 11,24 ----
6
  #include "hlpdefs.h"
7
  #include "suffix.h"
8
  
9
+ #ifdef HAS_GNUREADLINE
10
+ #include <readline/readline.h>
11
+ #include <readline/history.h>
12
+ 
13
+ extern int gnu_history_lines;
14
+ extern char gnu_history_file[];
15
+ #endif
16
+ 
17
  static void byemesg();
18
  
19
  void
20
***************
21
*** 299,304 ****
22
--- 307,320 ----
23
              byemesg();
24
      } else
25
          byemesg();
26
+ 
27
+ #ifdef HAS_GNUREADLINE
28
+     /* Added GNU Readline Support -- Andrew Veliath <veliaa@rpi.edu> */
29
+     if (cp_interactive && (cp_maxhistlength > 0)) {
30
+ 	stifle_history(cp_maxhistlength);
31
+ 	write_history(gnu_history_file);
32
+     }
33
+ #endif /* HAS_GNUREADLINE */
34
  
35
      exit(EXIT_NORMAL);
36
      /* NOTREACHED */
(-)cider/files/patch-ag (-23 lines)
Lines 1-23 Link Here
1
*** spice/common/src/lib/fte/signal.c.orig	Sat Jan 29 18:48:38 1994
2
--- spice/common/src/lib/fte/signal.c	Sun Dec 12 14:56:46 1999
3
***************
4
*** 32,37 ****
5
--- 32,39 ----
6
   * is true.
7
   */
8
  
9
+ /* not using SIGINT with GNU Readline - AV */
10
+ #ifndef HAS_GNUREADLINE
11
  SIGNAL_TYPE
12
  ft_sigintr()
13
  {
14
***************
15
*** 58,63 ****
16
--- 60,66 ----
17
      cp_resetcontrol();
18
      longjmp(jbuf, 1);
19
  }
20
+ #endif /* !HAS_GNUREADLINE */
21
  
22
  /* ARGSUSED */
23
  SIGNAL_TYPE
(-)cider/files/patch-ah (-20 lines)
Lines 1-20 Link Here
1
*** spice/common/src/lib/fte/x10.c.orig	Sat Jan 29 18:47:11 1994
2
--- spice/common/src/lib/fte/x10.c	Sun Dec 12 14:56:48 1999
3
***************
4
*** 726,737 ****
5
--- 726,740 ----
6
              graph->commandline, fx0, fx1, fy0, fy1);
7
      }
8
  
9
+ /* don't use the following if using GNU Readline - AV */
10
+ #ifndef HAS_GNUREADLINE
11
      /* hack for Gordon Jacobs */
12
      /* add to history list if plothistory is set */
13
      if (cp_getvar("plothistory", VT_BOOL, (char *) &dummy)) {
14
        wl = cp_parse(buf);
15
        (void) cp_addhistent(cp_event++, wl);
16
      }
17
+ #endif /* HAS_GNUREADLINE */
18
  
19
      (void) cp_evloop(buf);
20
  
(-)cider/files/patch-ai (-20 lines)
Lines 1-20 Link Here
1
*** spice/common/src/lib/fte/x11.c.orig	Sat Jan 29 18:48:34 1994
2
--- spice/common/src/lib/fte/x11.c	Sun Dec 12 14:56:50 1999
3
***************
4
*** 773,784 ****
5
--- 773,787 ----
6
  	        graph->commandline, fx0, fx1, fy0, fy1);
7
  	}
8
  
9
+ /* don't use the following if using GNU Readline - AV */
10
+ #ifndef HAS_GNUREADLINE
11
  	/* hack for Gordon Jacobs */
12
  	/* add to history list if plothistory is set */
13
  	if (cp_getvar("plothistory", VT_BOOL, (char *) &dummy)) {
14
  	  wl = cp_parse(buf);
15
  	  (void) cp_addhistent(cp_event++, wl);
16
  	}
17
+ #endif /* HAS_GNUREADLINE */
18
  
19
  	(void) cp_evloop(buf);
20
  
(-)cider/files/patch-bc (-178 / +6 lines)
Lines 1-20 Link Here
1
--- cider/common/src/bin/main.c.orig	Sat Mar 12 08:20:59 1994
1
--- cider/common/src/bin/main.c.orig	Sat Mar 12 08:20:59 1994
2
+++ cider/common/src/bin/main.c	Wed Sep 19 11:07:47 2001
2
+++ cider/common/src/bin/main.c	Fri Oct 17 22:19:55 2003
3
@@ -25,6 +25,13 @@
3
@@ -36,6 +36,11 @@
4
 #include <pwd.h>
5
 #endif
6
 
7
+#ifdef HAS_GNUREADLINE
8
+/* Added GNU Readline Support 11/3/97 -- Andrew Veliath <veliaa@rpi.edu> */
9
+#include <readline/readline.h>
10
+#include <readline/history.h>
11
+#include "fteinput.h"
12
+#endif
13
+
14
 #ifdef HAS_UNIX_SIGS
15
 #include <signal.h>
16
 #endif
17
@@ -36,6 +43,11 @@
18
 #endif
4
 #endif
19
 
5
 
20
 #include "patchlev.h"
6
 #include "patchlev.h"
Lines 26-197 Link Here
26
 #include "suffix.h"
12
 #include "suffix.h"
27
 
13
 
28
 /* (Virtual) Machine architecture parameters */
14
 /* (Virtual) Machine architecture parameters */
29
@@ -53,6 +65,11 @@
15
@@ -214,6 +219,10 @@
30
 bool ft_intrpt = false;     /* Set by the (void) signal handlers. */
16
     FILE	*fp;
31
 bool ft_setflag = false;    /* Don't abort after an interrupt. */
17
     FILE	*circuit_file;
32
 
18
 
33
+#ifdef HAS_GNUREADLINE
34
+char gnu_history_file[512];
35
+static char *application_name;
36
+#endif
19
+#endif
37
+
20
+
38
 struct variable *(*if_getparam)( );
39
 
40
 #ifdef BATCH
41
@@ -185,6 +202,95 @@
42
 
43
 #endif
44
 
45
+#ifdef HAS_GNUREADLINE
46
+/* Adapted ../lib/cp/lexical.c:prompt() for GNU Readline -- Andrew Veliath <veliaa@rpi.edu> */
47
+static char *
48
+prompt()
49
+{
50
+    static char pbuf[128];
51
+    int n = sizeof(pbuf);
52
+    char *p = pbuf, *s;
53
+
54
+    if (cp_interactive == false)
55
+        return;
56
+    if (cp_promptstring == NULL)
57
+        s = "-> ";
58
+    else
59
+        s = cp_promptstring;
60
+    if (cp_altprompt)
61
+        s = cp_altprompt;
62
+    while (*s && (n > 1)) {
63
+	int w;
64
+        switch (strip(*s)) {
65
+	case '!':
66
+	    w = snprintf(p, n, "%d", where_history() + 1);
67
+	    w = (w >= n) ? n - 1 : w;
68
+	    p += w;
69
+	    n -= w;
70
+	    break;
71
+	case '\\':
72
+	    if (*(s + 1)) ++s;
73
+	default:
74
+	    *p = strip(*s); ++p;
75
+	    --n;
76
+	    break;
77
+        }
78
+        s++;
79
+    }
80
+    *p = 0;
81
+    return pbuf;
82
+}
83
+
84
+/* Process device events in Readline's hook since there is no where
85
+   else to do it now - AV */
86
+int rl_event_func()
87
+{
88
+    static REQUEST reqst = { checkup_option, 0 };
89
+    Input(&reqst, NULL);
90
+    return 0;
91
+}
92
+
93
+/* Added GNU Readline Support -- Andrew Veliath <veliaa@rpi.edu> */
94
+void app_rl_readlines()
95
+{
96
+    char *line, *expanded_line;
97
+
98
+    strcpy(gnu_history_file, getenv("HOME"));
99
+    strcat(gnu_history_file, "/.");
100
+    strcat(gnu_history_file, application_name);
101
+    strcat(gnu_history_file, "_history");
102
+
103
+    using_history();
104
+    read_history(gnu_history_file);
105
+
106
+    rl_readline_name = application_name;
107
+    rl_instream = cp_in;
108
+    rl_outstream = cp_out;
109
+    rl_event_hook = rl_event_func;
110
+	
111
+    while (1) {
112
+	history_set_pos(history_length);
113
+	line = readline(prompt());
114
+	if (line && *line) {
115
+	    int s = history_expand(line, &expanded_line);
116
+		    
117
+	    if (s == 2) {
118
+		fprintf(stderr, "-> %s\n", expanded_line);
119
+	    } else if (s == -1) {
120
+		fprintf(stderr, "readline: %s\n", expanded_line);
121
+	    } else {
122
+		cp_evloop(expanded_line);
123
+		add_history(expanded_line);
124
+	    }
125
+	    free(expanded_line);
126
+	}
127
+	if (line) free(line);
128
+	else if (line == NULL) cp_evloop("quit");
129
+    }
130
+    /* History gets written in ../fte/misccoms.c com_quit */
131
+}
132
+#endif /* HAS_GNUREADLINE */
133
+
134
 char *hlp_filelist[] = { "spice", "cider", 0 };
135
 
136
 void
137
@@ -216,6 +322,10 @@
138
 
139
 #endif
140
 
141
+#ifdef __FreeBSD__
21
+#ifdef __FreeBSD__
142
+    fpsetmask(fpgetmask() & ~FP_X_INV & ~FP_X_DZ & ~FP_X_OFL);
22
+    fpsetmask(fpgetmask() & ~FP_X_INV & ~FP_X_DZ & ~FP_X_OFL);
143
+#endif
144
+
145
     /* MFB tends to jump to 0 on errors.  This tends to catch it. */
146
     if (started) {
147
         fprintf(cp_err, "main: Internal Error: jump to zero\n");
148
@@ -236,6 +346,13 @@
149
     ARCHsize = 1;
150
 #endif /* PARALLEL_ARCH */
151
 
152
+#ifdef HAS_GNUREADLINE
153
+    if (!(application_name = strrchr(av[0],'/')))
154
+        application_name = av[0];
155
+    else
156
+        ++application_name;
157
+#endif
158
+
159
 #ifdef HAS_MAC_ARGCARGV
160
     ac = initmac(&av);
161
 #endif
162
@@ -472,7 +589,11 @@
163
 #  ifdef HAS_UNIX_SIGS
164
     /* Set up (void) signal handling */
165
     if (!ft_batchmode) {
166
+#    ifdef HAS_GNUREADLINE
167
+        (void) signal(SIGINT, SIG_IGN);
168
+#    else
169
         (void) signal(SIGINT, ft_sigintr);
170
+#    endif
171
         (void) signal(SIGFPE, sigfloat);
172
 #    ifdef SIGTSTP
173
         (void) signal(SIGTSTP, sigstop);
174
@@ -668,7 +789,11 @@
175
     } else {
176
         (void) setjmp(jbuf);
177
         cp_interactive = true;
178
+#ifdef HAS_GNUREADLINE
179
+	app_rl_readlines();
180
+#else
181
 	while (cp_evloop((char *) NULL) == 1) ;
182
+#endif /* ifelse HAS_GNUREADLINE */
183
     }
184
 
185
 #  else /* if BATCH */
186
@@ -708,7 +833,11 @@
187
     /* Nutmeg "main" */
188
     (void) setjmp(jbuf);
189
     cp_interactive = true;
190
+#ifdef HAS_GNUREADLINE
191
+    app_rl_readlines();
192
+#else
193
     while (cp_evloop((char *) NULL) == 1) ;
194
+#endif /* ifelse HAS_GNUREADLINE */
195
 
196
 #endif
23
 #endif
197
 
24
 
25
     /* MFB tends to jump to 0 on errors.  This tends to catch it. */

Return to bug 58238