Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 6612 → Rev 6615

/contrib/C_Layer/INCLUDE/kolibri_editor.h
12,8 → 12,8
struct __attribute__ ((__packed__)) editor_symbol {
uint8_t c; // +0 ñèìâîë
uint8_t col; // +1 öâåò
struct editor_symbol *prev; // +2
struct editor_symbol *next; // +6 óêàçàòåëè
uint32_t prev; // +2 èíäåêñ ïðåäûäóùåãî
uint32_t next; // +6 óêàçàòåëè (èíäåêñ ñëåäóþùåãî)
uint32_t tc; // +10 âðåì. ñîçäàíèÿ
uint32_t td; // +14 âðåì. óäàëåíèÿ
};
39,8 → 39,8
uint32_t seln_x1;
uint32_t seln_y1;
struct editor_symbol *tex; // text memory pointer
struct editor_symbol *tex_1; // text first symbol pointer
struct editor_symbol *tex_end;// text end memory pointer
struct editor_symbol *tex_1; // óêàçàòåëü çà ïîñëåäíèì ñóùåñòâóþùèì ñèìâîëîì (êîíåö ôàéëà)
struct editor_symbol *tex_end;// text end memory pointer (óêàçàòåëü çà êîíöîì âûäåëåííîãî áóôåðà äëÿ òåêñòà)
uint32_t cur_x; //êîîðäèíàòà x êóðñîðà
uint32_t cur_y; //êîîðäèíàòà y êóðñîðà
uint32_t max_chars; // TE_MAXCHARS ;+86 ìàêñèìàëüíîå ÷èñëî ñèìâîëîâ â îäíîì äîêóìåíòå
161,88 → 161,23
 
 
 
extern void (*ted_but_sumb_upper_asm)(editor *) __attribute__((__stdcall__));
static inline void editor_selected_toupper(editor *ed)
{
__asm__ __volatile__ (
"push %%edi \n\t"
"push %%esi \n\t":::);
extern void (*ted_but_sumb_upper)(editor *) __attribute__((__stdcall__));
 
(*ted_but_sumb_upper_asm)(ed);
extern void (*ted_but_sumb_lover)(editor *) __attribute__((__stdcall__));
 
__asm__ __volatile__ (
"pop %%esi \n\t"
"pop %%edi \n\t":::);
}
extern void (*ted_but_convert_by_table)(editor *, char* table) __attribute__((__stdcall__));
 
extern void (*ted_but_sumb_lover_asm)(editor *) __attribute__((__stdcall__));
static inline void editor_selected_tolower(editor *ed)
{
__asm__ __volatile__ (
"push %%edi \n\t"
"push %%esi \n\t":::);
 
(*ted_but_sumb_lover_asm)(ed);
 
__asm__ __volatile__ (
"pop %%esi \n\t"
"pop %%edi \n\t":::);
}
 
 
extern void (*ted_but_convert_by_table_asm)(editor *, char* table) __attribute__((__stdcall__));
static inline void editor_convert_by_table(editor *ed, char* table)
{
__asm__ __volatile__ (
"push %%edi \n\t"
"push %%esi \n\t":::);
 
(*ted_but_convert_by_table_asm)(ed, table);
 
__asm__ __volatile__ (
"pop %%esi \n\t"
"pop %%edi \n\t":::);
}
 
extern int (*ted_can_save_asm)(editor *) __attribute__((__stdcall__));
static inline int editor_can_save(editor *ed)
/// return 1 if need to be saved (has changes), 0 otherwise
{
int ret;
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern int (*ted_can_save)(editor *) __attribute__((__stdcall__));
 
(*ted_can_save_asm)(ed);
 
__asm__ __volatile__ (
"pop %%edi \n\t":"=a"(ret)::);
return ret;
}
 
extern void (*ted_clear_asm)(editor *, int) __attribute__((__stdcall__));
static inline void editor_clear(editor *ed, int all)
/// all==1 - clear all memory
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void (*ted_clear)(editor *, int all) __attribute__((__stdcall__));
 
(*ted_clear_asm)(ed, all);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*ted_delete_asm)(editor *) __attribute__((__stdcall__));
extern void (*ted_delete)(editor *) __attribute__((__stdcall__));
static inline void editor_delete(editor *ed)
/// frees all memory (destroy)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
 
(*ted_delete_asm)(ed);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
(*ted_delete)(ed);
free(ed->scr_w);
free(ed->scr_h);
free(ed->buffer);
249,34 → 184,12
free(ed->buffer_find);
}
 
extern void (*ted_init_asm)(editor *) __attribute__((__stdcall__));
static inline void editor_init(editor *ed)
/// allocate memory
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void (*ted_init)(editor *) __attribute__((__stdcall__));
 
(*ted_init_asm)(ed);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
/// return 1 if have selection
extern int (*ted_is_select)(editor *) __attribute__((__stdcall__));
static inline int editor_is_select(editor *ed)
/// return 1 if have selection
{
int ret;
__asm__ __volatile__ (
"push %%ebx \n\t":::);
 
(*ted_is_select)(ed);
 
__asm__ __volatile__ (
"pop %%ebx \n\t":"=a"(ret)::);
return ret;
}
 
enum control_keys {
KM_SHIFT = 0x00010000,
KM_CTRL = 0x00020000,
330,62 → 243,19
}
 
extern void (*ted_but_cut)(editor *) __attribute__((__stdcall__));
static inline void editor_cut(editor *ed)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
 
(*ted_but_cut)(ed);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*ted_but_undo)(editor *) __attribute__((__stdcall__));
static inline void editor_undo(editor *ed)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
 
(*ted_but_undo)(ed);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*ted_but_redo)(editor *) __attribute__((__stdcall__));
static inline void editor_redo(editor *ed)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
 
(*ted_but_redo)(ed);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*ted_but_reverse)(editor *) __attribute__((__stdcall__));
static inline void editor_reverse(editor *ed)
{
__asm__ __volatile__ (
"push %%edi \n\t"
"push %%ebx\n\t":::);
 
(*ted_but_reverse)(ed);
 
__asm__ __volatile__ (
"pop %%ebx \n\t"
"pop %%edi \n\t":::);
}
 
extern void (*ted_text_colored_asm)() __attribute__((__stdcall__));
static inline void editor_text_colored(editor *ed)
{
__asm__ __volatile__ (
"nop \n\t"::"D"(ed):);
"call *%0 \n\t"::"m"(ted_text_colored_asm), "D"(ed):);
 
(*ted_text_colored_asm)();
}
 
static inline
494,8 → 364,7
 
ed->el_focus = editor_interlock;
 
// ??? saveregs ax,cx,di
editor_init(ed); // memory allocation, cleaning
(*ted_init)(ed); // memory allocation, cleaning
ed->syntax_file = (char*)&default_syntax;
(*ted_init_syntax_file)(ed); // load colors and syntax highlight
ed->help_text_f1 = f1_table; // override if not aligned immediately after syntax words
504,5 → 373,53
return ed;
}
 
/// return 1 if symbol is not visible (deleted or undo-ed)
static inline int editor_symbol_not_vis(editor* ed, struct editor_symbol* sym)
{
return (sym->td && sym->td + ed->tim_undo <= ed->tim_ch) || (sym->tc > ed->tim_ch - ed->tim_undo);
}
 
/// returns next good symbol by index
static inline
uint32_t editor_iterat_next(editor* ed, uint32_t idx)
{
uint32_t i;
if (ed->tim_undo)
{
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);
} else
{
for (i = ed->tex[idx].next; i != 0 && (ed->tex[i].c == '\n' || ed->tex[i].td); i = ed->tex[i].next);
}
return i;
}
 
// returns malloc'ed mem
static inline
char* editor_get_text(editor* ed)
{
char *buf = malloc(ed->max_chars), *pc = buf;
if (!pc) return NULL;
 
int i;
// *pc++ = ed->tex[0].c;
for (i = ed->tex[0].next; i; i = editor_iterat_next(ed, i)) *pc++ = ed->tex[i].c;
*pc++ = '\0';
 
return buf;
}
 
/*
char* editor_get_text20(editor* ed)
{
char *buf = malloc(ed->max_chars), *pc = buf;
if (!pc) return NULL;
 
int i = ed->tex[0].next, c = 0;
for (; i > 0 && c < 30; c++, i = ed->tex[i].next) *pc++ = ed->tex[i].c;
*pc++ = '\0';
 
return buf;
}
*/
#endif // KOLIBRI_EDITOR_H
/contrib/C_Layer/INCLUDE/kolibri_treelist.h
102,46 → 102,21
///ïåðåìåùàåì óçåë âíèç
extern void (*tl_node_move_down)(treelist *) __attribute__((__stdcall__));
 
extern void (*tl_data_init_asm)(treelist *) __attribute__((__stdcall__));
///âûäåëåíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð)
static inline void treelist_data_init(treelist *tl)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void (*tl_data_init)(treelist *) __attribute__((__stdcall__));
 
(*tl_data_init_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*tl_data_clear_asm)(treelist *) __attribute__((__stdcall__));
///î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð)
extern void (*tl_data_clear)(treelist *) __attribute__((__stdcall__));
static inline void treelist_data_clear(treelist *tl)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
 
(*tl_data_clear_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
(*tl_data_clear)(tl);
free(tl->p_scroll);
}
 
extern void (*tl_info_clear_asm)(treelist *) __attribute__((__stdcall__));
///î÷èñòêà ñïèñêà (èíôîðìàöèè)
static inline void treelist_info_clear(treelist *tl)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void (*tl_info_clear)(treelist *) __attribute__((__stdcall__));
 
(*tl_info_clear_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*tl_key_asm)(treelist *) __attribute__((__stdcall__));
///ðåàêöèÿ íà êëàâèàòóðó
__attribute__((__stdcall__)) static inline void treelist_key(treelist *tl, oskey_t code)
153,33 → 128,13
// (*tl_key_asm)(tl);
}
 
extern void (*tl_info_undo_asm)(treelist *) __attribute__((__stdcall__));
///îòìåíà äåéñòâèÿ
static inline void treelist_undo(treelist *tl)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void (*tl_info_undo)(treelist *) __attribute__((__stdcall__));
 
(*tl_info_undo_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*tl_info_redo_asm)(treelist *) __attribute__((__stdcall__));
///ïîâòîð äåéñòâèÿ
static inline void treelist_redo(treelist *tl)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void (*tl_info_redo)(treelist *) __attribute__((__stdcall__));
 
(*tl_info_redo_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*tl_node_add_asm)(treelist *, uint32_t n_opt, void *n_info) __attribute__((__stdcall__));
extern void (*tl_node_add)(treelist *, uint32_t n_opt, void *n_info) __attribute__((__stdcall__));
///äîáàâèòü óçåë
///input:
/// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà
187,235 → 142,68
/// n_info - óêàçàòåëü íà äîáàâëÿåìûå äàííûå
static inline void treelist_node_add(treelist *tl, void *n_info, uint16_t type, uint8_t clos, uint8_t lev)
{
__asm__ __volatile__ (
"push %%ebx \n\t"
"push %%edi \n\t":::);
 
uint32_t n_opt = (type << 16) | (clos << 8) | lev;
(*tl_node_add_asm)(tl, n_opt, n_info);
 
__asm__ __volatile__ (
"pop %%edi \n\t"
"pop %%ebx \n\t":::);
(*tl_node_add)(tl, n_opt, n_info);
}
 
extern void (*tl_node_set_data_asm)(treelist *, void *n_info) __attribute__((__stdcall__));
///çàïèñàòü â òåêóùèé óçåë
///input:
/// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà
/// n_info - óêàçàòåëü íà äàííûå
static inline void treelist_node_setdata(treelist *tl, void *n_info)
{
__asm__ __volatile__ (
"push %%esi \n\t"
"push %%edi \n\t":::);
extern void (*tl_node_set_data)(treelist *, void *n_info) __attribute__((__stdcall__));
 
(*tl_node_set_data_asm)(tl, n_info);
 
__asm__ __volatile__ (
"pop %%edi \n\t"
"pop %%esi \n\t":::);
}
 
extern void* (*tl_node_get_data_asm)(treelist *) __attribute__((__stdcall__));
///âçÿòü óêàçàòåëü íà äàííûå óçëà ïîä êóðñîðîì
static inline void* treelist_getdata(treelist *tl)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void* (*tl_node_get_data)(treelist *) __attribute__((__stdcall__));
 
void *res =
(*tl_node_get_data_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
return res;
}
 
extern void (*tl_node_delete_asm)(treelist *) __attribute__((__stdcall__));
///óäàëèòü óçåë ïîä êóðñîðîì
static inline void treelist_node_delete(treelist *tl)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void (*tl_node_delete)(treelist *) __attribute__((__stdcall__));
 
(*tl_node_delete_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*tl_cur_beg_asm)(treelist *) __attribute__((__stdcall__));
///ïîñòàâèòü êóðñîð íà ïåðâûé óçåë
static inline void treelist_cursor_begin(treelist *tl)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void (*tl_cur_beg)(treelist *) __attribute__((__stdcall__));
 
(*tl_cur_beg_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*tl_cur_next_asm)(treelist *) __attribute__((__stdcall__));
///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå
static inline void treelist_cursor_next(treelist *tl)
{
__asm__ __volatile__ (
"push %%ebx \n\t"
"push %%esi \n\t"
"push %%edi \n\t":::);
extern void (*tl_cur_next)(treelist *) __attribute__((__stdcall__));
 
(*tl_cur_next_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t"
"pop %%esi \n\t"
"pop %%ebx \n\t":::);
}
 
extern void (*tl_cur_perv_asm)(treelist *) __attribute__((__stdcall__));
///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå
static inline void treelist_cursor_prev(treelist *tl)
{
__asm__ __volatile__ (
"push %%ebx \n\t"
"push %%esi \n\t"
"push %%edi \n\t":::);
extern void (*tl_cur_perv)(treelist *) __attribute__((__stdcall__));
 
(*tl_cur_perv_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t"
"pop %%esi \n\t"
"pop %%ebx \n\t":::);
}
 
extern void (*tl_node_close_open_asm)(treelist *) __attribute__((__stdcall__));
///îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû)
static inline void treelist_close_open(treelist *tl)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void (*tl_node_close_open)(treelist *) __attribute__((__stdcall__));
 
(*tl_node_close_open_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*tl_node_lev_inc_asm)(treelist *) __attribute__((__stdcall__));
///óâåëè÷èòü óðîâåíü
static inline void treelist_level_inc(treelist *tl)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void (*tl_node_lev_inc)(treelist *) __attribute__((__stdcall__));
 
(*tl_node_lev_inc_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern void (*tl_node_lev_dec_asm)(treelist *) __attribute__((__stdcall__));
///óìåíüøèòü óðîâåíü
static inline void treelist_level_dec(treelist *tl)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void (*tl_node_lev_dec)(treelist *) __attribute__((__stdcall__));
 
(*tl_node_lev_dec_asm)(tl);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
}
 
extern treelist_node* (*tl_node_poi_get_info_asm)(treelist *, int node_ind) __attribute__((__stdcall__));
///âçÿòü óêàçàòåëü íà ñòðóêòóðó óçëà â óêàçàííîé ïîçèöèè
///input:
/// tlist - pointer to 'TreeList' struct
/// node_ind - node index
///output - pointer to node info or NULL
static inline treelist_node* treelist_getnode(treelist *tl, int node_ind)
{
__asm__ __volatile__ (
"push %%ebx \n\t"
"push %%edi \n\t":::);
extern treelist_node* (*tl_node_poi_get_info)(treelist *, int node_ind) __attribute__((__stdcall__));
 
treelist_node *ret =
(*tl_node_poi_get_info_asm)(tl, node_ind);
 
__asm__ __volatile__ (
"pop %%edi \n\t"
"pop %%ebx \n\t":::);
return ret;
}
 
extern treelist_node* (*tl_node_poi_get_next_info_asm)(treelist *, treelist_node*) __attribute__((__stdcall__));
///âçÿòü óêàçàòåëü íà ñëåäóùóþ ñòðóêòóðó óçëà
///input:
/// tlist - pointer to 'TreeList' struct
/// node_p - node param struct
///output - pointer to next node struct or NULL
static inline treelist_node* treelist_getnode_next(treelist *tl, treelist_node* node)
{
__asm__ __volatile__ (
"push %%ebx \n\t"
"push %%edi \n\t":::);
extern treelist_node* (*tl_node_poi_get_next_info)(treelist *, treelist_node*) __attribute__((__stdcall__));
 
treelist_node *ret =
(*tl_node_poi_get_next_info_asm)(tl, node);
 
__asm__ __volatile__ (
"pop %%edi \n\t"
"pop %%ebx \n\t":::);
return ret;
}
 
extern void* (*_tl_node_poi_get_data_asm)(treelist *, treelist_node*) __attribute__((__stdcall__));
///;âçÿòü óêàçàòåëü íà äàííûå óçëà
///input:
/// tlist - pointer to 'TreeList' struct
/// node_p - node param struct
///output - pointer
static inline void* treelist_getnode_data(treelist *tl, treelist_node *node)
{
__asm__ __volatile__ (
"push %%edi \n\t":::);
extern void* (*_tl_node_poi_get_data)(treelist *, treelist_node*) __attribute__((__stdcall__));
 
void *ret =
(*_tl_node_poi_get_data_asm)(tl, node);
 
__asm__ __volatile__ (
"pop %%edi \n\t":::);
return ret;
}
 
extern int (*tl_save_mem_asm)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__));
/// tlist - pointer to 'TreeList' struct
/// opt - options: 0 - first element, 1 - add next element
/// h_mem - pointer to memory
/// mem_size - memory size
///output - error code
static inline int treelist_save2mem(treelist *tl, int opt, void *h_mem, int mem_size)
{
__asm__ __volatile__ (
"push %%ebx \n\t"
"push %%esi \n\t"
"push %%edi \n\t":::);
extern int (*tl_save_mem)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__));
 
int ret =
(*tl_save_mem_asm)(tl, opt, h_mem, mem_size);
 
__asm__ __volatile__ (
"pop %%edi \n\t"
"pop %%esi \n\t"
"pop %%ebx \n\t":::);
return ret;
}
 
extern int (*_tl_load_mem_asm)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__));
/**input:
; tlist - pointer to 'TreeList' struct
; opt - options: element index + (2*(add mode)+(init mode)) shl 16, tl_load_mode_add equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè
436,40 → 224,11
; +22 - (4) scroll pos
;memory data format:
; +26 - (info size + 8) * count nodes */
static inline int treelist_load4mem(treelist *tl, int opt, void *h_mem, int mem_size)
{
__asm__ __volatile__ (
"push %%ebx \n\t"
"push %%esi \n\t"
"push %%edi \n\t":::);
extern int (*_tl_load_mem)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__));
 
int ret =
(*_tl_load_mem_asm)(tl, opt, h_mem, mem_size);
 
__asm__ __volatile__ (
"pop %%edi \n\t"
"pop %%esi \n\t"
"pop %%ebx \n\t":::);
return ret;
}
 
extern int (*tl_get_mem_size_asm)(treelist *, void *h_mem) __attribute__((__stdcall__));
/// ;áåðåò ðàçìåð ïàìÿòè çàíÿòîé ôóíêöèåé tl_save_mem ïðè ñîõðàíåíèè ýëåìåíòîâ
/// tlist - pointer to 'TreeList' struct
/// h_mem - pointer to saved memory
static inline int treelist_get_memsize(treelist *tl, void *h_mem)
{
__asm__ __volatile__ (
"push %%ebx \n\t"
"push %%edi \n\t":::);
extern int (*tl_get_mem_size)(treelist *, void *h_mem) __attribute__((__stdcall__));
 
int ret =
(*tl_get_mem_size_asm)(tl, h_mem);
 
__asm__ __volatile__ (
"pop %%edi \n\t"
"pop %%ebx \n\t":::);
return ret;
}
 
#endif //KOLIBRI_TREELIST_H