Changes in / [dc5aa568:80d8885] in mainline


Ignore:
Location:
uspace
Files:
1 deleted
6 edited

Legend:

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

    rdc5aa568 r80d8885  
    9191typedef struct {
    9292        char *file_name;
    93         sheet_t *sh;
     93        sheet_t sh;
    9494} doc_t;
    9595
     
    175175        coord_t coord;
    176176        bool new_file;
    177         int rc;
    178177
    179178        spt_t pt;
     
    190189
    191190        /* Start with an empty sheet. */
    192         rc = sheet_create(&doc.sh);
    193         if (rc != EOK) {
    194                 printf("Out of memory.\n");
    195                 return -1;
    196         }
     191        sheet_init(&doc.sh);
    197192
    198193        /* Place caret at the beginning of file. */
    199194        coord.row = coord.column = 1;
    200         sheet_get_cell_pt(doc.sh, &coord, dir_before, &pt);
    201         sheet_place_tag(doc.sh, &pt, &pane.caret_pos);
     195        sheet_get_cell_pt(&doc.sh, &coord, dir_before, &pt);
     196        sheet_place_tag(&doc.sh, &pt, &pane.caret_pos);
    202197        pane.ideal_column = coord.column;
    203198
     
    221216        /* Place selection start tag. */
    222217        tag_get_pt(&pane.caret_pos, &pt);
    223         sheet_place_tag(doc.sh, &pt, &pane.sel_start);
     218        sheet_place_tag(&doc.sh, &pt, &pane.sel_start);
    224219
    225220        /* Initial display */
     
    452447        if (select == false) {
    453448                /* Move sel_start to the same point as caret. */
    454                 sheet_remove_tag(doc.sh, &pane.sel_start);
     449                sheet_remove_tag(&doc.sh, &pane.sel_start);
    455450                tag_get_pt(&pane.caret_pos, &pt);
    456                 sheet_place_tag(doc.sh, &pt, &pane.sel_start);
     451                sheet_place_tag(&doc.sh, &pt, &pane.sel_start);
    457452        }
    458453
     
    675670
    676671        do {
    677                 sheet_copy_out(doc.sh, &sp, epos, buf, BUF_SIZE, &bep);
     672                sheet_copy_out(&doc.sh, &sp, epos, buf, BUF_SIZE, &bep);
    678673                bytes = str_size(buf);
    679674
     
    710705
    711706        while (true) {
    712                 sheet_copy_out(doc.sh, &sp, epos, &buf[bpos], buf_size - bpos,
     707                sheet_copy_out(&doc.sh, &sp, epos, &buf[bpos], buf_size - bpos,
    713708                    &bep);
    714709                bytes = str_size(&buf[bpos]);
     
    732727        int sh_rows, rows;
    733728
    734         sheet_get_num_rows(doc.sh, &sh_rows);
     729        sheet_get_num_rows(&doc.sh, &sh_rows);
    735730        rows = min(sh_rows - pane.sh_row + 1, pane.rows);
    736731
     
    802797                rbc.row = pane.sh_row + i;
    803798                rbc.column = pane.sh_column;
    804                 sheet_get_cell_pt(doc.sh, &rbc, dir_before, &rb);
     799                sheet_get_cell_pt(&doc.sh, &rbc, dir_before, &rb);
    805800
    806801                /* Ending point for row display */
    807802                rec.row = pane.sh_row + i;
    808803                rec.column = pane.sh_column + pane.columns;
    809                 sheet_get_cell_pt(doc.sh, &rec, dir_before, &re);
     804                sheet_get_cell_pt(&doc.sh, &rec, dir_before, &re);
    810805
    811806                /* Copy the text of the row to the buffer. */
    812                 sheet_copy_out(doc.sh, &rb, &re, row_buf, ROW_BUF_SIZE, &dep);
     807                sheet_copy_out(&doc.sh, &rb, &re, row_buf, ROW_BUF_SIZE, &dep);
    813808
    814809                /* Display text from the buffer. */
     
    879874        spt_t caret_pt;
    880875        coord_t coord;
    881         int last_row;
    882876
    883877        tag_get_pt(&pane.caret_pos, &caret_pt);
    884878        spt_get_coord(&caret_pt, &coord);
    885879
    886         sheet_get_num_rows(doc.sh, &last_row);
    887 
    888880        const char *fname = (doc.file_name != NULL) ? doc.file_name : "<unnamed>";
    889881
    890882        console_set_pos(con, 0, scr_rows - 1);
    891883        console_set_style(con, STYLE_INVERTED);
    892         int n = printf(" %d, %d (%d): File '%s'. Ctrl-Q Quit  Ctrl-S Save  "
    893             "Ctrl-E Save As", coord.row, coord.column, last_row, fname);
     884        int n = printf(" %d, %d: File '%s'. Ctrl-Q Quit  Ctrl-S Save  "
     885            "Ctrl-E Save As", coord.row, coord.column, fname);
    894886       
    895887        int pos = scr_columns - 1 - n;
     
    927919        cbuf[offs] = '\0';
    928920
    929         (void) sheet_insert(doc.sh, &pt, dir_before, cbuf);
     921        (void) sheet_insert(&doc.sh, &pt, dir_before, cbuf);
    930922
    931923        pane.rflags |= REDRAW_ROW;
     
    944936
    945937        coord.column -= 1;
    946         sheet_get_cell_pt(doc.sh, &coord, dir_before, &sp);
    947 
    948         (void) sheet_delete(doc.sh, &sp, &ep);
     938        sheet_get_cell_pt(&doc.sh, &coord, dir_before, &sp);
     939
     940        (void) sheet_delete(&doc.sh, &sp, &ep);
    949941
    950942        pane.rflags |= REDRAW_ROW;
     
    962954        spt_get_coord(&sp, &sc);
    963955
    964         sheet_get_cell_pt(doc.sh, &sc, dir_after, &ep);
     956        sheet_get_cell_pt(&doc.sh, &sc, dir_after, &ep);
    965957        spt_get_coord(&ep, &ec);
    966958
    967         (void) sheet_delete(doc.sh, &sp, &ep);
     959        (void) sheet_delete(&doc.sh, &sp, &ep);
    968960
    969961        pane.rflags |= REDRAW_ROW;
     
    10371029                else {
    10381030                        coord.row--;
    1039                         sheet_get_row_width(doc.sh, coord.row, &coord.column);
     1031                        sheet_get_row_width(&doc.sh, coord.row, &coord.column);
    10401032                }
    10411033        }
    10421034        if (drow > 0) {
    1043                 sheet_get_num_rows(doc.sh, &num_rows);
     1035                sheet_get_num_rows(&doc.sh, &num_rows);
    10441036                if (coord.row > num_rows) coord.row = num_rows;
    10451037        }
     
    10541046         * coordinates. The character can be wider than one cell (e.g. tab).
    10551047         */
    1056         sheet_get_cell_pt(doc.sh, &coord, align_dir, &pt);
    1057         sheet_remove_tag(doc.sh, &pane.caret_pos);
    1058         sheet_place_tag(doc.sh, &pt, &pane.caret_pos);
     1048        sheet_get_cell_pt(&doc.sh, &coord, align_dir, &pt);
     1049        sheet_remove_tag(&doc.sh, &pane.caret_pos);
     1050        sheet_place_tag(&doc.sh, &pt, &pane.caret_pos);
    10591051
    10601052        /* For non-vertical movement set the new value for @c ideal_column. */
     
    10761068                tag_get_pt(&pane.caret_pos, &pt);
    10771069
    1078                 sheet_remove_tag(doc.sh, &pane.sel_start);
    1079                 sheet_place_tag(doc.sh, &pt, &pane.sel_start);
     1070                sheet_remove_tag(&doc.sh, &pane.sel_start);
     1071                sheet_place_tag(&doc.sh, &pt, &pane.sel_start);
    10801072        } while (!pt_is_word_beginning(&pt));
    10811073
     
    10921084                tag_get_pt(&pane.caret_pos, &pt);
    10931085
    1094                 sheet_remove_tag(doc.sh, &pane.sel_start);
    1095                 sheet_place_tag(doc.sh, &pt, &pane.sel_start);
     1086                sheet_remove_tag(&doc.sh, &pane.sel_start);
     1087                sheet_place_tag(&doc.sh, &pt, &pane.sel_start);
    10961088        } while (!pt_is_word_beginning(&pt));
    10971089
     
    11711163
    11721164        if (rel < 0)
    1173                 sheet_delete(doc.sh, &pa, &pb);
     1165                sheet_delete(&doc.sh, &pa, &pb);
    11741166        else
    1175                 sheet_delete(doc.sh, &pb, &pa);
     1167                sheet_delete(&doc.sh, &pb, &pa);
    11761168
    11771169        if (ca.row == cb.row)
     
    11951187static void selection_sel_range(spt_t pa, spt_t pb)
    11961188{
    1197         sheet_remove_tag(doc.sh, &pane.sel_start);
    1198         sheet_place_tag(doc.sh, &pa, &pane.sel_start);
    1199         sheet_remove_tag(doc.sh, &pane.caret_pos);
    1200         sheet_place_tag(doc.sh, &pb, &pane.caret_pos);
     1189        sheet_remove_tag(&doc.sh, &pane.sel_start);
     1190        sheet_place_tag(&doc.sh, &pa, &pane.sel_start);
     1191        sheet_remove_tag(&doc.sh, &pane.caret_pos);
     1192        sheet_place_tag(&doc.sh, &pb, &pane.caret_pos);
    12011193
    12021194        pane.rflags |= REDRAW_TEXT;
     
    12811273
    12821274        coord.row = coord.column = 1;
    1283         sheet_get_cell_pt(doc.sh, &coord, dir_before, pt);
     1275        sheet_get_cell_pt(&doc.sh, &coord, dir_before, pt);
    12841276}
    12851277
     
    12901282        int num_rows;
    12911283
    1292         sheet_get_num_rows(doc.sh, &num_rows);
     1284        sheet_get_num_rows(&doc.sh, &num_rows);
    12931285        coord.row = num_rows + 1;
    12941286        coord.column = 1;
    12951287
    1296         sheet_get_cell_pt(doc.sh, &coord, dir_after, pt);
     1288        sheet_get_cell_pt(&doc.sh, &coord, dir_after, pt);
    12971289}
    12981290
     
    13051297        coord.column = 1;
    13061298
    1307         sheet_get_cell_pt(doc.sh, &coord, dir_before, spt);
     1299        sheet_get_cell_pt(&doc.sh, &coord, dir_before, spt);
    13081300}
    13091301
     
    13151307
    13161308        spt_get_coord(cpt, &coord);
    1317         sheet_get_row_width(doc.sh, coord.row, &row_width);
     1309        sheet_get_row_width(&doc.sh, coord.row, &row_width);
    13181310        coord.column = row_width - 1;
    13191311
    1320         sheet_get_cell_pt(doc.sh, &coord, dir_after, ept);
     1312        sheet_get_cell_pt(&doc.sh, &coord, dir_after, ept);
    13211313}
    13221314
     
    13441336
    13451337        coord.column -= 1;
    1346         sheet_get_cell_pt(doc.sh, &coord, dir_before, &lp);
     1338        sheet_get_cell_pt(&doc.sh, &coord, dir_before, &lp);
    13471339
    13481340        return pt_is_delimiter(&lp)
     
    13661358
    13671359        coord.column += 1;
    1368         sheet_get_cell_pt(doc.sh, &coord, dir_after, &rp);
     1360        sheet_get_cell_pt(&doc.sh, &coord, dir_after, &rp);
    13691361
    13701362        ch = range_get_str(pt, &rp);
     
    13921384
    13931385        coord.column += 1;
    1394         sheet_get_cell_pt(doc.sh, &coord, dir_after, &rp);
     1386        sheet_get_cell_pt(&doc.sh, &coord, dir_after, &rp);
    13951387
    13961388        ch = range_get_str(pt, &rp);
  • uspace/app/edit/sheet.c

    rdc5aa568 r80d8885  
    5757
    5858#include "sheet.h"
    59 #include "sheet_impl.h"
    6059
    6160enum {
     
    6766
    6867/** Initialize an empty sheet. */
    69 int sheet_create(sheet_t **rsh)
    70 {
    71         sheet_t *sh;
    72 
    73         sh = calloc(1, sizeof(sheet_t));
    74         if (sh == NULL)
    75                 return ENOMEM;
    76 
     68int sheet_init(sheet_t *sh)
     69{
    7770        sh->dbuf_size = INITIAL_SIZE;
    7871        sh->text_size = 0;
     
    8477        list_initialize(&sh->tags);
    8578
    86         *rsh = sh;
    8779        return EOK;
    8880}
  • uspace/app/edit/sheet.h

    rdc5aa568 r80d8885  
    5050
    5151/** Sheet */
    52 struct sheet;
    53 typedef struct sheet sheet_t;
     52typedef struct {
     53        /* Note: This structure is opaque for the user. */
     54
     55        size_t text_size;
     56        size_t dbuf_size;
     57        char *data;
     58
     59        list_t tags;
     60} sheet_t;
    5461
    5562/** Character cell coordinates
     
    9097} tag_t;
    9198
    92 extern int sheet_create(sheet_t **);
     99extern int sheet_init(sheet_t *);
    93100extern int sheet_insert(sheet_t *, spt_t *, enum dir_spec, char *);
    94101extern int sheet_delete(sheet_t *, spt_t *, spt_t *);
  • uspace/lib/c/generic/str.c

    rdc5aa568 r80d8885  
    397397       
    398398        return len;
    399 }
    400 
    401 /** Get character display width on a character cell display.
    402  *
    403  * @param ch    Character
    404  * @return      Width of character in cells.
    405  */
    406 size_t chr_width(wchar_t ch)
    407 {
    408         return 1;
    409 }
    410 
    411 /** Get string display width on a character cell display.
    412  *
    413  * @param str   String
    414  * @return      Width of string in cells.
    415  */
    416 size_t str_width(const char *str)
    417 {
    418         size_t width = 0;
    419         size_t offset = 0;
    420         wchar_t ch;
    421        
    422         while ((ch = str_decode(str, &offset, STR_NO_LIMIT)) != 0)
    423                 width += chr_width(ch);
    424        
    425         return width;
    426399}
    427400
  • uspace/lib/c/include/str.h

    rdc5aa568 r80d8885  
    7373extern size_t wstr_nlength(const wchar_t *str, size_t size);
    7474
    75 extern size_t chr_width(wchar_t ch);
    76 extern size_t str_width(const char *str);
    77 
    7875extern bool ascii_check(wchar_t ch);
    7976extern bool chr_check(wchar_t ch);
  • uspace/lib/clui/tinput.c

    rdc5aa568 r80d8885  
    595595{
    596596        unsigned int i;
    597         /* Determine the maximum width of the completion in chars */
    598         size_t max_width = 0;
     597        /* Determine the maximum length of the completion in chars */
     598        size_t max_length = 0;
    599599        for (i = 0; i < cnum; i++)
    600                 max_width = max(max_width, str_width(compl[i]));
    601        
    602         unsigned int cols = max(1, (ti->con_cols + 1) / (max_width + 1));
     600                max_length = max(max_length, str_length(compl[i]));
     601       
     602        unsigned int cols = max(1, (ti->con_cols + 1) / (max_length + 1));
    603603        unsigned int padding = 0;
    604         if ((cols * max_width) + (cols - 1) < ti->con_cols) {
    605                 padding = ti->con_cols - (cols * max_width) - (cols - 1);
    606         }
    607         unsigned int col_width = max_width + padding / cols;
     604        if ((cols * max_length) + (cols - 1) < ti->con_cols) {
     605                padding = ti->con_cols - (cols * max_length) - (cols - 1);
     606        }
     607        unsigned int col_width = max_length + padding / cols;
    608608        unsigned int rows = cnum / cols + ((cnum % cols) != 0);
    609609       
     
    611611       
    612612        for (row = 0; row < rows; row++) {
    613                 unsigned int display_col = 0;
     613                bool wlc = false;
    614614                for (col = 0; col < cols; col++) {
    615615                        size_t compl_idx = col * rows + row;
    616616                        if (compl_idx >= cnum)
    617617                                break;
    618                         if (col) {
     618                        if (col)
    619619                                printf(" ");
    620                                 display_col++;
     620                        printf("%s", compl[compl_idx]);
     621                        size_t compl_len = str_length(compl[compl_idx]);
     622                        if (col == cols -1) {
     623                                wlc = (compl_len == max_length);
    621624                        }
    622                         printf("%s", compl[compl_idx]);
    623                         size_t compl_width = str_width(compl[compl_idx]);
    624                         display_col += compl_width;
    625                         if (col < cols - 1) {
    626                                 for (i = compl_width; i < col_width; i++) {
     625                        else {
     626                                for (i = compl_len; i < col_width; i++) {
    627627                                        printf(" ");
    628                                         display_col++;
    629628                                }
    630629                        }
    631630                }
    632                 if ((display_col % ti->con_cols) > 0) printf("\n");
    633         }
    634         fflush(stdout);
     631                if (!wlc) printf("\n");
     632        }
    635633}
    636634
Note: See TracChangeset for help on using the changeset viewer.