Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/edit/edit.c

    rb67c7d64 r00413c5c  
    3636
    3737#include <stdio.h>
    38 #include <stdlib.h>
    3938#include <sys/types.h>
    4039#include <vfs/vfs.h>
     
    102101#define ED_INFTY 65536
    103102
    104 /** Maximum filename length that can be entered. */
    105 #define INFNAME_MAX_LEN 128
    106 
    107103static void key_handle_unmod(console_event_t const *ev);
    108104static void key_handle_ctrl(console_event_t const *ev);
    109105static int file_save(char const *fname);
    110 static void file_save_as(void);
    111106static int file_insert(char *fname);
    112107static int file_save_range(char const *fname, spt_t const *spos,
    113108    spt_t const *epos);
    114 static char *filename_prompt(char const *prompt, char const *init_value);
    115109static void pane_text_display(void);
    116110static void pane_row_display(void);
     
    156150
    157151        if (argc == 2) {
    158                 doc.file_name = str_dup(argv[1]);
     152                doc.file_name = argv[1];
    159153        } else if (argc > 1) {
    160154                printf("Invalid arguments.\n");
    161155                return -2;
    162156        } else {
    163                 doc.file_name = NULL;
     157                doc.file_name = "/edit.txt";
    164158        }
    165159
    166160        new_file = false;
    167161
    168         if (doc.file_name == NULL || file_insert(doc.file_name) != EOK)
     162        if (file_insert(doc.file_name) != EOK)
    169163                new_file = true;
    170164
     
    176170        pane_text_display();
    177171        pane_status_display();
    178         if (new_file && doc.file_name != NULL)
    179                 status_display("File not found. Starting empty file.");
     172        if (new_file)
     173                status_display("File not found. Created empty file.");
    180174        pane_caret_display();
    181175
     
    272266                break;
    273267        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);
    281269                break;
    282270        default:
     
    284272        }
    285273}
     274
    286275
    287276/** Save the document. */
     
    296285
    297286        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.");
    310288
    311289        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;
    398290}
    399291
     
    467359        } while (!spt_equal(&bep, epos));
    468360
    469         if (fclose(f) != EOK)
    470                 return EIO;
     361        fclose(f);
    471362
    472363        return EOK;
     
    582473        spt_t caret_pt;
    583474        coord_t coord;
    584         char *fname;
    585475        int n;
    586476
     
    588478        spt_get_coord(&caret_pt, &coord);
    589479
    590         fname = (doc.file_name != NULL) ? doc.file_name : "<unnamed>";
    591 
    592480        console_goto(con, 0, scr_rows - 1);
    593481        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);
    596484        printf("%*s", scr_columns - 1 - n, "");
    597485        fflush(stdout);
Note: See TracChangeset for help on using the changeset viewer.