| #ifndef _READLINE_H | |
| #define _READLINE_H | |
| /** @file | |
| * | |
| * Minmal readline | |
| * | |
| */ | |
| FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); | |
| FILE_SECBOOT ( PERMITTED ); | |
| /** A readline history entry */ | |
| struct readline_history_entry { | |
| /** Persistent copy of string */ | |
| char *string; | |
| /** Temporary copy of string | |
| * | |
| * The temporary copy exists only during the call to | |
| * readline(). | |
| */ | |
| char *temp; | |
| }; | |
| /** Maximum depth of a readline history buffer | |
| * | |
| * Must be one less than a power of two. | |
| */ | |
| #define READLINE_HISTORY_MAX_DEPTH ( ( 1 << 3 ) - 1 ) | |
| /** A readline history buffer */ | |
| struct readline_history { | |
| /** History entries | |
| * | |
| * This is a circular buffer, with entries in chronological | |
| * order. The "next" entry is always empty except during a | |
| * call to readline(). | |
| */ | |
| struct readline_history_entry entries[READLINE_HISTORY_MAX_DEPTH + 1]; | |
| /** Position of next entry within buffer | |
| * | |
| * This is incremented monotonically each time an entry is | |
| * added to the buffer. | |
| */ | |
| unsigned int next; | |
| /** Current depth within history buffer | |
| * | |
| * This is valid only during the call to readline() | |
| */ | |
| unsigned int depth; | |
| }; | |
| extern void history_free ( struct readline_history *history ); | |
| extern int readline_history ( const char *prompt, const char *prefill, | |
| struct readline_history *history, | |
| unsigned long timeout, char **line ); | |
| extern char * __malloc readline ( const char *prompt ); | |
| #endif /* _READLINE_H */ |