Subversion Repositories Kolibri OS

Rev

Rev 7783 | Rev 8923 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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