| #ifndef _IPXE_EDITSTRING_H |
| #define _IPXE_EDITSTRING_H |
| |
| /** @file |
| * |
| * Editable strings |
| * |
| */ |
| |
| FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); |
| |
| /** An editable string */ |
| struct edit_string { |
| /** Dynamically allocated string buffer */ |
| char **buf; |
| /** Cursor position */ |
| unsigned int cursor; |
| |
| /* The following items are the edit history */ |
| |
| /** Last cursor position */ |
| unsigned int last_cursor; |
| /** Start of modified portion of string */ |
| unsigned int mod_start; |
| /** End of modified portion of string */ |
| unsigned int mod_end; |
| }; |
| |
| /** |
| * Initialise editable string |
| * |
| * @v string Editable string |
| * @v buf Dynamically allocated string buffer |
| * |
| * The @c buf parameter must be the address of a caller-provided |
| * pointer to a NUL-terminated string allocated using malloc() (or |
| * equivalent, such as strdup()). Any edits made to the string will |
| * realloc() the string buffer as needed. |
| * |
| * The caller may choose leave the initial string buffer pointer as @c |
| * NULL, in which case it will be allocated upon the first attempt to |
| * insert a character into the buffer. If the caller does this, then |
| * it must be prepared to find the pointer still @c NULL after |
| * editing, since the user may never attempt to insert any characters. |
| */ |
| static inline __nonnull void init_editstring ( struct edit_string *string, |
| char **buf ) { |
| |
| string->buf = buf; |
| } |
| |
| extern __attribute__ (( nonnull ( 1 ) )) int |
| replace_string ( struct edit_string *string, const char *replacement ); |
| |
| extern __nonnull int edit_string ( struct edit_string *string, int key ); |
| |
| #endif /* _IPXE_EDITSTRING_H */ |