Rev 6589 | Rev 6612 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6589 | Rev 6601 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | #ifndef KOLIBRI_TREELIST_H |
1 | #ifndef KOLIBRI_TREELIST_H |
2 | #define KOLIBRI_TREELIST_H |
2 | #define KOLIBRI_TREELIST_H |
Line 3... | Line -... | ||
3 | - | ||
4 | /* |
- | |
5 | el_focus dd tedit0 |
- | |
6 | mouse_dd dd 0 |
- | |
7 | tree1 tree_list 264,count_of_dir_list_files+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ |
- | |
8 | 16,16, 0x8080ff,0x0000ff,0xffffff, 0,70,TED_PANEL_WIDTH-17,120, 0,0,0, el_focus,\ |
- | |
9 | ws_dir_lbox,0 |
3 | |
10 | - | ||
11 | tree3 tree_list MAX_COLOR_WORD_LEN,3,tl_key_no_edit,\ |
- | |
12 | 16,16, 0x8080ff,0x0000ff,0xffffff, 5,30,300,160, 16, 0,0, el_focus, w_scr_t3,0 |
- | |
13 | - | ||
14 | tree_file_struct: |
- | |
15 | dd 1 |
- | |
16 | dd 0,0,count_of_dir_list_files |
- | |
17 | dd dir_mem |
- | |
18 | db 0 |
- | |
19 | dd file_name ;sys_path |
- | |
20 | */ |
- | |
21 | /* |
- | |
22 | ;struct TreeList |
- | |
23 | ; type dw ? ;+ 0 òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà |
- | |
24 | ; lev db ? ;+ 2 óðîâåíü ýëåìåíòà |
- | |
25 | ; clo db ? ;+ 3 ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà) |
- | |
26 | ; perv dd ? ;+ 4 èíäåêñ ïðåäûäóùåãî ýëåìåíòà |
- | |
27 | ; next dd ? ;+ 8 èíäåêñ ïîñëåäóþùåãî ýëåìåíòà |
- | |
28 | ; tc dd ? ;+12 âðåì. ñîçäàíèÿ |
- | |
29 | ; td dd ? ;+16 âðåì. óäàëåíèÿ |
- | |
30 | ;ends |
- | |
31 | - | ||
32 | struc tree_list info_size,info_max_count,style, img_cx,img_cy,\ |
- | |
33 | col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\ |
- | |
34 | info_capt_len,el_focus, p_scroll,on_press { |
- | |
35 | .box_left dd box_l |
- | |
36 | .box_top dd box_t |
- | |
37 | .box_width dd box_w |
- | |
38 | .box_height dd box_h |
- | |
39 | .data_info dd 0 |
- | |
40 | .info_size dw info_size |
- | |
41 | .info_max_count dd info_max_count |
- | |
42 | .style dd style |
- | |
43 | .data_nodes dd 0 |
- | |
44 | .data_img dd 0 |
- | |
45 | .img_cx dw img_cx |
- | |
46 | .img_cy dw img_cy |
- | |
47 | .data_img_sys dd 0 |
- | |
48 | .ch_tim dd 0 |
- | |
49 | .tim_undo dd 0 |
- | |
50 | .cur_pos dd 0 |
- | |
51 | .col_bkg dd col_bkg |
- | |
52 | .col_zag dd col_zag |
- | |
53 | .col_txt dd col_txt |
- | |
54 | .capt_cy dw capt_cy |
- | |
55 | .info_capt_offs dw info_capt_offs |
- | |
56 | .info_capt_len dw info_capt_len |
- | |
57 | .el_focus dd el_focus |
- | |
58 | .p_scroll dd p_scroll |
- | |
59 | .on_press dd on_press |
- | |
60 | } |
- | |
61 | */ |
4 | |
62 | // êîíñòàíòû ñòèëÿ |
5 | /// êîíñòàíòû ñòèëÿ |
63 | enum tl_style { |
6 | enum tl_style { |
64 | TL_KEY_NO_EDIT = 1, // ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü) |
7 | TL_KEY_NO_EDIT = 1, // ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü) |
65 | TL_DRAW_PAR_LINE = 2, // ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó |
8 | TL_DRAW_PAR_LINE = 2, // ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó |
66 | TL_LISTBOX_MODE = 4 //ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ) |
9 | TL_LISTBOX_MODE = 4 //ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ) |
Line -... | Line 10... | ||
- | 10 | }; |
|
- | 11 | ||
- | 12 | /// êîíñòàíòû äëÿ ôóíêöèé |
|
- | 13 | enum tl_err { |
|
- | 14 | TL_ERR_LOAD_CAPTION = 1, //â ïàìÿòè íåò çàãîëîâêà 'tree' |
|
- | 15 | TL_ERR_SAVE_MEMOTY_SIZE = 2, //íå õâàòàåò ïàìÿòè äëÿ ñîõðàíåíèÿ ýëåìåíòà |
|
- | 16 | TL_ERR_LOAD_INFO_SIZE = 4, //íå ñîâïàäàåò ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû ïðè îòêðûòèè |
|
- | 17 | }; |
|
- | 18 | ||
- | 19 | typedef struct __attribute__ ((__packed__)) { |
|
- | 20 | uint16_t type; //òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà |
|
- | 21 | uint8_t lev; //óðîâåíü ýëåìåíòà |
|
- | 22 | uint8_t clo; //ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà) |
|
- | 23 | uint32_t prev; //èíäåêñ ïðåäûäóùåãî ýëåìåíòà |
|
- | 24 | uint32_t next; //èíäåêñ ïîñëåäóþùåãî ýëåìåíòà |
|
- | 25 | uint32_t tcreat; //âðåì. ñîçäàíèÿ |
|
- | 26 | uint32_t tdel; //âðåì. óäàëåíèÿ |
|
- | 27 | } treelist_node; |
|
67 | }; |
28 | |
68 | 29 | ||
69 | typedef struct __attribute__ ((__packed__)) { |
30 | typedef struct __attribute__ ((__packed__)) { |
70 | uint32_t left; |
31 | uint32_t left; |
71 | uint32_t top; |
32 | uint32_t top; |
72 | uint32_t width; |
33 | uint32_t width; |
73 | uint32_t height; |
34 | uint32_t height; |
74 | void *data_info; // óêàçàòåëü íà îñíîâíûå äàíûå |
35 | void *data_info; // óêàçàòåëü íà îñíîâíûå äàíûå |
75 | uint16_t info_size; // ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè) |
36 | uint16_t info_size; // ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè) |
76 | uint32_t info_max_count; // ìàêñèìàëüíîå êîëè÷åñòâî óçëîâ, êîòîðûå ìîæíî äîáàâèòü â ýëåìåíò |
37 | uint32_t info_max_count; // ìàêñèìàëüíîå êîëè÷åñòâî óçëîâ, êîòîðûå ìîæíî äîáàâèòü â ýëåìåíò |
77 | uint32_t style; // ñòèëè ýëåìåíòà |
38 | uint32_t style; // ñòèëè ýëåìåíòà |
78 | void *data_nodes; // óêàçàòåëü íà ñòðóêòóðû óçëîâ |
39 | treelist_node *data_nodes; // óêàçàòåëü íà ñòðóêòóðû óçëîâ |
79 | void *data_img; // óêàçàòåëü íà èçîáðàæåíèÿ ñ èêîíêàìè óçëîâ |
40 | void *data_img; // óêàçàòåëü íà èçîáðàæåíèÿ ñ èêîíêàìè óçëîâ |
80 | uint16_t img_cx; // øèðèíà èêîíîê |
41 | uint16_t img_cx; // øèðèíà èêîíîê |
81 | uint16_t img_cy; // âûñîòà èêîíîê |
42 | uint16_t img_cy; // âûñîòà èêîíîê |
82 | void *data_img_sys;//óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè) |
43 | void *data_img_sys;//óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè) |
83 | uint32_t ch_tim; // êîëè÷åñòâî èçìåíåíèé â ôàéëå |
44 | uint32_t ch_tim; // êîëè÷åñòâî èçìåíåíèé â ôàéëå |
84 | uint32_t tim_undo; // êîëè÷åñòâî îòìåíåííûõ äåéñòâèé |
45 | uint32_t tim_undo; // êîëè÷åñòâî îòìåíåííûõ äåéñòâèé |
85 | uint32_t cur_pos; // ïîçèöèÿ êóðñîðà |
46 | uint32_t cur_pos; // ïîçèöèÿ êóðñîðà |
86 | color_t col_bkg; // öâåò ôîíà |
47 | color_t col_bkg; // öâåò ôîíà |
87 | color_t tl_col_zag; // öâåò çàãîëîâêà |
48 | color_t col_zag; // öâåò çàãîëîâêà |
88 | color_t tl_col_txt; // öâåò òåêñòà |
49 | color_t col_txt; // öâåò òåêñòà |
89 | uint16_t capt_cy; // âûñîòà ïîäïèñè |
50 | uint16_t capt_cy; // âûñîòà ïîäïèñè |
90 | uint16_t info_capt_offs;//ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà) |
51 | uint16_t info_capt_offs;//ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà) |
91 | uint16_t info_capt_len;//äëèíà òåêñòà ïîäïèñè óçëà (åñëè = 0 òî äî êîíöà ñòðóêòóðû) |
52 | uint16_t info_capt_len;//äëèíà òåêñòà ïîäïèñè óçëà (åñëè = 0 òî äî êîíöà ñòðóêòóðû) |
92 | void *el_focus; // óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå |
53 | void *el_focus; // óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå |
93 | void *p_scroll; // óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà |
54 | scrollbar *p_scroll; // óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà |
Line -... | Line 55... | ||
- | 55 | void *on_press; // +84 óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter |
|
- | 56 | } treelist; |
|
94 | void *on_press; // +84 óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter |
57 | |
- | 58 | static inline treelist* kolibri_new_treelist( uint32_t x_w, uint32_t y_h, uint16_t capt_cy, uint32_t icon_size_xy, uint16_t info_size, uint32_t info_max_count, |
|
- | 59 | uint16_t info_capt_len, uint16_t info_capt_offs, enum tl_style style, void *el_focus, color_t back, color_t title, color_t txt) |
|
- | 60 | { |
|
- | 61 | treelist *tl = (treelist *)calloc(1, sizeof(treelist)); |
|
- | 62 | tl->left= x_w >> 16; |
|
- | 63 | tl->width = x_w & 0xFFFF; |
|
- | 64 | tl->top = y_h >> 16; |
|
- | 65 | tl->height = y_h & 0xFFFF; |
|
- | 66 | tl->info_size = info_size; |
|
- | 67 | tl->info_max_count = info_max_count; |
|
- | 68 | tl->style = style; |
|
- | 69 | tl->img_cx = icon_size_xy >> 16; |
|
- | 70 | tl->img_cy = icon_size_xy & 0xFFFF; |
|
- | 71 | tl->col_bkg = back; |
|
- | 72 | tl->col_zag = title; |
|
- | 73 | tl->col_txt = txt; |
|
- | 74 | tl->info_capt_len = info_capt_len; |
|
- | 75 | tl->info_capt_offs = info_capt_offs; |
|
- | 76 | tl->el_focus = el_focus; |
|
- | 77 | tl->p_scroll = kolibri_new_scrollbar_def(X_Y(0, 16), X_Y(70, 30), 100, 30, 0); |
|
- | 78 | return tl; |
|
- | 79 | } |
|
- | 80 | ||
- | 81 | static inline void gui_add_treelist(kolibri_window *wnd, treelist* tl) |
|
- | 82 | { |
|
- | 83 | kolibri_window_add_element(wnd, KOLIBRI_TREELIST, tl); |
|
- | 84 | } |
|
- | 85 | ||
- | 86 | ||
95 | } treelist; |
87 | ///ðåàêöèÿ íà ìûøü |
- | 88 | extern void (*tl_mouse)(treelist *) __attribute__((__stdcall__)); |
|
- | 89 | ||
- | 90 | ///âûâîä ñïèñêà íà ýêðàí |
|
- | 91 | extern void (*tl_draw)(treelist *) __attribute__((__stdcall__)); |
|
- | 92 | ||
- | 93 | ///ïåðåìåùàåì óçåë ââåðõ |
|
- | 94 | extern void (*tl_node_move_up)(treelist *) __attribute__((__stdcall__)); |
|
- | 95 | ||
- | 96 | ///ïåðåìåùàåì óçåë âíèç |
|
96 | 97 | extern void (*tl_node_move_down)(treelist *) __attribute__((__stdcall__)); |
|
- | 98 | ||
- | 99 | extern void (*tl_data_init_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 100 | ///âûäåëåíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð) |
|
- | 101 | static inline void treelist_data_init(treelist *tl) |
|
- | 102 | { |
|
- | 103 | __asm__ __volatile__ ( |
|
- | 104 | "push %%edi \n\t":::); |
|
- | 105 | ||
- | 106 | (*tl_data_init_asm)(tl); |
|
- | 107 | ||
- | 108 | __asm__ __volatile__ ( |
|
- | 109 | "pop %%edi \n\t":::); |
|
- | 110 | } |
|
- | 111 | ||
- | 112 | extern void (*tl_data_clear_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 113 | ///î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð) |
|
- | 114 | static inline void treelist_data_clear(treelist *tl) |
|
- | 115 | { |
|
- | 116 | __asm__ __volatile__ ( |
|
- | 117 | "push %%edi \n\t":::); |
|
- | 118 | ||
- | 119 | (*tl_data_clear_asm)(tl); |
|
- | 120 | ||
- | 121 | __asm__ __volatile__ ( |
|
- | 122 | "pop %%edi \n\t":::); |
|
- | 123 | } |
|
- | 124 | ||
- | 125 | extern void (*tl_info_clear_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 126 | ///î÷èñòêà ñïèñêà (èíôîðìàöèè) |
|
- | 127 | static inline void treelist_info_clear(treelist *tl) |
|
- | 128 | { |
|
- | 129 | __asm__ __volatile__ ( |
|
- | 130 | "push %%edi \n\t":::); |
|
- | 131 | ||
- | 132 | (*tl_info_clear_asm)(tl); |
|
- | 133 | ||
- | 134 | __asm__ __volatile__ ( |
|
- | 135 | "pop %%edi \n\t":::); |
|
- | 136 | } |
|
- | 137 | ||
- | 138 | extern void (*tl_key_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 139 | ///ðåàêöèÿ íà êëàâèàòóðó |
|
- | 140 | static inline void treelist_key(treelist *tl) |
|
- | 141 | { |
|
- | 142 | __asm__ __volatile__ ( |
|
- | 143 | "push %%ebx \n\t" |
|
- | 144 | "push %%edi \n\t":::); |
|
- | 145 | ||
- | 146 | (*tl_key_asm)(tl); |
|
- | 147 | ||
- | 148 | __asm__ __volatile__ ( |
|
- | 149 | "pop %%edi \n\t" |
|
- | 150 | "pop %%ebx \n\t":::); |
|
- | 151 | } |
|
- | 152 | ||
- | 153 | extern void (*tl_info_undo_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 154 | ///îòìåíà äåéñòâèÿ |
|
- | 155 | static inline void treelist_undo(treelist *tl) |
|
- | 156 | { |
|
- | 157 | __asm__ __volatile__ ( |
|
- | 158 | "push %%edi \n\t":::); |
|
- | 159 | ||
- | 160 | (*tl_info_undo_asm)(tl); |
|
- | 161 | ||
- | 162 | __asm__ __volatile__ ( |
|
- | 163 | "pop %%edi \n\t":::); |
|
- | 164 | } |
|
- | 165 | ||
- | 166 | extern void (*tl_info_redo_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 167 | ///ïîâòîð äåéñòâèÿ |
|
- | 168 | static inline void treelist_redo(treelist *tl) |
|
- | 169 | { |
|
- | 170 | __asm__ __volatile__ ( |
|
- | 171 | "push %%edi \n\t":::); |
|
- | 172 | ||
- | 173 | (*tl_info_redo_asm)(tl); |
|
- | 174 | ||
- | 175 | __asm__ __volatile__ ( |
|
- | 176 | "pop %%edi \n\t":::); |
|
- | 177 | } |
|
- | 178 | ||
- | 179 | extern void (*tl_node_add_asm)(treelist *, uint32_t n_opt, void *n_info) __attribute__((__stdcall__)); |
|
- | 180 | ///äîáàâèòü óçåë |
|
- | 181 | ///input: |
|
- | 182 | /// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà |
|
- | 183 | /// n_opt - îïöèè äîáàâëåíèÿ |
|
- | 184 | /// n_info - óêàçàòåëü íà äîáàâëÿåìûå äàííûå |
|
- | 185 | static inline void treelist_node_add(treelist *tl, void *n_info, uint16_t type, uint8_t clos, uint8_t lev) |
|
- | 186 | { |
|
- | 187 | __asm__ __volatile__ ( |
|
- | 188 | "push %%ebx \n\t" |
|
- | 189 | "push %%edi \n\t":::); |
|
- | 190 | ||
- | 191 | uint32_t n_opt = (type << 16) | (clos << 8) | lev; |
|
- | 192 | (*tl_node_add_asm)(tl, n_opt, n_info); |
|
- | 193 | ||
- | 194 | __asm__ __volatile__ ( |
|
- | 195 | "pop %%edi \n\t" |
|
- | 196 | "pop %%ebx \n\t":::); |
|
- | 197 | } |
|
- | 198 | ||
- | 199 | extern void (*tl_node_set_data_asm)(treelist *, void *n_info) __attribute__((__stdcall__)); |
|
- | 200 | ///çàïèñàòü â òåêóùèé óçåë |
|
- | 201 | ///input: |
|
- | 202 | /// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà |
|
- | 203 | /// n_info - óêàçàòåëü íà äàííûå |
|
- | 204 | static inline void treelist_node_setdata(treelist *tl, void *n_info) |
|
- | 205 | { |
|
- | 206 | __asm__ __volatile__ ( |
|
- | 207 | "push %%esi \n\t" |
|
- | 208 | "push %%edi \n\t":::); |
|
- | 209 | ||
- | 210 | (*tl_node_set_data_asm)(tl, n_info); |
|
- | 211 | ||
- | 212 | __asm__ __volatile__ ( |
|
- | 213 | "pop %%edi \n\t" |
|
- | 214 | "pop %%esi \n\t":::); |
|
97 | /* |
215 | } |
- | 216 | ||
- | 217 | extern void* (*tl_node_get_data_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 218 | ///âçÿòü óêàçàòåëü íà äàííûå óçëà ïîä êóðñîðîì |
|
- | 219 | static inline void* treelist_getdata(treelist *tl) |
|
- | 220 | { |
|
- | 221 | __asm__ __volatile__ ( |
|
- | 222 | "push %%edi \n\t":::); |
|
- | 223 | ||
- | 224 | void *res = |
|
- | 225 | (*tl_node_get_data_asm)(tl); |
|
- | 226 | ||
- | 227 | __asm__ __volatile__ ( |
|
- | 228 | "pop %%edi \n\t":::); |
|
- | 229 | return res; |
|
- | 230 | } |
|
- | 231 | ||
- | 232 | extern void (*tl_node_delete_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 233 | ///óäàëèòü óçåë ïîä êóðñîðîì |
|
- | 234 | static inline void treelist_node_delete(treelist *tl) |
|
- | 235 | { |
|
- | 236 | __asm__ __volatile__ ( |
|
- | 237 | "push %%edi \n\t":::); |
|
- | 238 | ||
- | 239 | (*tl_node_delete_asm)(tl); |
|
- | 240 | ||
- | 241 | __asm__ __volatile__ ( |
|
- | 242 | "pop %%edi \n\t":::); |
|
- | 243 | } |
|
- | 244 | ||
- | 245 | extern void (*tl_cur_beg_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 246 | ///ïîñòàâèòü êóðñîð íà ïåðâûé óçåë |
|
- | 247 | static inline void treelist_cursor_begin(treelist *tl) |
|
- | 248 | { |
|
- | 249 | __asm__ __volatile__ ( |
|
- | 250 | "push %%edi \n\t":::); |
|
- | 251 | ||
- | 252 | (*tl_cur_beg_asm)(tl); |
|
- | 253 | ||
- | 254 | __asm__ __volatile__ ( |
|
- | 255 | "pop %%edi \n\t":::); |
|
- | 256 | } |
|
- | 257 | ||
- | 258 | extern void (*tl_cur_next_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 259 | ///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå |
|
- | 260 | static inline void treelist_cursor_next(treelist *tl) |
|
- | 261 | { |
|
- | 262 | __asm__ __volatile__ ( |
|
- | 263 | "push %%ebx \n\t" |
|
- | 264 | "push %%esi \n\t" |
|
- | 265 | "push %%edi \n\t":::); |
|
- | 266 | ||
- | 267 | (*tl_cur_next_asm)(tl); |
|
- | 268 | ||
- | 269 | __asm__ __volatile__ ( |
|
- | 270 | "pop %%edi \n\t" |
|
- | 271 | "pop %%esi \n\t" |
|
- | 272 | "pop %%ebx \n\t":::); |
|
- | 273 | } |
|
- | 274 | ||
- | 275 | extern void (*tl_cur_perv_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 276 | ///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå |
|
- | 277 | static inline void treelist_cursor_prev(treelist *tl) |
|
- | 278 | { |
|
- | 279 | __asm__ __volatile__ ( |
|
- | 280 | "push %%ebx \n\t" |
|
- | 281 | "push %%esi \n\t" |
|
- | 282 | "push %%edi \n\t":::); |
|
- | 283 | ||
- | 284 | (*tl_cur_perv_asm)(tl); |
|
- | 285 | ||
- | 286 | __asm__ __volatile__ ( |
|
- | 287 | "pop %%edi \n\t" |
|
- | 288 | "pop %%esi \n\t" |
|
- | 289 | "pop %%ebx \n\t":::); |
|
98 | ;êîíñòàíòû äëÿ ôóíêöèé |
290 | } |
- | 291 | ||
- | 292 | extern void (*tl_node_close_open_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 293 | ///îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû) |
|
- | 294 | static inline void treelist_close_open(treelist *tl) |
|
- | 295 | { |
|
- | 296 | __asm__ __volatile__ ( |
|
- | 297 | "push %%edi \n\t":::); |
|
- | 298 | ||
- | 299 | (*tl_node_close_open_asm)(tl); |
|
- | 300 | ||
- | 301 | __asm__ __volatile__ ( |
|
- | 302 | "pop %%edi \n\t":::); |
|
- | 303 | } |
|
- | 304 | ||
- | 305 | extern void (*tl_node_lev_inc_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 306 | ///óâåëè÷èòü óðîâåíü |
|
- | 307 | static inline void treelist_level_inc(treelist *tl) |
|
- | 308 | { |
|
- | 309 | __asm__ __volatile__ ( |
|
- | 310 | "push %%edi \n\t":::); |
|
- | 311 | ||
- | 312 | (*tl_node_lev_inc_asm)(tl); |
|
- | 313 | ||
- | 314 | __asm__ __volatile__ ( |
|
- | 315 | "pop %%edi \n\t":::); |
|
- | 316 | } |
|
- | 317 | ||
- | 318 | extern void (*tl_node_lev_dec_asm)(treelist *) __attribute__((__stdcall__)); |
|
- | 319 | ///óìåíüøèòü óðîâåíü |
|
- | 320 | static inline void treelist_level_dec(treelist *tl) |
|
- | 321 | { |
|
- | 322 | __asm__ __volatile__ ( |
|
- | 323 | "push %%edi \n\t":::); |
|
- | 324 | ||
- | 325 | (*tl_node_lev_dec_asm)(tl); |
|
- | 326 | ||
- | 327 | __asm__ __volatile__ ( |
|
- | 328 | "pop %%edi \n\t":::); |
|
- | 329 | } |
|
- | 330 | ||
- | 331 | extern treelist_node* (*tl_node_poi_get_info_asm)(treelist *, int node_ind) __attribute__((__stdcall__)); |
|
- | 332 | ///âçÿòü óêàçàòåëü íà ñòðóêòóðó óçëà â óêàçàííîé ïîçèöèè |
|
- | 333 | ///input: |
|
- | 334 | /// tlist - pointer to 'TreeList' struct |
|
- | 335 | /// node_ind - node index |
|
- | 336 | ///output - pointer to node info or NULL |
|
- | 337 | static inline treelist_node* treelist_getnode(treelist *tl, int node_ind) |
|
- | 338 | { |
|
- | 339 | __asm__ __volatile__ ( |
|
- | 340 | "push %%ebx \n\t" |
|
- | 341 | "push %%edi \n\t":::); |
|
- | 342 | ||
- | 343 | treelist_node *ret = |
|
- | 344 | (*tl_node_poi_get_info_asm)(tl, node_ind); |
|
- | 345 | ||
- | 346 | __asm__ __volatile__ ( |
|
- | 347 | "pop %%edi \n\t" |
|
- | 348 | "pop %%ebx \n\t":::); |
|
- | 349 | return ret; |
|
- | 350 | } |
|
- | 351 | ||
- | 352 | extern treelist_node* (*tl_node_poi_get_next_info_asm)(treelist *, treelist_node*) __attribute__((__stdcall__)); |
|
- | 353 | ///âçÿòü óêàçàòåëü íà ñëåäóùóþ ñòðóêòóðó óçëà |
|
- | 354 | ///input: |
|
- | 355 | /// tlist - pointer to 'TreeList' struct |
|
- | 356 | /// node_p - node param struct |
|
- | 357 | ///output - pointer to next node struct or NULL |
|
- | 358 | static inline treelist_node* treelist_getnode_next(treelist *tl, treelist_node* node) |
|
- | 359 | { |
|
- | 360 | __asm__ __volatile__ ( |
|
- | 361 | "push %%ebx \n\t" |
|
- | 362 | "push %%edi \n\t":::); |
|
- | 363 | ||
- | 364 | treelist_node *ret = |
|
- | 365 | (*tl_node_poi_get_next_info_asm)(tl, node); |
|
- | 366 | ||
- | 367 | __asm__ __volatile__ ( |
|
- | 368 | "pop %%edi \n\t" |
|
- | 369 | "pop %%ebx \n\t":::); |
|
- | 370 | return ret; |
|
- | 371 | } |
|
- | 372 | ||
- | 373 | extern void* (*_tl_node_poi_get_data_asm)(treelist *, treelist_node*) __attribute__((__stdcall__)); |
|
- | 374 | ///;âçÿòü óêàçàòåëü íà äàííûå óçëà |
|
- | 375 | ///input: |
|
- | 376 | /// tlist - pointer to 'TreeList' struct |
|
- | 377 | /// node_p - node param struct |
|
- | 378 | ///output - pointer |
|
- | 379 | static inline void* treelist_getnode_data(treelist *tl, treelist_node *node) |
|
- | 380 | { |
|
- | 381 | __asm__ __volatile__ ( |
|
- | 382 | "push %%edi \n\t":::); |
|
- | 383 | ||
- | 384 | void *ret = |
|
- | 385 | (*_tl_node_poi_get_data_asm)(tl, node); |
|
- | 386 | ||
- | 387 | __asm__ __volatile__ ( |
|
- | 388 | "pop %%edi \n\t":::); |
|
- | 389 | return ret; |
|
- | 390 | } |
|
- | 391 | ||
- | 392 | extern int (*tl_save_mem_asm)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__)); |
|
- | 393 | /// tlist - pointer to 'TreeList' struct |
|
- | 394 | /// opt - options: 0 - first element, 1 - add next element |
|
- | 395 | /// h_mem - pointer to memory |
|
- | 396 | /// mem_size - memory size |
|
- | 397 | ///output - error code |
|
- | 398 | static inline int treelist_save2mem(treelist *tl, int opt, void *h_mem, int mem_size) |
|
- | 399 | { |
|
- | 400 | __asm__ __volatile__ ( |
|
- | 401 | "push %%ebx \n\t" |
|
- | 402 | "push %%esi \n\t" |
|
- | 403 | "push %%edi \n\t":::); |
|
- | 404 | ||
- | 405 | int ret = |
|
- | 406 | (*tl_save_mem_asm)(tl, opt, h_mem, mem_size); |
|
- | 407 | ||
- | 408 | __asm__ __volatile__ ( |
|
- | 409 | "pop %%edi \n\t" |
|
- | 410 | "pop %%esi \n\t" |
|
- | 411 | "pop %%ebx \n\t":::); |
|
- | 412 | return ret; |
|
- | 413 | } |
|
- | 414 | ||
99 | tl_err_save_memory_size equ 10b ;íå õâàòàåò ïàìÿòè äëÿ ñîõðàíåíèÿ ýëåìåíòà |
415 | extern int (*_tl_load_mem_asm)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__)); |
- | 416 | /**input: |
|
- | 417 | ; tlist - pointer to 'TreeList' struct |
|
- | 418 | ; opt - options: element index + (2*(add mode)+(init mode)) shl 16, tl_load_mode_add equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè |
|
- | 419 | ; h_mem - pointer to memory |
|
- | 420 | ; mem_size - memory size |
|
- | 421 | ; ðàçìåð ïàìÿòè, ïîêà íå èñïîëüçóåòñÿ (íàçíà÷àëñÿ äëÿ êîíòðîëÿ) |
|
- | 422 | ; äëÿ åãî èñïîëüçîâàíèÿ íóæíî äîðàáîòàòü ôóíêöèþ |
|
- | 423 | ;output: |
|
- | 424 | ; eax - error code |
|
- | 425 | ;memory header format: |
|
- | 426 | ; +0 - (4) 'tree' |
|
- | 427 | ; +4 - (2) info size |
|
- | 428 | ; +6 - (4) count nodes |
|
- | 429 | ; +10 - (4) tlist style |
|
- | 430 | ; +14 - (4) cursor pos |
|
- | 431 | ; +18 - (2) info capt offs |
|
- | 432 | ; +20 - (2) info capt len |
|
- | 433 | ; +22 - (4) scroll pos |
|
- | 434 | ;memory data format: |
|
- | 435 | ; +26 - (info size + 8) * count nodes */ |
|
- | 436 | static inline int treelist_load4mem(treelist *tl, int opt, void *h_mem, int mem_size) |
|
- | 437 | { |
|
- | 438 | __asm__ __volatile__ ( |
|
- | 439 | "push %%ebx \n\t" |
|
- | 440 | "push %%esi \n\t" |
|
- | 441 | "push %%edi \n\t":::); |
|
- | 442 | ||
- | 443 | int ret = |
|
- | 444 | (*_tl_load_mem_asm)(tl, opt, h_mem, mem_size); |
|
- | 445 | ||
- | 446 | __asm__ __volatile__ ( |
|
- | 447 | "pop %%edi \n\t" |
|
- | 448 | "pop %%esi \n\t" |
|
- | 449 | "pop %%ebx \n\t":::); |
|
- | 450 | return ret; |
|
100 | tl_err_load_caption equ 1b ;â ïàìÿòè íåò çàãîëîâêà 'tree' |
451 | } |
- | 452 | ||
- | 453 | extern int (*tl_get_mem_size_asm)(treelist *, void *h_mem) __attribute__((__stdcall__)); |
|
- | 454 | /// ;áåðåò ðàçìåð ïàìÿòè çàíÿòîé ôóíêöèåé tl_save_mem ïðè ñîõðàíåíèè ýëåìåíòîâ |
|
- | 455 | /// tlist - pointer to 'TreeList' struct |
|
- | 456 | /// h_mem - pointer to saved memory |
|
- | 457 | static inline int treelist_get_memsize(treelist *tl, void *h_mem) |
|
- | 458 | { |
|
- | 459 | __asm__ __volatile__ ( |
|
- | 460 | "push %%ebx \n\t" |
|
- | 461 | "push %%edi \n\t":::); |
|
- | 462 | ||
- | 463 | int ret = |
|
- | 464 | (*tl_get_mem_size_asm)(tl, h_mem); |
|
- | 465 | ||
- | 466 | __asm__ __volatile__ ( |
|
101 | tl_err_load_info_size equ 100b ;íå ñîâïàäàåò ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû ïðè îòêðûòèè |
467 | "pop %%edi \n\t" |
Line 102... | Line 468... | ||
102 | tl_load_mode_add equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè |
468 | "pop %%ebx \n\t":::); |