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