亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rlfe.c

?? 基于的linux的oracle sqlplus替代工具
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* A front-end using readline to "cook" input lines for Kawa. * * Copyright (C) 1999  Per Bothner *  * This front-end program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 2, or (at your option) * any later version. * * Some code from Johnson & Troan: "Linux Application Development" * (Addison-Wesley, 1998) was used directly or for inspiration. *//* PROBLEMS/TODO: * * Only tested under Linux;  needs to be ported. * * When running mc -c under the Linux console, mc does not recognize * mouse clicks, which mc does when not running under fep. * * Pasting selected text containing tabs is like hitting the tab character, * which invokes readline completion.  We don't want this.  I don't know * if this is fixable without integrating fep into a terminal emulator. * * Echo suppression is a kludge, but can only be avoided with better kernel * support: We need a tty mode to disable "real" echoing, while still * letting the inferior think its tty driver to doing echoing. * Stevens's book claims SCR$ and BSD4.3+ have TIOCREMOTE. * * The latest readline may have some hooks we can use to avoid having * to back up the prompt. * * Desirable readline feature:  When in cooked no-echo mode (e.g. password), * echo characters are they are types with '*', but remove them when done. * * A synchronous output while we're editing an input line should be * inserted in the output view *before* the input line, so that the * lines being edited (with the prompt) float at the end of the input. * * A "page mode" option to emulate more/less behavior:  At each page of * output, pause for a user command.  This required parsing the output * to keep track of line lengths.  It also requires remembering the * output, if we want an option to scroll back, which suggests that * this should be integrated with a terminal emulator like xterm. */#ifdef HAVE_CONFIG_H#  include <config.h>#endif#include <stdio.h>#include <fcntl.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <signal.h>#include <netdb.h>#include <stdlib.h>#include <errno.h>#include <grp.h>#include <string.h>#include <sys/stat.h>#include <unistd.h>#include <sys/ioctl.h>#include <termios.h>#include <limits.h>#include <dirent.h>#ifdef READLINE_LIBRARY#  include "readline.h"#  include "history.h"#else#  include <readline/readline.h>#  include <readline/history.h>#endif#ifndef COMMAND#define COMMAND "/bin/sh"#endif#ifndef COMMAND_ARGS#define COMMAND_ARGS COMMAND#endif#ifndef HAVE_MEMMOVE#ifndef memmove#  if __GNUC__ > 1#    define memmove(d, s, n)	__builtin_memcpy(d, s, n)#  else#    define memmove(d, s, n)	memcpy(d, s, n)#  endif#else#  define memmove(d, s, n)	memcpy(d, s, n)#endif#endif#define APPLICATION_NAME "Rlfe"#ifndef errnoextern int errno;#endifextern int optind;extern char *optarg;static char *progname;static char *progversion;static int in_from_inferior_fd;static int out_to_inferior_fd;/* Unfortunately, we cannot safely display echo from the inferior process.   The reason is that the echo bit in the pty is "owned" by the inferior,   and if we try to turn it off, we could confuse the inferior.   Thus, when echoing, we get echo twice:  First readline echoes while   we're actually editing. Then we send the line to the inferior, and the   terminal driver send back an extra echo.   The work-around is to remember the input lines, and when we see that   line come back, we supress the output.   A better solution (supposedly available on SVR4) would be a smarter   terminal driver, with more flags ... */#define ECHO_SUPPRESS_MAX 1024char echo_suppress_buffer[ECHO_SUPPRESS_MAX];int echo_suppress_start = 0;int echo_suppress_limit = 0;/* #define DEBUG */static FILE *logfile = NULL;#ifdef DEBUGFILE *debugfile = NULL;#define DPRINT0(FMT) (fprintf(debugfile, FMT), fflush(debugfile))#define DPRINT1(FMT, V1) (fprintf(debugfile, FMT, V1), fflush(debugfile))#define DPRINT2(FMT, V1, V2) (fprintf(debugfile, FMT, V1, V2), fflush(debugfile))#else#define DPRINT0(FMT) /* Do nothing */#define DPRINT1(FMT, V1) /* Do nothing */#define DPRINT2(FMT, V1, V2) /* Do nothing */#endifstruct termios orig_term;static int rlfe_directory_completion_hook __P((char **));static int rlfe_directory_rewrite_hook __P((char **));static char *rlfe_filename_completion_function __P((const char *, int));/* Pid of child process. */static pid_t child = -1;static voidsig_child (int signo){  int status;  wait (&status);  DPRINT0 ("(Child process died.)\n");  tcsetattr(STDIN_FILENO, TCSANOW, &orig_term);  exit (0);}volatile int propagate_sigwinch = 0;/* sigwinch_handler * propagate window size changes from input file descriptor to * master side of pty. */void sigwinch_handler(int signal) {    propagate_sigwinch = 1;}/* get_master_pty() takes a double-indirect character pointer in which * to put a slave name, and returns an integer file descriptor. * If it returns < 0, an error has occurred. * Otherwise, it has returned the master pty file descriptor, and fills * in *name with the name of the corresponding slave pty. * Once the slave pty has been opened, you are responsible to free *name. */int get_master_pty(char **name) {    int i, j;   /* default to returning error */   int master = -1;   /* create a dummy name to fill in */   *name = strdup("/dev/ptyXX");   /* search for an unused pty */   for (i=0; i<16 && master <= 0; i++) {      for (j=0; j<16 && master <= 0; j++) {         (*name)[5] = 'p';         (*name)[8] = "pqrstuvwxyzPQRST"[i];         (*name)[9] = "0123456789abcdef"[j];         /* open the master pty */         if ((master = open(*name, O_RDWR)) < 0) {            if (errno == ENOENT) {               /* we are out of pty devices */               free (*name);               return (master);            }         }         else {           /* By substituting a letter, we change the master pty            * name into the slave pty name.            */           (*name)[5] = 't';           if (access(*name, R_OK|W_OK) != 0)             {               close(master);               master = -1;             }         }      }   }   if ((master < 0) && (i == 16) && (j == 16)) {      /* must have tried every pty unsuccessfully */      free (*name);      return (master);   }   (*name)[5] = 't';   return (master);}/* get_slave_pty() returns an integer file descriptor. * If it returns < 0, an error has occurred. * Otherwise, it has returned the slave file descriptor. */int get_slave_pty(char *name) {    struct group *gptr;   gid_t gid;   int slave = -1;   /* chown/chmod the corresponding pty, if possible.    * This will only work if the process has root permissions.    * Alternatively, write and exec a small setuid program that    * does just this.    */   if ((gptr = getgrnam("tty")) != 0) {      gid = gptr->gr_gid;   } else {      /* if the tty group does not exist, don't change the       * group on the slave pty, only the owner       */      gid = -1;   }   /* Note that we do not check for errors here.  If this is code    * where these actions are critical, check for errors!    */   chown(name, getuid(), gid);   /* This code only makes the slave read/writeable for the user.    * If this is for an interactive shell that will want to    * receive "write" and "wall" messages, OR S_IWGRP into the    * second argument below.    */   chmod(name, S_IRUSR|S_IWUSR);   /* open the corresponding slave pty */   slave = open(name, O_RDWR);   return (slave);}/* Certain special characters, such as ctrl/C, we want to pass directly   to the inferior, rather than letting readline handle them. */static char special_chars[20];static int special_chars_count;static voidadd_special_char(int ch){  if (ch != 0)    special_chars[special_chars_count++] = ch;}static int eof_char;static intis_special_char(int ch){  int i;#if 0  if (ch == eof_char && rl_point == rl_end)    return 1;#endif  for (i = special_chars_count;  --i >= 0; )    if (special_chars[i] == ch)      return 1;  return 0;}static char buf[1024];/* buf[0 .. buf_count-1] is the what has been emitted on the current line.   It is used as the readline prompt. */static int buf_count = 0;int num_keys = 0;static voidnull_prep_terminal (int meta){}static voidnull_deprep_terminal (){}char pending_special_char;static voidline_handler (char *line){  if (line == NULL)    {      char buf[1];      DPRINT0("saw eof!\n");      buf[0] = '\004'; /* ctrl/d */      write (out_to_inferior_fd, buf, 1);    }  else    {      static char enter[] = "\r";      /*  Send line to inferior: */      int length = strlen (line);      if (length > ECHO_SUPPRESS_MAX-2)	{	  echo_suppress_start = 0;	  echo_suppress_limit = 0;	}      else	{	  if (echo_suppress_limit + length > ECHO_SUPPRESS_MAX - 2)	    {	      if (echo_suppress_limit - echo_suppress_start + length		  <= ECHO_SUPPRESS_MAX - 2)		{		  memmove (echo_suppress_buffer,			   echo_suppress_buffer + echo_suppress_start,			   echo_suppress_limit - echo_suppress_start);		  echo_suppress_limit -= echo_suppress_start;		  echo_suppress_start = 0;		}	      else		{		  echo_suppress_limit = 0;		}	      echo_suppress_start = 0;	    }	  memcpy (echo_suppress_buffer + echo_suppress_limit,		  line, length);	  echo_suppress_limit += length;	  echo_suppress_buffer[echo_suppress_limit++] = '\r';	  echo_suppress_buffer[echo_suppress_limit++] = '\n';	}      write (out_to_inferior_fd, line, length);      if (pending_special_char == 0)        {          write (out_to_inferior_fd, enter, sizeof(enter)-1);          if (*line)            add_history (line);        }      free (line);    }  rl_callback_handler_remove ();  buf_count = 0;  num_keys = 0;  if (pending_special_char != 0)    {      write (out_to_inferior_fd, &pending_special_char, 1);      pending_special_char = 0;    }}/* Value of rl_getc_function.   Use this because readline should read from stdin, not rl_instream,   points to the pty (so readline has monitor its terminal modes). */intmy_rl_getc (FILE *dummy){  int ch = rl_getc (stdin);  if (is_special_char (ch))    {      pending_special_char = ch;      return '\r';    }  return ch;}static voidusage(){  fprintf (stderr, "%s: usage: %s [-l filename] [-a] [-n appname] [-hv] [command [arguments...]]\n",		   progname, progname);}intmain(int argc, char** argv){  char *path;  int i, append;  int master;  char *name, *logfname, *appname;  int in_from_tty_fd;  struct sigaction act;  struct winsize ws;  struct termios t;  int maxfd;  fd_set in_set;  static char empty_string[1] = "";  char *prompt = empty_string;  int ioctl_err = 0;  if ((progname = strrchr (argv[0], '/')) == 0)    progname = argv[0];  else    progname++;  progversion = RL_LIBRARY_VERSION;  append = 0;  appname = APPLICATION_NAME;  logfname = (char *)NULL;  while ((i = getopt (argc, argv, "ahl:n:v")) != EOF)    {      switch (i)	{	case 'l':	  logfname = optarg;	  break;	case 'n':	  appname = optarg;	  break;	case 'a':	  append = 1;	  break;	case 'h':	  usage ();	  exit (0);	case 'v':	  fprintf (stderr, "%s version %s\n", progname, progversion);	  exit (0);	default:	  usage ();	  exit (2);	}    }  argc -= optind;  argv += optind;  if (logfname)    {      logfile = fopen (logfname, append ? "a" : "w");      if (logfile == 0)	fprintf (stderr, "%s: warning: could not open log file %s: %s\n",			 progname, logfname, strerror (errno));    }      rl_readline_name = appname;  #ifdef DEBUG  debugfile = fopen("LOG", "w");#endif  if ((master = get_master_pty(&name)) < 0)    {      perror("ptypair: could not open master pty");      exit(1);    }  DPRINT1("pty name: '%s'\n", name);  /* set up SIGWINCH handler */  act.sa_handler = sigwinch_handler;  sigemptyset(&(act.sa_mask));  act.sa_flags = 0;  if (sigaction(SIGWINCH, &act, NULL) < 0)    {      perror("ptypair: could not handle SIGWINCH ");      exit(1);    }  if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) < 0)    {      perror("ptypair: could not get window size");      exit(1);    }  if ((child = fork()) < 0)    {      perror("cannot fork");      exit(1);    }  if (child == 0)    {       int slave;  /* file descriptor for slave pty */      /* We are in the child process */      close(master);#ifdef TIOCSCTTY      if ((slave = get_slave_pty(name)) < 0)	{	  perror("ptypair: could not open slave pty");	  exit(1);	}      free(name);#endif      /* We need to make this process a session group leader, because       * it is on a new PTY, and things like job control simply will       * not work correctly unless there is a session group leader       * and process group leader (which a session group leader       * automatically is). This also disassociates us from our old       * controlling tty.        */      if (setsid() < 0)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人黄色一级视频| 日本不卡不码高清免费观看| 91首页免费视频| 国产美女一区二区| 国产中文字幕精品| 日本成人在线不卡视频| 亚洲一区av在线| 一区二区三区四区五区视频在线观看| 欧美精彩视频一区二区三区| 26uuu国产在线精品一区二区| 欧美精品 国产精品| 欧美日韩国产首页| 欧美日韩激情一区二区三区| 日本国产一区二区| 色悠久久久久综合欧美99| 成人免费高清视频在线观看| 国产在线不卡一区| 国产精品亚洲一区二区三区妖精 | 久久精品夜夜夜夜久久| 日韩免费在线观看| 欧美一区二区三区性视频| 色噜噜狠狠色综合欧洲selulu| 成人国产免费视频| 99re这里只有精品首页| 成人不卡免费av| www.一区二区| 色婷婷综合久久久久中文 | 中文字幕av一区 二区| 久久久激情视频| 国产日韩欧美一区二区三区乱码| 337p日本欧洲亚洲大胆精品| 欧美精品一区二区在线观看| 久久理论电影网| 亚洲天天做日日做天天谢日日欢| 亚洲精品国产a久久久久久| 亚洲午夜久久久久中文字幕久| 亚洲电影视频在线| 免费观看成人鲁鲁鲁鲁鲁视频| 激情亚洲综合在线| 成人小视频在线观看| 在线观看91视频| 日韩精品一区二区三区视频播放| 欧美韩国日本一区| 亚洲综合免费观看高清完整版 | 欧美亚洲日本国产| 日韩欧美成人激情| 国产精品素人视频| 午夜精品aaa| 成人在线一区二区三区| 欧美日韩美少妇| 国产日本一区二区| 亚洲高清视频在线| 国产高清精品网站| 欧美日韩国产高清一区二区三区 | 欧美日韩在线不卡| 精品国产乱码久久久久久久久| 欧美国产乱子伦| 亚洲影视资源网| 国产综合色精品一区二区三区| 色猫猫国产区一区二在线视频| 欧美电视剧在线看免费| 国产精品国产精品国产专区不蜜 | 日韩三级视频中文字幕| 中文字幕av一区二区三区高 | 国产在线播放一区三区四| 成人性生交大片免费看视频在线 | 欧美精品一区二区三区蜜桃| 久久久99久久| 午夜精品久久一牛影视| 成年人午夜久久久| 精品国产凹凸成av人网站| 亚洲图片欧美一区| 成人av电影在线播放| 欧美大黄免费观看| 婷婷久久综合九色综合伊人色| 成人动漫在线一区| 久久先锋资源网| 免费黄网站欧美| 91精品国产综合久久久蜜臀粉嫩| 成人免费一区二区三区视频 | 亚洲一区二区av在线| 丁香网亚洲国际| 亚洲精品一区二区三区影院 | 日本一区二区动态图| 精品一区在线看| 欧美日本一区二区三区四区| 亚洲欧洲成人精品av97| 国产精品一线二线三线| 日韩亚洲电影在线| 日韩精品成人一区二区三区| 色婷婷精品久久二区二区蜜臂av | 亚洲三级在线免费观看| 成人精品免费视频| 国产情人综合久久777777| 精品一区二区三区香蕉蜜桃| 日韩欧美国产综合一区| 美女免费视频一区二区| 在线综合视频播放| 免费成人av资源网| www激情久久| 国产一区二区三区黄视频| 精品99一区二区三区| 日韩在线一区二区| 51精品秘密在线观看| **欧美大码日韩| 色悠久久久久综合欧美99| 一区二区三区在线观看视频| 欧美怡红院视频| 国产精品国产a| 97超碰欧美中文字幕| 亚洲欧美一区二区三区孕妇| 日本高清不卡aⅴ免费网站| 亚洲综合网站在线观看| 91麻豆精品国产91久久久资源速度 | 欧美一级片免费看| 中文字幕乱码一区二区免费| 国内精品久久久久影院色| 在线观看三级视频欧美| 亚洲成a天堂v人片| 日韩欧美国产系列| 国产成人免费高清| 亚洲品质自拍视频网站| 91麻豆精品久久久久蜜臀| 国产高清在线精品| 一个色妞综合视频在线观看| 欧美一级爆毛片| 成人精品鲁一区一区二区| 亚洲人被黑人高潮完整版| 欧美视频中文一区二区三区在线观看 | 亚洲国产成人av网| 亚洲精品一区二区三区福利| 成人动漫av在线| 三级一区在线视频先锋| 国产日韩欧美精品综合| 在线观看一区不卡| 国产在线精品视频| 亚洲欧美一区二区久久| 欧美一卡二卡在线观看| 94-欧美-setu| 老司机精品视频在线| 亚洲欧洲国产日本综合| 欧美成人高清电影在线| 91亚洲国产成人精品一区二区三| 日韩av不卡在线观看| 中文字幕永久在线不卡| 日韩免费性生活视频播放| 91丨porny丨在线| 国产九色sp调教91| 日韩一区精品字幕| 亚洲三级在线播放| 久久免费电影网| 日韩欧美一二三四区| 一道本成人在线| 成人午夜看片网址| 久久99国内精品| 午夜久久久久久久久| 中文字幕一区二区在线观看| 欧美sm美女调教| 欧美精品视频www在线观看| 96av麻豆蜜桃一区二区| 国产成人福利片| 国内精品伊人久久久久影院对白| 亚洲成人手机在线| 亚洲自拍与偷拍| 亚洲蜜臀av乱码久久精品| 国产日本一区二区| 久久免费精品国产久精品久久久久| 欧美疯狂性受xxxxx喷水图片| 色婷婷综合视频在线观看| 99久久er热在这里只有精品66| 国产一区二区三区四区五区美女| 蜜臀91精品一区二区三区 | 玖玖九九国产精品| 天天影视涩香欲综合网| 亚洲黄色尤物视频| 亚洲精品菠萝久久久久久久| 国产精品嫩草99a| 国产精品拍天天在线| 欧美极品另类videosde| 亚洲国产高清不卡| 国产精品久久久久久久岛一牛影视| 国产视频一区在线观看| 久久在线免费观看| 久久精品人人做人人综合 | 久久精品国产第一区二区三区| 亚洲一二三四久久| 亚洲午夜激情网站| 午夜一区二区三区在线观看| 婷婷综合五月天| 久久成人羞羞网站| 国产精品自拍av| av电影在线观看一区| 91丝袜呻吟高潮美腿白嫩在线观看| 99国产精品国产精品久久| 欧美中文字幕一区二区三区| 精品视频一区二区三区免费| 91精品免费观看| 国产欧美一区二区在线观看| 国产精品进线69影院| 一区二区三区高清|