00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00036 #ifndef SHEET_H__
00037 #define SHEET_H__
00038
00039 #include <adt/list.h>
00040 #include <sys/types.h>
00041 #include <bool.h>
00042
00044 enum dir_spec {
00046 dir_before,
00048 dir_after
00049 };
00050
00052 typedef struct {
00053
00054
00055 size_t text_size;
00056 size_t dbuf_size;
00057 char *data;
00058
00059 link_t tags_head;
00060 } sheet_t;
00061
00066 typedef struct {
00067 int row;
00068 int column;
00069 } coord_t;
00070
00078 typedef struct {
00079
00080 sheet_t *sh;
00081 size_t b_off;
00082 } spt_t;
00083
00090 typedef struct {
00091
00092
00094 link_t link;
00095 sheet_t *sh;
00096 size_t b_off;
00097 } tag_t;
00098
00099 extern int sheet_init(sheet_t *);
00100 extern int sheet_insert(sheet_t *, spt_t *, enum dir_spec, char *);
00101 extern int sheet_delete(sheet_t *, spt_t *, spt_t *);
00102 extern void sheet_copy_out(sheet_t *, spt_t const *, spt_t const *, char *,
00103 size_t, spt_t *);
00104 extern void sheet_get_cell_pt(sheet_t *, coord_t const *, enum dir_spec,
00105 spt_t *);
00106 extern void sheet_get_row_width(sheet_t *, int, int *);
00107 extern void sheet_get_num_rows(sheet_t *, int *);
00108 extern void spt_get_coord(spt_t const *, coord_t *);
00109 extern bool spt_equal(spt_t const *, spt_t const *);
00110
00111 extern void sheet_place_tag(sheet_t *, spt_t const *, tag_t *);
00112 extern void sheet_remove_tag(sheet_t *, tag_t *);
00113 extern void tag_get_pt(tag_t const *, spt_t *);
00114
00115 #endif
00116