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