Subversion Repositories Kolibri OS

Rev

Rev 7577 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7577 Rev 7579
1
#ifndef KOLIBRI_EDITOR_H
1
#ifndef KOLIBRI_EDITOR_H
2
#define KOLIBRI_EDITOR_H
2
#define KOLIBRI_EDITOR_H
3
 
3
 
4
// (êîëè÷åñòâî ñèìâîëîâ â íîâîì äîêóìåíòå + 2)
4
// (êîëè÷åñòâî ñèìâîëîâ â íîâîì äîêóìåíòå + 2)
5
#define TE_MAXCHARS 100002
5
#define TE_MAXCHARS 100002
6
// ìàêñèìàëüíûé ðàçìåð ôàéëà ñèíòàêñèñà
6
// ìàêñèìàëüíûé ðàçìåð ôàéëà ñèíòàêñèñà
7
#define TE_MAX_SYNTAX_FILESIZE 410000
7
#define TE_MAX_SYNTAX_FILESIZE 410000
8
// buffer for copy|paste
8
// buffer for copy|paste
9
#define TE_BUF_SIZE  4096
9
#define TE_BUF_SIZE  4096
10
typedef void (*editor_callback)(void);
10
typedef void (*editor_callback)(void);
11
 
11
 
12
struct __attribute__ ((__packed__)) editor_symbol {
12
struct __attribute__ ((__packed__)) editor_symbol {
13
	uint8_t     c;      //  +0 ñèìâîë
13
	uint8_t     c;      //  +0 ñèìâîë
14
	uint8_t     col;    //  +1 öâåò
14
	uint8_t     col;    //  +1 öâåò
15
	uint32_t    prev;   //  +2 èíäåêñ ïðåäûäóùåãî
15
	uint32_t    prev;   //  +2 èíäåêñ ïðåäûäóùåãî
16
	uint32_t    next;   //  +6 óêàçàòåëè (èíäåêñ ñëåäóþùåãî)
16
	uint32_t    next;   //  +6 óêàçàòåëè (èíäåêñ ñëåäóþùåãî)
17
	uint32_t    tc;     //  +10 âðåì. ñîçäàíèÿ
17
	uint32_t    tc;     //  +10 âðåì. ñîçäàíèÿ
18
	uint32_t    td;     // +14 âðåì. óäàëåíèÿ
18
	uint32_t    td;     // +14 âðåì. óäàëåíèÿ
19
};
19
};
20
 
20
 
21
/// ñòðóêòóðà òåêñòîâîãî ðåäàêòîðà
21
/// ñòðóêòóðà òåêñòîâîãî ðåäàêòîðà
22
typedef struct __attribute__ ((__packed__)) {
22
typedef struct __attribute__ ((__packed__)) {
23
    uint32_t    x_pos;  //0
23
    uint32_t    x_pos;  //0
24
    uint32_t    y_pos;  //50
24
    uint32_t    y_pos;  //50
25
    uint32_t    width;  //440
25
    uint32_t    width;  //440
26
    uint32_t    hight;  //150
26
    uint32_t    hight;  //150
27
    uint32_t    w_pane;      //30 øèðèíà ïàíåëè â îêíå, width of left pane with line numbers
27
    uint32_t    w_pane;      //30 øèðèíà ïàíåëè â îêíå, width of left pane with line numbers
28
    uint32_t    h_pane;      //25 âûñîòà ïàíåëè â îêíå, hight of top pane with Rows, Cols Undo info
28
    uint32_t    h_pane;      //25 âûñîòà ïàíåëè â îêíå, hight of top pane with Rows, Cols Undo info
29
    uint32_t    width_sym;  //9 øèðèíà ñèìâîëà (çíàêîìåñòà) â îêíå
29
    uint32_t    width_sym;  //9 øèðèíà ñèìâîëà (çíàêîìåñòà) â îêíå
30
    uint32_t    hight_sym;  //16 âûñîòà ñèìâîëà (çíàêîìåñòà) â îêíå
30
    uint32_t    hight_sym;  //16 âûñîòà ñèìâîëà (çíàêîìåñòà) â îêíå
31
	uint8_t     drag_m;     // âûäåëåíèå îò ìûøè
31
	uint8_t     drag_m;     // âûäåëåíèå îò ìûøè
32
	uint8_t     drag_k;     // âûäåëåíèå îò êëàâèàòóðû
32
	uint8_t     drag_k;     // âûäåëåíèå îò êëàâèàòóðû
33
	uint32_t    sel_x0;     // ñòðóêòóðà âûäåëåíèÿ
33
	uint32_t    sel_x0;     // ñòðóêòóðà âûäåëåíèÿ
34
	uint32_t    sel_y0;
34
	uint32_t    sel_y0;
35
	uint32_t    sel_x1;
35
	uint32_t    sel_x1;
36
	uint32_t    sel_y1;
36
	uint32_t    sel_y1;
37
	uint32_t    seln_x0;    //äîïîëíèòåëüíàÿ ñòðóêòóðà âûäåëåíèÿ
37
	uint32_t    seln_x0;    //äîïîëíèòåëüíàÿ ñòðóêòóðà âûäåëåíèÿ
38
	uint32_t    seln_y0;
38
	uint32_t    seln_y0;
39
	uint32_t    seln_x1;
39
	uint32_t    seln_x1;
40
	uint32_t    seln_y1;
40
	uint32_t    seln_y1;
41
	struct editor_symbol   *tex;    // text memory pointer
41
	struct editor_symbol   *tex;    // text memory pointer
42
	struct editor_symbol   *tex_1;  // óêàçàòåëü çà ïîñëåäíèì ñóùåñòâóþùèì ñèìâîëîì (êîíåö ôàéëà)
42
	struct editor_symbol   *tex_1;  // óêàçàòåëü çà ïîñëåäíèì ñóùåñòâóþùèì ñèìâîëîì (êîíåö ôàéëà)
43
	struct editor_symbol   *tex_end;// text end memory pointer (óêàçàòåëü çà êîíöîì âûäåëåííîãî áóôåðà äëÿ òåêñòà)
43
	struct editor_symbol   *tex_end;// text end memory pointer (óêàçàòåëü çà êîíöîì âûäåëåííîãî áóôåðà äëÿ òåêñòà)
44
	uint32_t    cur_x;      //êîîðäèíàòà x êóðñîðà
44
	uint32_t    cur_x;      //êîîðäèíàòà x êóðñîðà
45
	uint32_t    cur_y;      //êîîðäèíàòà y êóðñîðà
45
	uint32_t    cur_y;      //êîîðäèíàòà y êóðñîðà
46
	uint32_t    max_chars;  // TE_MAXCHARS ;+86 ìàêñèìàëüíîå ÷èñëî ñèìâîëîâ â îäíîì äîêóìåíòå
46
	uint32_t    max_chars;  // TE_MAXCHARS ;+86 ìàêñèìàëüíîå ÷èñëî ñèìâîëîâ â îäíîì äîêóìåíòå
47
	uint32_t    count_colors_text; // 1 ;+90 êîëè÷åñòâî öâåòîâ òåêñòà
47
	uint32_t    count_colors_text; // 1 ;+90 êîëè÷åñòâî öâåòîâ òåêñòà
48
	uint32_t    count_key_words;   //+94 êîëëè÷åñòâî êëþ÷åâûõ ñëîâ
48
	uint32_t    count_key_words;   //+94 êîëëè÷åñòâî êëþ÷åâûõ ñëîâ
49
	color_t     color_cursor;   // 0x808080 ;+98 öâåò êóðñîðà
49
	color_t     color_cursor;   // 0x808080 ;+98 öâåò êóðñîðà
50
	color_t     color_wnd_capt; // 0x80 ;+102 öâåò ïîëåé âîêðóã îêíà
50
	color_t     color_wnd_capt; // 0x80 ;+102 öâåò ïîëåé âîêðóã îêíà
51
	color_t     color_wnd_work; // 0x0 ;+106 öâåò ôîíà îêíà
51
	color_t     color_wnd_work; // 0x0 ;+106 öâåò ôîíà îêíà
52
	color_t     color_wnd_bord; //0xd0d0d0 ;+110 öâåò òåêñòà íà ïîëÿõ
52
	color_t     color_wnd_bord; //0xd0d0d0 ;+110 öâåò òåêñòà íà ïîëÿõ
53
	color_t     color_select;   // 0x208080 ;+114 öâåò âûäåëåíèÿ
53
	color_t     color_select;   // 0x208080 ;+114 öâåò âûäåëåíèÿ
54
	color_t     color_cur_text; // 0xff0000 ;+118 öâåò ñèìâîëà ïîä êóðñîðîì
54
	color_t     color_cur_text; // 0xff0000 ;+118 öâåò ñèìâîëà ïîä êóðñîðîì
55
	color_t     color_wnd_text; // 0xffff00 ;+122 öâåò òåêñòà â îêíå
55
	color_t     color_wnd_text; // 0xffff00 ;+122 öâåò òåêñòà â îêíå
56
	char       *syntax_file;    // óêàçàòåëü íà íà÷àëî ôàéëà ñèíòàêñèñà
56
	char       *syntax_file;    // óêàçàòåëü íà íà÷àëî ôàéëà ñèíòàêñèñà
57
	uint32_t    syntax_file_size;   // TE_MAX_SYNTAX_FILESIZE ;+130 ìàêñèìàëüíûé ðàçìåð ôàéëà ñèíòàêñèñà
57
	uint32_t    syntax_file_size;   // TE_MAX_SYNTAX_FILESIZE ;+130 ìàêñèìàëüíûé ðàçìåð ôàéëà ñèíòàêñèñà
58
	void       *text_colors;    // óêàçàòåëü íà ìàññèâ öâåòîâ òåêñòà
58
	void       *text_colors;    // óêàçàòåëü íà ìàññèâ öâåòîâ òåêñòà
59
	char       *help_text_f1;   // óêàçàòåëü íà òåêñò ñïðàâêè (ïî íàæàòèè F1)
59
	char       *help_text_f1;   // óêàçàòåëü íà òåêñò ñïðàâêè (ïî íàæàòèè F1)
60
	int         help_id;	    // -1 ;+142 èäåíòèôèêàòîð äëÿ ñïðàâêè
60
	int         help_id;	    // -1 ;+142 èäåíòèôèêàòîð äëÿ ñïðàâêè
61
	void       *key_words_data; // óêàçàòåëü íà ñòðóêòóðû êëþ÷åâûõ ñëîâ TexColViv
61
	void       *key_words_data; // óêàçàòåëü íà ñòðóêòóðû êëþ÷åâûõ ñëîâ TexColViv
62
	uint32_t    tim_ch;     // êîëè÷åñòâî èçìåíåíèé â ôàéëå
62
	uint32_t    tim_ch;     // êîëè÷åñòâî èçìåíåíèé â ôàéëå
63
	uint32_t    tim_undo;   // êîëè÷åñòâî îòìåíåííûõ äåéñòâèé
63
	uint32_t    tim_undo;   // êîëè÷åñòâî îòìåíåííûõ äåéñòâèé
64
	uint32_t    tim_ls;     // âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
64
	uint32_t    tim_ls;     // âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
65
	uint32_t    tim_co;     // âðåìÿ ïîñëåäíåé öâåòîâîé ðàçìåòêè
65
	uint32_t    tim_co;     // âðåìÿ ïîñëåäíåé öâåòîâîé ðàçìåòêè
66
	void       *el_focus;   // óêàçàòåëü íà ïåðåìåííóþ ýëåìåíòà â ôîêóñå pointer to pointer**
66
	void       *el_focus;   // óêàçàòåëü íà ïåðåìåííóþ ýëåìåíòà â ôîêóñå pointer to pointer**
67
	uint8_t     err_save;   // îøèáêà ñîõðàíåíèÿ ôàéëà
67
	uint8_t     err_save;   // îøèáêà ñîõðàíåíèÿ ôàéëà
68
	uint8_t     panel_id;   // íîìåð îòêðûòîé ïàíåëè
68
	uint8_t     panel_id;   // íîìåð îòêðûòîé ïàíåëè
69
	uint8_t     key_new;    // ñèìâîë, êîòîðûé áóäåò äîáàâëÿòñÿ ñ êëàâèàòóðû
69
	uint8_t     key_new;    // ñèìâîë, êîòîðûé áóäåò äîáàâëÿòñÿ ñ êëàâèàòóðû
70
	uint8_t     symbol_new_line; // ascii 20 ñèìâîë çàâåðøåíèÿ ñòðîêè
70
	uint8_t     symbol_new_line; // ascii 20 ñèìâîë çàâåðøåíèÿ ñòðîêè
71
	scrollbar  *scr_w;      // âåðòèêàëüíûé ñêðîëëèíã != NULL
71
	scrollbar  *scr_w;      // âåðòèêàëüíûé ñêðîëëèíã != NULL
72
	scrollbar  *scr_h;      // ãîðèçîíòàëüíûé ñêðîëëèíã != NULL
72
	scrollbar  *scr_h;      // ãîðèçîíòàëüíûé ñêðîëëèíã != NULL
73
	char       *arr_key_pos;// óêàçàòåëü íà ìàññèâ ïîçèöèé êëþ÷åâûõ ñëîâ
73
	char       *arr_key_pos;// óêàçàòåëü íà ìàññèâ ïîçèöèé êëþ÷åâûõ ñëîâ
74
	char       *buffer;     // óêàçàòåëü íà áóôåð êîïèðîâàíèÿ/âñòàâêè != NULL, also size
74
	char       *buffer;     // óêàçàòåëü íà áóôåð êîïèðîâàíèÿ/âñòàâêè != NULL, also size
75
	char       *buffer_find;// óêàçàòåëü íà áóôåð äëÿ ïîèñêà (sized 302)
75
	char       *buffer_find;// óêàçàòåëü íà áóôåð äëÿ ïîèñêà (sized 302)
76
	uint8_t     cur_ins;    // 1 ðåæèì ðàáîòû êóðñîðà (îáû÷íûé èëè çàìåíà)
76
	uint8_t     cur_ins;    // 1 ðåæèì ðàáîòû êóðñîðà (îáû÷íûé èëè çàìåíà)
77
	uint8_t     mode_color; // 1 ðåæèì âûäåëåíèÿ ñëîâ öâåòîì (0-âûêë. 1-âêë.)
77
	uint8_t     mode_color; // 1 ðåæèì âûäåëåíèÿ ñëîâ öâåòîì (0-âûêë. 1-âêë.)
78
	uint8_t     mode_invis; // 0 ðåæèì ïîêàçà íåïå÷àòàåìûõ ñèìâîëîâ
78
	uint8_t     mode_invis; // 0 ðåæèì ïîêàçà íåïå÷àòàåìûõ ñèìâîëîâ
79
	uint8_t     gp_opt;     // 0 îïöèè âîçâðàùàåìûå ôóíêöèåé ted_get_pos_by_cursor
79
	uint8_t     gp_opt;     // 0 îïöèè âîçâðàùàåìûå ôóíêöèåé ted_get_pos_by_cursor
80
	editor_callback fun_on_key_ctrl_o;  // óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ ïðè íàæàòèè Ctrl+O (îòêðûòèå ôàéëà), can be NULL
80
	editor_callback fun_on_key_ctrl_all;  // óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ ïðè íàæàòèè Ctrl+N,O,S,F,G,H, can be NULL
81
	editor_callback fun_on_key_ctrl_f;  // ... Ctrl+F (âûçîâà/ñêðûòèÿ ïàíåëè ïîèñêà)
81
	uint32_t    reserved_1;  // ...
82
	editor_callback fun_on_key_ctrl_n;  // ... Ctrl+N (ñîçäàíèå íîâîãî äîêóìåíòà)
82
	uint32_t    reserved_2;  // ...
83
	editor_callback fun_on_key_ctrl_s;  // ... Ctrl+S
83
	uint32_t    reserved_3;  // ...
84
	uint32_t    buffer_size;// BUF_SIZE ðàçìåð áóôåðà êîïèðîâàíèÿ/âñòàâêè
84
	uint32_t    buffer_size;// BUF_SIZE ðàçìåð áóôåðà êîïèðîâàíèÿ/âñòàâêè
85
	editor_callback fun_find_err;       // óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ åñëè ïîèñê çàêîí÷èëñÿ íåóäà÷íî
85
	editor_callback fun_find_err;       // óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ åñëè ïîèñê çàêîí÷èëñÿ íåóäà÷íî
86
	editor_callback fun_init_synt_err;  // unused óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ ïðè îøèáî÷íîì îòêðûòèè ôàéëà ñèíòàêñèñà
86
	editor_callback fun_init_synt_err;  // unused óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ ïðè îøèáî÷íîì îòêðûòèè ôàéëà ñèíòàêñèñà
87
	editor_callback fun_draw_panel_buttons; // óêàçàòåëü íà ôóíêöèþ ðèñîâàíèÿ ïàíåëè ñ êíîïêàìè
87
	editor_callback fun_draw_panel_buttons; // óêàçàòåëü íà ôóíêöèþ ðèñîâàíèÿ ïàíåëè ñ êíîïêàìè
88
	editor_callback fun_draw_panel_find;    // óêàçàòåëü íà ôóíêöèþ ðèñîâàíèÿ ïàíåëè ïîèñêà
88
	editor_callback fun_draw_panels;    // óêàçàòåëü íà ôóíêöèþ ðèñîâàíèÿ ïàíåëè ïîèñêà|çàìåíû|ïåðåõîäà|ñèíòàêñèñà
89
	editor_callback fun_draw_panel_syntax;  // óêàçàòåëü íà ôóíêöèþ ðèñîâàíèÿ ïàíåëè ñèíòàêñèñà
89
	uint32_t    reserved_4;  // ...
90
	editor_callback fun_save_err;   // óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ åñëè ñîõðàíåíèå ôàéëà çàêîí÷èëîñü íåóäà÷íî
90
	editor_callback fun_save_err;   // óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ åñëè ñîõðàíåíèå ôàéëà çàêîí÷èëîñü íåóäà÷íî
91
	uint32_t    increase_size;  //200 ÷èñëî ñèìâîëîâ íà êîòîðûå áóäåò óâå÷èâàòüñÿ ïàìÿòü ïðè íåõâàòêå
91
	uint32_t    increase_size;  //200 ÷èñëî ñèìâîëîâ íà êîòîðûå áóäåò óâå÷èâàòüñÿ ïàìÿòü ïðè íåõâàòêå
92
	void       *ptr_free_symb;  // èñïîëüçóåòñÿ âíóòðè ýëåìåíòà äëÿ óñêîðåíèÿ âñòàâêè òåêñòà
92
	void       *ptr_free_symb;  // èñïîëüçóåòñÿ âíóòðè ýëåìåíòà äëÿ óñêîðåíèÿ âñòàâêè òåêñòà
93
	uint32_t    font_size;       // ;+250 ìíîæèòåëü äëÿ ðàçìåðà øðèôòà // binary OR mask for ECX SysFn4
93
	uint32_t    font_size;       // ;+250 ìíîæèòåëü äëÿ ðàçìåðà øðèôòà // binary OR mask for ECX SysFn4
94
} editor;
94
} editor;
95
 
95
 
96
struct __attribute__ ((__packed__)) editor_color_item
96
struct __attribute__ ((__packed__)) editor_color_item
97
{
97
{
98
    char        word[40];   // ñëîâî äëÿ ïîäñâåòêè
98
    char        word[40];   // ñëîâî äëÿ ïîäñâåòêè
99
    uint32_t    f1_offset;  // ñìåùåíèå â òàáëèöå F1 ïîäñêàçîê
99
    uint32_t    f1_offset;  // ñìåùåíèå â òàáëèöå F1 ïîäñêàçîê
100
	uint8_t     flags;      // ôëàãè èñïîëüçóåìûå ïðè âûäåëåíèè
100
	uint8_t     flags;      // ôëàãè èñïîëüçóåìûå ïðè âûäåëåíèè
101
	uint8_t     endc;       // ñèìâîë êîíöà âûäåëåíèÿ (èñïîëüçóåòñÿ ïðè flags&4)
101
	uint8_t     endc;       // ñèìâîë êîíöà âûäåëåíèÿ (èñïîëüçóåòñÿ ïðè flags&4)
102
	uint8_t     escc;       // ýêðàíèðóþùèé ñèìâîë (èñïîëüçóåòñÿ ïðè flags&4)  ascii(34) ïðèìåðû ýêðàíèðîâàíèÿ \r \n \t
102
	uint8_t     escc;       // ýêðàíèðóþùèé ñèìâîë (èñïîëüçóåòñÿ ïðè flags&4)  ascii(34) ïðèìåðû ýêðàíèðîâàíèÿ \r \n \t
103
    uint8_t     color;      // öâåò ïî òàáëèöå öâåòîâ
103
    uint8_t     color;      // öâåò ïî òàáëèöå öâåòîâ
104
};
104
};
105
 
105
 
106
struct editor_syntax_file
106
struct editor_syntax_file
107
{
107
{
108
    uint32_t    count_colors_text;  // êîë-âî öâåòîâ òåêñòà dd (text-color_wnd_text)/4
108
    uint32_t    count_colors_text;  // êîë-âî öâåòîâ òåêñòà dd (text-color_wnd_text)/4
109
    uint32_t    count_key_words;    // êîë-âî êëþ÷åâûõ ñëîâ dd (f1-text)/48
109
    uint32_t    count_key_words;    // êîë-âî êëþ÷åâûõ ñëîâ dd (f1-text)/48
110
    color_t     color_cursor;       // dd 0xf1fcd0
110
    color_t     color_cursor;       // dd 0xf1fcd0
111
    color_t     color_wnd_capt;     // dd 0x080808
111
    color_t     color_wnd_capt;     // dd 0x080808
112
    color_t     color_wnd_work;     // dd 0x1C1C1C
112
    color_t     color_wnd_work;     // dd 0x1C1C1C
113
    color_t     color_wnd_bord;     // dd 0xc0c0c0
113
    color_t     color_wnd_bord;     // dd 0xc0c0c0
114
    color_t     color_select;       // dd 0x3E3D32
114
    color_t     color_select;       // dd 0x3E3D32
115
    color_t     color_cur_text;     // dd 0x808080
115
    color_t     color_cur_text;     // dd 0x808080
116
    color_t     color_wnd_text[];   // òàáëèöà öâåòîâ ðàçìåðîì count_colors_text
116
    color_t     color_wnd_text[];   // òàáëèöà öâåòîâ ðàçìåðîì count_colors_text
117
    // editor_color_item[];         // òàáëèöà êëþ÷åâûõ ïîäñâå÷åííûõ ñëîâ ðàçìåðîì count_key_words
117
    // editor_color_item[];         // òàáëèöà êëþ÷åâûõ ïîäñâå÷åííûõ ñëîâ ðàçìåðîì count_key_words
118
};
118
};
119
 
119
 
120
 
120
 
121
static struct editor_syntax_file default_syntax = {
121
static struct editor_syntax_file default_syntax = {
122
    10,     //count_colors_text
122
    10,     //count_colors_text
123
    1,      // count_key_words dd (f1-text)/48, minimum 1
123
    1,      // count_key_words dd (f1-text)/48, minimum 1
124
    0xf1fcd0, //color_cursor dd 0xf1fcd0
124
    0xf1fcd0, //color_cursor dd 0xf1fcd0
125
    0x080808, //color_wnd_capt dd 0x080808
125
    0x080808, //color_wnd_capt dd 0x080808
126
    0x1C1C1C, //color_wnd_work dd 0x1C1C1C
126
    0x1C1C1C, //color_wnd_work dd 0x1C1C1C
127
    0xc0c0c0, //color_wnd_bord dd 0xc0c0c0
127
    0xc0c0c0, //color_wnd_bord dd 0xc0c0c0
128
    0x3E3D32, //color_select dd 0x3E3D32
128
    0x3E3D32, //color_select dd 0x3E3D32
129
    0x808080, //color_cur_text dd 0x808080
129
    0x808080, //color_cur_text dd 0x808080
130
	{0xD0D0D0, 0xffff00, 0x00ff00, 0x00ffff, 0x808080, 0xff40ff, 0x4080ff, 0xff0000, 0x8080ff, 0x00ccff}
130
	{0xD0D0D0, 0xffff00, 0x00ff00, 0x00ffff, 0x808080, 0xff40ff, 0x4080ff, 0xff0000, 0x8080ff, 0x00ccff}
131
};
131
};
132
// next structure must follow syntax definition, at least has 1 element !!!
132
// next structure must follow syntax definition, at least has 1 element !!!
133
static struct editor_color_item  word1 = {
133
static struct editor_color_item  word1 = {
134
    "siemargl", 1, 0, 0, 1  // test word colored as 1st in table
134
    "siemargl", 1, 0, 0, 1  // test word colored as 1st in table
135
};
135
};
136
// next structure preferably follow syntax definition, at least has 1 element !!!
136
// next structure preferably follow syntax definition, at least has 1 element !!!
137
static char f1_table[] = {
137
static char f1_table[] = {
138
    "\0"
138
    "\0"
139
    "First\0"
139
    "First\0"
140
    "Last\0"
140
    "Last\0"
141
};
141
};
142
 
142
 
143
 
143
 
144
extern void (*ted_draw)(editor *) __attribute__((__stdcall__));
144
extern void (*ted_draw)(editor *) __attribute__((__stdcall__));
145
extern void (*ted_init_scroll_bars)(editor *, int opt) __attribute__((__stdcall__));
145
extern void (*ted_init_scroll_bars)(editor *, int opt) __attribute__((__stdcall__));
146
/// opt bits = 1 - ìåíÿòü öâåò ñêðîëëèíãîâ, 2 - èçìåíèëèñü ðàçìåðû îêíà, 4 - èçìåíèëèñü ðàçìåðû äîêóìåíòà
146
/// opt bits = 1 - ìåíÿòü öâåò ñêðîëëèíãîâ, 2 - èçìåíèëèñü ðàçìåðû îêíà, 4 - èçìåíèëèñü ðàçìåðû äîêóìåíòà
147
extern void (*ted_init_syntax_file)(editor *) __attribute__((__stdcall__));
147
extern void (*ted_init_syntax_file)(editor *) __attribute__((__stdcall__));
148
extern void (*ted_mouse)(editor *) __attribute__((__stdcall__));
148
extern void (*ted_mouse)(editor *) __attribute__((__stdcall__));
149
extern void (*ted_text_add)(editor *, char *text, int textlen, int opt) __attribute__((__stdcall__));
149
extern void (*ted_text_add)(editor *, char *text, int textlen, int opt) __attribute__((__stdcall__));
150
/// add text to cursor pos
150
/// add text to cursor pos
151
/// opt == ted_opt_ed_change_time, ted_opt_ed_move_cursor
151
/// opt == ted_opt_ed_change_time, ted_opt_ed_move_cursor
152
///ted_opt_ed_move_cursor equ 1 ;äâèãàòü êóðñîð ïîñëå äîáàâëåíèÿ òåêñòà
152
///ted_opt_ed_move_cursor equ 1 ;äâèãàòü êóðñîð ïîñëå äîáàâëåíèÿ òåêñòà
153
///ted_opt_ed_change_time equ 2 ;äîáàâëÿòü èçìåíåíèÿ ïðè ðåäàêòèðîâàíèè òåêñòà
153
///ted_opt_ed_change_time equ 2 ;äîáàâëÿòü èçìåíåíèÿ ïðè ðåäàêòèðîâàíèè òåêñòà
154
extern void (*ted_but_select_word)(editor *) __attribute__((__stdcall__));
154
extern void (*ted_but_select_word)(editor *) __attribute__((__stdcall__));
155
/// select word under cursor
155
/// select word under cursor
156
extern void (*ted_but_copy)(editor *) __attribute__((__stdcall__));
156
extern void (*ted_but_copy)(editor *) __attribute__((__stdcall__));
157
extern void (*ted_but_paste)(editor *) __attribute__((__stdcall__));
157
extern void (*ted_but_paste)(editor *) __attribute__((__stdcall__));
158
 
158
 
159
extern void (*ted_but_find)(editor *) __attribute__((__stdcall__));
159
extern void (*ted_but_find)(editor *) __attribute__((__stdcall__));
160
extern void (*ted_but_replace)(editor *) __attribute__((__stdcall__));
160
extern void (*ted_but_replace)(editor *) __attribute__((__stdcall__));
161
///move cursor to , calls ted_fun_find_err() if exist
161
///move cursor to , calls ted_fun_find_err() if exist
162
 
162
 
163
 
163
 
164
 
164
 
165
extern void (*ted_but_sumb_upper)(editor *) __attribute__((__stdcall__));
165
extern void (*ted_but_sumb_upper)(editor *) __attribute__((__stdcall__));
166
 
166
 
167
extern void (*ted_but_sumb_lover)(editor *) __attribute__((__stdcall__));
167
extern void (*ted_but_sumb_lover)(editor *) __attribute__((__stdcall__));
168
 
168
 
169
extern void (*ted_but_convert_by_table)(editor *, char* table) __attribute__((__stdcall__));
169
extern void (*ted_but_convert_by_table)(editor *, char* table) __attribute__((__stdcall__));
170
 
170
 
171
/// return 1 if need to be saved (has changes), 0 otherwise
171
/// return 1 if need to be saved (has changes), 0 otherwise
172
extern int (*ted_can_save)(editor *) __attribute__((__stdcall__));
172
extern int (*ted_can_save)(editor *) __attribute__((__stdcall__));
173
 
173
 
174
/// all==1 - clear all memory
174
/// all==1 - clear all memory
175
extern void (*ted_clear)(editor *, int all) __attribute__((__stdcall__));
175
extern void (*ted_clear)(editor *, int all) __attribute__((__stdcall__));
176
 
176
 
177
extern void (*ted_delete)(editor *) __attribute__((__stdcall__));
177
extern void (*ted_delete)(editor *) __attribute__((__stdcall__));
178
static inline void editor_delete(editor *ed)
178
static inline void editor_delete(editor *ed)
179
/// frees all memory (destroy)
179
/// frees all memory (destroy)
180
{
180
{
181
    (*ted_delete)(ed);
181
    (*ted_delete)(ed);
182
    free(ed->scr_w);
182
    free(ed->scr_w);
183
    free(ed->scr_h);
183
    free(ed->scr_h);
184
    free(ed->buffer);
184
    free(ed->buffer);
185
    free(ed->buffer_find);
185
    free(ed->buffer_find);
186
}
186
}
187
 
187
 
188
/// allocate memory
188
/// allocate memory
189
extern void (*ted_init)(editor *) __attribute__((__stdcall__));
189
extern void (*ted_init)(editor *) __attribute__((__stdcall__));
190
 
190
 
191
/// return 1 if have selection
191
/// return 1 if have selection
192
extern int (*ted_is_select)(editor *) __attribute__((__stdcall__));
192
extern int (*ted_is_select)(editor *) __attribute__((__stdcall__));
193
 
193
 
194
enum control_keys {
194
enum control_keys {
195
    KM_SHIFT = 0x00010000,
195
    KM_SHIFT = 0x00010000,
196
    KM_CTRL = 0x00020000,
196
    KM_CTRL = 0x00020000,
197
    KM_ALT = 0x00040000,
197
    KM_ALT = 0x00040000,
198
    KM_NUMLOCK = 0x00080000
198
    KM_NUMLOCK = 0x00080000
199
};
199
};
200
 
200
 
201
extern void (*ted_key_asm)(editor *, char* table, int control) __attribute__((__stdcall__));
201
extern void (*ted_key_asm)(editor *, char* table, int control) __attribute__((__stdcall__));
202
static inline __attribute__((__stdcall__)) void editor_keyboard(editor *ed, char* table, enum control_keys control, int ch)
202
static inline __attribute__((__stdcall__)) void editor_keyboard(editor *ed, char* table, enum control_keys control, int ch)
203
/// control is KM_SHIFT, KM_ALT, KM_CTRL, KM_NUMLOCK,
203
/// control is KM_SHIFT, KM_ALT, KM_CTRL, KM_NUMLOCK,
204
/// ch = GET_KEY
204
/// ch = GET_KEY
205
/// table = SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT
205
/// table = SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT
206
{
206
{
207
    __asm__ __volatile__ (
207
    __asm__ __volatile__ (
208
             "push %4\n\t"
208
             "push %4\n\t"
209
             "push %3\n\t"
209
             "push %3\n\t"
210
             "push %2\n\t"
210
             "push %2\n\t"
211
             "call *%1 \n\t"::"a"(ch), "m"(ted_key_asm), "m"(ed), "m"(table), "m"(control):);
211
             "call *%1 \n\t"::"a"(ch), "m"(ted_key_asm), "m"(ed), "m"(table), "m"(control):);
212
/*
212
/*
213
    __asm__ __volatile__ (
213
    __asm__ __volatile__ (
214
             "nop \n\t"::"a"(ch):);
214
             "nop \n\t"::"a"(ch):);
215
    (*ted_key_asm)(ed, table, control);
215
    (*ted_key_asm)(ed, table, control);
216
*/
216
*/
217
}
217
}
218
 
218
 
219
extern void (*ted_open_file_asm)(editor *, struct fs_dirinfo*, char *fname) __attribute__((__stdcall__));
219
extern void (*ted_open_file_asm)(editor *, struct fs_dirinfo*, char *fname) __attribute__((__stdcall__));
220
static inline int editor_openfile(editor *ed, char *fname, int *readbytes)
220
static inline int editor_openfile(editor *ed, char *fname, int *readbytes)
221
/// returns errcode as SysFn70
221
/// returns errcode as SysFn70
222
{
222
{
223
    int     ret;
223
    int     ret;
224
    struct fs_dirinfo   di;
224
    struct fs_dirinfo   di;
225
    __asm__ __volatile__ (
225
    __asm__ __volatile__ (
226
             "push %%edi \n\t":::);
226
             "push %%edi \n\t":::);
227
 
227
 
228
    (*ted_open_file_asm)(ed, &di, fname);
228
    (*ted_open_file_asm)(ed, &di, fname);
229
 
229
 
230
    __asm__ __volatile__ (
230
    __asm__ __volatile__ (
231
             "pop %%edi \n\t":"=b"(*readbytes), "=a"(ret)::);
231
             "pop %%edi \n\t":"=b"(*readbytes), "=a"(ret)::);
232
    return ret;
232
    return ret;
233
}
233
}
234
 
234
 
235
extern void (*ted_save_file_asm)(editor *, struct fs_dirinfo*, char *fname) __attribute__((__stdcall__));
235
extern void (*ted_save_file_asm)(editor *, struct fs_dirinfo*, char *fname) __attribute__((__stdcall__));
236
static inline int editor_savefile(editor *ed, char *fname)
236
static inline int editor_savefile(editor *ed, char *fname)
237
/// returns errcode, calls fun_save_err() if exists
237
/// returns errcode, calls fun_save_err() if exists
238
{
238
{
239
    struct fs_dirinfo   di;
239
    struct fs_dirinfo   di;
240
 
240
 
241
    (*ted_save_file_asm)(ed, &di, fname);
241
    (*ted_save_file_asm)(ed, &di, fname);
242
 
242
 
243
    return ed->err_save;
243
    return ed->err_save;
244
}
244
}
245
 
245
 
246
extern void (*ted_but_cut)(editor *) __attribute__((__stdcall__));
246
extern void (*ted_but_cut)(editor *) __attribute__((__stdcall__));
247
 
247
 
248
extern void (*ted_but_undo)(editor *) __attribute__((__stdcall__));
248
extern void (*ted_but_undo)(editor *) __attribute__((__stdcall__));
249
 
249
 
250
extern void (*ted_but_redo)(editor *) __attribute__((__stdcall__));
250
extern void (*ted_but_redo)(editor *) __attribute__((__stdcall__));
251
 
251
 
252
extern void (*ted_but_reverse)(editor *) __attribute__((__stdcall__));
252
extern void (*ted_but_reverse)(editor *) __attribute__((__stdcall__));
253
 
253
 
254
extern void (*ted_text_colored_asm)() __attribute__((__stdcall__));
254
extern void (*ted_text_colored_asm)() __attribute__((__stdcall__));
255
static inline void editor_text_colored(editor *ed)
255
static inline void editor_text_colored(editor *ed)
256
{
256
{
257
    __asm__ __volatile__ (
257
    __asm__ __volatile__ (
258
             "call *%0 \n\t"::"m"(ted_text_colored_asm), "D"(ed):);
258
             "call *%0 \n\t"::"m"(ted_text_colored_asm), "D"(ed):);
259
 
259
 
260
}
260
}
261
 
261
 
262
static inline
262
static inline
263
uint32_t get_control_keys(void)
263
uint32_t get_control_keys(void)
264
{
264
{
265
    uint32_t ctrl;
265
    uint32_t ctrl;
266
 
266
 
267
    __asm__ __volatile__(
267
    __asm__ __volatile__(
268
    "int $0x40 \n\t"
268
    "int $0x40 \n\t"
269
    :"=a"(ctrl)
269
    :"=a"(ctrl)
270
    :"a"(66),"b"(3));
270
    :"a"(66),"b"(3));
271
 
271
 
272
    return ctrl;
272
    return ctrl;
273
};
273
};
274
 
274
 
275
static inline
275
static inline
276
int get_keyboard_layout(int opt, char* buf)
276
int get_keyboard_layout(int opt, char* buf)
277
/// 128 byte buffer
277
/// 128 byte buffer
278
/// opt: 1 - normal, 2 - shifted, 3 - alted, or 9 - return language
278
/// opt: 1 - normal, 2 - shifted, 3 - alted, or 9 - return language
279
{
279
{
280
    uint32_t lang;
280
    uint32_t lang;
281
 
281
 
282
    __asm__ __volatile__(
282
    __asm__ __volatile__(
283
    "int $0x40 \n\t"
283
    "int $0x40 \n\t"
284
    :"=a"(lang)
284
    :"=a"(lang)
285
    :"a"(26),"b"(2), "c"(opt), "d"(buf));
285
    :"a"(26),"b"(2), "c"(opt), "d"(buf));
286
 
286
 
287
    return lang;
287
    return lang;
288
};
288
};
289
 
289
 
290
__attribute__((__stdcall__))
290
__attribute__((__stdcall__))
291
static void editor_key(editor* ed, oskey_t key)
291
static void editor_key(editor* ed, oskey_t key)
292
// callback for gui
292
// callback for gui
293
{
293
{
294
    //if(ed->el_focus != ed) return;  // need to check not to lose keyb buffer
294
    //if(ed->el_focus != ed) return;  // need to check not to lose keyb buffer
295
 
295
 
296
    uint32_t control = get_control_keys();
296
    uint32_t control = get_control_keys();
297
    enum control_keys ed_ctrl = 0;
297
    enum control_keys ed_ctrl = 0;
298
    int ly_opt = 1;
298
    int ly_opt = 1;
299
    if (control & 3) { ed_ctrl |= KM_SHIFT; ly_opt = 2; }
299
    if (control & 3) { ed_ctrl |= KM_SHIFT; ly_opt = 2; }
300
    if (control & 0xC) ed_ctrl |= KM_CTRL;
300
    if (control & 0xC) ed_ctrl |= KM_CTRL;
301
    if (control & 0x30){ ed_ctrl |= KM_ALT; ly_opt = 3; }
301
    if (control & 0x30){ ed_ctrl |= KM_ALT; ly_opt = 3; }
302
    if (control & 0x80) ed_ctrl |= KM_NUMLOCK;
302
    if (control & 0x80) ed_ctrl |= KM_NUMLOCK;
303
 
303
 
304
    char conv_table[128];
304
    char conv_table[128];
305
    get_keyboard_layout(ly_opt, conv_table);
305
    get_keyboard_layout(ly_opt, conv_table);
306
 
306
 
307
    editor_keyboard(ed, conv_table, ed_ctrl, key.val);
307
    editor_keyboard(ed, conv_table, ed_ctrl, key.val);
308
}
308
}
309
 
309
 
310
static inline void gui_add_editor(kolibri_window *wnd, editor* e)
310
static inline void gui_add_editor(kolibri_window *wnd, editor* e)
311
{
311
{
312
    kolibri_window_add_element(wnd, KOLIBRI_EDITOR, e);
312
    kolibri_window_add_element(wnd, KOLIBRI_EDITOR, e);
313
}
313
}
314
 
314
 
315
static inline editor* kolibri_new_editor(uint32_t x_w, uint32_t y_h, uint32_t font, uint32_t max_chars, void *editor_interlock)
315
static inline editor* kolibri_new_editor(uint32_t x_w, uint32_t y_h, uint32_t font, uint32_t max_chars, void *editor_interlock)
316
/// font - 0b10SSS 8x16 size multiply (SSS+1), 0xSSS - 6x9 multiply (SSS+1)
316
/// font - 0b10SSS 8x16 size multiply (SSS+1), 0xSSS - 6x9 multiply (SSS+1)
317
 
317
 
318
{
318
{
319
    editor *ed = (editor *)calloc(1, sizeof(editor));
319
    editor *ed = (editor *)calloc(1, sizeof(editor));
320
    ed->x_pos = x_w >> 16;
320
    ed->x_pos = x_w >> 16;
321
    ed->width = x_w & 0xFFFF;
321
    ed->width = x_w & 0xFFFF;
322
    ed->y_pos = y_h >> 16;
322
    ed->y_pos = y_h >> 16;
323
    ed->hight = y_h & 0xFFFF;
323
    ed->hight = y_h & 0xFFFF;
324
 
324
 
325
    ed->w_pane = 30;
325
    ed->w_pane = 30;
326
    ed->h_pane = 20;
326
    ed->h_pane = 20;
327
    // font
327
    // font
328
    if (font == 0) font = 0x10;  // default 16 = 8x16
328
    if (font == 0) font = 0x10;  // default 16 = 8x16
329
    int font_multipl = (font & 7) + 1;
329
    int font_multipl = (font & 7) + 1;
330
    ed->font_size = font << 24;
330
    ed->font_size = font << 24;
331
    if (font & 0x10) // 8x16
331
    if (font & 0x10) // 8x16
332
    {
332
    {
333
        ed->width_sym = 8 * font_multipl;
333
        ed->width_sym = 8 * font_multipl;
334
        ed->hight_sym = 16 * font_multipl;
334
        ed->hight_sym = 16 * font_multipl;
335
    } else   // 6x9
335
    } else   // 6x9
336
    {
336
    {
337
        ed->width_sym = 6 * font_multipl;
337
        ed->width_sym = 6 * font_multipl;
338
        ed->hight_sym = 9 * font_multipl;
338
        ed->hight_sym = 9 * font_multipl;
339
    }
339
    }
340
    // memory sizing for text & syntax
340
    // memory sizing for text & syntax
341
    ed->max_chars = max_chars;
341
    ed->max_chars = max_chars;
342
    ed->increase_size = max_chars / 2;
342
    ed->increase_size = max_chars / 2;
343
    ed->syntax_file_size = sizeof (default_syntax);
343
    ed->syntax_file_size = sizeof (default_syntax);
344
 
344
 
345
/* // loaded auto from syntax
345
/* // loaded auto from syntax
346
    ed->color_cursor = 0x808080;
346
    ed->color_cursor = 0x808080;
347
    ed->color_wnd_capt = 0x80;
347
    ed->color_wnd_capt = 0x80;
348
    ed->color_wnd_bord = 0xd0d0d0;
348
    ed->color_wnd_bord = 0xd0d0d0;
349
    ed->color_select = 0x208080;
349
    ed->color_select = 0x208080;
350
    ed->color_cur_text = 0xff0000;
350
    ed->color_cur_text = 0xff0000;
351
    ed->color_wnd_text = 0xffff00;
351
    ed->color_wnd_text = 0xffff00;
352
*/
352
*/
353
    ed->symbol_new_line = 20;  // ascii(20)
353
    ed->symbol_new_line = 20;  // ascii(20)
354
 
354
 
355
    ed->scr_w = kolibri_new_scrollbar_def(X_Y(0, 16), X_Y(0, 0), 100, 30, 0);  // cur_area will be inited ltr, max & pos undef
355
    ed->scr_w = kolibri_new_scrollbar_def(X_Y(0, 16), X_Y(0, 0), 100, 30, 0);  // cur_area will be inited ltr, max & pos undef
356
    ed->scr_h = kolibri_new_scrollbar_def(X_Y(0, 0), X_Y(0, 16), 100, 30, 0);  // cur_area will be inited ltr, max & pos undef
356
    ed->scr_h = kolibri_new_scrollbar_def(X_Y(0, 0), X_Y(0, 16), 100, 30, 0);  // cur_area will be inited ltr, max & pos undef
357
 
357
 
358
    ed->buffer_size = TE_BUF_SIZE;
358
    ed->buffer_size = TE_BUF_SIZE;
359
    ed->buffer = malloc(TE_BUF_SIZE);
359
    ed->buffer = malloc(TE_BUF_SIZE);
360
    ed->buffer_find = malloc(TE_BUF_SIZE / 8);  //where to store text to search
360
    ed->buffer_find = malloc(TE_BUF_SIZE / 8);  //where to store text to search
361
 
361
 
362
    ed->cur_ins = 1; // insert mode default
362
    ed->cur_ins = 1; // insert mode default
363
    ed->mode_color = 1; // can select text
363
    ed->mode_color = 1; // can select text
364
    ed->mode_invis = 1; // show nonprinted symbols
364
    ed->mode_invis = 1; // show nonprinted symbols
365
 
365
 
366
    ed->el_focus = editor_interlock;
366
    ed->el_focus = editor_interlock;
367
 
367
 
368
    (*ted_init)(ed);  // memory allocation, cleaning
368
    (*ted_init)(ed);  // memory allocation, cleaning
369
    ed->syntax_file = (char*)&default_syntax;
369
    ed->syntax_file = (char*)&default_syntax;
370
    (*ted_init_syntax_file)(ed); // load colors and syntax highlight
370
    (*ted_init_syntax_file)(ed); // load colors and syntax highlight
371
    ed->help_text_f1 = f1_table; // override if not aligned immediately after syntax words
371
    ed->help_text_f1 = f1_table; // override if not aligned immediately after syntax words
372
    ed->key_words_data = &word1;
372
    ed->key_words_data = &word1;
373
 
373
 
374
    return ed;
374
    return ed;
375
}
375
}
376
 
376
 
377
/// return 1 if symbol is not visible (deleted or undo-ed)
377
/// return 1 if symbol is not visible (deleted or undo-ed)
378
static inline int editor_symbol_not_vis(editor* ed, struct editor_symbol* sym)
378
static inline int editor_symbol_not_vis(editor* ed, struct editor_symbol* sym)
379
{
379
{
380
    return (sym->td && sym->td + ed->tim_undo <= ed->tim_ch) || (sym->tc > ed->tim_ch - ed->tim_undo);
380
    return (sym->td && sym->td + ed->tim_undo <= ed->tim_ch) || (sym->tc > ed->tim_ch - ed->tim_undo);
381
}
381
}
382
 
382
 
383
/// returns next good symbol by index
383
/// returns next good symbol by index
384
static inline
384
static inline
385
uint32_t editor_iterat_next(editor* ed, uint32_t idx)
385
uint32_t editor_iterat_next(editor* ed, uint32_t idx)
386
{
386
{
387
    uint32_t  i;
387
    uint32_t  i;
388
    if (ed->tim_undo)
388
    if (ed->tim_undo)
389
    {
389
    {
390
        for (i = ed->tex[idx].next; i != 0 && (ed->tex[i].c == '\n' || editor_symbol_not_vis(ed, ed->tex + i)); i = ed->tex[i].next);
390
        for (i = ed->tex[idx].next; i != 0 && (ed->tex[i].c == '\n' || editor_symbol_not_vis(ed, ed->tex + i)); i = ed->tex[i].next);
391
    } else
391
    } else
392
    {
392
    {
393
        for (i = ed->tex[idx].next; i != 0 && (ed->tex[i].c == '\n' || ed->tex[i].td); i = ed->tex[i].next);
393
        for (i = ed->tex[idx].next; i != 0 && (ed->tex[i].c == '\n' || ed->tex[i].td); i = ed->tex[i].next);
394
    }
394
    }
395
    return i;
395
    return i;
396
}
396
}
397
 
397
 
398
// returns malloc'ed mem
398
// returns malloc'ed mem
399
static inline
399
static inline
400
char*  editor_get_text(editor* ed)
400
char*  editor_get_text(editor* ed)
401
{
401
{
402
    char    *buf = malloc(ed->max_chars), *pc = buf;
402
    char    *buf = malloc(ed->max_chars), *pc = buf;
403
    if (!pc) return NULL;
403
    if (!pc) return NULL;
404
 
404
 
405
    int  i;
405
    int  i;
406
//    *pc++ = ed->tex[0].c;
406
//    *pc++ = ed->tex[0].c;
407
    for (i = ed->tex[0].next; i; i = editor_iterat_next(ed, i)) *pc++ = ed->tex[i].c;
407
    for (i = ed->tex[0].next; i; i = editor_iterat_next(ed, i)) *pc++ = ed->tex[i].c;
408
    *pc++ = '\0';
408
    *pc++ = '\0';
409
 
409
 
410
    return buf;
410
    return buf;
411
}
411
}
412
 
412
 
413
/*
413
/*
414
char*  editor_get_text20(editor* ed)
414
char*  editor_get_text20(editor* ed)
415
{
415
{
416
    char    *buf = malloc(ed->max_chars), *pc = buf;
416
    char    *buf = malloc(ed->max_chars), *pc = buf;
417
    if (!pc) return NULL;
417
    if (!pc) return NULL;
418
 
418
 
419
    int  i = ed->tex[0].next, c = 0;
419
    int  i = ed->tex[0].next, c = 0;
420
    for (; i > 0 && c < 30; c++, i = ed->tex[i].next) *pc++ = ed->tex[i].c;
420
    for (; i > 0 && c < 30; c++, i = ed->tex[i].next) *pc++ = ed->tex[i].c;
421
    *pc++ = '\0';
421
    *pc++ = '\0';
422
 
422
 
423
    return buf;
423
    return buf;
424
}
424
}
425
*/
425
*/
426
#endif // KOLIBRI_EDITOR_H
426
#endif // KOLIBRI_EDITOR_H