ReactOS  0.4.14-dev-358-gbef841c
getline.c File Reference
#include <windows.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <signal.h>
#include "getline.h"
Include dependency graph for getline.c:

Go to the source code of this file.

Macros

#define sleep(a)   Sleep(a * 1000)
 
#define S_ISREG(m)   (((m) & _S_IFMT) == _S_IFREG)
 
#define S_ISDIR(m)   (((m) & _S_IFMT) == _S_IFDIR)
 
#define open   _open
 
#define write   _write
 
#define read   _read
 
#define close   _close
 
#define lseek   _lseek
 
#define stat   _stat
 
#define lstat   _stat
 
#define fstat   _fstat
 
#define dup   _dup
 
#define utime   _utime
 
#define utimbuf   _utimbuf
 
#define unlink   remove
 
#define NO_SIGNALS   1
 
#define LOCAL_PATH_DELIM   '\\'
 
#define LOCAL_PATH_DELIM_STR   "\\"
 
#define LOCAL_PATH_ALTDELIM   '/'
 
#define IsLocalPathDelim(c)   ((c == LOCAL_PATH_DELIM) || (c == LOCAL_PATH_ALTDELIM))
 
#define UNC_PATH_PREFIX   "\\\\"
 
#define IsUNCPrefixed(s)   (IsLocalPathDelim(s[0]) && IsLocalPathDelim(s[1]))
 
#define __windows__   1
 
#define _getline_c_   1
 
#define K_UP   0x48
 
#define K_DOWN   0x50
 
#define K_LEFT   0x4B
 
#define K_RIGHT   0x4D
 
#define K_DELETE   0x53
 
#define K_INSERT   0x52
 
#define K_HOME   0x47
 
#define K_END   0x4F
 
#define K_PGUP   0x49
 
#define K_PGDN   0x51
 
#define HIST_SIZE   100
 
#define GL_COMPLETE_VECTOR_BLOCK_SIZE   64
 

Functions

static int gl_tab (char *buf, int offset, int *loc, size_t bufsize)
 
size_t gl_strlen (const char *s)
 
static void gl_init (void)
 
static void gl_cleanup (void)
 
static void gl_char_init (void)
 
static void gl_char_cleanup (void)
 
static void gl_addchar (int c)
 
static void gl_del (int loc, int)
 
static void gl_error (const char *const buf)
 
static void gl_fixup (const char *prompt, int change, int cursor)
 
static int gl_getc (void)
 
static int gl_getcx (int)
 
static void gl_kill (int pos)
 
static void gl_newline (void)
 
static void gl_putc (int c)
 
static void gl_puts (const char *const buf)
 
static void gl_redraw (void)
 
static void gl_transpose (void)
 
static void gl_yank (void)
 
static void gl_word (int direction)
 
static void gl_killword (int direction)
 
static void hist_init (void)
 
static charhist_next (void)
 
static charhist_prev (void)
 
static charhist_save (char *p)
 
static void search_addchar (int c)
 
static void search_term (void)
 
static void search_back (int new_search)
 
static void search_forw (int new_search)
 
static void gl_beep (void)
 
static int gl_do_tab_completion (char *buf, int *loc, size_t bufsize, int tabtab)
 
int gl_get_result (void)
 
int pc_keymap (int c)
 
static void gl_check_inputrc_for_vi (void)
 
void gl_setwidth (int w)
 
void gl_setheight (int w)
 
chargetline (char *prompt)
 
void gl_histadd (char *buf)
 
void gl_histsavefile (const char *const path)
 
void gl_histloadfile (const char *const path)
 
static void search_update (int c)
 
static int gl_display_matches_sort_proc (const void *a, const void *b)
 
static void gl_display_matches (int nused)
 
void gl_tab_completion (gl_tab_completion_proc proc)
 
static char_StrRFindLocalPathDelim (const char *src)
 
void gl_set_home_dir (const char *homedir)
 
chargl_getpass (const char *const prompt, char *const pass, int dsize)
 
chargl_local_filename_completion_proc (const char *start, int idx)
 

Variables

static const char copyright [] = "getline: Copyright (C) 1991, 1992, 1993, Chris Thewalt"
 
gl_in_hook_proc gl_in_hook = 0
 
gl_out_hook_proc gl_out_hook = 0
 
gl_tab_hook_proc gl_tab_hook = gl_tab
 
gl_tab_completion_proc gl_completion_proc = 0
 
int gl_filename_quoting_desired = -1
 
const chargl_filename_quote_characters = " \t*?<>|;&()[]$`"
 
int gl_ellipses_during_completion = 1
 
int gl_completion_exact_match_extra_char
 
char gl_buf [GL_BUF_SIZE]
 
static int gl_init_done = -1
 
static int gl_termw = 80
 
static int gl_termh = 24
 
static int gl_scroll = 27
 
static int gl_width = 0
 
static int gl_extent = 0
 
static int gl_overwrite = 0
 
static int gl_pos = 0
 
static int gl_cnt = 0
 
static char gl_killbuf [GL_BUF_SIZE] =""
 
static const chargl_prompt
 
static char gl_intrc = 0
 
static char gl_quitc = 0
 
static int gl_search_mode = 0
 
static char ** gl_matchlist = 0
 
static chargl_home_dir = NULL
 
static int gl_vi_preferred = -1
 
static int gl_vi_mode = 0
 
static int gl_result = GL_OK
 
static int hist_pos = 0
 
static int hist_last = 0
 
static charhist_buf [HIST_SIZE]
 
static char hist_empty_elem [2] = ""
 
static char search_prompt [101]
 
static char search_string [100]
 
static int search_pos = 0
 
static int search_forw_flg = 0
 
static int search_last = 0
 

Macro Definition Documentation

◆ __windows__

#define __windows__   1

Definition at line 60 of file getline.c.

◆ _getline_c_

#define _getline_c_   1

Definition at line 73 of file getline.c.

◆ close

#define close   _close

Definition at line 41 of file getline.c.

◆ dup

#define dup   _dup

Definition at line 46 of file getline.c.

◆ fstat

#define fstat   _fstat

Definition at line 45 of file getline.c.

◆ GL_COMPLETE_VECTOR_BLOCK_SIZE

#define GL_COMPLETE_VECTOR_BLOCK_SIZE   64

◆ HIST_SIZE

#define HIST_SIZE   100

Definition at line 1296 of file getline.c.

◆ IsLocalPathDelim

#define IsLocalPathDelim (   c)    ((c == LOCAL_PATH_DELIM) || (c == LOCAL_PATH_ALTDELIM))

Definition at line 57 of file getline.c.

◆ IsUNCPrefixed

#define IsUNCPrefixed (   s)    (IsLocalPathDelim(s[0]) && IsLocalPathDelim(s[1]))

Definition at line 59 of file getline.c.

◆ K_DELETE

#define K_DELETE   0x53

Definition at line 238 of file getline.c.

◆ K_DOWN

#define K_DOWN   0x50

Definition at line 235 of file getline.c.

◆ K_END

#define K_END   0x4F

Definition at line 241 of file getline.c.

◆ K_HOME

#define K_HOME   0x47

Definition at line 240 of file getline.c.

◆ K_INSERT

#define K_INSERT   0x52

Definition at line 239 of file getline.c.

◆ K_LEFT

#define K_LEFT   0x4B

Definition at line 236 of file getline.c.

◆ K_PGDN

#define K_PGDN   0x51

Definition at line 243 of file getline.c.

◆ K_PGUP

#define K_PGUP   0x49

Definition at line 242 of file getline.c.

◆ K_RIGHT

#define K_RIGHT   0x4D

Definition at line 237 of file getline.c.

◆ K_UP

#define K_UP   0x48

Definition at line 234 of file getline.c.

◆ LOCAL_PATH_ALTDELIM

#define LOCAL_PATH_ALTDELIM   '/'

Definition at line 56 of file getline.c.

◆ LOCAL_PATH_DELIM

#define LOCAL_PATH_DELIM   '\\'

Definition at line 54 of file getline.c.

◆ LOCAL_PATH_DELIM_STR

#define LOCAL_PATH_DELIM_STR   "\\"

Definition at line 55 of file getline.c.

◆ lseek

#define lseek   _lseek

Definition at line 42 of file getline.c.

◆ lstat

#define lstat   _stat

Definition at line 44 of file getline.c.

◆ NO_SIGNALS

#define NO_SIGNALS   1

Definition at line 53 of file getline.c.

◆ open

#define open   _open

Definition at line 38 of file getline.c.

◆ read

#define read   _read

Definition at line 40 of file getline.c.

◆ S_ISDIR

#define S_ISDIR (   m)    (((m) & _S_IFMT) == _S_IFDIR)

Definition at line 35 of file getline.c.

◆ S_ISREG

#define S_ISREG (   m)    (((m) & _S_IFMT) == _S_IFREG)

Definition at line 34 of file getline.c.

◆ sleep

#define sleep (   a)    Sleep(a * 1000)

Definition at line 32 of file getline.c.

◆ stat

#define stat   _stat

Definition at line 43 of file getline.c.

◆ UNC_PATH_PREFIX

#define UNC_PATH_PREFIX   "\\\\"

Definition at line 58 of file getline.c.

◆ unlink

#define unlink   remove

Definition at line 51 of file getline.c.

◆ utimbuf

Definition at line 48 of file getline.c.

◆ utime

#define utime   _utime

Definition at line 47 of file getline.c.

◆ write

#define write   _write

Definition at line 39 of file getline.c.

Function Documentation

◆ _StrRFindLocalPathDelim()

static char* _StrRFindLocalPathDelim ( const char src)
static

Definition at line 1963 of file getline.c.

1964 {
1965  const char *last;
1966  int c;
1967 
1968  last = NULL;
1969  for (;;) {
1970  c = *src++;
1971  if (c == '\0')
1972  break;
1973  if (IsLocalPathDelim(c))
1974  last = src - 1;
1975  }
1976 
1977  return ((char *) last);
1978 } /* StrRFindLocalPathDelim */
POINT last
Definition: font.c:46
#define IsLocalPathDelim(c)
Definition: getline.c:57
smooth NULL
Definition: ftsmooth.c:416
const GLubyte * c
Definition: glext.h:8905
GLenum src
Definition: glext.h:6340
#define c
Definition: ke_i.h:80

Referenced by gl_local_filename_completion_proc().

◆ getline()

char* getline ( char prompt)

Definition at line 560 of file getline.c.

561 {
562  int c, loc, tmp, lastch;
563  int vi_count, count;
564  int vi_delete;
565  char vi_countbuf[32];
566  char *cp;
567 
568 #ifdef __unix__
569  int sig;
570 #endif
571 
572  /* We'll change the result code only if something happens later. */
573  gl_result = GL_OK;
574 
575  /* Even if it appears that "vi" is preferred, we
576  * don't start in gl_vi_mode. They need to hit
577  * ESC to go into vi command mode.
578  */
579  gl_vi_mode = 0;
580  vi_count = 0;
581  vi_delete = 0;
582  if (gl_vi_preferred < 0) {
583  gl_vi_preferred = 0;
584  cp = (char *) getenv("EDITOR");
585  if (cp != NULL)
586  gl_vi_preferred = (strstr(cp, "vi") != NULL);
587  if (gl_vi_preferred == 0)
589  }
590 
591  gl_init();
592  gl_prompt = (prompt)? prompt : "";
593  gl_buf[0] = 0;
594  if (gl_in_hook)
597  lastch = 0;
598 
599 #ifdef __windows__
601 #endif
602 
603  while ((c = gl_getc()) != (-1)) {
604  gl_extent = 0; /* reset to full extent */
605  /* Note: \n may or may not be considered printable */
606  if ((c != '\t') && ((isprint(c) != 0) || ((c & 0x80) != 0))) {
607  if (gl_vi_mode > 0) {
608  /* "vi" emulation -- far from perfect,
609  * but reasonably functional.
610  */
611 vi:
612  for (count = 0; ; ) {
613  if (isdigit(c)) {
614  if (vi_countbuf[sizeof(vi_countbuf) - 2] == '\0')
615  vi_countbuf[strlen(vi_countbuf)] = (char) c;
616  } else if (vi_countbuf[0] != '\0') {
617  vi_count = atoi(vi_countbuf);
618  memset(vi_countbuf, 0, sizeof(vi_countbuf));
619  }
620  switch (c) {
621  case 'b':
622  gl_word(-1);
623  break;
624  case 'w':
625  if (vi_delete) {
626  gl_killword(1);
627  } else {
628  gl_word(1);
629  }
630  break;
631  case 'h': /* left */
632  if (vi_delete) {
633  if (gl_pos > 0) {
634  gl_fixup(gl_prompt, -1, gl_pos-1);
635  gl_del(0, 1);
636  }
637  } else {
638  gl_fixup(gl_prompt, -1, gl_pos-1);
639  }
640  break;
641  case ' ':
642  case 'l': /* right */
643  if (vi_delete) {
644  gl_del(0, 1);
645  } else {
646  gl_fixup(gl_prompt, -1, gl_pos+1);
647  }
648  break;
649  case 'k': /* up */
650  strcpy(gl_buf, hist_prev());
651  if (gl_in_hook)
654  break;
655  case 'j': /* down */
656  strcpy(gl_buf, hist_next());
657  if (gl_in_hook)
660  break;
661  case 'd':
662  if (vi_delete == 1) {
663  gl_kill(0);
664  vi_count = 1;
665  vi_delete = 0;
666  gl_vi_mode = 0;
667  goto vi_break;
668  }
669  vi_delete = 1;
670  goto vi_break;
671  case '^': /* start of line */
672  if (vi_delete) {
673  vi_count = gl_pos;
674  gl_fixup(gl_prompt, -1, 0);
675  for (c = 0; c < vi_count; c++) {
676  if (gl_cnt > 0)
677  gl_del(0, 0);
678  }
679  vi_count = 1;
680  vi_delete = 0;
681  } else {
682  gl_fixup(gl_prompt, -1, 0);
683  }
684  break;
685  case '$': /* end of line */
686  if (vi_delete) {
687  gl_kill(gl_pos);
688  } else {
689  loc = (int) strlen(gl_buf);
690  if (loc > 1)
691  loc--;
692  gl_fixup(gl_prompt, -1, loc);
693  }
694  break;
695  case 'p': /* paste after */
696  gl_fixup(gl_prompt, -1, gl_pos+1);
697  gl_yank();
698  break;
699  case 'P': /* paste before */
700  gl_yank();
701  break;
702  case 'r': /* replace character */
703  gl_buf[gl_pos] = (char) gl_getc();
705  vi_count = 1;
706  break;
707  case 'R':
708  gl_overwrite = 1;
709  gl_vi_mode = 0;
710  break;
711  case 'i':
712  case 'I':
713  gl_overwrite = 0;
714  gl_vi_mode = 0;
715  break;
716  case 'o':
717  case 'O':
718  case 'a':
719  case 'A':
720  gl_overwrite = 0;
721  gl_fixup(gl_prompt, -1, gl_pos+1);
722  gl_vi_mode = 0;
723  break;
724  }
725  count++;
726  if (count >= vi_count)
727  break;
728  }
729  vi_count = 1;
730  vi_delete = 0;
731 vi_break:
732  continue;
733  } else if (gl_search_mode) {
734  search_addchar(c);
735  } else {
736  gl_addchar(c);
737  }
738  } else {
739  if (gl_search_mode) {
740  if (c == '\033' || c == '\016' || c == '\020') {
741  search_term();
742  c = 0; /* ignore the character */
743  } else if (c == '\010' || c == '\177') {
744  search_addchar(-1); /* unwind search string */
745  c = 0;
746  } else if (c != '\022' && c != '\023') {
747  search_term(); /* terminate and handle char */
748  }
749  }
750  switch (c) {
751  case '\n': case '\r': /* newline */
752  gl_newline();
753  gl_cleanup();
754  return gl_buf;
755  case '\001': gl_fixup(gl_prompt, -1, 0); /* ^A */
756  break;
757  case '\002': gl_fixup(gl_prompt, -1, gl_pos-1); /* ^B */
758  break;
759  case '\004': /* ^D */
760  if (gl_cnt == 0) {
761  gl_buf[0] = 0;
762  gl_cleanup();
763  gl_putc('\n');
764  gl_result = GL_EOF;
765  return gl_buf;
766  } else {
767  gl_del(0, 1);
768  }
769  break;
770  case '\005': gl_fixup(gl_prompt, -1, gl_cnt); /* ^E */
771  break;
772  case '\006': gl_fixup(gl_prompt, -1, gl_pos+1); /* ^F */
773  break;
774  case '\010': case '\177': gl_del(-1, 0); /* ^H and DEL */
775  break;
776  case '\t': /* TAB */
777  if (gl_completion_proc) {
778  tmp = gl_pos;
779  gl_buf[sizeof(gl_buf) - 1] = '\0';
780  loc = gl_do_tab_completion(gl_buf, &tmp, sizeof(gl_buf), (lastch == '\t'));
781  gl_buf[sizeof(gl_buf) - 1] = '\0';
782  if (loc >= 0 || tmp != gl_pos)
783  gl_fixup(gl_prompt, /* loc */ -2, tmp);
784  if (lastch == '\t') {
785  c = 0;
786  lastch = 0;
787  }
788  } else if (gl_tab_hook) {
789  tmp = gl_pos;
790  gl_buf[sizeof(gl_buf) - 1] = '\0';
791  loc = gl_tab_hook(gl_buf, (int) gl_strlen(gl_prompt), &tmp, sizeof(gl_buf));
792  gl_buf[sizeof(gl_buf) - 1] = '\0';
793  if (loc >= 0 || tmp != gl_pos)
794  gl_fixup(gl_prompt, loc, tmp);
795  }
796  break;
797  case '\013': gl_kill(gl_pos); /* ^K */
798  break;
799  case '\014': gl_redraw(); /* ^L */
800  break;
801  case '\016': /* ^N */
802  strcpy(gl_buf, hist_next());
803  if (gl_in_hook)
806  break;
807  case '\017': gl_overwrite = !gl_overwrite; /* ^O */
808  break;
809  case '\020': /* ^P */
810  strcpy(gl_buf, hist_prev());
811  if (gl_in_hook)
814  break;
815  case '\022': search_back(1); /* ^R */
816  break;
817  case '\023': search_forw(1); /* ^S */
818  break;
819  case '\024': gl_transpose(); /* ^T */
820  break;
821  case '\025': gl_kill(0); /* ^U */
822  break;
823  case '\027': gl_killword(-1); /* ^W */
824  break;
825  case '\031': gl_yank(); /* ^Y */
826  break;
827  case '\033': /* ansi arrow keys */
828  c = gl_getcx(3);
829  if ((c == '[') || (c == 'O')) {
830 ansi:
831  switch(c = gl_getc()) {
832  case 'A': /* up */
833  strcpy(gl_buf, hist_prev());
834  if (gl_in_hook)
837  break;
838  case 'B': /* down */
839  strcpy(gl_buf, hist_next());
840  if (gl_in_hook)
843  break;
844  case 'C':
845  gl_fixup(gl_prompt, -1, gl_pos+1); /* right */
846  break;
847  case 'D':
848  gl_fixup(gl_prompt, -1, gl_pos-1); /* left */
849  break;
850  case '0':
851  case '1':
852  goto ansi;
853  default: gl_beep(); /* who knows */
854  break;
855  }
856  } else if ((gl_vi_preferred == 0) && ((c == 'f') || (c == 'F'))) {
857  gl_word(1);
858  } else if ((gl_vi_preferred == 0) && ((c == 'b') || (c == 'B'))) {
859  gl_word(-1);
860  } else if (c != (-1)) {
861  /* enter vi command mode */
862 #if defined(__windows__) || defined(MSDOS)
863  if (gl_vi_preferred == 0) {
864  /* On Windows, ESC acts like a line kill,
865  * so don't use vi mode unless they prefer
866  * vi mode.
867  */
868  gl_kill(0);
869  } else
870 #endif
871  if (gl_vi_mode == 0) {
872  gl_vi_mode = 1;
873  vi_count = 1;
874  vi_delete = 0;
875  memset(vi_countbuf, 0, sizeof(vi_countbuf));
876  if (gl_pos > 0)
877  gl_fixup(gl_prompt, -2, gl_pos-1); /* left 1 char */
878  /* Don't bother if the line is empty and we don't
879  * know for sure if the user wants vi mode.
880  */
881  if ((gl_cnt > 0) || (gl_vi_preferred == 1)) {
882  /* We still have to use the char read! */
883  goto vi;
884  }
885  gl_vi_mode = 0;
886  } else {
887  gl_beep();
888  }
889  }
890  break;
891  default: /* check for a terminal signal */
892  if (c > 0) { /* ignore 0 (reset above) */
893  if (c == gl_intrc) {
895  gl_buf[0] = 0;
896  gl_cleanup();
897 #ifdef SIGINT
898  raise(SIGINT);
899  gl_init();
900  gl_redraw();
901 #endif
902  return gl_buf;
903  }
904 
905  if (c == gl_quitc) {
907  gl_buf[0] = 0;
908  gl_cleanup();
909 #ifdef SIGQUIT
910  raise(SIGQUIT);
911  gl_init();
912  gl_redraw();
913 #endif
914  return gl_buf;
915  }
916 
917 #ifdef __unix__
918  if (c == gl_suspc || c == gl_dsuspc) {
919 #ifdef SIGTSTP
921  gl_buf[0] = 0;
922  gl_cleanup();
923  sig = SIGTSTP;
924  kill(0, sig);
925  gl_init();
926  gl_redraw();
927  return gl_buf;
928 #endif
929  }
930 #endif /* __unix__ */
931  }
932  if (c > 0)
933  gl_beep();
934  break;
935  }
936  }
937  if (c > 0)
938  lastch = c;
939  }
940  gl_buf[0] = 0;
941  gl_cleanup();
942  return gl_buf;
943 }
#define GL_BUF_SIZE
Definition: getline.h:8
static int gl_overwrite
Definition: getline.c:100
static int gl_vi_mode
Definition: getline.c:112
static void gl_beep(void)
Definition: getline.c:1608
static void gl_transpose(void)
Definition: getline.c:998
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
#define GL_INTERRUPT
Definition: getline.h:13
gl_tab_hook_proc gl_tab_hook
Definition: getline.c:82
GLuint GLuint GLsizei count
Definition: gl.h:1545
static void search_back(int new_search)
Definition: getline.c:1540
static void gl_kill(int pos)
Definition: getline.c:1064
static void gl_del(int loc, int)
Definition: getline.c:1039
static void gl_word(int direction)
Definition: getline.c:1114
BOOL WINAPI FlushConsoleInputBuffer(IN HANDLE hConsoleInput)
Definition: console.c:169
static void gl_cleanup(void)
Definition: getline.c:466
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:152
struct msdos_volume_info vi
Definition: mkdosfs.c:435
#define SIGQUIT
Definition: signal.h:24
#define SIGINT
Definition: signal.h:23
static int gl_pos
Definition: getline.c:101
#define GL_EOF
Definition: getline.h:12
static const char * gl_prompt
Definition: getline.c:103
static void gl_putc(int c)
Definition: getline.c:403
static char gl_intrc
Definition: getline.c:104
smooth NULL
Definition: ftsmooth.c:416
unsigned char
Definition: typeof.h:29
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
#define STD_INPUT_HANDLE
Definition: winbase.h:264
#define isdigit(c)
Definition: acclib.h:68
static void search_forw(int new_search)
Definition: getline.c:1574
size_t gl_strlen(const char *s)
Definition: getline.c:83
static int gl_do_tab_completion(char *buf, int *loc, size_t bufsize, int tabtab)
Definition: getline.c:1731
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
const GLubyte * c
Definition: glext.h:8905
gl_in_hook_proc gl_in_hook
Definition: getline.c:80
static void gl_redraw(void)
Definition: getline.c:1139
static char * hist_prev(void)
Definition: getline.c:1346
static int gl_cnt
Definition: getline.c:101
#define GL_OK
Definition: getline.h:11
static void search_term(void)
Definition: getline.c:1529
static int gl_vi_preferred
Definition: getline.c:111
static int gl_getc(void)
Definition: getline.c:282
static int gl_search_mode
Definition: getline.c:108
static int gl_getcx(int)
Definition: getline.c:374
static void search_addchar(int c)
Definition: getline.c:1501
static void gl_init(void)
Definition: getline.c:438
_Check_return_ char *__cdecl getenv(_In_z_ const char *_VarName)
static void gl_newline(void)
Definition: getline.c:1014
static void gl_yank(void)
Definition: getline.c:967
static char * hist_next(void)
Definition: getline.c:1364
static void gl_check_inputrc_for_vi(void)
Definition: getline.c:480
static void gl_addchar(int c)
Definition: getline.c:946
#define isprint(c)
Definition: acclib.h:73
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
POINT cp
Definition: magnifier.c:59
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
#define c
Definition: ke_i.h:80
static char gl_quitc
Definition: getline.c:105
static int gl_result
Definition: getline.c:113
#define memset(x, y, z)
Definition: compat.h:39
static int gl_extent
Definition: getline.c:99
gl_tab_completion_proc gl_completion_proc
Definition: getline.c:84
static void gl_killword(int direction)
Definition: getline.c:1077
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

◆ gl_addchar()

static void gl_addchar ( int  c)
static

Definition at line 946 of file getline.c.

949 {
950  int i;
951 
952  if (gl_cnt >= GL_BUF_SIZE - 1)
953  gl_error("\n*** Error: getline(): input buffer overflow\n");
954  if (gl_overwrite == 0 || gl_pos == gl_cnt) {
955  for (i=gl_cnt; i >= gl_pos; i--)
956  gl_buf[i+1] = gl_buf[i];
957  gl_buf[gl_pos] = (char) c;
959  } else {
960  gl_buf[gl_pos] = (char) c;
961  gl_extent = 1;
963  }
964 }
#define GL_BUF_SIZE
Definition: getline.h:8
static int gl_overwrite
Definition: getline.c:100
static int gl_pos
Definition: getline.c:101
static const char * gl_prompt
Definition: getline.c:103
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned char
Definition: typeof.h:29
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
static void gl_error(const char *const buf)
Definition: getline.c:428
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
const GLubyte * c
Definition: glext.h:8905
static int gl_cnt
Definition: getline.c:101
static int gl_extent
Definition: getline.c:99

Referenced by getline().

◆ gl_beep()

static void gl_beep ( void  )
static

Definition at line 1608 of file getline.c.

1609 {
1610 #ifdef __windows__
1611  MessageBeep(MB_OK);
1612 #else
1613  gl_putc('\007');
1614 #endif
1615 } /* gl_beep */
static void gl_putc(int c)
Definition: getline.c:403
BOOL WINAPI MessageBeep(_In_ UINT)
#define MB_OK
Definition: winuser.h:784

Referenced by getline(), gl_del(), gl_display_matches(), gl_do_tab_completion(), gl_fixup(), gl_kill(), gl_transpose(), gl_yank(), hist_next(), hist_prev(), search_back(), search_forw(), and search_update().

◆ gl_char_cleanup()

static void gl_char_cleanup ( void  )
static

Definition at line 208 of file getline.c.

209 {
210 #ifdef __unix__
211 # ifdef HAVE_TERMIOS_H
212  tcsetattr(0, TCSANOW, &old_termios);
213 # elif defined(TIOCSETN) /* BSD */
214  ioctl(0, TIOCSETN, &old_tty);
215 # else /* SYSV */
216  ioctl(0, TCSETA, &old_termio);
217 # endif
218 #endif /* __unix__ */
219 }
#define ioctl
Definition: wintirpc.h:60

Referenced by gl_cleanup().

◆ gl_char_init()

static void gl_char_init ( void  )
static

Definition at line 157 of file getline.c.

158 {
159 #ifdef __unix__
160 # ifdef HAVE_TERMIOS_H /* Use POSIX */
161  if (tcgetattr(0, &old_termios) == 0) {
162  gl_intrc = old_termios.c_cc[VINTR];
163  gl_quitc = old_termios.c_cc[VQUIT];
164 # ifdef VSUSP
165  gl_suspc = old_termios.c_cc[VSUSP];
166 # endif
167 # ifdef VDSUSP
168  gl_dsuspc = old_termios.c_cc[VDSUSP];
169 # endif
170  }
171  new_termios = old_termios;
172  new_termios.c_iflag &= ~(BRKINT|ISTRIP|IXON|IXOFF);
173  new_termios.c_iflag |= (IGNBRK|IGNPAR);
174  new_termios.c_lflag &= ~(ICANON|ISIG|IEXTEN|ECHO);
175  new_termios.c_cc[VMIN] = 1;
176  new_termios.c_cc[VTIME] = 0;
177  tcsetattr(0, TCSANOW, &new_termios);
178 # elif defined(TIOCSETN) /* BSD */
179  if (ioctl(0, TIOCGETC, &tch) == 0) {
180  gl_intrc = tch.t_intrc;
181  gl_quitc = tch.t_quitc;
182  }
183  ioctl(0, TIOCGLTC, &ltch);
184  gl_suspc = ltch.t_suspc;
185  gl_dsuspc = ltch.t_dsuspc;
186  ioctl(0, TIOCGETP, &old_tty);
187  new_tty = old_tty;
188  new_tty.sg_flags |= RAW;
189  new_tty.sg_flags &= ~ECHO;
190  ioctl(0, TIOCSETN, &new_tty);
191 # else /* SYSV */
192  if (ioctl(0, TCGETA, &old_termio) == 0) {
193  gl_intrc = old_termio.c_cc[VINTR];
194  gl_quitc = old_termio.c_cc[VQUIT];
195  }
196  new_termio = old_termio;
197  new_termio.c_iflag &= ~(BRKINT|ISTRIP|IXON|IXOFF);
198  new_termio.c_iflag |= (IGNBRK|IGNPAR);
199  new_termio.c_lflag &= ~(ICANON|ISIG|ECHO);
200  new_termio.c_cc[VMIN] = 1;
201  new_termio.c_cc[VTIME] = 0;
202  ioctl(0, TCSETA, &new_termio);
203 # endif
204 #endif /* __unix__ */
205 }
#define ioctl
Definition: wintirpc.h:60
static char gl_intrc
Definition: getline.c:104
#define ECHO
Definition: macro.lex.yy.c:616
static char gl_quitc
Definition: getline.c:105
#define RAW(x)
Definition: genincdata.c:42

Referenced by gl_init().

◆ gl_check_inputrc_for_vi()

static void gl_check_inputrc_for_vi ( void  )
static

Definition at line 480 of file getline.c.

481 {
482  FILE *fp;
483  char path[256];
484 
485  /* If the user has a ~/.inputrc file,
486  * check it to see if it has a line like
487  * "set editing-mode vi". If it does,
488  * we know that the user wants vi
489  * emulation rather than emacs. If the
490  * file doesn't exist, it's no big
491  * deal since we can also check the
492  * $EDITOR environment variable.
493  */
495  if (gl_home_dir == NULL)
496  return;
497 
498 #ifdef HAVE_SNPRINTF
499  snprintf(path, sizeof(path), "%s/%s", gl_home_dir, ".inputrc");
500 #else
501  if (sizeof(path) >= (strlen(gl_home_dir) + strlen("/.inputrc")))
502  return;
503 
504  sprintf(path, "%s%s", gl_home_dir, "/.inputrc");
505 #endif
506 
507  fp = fopen(
508  path,
509 #if defined(__windows__) || defined(MSDOS)
510  "rt"
511 #else
512  "r"
513 #endif
514  );
515 
516  if (fp == NULL)
517  return;
518 
519  while (fgets(path, sizeof(path) - 1, fp) != NULL) {
520  if ((strstr(path, "editing-mode") != NULL) && (strstr(path, "vi") != NULL)) {
521  gl_vi_preferred = 1;
522  break;
523  }
524  }
525 
526  (void) fclose(fp);
527 } /* gl_check_inputrc_for_vi */
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define __windows__
Definition: getline.c:60
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
#define snprintf
Definition: wintirpc.h:48
#define sprintf(buf, format,...)
Definition: sprintf.c:55
smooth NULL
Definition: ftsmooth.c:416
static int gl_vi_preferred
Definition: getline.c:111
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_Check_return_opt_ _CRTIMP char *__cdecl fgets(_Out_writes_z_(_MaxCount) char *_Buf, _In_ int _MaxCount, _Inout_ FILE *_File)
Definition: services.c:325
void gl_set_home_dir(const char *homedir)
Definition: getline.c:1985
static char * gl_home_dir
Definition: getline.c:110

Referenced by getline().

◆ gl_cleanup()

static void gl_cleanup ( void  )
static

Definition at line 466 of file getline.c.

468 {
469  if (gl_init_done > 0)
470  gl_char_cleanup();
471  gl_init_done = 0;
472 #ifdef __windows__
473  Sleep(40);
475 #endif
476 }
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
BOOL WINAPI FlushConsoleInputBuffer(IN HANDLE hConsoleInput)
Definition: console.c:169
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:152
#define STD_INPUT_HANDLE
Definition: winbase.h:264
static void gl_char_cleanup(void)
Definition: getline.c:208
static int gl_init_done
Definition: getline.c:94

Referenced by getline(), gl_error(), and gl_getpass().

◆ gl_del()

static void gl_del ( int  loc,
int  killsave 
)
static

Definition at line 1039 of file getline.c.

1046 {
1047  int i, j;
1048 
1049  if ((loc == -1 && gl_pos > 0) || (loc == 0 && gl_pos < gl_cnt)) {
1050  for (j=0, i=gl_pos+loc; i < gl_cnt; i++) {
1051  if ((j == 0) && (killsave != 0) && (gl_vi_mode != 0)) {
1052  gl_killbuf[0] = gl_buf[i];
1053  gl_killbuf[1] = '\0';
1054  j = 1;
1055  }
1056  gl_buf[i] = gl_buf[i+1];
1057  }
1058  gl_fixup(gl_prompt, gl_pos+loc, gl_pos+loc);
1059  } else
1060  gl_beep();
1061 }
static int gl_vi_mode
Definition: getline.c:112
static void gl_beep(void)
Definition: getline.c:1608
static int gl_pos
Definition: getline.c:101
static const char * gl_prompt
Definition: getline.c:103
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
static int gl_cnt
Definition: getline.c:101
static char gl_killbuf[GL_BUF_SIZE]
Definition: getline.c:102

Referenced by getline(), and gl_killword().

◆ gl_display_matches()

static void gl_display_matches ( int  nused)
static

Definition at line 1631 of file getline.c.

1632 {
1633  char buf[256];
1634  char buf2[256];
1635  size_t ilen, imaxlen;
1636  int i, j, k, l;
1637  int glen, allmatch;
1638  int nmax, ncol, colw, nrow;
1639  char *cp1, *cp2, *lim, *itemp;
1640 
1641  gl_putc('\n');
1642  if (nused == 0) {
1643  gl_beep();
1644  gl_puts(" (no matches)");
1645  gl_putc('\n');
1646  } else {
1647  qsort(gl_matchlist, (size_t) nused, sizeof(char *), gl_display_matches_sort_proc);
1648 
1649  /* Find the greatest amount that matches. */
1650  for (glen = 0; ; glen++) {
1651  allmatch = 1;
1652  for (i=1; i<nused; i++) {
1653  if (gl_matchlist[0][glen] != gl_matchlist[i][glen]) {
1654  allmatch = 0;
1655  break;
1656  }
1657  }
1658  if (allmatch == 0)
1659  break;
1660  }
1661 
1662  while (glen > 0) {
1663  if (!isalnum(gl_matchlist[0][glen - 1]))
1664  break;
1665  --glen;
1666  }
1667 
1668  nmax = nused;
1669  imaxlen = strlen(gl_matchlist[0]);
1670  for (i=1; i<nused; i++) {
1671  ilen = strlen(gl_matchlist[i]);
1672  if (ilen > imaxlen)
1673  imaxlen = ilen;
1674  }
1675 
1676  /* Subtract amount we'll skip for each item. */
1677  imaxlen -= glen;
1678 
1679  ncol = (gl_termw - 8) / ((int) imaxlen + 2);
1680  if (ncol < 1)
1681  ncol = 1;
1682 
1683  colw = (gl_termw - 8) / ncol;
1684  nrow = nmax / ncol;
1685  if ((nused % ncol) != 0)
1686  nrow++;
1687 
1688  if (nrow > (gl_termh - 4)) {
1689  nrow = gl_termh - 4;
1690  nmax = ncol * nrow;
1691  }
1692 
1693  for (i=0; i<(int) sizeof(buf2); i++)
1694  buf2[i] = ' ';
1695 
1696  for (j=0; j<nrow; j++) {
1697  (void) memcpy(buf, buf2, sizeof(buf));
1698  for (i=0, k=j, l=4; i<ncol; i++, k += nrow, l += colw) {
1699  if (k >= nmax)
1700  continue;
1701  itemp = gl_matchlist[k] + glen;
1702  cp1 = buf + l;
1703  lim = cp1 + (int) strlen(itemp);
1704  if (lim > (buf + sizeof(buf) - 1))
1705  continue;
1706  cp2 = itemp;
1707  while (cp1 < lim)
1708  *cp1++ = *cp2++;
1709  }
1710  for (cp1 = buf + sizeof(buf); *--cp1 == ' '; )
1711  ;
1712  ++cp1;
1713  *cp1 = '\0';
1714  gl_puts(buf);
1715  gl_putc('\n');
1716  }
1717 
1718  if (nused > nmax) {
1719  (void) sprintf(buf, " ... %d others omitted ...", (nused - nmax));
1720  gl_puts(buf);
1721  gl_putc('\n');
1722  }
1723  }
1725 } /* gl_display_matches */
static int gl_termw
Definition: getline.c:95
#define GL_BUF_SIZE
Definition: getline.h:8
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
static void gl_beep(void)
Definition: getline.c:1608
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
static int gl_display_matches_sort_proc(const void *a, const void *b)
Definition: getline.c:1620
static char ** gl_matchlist
Definition: getline.c:109
_Check_return_ _CRTIMP int __cdecl isalnum(_In_ int _C)
static const char * gl_prompt
Definition: getline.c:103
#define sprintf(buf, format,...)
Definition: sprintf.c:55
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
void __cdecl qsort(_Inout_updates_bytes_(_NumOfElements *_SizeOfElements) void *_Base, _In_ size_t _NumOfElements, _In_ size_t _SizeOfElements, _In_ int(__cdecl *_PtFuncCompare)(const void *, const void *))
static int gl_termh
Definition: getline.c:96
static void gl_putc(int c)
Definition: getline.c:403
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
r l[0]
Definition: byte_order.h:167
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static void gl_puts(const char *const buf)
Definition: getline.c:417
int k
Definition: mpi.c:3369
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by gl_do_tab_completion().

◆ gl_display_matches_sort_proc()

static int gl_display_matches_sort_proc ( const void a,
const void b 
)
static

Definition at line 1620 of file getline.c.

1621 {
1622  return (strcasecmp(
1623  * ((const char **) a),
1624  * ((const char **) b)
1625  ));
1626 } /* gl_display_matches_sort_proc */
#define strcasecmp
Definition: fake.h:9
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204

Referenced by gl_display_matches().

◆ gl_do_tab_completion()

static int gl_do_tab_completion ( char buf,
int loc,
size_t  bufsize,
int  tabtab 
)
static

Definition at line 1731 of file getline.c.

1732 {
1733  char *startp;
1734  size_t startoff, amt;
1735  int c;
1736  int qmode;
1737  char *qstart;
1738  char *lastspacestart;
1739  char *cp;
1740  int ntoalloc, nused, nprocused, nalloced, i;
1741  char **newgl_matchlist;
1742  char *strtoadd, *strtoadd1;
1743  int addquotes;
1744  size_t llen, mlen, glen;
1745  int allmatch;
1746  char *curposp;
1747  size_t lenaftercursor;
1748  char *matchpfx;
1749  int wasateol;
1750  char ellipsessave[4];
1751 
1752  /* Zero out the rest of the buffer, so we can move stuff around
1753  * and know we'll still be NUL-terminated.
1754  */
1755  llen = strlen(buf);
1756  memset(buf + llen, 0, bufsize - llen);
1757  bufsize -= 4; /* leave room for a NUL, space, and two quotes. */
1758  curposp = buf + *loc;
1759  wasateol = (*curposp == '\0');
1760  lenaftercursor = llen - (curposp - buf);
1761  if (gl_ellipses_during_completion != 0) {
1762  memcpy(ellipsessave, curposp, (size_t) 4);
1763  memcpy(curposp, "... ", (size_t) 4);
1765  memcpy(curposp, ellipsessave, (size_t) 4);
1766  }
1767 
1768  qmode = 0;
1769  qstart = NULL;
1770  lastspacestart = NULL;
1771  matchpfx = NULL;
1772 
1773  cp = buf;
1774  while (cp < curposp) {
1775  c = (int) *cp++;
1776  if (c == '\0')
1777  break;
1778  if ((c == '"') || (c == '\'')) {
1779  if (qmode == c) {
1780  /* closing quote; end it. */
1781  qstart = NULL;
1782  qmode = 0;
1783  } else if (qmode != 0) {
1784  /* just treat it as a regular char. */
1785  } else {
1786  /* start new quote group. */
1787  qmode = c;
1788  qstart = cp - 1;
1789  }
1790  } else if ((isspace(c)) && (qmode == 0)) {
1791  /* found a non-quoted space. */
1792  lastspacestart = cp - 1;
1793  } else {
1794  /* regular char */
1795  }
1796  }
1797 
1798  if (qstart != NULL)
1799  startp = qstart + 1;
1800  else if (lastspacestart != NULL)
1801  startp = lastspacestart + 1;
1802  else
1803  startp = buf;
1804 
1805  cp = startp;
1806  mlen = (curposp - cp);
1807 
1808  matchpfx = (char *) malloc(mlen + 1);
1809  memcpy(matchpfx, cp, mlen);
1810  matchpfx[mlen] = '\0';
1811 
1812 #define GL_COMPLETE_VECTOR_BLOCK_SIZE 64
1813 
1814  nused = 0;
1815  ntoalloc = GL_COMPLETE_VECTOR_BLOCK_SIZE;
1816  newgl_matchlist = (char **) malloc((size_t) (sizeof(char *) * (ntoalloc + 1)));
1817  if (newgl_matchlist == NULL) {
1818  free(matchpfx);
1819  gl_beep();
1820  return 0;
1821  }
1822  gl_matchlist = newgl_matchlist;
1823  nalloced = ntoalloc;
1824  for (i=nused; i<=nalloced; i++)
1825  gl_matchlist[i] = NULL;
1826 
1828  for (nprocused = 0;; nprocused++) {
1829  if (nused == nalloced) {
1830  ntoalloc += GL_COMPLETE_VECTOR_BLOCK_SIZE;
1831  newgl_matchlist = (char **) realloc((char *) gl_matchlist, (size_t) (sizeof(char *) * (ntoalloc + 1)));
1832  if (newgl_matchlist == NULL) {
1833  /* not enough memory to expand list -- abort */
1834  for (i=0; i<nused; i++)
1835  free(gl_matchlist[i]);
1836  free(gl_matchlist);
1837  gl_matchlist = NULL;
1838  gl_beep();
1839  free(matchpfx);
1840  return 0;
1841  }
1842  gl_matchlist = newgl_matchlist;
1843  nalloced = ntoalloc;
1844  for (i=nused; i<=nalloced; i++)
1845  gl_matchlist[i] = NULL;
1846  }
1847  cp = gl_completion_proc(matchpfx, nprocused);
1848  if (cp == NULL)
1849  break;
1850  if ((cp[0] == '.') && ((cp[1] == '\0') || ((cp[1] == '.') && (cp[2] == '\0'))))
1851  continue; /* Skip . and .. */
1852  gl_matchlist[nused++] = cp;
1853  }
1854 
1855  if (gl_ellipses_during_completion != 0) {
1857  gl_puts(" ");
1858  }
1859 
1860  /* We now have an array strings, whose last element is NULL. */
1861  strtoadd = NULL;
1862  strtoadd1 = NULL;
1863  amt = 0;
1864 
1866 
1867  if (nused == 1) {
1868  /* Exactly one match. */
1869  strtoadd = gl_matchlist[0];
1870  } else if (tabtab != 0) {
1871  /* TAB-TAB: print all matches */
1872  gl_display_matches(nused);
1873  } else if ((nused > 1) && (mlen > 0)) {
1874  /* Find the greatest amount that matches. */
1875  for (glen = strlen(matchpfx); ; glen++) {
1876  allmatch = 1;
1877  for (i=1; i<nused; i++) {
1878  if (gl_matchlist[0][glen] != gl_matchlist[i][glen]) {
1879  allmatch = 0;
1880  break;
1881  }
1882  }
1883  if (allmatch == 0)
1884  break;
1885  }
1886  strtoadd1 = (char *) malloc(glen + 1);
1887  if (strtoadd1 != NULL) {
1888  memcpy(strtoadd1, gl_matchlist[0], glen);
1889  strtoadd1[glen] = '\0';
1890  strtoadd = strtoadd1;
1891  }
1892  }
1893 
1894  if (strtoadd != NULL) {
1895  if ((qmode == 0) && (addquotes != 0)) {
1896  if (strpbrk(strtoadd, gl_filename_quote_characters) != NULL) {
1897  qmode = (strchr(strtoadd, '"') == NULL) ? '"' : '\'';
1898  memmove(curposp + 1, curposp, lenaftercursor + 1 /* NUL */);
1899  curposp++;
1900  *startp++ = (char) qmode;
1901  }
1902  }
1903  startoff = (size_t) (startp - buf);
1904  amt = strlen(strtoadd);
1905  if ((amt + startoff + lenaftercursor) >= bufsize)
1906  amt = bufsize - (amt + startoff + lenaftercursor);
1907  memmove(curposp + amt - mlen, curposp, lenaftercursor + 1 /* NUL */);
1908  curposp += amt - mlen;
1909  memcpy(startp, strtoadd, amt);
1910  if (nused == 1) {
1911  /* Exact match. */
1912  if (qmode != 0) {
1913  /* Finish the quoting. */
1914  memmove(curposp + 1, curposp, lenaftercursor + 1 /* NUL */);
1915  curposp++;
1916  buf[amt + startoff] = (char) qmode;
1917  amt++;
1918  }
1919  memmove(curposp + 1, curposp, lenaftercursor + 1 /* NUL */);
1920  curposp++;
1921  buf[amt + startoff] = (char) gl_completion_exact_match_extra_char;
1922  amt++;
1923  } else if ((!wasateol) && (!isspace(*curposp))) {
1924  /* Not a full match, but insert a
1925  * space for better readability.
1926  */
1927  memmove(curposp + 1, curposp, lenaftercursor + 1 /* NUL */);
1928  curposp++;
1929  buf[amt + startoff] = ' ';
1930  }
1931  *loc = (int) (startoff + amt);
1932 
1933  if (strtoadd1 != NULL)
1934  free(strtoadd1);
1935  }
1936 
1937  /* Don't need this any more. */
1938  for (i=0; i<nused; i++)
1939  free(gl_matchlist[i]);
1940  free(gl_matchlist);
1941  gl_matchlist = NULL;
1942  free(matchpfx);
1943 
1944  return 0;
1945 } /* gl_do_tab_completion */
#define realloc
Definition: debug_ros.c:6
#define isspace(c)
Definition: acclib.h:69
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
char * gl_local_filename_completion_proc(const char *start, int idx)
Definition: getline.c:2258
static void gl_beep(void)
Definition: getline.c:1608
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char * strpbrk(const char *String, const char *Delimiters)
Definition: utclib.c:302
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define free
Definition: debug_ros.c:5
int gl_completion_exact_match_extra_char
Definition: getline.c:88
static char ** gl_matchlist
Definition: getline.c:109
GLenum GLuint GLsizei bufsize
Definition: glext.h:7473
static int gl_pos
Definition: getline.c:101
static const char * gl_prompt
Definition: getline.c:103
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
smooth NULL
Definition: ftsmooth.c:416
unsigned char
Definition: typeof.h:29
static void gl_display_matches(int nused)
Definition: getline.c:1631
__kernel_size_t size_t
Definition: linux.h:237
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
const GLubyte * c
Definition: glext.h:8905
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static void gl_puts(const char *const buf)
Definition: getline.c:417
int gl_filename_quoting_desired
Definition: getline.c:85
#define GL_COMPLETE_VECTOR_BLOCK_SIZE
char * strchr(const char *String, int ch)
Definition: utclib.c:501
int gl_ellipses_during_completion
Definition: getline.c:87
POINT cp
Definition: magnifier.c:59
#define c
Definition: ke_i.h:80
#define malloc
Definition: debug_ros.c:4
const char * gl_filename_quote_characters
Definition: getline.c:86
#define memset(x, y, z)
Definition: compat.h:39
gl_tab_completion_proc gl_completion_proc
Definition: getline.c:84
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by getline().

◆ gl_error()

static void gl_error ( const char *const  buf)
static

Definition at line 428 of file getline.c.

429 {
430  int len = (int) strlen(buf);
431 
432  gl_cleanup();
433  write(2, buf, len);
434  exit(1);
435 }
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
static void gl_cleanup(void)
Definition: getline.c:466
#define write
Definition: getline.c:39
GLenum GLsizei len
Definition: glext.h:6722
void exit(int exitcode)
Definition: _exit.c:33
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by gl_addchar(), gl_init(), gl_newline(), gl_setheight(), gl_setwidth(), gl_yank(), and hist_save().

◆ gl_fixup()

static void gl_fixup ( const char prompt,
int  change,
int  cursor 
)
static

Definition at line 1149 of file getline.c.

1163 {
1164  static int gl_shift; /* index of first on screen character */
1165  static int off_right; /* true if more text right of screen */
1166  static int off_left; /* true if more text left of screen */
1167  static char last_prompt[80] = "";
1168  int left = 0, right = -1; /* bounds for redraw */
1169  int pad; /* how much to erase at end of line */
1170  int backup; /* how far to backup before fixing */
1171  int new_shift; /* value of shift based on cursor */
1172  int extra; /* adjusts when shift (scroll) happens */
1173  int i;
1174  int new_right = -1; /* alternate right bound, using gl_extent */
1175  int l1, l2;
1176 
1177  if (change == -2) { /* reset */
1178  gl_pos = gl_cnt = gl_shift = off_right = off_left = 0;
1179  gl_putc('\r');
1180  gl_puts(prompt);
1181  strcpy(last_prompt, prompt);
1182  change = 0;
1183  gl_width = gl_termw - (int) gl_strlen(prompt);
1184  } else if (strcmp(prompt, last_prompt) != 0) {
1185  l1 = (int) gl_strlen(last_prompt);
1186  l2 = (int) gl_strlen(prompt);
1187  gl_cnt = gl_cnt + l1 - l2;
1188  strcpy(last_prompt, prompt);
1189  gl_putc('\r');
1190  gl_puts(prompt);
1191  gl_pos = gl_shift;
1192  gl_width = gl_termw - l2;
1193  change = 0;
1194  }
1195  pad = (off_right)? gl_width - 1 : gl_cnt - gl_shift; /* old length */
1196  backup = gl_pos - gl_shift;
1197  if (change >= 0) {
1198  gl_cnt = (int) strlen(gl_buf);
1199  if (change > gl_cnt)
1200  change = gl_cnt;
1201  }
1202  if (cursor > gl_cnt) {
1203  if (cursor != GL_BUF_SIZE) { /* GL_BUF_SIZE means end of line */
1204  if (gl_ellipses_during_completion == 0) {
1205  gl_beep();
1206  }
1207  }
1208  cursor = gl_cnt;
1209  }
1210  if (cursor < 0) {
1211  gl_beep();
1212  cursor = 0;
1213  }
1214  if (off_right || (off_left && cursor < gl_shift + gl_width - gl_scroll / 2))
1215  extra = 2; /* shift the scrolling boundary */
1216  else
1217  extra = 0;
1218  new_shift = cursor + extra + gl_scroll - gl_width;
1219  if (new_shift > 0) {
1220  new_shift /= gl_scroll;
1221  new_shift *= gl_scroll;
1222  } else
1223  new_shift = 0;
1224  if (new_shift != gl_shift) { /* scroll occurs */
1225  gl_shift = new_shift;
1226  off_left = (gl_shift)? 1 : 0;
1227  off_right = (gl_cnt > gl_shift + gl_width - 1)? 1 : 0;
1228  left = gl_shift;
1229  new_right = right = (off_right)? gl_shift + gl_width - 2 : gl_cnt;
1230  } else if (change >= 0) { /* no scroll, but text changed */
1231  if (change < gl_shift + off_left) {
1232  left = gl_shift;
1233  } else {
1234  left = change;
1235  backup = gl_pos - change;
1236  }
1237  off_right = (gl_cnt > gl_shift + gl_width - 1)? 1 : 0;
1238  right = (off_right)? gl_shift + gl_width - 2 : gl_cnt;
1239  new_right = (gl_extent && (right > left + gl_extent))?
1240  left + gl_extent : right;
1241  }
1242  pad -= (off_right)? gl_width - 1 : gl_cnt - gl_shift;
1243  pad = (pad < 0)? 0 : pad;
1244  if (left <= right) { /* clean up screen */
1245  for (i=0; i < backup; i++)
1246  gl_putc('\b');
1247  if (left == gl_shift && off_left) {
1248  gl_putc('$');
1249  left++;
1250  }
1251  for (i=left; i < new_right; i++)
1252  gl_putc(gl_buf[i]);
1253  gl_pos = new_right;
1254  if (off_right && new_right == right) {
1255  gl_putc('$');
1256  gl_pos++;
1257  } else {
1258  for (i=0; i < pad; i++) /* erase remains of prev line */
1259  gl_putc(' ');
1260  gl_pos += pad;
1261  }
1262  }
1263  i = gl_pos - cursor; /* move to final cursor location */
1264  if (i > 0) {
1265  while (i--)
1266  gl_putc('\b');
1267  } else {
1268  for (i=gl_pos; i < cursor; i++)
1269  gl_putc(gl_buf[i]);
1270  }
1271  gl_pos = cursor;
1272 }
static int gl_termw
Definition: getline.c:95
#define GL_BUF_SIZE
Definition: getline.h:8
static long backup()
Definition: maze.c:403
static void gl_beep(void)
Definition: getline.c:1608
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
static int gl_pos
Definition: getline.c:101
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static void gl_putc(int c)
Definition: getline.c:403
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
size_t gl_strlen(const char *s)
Definition: getline.c:83
Definition: id3.c:18
GLint left
Definition: glext.h:7726
static int gl_cnt
Definition: getline.c:101
GLdouble GLdouble right
Definition: glext.h:10859
static void gl_puts(const char *const buf)
Definition: getline.c:417
static int gl_width
Definition: getline.c:98
const char cursor[]
Definition: icontest.c:13
int gl_ellipses_during_completion
Definition: getline.c:87
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
static int gl_scroll
Definition: getline.c:97
static int gl_extent
Definition: getline.c:99
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by getline(), gl_addchar(), gl_del(), gl_display_matches(), gl_do_tab_completion(), gl_kill(), gl_killword(), gl_newline(), gl_redraw(), gl_transpose(), gl_word(), gl_yank(), search_addchar(), search_back(), search_forw(), and search_term().

◆ gl_get_result()

int gl_get_result ( void  )

Definition at line 224 of file getline.c.

225 {
226  return (gl_result);
227 } /* gl_get_result */
static int gl_result
Definition: getline.c:113

◆ gl_getc()

static int gl_getc ( void  )
static

Definition at line 282 of file getline.c.

284 {
285  int c;
286 #ifdef __unix__
287  char ch;
288 #endif
289 
290 #ifdef __unix__
291  ch = '\0';
292  while ((c = (int) read(0, &ch, 1)) == -1) {
293  if (errno != EINTR)
294  break;
295  }
296  if (c != (-1))
297  c = (int) ch;
298 #endif /* __unix__ */
299 #ifdef MSDOS
300  c = _bios_keybrd(_NKEYBRD_READ);
301  if ((c & 0377) == 224) {
302  c = pc_keymap((c >> 8) & 0377);
303  } else {
304  c &= 0377;
305  }
306 #endif /* MSDOS */
307 #ifdef __windows__
308  c = (int) _getch();
309  if ((c == 0) || (c == 0xE0)) {
310  /* Read key code */
311  c = (int) _getch();
312  c = pc_keymap(c);
313  } else if (c == '\r') {
314  /* Note: we only get \r from the console,
315  * and not a matching \n.
316  */
317  c = '\n';
318  }
319 #endif
320  return c;
321 }
int pc_keymap(int c)
Definition: getline.c:245
#define EINTR
Definition: acclib.h:80
int errno
#define read
Definition: getline.c:40
const GLubyte * c
Definition: glext.h:8905
#define c
Definition: ke_i.h:80
int _getch()
Definition: getch.c:16
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by getline(), and gl_getpass().

◆ gl_getcx()

static int gl_getcx ( int  tlen)
static

Definition at line 374 of file getline.c.

375 {
376  int i, c;
377 
378  c = (-2);
379  tlen -= 2; /* Adjust for 200ms overhead */
380  if (tlen < 1)
381  tlen = 1;
382  for (i=0; i<tlen; i++) {
383  if (_kbhit()) {
384  c = (int) _getch();
385  if ((c == 0) || (c == 0xE0)) {
386  /* Read key code */
387  c = (int) _getch();
388  c = pc_keymap(c);
389  break;
390  }
391  }
392  (void) SleepEx((DWORD) (tlen * 100), FALSE);
393  }
394  return (c);
395 } /* gl_getcx */
int pc_keymap(int c)
Definition: getline.c:245
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
_CRTIMP int __cdecl _kbhit(void)
Definition: kbhit.c:21
DWORD WINAPI SleepEx(IN DWORD dwMilliseconds, IN BOOL bAlertable)
Definition: synch.c:802
const GLubyte * c
Definition: glext.h:8905
unsigned long DWORD
Definition: ntddk_ex.h:95
#define c
Definition: ke_i.h:80
int _getch()
Definition: getch.c:16
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by getline().

◆ gl_getpass()

char* gl_getpass ( const char *const  prompt,
char *const  pass,
int  dsize 
)

Definition at line 2051 of file getline.c.

2052 {
2053 #ifdef __unix__
2054  char *cp;
2055  int c;
2056 
2057  memset(pass, 0, (size_t) sizeof(dsize));
2058  dsize--;
2059  gl_init();
2060 
2061  /* Display the prompt first. */
2062  if ((prompt != NULL) && (prompt[0] != '\0'))
2063  gl_puts(prompt);
2064 
2065  cp = pass;
2066  while ((c = gl_getc()) != (-1)) {
2067  if ((c == '\r') || (c == '\n'))
2068  break;
2069  if ((c == '\010') || (c == '\177')) {
2070  /* ^H and DEL */
2071  if (cp > pass) {
2072  *--cp = '\0';
2073  gl_putc('\010');
2074  gl_putc(' ');
2075  gl_putc('\010');
2076  }
2077  } else if (cp < (pass + dsize)) {
2078  gl_putc('*');
2079  *cp++ = c;
2080  }
2081  }
2082  *cp = '\0';
2083  gl_putc('\n');
2084  gl_cleanup();
2085  return (pass);
2086 #else
2087 #ifdef __windows__
2088  char *cp;
2089  int c;
2090 
2092  ZeroMemory(pass, (DWORD) sizeof(dsize));
2093  dsize--;
2094 
2095  if ((prompt != NULL) && (prompt[0] != '\0'))
2096  _cputs(prompt);
2097 
2098  for (cp = pass;;) {
2099  c = (int) _getch();
2100  if ((c == '\r') || (c == '\n'))
2101  break;
2102  if ((c == '\010') || (c == '\177')) {
2103  /* ^H and DEL */
2104  if (cp > pass) {
2105  *--cp = '\0';
2106  _putch('\010');
2107  _putch(' ');
2108  _putch('\010');
2109  }
2110  } else if (cp < (pass + dsize)) {
2111  _putch('*');
2112  *cp++ = c;
2113  }
2114  }
2115  _putch('\r');
2116  _putch('\n');
2117  Sleep(40);
2119 
2120  *cp = '\0';
2121  return (pass);
2122 #endif /* __windows__ */
2123 #endif /* ! __unix__ */
2124 } /* gl_getpass */
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
BOOL WINAPI FlushConsoleInputBuffer(IN HANDLE hConsoleInput)
Definition: console.c:169
#define ZeroMemory
Definition: winbase.h:1642
static void gl_cleanup(void)
Definition: getline.c:466
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:152
pass
Definition: typegen.h:24
static void gl_putc(int c)
Definition: getline.c:403
smooth NULL
Definition: ftsmooth.c:416
int __cdecl _cputs(const char *)
Definition: cputs.c:8
#define STD_INPUT_HANDLE
Definition: winbase.h:264
const GLubyte * c
Definition: glext.h:8905
unsigned long DWORD
Definition: ntddk_ex.h:95
static int gl_getc(void)
Definition: getline.c:282
static void gl_puts(const char *const buf)
Definition: getline.c:417
_CRTIMP int __cdecl _putch(_In_ int _Ch)
static void gl_init(void)
Definition: getline.c:438
POINT cp
Definition: magnifier.c:59
#define c
Definition: ke_i.h:80
int _getch()
Definition: getch.c:16
#define memset(x, y, z)
Definition: compat.h:39
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by DoOpen(), NcFTPGetPassphraseProc(), and OpenCmd().

◆ gl_histadd()

void gl_histadd ( char buf)

Definition at line 1314 of file getline.c.

1315 {
1316  static char *prev = 0;
1317  char *p = buf;
1318  int len;
1319 
1320  /* in case we call gl_histadd() before we call getline() */
1321  if (gl_init_done < 0) { /* -1 only on startup */
1322  hist_init();
1323  gl_init_done = 0;
1324  }
1325  while (*p == ' ' || *p == '\t' || *p == '\n')
1326  p++;
1327  if (*p) {
1328  len = (int) strlen(buf);
1329  if (strchr(p, '\n')) /* previously line already has NL stripped */
1330  len--;
1331  if ((prev == 0) || ((int) strlen(prev) != len) ||
1332  strncmp(prev, buf, (size_t) len) != 0) {
1334  prev = hist_buf[hist_last];
1335  hist_last = (hist_last + 1) % HIST_SIZE;
1336  if (hist_buf[hist_last] && *hist_buf[hist_last]) {
1338  }
1340  }
1341  }
1342  hist_pos = hist_last;
1343 }
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define free
Definition: debug_ros.c:5
static char * hist_save(char *p)
Definition: getline.c:1381
#define HIST_SIZE
Definition: getline.c:1296
static void hist_init(void)
Definition: getline.c:1304
static int hist_pos
Definition: getline.c:1299
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
Definition: utclib.c:534
static int hist_last
Definition: getline.c:1299
GLenum GLsizei len
Definition: glext.h:6722
static int gl_init_done
Definition: getline.c:94
char * strchr(const char *String, int ch)
Definition: utclib.c:501
static char hist_empty_elem[2]
Definition: getline.c:1301
static char * hist_buf[HIST_SIZE]
Definition: getline.c:1300
GLfloat GLfloat p
Definition: glext.h:8902
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by AddHistory(), and gl_histloadfile().

◆ gl_histloadfile()

void gl_histloadfile ( const char *const  path)

Definition at line 1437 of file getline.c.

1438 {
1439  FILE *fp;
1440  char line[256];
1441 
1442  fp = fopen(path,
1443 #if defined(__windows__) || defined(MSDOS)
1444  "rt"
1445 #else
1446  "r"
1447 #endif
1448  );
1449  if (fp != NULL) {
1450  memset(line, 0, sizeof(line));
1451  while (fgets(line, sizeof(line) - 2, fp) != NULL) {
1452  gl_histadd(line);
1453  }
1454  fclose(fp);
1455  }
1456 } /* gl_histloadfile */
void gl_histadd(char *buf)
Definition: getline.c:1314
#define __windows__
Definition: getline.c:60
smooth NULL
Definition: ftsmooth.c:416
Definition: parser.c:48
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_Check_return_opt_ _CRTIMP char *__cdecl fgets(_Out_writes_z_(_MaxCount) char *_Buf, _In_ int _MaxCount, _Inout_ FILE *_File)
Definition: services.c:325
#define memset(x, y, z)
Definition: compat.h:39

Referenced by LoadHistory().

◆ gl_histsavefile()

void gl_histsavefile ( const char *const  path)

Definition at line 1408 of file getline.c.

1409 {
1410  FILE *fp;
1411  const char *p;
1412  int i, j;
1413 
1414  fp = fopen(path,
1415 #if defined(__windows__) || defined(MSDOS)
1416  "wt"
1417 #else
1418  "w"
1419 #endif
1420  );
1421  if (fp != NULL) {
1422  for (i=2; i<HIST_SIZE; i++) {
1423  j = (hist_pos+i) % HIST_SIZE;
1424  p = hist_buf[j];
1425  if ((p == NULL) || (*p == '\0'))
1426  continue;
1427  fprintf(fp, "%s\n", p);
1428  }
1429  fclose(fp);
1430  }
1431 } /* gl_histsavefile */
#define __windows__
Definition: getline.c:60
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
smooth NULL
Definition: ftsmooth.c:416
#define HIST_SIZE
Definition: getline.c:1296
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
static int hist_pos
Definition: getline.c:1299
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
Definition: services.c:325
static char * hist_buf[HIST_SIZE]
Definition: getline.c:1300
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by SaveHistory().

◆ gl_init()

static void gl_init ( void  )
static

Definition at line 438 of file getline.c.

440 {
441  const char *cp;
442  int w;
443 
444  if (gl_init_done < 0) { /* -1 only on startup */
445  cp = (const char *) getenv("COLUMNS");
446  if (cp != NULL) {
447  w = atoi(cp);
448  if (w > 20)
449  gl_setwidth(w);
450  }
451  cp = (const char *) getenv("ROWS");
452  if (cp != NULL) {
453  w = atoi(cp);
454  if (w > 10)
455  gl_setheight(w);
456  }
457  hist_init();
458  }
459  if (_isatty(0) == 0 || _isatty(1) == 0)
460  gl_error("\n*** Error: getline(): not interactive, use stdio.\n");
461  gl_char_init();
462  gl_init_done = 1;
463 }
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
void gl_setwidth(int w)
Definition: getline.c:532
_Check_return_ _CRTIMP int __cdecl _isatty(_In_ int _FileHandle)
void gl_setheight(int w)
Definition: getline.c:547
smooth NULL
Definition: ftsmooth.c:416
static void gl_error(const char *const buf)
Definition: getline.c:428
static void hist_init(void)
Definition: getline.c:1304
static int gl_init_done
Definition: getline.c:94
_Check_return_ char *__cdecl getenv(_In_z_ const char *_VarName)
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
POINT cp
Definition: magnifier.c:59
static void gl_char_init(void)
Definition: getline.c:157

Referenced by getline(), and gl_getpass().

◆ gl_kill()

static void gl_kill ( int  pos)
static

Definition at line 1064 of file getline.c.

1067 {
1068  if (pos < gl_cnt) {
1070  gl_buf[pos] = '\0';
1072  } else
1073  gl_beep();
1074 }
static void gl_beep(void)
Definition: getline.c:1608
static const char * gl_prompt
Definition: getline.c:103
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
static int gl_cnt
Definition: getline.c:101
static char gl_killbuf[GL_BUF_SIZE]
Definition: getline.c:102
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388

Referenced by getline().

◆ gl_killword()

static void gl_killword ( int  direction)
static

Definition at line 1077 of file getline.c.

1078 {
1079  int pos = gl_pos;
1080  int startpos = gl_pos;
1081  int tmp;
1082  int i;
1083 
1084  if (direction > 0) { /* forward */
1085  while (!isspace(gl_buf[pos]) && pos < gl_cnt)
1086  pos++;
1087  while (isspace(gl_buf[pos]) && pos < gl_cnt)
1088  pos++;
1089  } else { /* backward */
1090  if (pos > 0)
1091  pos--;
1092  while (isspace(gl_buf[pos]) && pos > 0)
1093  pos--;
1094  while (!isspace(gl_buf[pos]) && pos > 0)
1095  pos--;
1096  if (pos < gl_cnt && isspace(gl_buf[pos])) /* move onto word */
1097  pos++;
1098  }
1099  if (pos < startpos) {
1100  tmp = pos;
1101  pos = startpos;
1102  startpos = tmp;
1103  }
1104  memcpy(gl_killbuf, gl_buf + startpos, (size_t) (pos - startpos));
1105  gl_killbuf[pos - startpos] = '\0';
1106  if (isspace(gl_killbuf[pos - startpos - 1]))
1107  gl_killbuf[pos - startpos - 1] = '\0';
1108  gl_fixup(gl_prompt, -1, startpos);
1109  for (i=0, tmp=pos - startpos; i<tmp; i++)
1110  gl_del(0, 0);
1111 } /* gl_killword */
#define isspace(c)
Definition: acclib.h:69
static void gl_del(int loc, int)
Definition: getline.c:1039
static int gl_pos
Definition: getline.c:101
static const char * gl_prompt
Definition: getline.c:103
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
static int gl_cnt
Definition: getline.c:101
static char gl_killbuf[GL_BUF_SIZE]
Definition: getline.c:102
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878

Referenced by getline().

◆ gl_local_filename_completion_proc()

char* gl_local_filename_completion_proc ( const char start,
int  idx 
)

Definition at line 2258 of file getline.c.

2259 {
2260  static HANDLE searchHandle = NULL;
2261  static int filepfxoffset;
2262  static size_t filepfxlen;
2263 
2264  WIN32_FIND_DATA ffd;
2265  DWORD dwErr;
2266  char *cp, *c2, ch;
2267  const char *filepfx;
2268  const char *dirtoopen, *name;
2269  char *dirtoopen1, *dirtoopen2;
2270  size_t len, len2;
2271 
2272  if (idx == 0) {
2273  if (searchHandle != NULL) {
2274  /* shouldn't get here! */
2275  FindClose(searchHandle);
2276  searchHandle = NULL;
2277  }
2278  }
2279 
2280 
2281  if (searchHandle == NULL) {
2282  dirtoopen1 = NULL;
2283  dirtoopen2 = NULL;
2285  if (cp == start) {
2286  dirtoopen = LOCAL_PATH_DELIM_STR; /* root dir */
2287  filepfxoffset = 1;
2288  } else if (cp == NULL) {
2289  dirtoopen = ".";
2290  filepfxoffset = 0;
2291  } else {
2292  len = strlen(start) + 1;
2293  dirtoopen1 = (char *) malloc(len);
2294  if (dirtoopen1 == NULL)
2295  return NULL;
2296  memcpy(dirtoopen1, start, len);
2297  len = (cp - start);
2298  dirtoopen1[len] = '\0';
2299  dirtoopen = dirtoopen1;
2300  filepfxoffset = (int) ((cp + 1) - start);
2301  }
2302 
2303  if (strcmp(dirtoopen, "~") == 0) {
2304  if (gl_home_dir == NULL)
2306  if (gl_home_dir == NULL)
2307  return (NULL);
2308  dirtoopen = gl_home_dir;
2309  }
2310 
2311  len = strlen(dirtoopen);
2312  dirtoopen2 = (char *) malloc(len + 8);
2313  if (dirtoopen2 == NULL) {
2314  if (dirtoopen1 != NULL)
2315  free(dirtoopen1);
2316  return NULL;
2317  }
2318 
2319  memcpy(dirtoopen2, dirtoopen, len + 1);
2320  if (dirtoopen2[len - 1] == LOCAL_PATH_DELIM)
2321  memcpy(dirtoopen2 + len, "*.*", (size_t) 4);
2322  else
2323  memcpy(dirtoopen2 + len, "\\*.*", (size_t) 5);
2324 
2325  /* "Open" the directory. */
2326  memset(&ffd, 0, sizeof(ffd));
2327  searchHandle = FindFirstFile(dirtoopen2, &ffd);
2328 
2329  free(dirtoopen2);
2330  if (dirtoopen1 != NULL)
2331  free(dirtoopen1);
2332 
2333  if (searchHandle == INVALID_HANDLE_VALUE) {
2334  return NULL;
2335  }
2336 
2337  filepfx = start + filepfxoffset;
2338  filepfxlen = strlen(filepfx);
2339  } else {
2340  /* assumes "start" is same for each iteration. */
2341  filepfx = start + filepfxoffset;
2342  goto next;
2343  }
2344 
2345  for (;;) {
2346 
2347  name = ffd.cFileName;
2348  if ((name[0] == '.') && ((name[1] == '\0') || ((name[1] == '.') && (name[2] == '\0'))))
2349  goto next; /* Skip . and .. */
2350 
2351  if ((filepfxlen == 0) || (_strnicmp(name, filepfx, filepfxlen) == 0)) {
2352  /* match */
2353  len = strlen(name);
2354  cp = (char *) malloc(filepfxoffset + len + 4 /* spare */ + 1 /* NUL */);
2355  *cp = '\0';
2356  if (filepfxoffset > 0)
2357  memcpy(cp, start, filepfxoffset);
2358  memcpy(cp + filepfxoffset, name, len + 1);
2359  if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
2360  /* Embed file type with name. */
2361  c2 = cp + filepfxoffset + len + 1;
2362  *c2++ = '\0';
2363  *c2++ = 'd';
2364  *c2 = '\0';
2365  } else {
2366  c2 = cp + filepfxoffset + len + 1;
2367  *c2++ = '\0';
2368  *c2++ = '-';
2369  *c2 = '\0';
2370  }
2371  return (cp);
2372  }
2373 
2374 next:
2375  if (!FindNextFile(searchHandle, &ffd)) {
2376  dwErr = GetLastError();
2377  if (dwErr != ERROR_NO_MORE_FILES) {
2378  FindClose(searchHandle);
2379  searchHandle = NULL;
2380  return NULL;
2381  }
2382 
2383  /* no more items */
2384  FindClose(searchHandle);
2385  searchHandle = NULL;
2386 
2387  if (idx == 1) {
2388  /* There was exactly one match.
2389  * In this special case, we
2390  * want to append a \ instead
2391  * of a space.
2392  */
2393  cp = gl_matchlist[0];
2394  ch = (char) cp[strlen(cp) + 2];
2395  if (ch == (char) 'd')
2397 
2398  if ((cp[0] == '~') && ((cp[1] == '\0') || (IsLocalPathDelim(cp[1])))) {
2399  len = strlen(cp + 1) + /* NUL */ 1;
2400  len2 = strlen(gl_home_dir);
2401  if (IsLocalPathDelim(gl_home_dir[len2 - 1]))
2402  len2--;
2403  cp = (char *) realloc(gl_matchlist[0], len + len2 + 4);
2404  if (cp == NULL) {
2405  cp = gl_matchlist[0];
2406  } else {
2407  memmove(cp + len2, cp + 1, len);
2408  memcpy(cp, gl_home_dir, len2);
2409  c2 = cp + len + len2;
2410  *c2++ = '\0';
2411  *c2++ = ch;
2412  *c2 = '\0';
2413  gl_matchlist[0] = cp;
2414  }
2415  }
2416  }
2417  break;
2418  }
2419  }
2420  return (NULL);
2421 } /* gl_local_filename_completion_proc */
#define realloc
Definition: debug_ros.c:6
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define free
Definition: debug_ros.c:5
#define IsLocalPathDelim(c)
Definition: getline.c:57
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
int gl_completion_exact_match_extra_char
Definition: getline.c:88
static char ** gl_matchlist
Definition: getline.c:109
_Check_return_ _CRTIMP int __cdecl _strnicmp(_In_reads_or_z_(_MaxCount) const char *_Str1, _In_reads_or_z_(_MaxCount) const char *_Str2, _In_ size_t _MaxCount)
unsigned int idx
Definition: utils.c:41
smooth NULL
Definition: ftsmooth.c:416
unsigned char
Definition: typeof.h:29
#define FindFirstFile
Definition: winbase.h:3606
#define ERROR_NO_MORE_FILES
Definition: winerror.h:121
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
DWORD dwErr
Definition: service.c:36
static char * _StrRFindLocalPathDelim(const char *src)
Definition: getline.c:1963
#define FindNextFile
Definition: winbase.h:3612
unsigned long DWORD
Definition: ntddk_ex.h:95
#define LOCAL_PATH_DELIM_STR
Definition: getline.c:55
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
static unsigned __int64 next
Definition: rand_nt.c:6
GLuint start
Definition: gl.h:1545
#define LOCAL_PATH_DELIM
Definition: getline.c:54
void gl_set_home_dir(const char *homedir)
Definition: getline.c:1985
POINT cp
Definition: magnifier.c:59
Definition: name.c:36
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
#define malloc
Definition: debug_ros.c:4
#define memset(x, y, z)
Definition: compat.h:39
static char * gl_home_dir
Definition: getline.c:110
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
GLuint const GLchar * name
Definition: glext.h:6031

Referenced by CompletionFunction(), gl_do_tab_completion(), and gl_tab_completion().

◆ gl_newline()

static void gl_newline ( void  )
static

Definition at line 1014 of file getline.c.

1019 {
1020  int change = gl_cnt;
1021  int len = gl_cnt;
1022  int loc = gl_width - 5; /* shifts line back to start position */
1023 
1024  if (gl_cnt >= GL_BUF_SIZE - 1)
1025  gl_error("\n*** Error: getline(): input buffer overflow\n");
1026  if (gl_out_hook) {
1027  change = gl_out_hook(gl_buf);
1028  len = (int) strlen(gl_buf);
1029  }
1030  if (loc > len)
1031  loc = len;
1032  gl_fixup(gl_prompt, change, loc); /* must do this before appending \n */
1033  gl_buf[len] = '\n';
1034  gl_buf[len+1] = '\0';
1035  gl_putc('\n');
1036 }
#define GL_BUF_SIZE
Definition: getline.h:8
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
gl_out_hook_proc gl_out_hook
Definition: getline.c:81
static const char * gl_prompt
Definition: getline.c:103
static void gl_putc(int c)
Definition: getline.c:403
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
static void gl_error(const char *const buf)
Definition: getline.c:428
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
static int gl_cnt
Definition: getline.c:101
GLenum GLsizei len
Definition: glext.h:6722
static int gl_width
Definition: getline.c:98
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by getline().

◆ gl_putc()

static void gl_putc ( int  c)
static

Definition at line 403 of file getline.c.

404 {
405  char ch = (char) (unsigned char) c;
406 
407  write(1, &ch, 1);
408  if (ch == '\n') {
409  ch = '\r';
410  write(1, &ch, 1); /* RAW mode needs '\r', does not hurt */
411  }
412 }
unsigned char
Definition: typeof.h:29
#define write
Definition: getline.c:39
#define c
Definition: ke_i.h:80

Referenced by getline(), gl_beep(), gl_display_matches(), gl_fixup(), gl_getpass(), gl_newline(), and gl_redraw().

◆ gl_puts()

static void gl_puts ( const char *const  buf)
static

Definition at line 417 of file getline.c.

418 {
419  int len;
420 
421  if (buf) {
422  len = (int) strlen(buf);
423  write(1, buf, len);
424  }
425 }
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define write
Definition: getline.c:39
GLenum GLsizei len
Definition: glext.h:6722
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by gl_display_matches(), gl_do_tab_completion(), gl_fixup(), and gl_getpass().

◆ gl_redraw()

static void gl_redraw ( void  )
static

Definition at line 1139 of file getline.c.

1141 {
1142  if (gl_init_done > 0) {
1143  gl_putc('\n');
1144  gl_fixup(gl_prompt, -2, gl_pos);
1145  }
1146 }
static int gl_pos
Definition: getline.c:101
static const char * gl_prompt
Definition: getline.c:103
static void gl_putc(int c)
Definition: getline.c:403
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
static int gl_init_done
Definition: getline.c:94

Referenced by getline().

◆ gl_set_home_dir()

void gl_set_home_dir ( const char homedir)

Definition at line 1985 of file getline.c.

1986 {
1987  size_t len;
1988 #ifdef __windows__
1989  const char *homedrive, *homepath;
1990  char wdir[64];
1991 #else
1992  struct passwd *pw;
1993  char *cp;
1994 #endif
1995 
1996  if (gl_home_dir != NULL) {
1997  free(gl_home_dir);
1998  gl_home_dir = NULL;
1999  }
2000 
2001  if (homedir == NULL) {
2002 #ifdef __windows__
2003  homedrive = getenv("HOMEDRIVE");
2004  homepath = getenv("HOMEPATH");
2005  if ((homedrive != NULL) && (homepath != NULL)) {
2006  len = strlen(homedrive) + strlen(homepath) + 1;
2007  gl_home_dir = (char *) malloc(len);
2008  if (gl_home_dir != NULL) {
2009  strcpy(gl_home_dir, homedrive);
2010  strcat(gl_home_dir, homepath);
2011  return;
2012  }
2013  }
2014 
2015  wdir[0] = '\0';
2016  if (GetWindowsDirectory(wdir, sizeof(wdir) - 1) < 1)
2017  (void) strncpy(wdir, ".", sizeof(wdir));
2018  else if (wdir[1] == ':') {
2019  wdir[2] = '\\';
2020  wdir[3] = '\0';
2021  }
2022  homedir = wdir;
2023 #else
2024  cp = (char *) getlogin();
2025  if (cp == NULL) {
2026  cp = (char *) getenv("LOGNAME");
2027  if (cp == NULL)
2028  cp = (char *) getenv("USER");
2029  }
2030  pw = NULL;
2031  if (cp != NULL)
2032  pw = getpwnam(cp);
2033  if (pw == NULL)
2034  pw = getpwuid(getuid());
2035  if (pw == NULL)
2036  return; /* hell with it */
2037  homedir = pw->pw_dir;
2038 #endif
2039  }
2040 
2041  len = strlen(homedir) + /* NUL */ 1;
2042  gl_home_dir = (char *) malloc(len);
2043  if (gl_home_dir != NULL) {
2044  memcpy(gl_home_dir, homedir, len);
2045  }
2046 } /* gl_set_home_dir */
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
Definition: utclib.c:427
#define free
Definition: debug_ros.c:5
smooth NULL
Definition: ftsmooth.c:416
char * getlogin(void)
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
_Check_return_ char *__cdecl getenv(_In_z_ const char *_VarName)
uid_t getuid()
Definition: uid.c:27
POINT cp
Definition: magnifier.c:59
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
#define malloc
Definition: debug_ros.c:4
#define GetWindowsDirectory
Definition: winbase.h:3681
static char * gl_home_dir
Definition: getline.c:110

Referenced by gl_check_inputrc_for_vi(), and gl_local_filename_completion_proc().

◆ gl_setheight()

void gl_setheight ( int  w)

Definition at line 547 of file getline.c.

548 {
549  if (w > 10) {
550  gl_termh = w;
551  } else {
552  gl_error("\n*** Error: minimum screen height is 10\n");
553  }
554 } /* gl_setheight */
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
static int gl_termh
Definition: getline.c:96
static void gl_error(const char *const buf)
Definition: getline.c:428

Referenced by gl_init().

◆ gl_setwidth()

void gl_setwidth ( int  w)

Definition at line 532 of file getline.c.

533 {
534  if (w > 250)
535  w = 250;
536  if (w > 20) {
537  gl_termw = w;
538  gl_scroll = w / 3;
539  } else {
540  gl_error("\n*** Error: minimum screen width is 21\n");
541  }
542 } /* gl_setwidth */
static int gl_termw
Definition: getline.c:95
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
static void gl_error(const char *const buf)
Definition: getline.c:428
static int gl_scroll
Definition: getline.c:97

Referenced by gl_init(), and InitReadline().

◆ gl_strlen()

size_t gl_strlen ( const char s)

Definition at line 83 of file getline.c.

83 { return strlen(s); }
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
GLdouble s
Definition: gl.h:2039

Referenced by getline(), and gl_fixup().

◆ gl_tab()

static int gl_tab ( char buf,
int  offset,
int loc,
size_t  bufsize 
)
static

Definition at line 1275 of file getline.c.

1277 {
1278  int i, count, len;
1279 
1280  len = (int) strlen(buf);
1281  count = 8 - (offset + *loc) % 8;
1282  for (i=len; i >= *loc; i--)
1283  if (i+count < (int) bufsize)
1284  buf[i+count] = buf[i];
1285  for (i=0; i < count; i++)
1286  if (*loc+i < (int) bufsize)
1287  buf[*loc+i] = ' ';
1288  i = *loc;
1289  *loc = i + count;
1290  return i;
1291 }
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLintptr offset
Definition: glext.h:5920
GLenum GLuint GLsizei bufsize
Definition: glext.h:7473
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLenum GLsizei len
Definition: glext.h:6722
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

◆ gl_tab_completion()

void gl_tab_completion ( gl_tab_completion_proc  proc)

Definition at line 1951 of file getline.c.

1952 {
1953  if (proc == NULL)
1954  proc = gl_local_filename_completion_proc; /* default proc */
1956 } /* gl_tab_completion */
char * gl_local_filename_completion_proc(const char *start, int idx)
Definition: getline.c:2258
static HANDLE proc()
Definition: pdb.c:32
smooth NULL
Definition: ftsmooth.c:416
gl_tab_completion_proc gl_completion_proc
Definition: getline.c:84

◆ gl_transpose()

static void gl_transpose ( void  )
static

Definition at line 998 of file getline.c.

1000 {
1001  int c;
1002 
1003  if (gl_pos > 0 && gl_cnt > gl_pos) {
1004  c = gl_buf[gl_pos-1];
1005  gl_buf[gl_pos-1] = gl_buf[gl_pos];
1006  gl_buf[gl_pos] = (char) c;
1007  gl_extent = 2;
1009  } else
1010  gl_beep();
1011 }
static void gl_beep(void)
Definition: getline.c:1608
static int gl_pos
Definition: getline.c:101
static const char * gl_prompt
Definition: getline.c:103
unsigned char
Definition: typeof.h:29
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
const GLubyte * c
Definition: glext.h:8905
static int gl_cnt
Definition: getline.c:101
#define c
Definition: ke_i.h:80
static int gl_extent
Definition: getline.c:99

Referenced by getline().

◆ gl_word()

static void gl_word ( int  direction)
static

Definition at line 1114 of file getline.c.

1117 {
1118  int pos = gl_pos;
1119 
1120  if (direction > 0) { /* forward */
1121  while (!isspace(gl_buf[pos]) && pos < gl_cnt)
1122  pos++;
1123  while (isspace(gl_buf[pos]) && pos < gl_cnt)
1124  pos++;
1125  } else { /* backword */
1126  if (pos > 0)
1127  pos--;
1128  while (isspace(gl_buf[pos]) && pos > 0)
1129  pos--;
1130  while (!isspace(gl_buf[pos]) && pos > 0)
1131  pos--;
1132  if (pos < gl_cnt && isspace(gl_buf[pos])) /* move onto word */
1133  pos++;
1134  }
1135  gl_fixup(gl_prompt, -1, pos);
1136 }
#define isspace(c)
Definition: acclib.h:69
static int gl_pos
Definition: getline.c:101
static const char * gl_prompt
Definition: getline.c:103
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
static int gl_cnt
Definition: getline.c:101

Referenced by getline().

◆ gl_yank()

static void gl_yank ( void  )
static

Definition at line 967 of file getline.c.

969 {
970  int i, len;
971 
972  len = (int) strlen(gl_killbuf);
973  if (len > 0) {
974  if (gl_overwrite == 0) {
975  if (gl_cnt + len >= GL_BUF_SIZE - 1)
976  gl_error("\n*** Error: getline(): input buffer overflow\n");
977  for (i=gl_cnt; i >= gl_pos; i--)
978  gl_buf[i+len] = gl_buf[i];
979  for (i=0; i < len; i++)
980  gl_buf[gl_pos+i] = gl_killbuf[i];
982  } else {
983  if (gl_pos + len > gl_cnt) {
984  if (gl_pos + len >= GL_BUF_SIZE - 1)
985  gl_error("\n*** Error: getline(): input buffer overflow\n");
986  gl_buf[gl_pos + len] = 0;
987  }
988  for (i=0; i < len; i++)
989  gl_buf[gl_pos+i] = gl_killbuf[i];
990  gl_extent = len;
992  }
993  } else
994  gl_beep();
995 }
#define GL_BUF_SIZE
Definition: getline.h:8
static int gl_overwrite
Definition: getline.c:100
static void gl_beep(void)
Definition: getline.c:1608
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
static int gl_pos
Definition: getline.c:101
static const char * gl_prompt
Definition: getline.c:103
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
static void gl_error(const char *const buf)
Definition: getline.c:428
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
static int gl_cnt
Definition: getline.c:101
static char gl_killbuf[GL_BUF_SIZE]
Definition: getline.c:102
GLenum GLsizei len
Definition: glext.h:6722
static int gl_extent
Definition: getline.c:99
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by getline().

◆ hist_init()

static void hist_init ( void  )
static

Definition at line 1304 of file getline.c.

1305 {
1306  int i;
1307 
1309  for (i=1; i < HIST_SIZE; i++)
1310  hist_buf[i] = (char *)0;
1311 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define HIST_SIZE
Definition: getline.c:1296
static char hist_empty_elem[2]
Definition: getline.c:1301
static char * hist_buf[HIST_SIZE]
Definition: getline.c:1300

Referenced by gl_histadd(), and gl_init().

◆ hist_next()

static char * hist_next ( void  )
static

Definition at line 1364 of file getline.c.

1366 {
1367  char *p = 0;
1368 
1369  if (hist_pos != hist_last) {
1370  hist_pos = (hist_pos+1) % HIST_SIZE;
1371  p = hist_buf[hist_pos];
1372  }
1373  if (p == 0) {
1374  p = hist_empty_elem;
1375  gl_beep();
1376  }
1377  return p;
1378 }
static void gl_beep(void)
Definition: getline.c:1608
#define HIST_SIZE
Definition: getline.c:1296
static int hist_pos
Definition: getline.c:1299
static int hist_last
Definition: getline.c:1299
static char hist_empty_elem[2]
Definition: getline.c:1301
static char * hist_buf[HIST_SIZE]
Definition: getline.c:1300
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by getline(), and search_forw().

◆ hist_prev()

static char * hist_prev ( void  )
static

Definition at line 1346 of file getline.c.

1348 {
1349  char *p = 0;
1350  int next = (hist_pos - 1 + HIST_SIZE) % HIST_SIZE;
1351 
1352  if (hist_buf[hist_pos] != 0 && next != hist_last) {
1353  hist_pos = next;
1354  p = hist_buf[hist_pos];
1355  }
1356  if (p == 0) {
1357  p = hist_empty_elem;
1358  gl_beep();
1359  }
1360  return p;
1361 }
static void gl_beep(void)
Definition: getline.c:1608
#define HIST_SIZE
Definition: getline.c:1296
static int hist_pos
Definition: getline.c:1299
static int hist_last
Definition: getline.c:1299
static unsigned __int64 next
Definition: rand_nt.c:6
static char hist_empty_elem[2]
Definition: getline.c:1301
static char * hist_buf[HIST_SIZE]
Definition: getline.c:1300
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by getline(), and search_back().

◆ hist_save()

static char * hist_save ( char p)
static

Definition at line 1381 of file getline.c.

1384 {
1385  char *s = 0;
1386  size_t len = strlen(p);
1387  char *nl = strpbrk(p, "\n\r");
1388 
1389  if (nl) {
1390  if ((s = (char *) malloc(len)) != 0) {
1391  strncpy(s, p, len-1);
1392  s[len-1] = 0;
1393  }
1394  } else {
1395  if ((s = (char *) malloc(len+1)) != 0) {
1396  strcpy(s, p);
1397  }
1398  }
1399  if (s == 0)
1400  gl_error("\n*** Error: hist_save() failed on malloc\n");
1401  return s;
1402 }
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char * strpbrk(const char *String, const char *Delimiters)
Definition: utclib.c:302
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
Definition: utclib.c:427
static void gl_error(const char *const buf)
Definition: getline.c:428
GLenum GLsizei len
Definition: glext.h:6722
GLdouble s
Definition: gl.h:2039
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
#define malloc
Definition: debug_ros.c:4
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by gl_histadd().

◆ pc_keymap()

int pc_keymap ( int  c)

Definition at line 245 of file getline.c.

246 {
247  switch (c) {
248  case K_UP:
249  case K_PGUP:
250  c = 16; /* up -> ^P */
251  break;
252  case K_DOWN:
253  case K_PGDN:
254  c = 14; /* down -> ^N */
255  break;
256  case K_LEFT:
257  c = 2; /* left -> ^B */
258  break;
259  case K_RIGHT:
260  c = 6; /* right -> ^F */
261  break;
262  case K_END:
263  c = 5; /* end -> ^E */
264  break;
265  case K_HOME:
266  c = 1; /* home -> ^A */
267  break;
268  case K_INSERT:
269  c = 15; /* insert -> ^O */
270  break;
271  case K_DELETE:
272  c = 4; /* del -> ^D */
273  break;
274  default:
275  c = 0; /* make it garbage */
276  }
277  return c;
278 }
#define K_HOME
Definition: getline.c:240
#define K_INSERT
Definition: getline.c:239
const GLubyte * c
Definition: glext.h:8905
#define K_LEFT
Definition: getline.c:236
#define K_RIGHT
Definition: getline.c:237
#define K_DELETE
Definition: getline.c:238
#define K_DOWN
Definition: getline.c:235
#define K_UP
Definition: getline.c:234
#define c
Definition: ke_i.h:80
#define K_END
Definition: getline.c:241
#define K_PGUP
Definition: getline.c:242
#define K_PGDN
Definition: getline.c:243

Referenced by gl_getc(), and gl_getcx().

◆ search_addchar()

static void search_addchar ( int  c)
static

Definition at line 1501 of file getline.c.

1502 {
1503  char *loc;
1504 
1505  search_update(c);
1506  if (c < 0) {
1507  if (search_pos > 0) {
1509  } else {
1510  gl_buf[0] = 0;
1511  hist_pos = hist_last;
1512  }
1514  }
1515  if ((loc = strstr(gl_buf, search_string)) != 0) {
1516  gl_fixup(search_prompt, 0, (int) (loc - gl_buf));
1517  } else if (search_pos > 0) {
1518  if (search_forw_flg) {
1519  search_forw(0);
1520  } else {
1521  search_back(0);
1522  }
1523  } else {
1524  gl_fixup(search_prompt, 0, 0);
1525  }
1526 }
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
static void search_back(int new_search)
Definition: getline.c:1540
static int search_pos
Definition: getline.c:1465
static int search_last
Definition: getline.c:1467
static char search_prompt[101]
Definition: getline.c:1463
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
static void search_forw(int new_search)
Definition: getline.c:1574
static int search_forw_flg
Definition: getline.c:1466
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
const GLubyte * c
Definition: glext.h:8905
static int hist_pos
Definition: getline.c:1299
static int hist_last
Definition: getline.c:1299
static char search_string[100]
Definition: getline.c:1464
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
static char * hist_buf[HIST_SIZE]
Definition: getline.c:1300
static void search_update(int c)
Definition: getline.c:1470

Referenced by getline().

◆ search_back()

static void search_back ( int  new_search)
static

Definition at line 1540 of file getline.c.

1541 {
1542  int found = 0;
1543  char *p, *loc;
1544 
1545  search_forw_flg = 0;
1546  if (gl_search_mode == 0) {
1548  search_update(0);
1549  gl_search_mode = 1;
1550  gl_buf[0] = 0;
1551  gl_fixup(search_prompt, 0, 0);
1552  } else if (search_pos > 0) {
1553  while (!found) {
1554  p = hist_prev();
1555  if (*p == 0) { /* not found, done looking */
1556  gl_buf[0] = 0;
1557  gl_fixup(search_prompt, 0, 0);
1558  found = 1;
1559  } else if ((loc = strstr(p, search_string)) != 0) {
1560  strcpy(gl_buf, p);
1561  gl_fixup(search_prompt, 0, (int) (loc - p));
1562  if (new_search)
1564  found = 1;
1565  }
1566  }
1567 
1568  } else {
1569  gl_beep();
1570  }
1571 }
static void gl_beep(void)
Definition: getline.c:1608
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
static int search_pos
Definition: getline.c:1465
static int search_last
Definition: getline.c:1467
static char search_prompt[101]
Definition: getline.c:1463
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
static int search_forw_flg
Definition: getline.c:1466
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
static int hist_pos
Definition: getline.c:1299
static char * hist_prev(void)
Definition: getline.c:1346
static int hist_last
Definition: getline.c:1299
static char search_string[100]
Definition: getline.c:1464
static int gl_search_mode
Definition: getline.c:108
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
GLfloat GLfloat p
Definition: glext.h:8902
static void search_update(int c)
Definition: getline.c:1470

Referenced by getline(), and search_addchar().

◆ search_forw()

static void search_forw ( int  new_search)
static

Definition at line 1574 of file getline.c.

1575 {
1576  int found = 0;
1577  char *p, *loc;
1578 
1579  search_forw_flg = 1;
1580  if (gl_search_mode == 0) {
1582  search_update(0);
1583  gl_search_mode = 1;
1584  gl_buf[0] = 0;
1585  gl_fixup(search_prompt, 0, 0);
1586  } else if (search_pos > 0) {
1587  while (!found) {
1588  p = hist_next();
1589  if (*p == 0) { /* not found, done looking */
1590  gl_buf[0] = 0;
1591  gl_fixup(search_prompt, 0, 0);
1592  found = 1;
1593  } else if ((loc = strstr(p, search_string)) != 0) {
1594  strcpy(gl_buf, p);
1595  gl_fixup(search_prompt, 0, (int) (loc - p));
1596  if (new_search)
1598  found = 1;
1599  }
1600  }
1601  } else {
1602  gl_beep();
1603  }
1604 }
static void gl_beep(void)
Definition: getline.c:1608
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
static int search_pos
Definition: getline.c:1465
static int search_last
Definition: getline.c:1467
static char search_prompt[101]
Definition: getline.c:1463
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
static int search_forw_flg
Definition: getline.c:1466
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
static int hist_pos
Definition: getline.c:1299
static int hist_last
Definition: getline.c:1299
static char search_string[100]
Definition: getline.c:1464
static int gl_search_mode
Definition: getline.c:108
static char * hist_next(void)
Definition: getline.c:1364
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
GLfloat GLfloat p
Definition: glext.h:8902
static void search_update(int c)
Definition: getline.c:1470

Referenced by getline(), and search_addchar().

◆ search_term()

static void search_term ( void  )
static

Definition at line 1529 of file getline.c.

1530 {
1531  gl_search_mode = 0;
1532  if (gl_buf[0] == 0) /* not found, reset hist list */
1533  hist_pos = hist_last;
1534  if (gl_in_hook)
1535  gl_in_hook(gl_buf);
1536  gl_fixup(gl_prompt, 0, gl_pos);
1537 }
static int gl_pos
Definition: getline.c:101
static const char * gl_prompt
Definition: getline.c:103
char gl_buf[GL_BUF_SIZE]
Definition: getline.c:89
static void gl_fixup(const char *prompt, int change, int cursor)
Definition: getline.c:1149
static int hist_pos
Definition: getline.c:1299
gl_in_hook_proc gl_in_hook
Definition: getline.c:80
static int hist_last
Definition: getline.c:1299
static int gl_search_mode
Definition: getline.c:108

Referenced by getline().

◆ search_update()

static void search_update ( int  c)
static

Definition at line 1470 of file getline.c.

1471 {
1472  if (c == 0) {
1473  search_pos = 0;
1474  search_string[0] = 0;
1475  search_prompt[0] = '?';
1476  search_prompt[1] = ' ';
1477  search_prompt[2] = 0;
1478  } else if (c > 0) {
1480  search_string[search_pos+1] = (char) 0;
1482  search_prompt[search_pos+1] = (char) '?';
1483  search_prompt[search_pos+2] = (char) ' ';
1484  search_prompt[search_pos+3] = (char) 0;
1485  search_pos++;
1486  } else {
1487  if (search_pos > 0) {
1488  search_pos--;
1489  search_string[search_pos] = (char) 0;
1490  search_prompt[search_pos] = (char) '?';
1491  search_prompt[search_pos+1] = (char) ' ';
1492  search_prompt[search_pos+2] = (char) 0;
1493  } else {
1494  gl_beep();
1495  hist_pos = hist_last;
1496  }
1497  }
1498 }
static void gl_beep(void)
Definition: getline.c:1608
static int search_pos
Definition: getline.c:1465
static char search_prompt[101]
Definition: getline.c:1463
unsigned char
Definition: typeof.h:29
const GLubyte * c
Definition: glext.h:8905
static int hist_pos
Definition: getline.c:1299
static int hist_last
Definition: getline.c:1299
static char search_string[100]
Definition: getline.c:1464

Referenced by search_addchar(), search_back(), and search_forw().

Variable Documentation

◆ copyright

const char copyright[] = "getline: Copyright (C) 1991, 1992, 1993, Chris Thewalt"
static

Definition at line 21 of file getline.c.

◆ gl_buf

◆ gl_cnt

int gl_cnt = 0
static

◆ gl_completion_exact_match_extra_char

int gl_completion_exact_match_extra_char

◆ gl_completion_proc

gl_tab_completion_proc gl_completion_proc = 0

Definition at line 84 of file getline.c.

Referenced by getline(), gl_do_tab_completion(), gl_tab_completion(), and InitReadline().

◆ gl_ellipses_during_completion

int gl_ellipses_during_completion = 1

Definition at line 87 of file getline.c.

Referenced by gl_do_tab_completion(), and gl_fixup().

◆ gl_extent

int gl_extent = 0
static

Definition at line 99 of file getline.c.

Referenced by getline(), gl_addchar(), gl_fixup(), gl_transpose(), and gl_yank().

◆ gl_filename_quote_characters

const char* gl_filename_quote_characters = " \t*?<>|;&()[]$`"

Definition at line 86 of file getline.c.

Referenced by gl_do_tab_completion().

◆ gl_filename_quoting_desired

int gl_filename_quoting_desired = -1

Definition at line 85 of file getline.c.

Referenced by CompletionFunction(), and gl_do_tab_completion().

◆ gl_home_dir

char* gl_home_dir = NULL
static

◆ gl_in_hook

gl_in_hook_proc gl_in_hook = 0

Definition at line 80 of file getline.c.

Referenced by getline(), and search_term().

◆ gl_init_done

int gl_init_done = -1
static

Definition at line 94 of file getline.c.

Referenced by gl_cleanup(), gl_histadd(), gl_init(), and gl_redraw().

◆ gl_intrc

char gl_intrc = 0
static

Definition at line 104 of file getline.c.

Referenced by getline(), and gl_char_init().

◆ gl_killbuf

char gl_killbuf[GL_BUF_SIZE] =""
static

Definition at line 102 of file getline.c.

Referenced by gl_del(), gl_kill(), gl_killword(), and gl_yank().

◆ gl_matchlist

char** gl_matchlist = 0
static

◆ gl_out_hook

gl_out_hook_proc gl_out_hook = 0

Definition at line 81 of file getline.c.

Referenced by gl_newline().

◆ gl_overwrite

int gl_overwrite = 0
static

Definition at line 100 of file getline.c.

Referenced by getline(), gl_addchar(), and gl_yank().

◆ gl_pos

◆ gl_prompt

◆ gl_quitc

char gl_quitc = 0
static

Definition at line 105 of file getline.c.

Referenced by getline(), and gl_char_init().

◆ gl_result

int gl_result = GL_OK
static

Definition at line 113 of file getline.c.

Referenced by getline(), and gl_get_result().

◆ gl_scroll

int gl_scroll = 27
static

Definition at line 97 of file getline.c.

Referenced by gl_fixup(), and gl_setwidth().

◆ gl_search_mode

int gl_search_mode = 0
static

Definition at line 108 of file getline.c.

Referenced by getline(), search_back(), search_forw(), and search_term().

◆ gl_tab_hook

gl_tab_hook_proc gl_tab_hook = gl_tab

Definition at line 82 of file getline.c.

Referenced by getline().

◆ gl_termh

int gl_termh = 24
static

Definition at line 96 of file getline.c.

Referenced by gl_display_matches(), and gl_setheight().

◆ gl_termw

int gl_termw = 80
static

Definition at line 95 of file getline.c.

Referenced by gl_display_matches(), gl_fixup(), and gl_setwidth().

◆ gl_vi_mode

int gl_vi_mode = 0
static

Definition at line 112 of file getline.c.

Referenced by getline(), and gl_del().

◆ gl_vi_preferred

int gl_vi_preferred = -1
static

Definition at line 111 of file getline.c.

Referenced by getline(), and gl_check_inputrc_for_vi().

◆ gl_width

int gl_width = 0
static

Definition at line 98 of file getline.c.

Referenced by gl_fixup(), and gl_newline().

◆ hist_buf

char* hist_buf[HIST_SIZE]
static

Definition at line 1300 of file getline.c.

Referenced by gl_histadd(), gl_histsavefile(), hist_init(), hist_next(), hist_prev(), and search_addchar().

◆ hist_empty_elem

char hist_empty_elem[2] = ""
static

Definition at line 1301 of file getline.c.

Referenced by gl_histadd(), hist_init(), hist_next(), and hist_prev().

◆ hist_last

int hist_last = 0
static

◆ hist_pos

◆ search_forw_flg

int search_forw_flg = 0
static

Definition at line 1466 of file getline.c.

Referenced by search_addchar(), search_back(), and search_forw().

◆ search_last

int search_last = 0
static

Definition at line 1467 of file getline.c.

Referenced by search_addchar(), search_back(), and search_forw().

◆ search_pos

int search_pos = 0
static

Definition at line 1465 of file getline.c.

Referenced by search_addchar(), search_back(), search_forw(), and search_update().

◆ search_prompt

char search_prompt[101]
static

Definition at line 1463 of file getline.c.

Referenced by search_addchar(), search_back(), search_forw(), and search_update().

◆ search_string

char search_string[100]
static

Definition at line 1464 of file getline.c.

Referenced by search_addchar(), search_back(), search_forw(), and search_update().