]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/tui/tui.c
import gdb-1999-07-07 post reformat
[thirdparty/binutils-gdb.git] / gdb / tui / tui.c
CommitLineData
c906108c 1/*
c5aa993b
JM
2 ** tui.c
3 ** General functions for the WDB TUI
4 */
c906108c
SS
5
6#include <stdio.h>
7#include <stdlib.h>
8#include <ctype.h>
9#include <malloc.h>
10#include <curses.h>
11#ifdef HAVE_TERM_H
12#include <term.h>
13#endif
14#include <signal.h>
15#include <fcntl.h>
16#include <termio.h>
17#include <setjmp.h>
18#include "defs.h"
19#include "gdbcmd.h"
20#include "tui.h"
21#include "tuiData.h"
22#include "tuiLayout.h"
23#include "tuiIO.h"
24#include "tuiRegs.h"
25#include "tuiWin.h"
26
27/* The Solaris header files seem to provide no declaration for this at
28 all when __STDC__ is defined. This shouldn't conflict with
29 anything. */
30extern char *tgoto ();
31
32/***********************
33** Local Definitions
34************************/
35#define FILEDES 2
36/* Solaris <sys/termios.h> defines CTRL. */
37#ifndef CTRL
38#define CTRL(x) (x & ~0140)
39#endif
40#define CHK(val, dft) (val<=0 ? dft : val)
41
42#define TOGGLE_USAGE "Usage:toggle breakpoints"
43#define TUI_TOGGLE_USAGE "Usage:\ttoggle $fregs\n\ttoggle breakpoints"
44
45/*****************************
46** Local static forward decls
47******************************/
48static void _tuiReset PARAMS ((void));
49static void _toggle_command PARAMS ((char *, int));
50static void _tui_vToggle_command PARAMS ((va_list));
51static Opaque _tui_vDo PARAMS ((TuiOpaqueFuncPtr, va_list));
52
53
54
55/***********************
56** Public Functions
57************************/
58
59/*
c5aa993b
JM
60 ** tuiInit().
61 */
c906108c
SS
62void
63#ifdef __STDC__
64tuiInit (char *argv0)
65#else
66tuiInit (argv0)
67 char *argv0;
68#endif
69{
70 extern void init_page_info ();
71 extern void initialize_tui_files PARAMS ((void));
72
73 initialize_tui_files ();
74 initializeStaticData ();
75 initscr ();
76 refresh ();
77 setTermHeightTo (LINES);
78 setTermWidthTo (COLS);
79 tuiInitWindows ();
80 wrefresh (cmdWin->generic.handle);
81 init_page_info ();
82 /* Don't hook debugger output if doing command-window
83 * the XDB way. However, one thing we do want to do in
84 * XDB style is set up the scrolling region to be
85 * the bottom of the screen (tuiTermUnsetup()).
c5aa993b 86 */
c906108c
SS
87 fputs_unfiltered_hook = NULL;
88 flush_hook = NULL;
89 rl_initialize (); /* need readline initialization to
c5aa993b
JM
90 * create termcap sequences
91 */
c906108c
SS
92 tuiTermUnsetup (1, cmdWin->detail.commandInfo.curch);
93
94 return;
95} /* tuiInit */
96
97
98/*
c5aa993b
JM
99 ** tuiInitWindows().
100 */
c906108c
SS
101void
102#ifdef __STDC__
103tuiInitWindows (void)
104#else
105tuiInitWindows ()
106#endif
107{
108 TuiWinType type;
109
110 tuiSetLocatorContent (0);
111 showLayout (SRC_COMMAND);
112 keypad (cmdWin->generic.handle, TRUE);
113 echo ();
114 crmode ();
115 nl ();
116 tuiSetWinFocusTo (srcWin);
117
118 return;
119} /* tuiInitWindows */
120
121
122/*
c5aa993b
JM
123 ** tuiCleanUp().
124 ** Kill signal handler and cleanup termination method
125 */
c906108c
SS
126void
127#ifdef __STDC__
128tuiResetScreen (void)
129#else
130tuiResetScreen ()
131#endif
132{
133 TuiWinType type = SRC_WIN;
134
135 keypad (cmdWin->generic.handle, FALSE);
136 for (; type < MAX_MAJOR_WINDOWS; type++)
137 {
138 if (m_winPtrNotNull (winList[type]) &&
139 winList[type]->generic.type != UNDEFINED_WIN &&
140 !winList[type]->generic.isVisible)
141 tuiDelWindow (winList[type]);
142 }
143 endwin ();
144 initscr ();
145 refresh ();
146 echo ();
147 crmode ();
148 nl ();
149
150 return;
151} /* tuiResetScreen */
152
153
154/*
c5aa993b
JM
155 ** tuiCleanUp().
156 ** Kill signal handler and cleanup termination method
157 */
c906108c
SS
158void
159#ifdef __STDC__
160tuiCleanUp (void)
161#else
162tuiCleanUp ()
163#endif
164{
165 char *buffer;
166 extern char *term_cursor_move;
167
168 signal (SIGINT, SIG_IGN);
169 tuiTermSetup (0); /* Restore scrolling region to whole screen */
170 keypad (cmdWin->generic.handle, FALSE);
171 freeAllWindows ();
172 endwin ();
173 buffer = tgoto (term_cursor_move, 0, termHeight ());
174 tputs (buffer, 1, putchar);
175 _tuiReset ();
176
177 return;
178} /* tuiCleanUp */
179
180
181/*
c5aa993b
JM
182 ** tuiError().
183 */
c906108c
SS
184void
185#ifdef __STDC__
186tuiError (
187 char *string,
188 int exitGdb)
189#else
190tuiError (string, exitGdb)
191 char *string;
192 int exitGdb;
193#endif
194{
195 puts_unfiltered (string);
196 if (exitGdb)
197 {
198 tuiCleanUp ();
199 exit (-1);
200 }
201
202 return;
203} /* tuiError */
204
205
206/*
c5aa993b
JM
207 ** tui_vError()
208 ** tuiError with args in a va_list.
209 */
c906108c
SS
210void
211#ifdef __STDC__
212tui_vError (
213 va_list args)
214#else
215tui_vError (args)
216 va_list args;
217#endif
218{
219 char *string;
220 int exitGdb;
221
222 string = va_arg (args, char *);
223 exitGdb = va_arg (args, int);
224
225 tuiError (string, exitGdb);
226
227 return;
228} /* tui_vError */
229
230
231/*
c5aa993b
JM
232 ** tuiFree()
233 ** Wrapper on top of free() to ensure that input address is greater than 0x0
234 */
c906108c
SS
235void
236#ifdef __STDC__
237tuiFree (
238 char *ptr)
239#else
240tuiFree (ptr)
241 char *ptr;
242#endif
243{
244 if (ptr != (char *) NULL)
245 {
246 free (ptr);
247 }
248
249 return;
250} /* tuiFree */
251
252
253/* tuiGetLowDisassemblyAddress().
c5aa993b
JM
254 ** Determine what the low address will be to display in the TUI's
255 ** disassembly window. This may or may not be the same as the
256 ** low address input.
257 */
c906108c
SS
258Opaque
259#ifdef __STDC__
260tuiGetLowDisassemblyAddress (
261 Opaque low,
262 Opaque pc)
263#else
264tuiGetLowDisassemblyAddress (low, pc)
265 Opaque low;
266 Opaque pc;
267#endif
268{
269 int line;
270 Opaque newLow;
271
272 /*
c5aa993b
JM
273 ** Determine where to start the disassembly so that the pc is about in the
274 ** middle of the viewport.
275 */
c906108c
SS
276 for (line = 0, newLow = pc;
277 (newLow > low &&
278 line < (tuiDefaultWinViewportHeight (DISASSEM_WIN,
279 DISASSEM_COMMAND) / 2));)
280 {
281 bfd_byte buffer[4];
282
283 newLow -= sizeof (bfd_getb32 (buffer));
284 line++;
285 }
286
287 return newLow;
288} /* tuiGetLowDisassemblyAddress */
289
290
291/* tui_vGetLowDisassemblyAddress().
c5aa993b
JM
292 ** Determine what the low address will be to display in the TUI's
293 ** disassembly window with args in a va_list.
294 */
c906108c
SS
295Opaque
296#ifdef __STDC__
297tui_vGetLowDisassemblyAddress (
298 va_list args)
299#else
300tui_vGetLowDisassemblyAddress (args)
301 va_list args;
302#endif
303{
304 int line;
305 Opaque newLow;
306 Opaque low;
307 Opaque pc;
308
309 low = va_arg (args, Opaque);
310 pc = va_arg (args, Opaque);
311
312 return (tuiGetLowDisassemblyAddress (low, pc));
313
314} /* tui_vGetLowDisassemblyAddress */
315
316
317/*
c5aa993b
JM
318 ** tuiDo().
319 ** General purpose function to execute a tui function. Transitions
320 ** between curses and the are handled here. This function is called
321 ** by non-tui gdb functions.
322 **
323 ** Errors are caught here.
324 ** If there is no error, the value returned by 'func' is returned.
325 ** If there is an error, then zero is returned.
326 **
327 ** Must not be called with immediate_quit in effect (bad things might
328 ** happen, say we got a signal in the middle of a memcpy to quit_return).
329 ** This is an OK restriction; with very few exceptions immediate_quit can
330 ** be replaced by judicious use of QUIT.
331 */
c906108c
SS
332Opaque
333#ifdef __STDC__
334tuiDo (
335 TuiOpaqueFuncPtr func,...)
336#else
337tuiDo (func, va_alist)
338 TuiOpaqueFuncPtr func;
339 va_dcl
340#endif
341{
342 extern int terminal_is_ours;
343
344 Opaque ret = (Opaque) NULL;
345
346 /* It is an error to be tuiDo'ing if we
347 * don't own the terminal.
c5aa993b 348 */
c906108c
SS
349 if (!terminal_is_ours)
350 return ret;
351
352 if (tui_version)
353 {
354 va_list args;
355
356#ifdef __STDC__
357 va_start (args, func);
358#else
359 va_start (args);
360#endif
361 ret = _tui_vDo (func, args);
362 va_end (args);
363 }
364
365 return ret;
366} /* tuiDo */
367
368
369/*
c5aa993b
JM
370 ** tuiDoAndReturnToTop().
371 ** General purpose function to execute a tui function. Transitions
372 ** between curses and the are handled here. This function is called
373 ** by non-tui gdb functions who wish to reset gdb to the top level.
374 ** After the tuiDo is performed, a return to the top level occurs.
375 **
376 ** Errors are caught here.
377 ** If there is no error, the value returned by 'func' is returned.
378 ** If there is an error, then zero is returned.
379 **
380 ** Must not be called with immediate_quit in effect (bad things might
381 ** happen, say we got a signal in the middle of a memcpy to quit_return).
382 ** This is an OK restriction; with very few exceptions immediate_quit can
383 ** be replaced by judicious use of QUIT.
384 **
385 */
c906108c
SS
386Opaque
387#ifdef __STDC__
388tuiDoAndReturnToTop (
389 TuiOpaqueFuncPtr func,...)
390#else
391tuiDoAndReturnToTop (func, va_alist)
392 TuiOpaqueFuncPtr func;
393 va_dcl
394#endif
395{
396 extern int terminal_is_ours;
397
398 Opaque ret = (Opaque) NULL;
399
400 /* It is an error to be tuiDo'ing if we
401 * don't own the terminal.
c5aa993b 402 */
c906108c
SS
403 if (!terminal_is_ours)
404 return ret;
405
406 if (tui_version)
407 {
408 va_list args;
409
410#ifdef __STDC__
411 va_start (args, func);
412#else
413 va_start (args);
414#endif
415 ret = _tui_vDo (func, args);
416
417 /* force a return to the top level */
418 return_to_top_level (RETURN_ERROR);
419 }
420
421 return ret;
422} /* tuiDoAndReturnToTop */
423
424
425void
426#ifdef __STDC__
427tui_vSelectSourceSymtab (
428 va_list args)
429#else
430tui_vSelectSourceSymtab (args)
431 va_list args;
432#endif
433{
434 struct symtab *s = va_arg (args, struct symtab *);
435
436 select_source_symtab (s);
437 return;
438} /* tui_vSelectSourceSymtab */
439
440
441/*
c5aa993b
JM
442 ** _initialize_tui().
443 ** Function to initialize gdb commands, for tui window manipulation.
444 */
c906108c
SS
445void
446_initialize_tui ()
447{
448#if 0
449 if (tui_version)
450 {
451 add_com ("toggle", class_tui, _toggle_command,
452 "Toggle Terminal UI Features\n\
453Usage: Toggle $fregs\n\
454\tToggles between single and double precision floating point registers.\n");
455 }
456#endif
457 char *helpStr;
458
459 if (tui_version)
460 helpStr = "Toggle Specified Features\n\
461Usage:\ttoggle $fregs\n\ttoggle breakpoints";
462 else
463 helpStr = "Toggle Specified Features\nUsage:toggle breakpoints";
464 add_abbrev_prefix_cmd ("toggle",
465 class_tui,
466 _toggle_command,
467 helpStr,
468 &togglelist,
469 "toggle ",
470 1,
471 &cmdlist);
c5aa993b 472} /* _initialize_tui */
c906108c
SS
473
474
475/*
c5aa993b
JM
476 ** va_catch_errors().
477 ** General purpose function to execute a function, catching errors.
478 ** If there is no error, the value returned by 'func' is returned.
479 ** If there is error, then zero is returned.
480 ** Note that 'func' must take a variable argument list as well.
481 **
482 ** Must not be called with immediate_quit in effect (bad things might
483 ** happen, say we got a signal in the middle of a memcpy to quit_return).
484 ** This is an OK restriction; with very few exceptions immediate_quit can
485 ** be replaced by judicious use of QUIT.
486 */
c906108c
SS
487Opaque
488#ifdef __STDC__
489va_catch_errors (
490 TuiOpaqueFuncPtr func,
491 va_list args)
492#else
493va_catch_errors (func, args)
494 TuiOpaqueFuncPtr func;
495 va_list args;
496#endif
497{
498 Opaque ret = (Opaque) NULL;
499
500 /*
c5aa993b
JM
501 ** We could have used catch_errors(), but it doesn't handle variable args.
502 ** Also, for the tui, we always want to catch all errors, so we don't
503 ** need to pass a mask, or an error string.
504 */
c906108c
SS
505 jmp_buf saved_error;
506 jmp_buf saved_quit;
507 jmp_buf tmp_jmp;
508 struct cleanup *saved_cleanup_chain;
509 char *saved_error_pre_print;
510 char *saved_quit_pre_print;
511 extern jmp_buf error_return;
512 extern jmp_buf quit_return;
513
514 saved_cleanup_chain = save_cleanups ();
515 saved_error_pre_print = error_pre_print;
516 saved_quit_pre_print = quit_pre_print;
517
518 memcpy ((char *) saved_error, (char *) error_return, sizeof (jmp_buf));
519 error_pre_print = "";
520 memcpy (saved_quit, quit_return, sizeof (jmp_buf));
521 quit_pre_print = "";
522
523 if (setjmp (tmp_jmp) == 0)
524 {
525 va_list argList = args;
526 memcpy (error_return, tmp_jmp, sizeof (jmp_buf));
527 memcpy (quit_return, tmp_jmp, sizeof (jmp_buf));
528 ret = func (argList);
529 }
530 restore_cleanups (saved_cleanup_chain);
531 memcpy (error_return, saved_error, sizeof (jmp_buf));
532 error_pre_print = saved_error_pre_print;
533 memcpy (quit_return, saved_quit, sizeof (jmp_buf));
534 quit_pre_print = saved_quit_pre_print;
535
536 return ret;
537}
538
539/*
c5aa993b
JM
540 ** vcatch_errors().
541 ** Catch errors occurring in tui or non tui function, handling
542 ** variable param lists. Note that 'func' must take a variable
543 ** argument list as well.
544 */
c906108c
SS
545Opaque
546#ifdef __STDC__
547vcatch_errors (
548 OpaqueFuncPtr func,...)
549#else
550vcatch_errors (va_alist)
551 va_dcl
552/*
c5aa993b
JM
553 vcatch_errors(func, va_alist)
554 OpaqueFuncPtr func;
555 va_dcl
556 */
c906108c
SS
557#endif
558{
559 Opaque ret = (Opaque) NULL;
560 va_list args;
561#ifdef __STDC__
562 va_start (args, func);
563/*
c5aa993b
JM
564 va_arg(args, OpaqueFuncPtr);
565 */
c906108c
SS
566#else
567 OpaqueFuncPtr func;
568
569 va_start (args);
570 func = va_arg (args, OpaqueFuncPtr);
571#endif
572 ret = va_catch_errors (func, args);
573 va_end (args);
574
575 return ret;
576}
577
578
579void
580#ifdef __STDC__
581strcat_to_buf (
582 char *buf,
583 int buflen,
584 char *itemToAdd)
585#else
586strcat_to_buf (buf, buflen, itemToAdd)
587 char *buf;
588 int buflen;
589 char *itemToAdd;
590#endif
591{
592 if (itemToAdd != (char *) NULL && buf != (char *) NULL)
593 {
594 if ((strlen (buf) + strlen (itemToAdd)) <= buflen)
595 strcat (buf, itemToAdd);
596 else
597 strncat (buf, itemToAdd, (buflen - strlen (buf)));
598 }
599
600 return;
601} /* strcat_to_buf */
602
603/* VARARGS */
604void
605#ifdef ANSI_PROTOTYPES
606strcat_to_buf_with_fmt (
607 char *buf,
608 int bufLen,
609 char *format,...)
610#else
611strcat_to_buf_with_fmt (va_alist)
612 va_dcl
613#endif
614{
615 char *linebuffer;
616 struct cleanup *old_cleanups;
617 va_list args;
618#ifdef ANSI_PROTOTYPES
619 va_start (args, format);
620#else
621 char *buf;
622 int bufLen;
623 char *format;
624
625 va_start (args);
626 buf = va_arg (args, char *);
627 bufLen = va_arg (args, int);
628 format = va_arg (args, char *);
629#endif
630 vasprintf (&linebuffer, format, args);
631 old_cleanups = make_cleanup (free, linebuffer);
632 strcat_to_buf (buf, bufLen, linebuffer);
633 do_cleanups (old_cleanups);
634 va_end (args);
635}
636
637
638
639
640
641/***********************
642** Static Functions
643************************/
644
645
646/*
c5aa993b
JM
647 ** _tui_vDo().
648 ** General purpose function to execute a tui function. Transitions
649 ** between curses and the are handled here. This function is called
650 ** by non-tui gdb functions.
651 **
652 ** Errors are caught here.
653 ** If there is no error, the value returned by 'func' is returned.
654 ** If there is an error, then zero is returned.
655 **
656 ** Must not be called with immediate_quit in effect (bad things might
657 ** happen, say we got a signal in the middle of a memcpy to quit_return).
658 ** This is an OK restriction; with very few exceptions immediate_quit can
659 ** be replaced by judicious use of QUIT.
660 */
c906108c
SS
661static Opaque
662#ifdef __STDC__
663_tui_vDo (
664 TuiOpaqueFuncPtr func,
665 va_list args)
666#else
667_tui_vDo (func, args)
668 TuiOpaqueFuncPtr func;
669 va_list args;
670#endif
671{
672 extern int terminal_is_ours;
673
674 Opaque ret = (Opaque) NULL;
675
676 /* It is an error to be tuiDo'ing if we
677 * don't own the terminal.
c5aa993b 678 */
c906108c
SS
679 if (!terminal_is_ours)
680 return ret;
681
682 if (tui_version)
683 {
684 /* If doing command window the "XDB way" (command window
685 * is unmanaged by curses...
c5aa993b 686 */
c906108c
SS
687 /* Set up terminal for TUI */
688 tuiTermSetup (1);
689
690 ret = va_catch_errors (func, args);
691
692 /* Set up terminal for command window */
693 tuiTermUnsetup (1, cmdWin->detail.commandInfo.curch);
694 }
695
696 return ret;
697} /* _tui_vDo */
698
699
700static void
701#ifdef __STDC__
702_toggle_command (
703 char *arg,
704 int fromTTY)
705#else
706_toggle_command (arg, fromTTY)
707 char *arg;
708 int fromTTY;
709#endif
710{
711 printf_filtered ("Specify feature to toggle.\n%s\n",
712 (tui_version) ? TUI_TOGGLE_USAGE : TOGGLE_USAGE);
713/*
c5aa993b
JM
714 tuiDo((TuiOpaqueFuncPtr)_Toggle_command, arg, fromTTY);
715 */
c906108c
SS
716}
717
718/*
c5aa993b
JM
719 ** _tui_vToggle_command().
720 */
c906108c
SS
721static void
722#ifdef __STDC__
723_tui_vToggle_command (
724 va_list args)
725#else
726_tui_vToggle_command (args)
727 va_list args;
728#endif
729{
730 char *arg;
731 int fromTTY;
732
733 arg = va_arg (args, char *);
734
735 if (arg == (char *) NULL)
736 printf_filtered (TOGGLE_USAGE);
737 else
738 {
739 char *ptr = (char *) tuiStrDup (arg);
740 int i;
741
742 for (i = 0; (ptr[i]); i++)
743 ptr[i] = toupper (arg[i]);
744
745 if (subsetCompare (ptr, TUI_FLOAT_REGS_NAME))
746 tuiToggleFloatRegs ();
747/* else if (subsetCompare(ptr, "ANOTHER TOGGLE OPTION"))
c5aa993b
JM
748 ...
749 */
c906108c
SS
750 else
751 printf_filtered (TOGGLE_USAGE);
752 tuiFree (ptr);
753 }
754
755 return;
756} /* _tuiToggle_command */
757
758
759static void
760#ifdef __STDC__
761_tuiReset (void)
762#else
763_tuiReset ()
764#endif
765{
766 struct termio mode;
767
768 /*
c5aa993b
JM
769 ** reset the teletype mode bits to a sensible state.
770 ** Copied tset.c
771 */
c906108c
SS
772#if ! defined (USG) && defined (TIOCGETC)
773 struct tchars tbuf;
774#endif /* !USG && TIOCGETC */
775#ifdef UCB_NTTY
776 struct ltchars ltc;
777
778 if (ldisc == NTTYDISC)
779 {
780 ioctl (FILEDES, TIOCGLTC, &ltc);
781 ltc.t_suspc = CHK (ltc.t_suspc, CTRL ('Z'));
782 ltc.t_dsuspc = CHK (ltc.t_dsuspc, CTRL ('Y'));
783 ltc.t_rprntc = CHK (ltc.t_rprntc, CTRL ('R'));
784 ltc.t_flushc = CHK (ltc.t_flushc, CTRL ('O'));
785 ltc.t_werasc = CHK (ltc.t_werasc, CTRL ('W'));
786 ltc.t_lnextc = CHK (ltc.t_lnextc, CTRL ('V'));
787 ioctl (FILEDES, TIOCSLTC, &ltc);
788 }
789#endif /* UCB_NTTY */
790#ifndef USG
791#ifdef TIOCGETC
792 ioctl (FILEDES, TIOCGETC, &tbuf);
793 tbuf.t_intrc = CHK (tbuf.t_intrc, CTRL ('?'));
794 tbuf.t_quitc = CHK (tbuf.t_quitc, CTRL ('\\'));
795 tbuf.t_startc = CHK (tbuf.t_startc, CTRL ('Q'));
796 tbuf.t_stopc = CHK (tbuf.t_stopc, CTRL ('S'));
797 tbuf.t_eofc = CHK (tbuf.t_eofc, CTRL ('D'));
798 /* brkc is left alone */
799 ioctl (FILEDES, TIOCSETC, &tbuf);
800#endif /* TIOCGETC */
801 mode.sg_flags &= ~(RAW
802#ifdef CBREAK
803 | CBREAK
804#endif /* CBREAK */
805 | VTDELAY | ALLDELAY);
806 mode.sg_flags |= XTABS | ECHO | CRMOD | ANYP;
c5aa993b 807#else /*USG */
c906108c
SS
808 ioctl (FILEDES, TCGETA, &mode);
809 mode.c_cc[VINTR] = CHK (mode.c_cc[VINTR], CTRL ('?'));
810 mode.c_cc[VQUIT] = CHK (mode.c_cc[VQUIT], CTRL ('\\'));
811 mode.c_cc[VEOF] = CHK (mode.c_cc[VEOF], CTRL ('D'));
812
813 mode.c_iflag &= ~(IGNBRK | PARMRK | INPCK | INLCR | IGNCR | IUCLC | IXOFF);
814 mode.c_iflag |= (BRKINT | ISTRIP | ICRNL | IXON);
815 mode.c_oflag &= ~(OLCUC | OCRNL | ONOCR | ONLRET | OFILL | OFDEL |
816 NLDLY | CRDLY | TABDLY | BSDLY | VTDLY | FFDLY);
817 mode.c_oflag |= (OPOST | ONLCR);
818 mode.c_cflag &= ~(CSIZE | PARODD | CLOCAL);
819#ifndef hp9000s800
820 mode.c_cflag |= (CS8 | CREAD);
c5aa993b 821#else /*hp9000s800 */
c906108c
SS
822 mode.c_cflag |= (CS8 | CSTOPB | CREAD);
823#endif /* hp9000s800 */
824 mode.c_lflag &= ~(XCASE | ECHONL | NOFLSH);
825 mode.c_lflag |= (ISIG | ICANON | ECHO | ECHOK);
826 ioctl (FILEDES, TCSETAW, &mode);
827#endif /* USG */
828
829 return;
830} /* _tuiReset */