Changes in / [1df977c:272f88f0] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/edit/edit.c
r1df977c r272f88f0 36 36 37 37 #include <stdio.h> 38 #include <stdlib.h>39 38 #include <sys/types.h> 40 39 #include <vfs/vfs.h> … … 105 104 static void key_handle_ctrl(console_event_t const *ev); 106 105 static int file_save(char const *fname); 107 static void file_save_as(void);108 106 static int file_insert(char *fname); 109 107 static int file_save_range(char const *fname, spt_t const *spos, 110 108 spt_t const *epos); 111 static char *filename_prompt(char const *prompt, char const *init_value);112 109 static void pane_text_display(void); 113 110 static void pane_row_display(void); … … 153 150 154 151 if (argc == 2) { 155 doc.file_name = str_dup(argv[1]);152 doc.file_name = argv[1]; 156 153 } else if (argc > 1) { 157 154 printf("Invalid arguments.\n"); 158 155 return -2; 159 156 } else { 160 doc.file_name = NULL;157 doc.file_name = "/edit.txt"; 161 158 } 162 159 163 160 new_file = false; 164 161 165 if ( doc.file_name == NULL ||file_insert(doc.file_name) != EOK)162 if (file_insert(doc.file_name) != EOK) 166 163 new_file = true; 167 164 … … 173 170 pane_text_display(); 174 171 pane_status_display(); 175 if (new_file && doc.file_name != NULL)176 status_display("File not found. Startingempty file.");172 if (new_file) 173 status_display("File not found. Created empty file."); 177 174 pane_caret_display(); 178 175 … … 269 266 break; 270 267 case KC_S: 271 if (doc.file_name != NULL) 272 file_save(doc.file_name); 273 else 274 file_save_as(); 275 break; 276 case KC_E: 277 file_save_as(); 268 (void) file_save(doc.file_name); 278 269 break; 279 270 default: … … 281 272 } 282 273 } 274 283 275 284 276 /** Save the document. */ … … 293 285 294 286 rc = file_save_range(fname, &sp, &ep); 295 296 switch (rc) { 297 case EINVAL: 298 status_display("Error opening file!"); 299 break; 300 case EIO: 301 status_display("Error writing data!"); 302 break; 303 default: 304 status_display("File saved."); 305 break; 306 } 287 status_display("File saved."); 307 288 308 289 return rc; 309 }310 311 /** Change document name and save. */312 static void file_save_as(void)313 {314 char *old_fname, *fname;315 int rc;316 317 old_fname = (doc.file_name != NULL) ? doc.file_name : "";318 fname = filename_prompt("Save As", old_fname);319 if (fname == NULL) {320 status_display("Save cancelled.");321 return;322 }323 324 rc = file_save(fname);325 if (rc != EOK)326 return;327 328 if (doc.file_name != NULL)329 free(doc.file_name);330 doc.file_name = fname;331 }332 333 #define INPUT_MAX_LEN 64334 335 /** Ask for a file name. */336 static char *filename_prompt(char const *prompt, char const *init_value)337 {338 console_event_t ev;339 char *str;340 wchar_t buffer[INPUT_MAX_LEN + 1];341 int nc;342 bool done;343 344 asprintf(&str, "%s: %s", prompt, init_value);345 status_display(str);346 console_goto(con, 1 + str_length(str), scr_rows - 1);347 free(str);348 349 console_set_color(con, COLOR_WHITE, COLOR_BLACK, 0);350 351 str_to_wstr(buffer, INPUT_MAX_LEN + 1, init_value);352 nc = wstr_length(buffer);353 done = false;354 355 while (!done) {356 console_get_event(con, &ev);357 358 if (ev.type == KEY_PRESS) {359 /* Handle key press. */360 if (((ev.mods & KM_ALT) == 0) &&361 (ev.mods & KM_CTRL) != 0) {362 ;363 } else if ((ev.mods & (KM_CTRL | KM_ALT)) == 0) {364 switch (ev.key) {365 case KC_ESCAPE:366 return NULL;367 case KC_BACKSPACE:368 if (nc > 0) {369 putchar('\b');370 fflush(stdout);371 --nc;372 }373 break;374 case KC_ENTER:375 done = true;376 break;377 default:378 if (ev.c >= 32 && nc < INPUT_MAX_LEN) {379 putchar(ev.c);380 fflush(stdout);381 buffer[nc++] = ev.c;382 }383 break;384 }385 }386 }387 }388 389 buffer[nc] = '\0';390 391 str = malloc(STR_BOUNDS(wstr_length(buffer)) + 1);392 if (str == NULL)393 return NULL;394 395 wstr_nstr(str, buffer, STR_BOUNDS(wstr_length(buffer)) + 1);396 397 console_set_color(con, COLOR_BLACK, COLOR_WHITE, 0);398 399 return str;400 290 } 401 291 … … 469 359 } while (!spt_equal(&bep, epos)); 470 360 471 if (fclose(f) != EOK) 472 return EIO; 361 fclose(f); 473 362 474 363 return EOK; … … 584 473 spt_t caret_pt; 585 474 coord_t coord; 586 char *fname;587 475 int n; 588 476 … … 590 478 spt_get_coord(&caret_pt, &coord); 591 479 592 fname = (doc.file_name != NULL) ? doc.file_name : "<unnamed>";593 594 480 console_goto(con, 0, scr_rows - 1); 595 481 console_set_color(con, COLOR_WHITE, COLOR_BLACK, 0); 596 n = printf(" %d, %d: File '%s'. Ctrl- Q Quit Ctrl-S Save "597 "Ctrl-E Save As", coord.row, coord.column, fname);482 n = printf(" %d, %d: File '%s'. Ctrl-S Save Ctrl-Q Quit", 483 coord.row, coord.column, doc.file_name); 598 484 printf("%*s", scr_columns - 1 - n, ""); 599 485 fflush(stdout);
Note:
See TracChangeset
for help on using the changeset viewer.