Rev 6746 | Rev 6772 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5818 | leency | 1 | #ifndef AUTOBUILD |
2 | #include "lang.h--" |
||
3 | #endif |
||
4 | |||
6771 | leency | 5 | #define MEMSIZE 4096 * 1024 * 2 |
6 | #include |
||
7 | #include |
||
8 | #include |
||
3363 | leency | 9 | |
5818 | leency | 10 | #ifdef LANG_RUS |
6771 | leency | 11 | #define WINDOW_TITLE "Словарик 2.3" |
5818 | leency | 12 | #define DICTIONARY_LOADED "Словарь загружен" |
13 | #define WORD_NOT_FOUND "Слово не найдено в словаре" |
||
6638 | leency | 14 | #define ERROR "Ошибка #%d" |
5818 | leency | 15 | #else |
6771 | leency | 16 | #define WINDOW_TITLE "Dictionary v2.3" |
5818 | leency | 17 | #define DICTIONARY_LOADED "Dictionary loaded" |
18 | #define WORD_NOT_FOUND "Word isn't found in the dictionary" |
||
6638 | leency | 19 | #define ERROR "Error #%d" |
5818 | leency | 20 | #endif |
21 | |||
3363 | leency | 22 | proc_info Form; |
6771 | leency | 23 | char edit_text[256], search_word[256], translate_result[4096]; |
6678 | leency | 24 | #define TOPH 45 |
3363 | leency | 25 | |
6771 | leency | 26 | unsigned char eng_rus[] = FROM "eng_rus.dict""\0"; |
27 | unsigned char rus_eng[] = FROM "rus_eng.dict""\0"; |
||
28 | dword io_buffer_data; |
||
29 | |||
5818 | leency | 30 | #define TEXT_ENG_RUS "ENG\26RUS" |
31 | #define TEXT_RUS_ENG "RUS\26ENG" |
||
6771 | leency | 32 | #define TEXT_VOC_R_E "ENG RUS" |
33 | #define TEXT_VOC_E_R "RUS ENG" |
||
5818 | leency | 34 | #define ENG_RUS 0 |
35 | #define RUS_ENG 1 |
||
6638 | leency | 36 | #define BUTTON_CHANGE_LANGUAGE 10 |
5818 | leency | 37 | int active_dict=2; |
38 | |||
6638 | leency | 39 | int mouse_dd; |
6771 | leency | 40 | edit_box edit1= {200,13,13,0xffffff,0x94AECE,0xffffff,0x94AECE,0x10000000,248,#edit_text,#mouse_dd,100000000000010b}; |
3363 | leency | 41 | |
42 | |||
6771 | leency | 43 | |
3363 | leency | 44 | void main() |
45 | { |
||
5818 | leency | 46 | int id; |
5626 | leency | 47 | load_dll(boxlib, #box_lib_init,0); |
5818 | leency | 48 | OpenDictionary(ENG_RUS); |
3363 | leency | 49 | if (param) |
50 | { |
||
6771 | leency | 51 | strcpy(#edit_text, #param); |
52 | edit1.size=edit1.pos=strlen(#edit_text); |
||
3363 | leency | 53 | Translate(); |
54 | } |
||
55 | SetEventMask(0x27); |
||
56 | loop() |
||
57 | { |
||
58 | switch(WaitEvent()) |
||
59 | { |
||
60 | case evMouse: |
||
61 | edit_box_mouse stdcall (#edit1); |
||
62 | break; |
||
63 | |||
64 | case evButton: |
||
65 | id=GetButtonID(); |
||
6638 | leency | 66 | if (id==01) ExitProcess(); |
67 | if (id==BUTTON_CHANGE_LANGUAGE) { |
||
68 | if (active_dict == ENG_RUS) OpenDictionary(RUS_ENG); else OpenDictionary(ENG_RUS); |
||
69 | DrawLangButtons(); |
||
3363 | leency | 70 | } |
71 | break; |
||
72 | |||
73 | case evKey: |
||
6640 | leency | 74 | GetKeys(); |
5818 | leency | 75 | edit_box_key stdcall(#edit1); |
76 | Translate(); |
||
3363 | leency | 77 | break; |
78 | |||
79 | case evReDraw: |
||
5818 | leency | 80 | system.color.get(); |
6746 | leency | 81 | DefineAndDrawWindow(215,120,500,350,0x73,system.color.work,WINDOW_TITLE,0); |
5818 | leency | 82 | GetProcessInfo(#Form, SelfInfo); |
83 | if (Form.status_window>2) break; |
||
84 | if (Form.height<140) { MoveSize(OLD,OLD,OLD,140); break; } |
||
85 | if (Form.width<400) { MoveSize(OLD,OLD,400,OLD); break; } |
||
86 | DrawBar(0, 0, Form.width-9, TOPH, system.color.work); //top bg |
||
87 | DrawBar(0, TOPH, Form.width-9, 1, system.color.work_graph); |
||
88 | edit1.width=Form.width-edit1.left-edit1.left-9 - 116; |
||
89 | edit_box_draw stdcall(#edit1); |
||
6678 | leency | 90 | DrawWideRectangle(edit1.left-2, edit1.top-2, edit1.width+3, 25, 2, 0xffffff); |
91 | DrawRectangle(edit1.left-3, edit1.top-3, edit1.width+4, 26, system.color.work_graph); |
||
5818 | leency | 92 | DrawTranslation(); |
93 | DrawLangButtons(); |
||
3363 | leency | 94 | } |
95 | } |
||
96 | } |
||
97 | |||
98 | |||
5818 | leency | 99 | void DrawLangButtons() |
3363 | leency | 100 | { |
6638 | leency | 101 | dword direction; |
6771 | leency | 102 | DrawBar(Form.width-120, edit1.top+3, 100, 25, system.color.work); |
6678 | leency | 103 | DefineButton(Form.width-88, edit1.top-4+3, 20, 20, BUTTON_CHANGE_LANGUAGE, system.color.work_button); |
6771 | leency | 104 | WriteText(Form.width-82, edit1.top-1+3, 10000001b, system.color.work_button_text, "\26"); |
105 | if (active_dict == ENG_RUS) direction = TEXT_VOC_R_E; else direction = TEXT_VOC_E_R; |
||
106 | WriteText(Form.width-120, edit1.top+3, 0x90, system.color.work_text, direction); |
||
3363 | leency | 107 | } |
108 | |||
109 | void Translate() |
||
110 | { |
||
5818 | leency | 111 | dword translation_start, translation_end; |
112 | |||
6771 | leency | 113 | sprintf(#search_word, "\10%s\13", #edit_text); |
3363 | leency | 114 | strupr(#search_word); |
5818 | leency | 115 | |
6771 | leency | 116 | if (!edit_text) goto _TR_END; |
5818 | leency | 117 | |
6771 | leency | 118 | translation_start = strstr(io_buffer_data, #search_word); |
5818 | leency | 119 | if (!translation_start) |
3363 | leency | 120 | { |
5818 | leency | 121 | strcpy(#translate_result, WORD_NOT_FOUND); |
3363 | leency | 122 | } |
5818 | leency | 123 | else |
124 | { |
||
125 | translation_start = strchr(translation_start, '"') + 1; |
||
126 | translation_end = strchr(translation_start, '"'); |
||
127 | strlcpy(#translate_result, translation_start, translation_end - translation_start); |
||
3363 | leency | 128 | } |
5818 | leency | 129 | _TR_END: |
130 | strcpy(#search_word, #search_word+1); |
||
131 | DrawTranslation(); |
||
3363 | leency | 132 | } |
133 | |||
134 | |||
5818 | leency | 135 | void OpenDictionary(dword dict_id) |
3363 | leency | 136 | { |
5818 | leency | 137 | if (dict_id==active_dict) return; |
138 | active_dict = dict_id; |
||
6771 | leency | 139 | if (active_dict==ENG_RUS) |
3363 | leency | 140 | { |
6771 | leency | 141 | io_buffer_data=#eng_rus; |
142 | strcpy(#search_word, TEXT_ENG_RUS); |
||
5423 | leency | 143 | } |
6771 | leency | 144 | if (active_dict==RUS_ENG) |
5423 | leency | 145 | { |
6771 | leency | 146 | io_buffer_data=#rus_eng; |
147 | strcpy(#search_word, TEXT_RUS_ENG); |
||
5423 | leency | 148 | } |
6771 | leency | 149 | strcpy(#translate_result, DICTIONARY_LOADED); |
5818 | leency | 150 | DrawTranslation(); |
3363 | leency | 151 | } |
152 | |||
153 | |||
154 | void DrawTranslation() |
||
155 | { |
||
5818 | leency | 156 | int y_pos=TOPH+1; |
3363 | leency | 157 | char draw_buf[4096]; |
6638 | leency | 158 | strlcpy(#draw_buf, #translate_result, sizeof(draw_buf)); |
3363 | leency | 159 | |
160 | DrawBar(0, y_pos, Form.width-9, Form.cheight - y_pos, 0xFFFFFF); |
||
161 | strttl(#draw_buf); |
||
5818 | leency | 162 | WriteTextB(10+1, y_pos+8, 10000001b, 0x800080, #search_word); |
6638 | leency | 163 | |
6678 | leency | 164 | debugln(#draw_buf); |
165 | DrawTextViewArea(10, y_pos+31, Form.cwidth-20, Form.cheight-30, |
||
6638 | leency | 166 | #draw_buf, -1, 0x000000); |
3363 | leency | 167 | } |
168 | |||
169 | |||
170 | stop:400)>140)> |