Rev 6612 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6612 | Rev 6615 | ||
---|---|---|---|
Line 100... | Line 100... | ||
100 | extern void (*tl_node_move_up)(treelist *) __attribute__((__stdcall__)); |
100 | extern void (*tl_node_move_up)(treelist *) __attribute__((__stdcall__)); |
Line 101... | Line 101... | ||
101 | 101 | ||
102 | ///ïåðåìåùàåì óçåë âíèç |
102 | ///ïåðåìåùàåì óçåë âíèç |
Line 103... | Line -... | ||
103 | extern void (*tl_node_move_down)(treelist *) __attribute__((__stdcall__)); |
- | |
104 | 103 | extern void (*tl_node_move_down)(treelist *) __attribute__((__stdcall__)); |
|
105 | extern void (*tl_data_init_asm)(treelist *) __attribute__((__stdcall__)); |
104 | |
106 | ///âûäåëåíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð) |
- | |
107 | static inline void treelist_data_init(treelist *tl) |
- | |
108 | { |
- | |
Line 109... | Line -... | ||
109 | __asm__ __volatile__ ( |
- | |
110 | "push %%edi \n\t":::); |
- | |
111 | - | ||
112 | (*tl_data_init_asm)(tl); |
- | |
113 | - | ||
Line 114... | Line -... | ||
114 | __asm__ __volatile__ ( |
- | |
115 | "pop %%edi \n\t":::); |
105 | ///âûäåëåíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð) |
- | 106 | extern void (*tl_data_init)(treelist *) __attribute__((__stdcall__)); |
|
116 | } |
107 | |
117 | 108 | ||
118 | extern void (*tl_data_clear_asm)(treelist *) __attribute__((__stdcall__)); |
- | |
119 | ///î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð) |
- | |
120 | static inline void treelist_data_clear(treelist *tl) |
- | |
121 | { |
109 | ///î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð) |
122 | __asm__ __volatile__ ( |
- | |
123 | "push %%edi \n\t":::); |
- | |
124 | - | ||
125 | (*tl_data_clear_asm)(tl); |
110 | extern void (*tl_data_clear)(treelist *) __attribute__((__stdcall__)); |
126 | 111 | static inline void treelist_data_clear(treelist *tl) |
|
Line 127... | Line -... | ||
127 | __asm__ __volatile__ ( |
- | |
128 | "pop %%edi \n\t":::); |
112 | { |
129 | free(tl->p_scroll); |
113 | (*tl_data_clear)(tl); |
130 | } |
- | |
131 | - | ||
132 | extern void (*tl_info_clear_asm)(treelist *) __attribute__((__stdcall__)); |
- | |
133 | ///î÷èñòêà ñïèñêà (èíôîðìàöèè) |
- | |
134 | static inline void treelist_info_clear(treelist *tl) |
- | |
135 | { |
- | |
136 | __asm__ __volatile__ ( |
- | |
137 | "push %%edi \n\t":::); |
- | |
138 | - | ||
Line 139... | Line 114... | ||
139 | (*tl_info_clear_asm)(tl); |
114 | free(tl->p_scroll); |
140 | 115 | } |
|
141 | __asm__ __volatile__ ( |
116 | |
142 | "pop %%edi \n\t":::); |
117 | ///î÷èñòêà ñïèñêà (èíôîðìàöèè) |
Line 151... | Line 126... | ||
151 | "call *%1 \n\t"::"a"(code.val), "m"(tl_key_asm), "m"(tl):); // indirect call with asterisk * |
126 | "call *%1 \n\t"::"a"(code.val), "m"(tl_key_asm), "m"(tl):); // indirect call with asterisk * |
Line 152... | Line 127... | ||
152 | 127 | ||
153 | // (*tl_key_asm)(tl); |
128 | // (*tl_key_asm)(tl); |
Line 154... | Line -... | ||
154 | } |
- | |
155 | 129 | } |
|
156 | extern void (*tl_info_undo_asm)(treelist *) __attribute__((__stdcall__)); |
130 | |
157 | ///îòìåíà äåéñòâèÿ |
- | |
158 | static inline void treelist_undo(treelist *tl) |
- | |
159 | { |
- | |
160 | __asm__ __volatile__ ( |
- | |
161 | "push %%edi \n\t":::); |
- | |
162 | - | ||
163 | (*tl_info_undo_asm)(tl); |
- | |
164 | - | ||
165 | __asm__ __volatile__ ( |
- | |
Line 166... | Line -... | ||
166 | "pop %%edi \n\t":::); |
- | |
167 | } |
131 | ///îòìåíà äåéñòâèÿ |
168 | 132 | extern void (*tl_info_undo)(treelist *) __attribute__((__stdcall__)); |
|
169 | extern void (*tl_info_redo_asm)(treelist *) __attribute__((__stdcall__)); |
- | |
170 | ///ïîâòîð äåéñòâèÿ |
- | |
171 | static inline void treelist_redo(treelist *tl) |
- | |
172 | { |
- | |
173 | __asm__ __volatile__ ( |
- | |
Line 174... | Line -... | ||
174 | "push %%edi \n\t":::); |
- | |
175 | - | ||
176 | (*tl_info_redo_asm)(tl); |
- | |
177 | - | ||
178 | __asm__ __volatile__ ( |
133 | |
179 | "pop %%edi \n\t":::); |
134 | ///ïîâòîð äåéñòâèÿ |
180 | } |
135 | extern void (*tl_info_redo)(treelist *) __attribute__((__stdcall__)); |
181 | 136 | ||
182 | extern void (*tl_node_add_asm)(treelist *, uint32_t n_opt, void *n_info) __attribute__((__stdcall__)); |
137 | extern void (*tl_node_add)(treelist *, uint32_t n_opt, void *n_info) __attribute__((__stdcall__)); |
183 | ///äîáàâèòü óçåë |
138 | ///äîáàâèòü óçåë |
184 | ///input: |
139 | ///input: |
185 | /// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà |
140 | /// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà |
186 | /// n_opt - îïöèè äîáàâëåíèÿ |
- | |
187 | /// n_info - óêàçàòåëü íà äîáàâëÿåìûå äàííûå |
- | |
188 | static inline void treelist_node_add(treelist *tl, void *n_info, uint16_t type, uint8_t clos, uint8_t lev) |
- | |
189 | { |
- | |
190 | __asm__ __volatile__ ( |
141 | /// n_opt - îïöèè äîáàâëåíèÿ |
191 | "push %%ebx \n\t" |
142 | /// n_info - óêàçàòåëü íà äîáàâëÿåìûå äàííûå |
192 | "push %%edi \n\t":::); |
- | |
193 | - | ||
194 | uint32_t n_opt = (type << 16) | (clos << 8) | lev; |
- | |
195 | (*tl_node_add_asm)(tl, n_opt, n_info); |
- | |
196 | 143 | static inline void treelist_node_add(treelist *tl, void *n_info, uint16_t type, uint8_t clos, uint8_t lev) |
|
Line 197... | Line -... | ||
197 | __asm__ __volatile__ ( |
- | |
198 | "pop %%edi \n\t" |
144 | { |
199 | "pop %%ebx \n\t":::); |
145 | uint32_t n_opt = (type << 16) | (clos << 8) | lev; |
200 | } |
146 | (*tl_node_add)(tl, n_opt, n_info); |
201 | 147 | } |
|
202 | extern void (*tl_node_set_data_asm)(treelist *, void *n_info) __attribute__((__stdcall__)); |
148 | |
203 | ///çàïèñàòü â òåêóùèé óçåë |
- | |
204 | ///input: |
- | |
205 | /// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà |
- | |
206 | /// n_info - óêàçàòåëü íà äàííûå |
- | |
207 | static inline void treelist_node_setdata(treelist *tl, void *n_info) |
- | |
208 | { |
- | |
209 | __asm__ __volatile__ ( |
- | |
210 | "push %%esi \n\t" |
- | |
211 | "push %%edi \n\t":::); |
- | |
212 | - | ||
213 | (*tl_node_set_data_asm)(tl, n_info); |
- | |
Line 214... | Line -... | ||
214 | - | ||
215 | __asm__ __volatile__ ( |
149 | ///çàïèñàòü â òåêóùèé óçåë |
216 | "pop %%edi \n\t" |
150 | ///input: |
217 | "pop %%esi \n\t":::); |
- | |
218 | } |
- | |
219 | - | ||
Line 220... | Line -... | ||
220 | extern void* (*tl_node_get_data_asm)(treelist *) __attribute__((__stdcall__)); |
- | |
221 | ///âçÿòü óêàçàòåëü íà äàííûå óçëà ïîä êóðñîðîì |
- | |
222 | static inline void* treelist_getdata(treelist *tl) |
- | |
223 | { |
- | |
224 | __asm__ __volatile__ ( |
- | |
225 | "push %%edi \n\t":::); |
- | |
226 | - | ||
227 | void *res = |
- | |
228 | (*tl_node_get_data_asm)(tl); |
- | |
229 | 151 | /// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà |
|
230 | __asm__ __volatile__ ( |
152 | /// n_info - óêàçàòåëü íà äàííûå |
231 | "pop %%edi \n\t":::); |
- | |
232 | return res; |
- | |
233 | } |
- | |
234 | - | ||
235 | extern void (*tl_node_delete_asm)(treelist *) __attribute__((__stdcall__)); |
- | |
Line 236... | Line -... | ||
236 | ///óäàëèòü óçåë ïîä êóðñîðîì |
- | |
237 | static inline void treelist_node_delete(treelist *tl) |
- | |
238 | { |
- | |
239 | __asm__ __volatile__ ( |
- | |
240 | "push %%edi \n\t":::); |
- | |
241 | 153 | extern void (*tl_node_set_data)(treelist *, void *n_info) __attribute__((__stdcall__)); |
|
242 | (*tl_node_delete_asm)(tl); |
154 | |
243 | - | ||
244 | __asm__ __volatile__ ( |
- | |
245 | "pop %%edi \n\t":::); |
- | |
246 | } |
- | |
247 | - | ||
Line 248... | Line -... | ||
248 | extern void (*tl_cur_beg_asm)(treelist *) __attribute__((__stdcall__)); |
- | |
249 | ///ïîñòàâèòü êóðñîð íà ïåðâûé óçåë |
- | |
250 | static inline void treelist_cursor_begin(treelist *tl) |
- | |
251 | { |
- | |
252 | __asm__ __volatile__ ( |
- | |
253 | "push %%edi \n\t":::); |
155 | ///âçÿòü óêàçàòåëü íà äàííûå óçëà ïîä êóðñîðîì |
254 | 156 | extern void* (*tl_node_get_data)(treelist *) __attribute__((__stdcall__)); |
|
255 | (*tl_cur_beg_asm)(tl); |
- | |
256 | - | ||
257 | __asm__ __volatile__ ( |
- | |
258 | "pop %%edi \n\t":::); |
- | |
259 | } |
- | |
260 | - | ||
261 | extern void (*tl_cur_next_asm)(treelist *) __attribute__((__stdcall__)); |
- | |
262 | ///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå |
- | |
263 | static inline void treelist_cursor_next(treelist *tl) |
- | |
264 | { |
- | |
265 | __asm__ __volatile__ ( |
- | |
266 | "push %%ebx \n\t" |
- | |
267 | "push %%esi \n\t" |
- | |
Line 268... | Line -... | ||
268 | "push %%edi \n\t":::); |
- | |
269 | 157 | ||
270 | (*tl_cur_next_asm)(tl); |
158 | ///óäàëèòü óçåë ïîä êóðñîðîì |
271 | - | ||
272 | __asm__ __volatile__ ( |
- | |
273 | "pop %%edi \n\t" |
- | |
274 | "pop %%esi \n\t" |
- | |
275 | "pop %%ebx \n\t":::); |
- | |
276 | } |
- | |
277 | - | ||
278 | extern void (*tl_cur_perv_asm)(treelist *) __attribute__((__stdcall__)); |
- | |
279 | ///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå |
- | |
280 | static inline void treelist_cursor_prev(treelist *tl) |
- | |
281 | { |
- | |
282 | __asm__ __volatile__ ( |
- | |
283 | "push %%ebx \n\t" |
- | |
Line 284... | Line -... | ||
284 | "push %%esi \n\t" |
- | |
285 | "push %%edi \n\t":::); |
159 | extern void (*tl_node_delete)(treelist *) __attribute__((__stdcall__)); |
286 | 160 | ||
287 | (*tl_cur_perv_asm)(tl); |
- | |
288 | - | ||
289 | __asm__ __volatile__ ( |
- | |
Line 290... | Line -... | ||
290 | "pop %%edi \n\t" |
- | |
291 | "pop %%esi \n\t" |
- | |
292 | "pop %%ebx \n\t":::); |
- | |
293 | } |
- | |
294 | - | ||
295 | extern void (*tl_node_close_open_asm)(treelist *) __attribute__((__stdcall__)); |
- | |
296 | ///îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû) |
- | |
297 | static inline void treelist_close_open(treelist *tl) |
161 | ///ïîñòàâèòü êóðñîð íà ïåðâûé óçåë |
298 | { |
162 | extern void (*tl_cur_beg)(treelist *) __attribute__((__stdcall__)); |
299 | __asm__ __volatile__ ( |
- | |
300 | "push %%edi \n\t":::); |
- | |
301 | - | ||
302 | (*tl_node_close_open_asm)(tl); |
- | |
303 | - | ||
Line 304... | Line -... | ||
304 | __asm__ __volatile__ ( |
- | |
305 | "pop %%edi \n\t":::); |
- | |
306 | } |
- | |
307 | - | ||
308 | extern void (*tl_node_lev_inc_asm)(treelist *) __attribute__((__stdcall__)); |
- | |
309 | ///óâåëè÷èòü óðîâåíü |
163 | |
310 | static inline void treelist_level_inc(treelist *tl) |
164 | ///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå |
311 | { |
- | |
312 | __asm__ __volatile__ ( |
- | |
313 | "push %%edi \n\t":::); |
- | |
314 | - | ||
315 | (*tl_node_lev_inc_asm)(tl); |
- | |
Line 316... | Line -... | ||
316 | - | ||
317 | __asm__ __volatile__ ( |
- | |
318 | "pop %%edi \n\t":::); |
- | |
319 | } |
- | |
320 | - | ||
321 | extern void (*tl_node_lev_dec_asm)(treelist *) __attribute__((__stdcall__)); |
165 | extern void (*tl_cur_next)(treelist *) __attribute__((__stdcall__)); |
322 | ///óìåíüøèòü óðîâåíü |
166 | |
323 | static inline void treelist_level_dec(treelist *tl) |
167 | ///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå |
324 | { |
168 | extern void (*tl_cur_perv)(treelist *) __attribute__((__stdcall__)); |
325 | __asm__ __volatile__ ( |
169 | |
326 | "push %%edi \n\t":::); |
170 | ///îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû) |
327 | - | ||
328 | (*tl_node_lev_dec_asm)(tl); |
- | |
329 | - | ||
330 | __asm__ __volatile__ ( |
- | |
331 | "pop %%edi \n\t":::); |
- | |
332 | } |
- | |
333 | - | ||
334 | extern treelist_node* (*tl_node_poi_get_info_asm)(treelist *, int node_ind) __attribute__((__stdcall__)); |
- | |
335 | ///âçÿòü óêàçàòåëü íà ñòðóêòóðó óçëà â óêàçàííîé ïîçèöèè |
- | |
336 | ///input: |
- | |
337 | /// tlist - pointer to 'TreeList' struct |
- | |
338 | /// node_ind - node index |
- | |
339 | ///output - pointer to node info or NULL |
- | |
Line 340... | Line -... | ||
340 | static inline treelist_node* treelist_getnode(treelist *tl, int node_ind) |
- | |
341 | { |
171 | extern void (*tl_node_close_open)(treelist *) __attribute__((__stdcall__)); |
342 | __asm__ __volatile__ ( |
172 | |
343 | "push %%ebx \n\t" |
173 | ///óâåëè÷èòü óðîâåíü |
344 | "push %%edi \n\t":::); |
174 | extern void (*tl_node_lev_inc)(treelist *) __attribute__((__stdcall__)); |
345 | 175 | ||
346 | treelist_node *ret = |
176 | ///óìåíüøèòü óðîâåíü |
347 | (*tl_node_poi_get_info_asm)(tl, node_ind); |
- | |
348 | - | ||
349 | __asm__ __volatile__ ( |
- | |
350 | "pop %%edi \n\t" |
- | |
351 | "pop %%ebx \n\t":::); |
- | |
352 | return ret; |
- | |
353 | } |
- | |
354 | - | ||
355 | extern treelist_node* (*tl_node_poi_get_next_info_asm)(treelist *, treelist_node*) __attribute__((__stdcall__)); |
- | |
356 | ///âçÿòü óêàçàòåëü íà ñëåäóùóþ ñòðóêòóðó óçëà |
- | |
357 | ///input: |
- | |
358 | /// tlist - pointer to 'TreeList' struct |
- | |
359 | /// node_p - node param struct |
- | |
Line 360... | Line -... | ||
360 | ///output - pointer to next node struct or NULL |
- | |
361 | static inline treelist_node* treelist_getnode_next(treelist *tl, treelist_node* node) |
177 | extern void (*tl_node_lev_dec)(treelist *) __attribute__((__stdcall__)); |
362 | { |
178 | |
363 | __asm__ __volatile__ ( |
179 | ///âçÿòü óêàçàòåëü íà ñòðóêòóðó óçëà â óêàçàííîé ïîçèöèè |
364 | "push %%ebx \n\t" |
180 | ///input: |
365 | "push %%edi \n\t":::); |
181 | /// tlist - pointer to 'TreeList' struct |
366 | 182 | /// node_ind - node index |
|
367 | treelist_node *ret = |
- | |
368 | (*tl_node_poi_get_next_info_asm)(tl, node); |
- | |
369 | - | ||
Line 370... | Line -... | ||
370 | __asm__ __volatile__ ( |
- | |
371 | "pop %%edi \n\t" |
- | |
372 | "pop %%ebx \n\t":::); |
- | |
373 | return ret; |
- | |
374 | } |
- | |
375 | - | ||
376 | extern void* (*_tl_node_poi_get_data_asm)(treelist *, treelist_node*) __attribute__((__stdcall__)); |
- | |
377 | ///;âçÿòü óêàçàòåëü íà äàííûå óçëà |
- | |
378 | ///input: |
- | |
379 | /// tlist - pointer to 'TreeList' struct |
183 | ///output - pointer to node info or NULL |
380 | /// node_p - node param struct |
184 | extern treelist_node* (*tl_node_poi_get_info)(treelist *, int node_ind) __attribute__((__stdcall__)); |
381 | ///output - pointer |
185 | |
382 | static inline void* treelist_getnode_data(treelist *tl, treelist_node *node) |
186 | ///âçÿòü óêàçàòåëü íà ñëåäóùóþ ñòðóêòóðó óçëà |
383 | { |
187 | ///input: |
384 | __asm__ __volatile__ ( |
188 | /// tlist - pointer to 'TreeList' struct |
385 | "push %%edi \n\t":::); |
- | |
386 | - | ||
387 | void *ret = |
- | |
388 | (*_tl_node_poi_get_data_asm)(tl, node); |
- | |
389 | - | ||
390 | __asm__ __volatile__ ( |
- | |
391 | "pop %%edi \n\t":::); |
- | |
392 | return ret; |
- | |
Line 393... | Line -... | ||
393 | } |
- | |
394 | - | ||
395 | extern int (*tl_save_mem_asm)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__)); |
- | |
396 | /// tlist - pointer to 'TreeList' struct |
- | |
397 | /// opt - options: 0 - first element, 1 - add next element |
- | |
398 | /// h_mem - pointer to memory |
- | |
399 | /// mem_size - memory size |
- | |
400 | ///output - error code |
- | |
401 | static inline int treelist_save2mem(treelist *tl, int opt, void *h_mem, int mem_size) |
189 | /// node_p - node param struct |
402 | { |
190 | ///output - pointer to next node struct or NULL |
403 | __asm__ __volatile__ ( |
191 | extern treelist_node* (*tl_node_poi_get_next_info)(treelist *, treelist_node*) __attribute__((__stdcall__)); |
404 | "push %%ebx \n\t" |
192 | |
405 | "push %%esi \n\t" |
193 | ///;âçÿòü óêàçàòåëü íà äàííûå óçëà |
Line 434... | Line 222... | ||
434 | ; +18 - (2) info capt offs |
222 | ; +18 - (2) info capt offs |
435 | ; +20 - (2) info capt len |
223 | ; +20 - (2) info capt len |
436 | ; +22 - (4) scroll pos |
224 | ; +22 - (4) scroll pos |
437 | ;memory data format: |
225 | ;memory data format: |
438 | ; +26 - (info size + 8) * count nodes */ |
226 | ; +26 - (info size + 8) * count nodes */ |
439 | static inline int treelist_load4mem(treelist *tl, int opt, void *h_mem, int mem_size) |
227 | extern int (*_tl_load_mem)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__)); |
440 | { |
- | |
441 | __asm__ __volatile__ ( |
- | |
442 | "push %%ebx \n\t" |
- | |
443 | "push %%esi \n\t" |
- | |
444 | "push %%edi \n\t":::); |
- | |
445 | - | ||
446 | int ret = |
- | |
447 | (*_tl_load_mem_asm)(tl, opt, h_mem, mem_size); |
- | |
Line 448... | Line -... | ||
448 | - | ||
449 | __asm__ __volatile__ ( |
- | |
450 | "pop %%edi \n\t" |
- | |
451 | "pop %%esi \n\t" |
- | |
452 | "pop %%ebx \n\t":::); |
- | |
453 | return ret; |
- | |
454 | } |
- | |
455 | - | ||
456 | extern int (*tl_get_mem_size_asm)(treelist *, void *h_mem) __attribute__((__stdcall__)); |
228 | |
457 | /// ;áåðåò ðàçìåð ïàìÿòè çàíÿòîé ôóíêöèåé tl_save_mem ïðè ñîõðàíåíèè ýëåìåíòîâ |
229 | /// ;áåðåò ðàçìåð ïàìÿòè çàíÿòîé ôóíêöèåé tl_save_mem ïðè ñîõðàíåíèè ýëåìåíòîâ |
458 | /// tlist - pointer to 'TreeList' struct |
230 | /// tlist - pointer to 'TreeList' struct |
459 | /// h_mem - pointer to saved memory |
231 | /// h_mem - pointer to saved memory |
460 | static inline int treelist_get_memsize(treelist *tl, void *h_mem) |
- | |
461 | { |
- | |
462 | __asm__ __volatile__ ( |
- | |
463 | "push %%ebx \n\t" |
- | |
464 | "push %%edi \n\t":::); |
- | |
465 | - | ||
466 | int ret = |
- | |
467 | (*tl_get_mem_size_asm)(tl, h_mem); |
- | |
468 | - | ||
469 | __asm__ __volatile__ ( |
- | |
470 | "pop %%edi \n\t" |
- | |
471 | "pop %%ebx \n\t":::); |
- | |
472 | return ret; |
- | |
Line 473... | Line 232... | ||
473 | } |
232 | extern int (*tl_get_mem_size)(treelist *, void *h_mem) __attribute__((__stdcall__)); |