1,76 → 1,93 |
#ifndef AUTOBUILD |
#include "lang.h--" |
#endif |
|
#define MEMSIZE 4096 * 1024 * 2 |
#define NO_DLL_INIT |
#include "../lib/strings.h" |
#include "../lib/gui.h" |
#include "../lib/obj/box_lib.h" |
|
#ifdef LANG_RUS |
#define WINDOW_TITLE "«®¢ ਪ 2.3" |
#define WINDOW_TITLE "«®¢ ਪ 2.4" |
#define DICTIONARY_LOADED "«®¢ àì § £à㦥" |
#define WORD_NOT_FOUND "«®¢® ¥ ©¤¥® ¢ á«®¢ à¥" |
#define ERROR "訡ª #%d" |
#else |
#define WINDOW_TITLE "Dictionary v2.3" |
#define WINDOW_TITLE "Dictionary v2.4" |
#define DICTIONARY_LOADED "Dictionary loaded" |
#define WORD_NOT_FOUND "Word isn't found in the dictionary" |
#define ERROR "Error #%d" |
#endif |
|
#define TEXT_ENG_RUS "ENG\26RUS" |
#define TEXT_RUS_ENG "RUS\26ENG" |
#define TEXT_RU2EN "ENG RUS" |
#define TEXT_EN2RU "RUS ENG" |
|
unsigned char speaker[23*40*3]= FROM "speaker.raw"; |
|
proc_info Form; |
char edit_text[256], search_word[256], translate_result[4096]; |
char search_word[256], translate_result[4096]; |
#define TOPH 45 |
#define PRONOUNCED_FILE "/tmp0/1/pronounced.txt" |
#define SPEECH_PATH "/kolibrios/media/speech/speech" |
dword speaker_id; |
|
unsigned char eng_rus[] = FROM "eng_rus.dict""\0"; |
unsigned char rus_eng[] = FROM "rus_eng.dict""\0"; |
dword io_buffer_data; |
|
#define TEXT_ENG_RUS "ENG\26RUS" |
#define TEXT_RUS_ENG "RUS\26ENG" |
#define TEXT_VOC_R_E "ENG RUS" |
#define TEXT_VOC_E_R "RUS ENG" |
#define ENG_RUS 0 |
#define RUS_ENG 1 |
#define BUTTON_CHANGE_LANGUAGE 10 |
int active_dict=2; |
|
edit_box edit1= {200,13,13,0xffffff,0x94AECE,0xffffff,0x94AECE,0x10000000,248,#edit_text,0,100000000000010b}; |
#define BTN_CHANGE_LANGUAGE 10 |
#define BTN_SPEAKER 11 |
|
char edit_text[256]; |
edit_box edit1 = {0,13,13,0xffffff,0x94AECE,0xffffff,0xffffff, |
0x10000000,248,#edit_text,0,ed_focus+ed_always_focus}; |
|
|
void main() |
{ |
int id; |
int btnid; |
load_dll(boxlib, #box_lib_init,0); |
OpenDictionary(ENG_RUS); |
if (param) |
{ |
if (param) { |
strcpy(#edit_text, #param); |
edit1.size=edit1.pos=strlen(#edit_text); |
edit_box_set_text stdcall (#edit1, #param); |
Translate(); |
} |
SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER); |
loop() |
@SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER); |
loop() switch(@WaitEvent()) |
{ |
switch(WaitEvent()) |
{ |
case evMouse: |
edit_box_mouse stdcall (#edit1); |
break; |
|
case evButton: |
id=GetButtonID(); |
if (id==01) ExitProcess(); |
if (id==BUTTON_CHANGE_LANGUAGE) { |
if (active_dict == ENG_RUS) OpenDictionary(RUS_ENG); else OpenDictionary(ENG_RUS); |
btnid = @GetButtonID(); |
if (btnid==01) ExitProcess(); |
if (btnid==BTN_CHANGE_LANGUAGE) { |
if (active_dict == ENG_RUS) { |
OpenDictionary(RUS_ENG); |
} else { |
OpenDictionary(ENG_RUS); |
} |
DrawLangButtons(); |
} |
if (btnid==BTN_SPEAKER) { |
if (GetProcessSlot(speaker_id)!=0) { |
KillProcess(speaker_id); |
pause(50); |
} else { |
if (CreateFile(strlen(#translate_result)+1, #translate_result, PRONOUNCED_FILE)!=0) break; |
pause(50); |
speaker_id = RunProgram(SPEECH_PATH, PRONOUNCED_FILE); |
} |
SpeakerDraw(); |
} |
break; |
|
case evKey: |
GetKeys(); |
@GetKey(); |
edit_box_key stdcall(#edit1); |
Translate(); |
break; |
92,22 → 109,26 |
DrawLangButtons(); |
} |
} |
} |
|
|
void DrawLangButtons() |
{ |
dword direction; |
DrawBar(Form.cwidth-111, edit1.top+3, 100, 25, sc.work); |
DefineButton(Form.cwidth-79, edit1.top-4+3, 20, 20, BUTTON_CHANGE_LANGUAGE, sc.button); |
WriteText(Form.cwidth-73, edit1.top-1+3, 10000001b, sc.button_text, "\26"); |
if (active_dict == ENG_RUS) direction = TEXT_VOC_R_E; else direction = TEXT_VOC_E_R; |
WriteText(Form.cwidth-111, edit1.top+3, 0x90, sc.work_text, direction); |
int y = edit1.top+3; |
DrawBar(Form.cwidth-111, y, 100, 25, sc.work); |
DefineButton(Form.cwidth-79, y-4, 20, 20, BTN_CHANGE_LANGUAGE, sc.button); |
WriteText(Form.cwidth-73, y-1, 10000001b, sc.work_text, "\26"); |
if (active_dict == ENG_RUS) { |
direction = TEXT_RU2EN; |
} else { |
direction = TEXT_EN2RU; |
} |
WriteText(Form.cwidth-111, y, 0x90, sc.work_text, direction); |
} |
|
void Translate() |
{ |
dword translation_start, translation_end; |
dword tr_start, tr_end; |
|
sprintf(#search_word, "\10%s\13", #edit_text); |
strupr(#search_word); |
114,17 → 135,14 |
|
if (!edit_text) goto _TR_END; |
|
translation_start = strstr(io_buffer_data, #search_word); |
if (!translation_start) |
{ |
tr_start = strstr(io_buffer_data, #search_word); |
if (!tr_start) { |
strcpy(#translate_result, WORD_NOT_FOUND); |
} else { |
tr_start = strchr(tr_start, '"') + 1; |
tr_end = strchr(tr_start, '"'); |
strlcpy(#translate_result, tr_start, tr_end - tr_start); |
} |
else |
{ |
translation_start = strchr(translation_start, '"') + 1; |
translation_end = strchr(translation_start, '"'); |
strlcpy(#translate_result, translation_start, translation_end - translation_start); |
} |
_TR_END: |
strcpy(#search_word, #search_word+1); |
DrawTranslation(); |
162,7 → 180,26 |
|
DrawTextViewArea(10, y_pos+31, Form.cwidth-20, Form.cheight-30, |
#draw_buf, -1, 0x000000); |
|
SpeakerDraw(); |
} |
|
void SpeakerDraw() |
{ |
dword x = Form.cwidth-38; |
dword y = Form.cheight-32; |
if (active_dict == RUS_ENG) |
{ |
DeleteButton(15); |
DrawBar(x,y,23,20,0xFFFFFF); |
} else { |
DefineHiddenButton(x-5, y-5, 23+10, 20+9, BTN_SPEAKER); |
if (!GetProcessSlot(speaker_id)) { |
_PutImage(x, y, 23,20, #speaker); |
} else { |
_PutImage(x, y, 23,20, 23*20*3+#speaker); |
} |
} |
} |
|
stop: |