Home | History | Annotate | Download | only in hci

Lines Matching refs:string

22 #include <string.h>
32 static void insert_delete ( struct edit_string *string, size_t delete_len,
35 static void insert_character ( struct edit_string *string,
37 static void delete_character ( struct edit_string *string ) __nonnull;
38 static void backspace ( struct edit_string *string ) __nonnull;
39 static void kill_eol ( struct edit_string *string ) __nonnull;
42 * Insert and/or delete text within an editable string
44 * @v string Editable string
48 static void insert_delete ( struct edit_string *string, size_t delete_len,
53 old_len = strlen ( string->buf );
54 assert ( string->cursor <= old_len );
55 max_delete_len = ( old_len - string->cursor );
59 max_insert_len = ( ( string->len - 1 ) - ( old_len - delete_len ) );
65 string->mod_start = string->cursor;
66 string->mod_end = ( ( new_len > old_len ) ? new_len : old_len );
69 memmove ( ( string->buf + string->cursor + insert_len ),
70 ( string->buf + string->cursor + delete_len ),
74 memcpy ( ( string->buf + string->cursor ), insert_text, insert_len );
75 string->cursor += insert_len;
81 * @v string Editable string
84 static void insert_character ( struct edit_string *string,
87 insert_delete ( string, 0, insert_text );
93 * @v string Editable string
95 static void delete_character ( struct edit_string *string ) {
96 insert_delete ( string, 1, NULL );
102 * @v string Editable string
104 static void backspace ( struct edit_string *string ) {
105 if ( string->cursor > 0 ) {
106 string->cursor--;
107 delete_character ( string );
114 * @v string Editable string
116 static void kill_eol ( struct edit_string *string ) {
117 insert_delete ( string, ~( ( size_t ) 0 ), NULL );
121 * Edit editable string
123 * @v string Editable string
127 * Handles keypresses and updates the content of the editable string.
134 * The string's edit history will be updated to allow the caller to
135 * efficiently bring the display into sync with the string content.
137 int edit_string ( struct edit_string *string, int key ) {
139 size_t len = strlen ( string->buf );
142 string->last_cursor = string->cursor;
143 string->mod_start = string->cursor;
144 string->mod_end = string->cursor;
149 insert_character ( string, key );
153 backspace ( string );
158 delete_character ( string );
162 kill_eol ( string );
167 string->cursor = 0;
172 string->cursor = len;
177 if ( string->cursor > 0 )
178 string->cursor--;
183 if ( string->cursor < len )
184 string->cursor++;