Subversion Repositories Kolibri OS

Rev

Rev 6949 | Rev 7252 | 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. int mouse_dd;
  40. edit_box edit1= {200,13,13,0xffffff,0x94AECE,0xffffff,0x94AECE,0x10000000,248,#edit_text,#mouse_dd,100000000000010b};
  41.  
  42.  
  43.  
  44. void main()
  45. {  
  46.         int id;
  47.         load_dll(boxlib, #box_lib_init,0);
  48.         OpenDictionary(ENG_RUS);
  49.         if (param)
  50.         {
  51.                 strcpy(#edit_text, #param);
  52.                 edit1.size=edit1.pos=strlen(#edit_text);
  53.                 Translate();
  54.         }
  55.         SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
  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();              
  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();
  70.                         }
  71.                         break;
  72.  
  73.         case evKey:
  74.                         GetKeys();
  75.                         edit_box_key stdcall(#edit1);  
  76.                         Translate();
  77.                         break;
  78.                        
  79.          case evReDraw:
  80.                         system.color.get();
  81.                         DefineAndDrawWindow(215,120,500,350,0x73,system.color.work,WINDOW_TITLE,0);
  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);
  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);
  92.                         DrawTranslation();
  93.                         DrawLangButtons();
  94.       }
  95.    }
  96. }
  97.  
  98.  
  99. void DrawLangButtons()
  100. {
  101.         dword direction;
  102.         DrawBar(Form.width-120, edit1.top+3, 100, 25, system.color.work);
  103.         DefineButton(Form.width-88, edit1.top-4+3, 20, 20, BUTTON_CHANGE_LANGUAGE, system.color.work_button);
  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);
  107. }
  108.  
  109. void Translate()
  110. {
  111.         dword translation_start, translation_end;
  112.  
  113.         sprintf(#search_word, "\10%s\13", #edit_text);
  114.         strupr(#search_word);
  115.  
  116.         if (!edit_text) goto _TR_END;
  117.  
  118.         translation_start = strstr(io_buffer_data, #search_word);
  119.         if (!translation_start)
  120.         {
  121.                 strcpy(#translate_result, WORD_NOT_FOUND);
  122.         }
  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);
  128.         }
  129.         _TR_END:
  130.         strcpy(#search_word, #search_word+1);
  131.         DrawTranslation();
  132. }
  133.  
  134.  
  135. void OpenDictionary(dword dict_id)
  136. {
  137.         if (dict_id==active_dict) return;
  138.         active_dict = dict_id;
  139.         if (active_dict==ENG_RUS)
  140.         {
  141.                 io_buffer_data=#eng_rus;
  142.                 strcpy(#search_word, TEXT_ENG_RUS);
  143.         }
  144.         if (active_dict==RUS_ENG)
  145.         {
  146.                 io_buffer_data=#rus_eng;
  147.                 strcpy(#search_word, TEXT_RUS_ENG);
  148.         }
  149.         strcpy(#translate_result, DICTIONARY_LOADED);
  150.         DrawTranslation();     
  151. }
  152.  
  153.  
  154. void DrawTranslation()
  155. {
  156.         int y_pos=TOPH+1;
  157.         char draw_buf[4096];
  158.         strlcpy(#draw_buf, #translate_result, sizeof(draw_buf));
  159.        
  160.         DrawBar(0, y_pos, Form.width-9, Form.cheight - y_pos, 0xFFFFFF);
  161.         strttl(#draw_buf);
  162.         WriteTextB(10+1, y_pos+8, 10000001b, 0x800080, #search_word);
  163.  
  164.         DrawTextViewArea(10, y_pos+31, Form.cwidth-20, Form.cheight-30,
  165.                 #draw_buf, -1, 0x000000);
  166. }
  167.  
  168.  
  169. stop:
  170.