Subversion Repositories Kolibri OS

Rev

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__));