Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 69cf3a4 in mainline


Ignore:
Timestamp:
2012-08-16T10:26:02Z (9 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master
Children:
be2a38ad
Parents:
c8444d8
Message:

Make sheet_t opaque.

Location:
uspace/app/edit
Files:
1 added
3 edited

Legend:

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

    rc8444d8 r69cf3a4  
    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;
    177178
    178179        spt_t pt;
     
    189190
    190191        /* Start with an empty sheet. */
    191         sheet_init(&doc.sh);
     192        rc = sheet_create(&doc.sh);
     193        if (rc != EOK) {
     194                printf("Out of memory.\n");
     195                return -1;
     196        }
    192197
    193198        /* Place caret at the beginning of file. */
    194199        coord.row = coord.column = 1;
    195         sheet_get_cell_pt(&doc.sh, &coord, dir_before, &pt);
    196         sheet_place_tag(&doc.sh, &pt, &pane.caret_pos);
     200        sheet_get_cell_pt(doc.sh, &coord, dir_before, &pt);
     201        sheet_place_tag(doc.sh, &pt, &pane.caret_pos);
    197202        pane.ideal_column = coord.column;
    198203
     
    216221        /* Place selection start tag. */
    217222        tag_get_pt(&pane.caret_pos, &pt);
    218         sheet_place_tag(&doc.sh, &pt, &pane.sel_start);
     223        sheet_place_tag(doc.sh, &pt, &pane.sel_start);
    219224
    220225        /* Initial display */
     
    447452        if (select == false) {
    448453                /* Move sel_start to the same point as caret. */
    449                 sheet_remove_tag(&doc.sh, &pane.sel_start);
     454                sheet_remove_tag(doc.sh, &pane.sel_start);
    450455                tag_get_pt(&pane.caret_pos, &pt);
    451                 sheet_place_tag(&doc.sh, &pt, &pane.sel_start);
     456                sheet_place_tag(doc.sh, &pt, &pane.sel_start);
    452457        }
    453458
     
    670675
    671676        do {
    672                 sheet_copy_out(&doc.sh, &sp, epos, buf, BUF_SIZE, &bep);
     677                sheet_copy_out(doc.sh, &sp, epos, buf, BUF_SIZE, &bep);
    673678                bytes = str_size(buf);
    674679
     
    705710
    706711        while (true) {
    707                 sheet_copy_out(&doc.sh, &sp, epos, &buf[bpos], buf_size - bpos,
     712                sheet_copy_out(doc.sh, &sp, epos, &buf[bpos], buf_size - bpos,
    708713                    &bep);
    709714                bytes = str_size(&buf[bpos]);
     
    727732        int sh_rows, rows;
    728733
    729         sheet_get_num_rows(&doc.sh, &sh_rows);
     734        sheet_get_num_rows(doc.sh, &sh_rows);
    730735        rows = min(sh_rows - pane.sh_row + 1, pane.rows);
    731736
     
    797802                rbc.row = pane.sh_row + i;
    798803                rbc.column = pane.sh_column;
    799                 sheet_get_cell_pt(&doc.sh, &rbc, dir_before, &rb);
     804                sheet_get_cell_pt(doc.sh, &rbc, dir_before, &rb);
    800805
    801806                /* Ending point for row display */
    802807                rec.row = pane.sh_row + i;
    803808                rec.column = pane.sh_column + pane.columns;
    804                 sheet_get_cell_pt(&doc.sh, &rec, dir_before, &re);
     809                sheet_get_cell_pt(doc.sh, &rec, dir_before, &re);
    805810
    806811                /* Copy the text of the row to the buffer. */
    807                 sheet_copy_out(&doc.sh, &rb, &re, row_buf, ROW_BUF_SIZE, &dep);
     812                sheet_copy_out(doc.sh, &rb, &re, row_buf, ROW_BUF_SIZE, &dep);
    808813
    809814                /* Display text from the buffer. */
     
    874879        spt_t caret_pt;
    875880        coord_t coord;
     881        int last_row;
    876882
    877883        tag_get_pt(&pane.caret_pos, &caret_pt);
    878884        spt_get_coord(&caret_pt, &coord);
    879885
     886        sheet_get_num_rows(doc.sh, &last_row);
     887
    880888        const char *fname = (doc.file_name != NULL) ? doc.file_name : "<unnamed>";
    881889
    882890        console_set_pos(con, 0, scr_rows - 1);
    883891        console_set_style(con, STYLE_INVERTED);
    884         int n = printf(" %d, %d: File '%s'. Ctrl-Q Quit  Ctrl-S Save  "
    885             "Ctrl-E Save As", coord.row, coord.column, fname);
     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);
    886894       
    887895        int pos = scr_columns - 1 - n;
     
    919927        cbuf[offs] = '\0';
    920928
    921         (void) sheet_insert(&doc.sh, &pt, dir_before, cbuf);
     929        (void) sheet_insert(doc.sh, &pt, dir_before, cbuf);
    922930
    923931        pane.rflags |= REDRAW_ROW;
     
    936944
    937945        coord.column -= 1;
    938         sheet_get_cell_pt(&doc.sh, &coord, dir_before, &sp);
    939 
    940         (void) sheet_delete(&doc.sh, &sp, &ep);
     946        sheet_get_cell_pt(doc.sh, &coord, dir_before, &sp);
     947
     948        (void) sheet_delete(doc.sh, &sp, &ep);
    941949
    942950        pane.rflags |= REDRAW_ROW;
     
    954962        spt_get_coord(&sp, &sc);
    955963
    956         sheet_get_cell_pt(&doc.sh, &sc, dir_after, &ep);
     964        sheet_get_cell_pt(doc.sh, &sc, dir_after, &ep);
    957965        spt_get_coord(&ep, &ec);
    958966
    959         (void) sheet_delete(&doc.sh, &sp, &ep);
     967        (void) sheet_delete(doc.sh, &sp, &ep);
    960968
    961969        pane.rflags |= REDRAW_ROW;
     
    10291037                else {
    10301038                        coord.row--;
    1031                         sheet_get_row_width(&doc.sh, coord.row, &coord.column);
     1039                        sheet_get_row_width(doc.sh, coord.row, &coord.column);
    10321040                }
    10331041        }
    10341042        if (drow > 0) {
    1035                 sheet_get_num_rows(&doc.sh, &num_rows);
     1043                sheet_get_num_rows(doc.sh, &num_rows);
    10361044                if (coord.row > num_rows) coord.row = num_rows;
    10371045        }
     
    10461054         * coordinates. The character can be wider than one cell (e.g. tab).
    10471055         */
    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);
     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);
    10511059
    10521060        /* For non-vertical movement set the new value for @c ideal_column. */
     
    10681076                tag_get_pt(&pane.caret_pos, &pt);
    10691077
    1070                 sheet_remove_tag(&doc.sh, &pane.sel_start);
    1071                 sheet_place_tag(&doc.sh, &pt, &pane.sel_start);
     1078                sheet_remove_tag(doc.sh, &pane.sel_start);
     1079                sheet_place_tag(doc.sh, &pt, &pane.sel_start);
    10721080        } while (!pt_is_word_beginning(&pt));
    10731081
     
    10841092                tag_get_pt(&pane.caret_pos, &pt);
    10851093
    1086                 sheet_remove_tag(&doc.sh, &pane.sel_start);
    1087                 sheet_place_tag(&doc.sh, &pt, &pane.sel_start);
     1094                sheet_remove_tag(doc.sh, &pane.sel_start);
     1095                sheet_place_tag(doc.sh, &pt, &pane.sel_start);
    10881096        } while (!pt_is_word_beginning(&pt));
    10891097
     
    11631171
    11641172        if (rel < 0)
    1165                 sheet_delete(&doc.sh, &pa, &pb);
     1173                sheet_delete(doc.sh, &pa, &pb);
    11661174        else
    1167                 sheet_delete(&doc.sh, &pb, &pa);
     1175                sheet_delete(doc.sh, &pb, &pa);
    11681176
    11691177        if (ca.row == cb.row)
     
    11871195static void selection_sel_range(spt_t pa, spt_t pb)
    11881196{
    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);
     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);
    11931201
    11941202        pane.rflags |= REDRAW_TEXT;
     
    12731281
    12741282        coord.row = coord.column = 1;
    1275         sheet_get_cell_pt(&doc.sh, &coord, dir_before, pt);
     1283        sheet_get_cell_pt(doc.sh, &coord, dir_before, pt);
    12761284}
    12771285
     
    12821290        int num_rows;
    12831291
    1284         sheet_get_num_rows(&doc.sh, &num_rows);
     1292        sheet_get_num_rows(doc.sh, &num_rows);
    12851293        coord.row = num_rows + 1;
    12861294        coord.column = 1;
    12871295
    1288         sheet_get_cell_pt(&doc.sh, &coord, dir_after, pt);
     1296        sheet_get_cell_pt(doc.sh, &coord, dir_after, pt);
    12891297}
    12901298
     
    12971305        coord.column = 1;
    12981306
    1299         sheet_get_cell_pt(&doc.sh, &coord, dir_before, spt);
     1307        sheet_get_cell_pt(doc.sh, &coord, dir_before, spt);
    13001308}
    13011309
     
    13071315
    13081316        spt_get_coord(cpt, &coord);
    1309         sheet_get_row_width(&doc.sh, coord.row, &row_width);
     1317        sheet_get_row_width(doc.sh, coord.row, &row_width);
    13101318        coord.column = row_width - 1;
    13111319
    1312         sheet_get_cell_pt(&doc.sh, &coord, dir_after, ept);
     1320        sheet_get_cell_pt(doc.sh, &coord, dir_after, ept);
    13131321}
    13141322
     
    13361344
    13371345        coord.column -= 1;
    1338         sheet_get_cell_pt(&doc.sh, &coord, dir_before, &lp);
     1346        sheet_get_cell_pt(doc.sh, &coord, dir_before, &lp);
    13391347
    13401348        return pt_is_delimiter(&lp)
     
    13581366
    13591367        coord.column += 1;
    1360         sheet_get_cell_pt(&doc.sh, &coord, dir_after, &rp);
     1368        sheet_get_cell_pt(doc.sh, &coord, dir_after, &rp);
    13611369
    13621370        ch = range_get_str(pt, &rp);
     
    13841392
    13851393        coord.column += 1;
    1386         sheet_get_cell_pt(&doc.sh, &coord, dir_after, &rp);
     1394        sheet_get_cell_pt(doc.sh, &coord, dir_after, &rp);
    13871395
    13881396        ch = range_get_str(pt, &rp);
  • uspace/app/edit/sheet.c

    rc8444d8 r69cf3a4  
    5757
    5858#include "sheet.h"
     59#include "sheet_impl.h"
    5960
    6061enum {
     
    6667
    6768/** Initialize an empty sheet. */
    68 int sheet_init(sheet_t *sh)
    69 {
     69int 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
    7077        sh->dbuf_size = INITIAL_SIZE;
    7178        sh->text_size = 0;
     
    7784        list_initialize(&sh->tags);
    7885
     86        *rsh = sh;
    7987        return EOK;
    8088}
  • uspace/app/edit/sheet.h

    rc8444d8 r69cf3a4  
    5050
    5151/** Sheet */
    52 typedef 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;
     52struct sheet;
     53typedef struct sheet sheet_t;
    6154
    6255/** Character cell coordinates
     
    9790} tag_t;
    9891
    99 extern int sheet_init(sheet_t *);
     92extern int sheet_create(sheet_t **);
    10093extern int sheet_insert(sheet_t *, spt_t *, enum dir_spec, char *);
    10194extern int sheet_delete(sheet_t *, spt_t *, spt_t *);
Note: See TracChangeset for help on using the changeset viewer.