2001-03-18 16:24:57 +03:00
/*
Unix SMB / Netbios implementation .
Version 3.0
Samba readline wrapper implementation
2001-03-19 02:41:53 +03:00
Copyright ( C ) Simo Sorce 2001
2001-03-18 16:24:57 +03:00
Copyright ( C ) Andrew Tridgell 2001
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include "includes.h"
# ifdef HAVE_LIBREADLINE
2001-03-19 02:41:53 +03:00
# ifdef HAVE_READLINE_READLINE_H
# include <readline / readline.h>
# ifdef HAVE_READLINE_HISTORY_H
# include <readline / history.h>
# endif
# else
# ifdef HAVE_READLINE_H
# include <readline.h>
# ifdef HAVE_HISTORY_H
# include <history.h>
# endif
# else
# undef HAVE_LIBREADLINE
# endif
# endif
2001-03-18 16:24:57 +03:00
# endif
/****************************************************************************
2001-03-19 02:41:53 +03:00
display the prompt and wait for input . Call callback ( ) regularly
2001-03-18 16:24:57 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-03-19 03:22:52 +03:00
char * smb_readline ( char * prompt , void ( * callback ) ( void ) ,
char * * ( completion_fn ) ( char * text , int start , int end ) )
2001-03-18 16:24:57 +03:00
{
2001-03-19 02:41:53 +03:00
char * ret ;
# if HAVE_LIBREADLINE
2001-03-19 03:22:52 +03:00
if ( completion_fn ) {
2001-05-07 06:03:32 +04:00
rl_attempted_completion_function = completion_fn ;
2001-03-19 03:22:52 +03:00
}
2001-03-19 03:32:16 +03:00
if ( callback ) rl_event_hook = ( Function * ) callback ;
2001-03-19 02:41:53 +03:00
ret = readline ( prompt ) ;
if ( ret & & * ret ) add_history ( ret ) ;
return ret ;
# else
fd_set fds ;
2001-03-18 16:24:57 +03:00
extern FILE * dbf ;
2001-03-19 02:41:53 +03:00
static pstring line ;
struct timeval timeout ;
int fd = fileno ( stdin ) ;
2001-03-18 16:24:57 +03:00
fprintf ( dbf , " %s " , prompt ) ;
fflush ( dbf ) ;
2001-03-19 02:41:53 +03:00
while ( 1 ) {
timeout . tv_sec = 5 ;
timeout . tv_usec = 0 ;
2001-03-18 16:24:57 +03:00
2001-03-19 02:41:53 +03:00
FD_ZERO ( & fds ) ;
FD_SET ( fd , & fds ) ;
if ( sys_select_intr ( fd + 1 , & fds , & timeout ) = = 1 ) {
ret = fgets ( line , sizeof ( line ) , stdin ) ;
return ret ;
}
if ( callback ) callback ( ) ;
}
2001-03-18 16:24:57 +03:00
# endif
}
/****************************************************************************
history
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void cmd_history ( void )
{
2001-03-19 02:41:53 +03:00
# if defined(HAVE_LIBREADLINE)
2001-03-18 16:24:57 +03:00
HIST_ENTRY * * hlist ;
int i ;
2001-03-19 02:41:53 +03:00
hlist = history_list ( ) ;
2001-03-18 16:24:57 +03:00
for ( i = 0 ; hlist & & hlist [ i ] ; i + + ) {
DEBUG ( 0 , ( " %d: %s \n " , i , hlist [ i ] - > line ) ) ;
}
# else
DEBUG ( 0 , ( " no history without readline support \n " ) ) ;
# endif
}