1 #ifndef _IPXE_EDITSTRING_H
2 #define _IPXE_EDITSTRING_H
3 
4 /** @file
5  *
6  * Editable strings
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 
12 /** An editable string */
13 struct edit_string {
14 	/** Buffer for string */
15 	char *buf;
16 	/** Size of buffer (including terminating NUL) */
17 	size_t len;
18 	/** Cursor position */
19 	unsigned int cursor;
20 
21 	/* The following items are the edit history */
22 
23 	/** Last cursor position */
24 	unsigned int last_cursor;
25 	/** Start of modified portion of string */
26 	unsigned int mod_start;
27 	/** End of modified portion of string */
28 	unsigned int mod_end;
29 };
30 
31 /**
32  * Initialise editable string
33  *
34  * @v string		Editable string
35  * @v buf		Buffer for string
36  * @v len		Length of buffer
37  */
init_editstring(struct edit_string * string,char * buf,size_t len)38 static inline void init_editstring ( struct edit_string *string, char *buf,
39 				     size_t len ) {
40 	string->buf = buf;
41 	string->len = len;
42 }
43 
44 extern void replace_string ( struct edit_string *string,
45 			     const char *replacement ) __nonnull;
46 extern int edit_string ( struct edit_string *string, int key ) __nonnull;
47 
48 #endif /* _IPXE_EDITSTRING_H */
49