Enabled use of libedit as alternative to libreadline
This commit is contained in:
parent
ce022ecb3b
commit
ca46040007
53
acinclude.m4
53
acinclude.m4
@ -144,6 +144,56 @@ iconv_close(cd);
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl LIBBURNIA_TRY_EDITLINE is by Thomas Schmitt, libburnia project
|
||||||
|
dnl It performs the actual test compilation for editline.
|
||||||
|
dnl Variable LIBS has to be set by the caller.
|
||||||
|
AC_DEFUN([LIBBURNIA_TRY_EDITLINE],
|
||||||
|
[
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <histedit.h>],
|
||||||
|
[EditLine *editline_handle; History *editline_history; HistEvent ev; int count;
|
||||||
|
editline_handle= el_init("dummy", stdin, stdout, stderr);
|
||||||
|
el_set(editline_handle, EL_EDITOR, "emacs");
|
||||||
|
editline_history= history_init();
|
||||||
|
history(editline_history, &ev, H_SETSIZE, 1000);
|
||||||
|
el_gets(editline_handle, &count);
|
||||||
|
], [editline_test="yes"], [editline_test="no"]
|
||||||
|
)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl LIBBURNIA_ASSERT_EDITLINE is by Thomas Schmitt, libburnia project
|
||||||
|
dnl It disables xorriso editline if not all needed functions are present
|
||||||
|
AC_DEFUN([LIBBURNIA_ASSERT_EDITLINE],
|
||||||
|
[
|
||||||
|
if test x$XORRISO_ASSUME_EDITLINE = x
|
||||||
|
then
|
||||||
|
dnl Check for the essential gestures of xorriso/text_io.c
|
||||||
|
AC_MSG_CHECKING([for desired functions in libedit])
|
||||||
|
libburnia_save_LIBS="$LIBS"
|
||||||
|
LIBS="$LIBS -ledit"
|
||||||
|
LIBBURNIA_TRY_EDITLINE
|
||||||
|
if test x$editline_test = xno
|
||||||
|
then
|
||||||
|
LIBS="$libburnia_save_LIBS"
|
||||||
|
LIBS="$LIBS -ledit"
|
||||||
|
LIBBURNIA_TRY_EDITLINE
|
||||||
|
fi
|
||||||
|
if test x$editline_test = xno
|
||||||
|
then
|
||||||
|
READLINE_DEF=
|
||||||
|
LIBS="$libburnia_save_LIBS"
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$editline_test $editline_msg])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
dnl LIBBURNIA_TRY_READLINE is by Thomas Schmitt, libburnia project
|
dnl LIBBURNIA_TRY_READLINE is by Thomas Schmitt, libburnia project
|
||||||
dnl It performs the actual test compilation for readline.
|
dnl It performs the actual test compilation for readline.
|
||||||
dnl Variable LIBS has to be set by the caller.
|
dnl Variable LIBS has to be set by the caller.
|
||||||
@ -166,14 +216,13 @@ hl= history_list();
|
|||||||
)
|
)
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
dnl LIBBURNIA_ASSERT_READLINE is by Thomas Schmitt, libburnia project
|
dnl LIBBURNIA_ASSERT_READLINE is by Thomas Schmitt, libburnia project
|
||||||
dnl It disables xorriso readline if not all needed functions are present
|
dnl It disables xorriso readline if not all needed functions are present
|
||||||
AC_DEFUN([LIBBURNIA_ASSERT_READLINE],
|
AC_DEFUN([LIBBURNIA_ASSERT_READLINE],
|
||||||
[
|
[
|
||||||
if test x$XORRISO_ASSUME_READLINE = x
|
if test x$XORRISO_ASSUME_READLINE = x
|
||||||
then
|
then
|
||||||
dnl Check for the essential gestures of libisofs/util.c
|
dnl Check for the essential gestures of xorriso/text_io.c
|
||||||
AC_MSG_CHECKING([for desired functions in libreadline])
|
AC_MSG_CHECKING([for desired functions in libreadline])
|
||||||
readline_msg=
|
readline_msg=
|
||||||
libburnia_save_LIBS="$LIBS"
|
libburnia_save_LIBS="$LIBS"
|
||||||
|
16
configure.ac
16
configure.ac
@ -144,8 +144,24 @@ dnl The X= in the yes case prevents that -lreadline gets linked twice
|
|||||||
else
|
else
|
||||||
READLINE_DEF=
|
READLINE_DEF=
|
||||||
fi
|
fi
|
||||||
|
if test x$READLINE_DEF = x; then
|
||||||
|
AC_ARG_ENABLE(libedit,
|
||||||
|
[ --enable-libedit Enable use of libedit by xorriso if not libreadline, default=yes],
|
||||||
|
, enable_libedit=yes)
|
||||||
|
if test x$enable_libedit = xyes; then
|
||||||
|
dnl Check whether there is development and runtime support.
|
||||||
|
dnl If not, erase this macro which would enable use of el_*(), history*()
|
||||||
|
READLINE_DEF="-DXorriso_with_editlinE"
|
||||||
|
|
||||||
|
LIBBURNIA_ASSERT_EDITLINE
|
||||||
|
|
||||||
|
else
|
||||||
|
READLINE_DEF=
|
||||||
|
fi
|
||||||
|
fi
|
||||||
AC_SUBST(READLINE_DEF)
|
AC_SUBST(READLINE_DEF)
|
||||||
|
|
||||||
|
|
||||||
dnl ts A90329
|
dnl ts A90329
|
||||||
dnl ACL and xattr do not need to be enabled in libisoburn or xorriso source
|
dnl ACL and xattr do not need to be enabled in libisoburn or xorriso source
|
||||||
dnl but without AC_CHECK_LIB() xorriso will not be linked with -lacl .
|
dnl but without AC_CHECK_LIB() xorriso will not be linked with -lacl .
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||||
|
|
||||||
Copyright 2007-2013 Thomas Schmitt, <scdbackup@gmx.net>
|
Copyright 2007-2014 Thomas Schmitt, <scdbackup@gmx.net>
|
||||||
|
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
|
|
||||||
@ -111,6 +111,9 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
|||||||
free(leafname);
|
free(leafname);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Base initialization by actions which must not fail */
|
||||||
|
|
||||||
m->libs_are_started= 0;
|
m->libs_are_started= 0;
|
||||||
strncpy(m->progname,progname,sizeof(m->progname)-1);
|
strncpy(m->progname,progname,sizeof(m->progname)-1);
|
||||||
m->progname[sizeof(m->progname)-1]= 0;
|
m->progname[sizeof(m->progname)-1]= 0;
|
||||||
@ -431,6 +434,9 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
|||||||
|
|
||||||
m->info_text[0]= 0;
|
m->info_text[0]= 0;
|
||||||
|
|
||||||
|
|
||||||
|
/* Here begin actions which might fail */
|
||||||
|
|
||||||
ret= Sfile_leafname(progname, leafname, 0);
|
ret= Sfile_leafname(progname, leafname, 0);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto failure;
|
goto failure;
|
||||||
|
@ -174,9 +174,29 @@ dnl The X= in the yes case prevents that -lreadline gets linked twice
|
|||||||
else
|
else
|
||||||
READLINE_DEF=
|
READLINE_DEF=
|
||||||
fi
|
fi
|
||||||
|
if test x$READLINE_DEF = x; then
|
||||||
|
AH_TEMPLATE([Xorriso_with_editlinE],
|
||||||
|
[Define to use libedit if not libreadline])
|
||||||
|
AC_ARG_ENABLE(libedit,
|
||||||
|
[ --enable-libedit Enable use of libedit by xorriso if not libreadline, default=yes],
|
||||||
|
, enable_libedit=yes)
|
||||||
|
if test x$enable_libedit = xyes; then
|
||||||
|
dnl Check whether there is development and runtime support.
|
||||||
|
dnl If not, erase this macro which would enable use of el_*(), history*()
|
||||||
|
READLINE_DEF="-DXorriso_with_editlinE"
|
||||||
|
|
||||||
|
LIBBURNIA_ASSERT_EDITLINE
|
||||||
|
|
||||||
|
else
|
||||||
|
READLINE_DEF=
|
||||||
|
fi
|
||||||
|
fi
|
||||||
if test x$READLINE_DEF = x-DXorriso_with_readlinE
|
if test x$READLINE_DEF = x-DXorriso_with_readlinE
|
||||||
then
|
then
|
||||||
AC_DEFINE([Xorriso_with_readlinE], [])
|
AC_DEFINE([Xorriso_with_readlinE], [])
|
||||||
|
elif test x$READLINE_DEF = x-DXorriso_with_editlinE
|
||||||
|
then
|
||||||
|
AC_DEFINE([Xorriso_with_editlinE], [])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AH_TEMPLATE([Libisofs_with_aaip_acL], [Define to use ACL capabilities])
|
AH_TEMPLATE([Libisofs_with_aaip_acL], [Define to use ACL capabilities])
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||||
|
|
||||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
Copyright 2007-2014 Thomas Schmitt, <scdbackup@gmx.net>
|
||||||
|
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
|
|
||||||
@ -929,10 +929,14 @@ int Xorriso_list_extras(struct XorrisO *xorriso, char *mode, int flag)
|
|||||||
Xorriso_list_extras_result(xorriso, mode, "dvd_obs", 0);
|
Xorriso_list_extras_result(xorriso, mode, "dvd_obs", 0);
|
||||||
|
|
||||||
sprintf(xorriso->result_line, "Readline : %s\n",
|
sprintf(xorriso->result_line, "Readline : %s\n",
|
||||||
|
#ifdef Xorriso_with_editlinE
|
||||||
|
"yes , libedit");
|
||||||
|
#else
|
||||||
#ifdef Xorriso_with_readlinE
|
#ifdef Xorriso_with_readlinE
|
||||||
"yes");
|
"yes");
|
||||||
#else
|
#else
|
||||||
"no");
|
"no");
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
Xorriso_list_extras_result(xorriso, mode, "use_readline", 0);
|
Xorriso_list_extras_result(xorriso, mode, "use_readline", 0);
|
||||||
|
|
||||||
|
@ -29,6 +29,12 @@
|
|||||||
#include "xorriso_private.h"
|
#include "xorriso_private.h"
|
||||||
#include "xorrisoburn.h"
|
#include "xorrisoburn.h"
|
||||||
|
|
||||||
|
#ifdef Xorriso_with_readlinE
|
||||||
|
#define Xorriso_with_line_editoR
|
||||||
|
#endif
|
||||||
|
#ifdef Xorriso_with_editlinE
|
||||||
|
#define Xorriso_with_line_editoR
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Command -data_cache_size */
|
/* Command -data_cache_size */
|
||||||
int Xorriso_option_data_cache_size(struct XorrisO *xorriso, char *num_tiles,
|
int Xorriso_option_data_cache_size(struct XorrisO *xorriso, char *num_tiles,
|
||||||
@ -2185,12 +2191,12 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
|||||||
" -page len width Prompt user after len output lines (0=no prompt).",
|
" -page len width Prompt user after len output lines (0=no prompt).",
|
||||||
" width (default 80) can adjust line number computation",
|
" width (default 80) can adjust line number computation",
|
||||||
" to the output terminal's line width.",
|
" to the output terminal's line width.",
|
||||||
#ifdef Xorriso_with_readlinE
|
#ifdef Xorriso_with_line_editoR
|
||||||
" -use_readline \"on\"|\"off\"",
|
" -use_readline \"on\"|\"off\"",
|
||||||
" Whether to use libreadline for dialog if available.",
|
" Whether to use libreadline for dialog if available.",
|
||||||
" -history text Copy text into libreadline history. This command",
|
" -history text Copy text into libreadline history. This command",
|
||||||
" itself is not copied to the history list.",
|
" itself is not copied to the history list.",
|
||||||
#endif /* Xorriso_with_readlinE */
|
#endif /* Xorriso_with_line_editoR */
|
||||||
" -sh_style_result \"on\"|\"off\"",
|
" -sh_style_result \"on\"|\"off\"",
|
||||||
" If \"on\" do not wrap file addresses in quotation marks with",
|
" If \"on\" do not wrap file addresses in quotation marks with",
|
||||||
" -pwd -pwdx -ls -lsd -lsl -lsdl -lsx -lsdx -lslx -lsdlx",
|
" -pwd -pwdx -ls -lsd -lsl -lsdl -lsx -lsdx -lslx -lsdlx",
|
||||||
|
@ -41,8 +41,14 @@
|
|||||||
#include <readline/readline.h>
|
#include <readline/readline.h>
|
||||||
#include <readline/history.h>
|
#include <readline/history.h>
|
||||||
#endif /* ! Xorriso_with_old_readlinE */
|
#endif /* ! Xorriso_with_old_readlinE */
|
||||||
|
#define Xorriso_with_line_editoR yes
|
||||||
#endif /* Xorriso_with_readlinE */
|
#endif /* Xorriso_with_readlinE */
|
||||||
|
|
||||||
|
#ifdef Xorriso_with_editlinE
|
||||||
|
#include <histedit.h>
|
||||||
|
#define Xorriso_with_line_editoR yes
|
||||||
|
#endif /* Xorriso_with_editlinE */
|
||||||
|
|
||||||
|
|
||||||
#include "xorriso.h"
|
#include "xorriso.h"
|
||||||
#include "xorriso_private.h"
|
#include "xorriso_private.h"
|
||||||
@ -59,6 +65,218 @@ int Xorriso_protect_stdout(struct XorrisO *xorriso, int flag)
|
|||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef Xorriso_with_editlinE
|
||||||
|
|
||||||
|
/* These have to be global and shared by all XorrisOs which might be active.
|
||||||
|
*/
|
||||||
|
static EditLine *editline_handle= NULL;
|
||||||
|
static History *editline_history= NULL;
|
||||||
|
static int editline_is_initialized= 0;
|
||||||
|
|
||||||
|
char *Xorriso__editline_prompt(EditLine *el_handle)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Xorriso_init_editline(struct XorrisO *xorriso, int flag)
|
||||||
|
{
|
||||||
|
HistEvent ev;
|
||||||
|
|
||||||
|
/* >>> Need mutex */
|
||||||
|
|
||||||
|
if(editline_is_initialized != 0)
|
||||||
|
return;
|
||||||
|
editline_is_initialized= -1; /* Invalid */
|
||||||
|
|
||||||
|
editline_handle= el_init(xorriso->progname, stdin, stdout, stderr);
|
||||||
|
if(editline_handle == NULL)
|
||||||
|
return;
|
||||||
|
el_set(editline_handle, EL_EDITOR, "emacs");
|
||||||
|
el_set(editline_handle, EL_PROMPT, &Xorriso__editline_prompt);
|
||||||
|
|
||||||
|
editline_history= history_init();
|
||||||
|
if(editline_history == NULL)
|
||||||
|
return;
|
||||||
|
history(editline_history, &ev, H_SETSIZE, 1000);
|
||||||
|
el_set(editline_handle, EL_HIST, history, editline_history);
|
||||||
|
|
||||||
|
/* >>> ??? where to apply history_end() and el_end() ? */;
|
||||||
|
|
||||||
|
editline_is_initialized= 1; /* Valid now */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* Xorriso_with_editlinE */
|
||||||
|
|
||||||
|
#ifdef Xorriso_with_line_editoR
|
||||||
|
|
||||||
|
char *Xorriso_emul_readline(struct XorrisO *xorriso, int flag)
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifdef Xorriso_with_editlinE
|
||||||
|
|
||||||
|
const char *cpt;
|
||||||
|
int count= 0;
|
||||||
|
char *retpt;
|
||||||
|
|
||||||
|
/* >>> Need mutex */
|
||||||
|
|
||||||
|
Xorriso_init_editline(xorriso, 0);
|
||||||
|
if(editline_is_initialized < 0) {
|
||||||
|
|
||||||
|
/* >>> fallback */;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
cpt= el_gets(editline_handle, &count);
|
||||||
|
if(count == -1 || cpt == NULL)
|
||||||
|
return(NULL);
|
||||||
|
retpt= calloc(1, count + 1);
|
||||||
|
if(retpt == NULL)
|
||||||
|
return(NULL);
|
||||||
|
memcpy(retpt, cpt, count);
|
||||||
|
retpt[count]= 0;
|
||||||
|
return(retpt);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifdef Xorriso_with_readlinE
|
||||||
|
|
||||||
|
char *cpt;
|
||||||
|
|
||||||
|
cpt= readline("");
|
||||||
|
return(cpt);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
return(NULL);
|
||||||
|
|
||||||
|
#endif /* ! Xorriso_with_readlinE */
|
||||||
|
#endif /* ! Xorriso_with_editlinE */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Xorriso_emul_add_history(struct XorrisO *xorriso, char *line, int flag)
|
||||||
|
{
|
||||||
|
#ifdef Xorriso_with_editlinE
|
||||||
|
|
||||||
|
HistEvent ev;
|
||||||
|
|
||||||
|
/* >>> Need mutex */
|
||||||
|
|
||||||
|
Xorriso_init_editline(xorriso, 0);
|
||||||
|
if(editline_is_initialized < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
history(editline_history, &ev, H_ENTER, line);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifdef Xorriso_with_readlinE
|
||||||
|
|
||||||
|
add_history(line);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* ??? How to raise protest ? */;
|
||||||
|
|
||||||
|
#endif /* ! Xorriso_with_readlinE */
|
||||||
|
#endif /* ! Xorriso_with_editlinE */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit1= do only report to fp
|
||||||
|
*/
|
||||||
|
int Xorriso_status_history(struct XorrisO *xorriso, char *filter, FILE *fp,
|
||||||
|
int flag)
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifdef Xorriso_with_editlinE
|
||||||
|
|
||||||
|
int ret, l;
|
||||||
|
HistEvent ev;
|
||||||
|
int hc, i, was_end= 0;
|
||||||
|
char *str= NULL;
|
||||||
|
|
||||||
|
|
||||||
|
/* >>> Need mutex */
|
||||||
|
|
||||||
|
Xorriso_init_editline(xorriso, 0);
|
||||||
|
if(editline_is_initialized < 0)
|
||||||
|
{ret= 0; goto ex;}
|
||||||
|
|
||||||
|
Xorriso_alloc_meM(str, char, SfileadrL);
|
||||||
|
|
||||||
|
ret= history(editline_history, &ev, H_LAST);
|
||||||
|
for(hc= 0; ret != -1; hc++) {
|
||||||
|
ret= history(editline_history, &ev, H_PREV);
|
||||||
|
was_end = (strcmp(ev.str, "-end") == 0);
|
||||||
|
}
|
||||||
|
if(was_end)
|
||||||
|
hc--;
|
||||||
|
if(hc >= xorriso->status_history_max)
|
||||||
|
i= hc - xorriso->status_history_max;
|
||||||
|
else
|
||||||
|
i= 0;
|
||||||
|
|
||||||
|
ret= history(editline_history, &ev, H_LAST);
|
||||||
|
for(; i < hc && ret != -1; i++) {
|
||||||
|
/* Eat newline at line end */
|
||||||
|
strncpy(str, ev.str, SfileadrL - 1);
|
||||||
|
str[SfileadrL - 1]= 0;
|
||||||
|
l= strlen(str);
|
||||||
|
if(l > 0)
|
||||||
|
if(str[l - 1] == '\n')
|
||||||
|
str[l - 1]= 0;
|
||||||
|
|
||||||
|
sprintf(xorriso->result_line, "-history ");
|
||||||
|
Text_shellsafe(str, xorriso->result_line, 1);
|
||||||
|
strcat(xorriso->result_line, "\n");
|
||||||
|
Xorriso_status_result(xorriso, filter, fp, flag & 2);
|
||||||
|
ret= history(editline_history, &ev, H_PREV);
|
||||||
|
}
|
||||||
|
ret= 1;
|
||||||
|
ex:;
|
||||||
|
Xorriso_free_meM(str);
|
||||||
|
return(ret);
|
||||||
|
|
||||||
|
#else
|
||||||
|
#ifdef Xorriso_with_readlinE
|
||||||
|
|
||||||
|
HIST_ENTRY **hl;
|
||||||
|
int hc, i;
|
||||||
|
|
||||||
|
hl= history_list();
|
||||||
|
if(hl != NULL) {
|
||||||
|
for(hc= 0; hl[hc] != NULL; hc++);
|
||||||
|
if(hc > 0)
|
||||||
|
if(strcmp(hl[hc-1]->line, "-end") == 0)
|
||||||
|
hc--;
|
||||||
|
if(hc >= xorriso->status_history_max)
|
||||||
|
i= hc - xorriso->status_history_max;
|
||||||
|
else
|
||||||
|
i= 0;
|
||||||
|
for(; i < hc; i++) {
|
||||||
|
sprintf(xorriso->result_line, "-history ");
|
||||||
|
Text_shellsafe(hl[i]->line, xorriso->result_line, 1);
|
||||||
|
strcat(xorriso->result_line, "\n");
|
||||||
|
Xorriso_status_result(xorriso, filter, fp, flag & 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
#else /* Xorriso_with_readlinE */
|
||||||
|
|
||||||
|
return(0);
|
||||||
|
|
||||||
|
#endif /* ! Xorriso_with_readlinE */
|
||||||
|
#endif /* ! Xorriso_with_editlinE */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* Xorriso_with_line_editoR */
|
||||||
|
|
||||||
|
|
||||||
int Xorriso_dialog_input(struct XorrisO *xorriso, char line[], int linesize,
|
int Xorriso_dialog_input(struct XorrisO *xorriso, char line[], int linesize,
|
||||||
int flag)
|
int flag)
|
||||||
@ -73,10 +291,10 @@ int Xorriso_dialog_input(struct XorrisO *xorriso, char line[], int linesize,
|
|||||||
{
|
{
|
||||||
char *cpt= NULL, **argv= NULL, *linept, *why_append= "";
|
char *cpt= NULL, **argv= NULL, *linept, *why_append= "";
|
||||||
int ret, argc= 0, base_length= 0, l, append_line;
|
int ret, argc= 0, base_length= 0, l, append_line;
|
||||||
#ifdef Xorriso_with_readlinE
|
#ifdef Xorriso_with_line_editoR
|
||||||
static char last_input[SfileadrL]= {""};
|
static char last_input[SfileadrL]= {""};
|
||||||
int no_history= 0;
|
int no_history= 0;
|
||||||
#endif /* ! Xorriso_with_readlinE */
|
#endif /* Xorriso_with_line_editoR */
|
||||||
double tdiff;
|
double tdiff;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
struct timezone tz;
|
struct timezone tz;
|
||||||
@ -88,7 +306,7 @@ int Xorriso_dialog_input(struct XorrisO *xorriso, char line[], int linesize,
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
linept= line;
|
linept= line;
|
||||||
|
|
||||||
#ifdef Xorriso_with_readlinE
|
#ifdef Xorriso_with_line_editoR
|
||||||
no_history= (flag & 1) || xorriso->use_stdin;
|
no_history= (flag & 1) || xorriso->use_stdin;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -103,7 +321,7 @@ get_single:;
|
|||||||
goto process_single;
|
goto process_single;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Xorriso_with_readlinE
|
#ifdef Xorriso_with_line_editoR
|
||||||
|
|
||||||
if(xorriso->use_stdin || xorriso->dev_fd_1>=0 ||
|
if(xorriso->use_stdin || xorriso->dev_fd_1>=0 ||
|
||||||
xorriso->tolerate_stdin_eof) {
|
xorriso->tolerate_stdin_eof) {
|
||||||
@ -125,7 +343,7 @@ get_single:;
|
|||||||
if(flag&2) {
|
if(flag&2) {
|
||||||
cpt= NULL;
|
cpt= NULL;
|
||||||
} else {
|
} else {
|
||||||
cpt= readline("");
|
cpt= Xorriso_emul_readline(xorriso, 0);
|
||||||
if(cpt==NULL) {
|
if(cpt==NULL) {
|
||||||
/* need a very dramatic end */
|
/* need a very dramatic end */
|
||||||
kill(getpid(),SIGHUP);
|
kill(getpid(),SIGHUP);
|
||||||
@ -142,7 +360,7 @@ get_single:;
|
|||||||
strcpy(linept, cpt);
|
strcpy(linept, cpt);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* Xorriso_with_readlinE */
|
#else /* Xorriso_with_line_editoR */
|
||||||
|
|
||||||
if(flag&2)
|
if(flag&2)
|
||||||
{ret= 1; goto ex;}
|
{ret= 1; goto ex;}
|
||||||
@ -155,7 +373,7 @@ get_single:;
|
|||||||
{ret= -1; goto ex;}
|
{ret= -1; goto ex;}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* ! Xorriso_with_readlinE */
|
#endif /* ! Xorriso_with_line_editoR */
|
||||||
|
|
||||||
process_single:;
|
process_single:;
|
||||||
|
|
||||||
@ -209,19 +427,19 @@ new_empty:;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Xorriso_with_readlinE
|
#ifdef Xorriso_with_line_editoR
|
||||||
|
|
||||||
put_into_history:;
|
put_into_history:;
|
||||||
if((flag & 32) || (line[0]!=0 && strcmp(last_input,line)!=0 && !no_history)) {
|
if((flag & 32) || (line[0]!=0 && strcmp(last_input,line)!=0 && !no_history)) {
|
||||||
if(!((flag&4) &&
|
if(!((flag&4) &&
|
||||||
(strncmp(line,"-history:",9)==0 || strncmp(line,"-history ",9)==0))) {
|
(strncmp(line,"-history:",9)==0 || strncmp(line,"-history ",9)==0))) {
|
||||||
add_history(line);
|
Xorriso_emul_add_history(xorriso, line, 0);
|
||||||
strncpy(last_input,line,sizeof(last_input)-1);
|
strncpy(last_input,line,sizeof(last_input)-1);
|
||||||
last_input[sizeof(last_input)-1]= 0;
|
last_input[sizeof(last_input)-1]= 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* ! Xorriso_with_readlinE */
|
#endif /* Xorriso_with_line_editoR */
|
||||||
|
|
||||||
ret= 1;
|
ret= 1;
|
||||||
ex:;
|
ex:;
|
||||||
@ -3185,30 +3403,12 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
|||||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Xorriso_with_readlinE
|
#ifdef Xorriso_with_line_editoR
|
||||||
|
|
||||||
if((flag&8) && xorriso->status_history_max>0) {
|
if((flag & 8) && xorriso->status_history_max > 0 && !xorriso->use_stdin)
|
||||||
HIST_ENTRY **hl;
|
Xorriso_status_history(xorriso, filter, fp, flag & 2);
|
||||||
int hc,i;
|
|
||||||
|
|
||||||
hl= history_list();
|
#endif /* Xorriso_with_line_editoR */
|
||||||
if(hl!=NULL) {
|
|
||||||
for(hc= 0;hl[hc]!=NULL;hc++);
|
|
||||||
if(hc>0)
|
|
||||||
if(strcmp(hl[hc-1]->line,"-end")==0)
|
|
||||||
hc--;
|
|
||||||
if(hc>=xorriso->status_history_max)
|
|
||||||
i= hc-xorriso->status_history_max;
|
|
||||||
else
|
|
||||||
i= 0;
|
|
||||||
for(;i<hc;i++) {
|
|
||||||
sprintf(line,"-history %s\n",Text_shellsafe(hl[i]->line,sfe,0));
|
|
||||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* Xorriso_with_readlinE */
|
|
||||||
|
|
||||||
is_default= (xorriso->toc_emulation_flag == 0);
|
is_default= (xorriso->toc_emulation_flag == 0);
|
||||||
sprintf(line,"-rom_toc_scan %s:%s:%s\n",
|
sprintf(line,"-rom_toc_scan %s:%s:%s\n",
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2014.06.14.185146"
|
#define Xorriso_timestamP "2014.06.14.192149"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user