diff options
Diffstat (limited to 'lib/libftp/utils/readline.c')
-rw-r--r-- | lib/libftp/utils/readline.c | 961 |
1 files changed, 0 insertions, 961 deletions
diff --git a/lib/libftp/utils/readline.c b/lib/libftp/utils/readline.c deleted file mode 100644 index e019bc1..0000000 --- a/lib/libftp/utils/readline.c +++ /dev/null @@ -1,961 +0,0 @@ -#ifndef lint -static char *RCSid = "$Id: readline.c,v 1.1.1.1 1995/04/25 15:05:09 jkh Exp $"; -#endif - - -/* GNUPLOT - readline.c */ -/* - * Copyright (C) 1986 - 1993 Thomas Williams, Colin Kelley - * - * Permission to use, copy, and distribute this software and its - * documentation for any purpose with or without fee is hereby granted, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear - * in supporting documentation. - * - * Permission to modify the software is granted, but not the right to - * distribute the modified code. Modifications are to be distributed - * as patches to released version. - * - * This software is provided "as is" without express or implied warranty. - * - * - * AUTHORS - * - * Original Software: - * Tom Tkacik - * - * Msdos port and some enhancements: - * Gershon Elber and many others. - * - * There is a mailing list for gnuplot users. Note, however, that the - * newsgroup - * comp.graphics.gnuplot - * is identical to the mailing list (they - * both carry the same set of messages). We prefer that you read the - * messages through that newsgroup, to subscribing to the mailing list. - * (If you can read that newsgroup, and are already on the mailing list, - * please send a message info-gnuplot-request@dartmouth.edu, asking to be - * removed from the mailing list.) - * - * The address for mailing to list members is - * info-gnuplot@dartmouth.edu - * and for mailing administrative requests is - * info-gnuplot-request@dartmouth.edu - * The mailing list for bug reports is - * bug-gnuplot@dartmouth.edu - * The list of those interested in beta-test versions is - * info-gnuplot-beta@dartmouth.edu - */ - -#ifdef READLINE -#ifdef ATARI -#include "plot.h" -#endif -#ifdef _WINDOWS -#define _Windows -#endif - -/* a small portable version of GNU's readline */ -/* this is not the BASH or GNU EMACS version of READLINE due to Copyleft - restrictions */ -/* do not need any terminal capabilities except backspace, */ -/* and space overwrites a character */ - -/* NANO-EMACS line editing facility */ -/* printable characters print as themselves (insert not overwrite) */ -/* ^A moves to the beginning of the line */ -/* ^B moves back a single character */ -/* ^E moves to the end of the line */ -/* ^F moves forward a single character */ -/* ^K kills from current position to the end of line */ -/* ^P moves back through history */ -/* ^N moves forward through history */ -/* ^H and DEL delete the previous character */ -/* ^D deletes the current character, or EOF if line is empty */ -/* ^L/^R redraw line in case it gets trashed */ -/* ^U kills the entire line */ -/* ^W kills last word */ -/* LF and CR return the entire line regardless of the cursor postition */ -/* EOF with an empty line returns (char *)NULL */ - -/* all other characters are ignored */ - -#include <stdio.h> -#include <ctype.h> -#include <signal.h> - -#if !defined(MSDOS) && !defined(ATARI) && !defined(_Windows) && !defined(DOS386) - -/* - * Set up structures using the proper include file - */ -#if defined(_IBMR2) || defined(alliant) -#define SGTTY -#endif - -/* submitted by Francois.Dagorn@cicb.fr */ -#ifdef SGTTY -#include <sgtty.h> -static struct sgttyb orig_termio, rl_termio; -/* define terminal control characters */ -static struct tchars s_tchars; -#define VERASE 0 -#define VEOF 1 -#define VKILL 2 -#ifdef TIOCGLTC /* available only with the 'new' line discipline */ -static struct ltchars s_ltchars; -#define VWERASE 3 -#define VREPRINT 4 -#define VSUSP 5 -#endif /* TIOCGLTC */ -#define NCCS 6 - -#else /* SGTTY */ - -/* SIGTSTP defines job control */ -/* if there is job control then we need termios.h instead of termio.h */ -/* (Are there any systems with job control that use termio.h? I hope not.) */ -#ifdef SIGTSTP -#define TERMIOS -#include <termios.h> -/* Added by Robert Eckardt, RobertE@beta.TP2.Ruhr-Uni-Bochum.de */ -#ifdef ISC22 -#ifndef ONOCR /* taken from sys/termio.h */ -#define ONOCR 0000020 /* true at least for ISC 2.2 */ -#endif -#ifndef IUCLC -#define IUCLC 0001000 -#endif -#endif /* ISC22 */ - -static struct termios orig_termio, rl_termio; -#else -#include <termio.h> -static struct termio orig_termio, rl_termio; -/* termio defines NCC instead of NCCS */ -#define NCCS NCC -#endif /* SIGTSTP */ -#endif /* SGTTY */ - -/* ULTRIX defines VRPRNT instead of VREPRINT */ -#ifdef VRPRNT -#define VREPRINT VRPRNT -#endif - -/* define characters to use with our input character handler */ -static char term_chars[NCCS]; - -static int term_set = 0; /* =1 if rl_termio set */ - -#define special_getc() ansi_getc() -static char ansi_getc(); - -#else /* !MSDOS && !ATARI && !_Windows */ - -#ifdef _Windows -#include <windows.h> -#include "win/wtext.h" -#include "win/wgnuplib.h" -extern TW textwin; -#define TEXTUSER 0xf1 -#define TEXTGNUPLOT 0xf0 -#define special_getc() msdos_getch() -static char msdos_getch(); -#endif - -#if defined(MSDOS) || defined(DOS386) -/* MSDOS specific stuff */ -#ifdef DJGPP -#include <pc.h> -#endif -#ifdef __EMX__ -#include <conio.h> -#endif -#define special_getc() msdos_getch() -static char msdos_getch(); -#endif /* MSDOS */ - -#ifdef ATARI -#include <stdlib.h> -#ifdef __PUREC__ -#include <tos.h> -#else -#include <osbind.h> -#endif -#define special_getc() tos_getch() -static char tos_getch(); -#endif - -#endif /* !MSDOS && !ATARI && !_Windows */ - -#if !defined(ATARI) -/* is it <string.h> or <strings.h>? just declare what we need */ -extern int strlen(); -extern char *strcpy(); -#endif -#define alloc malloc -extern char *alloc(); /* we'll use the safe malloc from misc.c */ - -#define MAXBUF 1024 -#define BACKSPACE 0x08 /* ^H */ -#define SPACE ' ' - -struct hist { - char *line; - struct hist *prev; - struct hist *next; -}; - -static struct hist *history = NULL; /* no history yet */ -static struct hist *cur_entry = NULL; - -static char cur_line[MAXBUF]; /* current contents of the line */ -static int cur_pos = 0; /* current position of the cursor */ -static int max_pos = 0; /* maximum character position */ - - -void add_history(); -static void fix_line(); -static void redraw_line(); -static void clear_line(); -static void clear_eoline(); -static void copy_line(); -static void set_termio(); -void reset_termio(); - -/* user_putc and user_puts should be used in the place of - * fputc(ch,stderr) and fputs(str,stderr) for all output - * of user typed characters. This allows MS-Windows to - * display user input in a different color. */ -int -user_putc(ch) -int ch; -{ - int rv; -#ifdef _Windows - TextAttr(&textwin,TEXTUSER); -#endif - rv = fputc(ch, stderr); -#ifdef _Windows - TextAttr(&textwin,TEXTGNUPLOT); -#endif - return rv; -} - -int -user_puts(str) -char *str; -{ - int rv; -#ifdef _Windows - TextAttr(&textwin,TEXTUSER); -#endif - rv = fputs(str, stderr); -#ifdef _Windows - TextAttr(&textwin,TEXTGNUPLOT); -#endif - return rv; -} - -/* This function provides a centralized non-destructive backspace capability */ -/* M. Castro */ - -backspace() -{ - user_putc(BACKSPACE); -} - -char * -readline(prompt) -char *prompt; -{ - - unsigned char cur_char; - char *new_line; - /* unsigned char *new_line; */ - - /* set the termio so we can do our own input processing */ - set_termio(); - - /* print the prompt */ - fputs(prompt, stderr); - cur_line[0] = '\0'; - cur_pos = 0; - max_pos = 0; - cur_entry = NULL; - - /* get characters */ - for(;;) { - cur_char = special_getc(); -#ifdef OS2 - /* for emx: remap scan codes for cursor keys */ - if( cur_char == 0 ) { - cur_char = getc(stdin); - switch( cur_char){ - case 75: /* left, map to ^B */ - cur_char=2; - break ; - case 77: /* right, map to ^F */ - cur_char=6; - break ; - case 115: /* ctrl left */ - case 71: /* home, map to ^A */ - cur_char=1; - break ; - case 116: /* ctrl right */ - case 79: /* end, map to ^E */ - cur_char=5; - break ; - case 72: /* up, map to ^P */ - cur_char=16; - break ; - case 80: /* down, map to ^N */ - cur_char=14; - break ; - case 83: /* delete, map to ^D */ - cur_char=4; - break ; - default: /* ignore */ - cur_char=0; - continue ; - } - } -#endif /*OS2*/ - if((isprint(cur_char) -#if defined(ATARI) || defined(_Windows) || defined(MSDOS) || defined(DOS386) - /* this should be used for all 8bit ASCII machines, I guess */ - || ((unsigned char)cur_char > 0x7f) -#endif - )&& max_pos<MAXBUF-1) { - int i; - for(i=max_pos; i>cur_pos; i--) { - cur_line[i] = cur_line[i-1]; - } - user_putc(cur_char); - cur_line[cur_pos] = cur_char; - cur_pos += 1; - max_pos += 1; - if (cur_pos < max_pos) - fix_line(); - cur_line[max_pos] = '\0'; - - /* else interpret unix terminal driver characters */ -#ifdef VERASE - } else if(cur_char == term_chars[VERASE] ){ /* DEL? */ - if(cur_pos > 0) { - int i; - cur_pos -= 1; - backspace(); - for(i=cur_pos; i<max_pos; i++) - cur_line[i] = cur_line[i+1]; - max_pos -= 1; - fix_line(); - } -#endif /* VERASE */ -#ifdef VEOF - } else if(cur_char == term_chars[VEOF] ){ /* ^D? */ - if(max_pos == 0) { - reset_termio(); - return((char *)NULL); - } - if((cur_pos < max_pos)&&(cur_char == 004)) { /* ^D */ - int i; - for(i=cur_pos; i<max_pos; i++) - cur_line[i] = cur_line[i+1]; - max_pos -= 1; - fix_line(); - } -#endif /* VEOF */ -#ifdef VKILL - } else if(cur_char == term_chars[VKILL] ){ /* ^U? */ - clear_line(prompt); -#endif /* VKILL */ -#ifdef VWERASE - } else if(cur_char == term_chars[VWERASE] ){ /* ^W? */ - while((cur_pos > 0) && - (cur_line[cur_pos-1] == SPACE)) { - cur_pos -= 1; - backspace(); - } - while((cur_pos > 0) && - (cur_line[cur_pos-1] != SPACE)) { - cur_pos -= 1; - backspace(); - } - clear_eoline(); - max_pos = cur_pos; -#endif /* VWERASE */ -#ifdef VREPRINT - } else if(cur_char == term_chars[VREPRINT] ){ /* ^R? */ - putc('\n',stderr); /* go to a fresh line */ - redraw_line(prompt); -#endif /* VREPRINT */ -#ifdef VSUSP - } else if(cur_char == term_chars[VSUSP]) { - reset_termio(); - kill(0, SIGTSTP); - - /* process stops here */ - - set_termio(); - /* print the prompt */ - redraw_line(prompt); -#endif /* VSUSP */ - } else { - /* do normal editing commands */ - /* some of these are also done above */ - int i; - switch(cur_char) { - case EOF: - reset_termio(); - return((char *)NULL); - case 001: /* ^A */ - while(cur_pos > 0) { - cur_pos -= 1; - backspace(); - } - break; - case 002: /* ^B */ - if(cur_pos > 0) { - cur_pos -= 1; - backspace(); - } - break; - case 005: /* ^E */ - while(cur_pos < max_pos) { - user_putc(cur_line[cur_pos]); - cur_pos += 1; - } - break; - case 006: /* ^F */ - if(cur_pos < max_pos) { - user_putc(cur_line[cur_pos]); - cur_pos += 1; - } - break; - case 013: /* ^K */ - clear_eoline(); - max_pos = cur_pos; - break; - case 020: /* ^P */ - if(history != NULL) { - if(cur_entry == NULL) { - cur_entry = history; - clear_line(prompt); - copy_line(cur_entry->line); - } else if(cur_entry->prev != NULL) { - cur_entry = cur_entry->prev; - clear_line(prompt); - copy_line(cur_entry->line); - } - } - break; - case 016: /* ^N */ - if(cur_entry != NULL) { - cur_entry = cur_entry->next; - clear_line(prompt); - if(cur_entry != NULL) - copy_line(cur_entry->line); - else - cur_pos = max_pos = 0; - } - break; - case 014: /* ^L */ - case 022: /* ^R */ - putc('\n',stderr); /* go to a fresh line */ - redraw_line(prompt); - break; - case 0177: /* DEL */ - case 010: /* ^H */ - if(cur_pos > 0) { - cur_pos -= 1; - backspace(); - for(i=cur_pos; i<max_pos; i++) - cur_line[i] = cur_line[i+1]; - max_pos -= 1; - fix_line(); - } - break; - case 004: /* ^D */ - if(max_pos == 0) { - reset_termio(); - return((char *)NULL); - } - if(cur_pos < max_pos) { - for(i=cur_pos; i<max_pos; i++) - cur_line[i] = cur_line[i+1]; - max_pos -= 1; - fix_line(); - } - break; - case 025: /* ^U */ - clear_line(prompt); - break; - case 027: /* ^W */ - while((cur_pos > 0) && - (cur_line[cur_pos-1] == SPACE)) { - cur_pos -= 1; - backspace(); - } - while((cur_pos > 0) && - (cur_line[cur_pos-1] != SPACE)) { - cur_pos -= 1; - backspace(); - } - clear_eoline(); - max_pos = cur_pos; - break; - case '\n': /* ^J */ - case '\r': /* ^M */ - cur_line[max_pos+1] = '\0'; - putc('\n', stderr); - new_line = (char *)alloc((unsigned long) (strlen(cur_line)+1), "history"); - strcpy(new_line,cur_line); - reset_termio(); - return(new_line); - default: - break; - } - } - } -} - -/* fix up the line from cur_pos to max_pos */ -/* do not need any terminal capabilities except backspace, */ -/* and space overwrites a character */ -static void -fix_line() -{ - int i; - - /* write tail of string */ - for(i=cur_pos; i<max_pos; i++) - user_putc(cur_line[i]); - - /* write a space at the end of the line in case we deleted one */ - user_putc(SPACE); - - /* backup to original position */ - for(i=max_pos+1; i>cur_pos; i--) - backspace(); - -} - -/* redraw the entire line, putting the cursor where it belongs */ -static void -redraw_line(prompt) -char *prompt; -{ - int i; - - fputs(prompt, stderr); - user_puts(cur_line); - - /* put the cursor where it belongs */ - for(i=max_pos; i>cur_pos; i--) - backspace(); -} - -/* clear cur_line and the screen line */ -static void -clear_line(prompt) -char *prompt; -{ - int i; - for(i=0; i<max_pos; i++) - cur_line[i] = '\0'; - - for(i=cur_pos; i>0; i--) - backspace(); - - for(i=0; i<max_pos; i++) - putc(SPACE, stderr); - - putc('\r', stderr); - fputs(prompt, stderr); - - cur_pos = 0; - max_pos = 0; -} - -/* clear to end of line and the screen end of line */ -static void -clear_eoline(prompt) -char *prompt; -{ - int i; - for(i=cur_pos; i<max_pos; i++) - cur_line[i] = '\0'; - - for(i=cur_pos; i<max_pos; i++) - putc(SPACE, stderr); - for(i=cur_pos; i<max_pos; i++) - backspace(); -} - -/* copy line to cur_line, draw it and set cur_pos and max_pos */ -static void -copy_line(line) -char *line; -{ - strcpy(cur_line, line); - user_puts(cur_line); - cur_pos = max_pos = strlen(cur_line); -} - -/* add line to the history */ -void -add_history(line) -char *line; -{ - struct hist *entry; - entry = (struct hist *)alloc((unsigned long)sizeof(struct hist),"history"); - entry->line = alloc((unsigned long)(strlen(line)+1),"history"); - strcpy(entry->line, line); - - entry->prev = history; - entry->next = NULL; - if(history != NULL) { - history->next = entry; - } - history = entry; -} - - -/* Convert ANSI arrow keys to control characters */ -static char -ansi_getc() -{ - char c = getc(stdin); - if (c == 033) { - c = getc(stdin); /* check for CSI */ - if (c == '[') { - c = getc(stdin); /* get command character */ - switch (c) { - case 'D': /* left arrow key */ - c = 002; - break; - case 'C': /* right arrow key */ - c = 006; - break; - case 'A': /* up arrow key */ - c = 020; - break; - case 'B': /* down arrow key */ - c = 016; - break; - } - } - } - return c; -} - -#if defined(MSDOS) || defined(_Windows) || defined(DOS386) - -/* Convert Arrow keystrokes to Control characters: */ -static char -msdos_getch() -{ -#ifdef DJGPP - char c; - int ch = getkey(); - c = (ch & 0xff00) ? 0 : ch & 0xff; -#else - char c = getch(); -#endif - - if (c == 0) { -#ifdef DJGPP - c = ch & 0xff; -#else - c = getch(); /* Get the extended code. */ -#endif - switch (c) { - case 75: /* Left Arrow. */ - c = 002; - break; - case 77: /* Right Arrow. */ - c = 006; - break; - case 72: /* Up Arrow. */ - c = 020; - break; - case 80: /* Down Arrow. */ - c = 016; - break; - case 115: /* Ctl Left Arrow. */ - case 71: /* Home */ - c = 001; - break; - case 116: /* Ctl Right Arrow. */ - case 79: /* End */ - c = 005; - break; - case 83: /* Delete */ - c = 004; - break; - default: - c = 0; - break; - } - } - else if (c == 033) { /* ESC */ - c = 025; - } - - - return c; -} - -#endif /* MSDOS */ - -#ifdef ATARI - -/* Convert Arrow keystrokes to Control characters: TOS version */ - -/* the volatile could be necessary to keep gcc from reordering - the two Super calls -*/ -#define CONTERM ((/*volatile*/ char *)0x484L) - -static void -remove_conterm() -{ - void *ssp=(void*)Super(0L); - *CONTERM &= ~0x8; - Super(ssp); -} - -static char -tos_getch() -{ - long rawkey; - char c; - int scan_code; - void *ssp; - static int init = 1; - static int in_help = 0; - - if (in_help) { - switch(in_help) { - case 1: - case 5: in_help++; return 'e'; - case 2: - case 6: in_help++; return 'l'; - case 3: - case 7: in_help++; return 'p'; - case 4: in_help = 0; return 0x0d; - case 8: in_help = 0; return ' '; - } - } - - if (init) { - ssp = (void*)Super(0L); - if( !(*CONTERM & 0x8) ) { - *CONTERM |= 0x8; - } else { - init=0; - } - (void)Super(ssp); - if( init ) { - atexit(remove_conterm); - init = 0; - } - } - - (void)Cursconf(1, 0); /* cursor on */ - rawkey = Cnecin(); - c = (char)rawkey; - scan_code= ((int)(rawkey>>16)) & 0xff; /* get the scancode */ - if( rawkey&0x07000000 ) scan_code |= 0x80; /* shift or control */ - - switch (scan_code) { - case 0x62: /* HELP */ - if (max_pos==0) { - in_help = 1; - return 'h'; - } else { - return 0; - } - case 0xe2: /* shift HELP */ - if (max_pos==0) { - in_help = 5; - return 'h'; - } else { - return 0; - } - case 0x48: /* Up Arrow */ - return 0x10; /* ^P */ - case 0x50: /* Down Arrow */ - return 0x0e; /* ^N */ - case 0x4b: /* Left Arrow */ - return 0x02; /* ^B */ - case 0x4d: /* Right Arrow */ - return 0x06; /* ^F */ - case 0xcb: /* Shift Left Arrow */ - case 0xf3: /* Ctrl Left Arrow (TOS-bug ?) */ - case 0x47: /* Home */ - return 0x01; /* ^A */ - case 0xcd: /* Shift Right Arrow */ - case 0xf4: /* Ctrl Right Arrow (TOS-bug ?) */ - case 0xc7: /* Shift Home */ - case 0xf7: /* Crtl Home */ - return 0x05; /* ^E */ - case 0x61: /* Undo - redraw line */ - return 0x0c; /* ^L */ - default: - if (c == 0x1b) return 0x15; /* ESC becomes ^U */ - if (c == 0x7f) return 0x04; /* Del becomes ^D */ - break; - } - - return c; -} - -#endif /* ATARI */ - - /* set termio so we can do our own input processing */ -static void -set_termio() -{ -#if !defined(MSDOS) && !defined(ATARI) && !defined(_Windows) && !defined(DOS386) -/* set termio so we can do our own input processing */ -/* and save the old terminal modes so we can reset them later */ - if(term_set == 0) { - /* - * Get terminal modes. - */ -#ifdef SGTTY - ioctl(0, TIOCGETP, &orig_termio); -#else /* SGTTY */ -#ifdef TERMIOS -#ifdef TCGETS - ioctl(0, TCGETS, &orig_termio); -#else - tcgetattr(0, &orig_termio); -#endif /* TCGETS */ -#else - ioctl(0, TCGETA, &orig_termio); -#endif /* TERMIOS */ -#endif /* SGTTY */ - - /* - * Save terminal modes - */ - rl_termio = orig_termio; - - /* - * Set the modes to the way we want them - * and save our input special characters - */ -#ifdef SGTTY - rl_termio.sg_flags |= CBREAK; - rl_termio.sg_flags &= ~(ECHO|XTABS); - ioctl(0, TIOCSETN, &rl_termio); - - ioctl(0, TIOCGETC, &s_tchars); - term_chars[VERASE] = orig_termio.sg_erase; - term_chars[VEOF] = s_tchars.t_eofc; - term_chars[VKILL] = orig_termio.sg_kill; -#ifdef TIOCGLTC - ioctl(0, TIOCGLTC, &s_ltchars); - term_chars[VWERASE] = s_ltchars.t_werasc; - term_chars[VREPRINT] = s_ltchars.t_rprntc; - term_chars[VSUSP] = s_ltchars.t_suspc; - - /* disable suspending process on ^Z */ - s_ltchars.t_suspc = 0; - ioctl(0, TIOCSLTC, &s_ltchars); -#endif /* TIOCGLTC */ -#else /* SGTTY */ -#ifdef IUCLC - rl_termio.c_iflag &= ~(BRKINT|PARMRK|INPCK|IUCLC|IXON|IXOFF); -#else - rl_termio.c_iflag &= ~(BRKINT|PARMRK|INPCK|IXON|IXOFF); -#endif - rl_termio.c_iflag |= (IGNBRK|IGNPAR); - - /* rl_termio.c_oflag &= ~(ONOCR); Costas Sphocleous Irvine,CA */ - - rl_termio.c_lflag &= ~(ICANON|ECHO|ECHOE|ECHOK|ECHONL|NOFLSH); -#ifdef OS2 - /* for emx: remove default terminal processing */ - rl_termio.c_lflag &= ~(IDEFAULT); -#endif /* OS2 */ - rl_termio.c_lflag |= (ISIG); - rl_termio.c_cc[VMIN] = 1; - rl_termio.c_cc[VTIME] = 0; - -#ifndef VWERASE -#define VWERASE 3 -#endif - term_chars[VERASE] = orig_termio.c_cc[VERASE]; - term_chars[VEOF] = orig_termio.c_cc[VEOF]; - term_chars[VKILL] = orig_termio.c_cc[VKILL]; -#ifdef TERMIOS - term_chars[VWERASE] = orig_termio.c_cc[VWERASE]; -#ifdef VREPRINT - term_chars[VREPRINT] = orig_termio.c_cc[VREPRINT]; -#else -#ifdef VRPRNT - term_chars[VRPRNT] = orig_termio.c_cc[VRPRNT]; -#endif -#endif - term_chars[VSUSP] = orig_termio.c_cc[VSUSP]; - - /* disable suspending process on ^Z */ - rl_termio.c_cc[VSUSP] = 0; -#endif /* TERMIOS */ -#endif /* SGTTY */ - - /* - * Set the new terminal modes. - */ -#ifdef SGTTY - ioctl(0, TIOCSLTC, &s_ltchars); -#else -#ifdef TERMIOS -#ifdef TCSETSW - ioctl(0, TCSETSW, &rl_termio); -#else - tcsetattr(0, TCSADRAIN, &rl_termio); -#endif /* TCSETSW */ -#else - ioctl(0, TCSETAW, &rl_termio); -#endif /* TERMIOS */ -#endif /* SGTTY */ - term_set = 1; - } -#endif /* !MSDOS && !ATARI && !defined(_Windows) */ -} - -void -reset_termio() -{ -#if !defined(MSDOS) && !defined(ATARI) && !defined(_Windows) && !defined(DOS386) -/* reset saved terminal modes */ - if(term_set == 1) { -#ifdef SGTTY - ioctl(0, TIOCSETN, &orig_termio); -#ifdef TIOCGLTC - /* enable suspending process on ^Z */ - s_ltchars.t_suspc = term_chars[VSUSP]; - ioctl(0, TIOCSLTC, &s_ltchars); -#endif /* TIOCGLTC */ -#else /* SGTTY */ -#ifdef TERMIOS -#ifdef TCSETSW - ioctl(0, TCSETSW, &orig_termio); -#else - tcsetattr(0, TCSADRAIN, &orig_termio); -#endif /* TCSETSW */ -#else - ioctl(0, TCSETAW, &orig_termio); -#endif /* TERMIOS */ -#endif /* SGTTY */ - term_set = 0; - } -#endif /* !MSDOS && !ATARI && !_Windows */ -} -#endif /* READLINE */ |