AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Scripts collection
Goto page Previous  1, 2, 3 ... 10, 11, 12 ... 15, 16, 17  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
KDJ



Joined: 06 Mar 2010
Posts: 1081
Location: Poland

PostPosted: Sat Mar 26, 2011 3:03 pm    Post subject: Reply with quote

Inserts date/time from calendar.

InsertDateFromCalendar.js

Code:
// Inserts date/time from calendar - 2011-04-07
//
// Call("Scripts::Main", 1, "InsertDateFromCalendar.js")
//
// In calendar window, press F1 for help, or press O(S) for options-settings

var oSys = AkelPad.SystemFunction();

if (oSys.Call("kernel32::GetUserDefaultLangID") == 0x0415) //Polish
{
  var pHlpTxt = "   Klawisze skrótów dostępne w kalendarzu:\n" +
                " Left/Right      - poprzedni/następny dzień\n" +
                " Up/Down      - poprzedni/następny tydzień\n" +
                " PgUp/PgDn      - poprzedni/następny miesiąc\n" +
                " Ctrl+PgUp/Ctrl+PgDn   - poprzedni/następny rok\n" +
                " Home/End      - pierwszy/ostatni dzień miesiąca\n" +
                " Ctrl+Home/Ctrl+End   - pierwszy/ostatni widoczny dzień\n" +
                " BackSpace      - przejdź do dnia dzisiejszego\n" +
                "\n" +
                " Shift+Alt+Left/Right   - przesuń kalendarz w lewo/prawo\n" +
                " Shift+Alt+Up/Down   - przesuń kalendarz w górę/dół\n" +
                " Shift+Alt+Home/End   - przesuń do lewej/prawej krawędzi okna\n" +
                " Shift+Alt+PgUp/PgDn   - przesuń do górnej/dolnej krawędzi okna\n" +
                " Shift+Alt+C      - wyśrodkuj kalendarz\n" +
                "\n" +
                " +/-         - dodaj/usun miesiąc z kalendarza\n" +
                " O (S)         - opcje (ustawnienia)\n" +
                "\n" +
                " Enter\n" +
                " Shift+Enter\n" +
                " Ctrl+Enter\n" +
                " Ctrl+Shift+Enter      - wstaw datę/czas do tekstu (patrz opcje)";

  var pHlpTxtDF = " d   - dzień miesiąca, cyfry bez wiodącego zera\n" +
                  " dd   - dzień miesiąca, cyfry z wiodącym zerem\n" +
                  " ddd   - dzień tygodnia, trzy-literowy skrót\n" +
                  " dddd   - dzień tygodnia, pełna nazwa\n" +
                  " M   - miesiąc, cyfry bez wiodącego zera\n" +
                  " MM   - miesiąc, cyfry z wiodącym zerem\n" +
                  " MMM   - miesiąc, trzy-literowy skrót\n" +
                  " MMMM   - miesiąc, pełna nazwa\n" +
                  " y   - rok, dwie cyfry bez wiodącego zera\n" +
                  " yy   - rok, dwie cyfry z wiodącym zerem\n" +
                  " yyyy   - rok, cztery cyfry";

  var pHlpTxtTF = " h   - godziny bez wiodącego zera, zegar 12h\n" +
                  " hh   - godziny z wiodącym zerem, zegar 12h\n" +
                  " H   - godziny bez wiodącego zera, zegar 24h\n" +
                  " HH   - godziny z wiodącym zerem, zegar 24h\n" +
                  " m   - minuty bez wiodącego zera\n" +
                  " mm   - minuty z wiodącym zerem\n" +
                  " s   - sekundy bez wiodącego zera\n" +
                  " ss   - sekundy z wiodącym zerem\n" +
                  " t   - znacznik czasu jednoznakowy, (A/P)\n" +
                  " tt   - znacznik czasu wieloznakowy, (AM/PM)";

  var pTxtHelp     = "Pomoc";
  var pTxtSettings = "Opcje - ustawienia";
  var pTxtFormat   = "Wstaw - format daty/czasu";
  var pTxtSystem   = "System";
  var pTxtLongDate = "Data długa";
  var pTxtDateForm = "Format daty";
  var pTxtTimeForm = "Format czasu";
  var pTxtKeyAssig = "Wstaw - przydzielone klawisze";
  var pTxtDate     = "Data";
  var pTxtTime     = "Czas";
  var pTxtCalendar = "Kalendarz";
  var pTxtMonths   = "Liczba widocznych miesięcy";
  var pTxtColor1   = "Tło kalendarza";
  var pTxtColor2   = "Tekst dni miesiąca";
  var pTxtColor3   = "Tło nagłówka miesiąca";
  var pTxtColor4   = "Tekst nagłówka miesiąca";
  var pTxtColor5   = "Początkowe i końcowe dni";
  var pTxtReset    = "R\n" +
                     "e\n" +
                     "s\n" +
                     "e\n" +
                     "t";
}
else
{
  var pHlpTxt = "   Shortcut keys in calendar:\n" +
                " Left/Right      - previous/next day\n" +
                " Up/Down      - previous/next week\n" +
                " PgUp/PgDn      - previous/next month\n" +
                " Ctrl+PgUp/Ctrl+PgDn   - previous/next year\n" +
                " Home/End      - first/last day of month\n" +
                " Ctrl+Home/Ctrl+End   - first/last day visible in calendar\n" +
                " BackSpace      - go to today\n" +
                "\n" +
                " Shift+Alt+Left/Right   - move calendar left/right\n" +
                " Shift+Alt+Up/Down   - move calendar up/down\n" +
                " Shift+Alt+Home/End   - move to left/right window edge\n" +
                " Shift+Alt+PgUp/PgDn   - move to top/bottom window edge\n" +
                " Shift+Alt+C      - center calendar\n" +
                "\n" +
                " +/-         - add/remove month from calendar\n" +
                " O (S)         - options (settings)\n" +
                "\n" +
                " Enter\n" +
                " Shift+Enter\n" +
                " Ctrl+Enter\n" +
                " Ctrl+Shift+Enter      - insert date/time in text (see options)";

  var pHlpTxtDF = " d   - day of month, digits without leading zero\n" +
                  " dd   - day of month, digits with leading zero\n" +
                  " ddd   - day of week, three-letter abbreviation\n" +
                  " dddd   - day of week, full name\n" +
                  " M   - month, digits without leading zero\n" +
                  " MM   - month, digits with leading zero\n" +
                  " MMM   - month, three-letter abbreviation\n" +
                  " MMMM   - month, full name\n" +
                  " y   - year, two digits without leading zero\n" +
                  " yy   - year, two digits with leading zero\n" +
                  " yyyy   - year, four digits";

  var pHlpTxtTF = " h   - hours without leading zero, 12-hour clock\n" +
                  " hh   - hours with leading zero, 12-hour clock\n" +
                  " H   - hours without leading zero, 24-hour clock\n" +
                  " HH   - hours with leading zero, 24-hour clock\n" +
                  " m   - minutes without leading zero\n" +
                  " mm   - minutes with leading zero\n" +
                  " s   - seconds without leading zero\n" +
                  " ss   - seconds with leading zero\n" +
                  " t   - one char time-marker, such as A or P\n" +
                  " tt   - multichar time-marker, such as AM or PM";

  var pTxtHelp     = "Help";
  var pTxtSettings = "Options - settings";
  var pTxtFormat   = "Insert - date/time format";
  var pTxtSystem   = "System";
  var pTxtLongDate = "Long date";
  var pTxtDateForm = "Date format";
  var pTxtTimeForm = "Time format";
  var pTxtKeyAssig = "Insert - key assignment";
  var pTxtDate     = "Date";
  var pTxtTime     = "Time";
  var pTxtCalendar = "Calendar";
  var pTxtMonths   = "Count of visible months";
  var pTxtColor1   = "Background within a month";
  var pTxtColor2   = "Text within a month";
  var pTxtColor3   = "Background calendar title";
  var pTxtColor4   = "Text calendar title";
  var pTxtColor5   = "Header day and trailing day";
  var pTxtReset    = "R\n" +
                     "e\n" +
                     "s\n" +
                     "e\n" +
                     "t";
}

var DT_DWORD = 3;
var DT_WORD  = 4;

var hMainWnd     = AkelPad.GetMainWnd();
var hEditWnd     = AkelPad.GetEditWnd();
var hGuiFont     = oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
var hInstanceDLL = AkelPad.GetInstanceDll();
var pClassName   = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstanceDLL;

var bSystem     = 1;
var bLongDate   = 0;
var pDateForm   = "yyyy-MM-dd";
var pTimeForm   = "HH:mm:ss";
var aKeyAssign  = [["Enter", 1], ["Shift+Enter", 0], ["Ctrl+Enter", 2], ["Ctrt+Shift+Enter", 3]];
var nMonthCount = 1;
var aColor;

ReadWriteIni(0);

var hWndDlgCal;
var hWndCal;
var lpBuffer;
var lpSysTime;
var hBrushColor;
var bResetColors;
var aWndCalPos;
var aWndSetPos;

var lpWnd        = [];
var IDFORMAT     = 1000;
var IDDATE       = 1001;
var IDTIME       = 1002;
var IDSYSTEM     = 1003;
var IDLONGDATE   = 1004;
var IDDF         = 1005;
var IDDFHLP      = 1006;
var IDDFDESCR    = 1007;
var IDTF         = 1008;
var IDTFHLP      = 1009;
var IDTFDESCR    = 1010;
var IDKEYASSIG   = 1011;
var IDASSIG0     = 1012;
var IDASSIG1     = 1013;
var IDASSIG2     = 1014;
var IDASSIG3     = 1015;
var IDENTER      = 1016;
var IDSHENTER    = 1017;
var IDCTENTER    = 1018;
var IDCTSHENTER  = 1019;
var IDCALENDAR   = 1020;
var IDMONTHCOUNT = 1021;
var IDMONTHDESCR = 1022;
var IDCOLOR1     = 1023;
var IDCOLOR2     = 1024;
var IDCOLOR3     = 1025;
var IDCOLOR4     = 1026;
var IDCOLOR5     = 1027;
var IDCOLOR1BUTT = 1028;
var IDCOLOR2BUTT = 1029;
var IDCOLOR3BUTT = 1030;
var IDCOLOR4BUTT = 1031;
var IDCOLOR5BUTT = 1032;
var IDRESET      = 1033;
var IDDFHLPTXT   = 1034;
var IDTFHLPTXT   = 1035;

var WNDTYPE  = 0;
var WND      = 1;
var WNDEXSTY = 2;
var WNDSTY   = 3;
var WNDX     = 4;
var WNDY     = 5;
var WNDW     = 6;
var WNDH     = 7;
var WNDTXT   = 8;

if (hEditWnd)
{
  if (AkelPad.WindowRegisterClass(pClassName))
  {
    if (lpBuffer = AkelPad.MemAlloc(256 * _TSIZE))
    {
      if (lpSysTime = AkelPad.MemAlloc(16))
      {
        do
        {
          //Create dialog
          hWndDlgCal = oSys.Call("user32::CreateWindowEx" + _TCHAR,
                                 0,               //dwExStyle
                                 pClassName,      //lpClassName
                                 0,               //lpWindowName
                                 0x90000000,      //WS_VISIBLE|WS_POPUP
                                 0,               //x
                                 0,               //y
                                 0,               //nWidth
                                 0,               //nHeight
                                 hMainWnd,        //hWndParent
                                 0,               //ID
                                 hInstanceDLL,    //hInstance
                                 DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.
          if (hWndDlgCal)
          {
            //Disable main window, to make dialog modal
            oSys.Call("user32::EnableWindow", hMainWnd, false);
 
            //Message loop
            AkelPad.WindowGetMessage();
          }
        }
        while (bResetColors);

        AkelPad.MemFree(lpSysTime);
      }
      AkelPad.MemFree(lpBuffer);
    }
    AkelPad.WindowUnregisterClass(pClassName);
  }
}

////////
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 1) //WM_CREATE
  {
    hWndCal = oSys.Call("user32::CreateWindowEx" + _TCHAR,
                        0,               //dwExStyle
                        "SysMonthCal32", //lpClassName
                        0,               //lpWindowName
                        0x50800004,      //WS_VISIBLE|WS_CHILD|WS_BORDER|MCS_WEEKNUMBERS
                        0,               //x
                        0,               //y
                        0,               //nWidth
                        0,               //nHeight
                        hWnd,            //hWndParent
                        0,               //ID
                        hInstanceDLL,    //hInstance
                        0);              //lpParam

    AkelPad.SendMessage(hWndCal, 0x1014 /*MCM_SETMONTHDELTA*/, 1, 0);

    //Set window size and position
    SetWindowSize(hWnd);
    MoveWindow(hMainWnd, hWnd, (bResetColors ? aWndCalPos : 0));

    if (aColor)
    {
      for (var i = 1; i < 6; ++i)
        AkelPad.SendMessage(hWndCal, 0x100A /*MCM_SETCOLOR*/, i, aColor[i]);
    }
  }

  else if (uMsg == 7) //WM_SETFOCUS
    oSys.Call("user32::SetFocus", hWndCal);

  else if (uMsg == 0x0F) //WM_PAINT
  {
    if (bResetColors)
    {
      AkelPad.SendMessage(hWndCal, 0x1002 /*MCM_SETCURSEL*/, 0, lpSysTime);
      AkelPad.SendMessage(hWnd, 256 /*WM_KEYDOWN*/, 0x4F /*O*/, 0);
    }
  }

  else if (uMsg == 256) //WM_KEYDOWN
  {
    if (wParam == 0x25) //VK_LEFT
      SetDate(-1);
    if (wParam == 0x27) //VK_RIGHT
      SetDate(1);
    if (wParam == 0x26) //VK_UP
      SetDate(-7);
    if (wParam == 0x28) //VK_DOWN
      SetDate(7);
    if (wParam == 0x08) //VK_BACK - today
      SetDate(0);
    else if (wParam == 13) //VK_RETURN
    {
      if ((oSys.Call("user32::GetAsyncKeyState", 0xA0 /*VK_LSHIFT*/)) &&
          (oSys.Call("user32::GetAsyncKeyState", 0x11 /*VK_CONTROL*/)))
        InsertDateTime(aKeyAssign[3][1]);
      else if (oSys.Call("user32::GetAsyncKeyState", 0xA0 /*VK_LSHIFT*/))
        InsertDateTime(aKeyAssign[1][1]);
      else if (oSys.Call("user32::GetAsyncKeyState", 0x11 /*VK_CONTROL*/))
        InsertDateTime(aKeyAssign[2][1]);
      else
        InsertDateTime(aKeyAssign[0][1]);
      oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
    else if (wParam == 27) //VK_ESCAPE
      oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
    else if ((wParam == 109) || (wParam == 189))  //Num- or -
    {
      if (nMonthCount > 1)
      {
        --nMonthCount;
        SetWindowSize(hWnd);
        MoveWindow(hMainWnd, hWnd, "CV");
      }
    }
    else if ((wParam == 107) || (wParam == 187))  //Num+ or +
    {
      if (nMonthCount < 5)
      {
        ++nMonthCount;
        SetWindowSize(hWnd);
        MoveWindow(hMainWnd, hWnd, "CV");
      }
    }
    else if (wParam == 112) //VK_F1
      Help();
    else if ((wParam == 0x4F) || (wParam == 0x53)) //O or S
    {
      Settings();
      if (bResetColors)
        oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
  }

  else if (uMsg == 260) //WM_SYSKEYDOWN
  {
    if (oSys.Call("user32::GetAsyncKeyState", 0xA0 /*VK_LSHIFT*/))
    {
      if (wParam == 0x27) //VK_RIGHT
        MoveWindow(0, hWnd, "R");
      else if (wParam == 0x25) //VK_LEFT
        MoveWindow(0, hWnd, "L");
      else if (wParam == 0x28) //VK_DOWN
        MoveWindow(0, hWnd, "D");
      else if (wParam == 0x26) //VK_UP
        MoveWindow(0, hWnd, "U");
      else if (wParam == 0x23) //VK_END
        MoveWindow(0, hWnd, "E");
      else if (wParam == 0x24) //VK_HOME
        MoveWindow(0, hWnd, "H");
      else if (wParam == 0x22) //VK_NEXT
        MoveWindow(0, hWnd, "B");
      else if (wParam == 0x21) //VK_PRIOR
        MoveWindow(0, hWnd, "T");
      else if (wParam == 0x43) //C
        MoveWindow(hEditWnd, hWnd, "C");
    }
  }

  else if (uMsg == 16) //WM_CLOSE
  {
    ReadWriteIni(1);

    //Enable main window
    oSys.Call("user32::EnableWindow", hMainWnd, true);
    //Destroy dialog
    oSys.Call("user32::DestroyWindow", hWnd);

  }
  else if (uMsg == 2) //WM_DESTROY
  {
    //Exit message loop
    oSys.Call("user32::PostQuitMessage", 0);
  }

  return 0;
}

function SetWndFontAndText(hWnd, hFont, pText)
{
  var lpWndTxt;

  AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, true);

  if (lpWndTxt = AkelPad.MemAlloc((pText.length + 1) * _TSIZE))
  {
    AkelPad.MemCopy(lpWndTxt, pText, _TSTR);
    oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, lpWndTxt);
    AkelPad.MemFree(lpWndTxt);
  }
}

function SetWindowSize(hWnd)
{
  var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
  var nW, nH, nW1;

  AkelPad.SendMessage(hWndCal, 0x1009 /*MCM_GETMINREQRECT*/, 0, lpRect);

  nW  = AkelPad.MemRead(lpRect +  8, DT_DWORD);
  nH  = AkelPad.MemRead(lpRect + 12, DT_DWORD);
  nW1 = AkelPad.SendMessage(hWndCal, 0x1015 /*MCM_GETMAXTODAYWIDTH*/, 0, 0);

  if (nW1 > nW)
    nW = nW1;

  oSys.Call("user32::SetWindowPos", hWnd,    0, 0, 0, nW, nH * nMonthCount - 13 * (nMonthCount - 1),
                                    0x16 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOMOVE*/);
  oSys.Call("user32::SetWindowPos", hWndCal, 0, 0, 0, nW, nH * nMonthCount - 13 * (nMonthCount - 1),
                                    0x16 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOMOVE*/);

  AkelPad.MemFree(lpRect);
}

function MoveWindow(hWndParent, hWnd, Action)
{
  var rcWndParent;
  var rcWnd;
  var lpPoint;
  var nX;
  var nY;
  var nWndWidth;
  var nWndHeight;
  var nCharHeight;

  if (! hWndParent)
    hWndParent = oSys.Call("user32::GetDesktopWindow");

  rcWndParent = GetWindowPos(hWndParent);
  rcWnd       = GetWindowPos(hWnd);

  nX = rcWnd.left;
  nY = rcWnd.top;

  if (! Action) //to caret
  {
    if (lpPoint = AkelPad.MemAlloc(8)) //sizeof(POINT)
    {
      AkelPad.SendMessage(hEditWnd, 3190 /*AEM_GETCARETPOS*/, lpPoint, 0);
      oSys.Call("user32::ClientToScreen", hEditWnd, lpPoint);
      nX = AkelPad.MemRead(lpPoint,     DT_DWORD);
      nY = AkelPad.MemRead(lpPoint + 4, DT_DWORD);

      nWndWidth   = rcWnd.right - rcWnd.left;
      nWndHeight  = rcWnd.bottom - rcWnd.top;
      nCharHeight = AkelPad.SendMessage(hEditWnd, 3188 /*AEM_GETCHARSIZE*/, 0 /*AECS_HEIGHT*/, 0);

      if ((nX + nWndWidth) > rcWndParent.right)
        nX = rcWndParent.right - nWndWidth - 10;

      if ((nY + nCharHeight + nWndHeight) < rcWndParent.bottom)
        nY = nY + nCharHeight;
      else if ((nY - nWndHeight) > rcWndParent.top)
        nY = nY - nWndHeight;
      else
        nY = rcWndParent.top  + ((rcWndParent.bottom - rcWndParent.top) / 2 - (rcWnd.bottom - rcWnd.top) / 2);

      AkelPad.MemFree(lpPoint);
    }
  }
  else if (Action == "R") //Move right
    nX = rcWnd.left + ((rcWnd.right < rcWndParent.right) ? 10: 0);
  else if (Action == "L") //Move left
    nX = rcWnd.left - ((rcWnd.left > rcWndParent.left) ? 10: 0);
  else if (Action == "D") //Move down
    nY = rcWnd.top + ((rcWnd.bottom < rcWndParent.bottom) ? 10: 0);
  else if (Action == "U") //Move up
    nY = rcWnd.top - ((rcWnd.top > rcWndParent.top) ? 10: 0);
  else if (Action == "E") //Move end (right)
    nX = rcWnd.left + (rcWndParent.right - rcWnd.right);
  else if (Action == "H") //Move home (left)
    nX = rcWnd.left + (rcWndParent.left - rcWnd.left);
  else if (Action == "B") //Move bottom
    nY = rcWnd.top + (rcWndParent.bottom - rcWnd.bottom);
  else if (Action == "T") //Move top
    nY = rcWnd.top + (rcWndParent.top - rcWnd.top);
  else if (Action == "C") //Center window
  {
    nX = rcWndParent.left + ((rcWndParent.right  - rcWndParent.left) / 2 - (rcWnd.right  - rcWnd.left) / 2);
    nY = rcWndParent.top  + ((rcWndParent.bottom - rcWndParent.top)  / 2 - (rcWnd.bottom - rcWnd.top)  / 2);
  }
  else if (Action == "CV") //Center vertically
  {
    nY = rcWndParent.top  + ((rcWndParent.bottom - rcWndParent.top)  / 2 - (rcWnd.bottom - rcWnd.top)  / 2);
  }
  else if (Action == "LT") //Move left top
  {
    nX = rcWndParent.left;
    nY = rcWndParent.top;
  }
  else if (Action == "RT") //Move right top
  {
    nX = rcWnd.left + (rcWndParent.right - rcWnd.right);
    nY = rcWndParent.top;
  }
  else if (Action == "LB") //Move left bottom
  {
    nX = rcWndParent.left;
    nY = rcWnd.top + (rcWndParent.bottom - rcWnd.bottom);
  }
  else if (Action == "RB") //Move right bottom
  {
    nX = rcWnd.left + (rcWndParent.right - rcWnd.right);
    nY = rcWnd.top + (rcWndParent.bottom - rcWnd.bottom);
  }
  else
  {
    nX = Action.left;
    nY = Action.top;
  }

  oSys.Call("user32::SetWindowPos", hWnd, 0, nX, nY, 0, 0, 0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
}

function GetWindowPos(hWnd)
{
  var lpRect = AkelPad.MemAlloc(16) //sizeof(RECT);
  var rcRect = [];

  oSys.Call("user32::GetWindowRect", hWnd, lpRect);

  rcRect.left   = AkelPad.MemRead(lpRect,     DT_DWORD);
  rcRect.top    = AkelPad.MemRead(lpRect + 4, DT_DWORD);
  rcRect.right  = AkelPad.MemRead(lpRect + 8, DT_DWORD);
  rcRect.bottom = AkelPad.MemRead(lpRect +12, DT_DWORD);
  AkelPad.MemFree(lpRect);

  return rcRect;
}

function LoWord(nParam)
{
  return (nParam & 0xffff);
}

function HiWord(nParam)
{
  return ((nParam >> 16) & 0xffff);
}

function ReadWriteIni(bWrite)
{
  var oFSO     = new ActiveXObject("Scripting.FileSystemObject");
  var pIniName = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + ".ini";
  var nError;
  var oFile;
  var pTxtIni;
  var i;

  if (bWrite)
  {
    pTxtIni = 'bSystem='          + bSystem     + ';\r\n' +
              'bLongDate='        + bLongDate   + ';\r\n' +
              'pDateForm="'       + pDateForm.replace(/[\\"]/g, "\\$&") + '";\r\n' +
              'pTimeForm="'       + pTimeForm.replace(/[\\"]/g, "\\$&") + '";\r\n' +
              'aKeyAssign[0][1]=' + aKeyAssign[0][1] + ';\r\n' +
              'aKeyAssign[1][1]=' + aKeyAssign[1][1] + ';\r\n' +
              'aKeyAssign[2][1]=' + aKeyAssign[2][1] + ';\r\n' +
              'aKeyAssign[3][1]=' + aKeyAssign[3][1] + ';\r\n' +
              'nMonthCount='      + nMonthCount + ';\r\n' +
              'aColor='

    if (aColor)
      pTxtIni += '[' + aColor + ']';
    else
      pTxtIni += aColor;

    pTxtIni += ';';

    oFile = oFSO.OpenTextFile(pIniName, 2, true, 0);
    oFile.Write(pTxtIni);
    oFile.Close();
  }

  else if (oFSO.FileExists(pIniName))
  {
    try
    {
      eval(AkelPad.ReadFile(pIniName));
    }
    catch (nError)
    {
    }
  }
}

function SetDate(nShift)
{
  var nYear, nMonth, nDay, dDate;

  if (nShift)
  {
    AkelPad.SendMessage(hWndCal, 0x1001 /*MCM_GETCURSEL*/, 0, lpSysTime);

    nYear  = AkelPad.MemRead(lpSysTime,     DT_WORD);
    nMonth = AkelPad.MemRead(lpSysTime + 2, DT_WORD) - 1;
    nDay   = AkelPad.MemRead(lpSysTime + 6, DT_WORD);
    dDate  = new Date(nYear, nMonth, nDay);

    dDate.setDate(nDay + nShift);

    nYear  = dDate.getFullYear();
    nMonth = dDate.getMonth() + 1;
    nDay   = dDate.getDate();

    AkelPad.MemCopy(lpSysTime,     nYear,  DT_WORD);
    AkelPad.MemCopy(lpSysTime + 2, nMonth, DT_WORD);
    AkelPad.MemCopy(lpSysTime + 6, nDay,   DT_WORD);
  }
  else
    AkelPad.SendMessage(hWndCal, 0x100D /*MCM_GETTODAY*/, 0, lpSysTime);

  AkelPad.SendMessage(hWndCal, 0x1002 /*MCM_SETCURSEL*/, 0, lpSysTime);
}

function GetDate()
{
  var lpString = AkelPad.MemAlloc(256 * _TSIZE);
  var lpFormat = AkelPad.MemAlloc(256 * _TSIZE);
  var nFlag;
  var pDate;

  AkelPad.SendMessage(hWndCal, 0x1001 /*MCM_GETCURSEL*/, 0, lpSysTime);

  if (bSystem)
  {
    if (bLongDate)
      nFlag = 0x2; //DATE_LONGDATE
    else
      nFlag = 0x1; //DATE_SHORTDATE
  }
  else
  {
    nFlag = 0;
    AkelPad.MemCopy(lpFormat, pDateForm, _TSTR);
  }

  oSys.Call("kernel32::GetDateFormat" + _TCHAR,
            0x400, //LOCALE_USER_DEFAULT
            nFlag,
            lpSysTime,
            (bSystem ? 0 : lpFormat),
            lpString,
            256);
  pDate = AkelPad.MemRead(lpString, _TSTR);

  AkelPad.MemFree(lpString);
  AkelPad.MemFree(lpFormat);

  return pDate;
}

function GetTime()
{
  var lpString = AkelPad.MemAlloc(256 * _TSIZE);
  var lpFormat = AkelPad.MemAlloc(256 * _TSIZE);
  var dDate    = new Date();
  var pTime;

  AkelPad.MemCopy(lpSysTime +  8, dDate.getHours(),        DT_WORD);
  AkelPad.MemCopy(lpSysTime + 10, dDate.getMinutes(),      DT_WORD);
  AkelPad.MemCopy(lpSysTime + 12, dDate.getSeconds(),      DT_WORD);
  AkelPad.MemCopy(lpSysTime + 14, dDate.getMilliseconds(), DT_WORD);

  if (! bSystem)
    AkelPad.MemCopy(lpFormat, pTimeForm, _TSTR);

  oSys.Call("kernel32::GetTimeFormat" + _TCHAR,
            0x007F, //LOCALE_INVARIANT
            0,
            lpSysTime,
            (bSystem ? 0 : lpFormat),
            lpString,
            256);
  pTime = AkelPad.MemRead(lpString, _TSTR);

  AkelPad.MemFree(lpString);
  AkelPad.MemFree(lpFormat);

  return pTime;
}

function InsertDateTime(What)
{
  var bColSel = AkelPad.SendMessage(hEditWnd, 3127 /*AEM_GETCOLUMNSEL*/, 0, 0);
  var pDateTime;
  var nLines;
  var aTxt;
  var i;

  if (What == 0)
    pDateTime = GetDate();
  else if (What == 1)
    pDateTime = GetDate() + " " + GetTime();
  else if (What == 2)
    pDateTime = GetTime();
  else
    pDateTime = GetTime() + " " + GetDate();

  if (bColSel)
  {
    nLines = AkelPad.SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 2 /*AEGL_LASTSELLINE*/, 0) -
             AkelPad.SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 1 /*AEGL_FIRSTSELLINE*/, 0) + 1;
    aTxt   = new Array(nLines);

    for (i = 0; i < nLines; ++i)
      aTxt[i] = pDateTime;

    pDateTime = aTxt.join("\r");
  }

  AkelPad.ReplaceSel(pDateTime, AkelPad.GetSelStart() != AkelPad.GetSelEnd());
  AkelPad.SendMessage(hEditWnd, 3128 /*AEM_UPDATESEL*/, bColSel, 0);
}

function Help()
{
  var rcWndDesk = GetWindowPos(oSys.Call("user32::GetDesktopWindow"));
  var rcWnd     = GetWindowPos(hWndDlgCal);
  var nWidth    = 350;
  var nHeight   = 350;
  var nX        = rcWnd.right;
  var nY        = rcWnd.top;
  var hWndDlgHlp;

  if ((nX + nWidth) > rcWndDesk.right)
    nX = rcWnd.left - nWidth;
  if ((nY + nHeight) > rcWndDesk.bottom)
    nY = rcWnd.bottom - nHeight;

  hWndDlgHlp = oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0,              //dwExStyle
                         pClassName,     //lpClassName
                         pTxtHelp,       //lpWindowName
                         0x90C80000,     //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU
                         nX,             //x
                         nY,             //y
                         nWidth,         //nWidth
                         nHeight,        //nHeight
                         hWndDlgCal,     //hWndParent
                         0,              //ID
                         hInstanceDLL,   //hInstance
                         DialogCallbackHlp); //Script function callback

  if (hWndDlgHlp)
  {
    oSys.Call("user32::EnableWindow", hWndDlgCal, 0);
    AkelPad.WindowGetMessage();
  }
}

function DialogCallbackHlp(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 1) //WM_CREATE
  {
    hWndHlp = oSys.Call("user32::CreateWindowEx" + _TCHAR,
                        0x000,        //dwExStyle
                        "STATIC",       //lpClassName
                        0,            //lpWindowName
                        0x50400000,   //WS_VISIBLE|WS_CHILD|WS_DLGFRAME
                        10,           //x
                        10,           //y
                        325,          //nWidth
                        300,          //nHeight
                        hWnd,         //hWndParent
                        0,            //ID
                        hInstanceDLL, //hInstance
                        0);           //lpParam
    SetWndFontAndText(hWndHlp, hGuiFont, pHlpTxt);
  }

  else if (uMsg == 256) //WM_KEYDOWN
  {
    if ((wParam == 27 /*VK_ESCAPE*/) || (wParam == 112 /*VK_F1*/))
      oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
  }

  else if (uMsg == 16) //WM_CLOSE
  {
    oSys.Call("user32::EnableWindow", hWndDlgCal, 1);
    oSys.Call("user32::DestroyWindow", hWnd);
  }

  else if (uMsg == 2) //WM_DESTROY
    oSys.Call("user32::PostQuitMessage", 0);

  return 0;
}

function Settings()
{
  var nWidth  = 265
  var nHeight = 465;
  var rcWndDesk;
  var rcWnd;
  var nX;
  var nY;
  var hWndDlgSet;
  var i;

  if (bResetColors)
  {
    nX = aWndSetPos.left;
    nY = aWndSetPos.top;
  }
  else
  {
    rcWndDesk = GetWindowPos(oSys.Call("user32::GetDesktopWindow"));
    rcWnd     = GetWindowPos(hWndDlgCal);
    nX        = rcWnd.right;
    nY        = rcWnd.top;

    if ((nX + nWidth) > rcWndDesk.right)
      nX = rcWnd.left - nWidth;
    if ((nY + nHeight) > rcWndDesk.bottom)
      nY = rcWnd.bottom - nHeight;
  }

  if (! aColor)
  {
    //i=0 - MCSC_BACKGROUND (not used)
    //i=4 - MCSC_MONTHBK
    //i=1 - MCSC_TEXT
    //i=2 - MCSC_TITLEBK
    //i=3 - MCSC_TITLETEXT
    //i=5 - MCSC_TRAILINGTEXT
    aColor = [];
    for (i = 1; i < 6; ++i)
      aColor[i] = AkelPad.SendMessage(hWndCal, 0x100B /*MCM_GETCOLOR*/, i, 0);
  }

  //0x40400000 - WS_CHILD|WS_DLGFRAME (no visible)
  //0x50000000 - WS_VISIBLE|WS_CHILD
  //0x50000007 - WS_VISIBLE|WS_CHILD|BS_GROUPBOX
  //0x50010000 - WS_VISIBLE|WS_CHILD|WS_TABSTOP
  //0x50012000 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_MULTILINE
  //0x50010003 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
  //0x50010003 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|CBS_DROPDOWNLIST
  //0x50010080 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
  //0x50800000 - WS_VISIBLE|WS_CHILD|WS_BORDER
  //Windows               WNDTYPE, WND,WNDEXSTY,     WNDSTY,WNDX,WNDY,WNDW,WNDH, WNDTXT
  lpWnd[IDFORMAT    ] = ["BUTTON",   0,       0, 0x50000007,  10,  10, 240, 130, pTxtFormat];
  lpWnd[IDDATE      ] = ["STATIC",   0,       0, 0x50000000,  20,  30, 220,  13, ""];
  lpWnd[IDTIME      ] = ["STATIC",   0,       0, 0x50000000,  20,  50, 220,  13, ""];
  lpWnd[IDSYSTEM    ] = ["BUTTON",   0,       0, 0x50010003,  20,  70,  80,  16, pTxtSystem];
  lpWnd[IDLONGDATE  ] = ["BUTTON",   0,       0, 0x50010003, 120,  70,  80,  16, pTxtLongDate];
  lpWnd[IDDF        ] = ["EDIT",     0,   0x200, 0x50010080,  20,  90, 135,  20, pDateForm];
  lpWnd[IDDFHLP     ] = ["BUTTON",   0,       0, 0x50010000, 155,  90,  15,  20, "?"];
  lpWnd[IDDFDESCR   ] = ["STATIC",   0,       0, 0x50000000, 175,  90,  70,  13, pTxtDateForm];
  lpWnd[IDTF        ] = ["EDIT",     0,   0x200, 0x50010080,  20, 110, 135,  20, pTimeForm];
  lpWnd[IDTFHLP     ] = ["BUTTON",   0,       0, 0x50010000, 155, 110,  15,  20, "?"];
  lpWnd[IDTFDESCR   ] = ["STATIC",   0,       0, 0x50000000, 175, 110,  70,  13, pTxtTimeForm];
  lpWnd[IDKEYASSIG  ] = ["BUTTON",   0,       0, 0x50000007,  10, 150, 240, 110, pTxtKeyAssig];
  lpWnd[IDASSIG0    ] = ["COMBOBOX", 0,       0, 0x50010003,  20, 170, 100,  20, ""];
  lpWnd[IDASSIG1    ] = ["COMBOBOX", 0,       0, 0x50010003,  20, 190, 100,  20, ""];
  lpWnd[IDASSIG2    ] = ["COMBOBOX", 0,       0, 0x50010003,  20, 210, 100,  20, ""];
  lpWnd[IDASSIG3    ] = ["COMBOBOX", 0,       0, 0x50010003,  20, 230, 100,  20, ""];
  lpWnd[IDENTER     ] = ["STATIC",   0,       0, 0x50000000, 125, 170,  80,  13, aKeyAssign[0][0]];
  lpWnd[IDSHENTER   ] = ["STATIC",   0,       0, 0x50000000, 125, 190,  80,  13, aKeyAssign[1][0]];
  lpWnd[IDCTENTER   ] = ["STATIC",   0,       0, 0x50000000, 125, 210,  80,  13, aKeyAssign[2][0]];
  lpWnd[IDCTSHENTER ] = ["STATIC",   0,       0, 0x50000000, 125, 230,  80,  13, aKeyAssign[3][0]];
  lpWnd[IDCALENDAR  ] = ["BUTTON",   0,       0, 0x50000007,  10, 270, 240, 155, pTxtCalendar];
  lpWnd[IDMONTHCOUNT] = ["COMBOBOX", 0,       0, 0x50010003,  20, 290,  40,  20, ""];
  lpWnd[IDMONTHDESCR] = ["STATIC",   0,       0, 0x50000000,  65, 290, 180,  13, pTxtMonths];
  lpWnd[IDCOLOR1    ] = ["STATIC",   0,       0, 0x50800000,  20, 320,  18,  18, ""];
  lpWnd[IDCOLOR2    ] = ["STATIC",   0,       0, 0x50800000,  20, 340,  18,  18, ""];
  lpWnd[IDCOLOR3    ] = ["STATIC",   0,       0, 0x50800000,  20, 360,  18,  18, ""];
  lpWnd[IDCOLOR4    ] = ["STATIC",   0,       0, 0x50800000,  20, 380,  18,  18, ""];
  lpWnd[IDCOLOR5    ] = ["STATIC",   0,       0, 0x50800000,  20, 400,  18,  18, ""];
  lpWnd[IDCOLOR1BUTT] = ["BUTTON",   0,       0, 0x50010000,  45, 320, 170,  20, pTxtColor1];
  lpWnd[IDCOLOR2BUTT] = ["BUTTON",   0,       0, 0x50010000,  45, 340, 170,  20, pTxtColor2];
  lpWnd[IDCOLOR3BUTT] = ["BUTTON",   0,       0, 0x50010000,  45, 360, 170,  20, pTxtColor3];
  lpWnd[IDCOLOR4BUTT] = ["BUTTON",   0,       0, 0x50010000,  45, 380, 170,  20, pTxtColor4];
  lpWnd[IDCOLOR5BUTT] = ["BUTTON",   0,       0, 0x50010000,  45, 400, 170,  20, pTxtColor5];
  lpWnd[IDRESET     ] = ["BUTTON",   0,       0, 0x50012000, 220, 320,  20, 100, pTxtReset];
  lpWnd[IDDFHLPTXT  ] = ["STATIC",   0,       0, 0x40400000,   0, 110, 255, 155, pHlpTxtDF];
  lpWnd[IDTFHLPTXT  ] = ["STATIC",   0,       0, 0x40400000,   0, 130, 255, 140, pHlpTxtTF];

  hWndDlgSet = oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0,              //dwExStyle
                         pClassName,     //lpClassName
                         pTxtSettings,   //lpWindowName
                         0x90C80000,     //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU
                         nX,             //x
                         nY,             //y
                         nWidth,         //nWidth
                         nHeight,        //nHeight
                         hWndDlgCal,     //hWndParent
                         0,              //ID
                         hInstanceDLL,   //hInstance
                         DialogCallbackSet); //Script function callback

  if (hWndDlgSet)
  {
    oSys.Call("user32::EnableWindow", hWndDlgCal, 0);
    AkelPad.WindowGetMessage();
    oSys.Call("gdi32::DeleteObject", hBrushColor);
  }
}

function DialogCallbackSet(hWnd, uMsg, wParam, lParam)
{
  var i, nLowParam, nHiwParam;

  if (uMsg == 1) //WM_CREATE
  {
    //Create windows
    for (i = 1000; i < lpWnd.length; ++i)
    {
      lpWnd[i][WND] = oSys.Call("user32::CreateWindowEx" + _TCHAR,
                                lpWnd[i][WNDEXSTY],//dwExStyle
                                lpWnd[i][WNDTYPE], //lpClassName
                                0,                 //lpWindowName
                                lpWnd[i][WNDSTY],  //dwStyle
                                lpWnd[i][WNDX],    //x
                                lpWnd[i][WNDY],    //y
                                lpWnd[i][WNDW],    //nWidth
                                lpWnd[i][WNDH],    //nHeight
                                hWnd,              //hWndParent
                                i,                 //ID
                                hInstanceDLL,      //hInstance
                                0);                //lpParam
      //Set font and text
      SetWndFontAndText(lpWnd[i][WND], hGuiFont, lpWnd[i][WNDTXT]);
    }

    //Set limit edit text
    AkelPad.SendMessage(lpWnd[IDDF][WND], 197 /*EM_SETLIMITTEXT*/, 24, 0);
    AkelPad.SendMessage(lpWnd[IDTF][WND], 197 /*EM_SETLIMITTEXT*/, 24, 0);

    //Fill comboboxes
    for (i = 0; i < 4; ++i)
    {
      AkelPad.MemCopy(lpBuffer, pTxtDate, _TSTR);
      AkelPad.SendMessage(lpWnd[eval("IDASSIG" + i)][WND], 0x143 /*CB_ADDSTRING*/, 0, lpBuffer);
      AkelPad.MemCopy(lpBuffer, pTxtDate + " " + pTxtTime, _TSTR);
      AkelPad.SendMessage(lpWnd[eval("IDASSIG" + i)][WND], 0x143 /*CB_ADDSTRING*/, 0, lpBuffer);
      AkelPad.MemCopy(lpBuffer, pTxtTime, _TSTR);
      AkelPad.SendMessage(lpWnd[eval("IDASSIG" + i)][WND], 0x143 /*CB_ADDSTRING*/, 0, lpBuffer);
      AkelPad.MemCopy(lpBuffer, pTxtTime + " " + pTxtDate, _TSTR);
      AkelPad.SendMessage(lpWnd[eval("IDASSIG" + i)][WND], 0x143 /*CB_ADDSTRING*/, 0, lpBuffer);
      AkelPad.SendMessage(lpWnd[eval("IDASSIG" + i)][WND], 0x14E /*CB_SETCURSEL*/, aKeyAssign[i][1], 0);
    }
    for (i = 1; i < 6; ++i)
    {
      AkelPad.MemCopy(lpBuffer, " " + i + " ", _TSTR);
      AkelPad.SendMessage(lpWnd[IDMONTHCOUNT][WND], 0x143 /*CB_ADDSTRING*/, 0, lpBuffer);
    }
    AkelPad.SendMessage(lpWnd[IDMONTHCOUNT][WND], 0x14E /*CB_SETCURSEL*/, nMonthCount - 1, 0);

    //Check
    CheckButtons();
  }

  else if (uMsg == 7) //WM_SETFOCUS
  {
    if (bResetColors)
    {
      bResetColors = false;
      oSys.Call("user32::SetFocus", lpWnd[IDRESET][WND]);
      oSys.Call("user32::DefDlgProc" + _TCHAR, hWnd, 1025 /*DM_SETDEFID*/, IDRESET, 0);
    }
    else
      oSys.Call("user32::SetFocus", lpWnd[IDSYSTEM][WND]);
  }

  else if (uMsg == 256) //WM_KEYDOWN
  {
    if (wParam == 112) //VK_F1
    {
      if (oSys.Call("user32::GetFocus") == lpWnd[IDDF][WND])
        oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDDFHLP, 0);
      else if (oSys.Call("user32::GetFocus") == lpWnd[IDTF][WND])
        oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDTFHLP, 0);
    }
    else if ((wParam == 9 /*VK_TAB*/) || (wParam == 27 /*VK_ESCAPE*/))
    {
      if (oSys.Call("user32::IsWindowVisible", lpWnd[IDDFHLPTXT][WND]))
        ShowFormatHelp(hWnd, lpWnd[IDDFHLPTXT][WND], 0);
      else if (oSys.Call("user32::IsWindowVisible", lpWnd[IDTFHLPTXT][WND]))
        ShowFormatHelp(hWnd, lpWnd[IDTFHLPTXT][WND], 0);
      else if (wParam == 27 /*VK_ESCAPE*/)
        oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
  }

  else if ((uMsg == 0x0201 /*WM_LBUTTONDOWN*/) || (uMsg == 0x0204 /*WM_RBUTTONDOWN*/) ||
           (uMsg == 0x0207 /*WM_MBUTTONDOWN*/) || (uMsg == 0x020b /*WM_XBUTTONDOWN*/))
  {
    if (oSys.Call("user32::IsWindowVisible", lpWnd[IDDFHLPTXT][WND]))
      ShowFormatHelp(hWnd, lpWnd[IDDFHLPTXT][WND], 0);
    else if (oSys.Call("user32::IsWindowVisible", lpWnd[IDTFHLPTXT][WND]))
      ShowFormatHelp(hWnd, lpWnd[IDTFHLPTXT][WND], 0);
  }

  else if (uMsg == 0x0138) //WM_CTLCOLORSTATIC
  {
    if ((lParam == lpWnd[IDDFHLPTXT][WND]) || (lParam == lpWnd[IDTFHLPTXT][WND]))
    {
      oSys.Call("gdi32::DeleteObject", hBrushColor);
      oSys.Call("gdi32::SetTextColor", wParam, 0x006000);
      oSys.Call("gdi32::SetBkColor", wParam, 0xFFFFFF);
      hBrushColor = oSys.Call("gdi32::CreateSolidBrush", 0xFFFFFF);
      return hBrushColor;
    }
    if (lParam == lpWnd[IDCOLOR1][WND])
    {
      oSys.Call("gdi32::DeleteObject", hBrushColor);
      hBrushColor = oSys.Call("gdi32::CreateSolidBrush", aColor[4]);
      return hBrushColor;
    }
    if (lParam == lpWnd[IDCOLOR2][WND])
    {
      oSys.Call("gdi32::DeleteObject", hBrushColor);
      hBrushColor = oSys.Call("gdi32::CreateSolidBrush", aColor[1]);
      return hBrushColor;
    }
    if (lParam == lpWnd[IDCOLOR3][WND])
    {
      oSys.Call("gdi32::DeleteObject", hBrushColor);
      hBrushColor = oSys.Call("gdi32::CreateSolidBrush", aColor[2]);
      return hBrushColor;
    }
    if (lParam == lpWnd[IDCOLOR4][WND])
    {
      oSys.Call("gdi32::DeleteObject", hBrushColor);
      hBrushColor = oSys.Call("gdi32::CreateSolidBrush", aColor[3]);
      return hBrushColor;
    }
    if (lParam == lpWnd[IDCOLOR5][WND])
    {
      oSys.Call("gdi32::DeleteObject", hBrushColor);
      hBrushColor = oSys.Call("gdi32::CreateSolidBrush", aColor[5]);
      return hBrushColor;
    }
  }

  else if (uMsg == 273) //WM_COMMAND
  {
    nLowParam = LoWord(wParam);
    nHiwParam = HiWord(wParam);

    if ((nLowParam == IDSYSTEM) || (nLowParam == IDLONGDATE))
    {
      CheckButtons(nLowParam);
    }
    else if ((nLowParam == IDDF) && (nHiwParam == 0x300 /*EN_CHANGE*/))
    {
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDDF][WND], lpBuffer, 256);
      pDateForm = AkelPad.MemRead(lpBuffer, _TSTR);
      SetWndFontAndText(lpWnd[IDDATE][WND], hGuiFont, GetDate());
    }
    else if ((nLowParam == IDTF) && (nHiwParam == 0x300 /*EN_CHANGE*/))
    {
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDTF][WND], lpBuffer, 256);
      pTimeForm = AkelPad.MemRead(lpBuffer, _TSTR);
      SetWndFontAndText(lpWnd[IDTIME][WND], hGuiFont, GetTime());
    }
    else if (nLowParam == IDDFHLP)
      ShowFormatHelp(hWnd, lpWnd[IDDFHLPTXT][WND],
                       ! oSys.Call("user32::IsWindowVisible", lpWnd[IDDFHLPTXT][WND]));
    else if (nLowParam == IDTFHLP)
      ShowFormatHelp(hWnd, lpWnd[IDTFHLPTXT][WND],
                       ! oSys.Call("user32::IsWindowVisible", lpWnd[IDTFHLPTXT][WND]));
    else if ((nLowParam >= IDASSIG0) && (nLowParam <= IDASSIG3) && (nHiwParam == 1 /*CBN_SELCHANGE*/))
      aKeyAssign[nLowParam - IDASSIG0][1] = AkelPad.SendMessage(lpWnd[nLowParam][WND], 0x147 /*CB_GETCURSEL*/, 0, 0);
    else if ((nLowParam == IDMONTHCOUNT) && (nHiwParam == 1 /*CBN_SELCHANGE*/))
    {
      nMonthCount = AkelPad.SendMessage(lpWnd[IDMONTHCOUNT][WND], 0x147 /*CB_GETCURSEL*/, 0, 0) + 1;
      SetWindowSize(hWndDlgCal);
      MoveWindow(hMainWnd, hWndDlgCal, "CV");
    }
    else if ((nLowParam >= IDCOLOR1BUTT) && (nLowParam <= IDCOLOR5BUTT))
      ChangeColor(hWnd, nLowParam);
    else if (nLowParam == IDRESET)
    {
      bResetColors = true;
      aColor       = undefined;
      aWndCalPos   = GetWindowPos(hWndCal);
      aWndSetPos   = GetWindowPos(hWnd);
      AkelPad.SendMessage(hWndCal, 0x1001 /*MCM_GETCURSEL*/, 0, lpSysTime);
      oSys.Call("user32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
  }

  else if (uMsg == 16) //WM_CLOSE
  {
    oSys.Call("user32::EnableWindow", hWndDlgCal, 1);
    oSys.Call("user32::DestroyWindow", hWnd);
  }

  else if (uMsg == 2) //WM_DESTROY
    oSys.Call("user32::PostQuitMessage", 0);

  return 0;
}

function CheckButtons(nButton)
{
  if (nButton == IDSYSTEM)
    bSystem = ! bSystem;
  else if (nButton == IDLONGDATE)
    bLongDate = ! bLongDate;

  AkelPad.SendMessage(lpWnd[IDSYSTEM][WND],   241 /*BM_SETCHECK*/, bSystem,   0);
  AkelPad.SendMessage(lpWnd[IDLONGDATE][WND], 241 /*BM_SETCHECK*/, bLongDate, 0);

  oSys.Call("user32::EnableWindow", lpWnd[IDLONGDATE][WND], bSystem);
  oSys.Call("user32::EnableWindow", lpWnd[IDDF][WND], ! bSystem);
  oSys.Call("user32::EnableWindow", lpWnd[IDTF][WND], ! bSystem);
  oSys.Call("user32::EnableWindow", lpWnd[IDDFHLP][WND], ! bSystem);
  oSys.Call("user32::EnableWindow", lpWnd[IDTFHLP][WND], ! bSystem);

  SetWndFontAndText(lpWnd[IDDATE][WND], hGuiFont, GetDate());
  SetWndFontAndText(lpWnd[IDTIME][WND], hGuiFont, GetTime());
}

function ShowFormatHelp(hWndDlg, hWndHlp, bShow)
{
  if (bShow)
    oSys.Call("user32::SetCapture", hWndDlg);
  else
    oSys.Call("user32::ReleaseCapture");

  oSys.Call("user32::ShowWindow", hWndHlp, bShow);
}

function ChangeColor(hWnd, nButton)
{
  var nCo     = nButton - IDCOLOR1BUTT;
  var lpChoCo = AkelPad.MemAlloc(4 * 9); //sizeof(CHOOSECOLOR)
  var lpCusCo = AkelPad.MemAlloc(4 * 16); //sizeof(COLORREF) * 16
  var hFocus  = oSys.Call("user32::GetFocus");
  var i;

  if (nButton == IDCOLOR1BUTT)
    nCo = 4;
  else if (nButton == IDCOLOR5BUTT)
    nCo = 5;

  for(i = 0; i < 16; ++i)
    AkelPad.MemCopy(lpCusCo + i * 4, 0, DT_DWORD);

  AkelPad.MemCopy(lpChoCo     , (4 * 9),     DT_DWORD); //lStructSize
  AkelPad.MemCopy(lpChoCo +  4, hWnd,        DT_DWORD); //hWndOwner
  AkelPad.MemCopy(lpChoCo +  8, 0,           DT_DWORD); //hInstance
  AkelPad.MemCopy(lpChoCo + 12, aColor[nCo], DT_DWORD); //rgbResult
  AkelPad.MemCopy(lpChoCo + 16, lpCusCo,     DT_DWORD); //lpCustColors
  AkelPad.MemCopy(lpChoCo + 20, 0x103,       DT_DWORD); //Flags - CC_ANYCOLOR|CC_FULLOPEN|CC_RGBINIT
  AkelPad.MemCopy(lpChoCo + 24, 0,           DT_DWORD); //lCustData
  AkelPad.MemCopy(lpChoCo + 28, 0,           DT_DWORD); //lpfnHook
  AkelPad.MemCopy(lpChoCo + 32, 0,           DT_DWORD); //lpTemplateName

  if (oSys.Call("comdlg32::ChooseColor" + _TCHAR, lpChoCo))
  {
    aColor[nCo] = AkelPad.MemRead(lpChoCo + 12, DT_DWORD);
    SetWndFontAndText(lpWnd[nButton - 5][WND], hGuiFont, lpWnd[nButton - 5][WNDTXT]);
    AkelPad.SendMessage(hWndCal, 0x100A /*MCM_SETCOLOR*/, nCo, aColor[nCo]);
  }

  AkelPad.MemFree(lpChoCo);
  AkelPad.MemFree(lpCusCo);
  oSys.Call("user32::SetFocus", hFocus);
}



Last edited by KDJ on Thu Apr 07, 2011 8:03 pm; edited 3 times in total
Back to top
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 2523
Location: Êèåâ, Ðóñü

PostPosted: Tue Mar 29, 2011 3:58 pm    Post subject: Reply with quote

BlockSelect.js

Code:
///Select textblock by borders
///Âûäåëÿåò áëîê ïî çàäàííûì ãðàíèöàì
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=12241#12241
// Version: 1.1 (2011.07.21)
//
// Ïðèìåðû:
// -"ScriptBlock select" Call("Scripts::Main", 1, "BlockSelect.js")      - ïî óìîë÷àíèþ (áåç àãðóìåíòîâ) âûäåëÿåòñÿ òåêñòîâûé áëîê, êîòîðûé íàõîäèòñÿ â {}
// -"SelCompleteLine" Call("Scripts::Main", 1, "BlockSelect.js", `-tagStart="\r" -tagEnd="\r" -inclTags=0`)      - ïîëíîå âûäåëåíèå âñåõ çàòðîíóòûõ ñòðîê
// -"CommentBlock select" Call("Scripts::Main", 1, "BlockSelect.js", `-tagStart="/*" -tagEnd="*/"`)      - âûäåëåíèå áëîêà êîììåíòàðèåâ
// -"[code]{...}[/code]" Call("Scripts::Main", 1, "BlockSelect.js", `-tagStart="[code]" -tagEnd="[/code]" -inclTags=0`) - âûäåëåíèå òåêñòà, íàõîäÿùåãîñÿ ìåæäó îïðåäåë¸ííûìè òýãàìè


if (! AkelPad.Include("selCompleteLine.js")) WScript.Quit();

sbOpen = escSequencesProcessing(AkelPad.GetArgValue("tagStart", sbOpen));      //òýã, ñ êîòîðîãî íà÷èíàòü âûäåëåíèå
sbClose = escSequencesProcessing(AkelPad.GetArgValue("tagEnd", sbClose));         //òýã, íà êîòîðîì çàêàí÷èâàòü âûäåëåíèå
var bIncludeTags = AkelPad.GetArgValue("inclTags", 1);               //çàõâàòûâàòü òýãè â âûäåëåíèå èëè íåò

var Range;

if (sbOpen != pBreak)
   Range = getRangebyBordersEx(AkelPad.GetSelStart(), sbOpen, sbClose, bIncludeTags);
else
   Range = getRangebyBorders(AkelPad.GetSelStart(), AkelPad.GetSelEnd(), pBreak, pBreak, bIncludeTags)

if (Range != null)
   AkelPad.SetSel(Range[0], Range[1]);


BlockDeclose.js

Code:
///Declose scriptblock
///Óáèðàåò áëî÷íîñòü (ñêîáêè { òåêñò }) âûäåëåííîãî ñêðèïòà
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=12241#12241
// Version: 1.1 (2011.03.30)


if (! AkelPad.Include("selCompleteLine.js")) WScript.Quit();

var iSelStart = AkelPad.GetSelStart();
var iSelEnd = AkelPad.GetSelEnd();
var Range;

if (iSelStart == iSelEnd)
{
   Range = getRangebyBordersEx(iSelStart, sbOpen, sbClose, true);
   if (Range == null) WScript.Quit();
   iSelStart = Range[0];
   iSelEnd = Range[1] - 1;      //áåç êîíå÷íîãî ïåðåâîäà ñòðîêè
}
Range = getRangeCompleteLine(iSelStart, iSelEnd);
if (Range == null) WScript.Quit();

var pText = getTextbyRange(Range);

getShift();      //îïðåäåëåíèå ñîäåðæèìîãî ñäâèãà èç íàñòðîåê

pText = pText.replace(new RegExp(pBreak + sShift, "g"), pBreak);      //óäàëÿåì ëèøíèå ñäâèãè ïî âñåìó áëîêó
pText = pText.replace(new RegExp(sbOpen), "");      //óäàëÿåì îòêðûâàþùèé òýã
pText = oStr.leftback(pText, sbClose);      //óäàëÿåì çàêðûâàþùèé òýã

if (pText.indexOf(pBreak) != 0)
   pText += sShift;      //âîññòàíàâëèâàåì èçëèøíå óäàë¸ííûé ñäâèã âíèçó-ñïðàâà

AkelPad.SetSel(Range[0], Range[1]);
AkelPad.ReplaceSel(pText);

p.s.: Instructor, áëàãîäàðþ çà èäåþ!


N.B.: Îáà ñêðèïòà èñïîëüçóþò selCompleteLine.js.


Last edited by VladSh on Thu Jul 21, 2011 3:46 pm; edited 1 time in total
Back to top
View user's profile Send private message Visit poster's website
FeyFre



Joined: 07 Aug 2007
Posts: 1907
Location: Vinnitsa, Ukraine

PostPosted: Sun Apr 03, 2011 9:40 pm    Post subject: Reply with quote

Microsoft Data Access - ActiveX Data Objects - constants and helpers set

ADODB.js
Code:
/*******************************************************************************
 * Microsoft Data Access - ActiveX Data Objects - constants and helpers set
 * v1.2
 *
 * Based on ADO Import Type Library v2.81
 * Author: Panych Y.W. panych.y (bark) gmail.com
 * Forum thread: http://akelpad.sourceforge.net/forum/viewtopic.php?p=12315#12315
 * Download: http://outstanding.hmarka.net/akelpad/scripts/ADODB.js
 ******************************************************************************/
ADODB =
{
   CursorTypeEnum: {
      adOpenUnspecified:               -1,
      adOpenForwardOnly:               0,
      adOpenKeyset:                  1,
      adOpenDynamic:                  2,
      adOpenStatic:                  3
   },
   CursorOptionEnum: {
      adHoldRecords:                  256,
      adMovePrevious:                  512,
      adAddNew:                     16778240,
      adDelete:                     16779264,
      adUpdate:                     16809984,
      adBookmark:                     8192,
      adApproxPosition:               16384,
      adUpdateBatch:                  65536,
      adResync:                     131072,
      adNotify:                     262144,
      adFind:                        524288,
      adSeek:                        4194304,
      adIndex:                     8388608
   },
   LockTypeEnum: {
      adLockUnspecified:               -1,
      adLockReadOnly:                  1,
      adLockPessimistic:               2,
      adLockOptimistic:               3,
      adLockBatchOptimistic:            4
   },
   ExecuteOptionEnum: {
      adOptionUnspecified:            -1,
      adAsyncExecute:                  16,
      adAsyncFetch:                  32,
      adAsyncFetchNonBlocking:         64,
      adExecuteNoRecords:               128,
      adExecuteStream:               1024,
      adExecuteRecord:               2048
   },
   ConnectOptionEnum: {
      adConnectUnspecified:            -1,
      adAsyncConnect:                  16
   },
   ObjectStateEnum: {
      adStateClosed:                  0,
      adStateOpen:                  1,
      adStateConnecting:               2,
      adStateExecuting:               4,
      adStateFetching:               8
   },
   CursorLocationEnum: {
      adUseNone:                     1,
      adUseServer:                  2,
      adUseClient:                  3,
      adUseClientBatch:               3
   },
   DataTypeEnum: {
      adEmpty:                     0,
      adTinyInt:                     16,
      adSmallInt:                     2,
      adInteger:                     3,
      adBigInt:                     20,
      adUnsignedTinyInt:               17,
      adUnsignedSmallInt:               18,
      adUnsignedInt:                  19,
      adUnsignedBigInt:               21,
      adSingle:                     4,
      adDouble:                     5,
      adCurrency:                     6,
      adDecimal:                     14,
      adNumeric:                     131,
      adBoolean:                     11,
      adError:                     10,
      adUserDefined:                  132,
      adVariant:                     12,
      adIDispatch:                  9,
      adIUnknown:                     13,
      adGUID:                        72,
      adDate:                        7,
      adDBDate:                     133,
      adDBTime:                     134,
      adDBTimeStamp:                  135,
      adBSTR:                        8,
      adChar:                        129,
      adVarChar:                     200,
      adLongVarChar:                  201,
      adWChar:                     130,
      adVarWChar:                     202,
      adLongVarWChar:                  203,
      adBinary:                     128,
      adVarBinary:                  204,
      adLongVarBinary:               205,
      adChapter:                     136,
      adFileTime:                     64,
      adPropVariant:                  138,
      adVarNumeric:                  139,
      adArray:                     8192
   },
   FieldAttributeEnum: {
      adFldUnspecified:               -1,
      adFldMayDefer:                  2,
      adFldUpdatable:                  4,
      adFldUnknownUpdatable:            8,
      adFldFixed:                     16,
      adFldIsNullable:               32,
      adFldMayBeNull:                  64,
      adFldLong:                     128,
      adFldRowID:                     256,
      adFldRowVersion:               512,
      adFldCacheDeferred:               4096,
      adFldIsChapter:                  8192,
      adFldNegativeScale:               16384,
      adFldKeyColumn:                  32768,
      adFldIsRowURL:                  65536,
      adFldIsDefaultStream:            131072,
      adFldIsCollection:               262144
   },
   EditModeEnum: {
      adEditNone:                     0,
      adEditInProgress:               1,
      adEditAdd:                     2,
      adEditDelete:                  4
   },
   RecordStatusEnum: {
      adRecOK:                     0,
      adRecNew:                     1,
      adRecModified:                  2,
      adRecDeleted:                  4,
      adRecUnmodified:               8,
      adRecInvalid:                  16,
      adRecMultipleChanges:            64,
      adRecPendingChanges:            128,
      adRecCanceled:                  256,
      adRecCantRelease:               1024,
      adRecConcurrencyViolation:         2048,
      adRecIntegrityViolation:         4096,
      adRecMaxChangesExceeded:         8192,
      adRecObjectOpen:               16384,
      adRecOutOfMemory:               32768,
      adRecPermissionDenied:            65536,
      adRecSchemaViolation:            131072,
      adRecDBDeleted:                  262144
   },
   GetRowsOptionEnum: {
      adGetRowsRest:                  -1
   },
   PositionEnum: {
      adPosUnknown:                  -1,
      adPosBOF:                     -2,
      adPosEOF:                     -3
   },
   PositionEnum_Param: { //! Fully equal PositionEnum(typedef-ed in typelib)
      adPosUnknown:                  -1,
      adPosBOF:                     -2,
      adPosEOF:                     -3
   },
   BookmarkEnum: {
      adBookmarkCurrent:               0,
      adBookmarkFirst:               1,
      adBookmarkLast:                  2
   },
   MarshalOptionsEnum: {
      adMarshalAll:                  0,
      adMarshalModifiedOnly:            1
   },
   AffectEnum: {
      adAffectCurrent:               1,
      adAffectGroup:                  2,
      adAffectAll:                  3,
      adAffectAllChapters:            4
   },
   ResyncEnum: {
      adResyncUnderlyingValues:         1,
      adResyncAllValues:               2
   },
   CompareEnum: {
      adCompareLessThan:               0,
      adCompareEqual:                  1,
      adCompareGreaterThan:            2,
      adCompareNotEqual:               3,
      adCompareNotComparable:            4
   },
   FilterGroupEnum: {
      adFilterNone:                  0,
      adFilterPendingRecords:            1,
      adFilterAffectedRecords:         2,
      adFilterFetchedRecords:            3,
      adFilterPredicate:               4,
      adFilterConflictingRecords:         5
   },
   SearchDirectionEnum: {
      adSearchForward:               1,
      adSearchBackward:               -1
   },
   SearchDirection: {
      adSearchForward:               1,
      adSearchBackward:               -1
   },
   PersistFormatEnum: {
      adPersistADTG:                  0,
      adPersistXML:                  1
   },
   StringFormatEnum: {
      adClipString:                  2
   },
   ConnectPromptEnum: {
      adPromptAlways:                  1,
      adPromptComplete:               2,
      adPromptCompleteRequired:         3,
      adPromptNever:                  4
   },
   ConnectModeEnum: {
      adModeUnknown:                  0,
      adModeRead:                     1,
      adModeWrite:                  2,
      adModeReadWrite:               3,
      adModeShareDenyRead:            4,
      adModeShareDenyWrite:            8,
      adModeShareExclusive:            12,
      adModeShareDenyNone:            16,
      adModeRecursive:               4194304
   },
   RecordCreateOptionsEnum: {
      adCreateCollection:               8192,
      adCreateStructDoc:               -2147483648,
      adCreateNonCollection:            0,
      adOpenIfExists:                  33554432,
      adCreateOverwrite:               67108864,
      adFailIfNotExists:               -1
   },
   RecordOpenOptionsEnum: {
      adOpenRecordUnspecified:         -1,
      adOpenSource:                  8388608,
      adOpenOutput:                  8388608,
      adOpenAsync:                  4096,
      adDelayFetchStream:               16384,
      adDelayFetchFields:               32768,
      adOpenExecuteCommand:            65536
   },
   IsolationLevelEnum: {
      adXactUnspecified:               -1,
      adXactChaos:                  16,
      adXactReadUncommitted:            256,
      adXactBrowse:                  256,
      adXactCursorStability:            4096,
      adXactReadCommitted:            4096,
      adXactRepeatableRead:            65536,
      adXactSerializable:               1048576,
      adXactIsolated:                  1048576
   },
   XactAttributeEnum: {
      adXactCommitRetaining:            131072,
      adXactAbortRetaining:            262144,
      adXactAsyncPhaseOne:            524288,
      adXactSyncPhaseOne:               1048576
   },
   PropertyAttributesEnum: {
      adPropNotSupported:               0,
      adPropRequired:                  1,
      adPropOptional:                  2,
      adPropRead:                     512,
      adPropWrite:                  1024
   },
   ErrorValueEnum: {
      adErrProviderFailed:            3000,
      adErrInvalidArgument:            3001,
      adErrOpeningFile:               3002,
      adErrReadFile:                  3003,
      adErrWriteFile:                  3004,
      adErrNoCurrentRecord:            3021,
      adErrIllegalOperation:            3219,
      adErrCantChangeProvider:         3220,
      adErrInTransaction:               3246,
      adErrFeatureNotAvailable:         3251,
      adErrItemNotFound:               3265,
      adErrObjectInCollection:         3367,
      adErrObjectNotSet:               3420,
      adErrDataConversion:            3421,
      adErrObjectClosed:               3704,
      adErrObjectOpen:               3705,
      adErrProviderNotFound:            3706,
      adErrBoundToCommand:            3707,
      adErrInvalidParamInfo:            3708,
      adErrInvalidConnection:            3709,
      adErrNotReentrant:               3710,
      adErrStillExecuting:            3711,
      adErrOperationCancelled:         3712,
      adErrStillConnecting:            3713,
      adErrInvalidTransaction:         3714,
      adErrNotExecuting:               3715,
      adErrUnsafeOperation:            3716,
      adwrnSecurityDialog:            3717,
      adwrnSecurityDialogHeader:         3718,
      adErrIntegrityViolation:         3719,
      adErrPermissionDenied:            3720,
      adErrDataOverflow:               3721,
      adErrSchemaViolation:            3722,
      adErrSignMismatch:               3723,
      adErrCantConvertvalue:            3724,
      adErrCantCreate:               3725,
      adErrColumnNotOnThisRow:         3726,
      adErrURLDoesNotExist:            3727,
      adErrTreePermissionDenied:         3728,
      adErrInvalidURL:               3729,
      adErrResourceLocked:            3730,
      adErrResourceExists:            3731,
      adErrCannotComplete:            3732,
      adErrVolumeNotFound:            3733,
      adErrOutOfSpace:               3734,
      adErrResourceOutOfScope:         3735,
      adErrUnavailable:               3736,
      adErrURLNamedRowDoesNotExist:      3737,
      adErrDelResOutOfScope:            3738,
      adErrPropInvalidColumn:            3739,
      adErrPropInvalidOption:            3740,
      adErrPropInvalidValue:            3741,
      adErrPropConflicting:            3742,
      adErrPropNotAllSettable:         3743,
      adErrPropNotSet:               3744,
      adErrPropNotSettable:            3745,
      adErrPropNotSupported:            3746,
      adErrCatalogNotSet:               3747,
      adErrCantChangeConnection:         3748,
      adErrFieldsUpdateFailed:         3749,
      adErrDenyNotSupported:            3750,
      adErrDenyTypeNotSupported:         3751,
      adErrProviderNotSpecified:         3753,
      adErrConnectionStringTooLong:      3754
   },
   ParameterAttributesEnum: {
      adParamSigned:                  16,
      adParamNullable:               64,
      adParamLong:                  128
   },
   ParameterDirectionEnum: {
      adParamUnknown:                  0,
      adParamInput:                  1,
      adParamOutput:                  2,
      adParamInputOutput:               3,
      adParamReturnValue:               4
   },
   CommandTypeEnum: {
      adCmdUnspecified:               -1,
      adCmdUnknown:                  8,
      adCmdText:                     1,
      adCmdTable:                     2,
      adCmdStoredProc:               4,
      adCmdFile:                     256,
      adCmdTableDirect:               512
   },
   EventStatusEnum: {
      adStatusOK:                     1,
      adStatusErrorsOccurred:            2,
      adStatusCantDeny:               3,
      adStatusCancel:                  4,
      adStatusUnwantedEvent:            5
   },
   EventReasonEnum: {
      adRsnAddNew:                  1,
      adRsnDelete:                  2,
      adRsnUpdate:                  3,
      adRsnUndoUpdate:               4,
      adRsnUndoAddNew:               5,
      adRsnUndoDelete:               6,
      adRsnRequery:                  7,
      adRsnResynch:                  8,
      adRsnClose:                     9,
      adRsnMove:                     10,
      adRsnFirstChange:               11,
      adRsnMoveFirst:                  12,
      adRsnMoveNext:                  13,
      adRsnMovePrevious:               14,
      adRsnMoveLast:                  15
   },
   SchemaEnum: {
      adSchemaProviderSpecific:         -1,
      adSchemaAsserts:               0,
      adSchemaCatalogs:               1,
      adSchemaCharacterSets:            2,
      adSchemaCollations:               3,
      adSchemaColumns:               4,
      adSchemaCheckConstraints:         5,
      adSchemaConstraintColumnUsage:      6,
      adSchemaConstraintTableUsage:      7,
      adSchemaKeyColumnUsage:            8,
      adSchemaReferentialContraints:      9,
      adSchemaReferentialConstraints:      9,
      adSchemaTableConstraints:         10,
      adSchemaColumnsDomainUsage:         11,
      adSchemaIndexes:               12,
      adSchemaColumnPrivileges:         13,
      adSchemaTablePrivileges:         14,
      adSchemaUsagePrivileges:         15,
      adSchemaProcedures:               16,
      adSchemaSchemata:               17,
      adSchemaSQLLanguages:            18,
      adSchemaStatistics:               19,
      adSchemaTables:                  20,
      adSchemaTranslations:            21,
      adSchemaProviderTypes:            22,
      adSchemaViews:                  23,
      adSchemaViewColumnUsage:         24,
      adSchemaViewTableUsage:            25,
      adSchemaProcedureParameters:      26,
      adSchemaForeignKeys:            27,
      adSchemaPrimaryKeys:            28,
      adSchemaProcedureColumns:         29,
      adSchemaDBInfoKeywords:            30,
      adSchemaDBInfoLiterals:            31,
      adSchemaCubes:                  32,
      adSchemaDimensions:               33,
      adSchemaHierarchies:            34,
      adSchemaLevels:                  35,
      adSchemaMeasures:               36,
      adSchemaProperties:               37,
      adSchemaMembers:               38,
      adSchemaTrustees:               39,
      adSchemaFunctions:               40,
      adSchemaActions:               41,
      adSchemaCommands:               42,
      adSchemaSets:                  43
   },
   FieldStatusEnum: {
      adFieldOK:                     0,
      adFieldCantConvertValue:         2,
      adFieldIsNull:                  3,
      adFieldTruncated:               4,
      adFieldSignMismatch:            5,
      adFieldDataOverflow:            6,
      adFieldCantCreate:               7,
      adFieldUnavailable:               8,
      adFieldPermissionDenied:         9,
      adFieldIntegrityViolation:         10,
      adFieldSchemaViolation:            11,
      adFieldBadStatus:               12,
      adFieldDefault:                  13,
      adFieldIgnore:                  15,
      adFieldDoesNotExist:            16,
      adFieldInvalidURL:               17,
      adFieldResourceLocked:            18,
      adFieldResourceExists:            19,
      adFieldCannotComplete:            20,
      adFieldVolumeNotFound:            21,
      adFieldOutOfSpace:               22,
      adFieldCannotDeleteSource:         23,
      adFieldReadOnly:               24,
      adFieldResourceOutOfScope:         25,
      adFieldAlreadyExists:            26,
      adFieldPendingInsert:            65536,
      adFieldPendingDelete:            131072,
      adFieldPendingChange:            262144,
      adFieldPendingUnknown:            524288,
      adFieldPendingUnknownDelete:      1048576
   },
   SeekEnum: {
      adSeekFirstEQ:                  1,
      adSeekLastEQ:                  2,
      adSeekAfterEQ:                  4,
      adSeekAfter:                  8,
      adSeekBeforeEQ:                  16,
      adSeekBefore:                  32
   },
   ADCPROP_UPDATECRITERIA_ENUM: {
      adCriteriaKey:                  0,
      adCriteriaAllCols:               1,
      adCriteriaUpdCols:               2,
      adCriteriaTimeStamp:            3
   },
   ADCPROP_ASYNCTHREADPRIORITY_ENUM: {
      adPriorityLowest:               1,
      adPriorityBelowNormal:            2,
      adPriorityNormal:               3,
      adPriorityAboveNormal:            4,
      adPriorityHighest:               5
   },
   ADCPROP_AUTORECALC_ENUM: {
      adRecalcUpFront:               0,
      adRecalcAlways:                  1
   },
   ADCPROP_UPDATERESYNC_ENUM: {
      adResyncNone:                  0,
      adResyncAutoIncrement:            1,
      adResyncConflicts:               2,
      adResyncUpdates:               4,
      adResyncInserts:               8,
      adResyncAll:                  15
   },
   MoveRecordOptionsEnum: {
      adMoveUnspecified:               -1,
      adMoveOverWrite:               1,
      adMoveDontUpdateLinks:            2,
      adMoveAllowEmulation:            4
   },
   CopyRecordOptionsEnum: {
      adCopyUnspecified:               -1,
      adCopyOverWrite:               1,
      adCopyAllowEmulation:            4,
      adCopyNonRecursive:               2
   },
   StreamTypeEnum: {
      adTypeBinary:                  1,
      adTypeText:                     2
   },
   LineSeparatorEnum: {
      adLF:                        10,
      adCR:                        13,
      adCRLF:                        -1
   },
   StreamOpenOptionsEnum: {
      adOpenStreamUnspecified:         -1,
      adOpenStreamAsync:               1,
      adOpenStreamFromRecord:            4
   },
   StreamWriteEnum: {
      adWriteChar:                  0,
      adWriteLine:                  1,
      stWriteChar:                  0,
      stWriteLine:                  1
   },
   SaveOptionsEnum: {
      adSaveCreateNotExist:            1,
      adSaveCreateOverWrite:            2
   },
   FieldEnum: {
      adDefaultStream:               -1,
      adRecordURL:                  -2
   },
   StreamReadEnum: {
      adReadAll:                     -1,
      adReadLine:                     -2
   },
   RecordTypeEnum: {
      adSimpleRecord:                  0,
      adCollectionRecord:               1,
      adStructDoc:                  2
   },
   Connection:         function(){return new ActiveXObject("ADODB.Connection");},
   Record:            function(){return new ActiveXObject("ADODB.Record");},
   Stream:            function(){return new ActiveXObject("ADODB.Stream");},
   Command:         function(){return new ActiveXObject("ADODB.Command");},
   Recordset:         function(){return new ActiveXObject("ADODB.Recordset");},
   Parameter:         function(){return new ActiveXObject("ADODB.Parameter");}
};

DOWNLOAD
Usage sample
Code:
//! ADODB.js usage sample
//! TEST.MBD countains table populaed with some data
//! CREATE TABLE tab1 (data VARCHAR(32), param INTEGER );

AkelPad.Include("ADODB.js");
var conn = ADODB.Connection();
conn.Open("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\TEST.MDB;","","");
var comm = ADODB.Command();
comm.CommandText = "SELECT data, param * FROM tab1 WHERE param = @prm";
comm.ActiveConnection = conn;
comm.NamedParameters = true;
comm.CommandType = ADODB.CommandTypeEnum.adCmdText;
comm.Parameters.Append(comm.CreateParameter("@prm", ADODB.DataTypeEnum.adInteger, ADODB.ParameterDirectionEnum.adParamInput, 4/*sozeof(adInteger)*/, 1));
var res = comm.Execute();
var result = "";
while(res && !res.EOF)
{
   var cnt = res.Fields.Count;
   var i =0;
   while(i<cnt)
   {
      result += " " +res.Fields.Item(parseInt(i)).Name+": " + res.Fields.Item(parseInt(i));
      i++;
   }
   WScript.Echo(result);
   result = "";
   res.MoveNext();
}
if(res) res.Close();
conn.Close();
res = null;
comm = null;
conn = null;


Last edited by FeyFre on Wed Feb 20, 2013 12:50 am; edited 3 times in total
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
VladSh



Joined: 29 Nov 2006
Posts: 2523
Location: Êèåâ, Ðóñü

PostPosted: Mon Apr 04, 2011 1:38 pm    Post subject: Reply with quote

CaseUpperLower.js

Code:
///Change registry: mixed -> UPPER <-> lower
///Èçìåíÿåò ðåãèñòð òåêñòà ïî êðóãó: ñìåøàííûé -> ÂÅÐÕÍÈÉ -> íèæíèé
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=12318#12318
// Version: 1.4 (2012.08.23)


var pText = AkelPad.GetSelText();
if (!pText)
{
   if (! AkelPad.Include("CaretSelect.js")) WScript.Quit();
   WordCaretSelect();
   pText = AkelPad.GetSelText();
}

if (pText)
{
   var tmpText = pText.toUpperCase();
   if (pText == tmpText)
      AkelPad.Command(4176);      //ïåðåâîäèì â íèæíèé ðåãèñòð
   else
      AkelPad.Command(4175);      //ïåðåâîäèì â ÂÅÐÕÍÈÉ ðåãèñòð
}

CaseUpperLowerProper.js

Code:
///Change registry: mixed -> UPPER -> lower -> Proper, by analogy with Shift+F3 in MS Word
///Èçìåíÿåò ðåãèñòð òåêñòà ïî êðóãó: ñìåøàííûé -> ÂÅÐÕÍÈÉ -> íèæíèé -> Íà÷èíàòü Ñ Ïðîïèñíûõ ïî àíàëîãèè, êàê ýòî äåëàåò MS Word
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=12318#12318
// Version: 1.1 (2012.08.23)


var pText = AkelPad.GetSelText();
if (!pText)
{
   if (! AkelPad.Include("CaretSelect.js")) WScript.Quit();
   WordCaretSelect();
   pText = AkelPad.GetSelText();
}

if (pText)
{
   var tmpText = pText.toUpperCase();
   if (pText == tmpText)
      AkelPad.Command(4176);      //ïåðåâîäèì â íèæíèé ðåãèñòð
   else
   {
      tmpText = pText.toLowerCase();
      if (pText == tmpText)
         AkelPad.Command(4178);      //Íà÷èíàòü Ñ Ïðîïèñíûõ
      else
         AkelPad.Command(4175);      //ïåðåâîäèì â ÂÅÐÕÍÈÉ ðåãèñòð
   }
}


N.B. Â êîäå èñïîëüçóåòñÿ CaretSelect.js.


Last edited by VladSh on Thu Aug 23, 2012 10:48 am; edited 3 times in total
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 4680

PostPosted: Sun Apr 24, 2011 4:08 pm    Post subject: Reply with quote

OpenSaveMask.js
Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=12548#12548
// Version v1.5
//
//
//// Open/Convert files.
//
// Arguments:
// -OpenMask="C:\MyFolder\*.*" -Search any files in "C:\MyFolder".
// -OpenList="C:\files.lst"    -Open files specified in "files.lst".
// -SubDir=true                -Search recursively (default is false).
// -OpenCodepage=-1            -Open codepage, if -1 it will be autodetected (default is -1).
// -OpenBOM=-1                 -File byte order mark, if -1 it will be autodetected (default is -1).
// -OpenBinary=-1              -Open binary file, 1 - open if binary, 0 - don't open if binary, -1 - prompt (default is 0).
// -SaveDir=""                 -Save directory, if "" files will be saved in place.
// -SaveCodepage=65001         -Save codepage, if -1 current codepage will be used (default is -1).
// -SaveBOM=1                  -File byte order mark, 1 - exist, 2 - doesn't exist, -1 - current BOM will be used (default is -1).
// -Silent=true                -Display no messages (default is false).
// -CloseNoFiles=false         -Don't close program, if after script ending no files are opened (default is true).
//
// Remark:
// If SaveCodepage and SaveBOM not specified when no convertion operation will occur and files will be just opened.
//
// Usage (open):
// Call("Scripts::Main", 1, "OpenSaveMask.js", `-OpenMask="C:\MyFolder\*.txt" -SubDir=true`)
//
// Usage (convert by mask):
// Call("Scripts::Main", 1, "OpenSaveMask.js", `-OpenMask="C:\MyFolder\*.txt" -SubDir=true -SaveCodepage=65001 -SaveBOM=1`)

//Arguments
var pOpenMask=AkelPad.GetArgValue("OpenMask", "");
var pOpenList=AkelPad.GetArgValue("OpenList", "");
var bSubDir=AkelPad.GetArgValue("SubDir", false);
var nOpenCodepage=AkelPad.GetArgValue("OpenCodepage", -1);
var nOpenBOM=AkelPad.GetArgValue("OpenBOM", -1);
var nOpenBinary=AkelPad.GetArgValue("OpenBinary", 0);
var pSaveDir=AkelPad.GetArgValue("SaveDir", "");
var nSaveCodepage=AkelPad.GetArgValue("SaveCodepage", -1);
var nSaveBOM=AkelPad.GetArgValue("SaveBOM", -1);
var bSilent=AkelPad.GetArgValue("Silent", false);
var bCloseNoFiles=AkelPad.GetArgValue("CloseNoFiles", true);

var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var pFileList="";
var dwCmdOptions;
var nAllFiles=0;
var nDoneFiles=0;
var nErrors=0;

if (pOpenMask || pOpenList)
{
  dwCmdOptions=AkelPad.SendMessage(hMainWnd, 1145 /*AKD_GETCMDLINEOPTIONS*/, 0, 0);
  if (nOpenBinary == 1)
    AkelPad.SendMessage(hMainWnd, 1146 /*AKD_SETCMDLINEOPTIONS*/, (dwCmdOptions | 0x10 /*CLO_MSGOPENBINARYYES*/) & ~0x20 /*CLO_MSGOPENBINARYNO*/, 0);
  else if (nOpenBinary == 0)
    AkelPad.SendMessage(hMainWnd, 1146 /*AKD_SETCMDLINEOPTIONS*/, (dwCmdOptions & ~0x10 /*CLO_MSGOPENBINARYYES*/) | 0x20 /*CLO_MSGOPENBINARYNO*/, 0);
  else if (nOpenBinary == -1)
    AkelPad.SendMessage(hMainWnd, 1146 /*AKD_SETCMDLINEOPTIONS*/, (dwCmdOptions & ~0x10 /*CLO_MSGOPENBINARYYES*/) & ~0x20 /*CLO_MSGOPENBINARYNO*/, 0);

  if (pOpenMask)
  {
    Locate(pOpenMask, bSubDir);
  }
  if (pOpenList)
  {
    var pFilesText;
    var pLinesArray;
    var nIndex;

    if (pFilesText=AkelPad.ReadFile(pOpenList))
    {
      pFilesText=pFilesText.replace(/\r\r\n|\r\n|\r|\n/g, "\n");
      if (pLinesArray=pFilesText.split("\n"))
      {
        for (nIndex=0; nIndex < pLinesArray.length; ++nIndex)
        {
          if (pLinesArray[nIndex])
          {
            DoFile(pLinesArray[nIndex], pSaveDir);
          }
        }
      }
    }
  }

  AkelPad.SendMessage(hMainWnd, 1146 /*AKD_SETCMDLINEOPTIONS*/, dwCmdOptions, 0);

  if (nSaveCodepage != -1 || nSaveBOM != -1)
  {
    if (nAllFiles && AkelPad.IsMDI())
      AkelPad.Command(4325 /*IDM_WINDOW_FILEEXIT*/);
    if (!bSilent)
      WScript.Echo("Converted: " + nDoneFiles + " of " + nAllFiles + " files (" + nErrors + " errors)");
  }
  if (bCloseNoFiles)
  {
    if (AkelPad.SendMessage(hMainWnd, 1292 /*AKD_FRAMENOWINDOWS*/, 0, 0) ||
        (AkelPad.IsMDI() == 1 && AkelPad.SendMessage(hMainWnd, 1291 /*AKD_FRAMESTATS*/, 0 /*FWS_COUNTALL*/, 0) == 1 &&
         !AkelPad.GetEditFile(0) && !AkelPad.GetEditModified(0)))
    {
      AkelPad.Command(4109 /*IDM_FILE_EXIT*/);
    }
  }
}

function Locate(pSearchFor, bSubDir)
{
  var lpFindData=AkelPad.MemAlloc(592 /*sizeof(WIN32_FIND_DATAW)*/);
  var lpLocalFileTime=AkelPad.MemAlloc(8 /*sizeof(FILETIME)*/);
  var lpSystemTime=AkelPad.MemAlloc(16 /*sizeof(SYSTEMTIME)*/);
  var lpWriteTime=[];
  var hSearch;
  var pDir;
  var pWildcard;
  var pFileName;
  var nSize;
  var nFileSizeHigh;
  var nFileSizeLow;
  var dwAttributes;
  var nOffset;
  var bStop=false;

  if ((nOffset=pSearchFor.lastIndexOf("\\")) != -1)
  {
    pDir=pSearchFor.substr(0, nOffset);
    pWildcard=pSearchFor.substr(nOffset + 1);

    //Enumerate directory
    if ((hSearch=oSys.Call("kernel32::FindFirstFile" + _TCHAR, pSearchFor, lpFindData)) != -1 /*INVALID_HANDLE_VALUE*/)
    {
      do
      {
        pFileName=AkelPad.MemRead(lpFindData + 44 /*offsetof(WIN32_FIND_DATAW, cFileName)*/, _TSTR);
        if (pFileName == "." || pFileName == "..") continue;
        dwAttributes=AkelPad.MemRead(lpFindData /*offsetof(WIN32_FIND_DATAW, dwAttributes)*/, 3 /*DT_DWORD*/);

        if (!(dwAttributes & 0x10 /*FILE_ATTRIBUTE_DIRECTORY*/))
        {
          //File size
          nFileSizeHigh=AkelPad.MemRead(lpFindData + 28 /*offsetof(WIN32_FIND_DATAW, nFileSizeHigh)*/, 3 /*DT_DWORD*/);
          nFileSizeLow=AkelPad.MemRead(lpFindData + 32 /*offsetof(WIN32_FIND_DATAW, nFileSizeLow)*/, 3 /*DT_DWORD*/);
          nSize=(nFileSizeHigh * (0xFFFFFFFF + 1)) + nFileSizeLow;

          //Get write time
          oSys.Call("kernel32::FileTimeToLocalFileTime", lpFindData + 20 /*offsetof(WIN32_FIND_DATAW, ftLastWriteTime)*/, lpLocalFileTime);
          oSys.Call("kernel32::FileTimeToSystemTime", lpLocalFileTime, lpSystemTime);
          lpWriteTime.wYear=AkelPad.MemRead(lpSystemTime /*offsetof(SYSTEMTIME, wYear)*/, 4 /*DT_WORD*/);
          lpWriteTime.wMonth=AkelPad.MemRead(lpSystemTime + 2 /*offsetof(SYSTEMTIME, wMonth)*/, 4 /*DT_WORD*/);
          lpWriteTime.wDayOfWeek=AkelPad.MemRead(lpSystemTime + 4 /*offsetof(SYSTEMTIME, wDayOfWeek)*/, 4 /*DT_WORD*/);
          lpWriteTime.wDay=AkelPad.MemRead(lpSystemTime + 6 /*offsetof(SYSTEMTIME, wDay)*/, 4 /*DT_WORD*/);
          lpWriteTime.wHour=AkelPad.MemRead(lpSystemTime + 8 /*offsetof(SYSTEMTIME, wHour)*/, 4 /*DT_WORD*/);
          lpWriteTime.wMinute=AkelPad.MemRead(lpSystemTime + 10 /*offsetof(SYSTEMTIME, wMinute)*/, 4 /*DT_WORD*/);
          lpWriteTime.wSecond=AkelPad.MemRead(lpSystemTime + 12 /*offsetof(SYSTEMTIME, wSecond)*/, 4 /*DT_WORD*/);
          lpWriteTime.wMilliseconds=AkelPad.MemRead(lpSystemTime + 14 /*offsetof(SYSTEMTIME, wMilliseconds)*/, 4 /*DT_WORD*/);

          if (bStop=LocateCallback(pDir, pFileName, dwAttributes, nSize, lpWriteTime))
            break;
        }
      }
      while (oSys.Call("kernel32::FindNextFile" + _TCHAR, hSearch, lpFindData));

      oSys.Call("kernel32::FindClose", hSearch);
    }

    //Go to subdirectory
    if (!bStop && bSubDir)
    {
      if ((hSearch=oSys.Call("kernel32::FindFirstFile" + _TCHAR, pDir + "\\" + "*.*", lpFindData)) != -1 /*INVALID_HANDLE_VALUE*/)
      {
        do
        {
          pFileName=AkelPad.MemRead(lpFindData + 44 /*offsetof(WIN32_FIND_DATAW, cFileName)*/, _TSTR);
          if (pFileName == "." || pFileName == "..") continue;
          dwAttributes=AkelPad.MemRead(lpFindData /*offsetof(WIN32_FIND_DATAW, dwAttributes)*/, 3 /*DT_DWORD*/);

          if (dwAttributes & 0x10 /*FILE_ATTRIBUTE_DIRECTORY*/)
          {
            if (bSubDir)
            {
              //Recursive call
              if (bStop=Locate(pDir + "\\" + pFileName + "\\" + pWildcard, true))
                break;
            }
          }
        }
        while (oSys.Call("kernel32::FindNextFile" + _TCHAR, hSearch, lpFindData));

        oSys.Call("kernel32::FindClose", hSearch);
      }
    }
  }

  AkelPad.MemFree(lpFindData);
  AkelPad.MemFree(lpLocalFileTime);
  AkelPad.MemFree(lpSystemTime);
  return bStop;
}

function LocateCallback(pDir, pFileName, dwAttributes, nSize, lpWriteTime)
{
  DoFile(pDir + "\\" + pFileName, pSaveDir);

  //WScript.Echo("Name:" + pDir + "\\" + pFileName + "\n" +
  //             "Attr:" + dwAttributes + "\n" +
  //             "Size:" + nSize + "\n" +
  //             "WriteTime:" + lpWriteTime.wYear + "." + lpWriteTime.wMonth + "." + lpWriteTime.wDay + " " +
  //                            lpWriteTime.wHour + ":" + lpWriteTime.wMinute + ":" + lpWriteTime.wSecond + " " +
  //                            lpWriteTime.wMilliseconds + "ms, DayOfWeek:" + lpWriteTime.wDayOfWeek);

  //Stop?
  return false;
}

function DoFile(pOpenFile, pSaveFile)
{
  var nOpenResult;
  var dwOpenFlags=0x1 /*OD_ADT_BINARY_ERROR*/;

  if (nOpenCodepage == -1)
    dwOpenFlags|=0x4 /*OD_ADT_DETECT_CODEPAGE*/;
  if (nOpenBOM == -1)
    dwOpenFlags|=0x8 /*OD_ADT_DETECT_BOM*/;

  if (!(nOpenResult=AkelPad.OpenFile(pOpenFile, dwOpenFlags, nOpenCodepage, nOpenBOM)))
  {
    if (nSaveCodepage != -1 || nSaveBOM != -1)
    {
      if ((nSaveCodepage != -1 && AkelPad.GetEditCodePage(0) != nSaveCodepage) ||
          (nSaveBOM != -1 && AkelPad.GetEditBOM(0) != nSaveBOM))
      {
        if (!pSaveFile)
          pSaveFile=pOpenFile;
        else if (oSys.Call("kernel32::GetFileAttributes" + _TCHAR, pSaveFile) & 0x10 /*FILE_ATTRIBUTE_DIRECTORY*/)
          pSaveFile=pSaveFile + "\\" + GetFileName(pOpenFile);

        if (!AkelPad.SaveFile(0, pSaveFile, nSaveCodepage, nSaveBOM))
          ++nDoneFiles;
        else
          ++nErrors;
      }
      AkelPad.Command(4324 /*IDM_WINDOW_FILECLOSE*/);
    }
  }
  else if (nOpenResult != -20 /*EOD_MSGNO*/)
  {
    ++nErrors;
  }
  ++nAllFiles;
}

function GetFileName(pFile)
{
  var nOffset;

  if ((nOffset=pFile.lastIndexOf("\\")) != -1)
    pFile=pFile.substr(nOffset);
  return pFile;
}


Last edited by Instructor on Thu Feb 07, 2013 9:33 am; edited 3 times in total
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1440

PostPosted: Thu Apr 28, 2011 5:20 pm    Post subject: Reply with quote

unixTime.js
Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=12600#12600
// http://infocatcher.ucoz.net/js/akelpad_scripts/unixTime.js

// (c) Infocatcher 2011-2012
// version 0.1.3 - 2012-12-03

var TU_AUTO = 0;
var TU_S    = 1;
var TU_MS   = 2;

var treatAsUTC = getArg("treatAsUTC", true);
var timeUnit = getArg("timeUnit", TU_AUTO);

var date = AkelPad.GetSelText().replace(/^\s+|\s+$/g, "");
if(/^(\d+|0x[0-9a-f]+)$/i.test(date)) {
   date = Number(date);
   if(timeUnit == TU_S || timeUnit == TU_AUTO && date < 3e9)
      date *= 1000;
}
else if(/^([0-3]?\d)\D([01]?\d)\D(\d{4})(\s+([0-2]?\d)\D([0-6]?\d)(\D([0-6]?\d))?)?$/.test(date)) {
   // dd.MM.yyyy[ HH:mm[:ss]]
   with(RegExp)
      date = new Date($3, $2 - 1, $1, $5, $6, $8);
}
else if(/^(\d{4})\D([01]?\d)\D([0-3]?\d)(\s+([0-2]?\d)\D([0-6]?\d)(\D([0-6]?\d))?)?$/.test(date)) {
   // yyyy.MM.dd[ HH:mm[:ss]]
   with(RegExp)
      date = new Date($1, $2 - 1, $3, $5, $6, $8);
}
else if(/^([0-2]?\d)\D([0-6]?\d)(\D([0-6]?\d))?\s+([0-3]?\d)\D([01]?\d)\D(\d{4})$/.test(date)) {
   // HH:mm[:ss] dd.MM.yyyy
   with(RegExp)
      date = new Date($7, $6 - 1, $5, $1, $2, $4);
}
if(!(date instanceof Date))
   date = new Date(date);
else if(treatAsUTC) {
   var tzo = date.getTimezoneOffset();
   date.setMinutes(date.getMinutes() - tzo);
}
var tzo = date.getTimezoneOffset();
var ms = date.getTime();
var s = Math.round(ms/1000);
var tf = function(funcName) {
   if(treatAsUTC)
      return funcName.substr(0, 3) + "UTC" + funcName.substr(3);
   return funcName;
};
var dates = [
   date.toLocaleString(),
   date[tf("getFullYear")]() + "-" + padLeft(date[tf("getMonth")]() + 1) + "-" + padLeft(date[tf("getDate")]()) + " "
      + padLeft(date[tf("getHours")]()) + ":" + padLeft(date[tf("getMinutes")]()) + ":" + padLeft(date[tf("getSeconds")]())
      + " UTC" + (treatAsUTC ? "" : getTimezone(tzo)),
   date.toUTCString(),
   date.toString(),
   ms,
   s,
   (s < 0 ? "-" : "") + "0x" + Math.abs(s).toString(16)
].join("\n");
AkelPad.MessageBox(AkelPad.GetMainWnd(), dates, WScript.ScriptName, 64 /*MB_ICONINFORMATION*/);

function padLeft(n) {
   var chr = "0";
   var cnt = 2;
   n = String(n);
   var l = n.length;
   return l < cnt
      ? new Array(cnt - n.length + 1).join(chr) + n
      : n;
}
function getTimezone(tzo) {
   var m = Math.abs(tzo);
   var h = Math.floor(m/60);
   m = Math.floor(m - h*60);
   return (tzo > 0 ? "-" : "+") + padLeft(h) + padLeft(m);
}
function getArg(argName, defaultVal) {
   var args = {};
   for(var i = 0, argsCount = WScript.Arguments.length; i < argsCount; i++)
      if(/^[-\/](\w+)(=(.+))?$/i.test(WScript.Arguments(i)))
         args[RegExp.$1.toLowerCase()] = RegExp.$3 ? eval(RegExp.$3) : true;
   getArg = function(argName, defaultVal) {
      argName = argName.toLowerCase();
      return typeof args[argName] == "undefined" // argName in args
         ? defaultVal
         : args[argName];
   };
   return getArg(argName, defaultVal);
}
<download>
Convert Unix time.

Screenshot



Last edited by Infocatcher on Mon Dec 03, 2012 7:06 am; edited 2 times in total
Back to top
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 2523
Location: Êèåâ, Ðóñü

PostPosted: Fri Apr 29, 2011 12:24 pm    Post subject: Reply with quote

TranslateWithGoogleAPI.js

Code:
///Translates selected text using the Google API
///Ïåðåâîä òåêñòà èñïîëüçóÿ Google-API
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=12612#12612
// Version: 2.6 (2012.09.11)
//
// -"Translate: Auto -> Ru (Google)" Call("Scripts::Main", 1, "TranslateWithGoogleAPI.js", `-lngT="ru" -Msg=1`)      - autodetect source language + display the result in MessageBox
// -"Ïåðåâåñòè: Ru -> En (Google)" Call("Scripts::Main", 1, "TranslateWithGoogleAPI.js", `-lngS="ru" -lngT="en"`)      - translate ru -> en + source text is replaced by the translation

var resultText;      //â ýòó ïåðåìåííóþ âîçâðàùàåòñÿ ðåçóëüòàò â âèäå òåêñòà, èíà÷å undefined
var vn_resultObject = "resultObject";

var langSource = AkelPad.GetArgValue("lngS", "auto");      //autodetect source language
var langTarget = AkelPad.GetArgValue("lngT", "ru");      //target language [ru]
var nMsgBox = AkelPad.GetArgValue("Msg", 0);         //show the result in MessageBox: [0] / 1
//resType values in arguments (does not make sense with Msg=1):
//0 - selected text is replaced by the translation
//1 - copy to clipboard
//2 - display the result in new tab
//3 - output to Log-plugin console
var nResultType = AkelPad.GetArgValue("resType", 0);

var req = createRequestObject();
if (req)
{
   var selection;
   if (selection = AkelPad.GetSelText(2 /*\n*/))
      selection = selection.replace(/\n/g, "<n>");      //äëÿ ñîõðàíåíèÿ ïåðåâîäîâ ñòðîê
   selection = encodeURIComponent(selection);

   var url = "http://translate.google.com/translate_a/t?";
   var params = "client=qlt&langpair=" + langSource + "|" + langTarget + "&q=" + selection + "&callback=" + vn_resultObject;

   req.open("POST", url, false);
   req.onreadystatechange = processReqChange;
   req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   req.send(params);

   if (resultText)
   {
      var nResultAction;
      
      if (nMsgBox == 1)
      {
         if (resultText != selection)
         {
            nResultAction = AkelPad.MessageBox(AkelPad.GetEditWnd(), "Result text:" + "\r\r" + resultText + "\r\r" + "Yes - replace selected (source) text" + "\r" + "No - copy to clipboard", WScript.ScriptName, 32 + 3);
            if (nResultAction == 2) WScript.Quit();
         }
         else
         {
            AkelPad.MessageBox(AkelPad.GetEditWnd(), "Translation for '" + selection + "' is missing.", WScript.ScriptName, 64);
            WScript.Quit();
         }
      }
      else
      {
         switch (nResultType)
         {
            case 2:
               AkelPad.Command(4101);
               break;
            case 3:
               AkelPad.Call("Log::Output", 5, resultText + "\r");
               WScript.Quit();
         }
         nResultAction = nResultType + 6;
      }
      
      switch (nResultAction)
      {
         case 6:
            AkelPad.ReplaceSel(resultText, true);
            break;
         default:
            AkelPad.SetClipboardText(resultText);
            break;
      }
   }
}


function createRequestObject()
{
   if (typeof(XMLHttpRequest) === 'undefined')
   {
      XMLHttpRequest = function()
      {
//         try { return new ActiveXObject("WinHttp.WinHttpRequest.5.1"); }      //Âûøå ãåíåðèðóåòñÿ îøèáêà "Îáúåêò íå ïîääåðæèâàåò ñâîéñòâî èëè ìåòîä"
//            catch(e) {}
         try { return new ActiveXObject("Msxml2.XMLHTTP"); }
            catch(e) {}
         try { return new ActiveXObject("Microsoft.XMLHTTP"); }
            catch(e) {}
         throw new Error("Your system does not support XMLHttpRequest.");
      };
   }
   return new XMLHttpRequest();
}


function processReqChange()
{
   try
   {
      //òîëüêî ïðè ñîñòîÿíèè "complete"
      if (req.readyState == 4)
      {
         //äëÿ ñòàòóñà "OK"
         if (req.status == 200)
         {
            //îáðàáîòêà îòâåòà
            var tmpText = (req.responseText.indexOf(vn_resultObject) != -1) ? req.responseText.replace(vn_resultObject, "var " + vn_resultObject + " = ") : "var " + vn_resultObject + " = " + req.responseText;
//            WScript.Echo(tmpText);      //test message
            eval(tmpText);

            if (!resultObject.sentences)
            {
               if (resultObject.error)
                  showErrorMessage(resultObject.error.message + " (" + resultObject.error.code + ")", true);
               else
                  showErrorMessage("There is no error output object, possibly changed API format.", true);
            }
            else
            {
               resultText = resultObject.sentences[0].trans;
               for (var i = 1; i < resultObject.sentences.length; ++i)
                  resultText += resultObject.sentences[i].trans;
            }
            resultText = resultText.replace(/ {0,1}<n> {0,1}/g, "\n");      //âîññòàíîâëåíèå ïåðåâîäîâ ñòðîê
            resultText = resultText.replace(/&amp;/gm, '&');
            resultText = resultText.replace(/&lt;/gm, '<');
            resultText = resultText.replace(/&gt;/gm, '>');
            resultText = resultText.replace(/&quot;/gm, '"');
         }
         else
            showErrorMessage("Unable to retrieve data (" + req.statusText + ")!", true);
      }
   }
   catch( e )
      { showErrorMessage("Error: " + e, true); }
}


function showErrorMessage(pText, bQuit)
{
   AkelPad.MessageBox(AkelPad.GetEditWnd(), pText, WScript.ScriptName, 16);
   if (bQuit) WScript.Quit();
}


Last edited by VladSh on Tue Sep 11, 2012 3:22 pm; edited 10 times in total
Back to top
View user's profile Send private message Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1081
Location: Poland

PostPosted: Fri May 13, 2011 5:07 am    Post subject: Reply with quote

Translates text via Google and MS Bing.
Script moved to another location.
Translator.js


Last edited by KDJ on Sun Jan 08, 2012 3:42 pm; edited 6 times in total
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1440

PostPosted: Sat May 14, 2011 5:56 pm    Post subject: Reply with quote

crypt.js <download>
Improved version of AESCrypt.js.
Encrypt/decrypt text using AES-256 or/and Blowfish.
It can be very slow, be careful.

Screenshots



Post size limit, here is packed file:
crypt.uue
Code:
begin 644 crypt.7z
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
?`"X`:@!S````%`H!```<C=HW+\T!%08!`"``````````
`
end
sum -r/size 35803/25051

Save as text file with .uue extension, unpack with Total Commander or WinRAR. And unpack .7z with WinRAR or 7-Zip.


Last edited by Infocatcher on Fri May 11, 2012 5:58 pm; edited 3 times in total
Back to top
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 2523
Location: Êèåâ, Ðóñü

PostPosted: Thu May 19, 2011 9:24 am    Post subject: Reply with quote

OpenSessionsDir.js

Code:
///Opens the directory where the files are stored sessions
///Îòêðûâàåò ïàïêó, â êîòîðîé ñîõðàíÿþòñÿ ôàéëû ñåññèé
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=12937#12937
// Version: 1.2 (2011.10.20)
//
// -"Directory of sessions" Call("Scripts::Main", 1, "OpenSessionsDir.js")

if (! AkelPad.Include("Settings.js")) WScript.Quit();

var nSubDir = 4;
var pAkelPlugsDir = AkelPad.GetAkelDir(nSubDir) /*ADTYPE_PLUGS*/ + "\\";

var pPluginFileName = "Sessions";
var pParameterName = "SaveSessions";

nParameterValue = SettingsRead(nSubDir, pPluginFileName, pParameterName, 3 /*PO_STRING*/)

var WshShell = new ActiveXObject("WScript.Shell");
var pPluginDataDir;      //ïàïêà, êîòîðóþ ìû ñîáñòâåííî è áóäåì îòêðûâàòü

switch (nParameterValue)
{
   case "1":      //Äèððåêòîðèÿ ïðîãðàììû
      pPluginDataDir = pAkelPlugsDir + pPluginFileName;
      break;
   case "2":      //Äèððåêòîðèÿ ïîëüçîâàòåëÿ
      pPluginDataDir = WshShell.ExpandEnvironmentStrings("%APPDATA%\\AkelPad\\" + pPluginFileName);
      break;
   default:
      AkelPad.MessageBox(AkelPad.GetEditWnd(), "Unhandled value of parameter " + pParameterName + "=" + nParameterValue + "!", WScript.ScriptName, 48);
      WScript.Quit();
}

var fso = new ActiveXObject("Scripting.FileSystemObject");

if (fso.FolderExists(pPluginDataDir) == false)
{
   AkelPad.MessageBox(AkelPad.GetEditWnd(), "Directory of sessions '" + pPluginDataDir + "' not found!'", WScript.ScriptName, 48);
   WScript.Quit();
}

var nResult = -1;

if (fso.FileExists(pAkelPlugsDir + "Explorer.dll") == true)      //ïûòàåìñÿ ñíà÷àëà îòêðûòü â Explorer-ïëàãèíå
   nResult = AkelPad.Call("Explorer::Main", 1, pPluginDataDir);

if (nResult == -1)
   WshShell.Exec('rundll32.exe shell32, ShellExec_RunDLL "' + pPluginDataDir + '"');

N.B.: Â êîäå èñïîëüçóåòñÿ Settings.js.


Last edited by VladSh on Thu Oct 20, 2011 9:39 am; edited 3 times in total
Back to top
View user's profile Send private message Visit poster's website
oyaebu



Joined: 11 Oct 2009
Posts: 15

PostPosted: Fri May 20, 2011 7:43 am    Post subject: Reply with quote

Çàìåíÿåò âûäåëåíèå åãî õåøåì.

md5sel.js
Code:
function utf8_encode ( str_data ) {   // Encodes an ISO-8859-1 string to UTF-8
   //
   // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)

   str_data = str_data.replace(/\r\n/g,"\n");
   var utftext = "";

   for (var n = 0; n < str_data.length; n++) {
      var c = str_data.charCodeAt(n);
      if (c < 128) {
         utftext += String.fromCharCode(c);
      } else if((c > 127) && (c < 2048)) {
         utftext += String.fromCharCode((c >> 6) | 192);
         utftext += String.fromCharCode((c & 63) | 128);
      } else {
         utftext += String.fromCharCode((c >> 12) | 224);
         utftext += String.fromCharCode(((c >> 6) & 63) | 128);
         utftext += String.fromCharCode((c & 63) | 128);
      }
   }

   return utftext;
}

function md5 ( str ) {   // Calculate the md5 hash of a string
   //
   // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
   // + namespaced by: Michael White (http://crestidg.com)

   var RotateLeft = function(lValue, iShiftBits) {
         return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
      };

   var AddUnsigned = function(lX,lY) {
         var lX4,lY4,lX8,lY8,lResult;
         lX8 = (lX & 0x80000000);
         lY8 = (lY & 0x80000000);
         lX4 = (lX & 0x40000000);
         lY4 = (lY & 0x40000000);
         lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
         if (lX4 & lY4) {
            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
         }
         if (lX4 | lY4) {
            if (lResult & 0x40000000) {
               return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
            } else {
               return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
            }
         } else {
            return (lResult ^ lX8 ^ lY8);
         }
      };

   var F = function(x,y,z) { return (x & y) | ((~x) & z); };
   var G = function(x,y,z) { return (x & z) | (y & (~z)); };
   var H = function(x,y,z) { return (x ^ y ^ z); };
   var I = function(x,y,z) { return (y ^ (x | (~z))); };

   var FF = function(a,b,c,d,x,s,ac) {
         a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
         return AddUnsigned(RotateLeft(a, s), b);
      };

   var GG = function(a,b,c,d,x,s,ac) {
         a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
         return AddUnsigned(RotateLeft(a, s), b);
      };

   var HH = function(a,b,c,d,x,s,ac) {
         a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
         return AddUnsigned(RotateLeft(a, s), b);
      };

   var II = function(a,b,c,d,x,s,ac) {
         a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
         return AddUnsigned(RotateLeft(a, s), b);
      };

   var ConvertToWordArray = function(str) {
         var lWordCount;
         var lMessageLength = str.length;
         var lNumberOfWords_temp1=lMessageLength + 8;
         var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
         var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
         var lWordArray=Array(lNumberOfWords-1);
         var lBytePosition = 0;
         var lByteCount = 0;
         while ( lByteCount < lMessageLength ) {
            lWordCount = (lByteCount-(lByteCount % 4))/4;
            lBytePosition = (lByteCount % 4)*8;
            lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount)<<lBytePosition));
            lByteCount++;
         }
         lWordCount = (lByteCount-(lByteCount % 4))/4;
         lBytePosition = (lByteCount % 4)*8;
         lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
         lWordArray[lNumberOfWords-2] = lMessageLength<<3;
         lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
         return lWordArray;
      };

   var WordToHex = function(lValue) {
         var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
         for (lCount = 0;lCount<=3;lCount++) {
            lByte = (lValue>>>(lCount*8)) & 255;
            WordToHexValue_temp = "0" + lByte.toString(16);
            WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
         }
         return WordToHexValue;
      };

   var x=Array();
   var k,AA,BB,CC,DD,a,b,c,d;
   var S11=7, S12=12, S13=17, S14=22;
   var S21=5, S22=9 , S23=14, S24=20;
   var S31=4, S32=11, S33=16, S34=23;
   var S41=6, S42=10, S43=15, S44=21;

   str = utf8_encode(str);
   x = ConvertToWordArray(str);
   a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;

   for (k=0;k<x.length;k+=16) {
      AA=a; BB=b; CC=c; DD=d;
      a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
      d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
      c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
      b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
      a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
      d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
      c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
      b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
      a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
      d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
      c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
      b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
      a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
      d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
      c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
      b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
      a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
      d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
      c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
      b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
      a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
      d=GG(d,a,b,c,x[k+10],S22,0x2441453);
      c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
      b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
      a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
      d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
      c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
      b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
      a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
      d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
      c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
      b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
      a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
      d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
      c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
      b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
      a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
      d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
      c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
      b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
      a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
      d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
      c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
      b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
      a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
      d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
      c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
      b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
      a=II(a,b,c,d,x[k+0], S41,0xF4292244);
      d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
      c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
      b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
      a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
      d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
      c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
      b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
      a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
      d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
      c=II(c,d,a,b,x[k+6], S43,0xA3014314);
      b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
      a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
      d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
      c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
      b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
      a=AddUnsigned(a,AA);
      b=AddUnsigned(b,BB);
      c=AddUnsigned(c,CC);
      d=AddUnsigned(d,DD);
   }

   var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

   return temp.toLowerCase();
}

AkelPad.ReplaceSel(md5(AkelPad.GetSelText()));
Back to top
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 734
Location: Kyiv, Ukraine

PostPosted: Wed May 25, 2011 9:19 am    Post subject: Reply with quote

Ñóðîâûé ñêðèïò íà òåìó òîãî, êàê ÿ âèæó çàïóñê ôàéëîâ èç AkelPad (âêëþ÷àÿ êîìïèëÿöèþ).
My vision of running a file from within AkelPad (including compiling).
RunMe.js
Code:
/**********************************************************************
 *  RunMe.js  v.2.0                                                   *
 *  (C) DV, Dec 2012                                                  *
 **********************************************************************/
/*
 *  Simple usage:
 *    Call("Scripts::Main", 1, "RunMe.js")
 *  To specify command line manually:
 *    Call("Scripts::Main", 1, "RunMe.js", "1")
 *
 *  Format of 'oCommands':
 *  var oCommands = {
 *    "extensions-1" :
 *      "command-1" ,
 *    "extensions-2" :
 *      "command-2" ,
 *    ...
 *  };
 *  where 'extensions' are space-separated extensions e.g. "cpp cxx hxx"
 *  and 'command' is a command to be executed.
 *  You can use empty command ("") to do nothing.
 *  You can use empty extension ("") in the end of 'oCommands' to match
 *  any file extension which was not matched by previous items.
 *
 *  The command may include:
 *  %a - AkelPad directory: "C:\Program Files\AkelPad"
 *  %d - file directory: "C:", "C:\Program Files"
 *  %e - file extension: "txt", "js"
 *  %f - file full pathname: "C:\File.txt"
 *  %n - file name: "File"
 *
 *  If a command is started with ':', this command should contain a name
 *  of internal function to be executed. For example:
 *    var oCommands = {
 *      ...
 *      "js" :
 *        ":run_js(\"%n.%e\")" ,
 *      ...
 *    };
 *    function run_js(fileName)
 *    {
 *      AkelPad.Call("Scripts::Main", 1, fileName);
 *    }
 *
 *  Note:
 *  When using a compiler or an interpreter, you can specify a command
 *  in a form of "cmd /c your-command-here || pause".
 *  This makes the console window remain in case of error from the
 *  compiler/interpreter.
 *
 **********************************************************************/


// user-defined set of file extensions and commands
var oCommands = {
  "ini txt nfo coder" :
    "" /* do nothing */ ,
  "js" :
    ":run_js(\"%d\", \"%n.%e\")" ,
  "c" :
    "cmd /c C:\\tools\\tcc\\tcc.exe -luser32 -run \"%f\" || pause" ,
  "cpp cc cxx hxx hpp hh h" :
    ":run_cpp(\"%f\")" ,
  "awk" :
    "cmd /c C:\\tools\\gawk\\gawk.exe -f \"%f\" || pause" ,
  "nsi nsis" :
    ":run_nsis(\"%f\")" ,
  "py" :
    "cmd /c python \"%f\" || pause" ,
  "pas pp" :
    ":run_pas(\"%f\")" ,

  /* Place new commands _before_ this line !!! */
  "" /* apply to any remained extension */ :
    ":run_anyfile(\"%f\")"
};


// user-defined functions
function run_js(fileDir, fileName)
{
  if (fileDir.toUpperCase() == getAkelPadDir(5).toUpperCase())
  {
    // script is under AkelPad's Scripts directory
    AkelPad.Call("Scripts::Main", 1, fileName);
  }
  else
  {
    // call default js interpreter
    runCommand("\"" + fileDir + "\\" + fileName + "\"", "", 0); // do not capture output
  }
}

function run_pas(filePathName)
{
  var sPath = envGetVar("PATH");
  var sPathNew = sPath + ";C:\\FPC\\2.6.0\\bin\\i386-win32";
  envSetVar("PATH", sPathNew); // adding path to fpc.exe
  var cmd1 = "fpc.exe \"%f\""; // compile
  var cmd2 = "\"%n.exe\""; // run the .exe in Log::Output
//  var cmd2 = "rundll32.exe shell32,ShellExec_RunDLL \"%n.exe\""; // run the .exe
  var cmd = "cmd /c " + cmd1 + " && " + cmd2;
  cmd = prepareCommand(cmd, filePathName); // pre-process %f, %n etc.
  setCurrentDir(getFileDir(filePathName));
  runCommand(cmd); // run
  envSetVar("PATH", sPath); // restoring original PATH
}

function run_cpp(filePathName)
{
  var useMinGW = false;
  if (useMinGW)
  {
    /*  MinGW G++  */
    var compilerExe = "C:\\MinGW\\bin\\g++.exe";
    var compilerDir = getFileDir(compilerExe);
    // cmd1: compile the source file (object file is created)
    var cmd1 = compilerExe + " -c \"%f\" -o \"%d\\%n.o\"";
    // cmd2: create the executable (from the object file)
    var cmd2 = compilerExe + " \"%d\\%n.o\" -o \"%d\\%n.exe\"";
    // cmd3: run the executable
    var cmd3 = "\"%d\\%n.exe\"";
    // cmd: the whole command line
    var cmd = "cmd /c " + cmd1 + " && " + cmd2 + " && " + cmd3 + " || pause";
    cmd = prepareCommand(cmd, filePathName);
    //WScript.Echo(cmd);
    runCommand(cmd, compilerDir);
  }
  else
  {
    /*  Visual Studio 9 (2008)  */
    var sProgramFiles = envGetVar("ProgramFiles");
    var sProgramFilesx86 = envGetVar("ProgramFiles(x86)");
    if (sProgramFilesx86.length == 0)
      sProgramFilesx86 = sProgramFiles;
    else
      sProgramFiles = sProgramFilesx86.substr(0, sProgramFilesx86.length - 6);
    var sVcDir = sProgramFilesx86 + "\\Microsoft Visual Studio 9.0\\VC";
    var sVsCommon = sProgramFilesx86 + "\\Microsoft Visual Studio 9.0\\Common7\\IDE";
    var sMsSDK = sProgramFiles + "\\Microsoft SDKs\\Windows\\v6.0A";
    // update PATH environment variable...
    var sPath = envGetVar("PATH");
    var sPathNew = sVcDir + "\\bin;" + sMsSDK + "\\bin;" + sVsCommon + ";" + sPath;
    envSetVar("PATH", sPathNew); //WScript.Echo(envGetVar("PATH"));
    // update INLUDE environment variable...
    var sInclude = envGetVar("INCLUDE");
    var sIncludeNew = sMsSDK + "\\include;" + sVcDir + "\\include;" + sInclude;
    envSetVar("INCLUDE", sIncludeNew); //WScript.Echo(envGetVar("INCLUDE"));
    // update LIB environment variable...
    var sLib = envGetVar("LIB");
    var sLibNew = sMsSDK + "\\lib;" + sVcDir + "\\lib;" + sLib;
    envSetVar("LIB", sLibNew); //WScript.Echo(envGetVar("LIB"));
    // compile...
    var fileDir = getFileDir(filePathName);
    var cmd1 = "cl /O1 \"%f\" /link kernel32.lib user32.lib comctl32.lib gdi32.lib Advapi32.lib ole32.lib Oleaut32.lib";
    var cmd2 = "\"%d\\%n.exe\"";
    var cmd = "cmd /c " + cmd1 + " && " + cmd2 + " || pause";
    cmd = prepareCommand(cmd, filePathName);
    //WScript.Echo(cmd);
    runCommand(cmd, fileDir);
    // restore original environment variables...
    envSetVar("PATH", sPath);
    envSetVar("INCLUDE", sInclude);
    envSetVar("LIB", sLib);
  }
}

function run_nsis(filePathName)
{
  var sProgramFiles = getProgramFilesDir("x86");
  var cmd = "\"" + sProgramFiles + "\\NSIS\\makensisw.exe\" \"" + filePathName + "\"";
  runCommand(cmd, "", 0); // do not capture output
}

function run_anyfile(filePathName)
{
  var cmd = "rundll32.exe shell32,ShellExec_RunDLL \"" + filePathName + "\"";
  runCommand(cmd, "", 0); // do not capture output
}


///////////////////////////////////////////////////////////////////////
// script engine, do not modify...

AkelPad.ScriptNoMutex(4 /*ULT_LOCKMULTICOPY*/ );

if (!selfTest())
{
  WScript.Quit();
}

var oSys = undefined;

var filePathName = AkelPad.GetEditFile(0);
if (filePathName.toUpperCase() == WScript.ScriptFullName.toUpperCase())
{
  WScript.Echo("Don\'t want to execute self :)");
  WScript.Quit();
}

var isModified = AkelPad.GetEditModified(0);
RunFile(filePathName, isModified);

function RunFile(filePathName, isModified)
{
  var fileExt = getFileExt(filePathName).toLowerCase();
  if (fileExt.length > 0)
  {
    var isProcessed = false;
    for (var ext in oCommands)
    {
      ext = ext.toLowerCase();
      if (ext.length == 0 || isOneOf(fileExt, ext))
      {
        var cmd = oCommands[ext];
        if (cmd.length > 0)
        {
          if (isModified)
            AkelPad.Command(4105); // save file

          if (WScript.Arguments.length > 0)
          {
            if (WScript.Arguments(0) == "1")
            {
              var oSettings;
              var cmd1;
              var cmd2;

              cmd1 = undefined;
              oSettings = AkelPad.ScriptSettings();
              if (oSettings.Begin(WScript.ScriptBaseName, 0x1 /*POB_READ*/))
              {
                cmd1 = oSettings.Read(ext, 3 /*PO_STRING*/);
                oSettings.End();
              }
              if ((cmd1 == undefined) || (cmd1 == ""))
              {
                cmd1 = cmd;
              }
              cmd2 = AkelPad.InputBox(AkelPad.GetMainWnd(), WScript.ScriptName, "command:", cmd1);
              if (cmd2 == undefined)
                WScript.Quit();

              if (cmd2 != cmd1)
              {
                if (oSettings.Begin(WScript.ScriptBaseName, 0x2 /*POB_SAVE*/))
                {
                  oSettings.Write(ext, 3 /*PO_STRING*/, cmd2);
                  oSettings.End();
                }
              }
              if (cmd2 == "")
                WScript.Quit();

              cmd = cmd2;
            }
          }

          cmd = prepareCommand(cmd, filePathName);
          if (cmd.charAt(0) == ':')
          {
            cmd = cmd.replace(/\\/g, "\\\\");
            eval(cmd.substr(1));
          }
          else
          {
            runCommand(cmd, "");
          }
        }
        isProcessed = true;
        break;
      }
    }

    if (!isProcessed)
      WScript.Echo("No matched extension found!");
  }
  else
    WScript.Echo("File extension is empty!");
}

function envGetVar(varName)
{
  var varValue = "";
  var lpBuffer;
  if (lpBuffer = AkelPad.MemAlloc(8192*_TSIZE))
  {
    if (oSys == undefined)
      oSys = AkelPad.SystemFunction();
    oSys.Call("kernel32::GetEnvironmentVariable" + _TCHAR, varName, lpBuffer, 8192);
    varValue = AkelPad.MemRead(lpBuffer, _TSTR);
    AkelPad.MemFree(lpBuffer);
  }
  return varValue;
}

function envSetVar(varName, varValue)
{
  if (oSys == undefined)
    oSys = AkelPad.SystemFunction();
  oSys.Call("kernel32::SetEnvironmentVariable" + _TCHAR, varName, varValue);
}

function getCurrentDir()
{
  var dir = "";
  var lpBuffer;
  if (lpBuffer = AkelPad.MemAlloc(8192*_TSIZE))
  {
    if (oSys == undefined)
      oSys = AkelPad.SystemFunction();
    oSys.Call("kernel32::GetCurrentDirectory" + _TCHAR, 8192, lpBuffer);
    dir = AkelPad.MemRead(lpBuffer, _TSTR);
    AkelPad.MemFree(lpBuffer);
  }
  return dir;
}

function setCurrentDir(dir)
{
  if (oSys == undefined)
    oSys = AkelPad.SystemFunction();
  oSys.Call("kernel32::SetCurrentDirectory" + _TCHAR, dir);
}

function getProgramFilesDir(bits)
{
  var sProgramFiles = envGetVar("ProgramFiles");
  var sProgramFilesx86 = envGetVar("ProgramFiles(x86)");
  if (sProgramFilesx86.length == 0)
    sProgramFilesx86 = sProgramFiles;
  else if (sProgramFiles.length == 0)
    sProgramFiles = sProgramFilesx86.substr(0, sProgramFilesx86.length - 6);

  if (bits == undefined || bits != 32 || bits != "x86")
    return sProgramFiles;
  else
    return sProgramFilesx86;
}

function getAkelPadDir(adtype)
{
  var s = AkelPad.GetAkelDir(adtype);
  return s;
}

function getFileExt(filePathName) // file extension w/o leading '.'
{
  var n = filePathName.lastIndexOf(".");
  return (n >= 0) ? filePathName.substr(n + 1) : "";
}

function getFileName(filePathName) // file name w/o extension
{
  var n2 = filePathName.lastIndexOf(".");
  var n1 = filePathName.lastIndexOf("\\");
  var nn = filePathName.lastIndexOf("/");
  if (nn > n1)  n1 = nn;
  var s = "";
  if (n1 < 0 && n2 < 0)
    s = filePathName;
  else if (n1 < 0)
    s = filePathName.substr(0, n2);
  else if (n2 < 0)
    s = filePathName.substr(n1 + 1);
  else if (n2 > n1)
    s = filePathName.substr(n1 + 1, n2 - n1 - 1);
  return s;
}

function getFileDir(filePathName) // file directory w/o trailing '\'
{
  var n = filePathName.lastIndexOf("\\");
  var nn = filePathName.lastIndexOf("/");
  if (nn > n)  n = nn;
  return (n >= 0) ? filePathName.substr(0, n) : filePathName;
}

function isOneOf(s, t) // t includes s
{
  var s1 = " " + s + " ";
  var t1 = " " + t + " ";
  return (t1.indexOf(s1) >= 0);
}

function prepareCommand(cmd, filePathName)
{
  if (cmd.indexOf("%a") >= 0)
  {
    cmd = cmd.replace(/%a/g, getAkelPadDir(0));
  }
  if (cmd.indexOf("%d") >= 0)
  {
    cmd = cmd.replace(/%d/g, getFileDir(filePathName));
  }
  if (cmd.indexOf("%e") >= 0)
  {
    cmd = cmd.replace(/%e/g, getFileExt(filePathName));
  }
  if (cmd.indexOf("%f") >= 0)
  {
    cmd = cmd.replace(/%f/g, filePathName);
  }
  if (cmd.indexOf("%n") >= 0)
  {
    cmd = cmd.replace(/%n/g, getFileName(filePathName));
  }
  return cmd;
}

function runCommand(cmd, dir, captureOutput)
{
  if (captureOutput == undefined || captureOutput != 0)
  {
    // by default, capture output
    if (/[ ]*\|\|[ ]*pause[ ]*$/.test(cmd))
    {
      // exclude trailing "|| pause" from 'cmd' if present
      var n = cmd.lastIndexOf("||");
      cmd = cmd.substr(0, n);
    }
    runLogOutputCmd(cmd, dir);
  }
  else
  {
    if (dir == undefined || dir == "")
    {
      var WshShell = new ActiveXObject("WScript.Shell");
      try
      {
        WshShell.Run(cmd, 1, false);
      }
      catch (error)
      {
        var hMainWnd = AkelPad.GetMainWnd();
        var s = "Failed to execute:\n  " + cmd;
        AkelPad.MessageBox(hMainWnd, s, WScript.ScriptName, 48 /*MB_ICONEXCLAMATION*/);
      }
    }
    else
    {
      AkelPad.Exec(cmd, dir);
    }
  }
}

function runLogOutputCmd(cmd, dir)
{
  var lpState;

  // the command (child process) is about to be run...
  AkelPad.Call("Log::Output", 1, cmd, dir);

  // wait until the child process will actually be started...
  lpState = AkelPad.MemAlloc(4 /*sizeof(DWORD)*/);
  if (lpState)
  {
    var nState = -1;

    while (nState != 0 && nState < 4)
    {
      AkelPad.Call("Log::Output", 3, lpState);
      nState = AkelPad.MemRead(lpState, 3 /*DT_DWORD*/);
      //AkelPad.Call("Log::Output", 5, "State: " + dwState + "\n");
      WScript.Sleep(200);
    }

    AkelPad.MemFree(lpState);
  }
  else
  {
    // wait to be sure the process has been started
    WScript.Sleep(2000);
  }
}

function selfTest()
{
  if (oCommands == undefined)
  {
    WScript.Echo("\'oCommands\' is undefined.\nNothing to do.");
    return false;
  }

  var isEmpty = true;
  var hasEmptyExt = false;
  for (var ext in oCommands)
  {
    if (ext == undefined)
    {
      WScript.Echo("Undefined extension found.\nCan not proceed.");
      return false;
    }
    if (oCommands[ext] == undefined)
    {
      WScript.Echo("oCommands[\"" + ext + "\"]: command is undefined.\nCan not proceed.");
      return false;
    }
    if (hasEmptyExt)
    {
      WScript.Echo("Empty extension found while there are more items below.\nEmpty extension matches any remaining file extension, so such item\nshould be the last (otherwise all the further items will be ignored).");
      return false;
    }
    if (ext.length == 0)
    {
      hasEmptyExt = true;
    }
    isEmpty = false;
  }

  if (isEmpty)
  {
    WScript.Echo("\'oCommands\' is empty.\nNothing to do.");
    return false;
  }

  return true;
}


×òîáû âûÿñíèòü ïóòè ê Visual C++:
detect_vc.bat

Code:
@echo off

set PathToProgramFiles=%ProgramFiles%
if "%ProgramFiles(x86)%" == "" (
    set PathToProgramFilesx86=%ProgramFiles%
) else (
    set PathToProgramFilesx86=%ProgramFiles(x86)%
)

echo.
echo Detecting VC...
for /D %%c in (
               "%PathToProgramFilesx86%\Microsoft Visual Studio\VC98",
               "%PathToProgramFilesx86%\Microsoft Visual Studio .NET\Vc7",
               "%PathToProgramFilesx86%\Microsoft Visual Studio .NET 2003\Vc7",
               "%PathToProgramFilesx86%\Microsoft Visual C++ Toolkit 2003",
               "%PathToProgramFilesx86%\Microsoft Visual Studio 8\VC",
               "%PathToProgramFilesx86%\Microsoft Visual Studio 9.0\VC",
               "%PathToProgramFilesx86%\Microsoft Visual Studio 10.0\VC"
              ) do (
    if exist %%c (
        if exist "%%~c\bin" (
            call :DetectDetails %%c
        )
    )
)
goto End

:DetectDetails
if "%~1" == "%PathToProgramFilesx86%\Microsoft Visual Studio\VC98" (
    if exist "%~1\..\Common\MSDev98" (
        echo.
        echo * VC6 /1998/ detected:
        echo set VCDIR=%~1
        echo set VSCOMMON=%%VCDIR%%\..\Common\MSDev98
        echo set PATH=%%VCDIR%%\Bin;%%VSCOMMON%%\Bin;%%PATH%%
        echo set INCLUDE=%%VCDIR%%\include;%%INCLUDE%%
        echo set LIB=%%VCDIR%%\lib;%%LIB%%
    )
    goto End
)
if "%~1" == "%PathToProgramFilesx86%\Microsoft Visual Studio .NET\Vc7" (
    if exist "%~1\PlatformSDK" (
        if exist "%~1\atlmfc" (
            echo.
            echo * VC7.0 /2002/ detected:
            echo set VCDIR=%~1
            echo set MSSDK=%%VCDIR%%\PlatformSDK
            echo set ATLMFC=%%VCDIR%%\atlmfc
            echo set PATH=%%VCDIR%%\bin;%%MSSDK%%\bin;%%PATH%%
            echo set INCLUDE=%%MSSDK%%\include;%%VCDIR%%\include;%%ATLMFC%%\include;%%INCLUDE%%
            echo set LIB=%%MSSDK%%\lib;%%VCDIR%%\lib;%%LIB%%
        )
    )
    goto End
)
if "%~1" == "%PathToProgramFilesx86%\Microsoft Visual Studio .NET 2003\Vc7" (
    if exist "%~1\PlatformSDK" (
        if exist "%~1\atlmfc" (
            echo.
            echo * VC7.1 /2003/ detected:
            echo set VCDIR=%~1
            echo set MSSDK=%%VCDIR%%\PlatformSDK
            echo set ATLMFC=%%VCDIR%%\atlmfc
            echo set PATH=%%VCDIR%%\bin;%%MSSDK%%\bin;%%PATH%%
            echo set INCLUDE=%%MSSDK%%\include;%%VCDIR%%\include;%%ATLMFC%%\include;%%INCLUDE%%
            echo set LIB=%%MSSDK%%\lib;%%VCDIR%%\lib;%%LIB%%
        )
    )
    goto End
)
if "%~1" == "%PathToProgramFilesx86%\Microsoft Visual C++ Toolkit 2003" (
    echo Microsoft Visual C++ Toolkit 2003 - no info yet...
    goto End
)

if exist "%~1\..\Common7\IDE" (
    echo.
    if "%~1" == "%PathToProgramFilesx86%\Microsoft Visual Studio 8\VC" (
        echo * VC8 /2005/ detected:
        goto DetectDetails_Proceed
    )
    if "%~1" == "%PathToProgramFilesx86%\Microsoft Visual Studio 9.0\VC" (
        echo * VC9 /2008/ detected:
        goto DetectDetails_Proceed
    )
    if "%~1" == "%PathToProgramFilesx86%\Microsoft Visual Studio 10.0\VC" (
        echo * VC10 /2010/ detected:
        goto DetectDetails_Proceed
    )
:DetectDetails_Proceed   
    echo set VCDIR=%~1
    echo set VSCOMMON=%%VCDIR%%\..\Common7\IDE
    if exist "%~1\PlatformSDK" (
        echo set MSSDK=%%VCDIR%%\PlatformSDK
    )
    for /D %%s in (
                   "%PathToProgramFiles%\Microsoft Platform SDK for Windows Server 2003 R2",
                   "%PathToProgramFiles%\Microsoft Platform SDK",
                   "%PathToProgramFiles%\Microsoft SDKs\Windows\v6.0A",
                   "%PathToProgramFiles%\Microsoft SDKs\Windows\v7.0",
                   "%PathToProgramFiles%\Microsoft SDKs\Windows\v7.0A"
                  ) do (
        if exist %%s (
            if exist "%%~s\bin" (
                if exist "%%~s\lib" (
                    if exist "%%~s\include" (
                        echo set MSSDK=%%~s
                    )
                )
            )
        )
    )
    echo set PATH=%%VCDIR%%\bin;%%MSSDK%%\bin;%%VSCOMMON%%;%%PATH%%
    echo set INCLUDE=%%MSSDK%%\include;%%VCDIR%%\include;%%INCLUDE%%
    echo set LIB=%%MSSDK%%\lib;%%VCDIR%%\lib;%%LIB%%
)
goto End

:End


Last edited by DV on Wed Dec 12, 2012 7:18 pm; edited 15 times in total
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 4680

PostPosted: Wed May 25, 2011 6:10 pm    Post subject: Reply with quote

Export highlighted text to HTML or BBCode.

CodePoster.js
Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=13021#13021
// Version v1.9
//
//
//// Export highlighted text to HTML or BBCode.
//
// Arguments:
// -Format="html"                     -Output highlighting in HTML format (default is "BBCode").
// -Enclose="[code]${result}[/code]"  -Enclose result string (default is "<pre>${result}</pre>").
// -XHTML=false                       -use "<br>" instead of "<br/>" (default is true).
// -Strict=true                       -use "<span style=" instead of "<font" (default is false).
// -Info=false                        -Don't add link to CodePoster.js script (default is true).
//
// Usage:
// Call("Scripts::Main", 1, "CodePoster.js", `-Format="BBCode" -Enclose="[code]${result}[/code]"`)

//Arguments
var pFormat=AkelPad.GetArgValue("Format", "BBCode");
var pEnclose=AkelPad.GetArgValue("Enclose", "<pre>${result}</pre>");
var bXHTML=AkelPad.GetArgValue("XHTML", true);
var bStrict=AkelPad.GetArgValue("Strict", false);
var bInfo=AkelPad.GetArgValue("Info", true);

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var oSys=AkelPad.SystemFunction();
var dwSystemTextColor=oSys.Call("user32::GetSysColor", 8 /*COLOR_WINDOWTEXT*/);
var lpGH;
var lpCallback;
var pText="";
var pColorBegin;
var pColorEnd;
var lpMemText=0;
var nMemTextBytes;
var bBBCode;
var pScriptURL="";

if (hWndEdit)
{
  if (pFormat.toLowerCase() == "html")
    bBBCode=false;
  else
    bBBCode=true;

  if (bInfo)
    pScriptURL="http://akelpad.sourceforge.net/forum/viewtopic.php?p=13021#13021";

  if (lpGH=AkelPad.MemAlloc(_X64?80:40 /*sizeof(AEGETHIGHLIGHT)*/))
  {
    if (lpCallback=oSys.RegisterCallback("GetHighLightCallback"))
    {
      AkelPad.MemCopy(lpGH + (_X64?16:8) /*offsetof(AEGETHIGHLIGHT, lpCallback)*/, lpCallback, 2 /*DT_QWORD*/);
      AkelPad.MemCopy(lpGH + (_X64?72:36) /*offsetof(AEGETHIGHLIGHT, dwFlags)*/, 0x7 /*AEGHF_NOSELECTION|AEGHF_NOACTIVELINETEXT|AEGHF_NOACTIVELINEBK*/, 3 /*DT_DWORD*/);

      if (!AkelPad.SendMessage(hWndEdit, 3123 /*AEM_EXGETSEL*/, lpGH + (_X64?24:12) /*offsetof(AEGETHIGHLIGHT, crText.ciMin)*/, lpGH + (_X64?48:24) /*offsetof(AEGETHIGHLIGHT, crText.ciMax)*/))
      {
        AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, 1 /*AEGI_FIRSTCHAR*/, lpGH + (_X64?24:12) /*offsetof(AEGETHIGHLIGHT, crText.ciMin)*/);
        AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, 2 /*AEGI_LASTCHAR*/, lpGH + (_X64?48:24) /*offsetof(AEGETHIGHLIGHT, crText.ciMax)*/);
      }

      //Calculate nMemTextBytes
      nMemTextBytes=0;
      AkelPad.SendMessage(hWndEdit, 3595 /*AEM_HLGETHIGHLIGHT*/, 0, lpGH);

      if (lpMemText=AkelPad.MemAlloc(nMemTextBytes + _TSIZE))
      {
        //Fill lpMemText
        nMemTextBytes=0;
        AkelPad.SendMessage(hWndEdit, 3595 /*AEM_HLGETHIGHLIGHT*/, 0, lpGH);

        pText=AkelPad.MemRead(lpMemText, _TSTR);
        AkelPad.MemFree(lpMemText);
      }
      oSys.UnregisterCallback(lpCallback);
    }
    AkelPad.MemFree(lpGH);
  }

  if (pText)
  {
    pText=pEnclose.replace(/\$\{result\}/, pText);
    if (bInfo)
    {
      if (bBBCode)
        pText+="[color=Purple][size=1]* " + GetLangString(0) + " [URL=" + pScriptURL + "]CodePoster.js[/URL] " + GetLangString(1) + "[/size][/color]\r";
      else
      {
        if (bStrict)
          pText+="\r<span style=\"color:Purple; font-size:xx-small;\">* " + GetLangString(0) + " <a href=\"" + pScriptURL + "\">CodePoster.js</a> " + GetLangString(1) + "</span>\r";
        else
          pText+="\r<font color=\"Purple\" size=\"1\">* " + GetLangString(0) + " <a href=\"" + pScriptURL + "\">CodePoster.js</a> " + GetLangString(1) + "</font>\r";
      }
    }
    AkelPad.SetClipboardText(pText);
    AkelPad.MessageBox(hMainWnd, GetLangString(2), WScript.ScriptName, 64 /*MB_ICONINFORMATION*/);
  }
}

function GetHighLightCallback(dwCookie, crAkelRange, crRichRange, hlp)
{
  var nRangeStart=AkelPad.MemRead(crRichRange + 0 /*offsetof(CHARRANGE64, crRichRange.cpMin)*/, 2 /*DT_QWORD*/);
  var nRangeEnd=AkelPad.MemRead(crRichRange + (_X64?8:4) /*offsetof(CHARRANGE64, crRichRange.cpMax)*/, 2 /*DT_QWORD*/);
  var pRangeText;
  var dwFontStyle=AkelPad.MemRead(hlp + (_X64?16:16) /*offsetof(AEHLPAINT, dwFontStyle)*/, 3 /*DT_DWORD*/);
  var dwActiveTextColor=AkelPad.MemRead(hlp + (_X64?8:8) /*offsetof(AEHLPAINT, dwActiveText)*/, 3 /*DT_DWORD*/);
  var dwPaintType=AkelPad.MemRead(hlp + (_X64?20:20) /*offsetof(AEHLPAINT, dwPaintType)*/, 3 /*DT_DWORD*/);

  if (pRangeText=AkelPad.GetTextRange(nRangeStart, nRangeEnd))
  {
    if (!bBBCode)
    {
      //pRangeText=pRangeText.replace(/[ ]{2,}/g, "&nbsp;");
      pRangeText=pRangeText.replace(/&/g, "&amp;");
      pRangeText=pRangeText.replace(/</g, "&lt;");
      pRangeText=pRangeText.replace(/>/g, "&gt;");
      pRangeText=pRangeText.replace(/"/g, "&quot;");
    }

    if (dwPaintType & 0x80 /*AEHPT_LINK*/)
    {
      if (bBBCode)
        pRangeText="[url=" + pRangeText + "]" + pRangeText + "[/url]";
      else
        pRangeText="<a href=\"" + pRangeText + "\">" + pRangeText + "</a>";
    }
    if (dwFontStyle == 2 /*AEHLS_FONTBOLD*/)
    {
      if (bBBCode)
        pRangeText="[b]" + pRangeText + "[/b]";
      else
        pRangeText="<b>" + pRangeText + "</b>";
    }
    else if (dwFontStyle == 3 /*AEHLS_FONTITALIC*/)
    {
      if (bBBCode)
        pRangeText="[i]" + pRangeText + "[/i]";
      else
        pRangeText="<i>" + pRangeText + "</i>";
    }
    else if (dwFontStyle == 4 /*AEHLS_FONTBOLDITALIC*/)
    {
      if (bBBCode)
        pRangeText="[b][i]" + pRangeText + "[/i][/b]";
      else
        pRangeText="<b><i>" + pRangeText + "</i></b>";
    }

    if (dwSystemTextColor != dwActiveTextColor)
    {
      if (bBBCode)
        nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, "[color=#" + rgb2hex(dwActiveTextColor) + "]" + pRangeText + "[/color]", _TSTR) - _TSIZE;
      else
      {
        if (bStrict)
          nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, "<span style=\"color:#" + rgb2hex(dwActiveTextColor) + ";\">" + pRangeText + "</span>", _TSTR) - _TSIZE;
        else
          nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, "<font color=\"#" + rgb2hex(dwActiveTextColor) + "\">" + pRangeText + "</font>", _TSTR) - _TSIZE;
      }
    }
    else nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, pRangeText, _TSTR) - _TSIZE;
  }

  if (IsLastCharInLine(crAkelRange + (_X64?24:12) /*offsetof(AECHARRANGE, ciMax)*/) && IndexCompare(crAkelRange + (_X64?24:12) /*offsetof(AECHARRANGE, ciMax)*/, lpGH + (_X64?48:24) /*offsetof(AEGETHIGHLIGHT, crText.ciMax)*/))
  {
    if (bBBCode)
      nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, "\r", _TSTR) - _TSIZE;
    else
      nMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + nMemTextBytes:0, "\r" + (bXHTML?"<br/>":"<br>"), _TSTR) - _TSIZE;
  }
  return 0;
}

function rgb2hex(dwColor)
{
  var pHexColor;

  pHexColor=dwColor.toString(16)
  while (pHexColor.length < 6) pHexColor="0" + pHexColor;
  return pHexColor.substr(4, 2) + pHexColor.substr(2, 2) + pHexColor.substr(0, 2);
}

function IsLastCharInLine(lpCharIndex)
{
  var nCharInLine=AkelPad.MemRead(lpCharIndex + (_X64?16:8) /*offsetof(AECHARINDEX, nCharInLine)*/, 3 /*DT_DWORD*/);
  var lpLine=AkelPad.MemRead(lpCharIndex + (_X64?8:4) /*offsetof(AECHARINDEX, lpLine)*/, 2 /*DT_QWORD*/);
  var nLineLen=AkelPad.MemRead(lpLine + (_X64?24:12) /*offsetof(AELINEDATA, nLineLen)*/, 3 /*DT_DWORD*/);
  var nLineBreak=AkelPad.MemRead(lpLine + (_X64?28:16) /*offsetof(AELINEDATA, nLineBreak)*/, 3 /*DT_DWORD*/);

  if (nCharInLine == nLineLen && nLineBreak != 9 /*AELB_WRAP*/)
    return true;
  return false;
}

function IndexCompare(lpCharIndex1, lpCharIndex2)
{
  var nCharInLine1=AkelPad.MemRead(lpCharIndex1 + (_X64?16:8) /*offsetof(AECHARINDEX, nCharInLine)*/, 3 /*DT_DWORD*/);
  var nLine1=AkelPad.MemRead(lpCharIndex1 + 0 /*offsetof(AECHARINDEX, nLine)*/, 3 /*DT_DWORD*/);
  var nCharInLine2=AkelPad.MemRead(lpCharIndex2 + (_X64?16:8) /*offsetof(AECHARINDEX, nCharInLine)*/, 3 /*DT_DWORD*/);
  var nLine2=AkelPad.MemRead(lpCharIndex2 + 0 /*offsetof(AECHARINDEX, nLine)*/, 3 /*DT_DWORD*/);

  if (nLine1 == nLine2 && nCharInLine1 == nCharInLine2)
    return 0;
  if (nLine1 < nLine2 || (nLine1 == nLine2 && nCharInLine1 < nCharInLine2))
    return -1;
  return 1;
}

function GetLangString(nStringID)
{
  var nLangID=AkelPad.GetLangId(1 /*LANGID_PRIMARY*/);

  if (nLangID == 0x19) //LANG_RUSSIAN
  {
    if (nStringID == 0)
      return "\u041F\u043E\u0434\u0441\u0432\u0435\u0447\u0435\u043D\u043E\u0020\u0441\u0020\u043F\u043E\u043C\u043E\u0449\u044C\u044E\u0020\u0441\u043A\u0440\u0438\u043F\u0442\u0430";
    if (nStringID == 1)
      return "\u0434\u043B\u044F AkelPad";
    if (nStringID == 2)
      return "\u041A\u043E\u0434\u0020\u043F\u043E\u043C\u0435\u0449\u0435\u043D\u0020\u0432\u0020\u0431\u0443\u0444\u0435\u0440\u0020\u043E\u0431\u043C\u0435\u043D\u0430\u002E";
  }
  else
  {
    if (nStringID == 0)
      return "Highlighted with script";
    if (nStringID == 1)
      return "for AkelPad";
    if (nStringID == 2)
      return "Code has been placed in clipboard.";
  }
  return "";
}


Example


Last edited by Instructor on Sat Jul 16, 2011 7:21 pm; edited 9 times in total
Back to top
View user's profile Send private message Send e-mail
KDJ



Joined: 06 Mar 2010
Posts: 1081
Location: Poland

PostPosted: Wed May 25, 2011 6:38 pm    Post subject: Reply with quote

Translates text via Google, MS Bing and Yandex - Part One.
Part Two is in the next post. Both parts should be placed in one file.
In one file is here: KDJ.zip

I used some code from the script TranslateWithGoogleAPI.js, written by VladSh, thanks for translator idea.

Translator.js

Code:
// Translator.js - ver. 2013-05-03
//
// On line translator via Google, MS Bing and Yandex.
//
// Usage in AkelPad window:
// Call("Scripts::Main", 1, "Translator.js")
// Call("Scripts::Main", 1, "Translator.js", "en ru") - translates from English to Russian
// Call("Scripts::Main", 1, "Translator.js", "auto pl 1") - autodetect source language, translates to Polish, source text from Clipboard
//
// Usage in command line (required AkelEdit.dll and registration Scripts.dll):
// Wscript.exe Translator.js
//
// Shortcut keys in dialog box:
// Tab          - change edit panel focus source <-> target (double-panel mode)
// Ctrl+Enter,  - double-panel mode - translates entire text from source panel
//              - single-panel mode - translates selected text from AkelPad window or text from Clipboard
// Alt+Enter    - works as Ctrl+Enter, but translated text will be added at the end in target panel
// Shift+Enter  - double-window mode - translates selected text from source panel;
//                if is not selection - translates entire text
//              - single-panel mode - translates selected text from AkelPad window or text from Clipboard
// Ctrl+L       - listen entire text from active edit panel
// Ctrl+Shift+L - listen selected text from active edit panel
// Alt+U        - switch languages
// Shift+Alt+U  - switch languages and texts (double-panel mode only)
// Alt+F1       - choose translator
// Alt+1        - choose from language
// Alt+2        - choose to language
// Ctrl+F       - switch font AkelPad/GUI/other
// Ctrl+U       - switch wordwrap
// Ctrl+W       - source panel on/off
// Alt+S        - settings
// Alt+-+       - change opaque/transparency level of dialog box
// F4           - maximize/restore window
// Right click  - context menu in edit panels

var oFSO     = new ActiveXObject("Scripting.FileSystemObject");
var sIniFile = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + ".ini";

var sTxtCaption;
var sTxtUse;
var sTxtFromLang;
var sTxtToLang;
var sTxtAutoDetect;
var sTxtTranslate;
var sTxtTranslateP;
var sTxtOptions;
var sTxtSource;
var sTxtTarget;
var sTxtSettings;
var sTxtUndo;
var sTxtRedo;
var sTxtCut;
var sTxtCopyCB;
var sTxtInsertAP;
var sTxtPasteCB;
var sTxtPasteAP;
var sTxtDelete;
var sTxtSelectAll;
var sTxtEntireText;
var sTxtInterface;
var sTxtSourceInCB;
var sTxtSourceWnd;
var sTxtLoadText;
var sTxtImmediate;
var sTxtFontAP;
var sTxtFontGUI;
var sTxtWordWrap;
var sTxtSortLang;
var sTxtSortCode;
var sTxtSortName;
var sTxtOwnKey;
var sTxtRegister;
var sTxtOK;
var sTxtCancel;
var sTxtError;
var sTxtNoText;
var sTxtNoSupport;
var sTxtNoInternet;
var sTxtWait;
var sTxtUndefined;
var sTxtRegScripts;
var sTxtNoLibrary;

var aLangs = [
  ["af"   , "", 1, 0, 0, 1], /*1 - available in Google, 0 - not in Bing, 0 - not in Yandex, 1 - available Google TTS*/
  ["ar"   , "", 1, 1, 0, 1],
  ["be"   , "", 1, 0, 0, 0],
  ["bg"   , "", 1, 1, 1, 0],
  ["ca"   , "", 1, 1, 0, 1],
  ["cs"   , "", 1, 1, 1, 1],
  ["cy"   , "", 1, 0, 0, 1],
  ["da"   , "", 1, 1, 0, 1],
  ["de"   , "", 1, 1, 1, 1],
  ["el"   , "", 1, 1, 0, 1],
  ["en"   , "", 1, 1, 1, 1],
  ["eo"   , "", 1, 0, 0, 1],
  ["es"   , "", 1, 1, 1, 1],
  ["et"   , "", 1, 1, 0, 0],
  ["fa"   , "", 1, 1, 0, 0],
  ["fi"   , "", 1, 1, 0, 1],
  ["fr"   , "", 1, 1, 1, 1],
  ["ga"   , "", 1, 0, 0, 0],
  ["gl"   , "", 1, 0, 0, 0],
  ["hi"   , "", 1, 1, 0, 1],
  ["hr"   , "", 1, 0, 0, 1],
  ["ht"   , "", 1, 1, 0, 1],
  ["hu"   , "", 1, 1, 0, 1],
  ["id"   , "", 1, 1, 0, 1],
  ["is"   , "", 1, 0, 0, 1],
  ["it"   , "", 1, 1, 1, 1],
  ["iw"   , "", 1, 1, 0, 0],
  ["ja"   , "", 1, 1, 0, 1],
  ["ko"   , "", 1, 1, 0, 1],
  ["la"   , "", 1, 0, 0, 1],
  ["lt"   , "", 1, 1, 0, 0],
  ["lv"   , "", 1, 1, 0, 1],
  ["mk"   , "", 1, 0, 0, 1],
  ["ms"   , "", 1, 1, 0, 0],
  ["mt"   , "", 1, 0, 0, 0],
  ["nl"   , "", 1, 1, 0, 1],
  ["no"   , "", 1, 1, 0, 1],
  ["pl"   , "", 1, 1, 1, 1],
  ["pt"   , "", 1, 1, 0, 1],
  ["ro"   , "", 1, 1, 1, 1],
  ["ru"   , "", 1, 1, 1, 1],
  ["sk"   , "", 1, 1, 0, 1],
  ["sl"   , "", 1, 1, 0, 0],
  ["sq"   , "", 1, 0, 0, 1],
  ["sr"   , "", 1, 0, 1, 1],
  ["sv"   , "", 1, 1, 0, 1],
  ["sw"   , "", 1, 0, 0, 1],
  ["th"   , "", 1, 1, 0, 1],
  ["tl"   , "", 1, 0, 0, 0],
  ["tr"   , "", 1, 1, 1, 1],
  ["uk"   , "", 1, 1, 1, 0],
  ["ur"   , "", 1, 1, 0, 0],
  ["vi"   , "", 1, 1, 0, 1],
  ["yi"   , "", 1, 0, 0, 0],
  ["zh"   , "", 1, 0, 0, 1],
  ["zh-CN", "", 1, 1, 0, 1],
  ["zh-TW", "", 1, 1, 0, 1]];

var aAPIs = [{"Name":        "Google",
              "APIkey":      "",
              "APIkeyP":     "",
              "RegistrURL":  "",
              "AutoDetect":  1,
              "TextLen":     48000},
             {"Name":        "MS Bing",
              "APIkey":      "49F91281913BE5C04C18F184C4A14ED6097F6AD3",
              "APIkeyP":     "",
              "RegistrURL":  "http://www.bing.com/developers",
              "AutoDetect":  1,
              "TextLen":     10000}, //POST method
              //"TextLen":     3500}, //GET method
             {"Name":        "Yandex",
              "APIkey":      "",
              "APIkeyP":     "",
              "RegistrURL":  "",
              "AutoDetect":  0,
              "TextLen":     10000}];
var oSelect = {"API":      0,
               "FromLang": 0,
               "ToLang"  : 0,
               "Source1" : 0,
               "Source2" : 0,
               "Target1" : 0,
               "Target2" : 0};
var oWndMin = {"W": 656,
               "H": 200};
var oWndPos = {"X": 100,
               "Y": 120,
               "W": oWndMin.W,
               "H": oWndMin.H,
               "Max": 0};

var nOpaque     = 255;
var bSourceInCB = 0;
var bSourceWnd  = 1;
var bLoadText   = 1;
var bImmediate  = 0;
var bFontAP     = 0;
var bFontGUI    = 0;
var bWordWrap   = 1;
var bSortCode   = 0;
var nDetectLang = -1;
var sSource     = "";
var sTarget     = "";
var sLanguage   = "";
var aFont;

ReadIniFile();
ReadInterfaceLang();
GetAkelPadObject();

var oSys         = AkelPad.SystemFunction();
var hInstanceDLL = AkelPad.GetInstanceDll();
var sClassName   = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstanceDLL;
var hWndDlg;

if (hWndDlg = oSys.Call("User32::FindWindowExW", 0, 0, sClassName, 0))
{
  if (! oSys.Call("User32::IsWindowVisible", hWndDlg))
    oSys.Call("User32::ShowWindow", hWndDlg, 8 /*SW_SHOWNA*/);
  if (oSys.Call("User32::IsIconic", hWndDlg))
    oSys.Call("User32::ShowWindow", hWndDlg, 9 /*SW_RESTORE*/);

  oSys.Call("User32::SetForegroundWindow", hWndDlg);
}
else
{
  var DT_UNICODE = 1;
  var DT_DWORD   = 3;
  var DT_BYTE    = 5;

  var CB_ADDSTRING    = 0x143;
  var CB_GETCOUNT     = 0x146;
  var CB_GETCURSEL    = 0x147;
  var CB_SETCURSEL    = 0x14E;
  var CB_SHOWDROPDOWN = 0x14F;
  var CB_GETITEMDATA  = 0x150;
  var CB_SETITEMDATA  = 0x151;
  var CB_RESETCONTENT = 0x14B;
  var CBN_SELCHANGE   = 1;
  var CBN_SETFOCUS    = 3;
  var CBN_CLOSEUP     = 8;

  var hMainWnd     = AkelPad.GetMainWnd();
  var hEditWnd     = AkelPad.GetEditWnd();
  var hGuiFont     = oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
  var sEditLibName = "AkelEdit.dll";
  var hEditLib;
  var hFocus;
  var hFocusSet;
  var bCloseCB;
  var nTimerCount;
  var nSpeechLang;
  var sSpeechText;
  var sSpeechPart;
  var uSpeechBody;

  if (bSourceWnd && bLoadText)
  {
    if (bSourceInCB || (! hEditWnd) || ((WScript.Arguments.length > 2) && (WScript.Arguments(2) == "1")))
    {
      if (oSys.Call("User32::IsClipboardFormatAvailable", 13 /*CF_UNICODETEXT*/))
      {
        sSource = AkelPad.GetClipboardText().substr(0, aAPIs[oSelect.API].TextLen);
        oSelect.Source1 = oSelect.Source2 = 0;
      }
    }
    else if (AkelPad.SendMessage(hEditWnd, 3125 /*AEM_GETSEL*/, 0, 0))
    {
      sSource = AkelPad.GetSelText(3 /*"\r\n"*/).substr(0, aAPIs[oSelect.API].TextLen);
      oSelect.Source1 = oSelect.Source2 = 0;
    }
  }

  if (oWndPos.H < oWndMin.H)
    oWndPos.H = oWndMin.H;
  if (oWndPos.W < oWndMin.W)
    oWndPos.W = oWndMin.W;
  if (hEditWnd && bFontAP && bFontGUI)
    bFontGUI = 0;
  if (! aFont)
    aFont = ConvertFontFormat(hGuiFont, 2, 3);

  //Main dialog
  var aSubClassHand = [];
  var aWnd          = [];
  var IDUSE         = 1000;
  var IDAPICB       = 1001;
  var IDDETECTLANG  = 1002;
  var IDFROMLANG    = 1003;
  var IDFROMLANGCB  = 1004;
  var IDTOLANG      = 1005;
  var IDTOLANGCB    = 1006;
  var IDSWITCHLANG  = 1007;
  var IDSWITCHALL   = 1008;
  var IDLISTEN1     = 1009;
  var IDLISTEN2     = 1010;
  var IDOPAQMINUS   = 1011;
  var IDOPAQPLUS    = 1012;
  var IDTRANSLATE   = 1013;
  var IDOPTIONS     = 1014;
  var IDTXTSOURCE   = 1015;
  var IDTXTTARGET   = 1016;
  var IDTIMER       = 1017;
  var nListenID     = IDLISTEN1;

  //Settings dialog
  var aWndSet       = [];
  var IDINTERFACECB = 1100;
  var IDINTERFACE   = 1101;
  var IDEDITOPTIONS = 1102;
  var IDSOURCEINCB  = 1103;
  var IDSOURCEWND   = 1104;
  var IDLOADTEXT    = 1105;
  var IDIMMEDIATE   = 1106;
  var IDWORDWRAP    = 1107;
  var IDFONTAP      = 1108;
  var IDFONTGUI     = 1109;
  var IDFONT        = 1110;
  var IDSORTLANG    = 1111;
  var IDSORTCODE    = 1112;
  var IDSORTNAME    = 1113;
  var IDAPINAME1    = 1114;
  var IDAPIKEYS1    = 1115;
  var IDAPIKEY1     = 1116;
  var IDREGIST1     = 1117;
  var IDREGURL1     = 1118;
  var IDOK          = 1119;
  var IDCANCEL      = 1120;

  var WNDCLASS = 0;
  var WND      = 1;
  var WNDSTY   = 2;
  var WNDX     = 3;
  var WNDY     = 4;
  var WNDW     = 5;
  var WNDH     = 6;
  var WNDTXT   = 7;

  //0x50000000 - WS_VISIBLE|WS_CHILD
  //0x50000007 - WS_VISIBLE|WS_CHILD|BS_GROUPBOX
  //0x50000009 - WS_VISIBLE|WS_CHILD|BS_AUTORADIOBUTTON
  //0x50010000 - WS_VISIBLE|WS_CHILD|WS_TABSTOP
  //0x50010001 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON
  //0x50010003 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
  //0x50200003 - WS_VISIBLE|WS_CHILD|WS_VSCROLL|CBS_DROPDOWNLIST
  //0x50200103 - WS_VISIBLE|WS_CHILD|WS_VSCROLL|CBS_SORT|CBS_DROPDOWNLIST
  //0x50210103 - WS_VISIBLE|WS_CHILD|WS_VSCROLL|WS_TABSTOP|CBS_SORT|CBS_DROPDOWNLIST
  //0x50810080 - WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP|ES_AUTOHSCROLL
  //0x50810880 - WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP|ES_READONLY|ES_AUTOHSCROLL
  //0x50311104 - WS_VISIBLE|WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_TABSTOP|ES_WANTRETURN|ES_NOHIDESEL|ES_MULTILINE
  //0x50B11104 - WS_VISIBLE|WS_CHILD|WS_BORDER|WS_HSCROLL|WS_VSCROLL|WS_TABSTOP|ES_WANTRETURN|ES_NOHIDESEL|ES_MULTILINE
  //Windows              WNDCLASS,  WND,     WNDSTY,WNDX,WNDY,WNDW,WNDH, WNDTXT
  aWnd[IDUSE        ] = ["STATIC",    0, 0x50000000,  10,  10,  80,  13];
  aWnd[IDAPICB      ] = ["COMBOBOX",  0, 0x50200003,  10,  25,  80, 100, ""];
  aWnd[IDDETECTLANG ] = ["STATIC",    0, 0x50000000,  10,  60, 210,  13, ""];
  aWnd[IDFROMLANG   ] = ["STATIC",    0, 0x50000000, 110,  10, 200,  13];
  aWnd[IDFROMLANGCB ] = ["COMBOBOX",  0, 0x50200103, 110,  25, 200, 420, ""];
  aWnd[IDTOLANG     ] = ["STATIC",    0, 0x50000000, 340,  10, 200,  13];
  aWnd[IDTOLANGCB   ] = ["COMBOBOX",  0, 0x50200103, 340,  25, 200, 420, ""];
  aWnd[IDSWITCHLANG ] = ["BUTTON",    0, 0x50000000, 310,  25,  30,  21, "<->"];
  aWnd[IDSWITCHALL  ] = ["BUTTON",    0, 0x50000000, 310,  50,  30,  21, "<=>"];
  aWnd[IDLISTEN1    ] = ["BUTTON",    0, 0x50000000, 225,  50,  80,  21, sTxtListen];
  aWnd[IDLISTEN2    ] = ["BUTTON",    0, 0x50000000, 345,  50,  80,  21, sTxtListen];
  aWnd[IDOPAQMINUS  ] = ["BUTTON",    0, 0x50000000, 617,   0,  15,  16, "-"];
  aWnd[IDOPAQPLUS   ] = ["BUTTON",    0, 0x50000000, 632,   0,  15,  16, "+"];
  aWnd[IDTRANSLATE  ] = ["BUTTON",    0, 0x50000000, 560,  25,  80,  21];
  aWnd[IDOPTIONS    ] = ["BUTTON",    0, 0x50000000, 560,  50,  80,  21];
  aWnd[IDTXTSOURCE  ] = ["AkelEditW", 0, 0x50311104,  10,  75, 310,  80, sSource];
  aWnd[IDTXTTARGET  ] = ["AkelEditW", 0, 0x50311104, 330,  75, 310,  80, sTarget];

  aWndSet[IDINTERFACECB] = ["COMBOBOX", 0, 0x50210103,  10,  10, 150, 150, ""];
  aWndSet[IDINTERFACE  ] = ["STATIC",   0, 0x50000000, 165,  13, 120,  13];
  aWndSet[IDEDITOPTIONS] = ["BUTTON",   0, 0x50000007,  10,  40, 285, 185, ""];
  aWndSet[IDSOURCEINCB ] = ["BUTTON",   0, 0x50010003,  20,  55, 270,  16];
  aWndSet[IDSOURCEWND  ] = ["BUTTON",   0, 0x50010003,  20,  75, 270,  16];
  aWndSet[IDLOADTEXT   ] = ["BUTTON",   0, 0x50010003,  20,  95, 270,  16];
  aWndSet[IDIMMEDIATE  ] = ["BUTTON",   0, 0x50010003,  20, 115, 270,  16];
  aWndSet[IDWORDWRAP   ] = ["BUTTON",   0, 0x50010003,  20, 135, 270,  16];
  aWndSet[IDFONTAP     ] = ["BUTTON",   0, 0x50010003,  20, 155, 270,  16];
  aWndSet[IDFONTGUI    ] = ["BUTTON",   0, 0x50010003,  20, 175, 270,  16];
  aWndSet[IDFONT       ] = ["BUTTON",   0, 0x50010000,  20, 195, 170,  20, aFont.toString()];
  aWndSet[IDSORTLANG   ] = ["BUTTON",   0, 0x50000007, 305, 160, 120,  65];
  aWndSet[IDSORTCODE   ] = ["BUTTON",   0, 0x50000009, 315, 180,  90,  16];
  aWndSet[IDSORTNAME   ] = ["BUTTON",   0, 0x50000009, 315, 200,  90,  16];
  aWndSet[IDAPINAME1   ] = ["BUTTON",   0, 0x50000007,  10, 235, 415,  75];
  aWndSet[IDAPIKEYS1   ] = ["STATIC",   0, 0x50000000,  20, 255,  70,  13, "AppID:"];
  aWndSet[IDAPIKEY1    ] = ["EDIT",     0, 0x50810080,  90, 255, 325,  20, ""];
  aWndSet[IDREGIST1    ] = ["STATIC",   0, 0x50000000,  20, 280,  70,  13];
  aWndSet[IDREGURL1    ] = ["EDIT",     0, 0x50810880,  90, 280, 325,  20, aAPIs[1].RegistrURL];
  aWndSet[IDOK         ] = ["BUTTON",   0, 0x50010001, 345,  10,  80,  23];
  aWndSet[IDCANCEL     ] = ["BUTTON",   0, 0x50010000, 345,  35,  80,  23];

  SetInterfaceLangToWndDef();

  if (! hMainWnd)
  {
    hEditLib = oSys.Call("kernel32::LoadLibraryW", sEditLibName);
    if (! hEditLib)
    {
      WScript.Echo(sTxtNoLibrary + sEditLibName);
      WScript.Quit();
    }
  }

  var hIcon = oSys.Call("User32::LoadImageW",
                        hInstanceDLL, //hinst
                        101,          //lpszName
                        1,            //uType=IMAGE_ICON
                        0,            //cxDesired
                        0,            //cyDesired
                        0x00000040);  //fuLoad=LR_DEFAULTSIZE
  var nBufSize = 0xFFFF;
  var lpBuffer = AkelPad.MemAlloc(nBufSize * 2);

  AkelPad.WindowRegisterClass(sClassName);

  hWndDlg = oSys.Call("User32::CreateWindowExW",
                      0,               //dwExStyle
                      sClassName,      //lpClassName
                      sTxtCaption,     //lpWindowName
                      0x80CF0000,      //dwStyle=WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME
                      oWndPos.X,       //x
                      oWndPos.Y,       //y
                      oWndPos.W,       //nWidth
                      oWndPos.H,       //nHeight
                      hMainWnd,        //hWndParent
                      0,               //ID
                      hInstanceDLL,    //hInstance
                      DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.

  oSys.Call("User32::ShowWindow", hWndDlg, oWndPos.Max ? 3 /*SW_MAXIMIZE*/ : 1 /*SW_SHOWNORMAL*/);

  //Allow other scripts running
  AkelPad.ScriptNoMutex();

  //Message loop
  AkelPad.WindowGetMessage();

  AkelPad.WindowUnregisterClass(sClassName);
  AkelPad.MemFree(lpBuffer);
  oSys.Call("user32::DestroyIcon", hIcon);
  if (hEditLib)
    oSys.Call("kernel32::FreeLibrary", hEditLib);
}

function SetInterfaceLangToWndDef()
{
  aWnd[IDUSE      ][WNDTXT] = sTxtUse;
  aWnd[IDFROMLANG ][WNDTXT] = sTxtFromLang;
  aWnd[IDTOLANG   ][WNDTXT] = sTxtToLang;
  aWnd[IDLISTEN1  ][WNDTXT] = sTxtListen;
  aWnd[IDLISTEN2  ][WNDTXT] = sTxtListen;
  aWnd[IDTRANSLATE][WNDTXT] = sTxtTranslate;
  aWnd[IDOPTIONS  ][WNDTXT] = sTxtOptions;

  aWndSet[IDINTERFACE ][WNDTXT] = sTxtInterface;
  aWndSet[IDSOURCEINCB][WNDTXT] = sTxtSourceInCB;
  aWndSet[IDSOURCEWND ][WNDTXT] = sTxtSourceWnd + " (Ctrl+W)";
  aWndSet[IDLOADTEXT  ][WNDTXT] = sTxtLoadText;
  aWndSet[IDIMMEDIATE ][WNDTXT] = sTxtImmediate;
  aWndSet[IDWORDWRAP  ][WNDTXT] = sTxtWordWrap + " (Ctrl+U)";
  aWndSet[IDFONTAP    ][WNDTXT] = sTxtFontAP + " (Ctrl+F)";
  aWndSet[IDFONTGUI   ][WNDTXT] = sTxtFontGUI + " (Ctrl+F)";
  aWndSet[IDSORTLANG  ][WNDTXT] = sTxtSortLang;
  aWndSet[IDSORTCODE  ][WNDTXT] = sTxtSortCode;
  aWndSet[IDSORTNAME  ][WNDTXT] = sTxtSortName;
  aWndSet[IDAPINAME1  ][WNDTXT] = aAPIs[1].Name + " - " + sTxtOwnKey;
  aWndSet[IDREGIST1   ][WNDTXT] = sTxtRegister;
  aWndSet[IDOK        ][WNDTXT] = sTxtOK;
  aWndSet[IDCANCEL    ][WNDTXT] = sTxtCancel;
}

function DialogCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 1) //WM_CREATE
  {
    var oError;
    var i;

    for (i = IDUSE; i < aWnd.length; ++i)
    {
      aWnd[i][WND] = oSys.Call("User32::CreateWindowExW",
                                0,                 //dwExStyle
                                aWnd[i][WNDCLASS], //lpClassName
                                0,                 //lpWindowName
                                aWnd[i][WNDSTY],   //dwStyle
                                aWnd[i][WNDX],     //x
                                aWnd[i][WNDY],     //y
                                aWnd[i][WNDW],     //nWidth
                                aWnd[i][WNDH],     //nHeight
                                hWnd,              //hWndParent
                                i,                 //ID
                                hInstanceDLL,      //hInstance
                                0);                //lpParam
      //Set font and text
      SetWndFontAndText(aWnd[i][WND], hGuiFont, aWnd[i][WNDTXT]);
    }

    AkelPad.SendMessage(hWnd, 0x0080 /*WM_SETICON*/, 0 /*ICON_SMALL*/, hIcon);

    SetEditWordWrap();
    SetEditFont();

    for (i = IDTXTSOURCE; i <= IDTXTTARGET; ++i)
    {
      AkelPad.SendMessage(aWnd[i][WND], 1093 /*EM_SETEVENTMASK*/, 0, 0x00080001 /*ENM_CHANGE|ENM_SELCHANGE*/);
      aSubClassHand[i] = AkelPad.WindowSubClass(aWnd[i][WND], EditCallback, 256 /*WM_KEYDOWN*/, 258 /*WM_CHAR*/);
    }

    AkelPad.SendMessage(aWnd[IDTXTSOURCE][WND], 197 /*EM_SETLIMITTEXT*/, aAPIs[oSelect.API].TextLen, 0);
    AkelPad.SendMessage(aWnd[IDTXTTARGET][WND], 197 /*EM_SETLIMITTEXT*/, nBufSize - 1, 0);

    AkelPad.SendMessage(aWnd[IDTXTSOURCE][WND], 0x00B1 /*EM_SETSEL*/, oSelect.Source1, oSelect.Source2);
    AkelPad.SendMessage(aWnd[IDTXTTARGET][WND], 0x00B1 /*EM_SETSEL*/, oSelect.Target1, oSelect.Target2);

    //Fill combobox APIs
    for (i = 0; i < aAPIs.length; ++i)
    {
      AkelPad.MemCopy(lpBuffer, aAPIs[i].Name, DT_UNICODE);
      AkelPad.SendMessage(aWnd[IDAPICB][WND], CB_ADDSTRING, 0, lpBuffer);
    }
    AkelPad.SendMessage(aWnd[IDAPICB][WND], CB_SETCURSEL, oSelect.API, 0);

    FillComboLangs();
    ShowDetectLang(true);

    if (nOpaque < 255)
      SetOpaqueLevel(hWnd, nOpaque);

    ShowSourceWindow();

    if (((! bSourceWnd) || (bSourceWnd && bLoadText)) && (bImmediate))
    {
      try
      {
        new ActiveXObject("htmlfile").parentWindow.setTimeout(function()
              {
                oSys.Call("User32::PostMessageW", hWnd, 273 /*WM_COMMAND*/, IDTRANSLATE, 0);
              }, 0);
      }
      catch (oError)
      {
        oSys.Call("User32::PostMessageW", hWnd, 273 /*WM_COMMAND*/, IDTRANSLATE, 0);
      }
    }
  }

  else if (uMsg == 7) //WM_SETFOCUS
  {
    hEditWnd = AkelPad.GetEditWnd();
    oSys.Call("User32::SetFocus", hFocus);
  }

  else if (uMsg == 36) //WM_GETMINMAXINFO
  {
    AkelPad.MemCopy(lParam + 24, oWndMin.W, DT_DWORD); //ptMinTrackSize_x
    AkelPad.MemCopy(lParam + 28, oWndMin.H, DT_DWORD); //ptMinTrackSize_y
  }

  else if (uMsg == 3) //WM_MOVE
  {
    if (! oSys.Call("User32::IsZoomed", hWnd))
      GetWindowPos(hWnd, oWndPos);
  }

  else if (uMsg == 5) //WM_SIZE
  {
    if (wParam != 2) //SIZE_MAXIMIZED
      GetWindowPos(hWnd, oWndPos);

    ResizeWindow(hWnd);
  }

  else if (uMsg == 15) //WM_PAINT
    PaintSizeGrip(hWnd);

  else if (uMsg == 256) //WM_KEYDOWN
  {
    if (wParam == 13 /*VK_RETURN*/)
    {
      if ((Ctrl() || Shift()) &&
          ((oSys.Call("User32::GetFocus") == aWnd[IDTXTSOURCE][WND]) ||
           (oSys.Call("User32::GetFocus") == aWnd[IDTXTTARGET][WND])))
        Translate(Shift());
    }
    else if ((wParam == 0x4C /*L key*/) && Ctrl() && (! Alt()))
      Listen(hFocus, Number(Shift()));
    else if ((wParam == 0x43 /*C key*/) && Ctrl() && Shift())
      InsertTextToAP(hFocus, 0);
    else if ((wParam == 0x56 /*V key*/) && Ctrl() && Shift())
      PasteTextFromAP(hFocus, 0);
    else if ((wParam == 0x46 /*F key*/) && Ctrl())
    {
      if (hEditWnd)
      {
        if (bFontAP)
        {
          bFontAP  = 0;
          bFontGUI = 1;
        }
        else if (bFontGUI)
          bFontGUI = 0;
        else
          bFontAP  = 1;
      }
      else
        bFontGUI = ! bFontGUI;

      SetEditFont();
      oSys.Call("User32::InvalidateRect", hWnd, 0, 0);
    }
    else if ((wParam == 0x55 /*U key*/) && Ctrl())
    {
      bWordWrap = ! bWordWrap;
      SetEditWordWrap();
    }
    else if ((wParam == 0x57 /*W key*/) && Ctrl())
    {
      bSourceWnd = ! bSourceWnd;
      ShowSourceWindow();
    }
    else if (wParam == 0x73 /*VK_F4*/)
      oSys.Call("User32::ShowWindow", hWnd, oSys.Call("User32::IsZoomed", hWnd) ? 9 /*SW_RESTORE*/ : 3 /*SW_MAXIMIZE*/);
    else if ((wParam == 27 /*VK_ESCAPE*/) && bCloseCB)
      oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
  }

  else if (uMsg == 260) //WM_SYSKEYDOWN
  {
    if (wParam == 13) //VK_RETURN
    {
      oSys.Call("User32::SetFocus", hFocus);
      Translate(Shift(), 1);
    }
    else if (wParam == 0x58) //X key
    {
      CopyEntireTextToCB(hFocus);
      DeleteEntireText(hFocus);
    }
    else if (wParam == 0x43) //C key
    {
      if (Shift())
        InsertTextToAP(hFocus, 1);
      else
        CopyEntireTextToCB(hFocus);
    }
    else if (wParam == 0x56) //V key
    {
      if (Shift())
        PasteTextFromAP(hFocus, 1);
      else
        PasteEntireTextFromCB(hFocus);
    }
    else if (wParam == 0x2E) //VK_DELETE
      DeleteEntireText(hFocus);
    else if (wParam == 0x55) //U key
    {
      if (Shift())
      {
        if (bSourceWnd)
          oSys.Call("User32::PostMessageW", hWnd, 273 /*WM_COMMAND*/, IDSWITCHALL, 0);
      }
      else
        oSys.Call("User32::PostMessageW", hWnd, 273 /*WM_COMMAND*/, IDSWITCHLANG, 0);
    }
    else if (wParam == 0x70) //VK_F1
      oSys.Call("User32::SetFocus", aWnd[IDAPICB][WND]);
    else if (wParam == 0x31) //1 key
      oSys.Call("User32::SetFocus", aWnd[IDFROMLANGCB][WND]);
    else if (wParam == 0x32) //2 key
      oSys.Call("User32::SetFocus", aWnd[IDTOLANGCB][WND]);
    else if ((wParam == 109) || (wParam == 189)) //Num- or -
      oSys.Call("User32::PostMessageW", hWnd, 273 /*WM_COMMAND*/, IDOPAQMINUS, 0);
    else if ((wParam == 107) || (wParam == 187)) //Num+ or +
      oSys.Call("User32::PostMessageW", hWnd, 273 /*WM_COMMAND*/, IDOPAQPLUS, 0);
    else if (wParam == 0x53) //S key
      Settings();
  }

  else if (uMsg == 123) //WM_CONTEXTMENU
  {
    if ((wParam == aWnd[IDTXTSOURCE][WND]) || (wParam == aWnd[IDTXTTARGET][WND]))
      ContextMenu(wParam, lParam);
  }

  else if (uMsg == 0x004E) //WM_NOTIFY
  {
    if (AkelPad.MemRead(lParam + 8, DT_DWORD) == 0x0702 /*EN_SELCHANGE*/)
    {
      if (wParam == IDTXTSOURCE)
      {
        oSelect.Source1 = AkelPad.MemRead(lParam + 12, DT_DWORD);
        oSelect.Source2 = AkelPad.MemRead(lParam + 16, DT_DWORD);
      }
      else if (wParam == IDTXTTARGET)
      {
        oSelect.Target1 = AkelPad.MemRead(lParam + 12, DT_DWORD);
        oSelect.Target2 = AkelPad.MemRead(lParam + 16, DT_DWORD);
      }
    }
  }

  else if (uMsg == 0x3B9) //MM_MCINOTIFY
  {
    if (wParam == 1 /*MCI_NOTIFY_SUCCESSFUL*/)
    {
      oSys.Call("Winmm::mciSendStringW", "close TTS wait", 0, 0, 0);
      PlayTextToSpeech();
    }
  }

  else if (uMsg == 0x0113) //WM_TIMER
    SetWndFontAndText(aWnd[nListenID][WND], hGuiFont, (nTimerCount++ % 2) ? sTxtListen : "");

  else if (uMsg == 273) //WM_COMMAND
  {
    var nLowParam = LoWord(wParam);
    var nHiwParam = HiWord(wParam);
    bCloseCB = 1;

    if (nLowParam == IDAPICB)
    {
      if (nHiwParam == CBN_SETFOCUS)
        oSys.Call("User32::PostMessageW", lParam, CB_SHOWDROPDOWN, 1, 0);
      if (nHiwParam == CBN_SELCHANGE)
      {
        var nSel1 = oSelect.Source1;
        var nSel2 = oSelect.Source2;

        oSelect.API = AkelPad.SendMessage(aWnd[IDAPICB][WND], CB_GETCURSEL, 0, 0);
        AkelPad.SendMessage(aWnd[IDTXTSOURCE][WND], 197 /*EM_SETLIMITTEXT*/, aAPIs[oSelect.API].TextLen, 0);

        oSys.Call("User32::GetWindowTextW", aWnd[IDTXTSOURCE][WND], lpBuffer, nBufSize);
        SetWndFontAndText(aWnd[IDTXTSOURCE][WND], 0, AkelPad.MemRead(lpBuffer, DT_UNICODE).substr(0, aAPIs[oSelect.API].TextLen));
        AkelPad.SendMessage(aWnd[IDTXTSOURCE][WND], 0x00B1 /*EM_SETSEL*/, nSel1, nSel2);

        ShowDetectLang(false);

        FillComboLangs(AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETITEMDATA, oSelect.FromLang, 0),
                       AkelPad.SendMessage(aWnd[IDTOLANGCB  ][WND], CB_GETITEMDATA, oSelect.ToLang,   0));
      }
      else if (nHiwParam == CBN_CLOSEUP)
      {
        if (oSys.Call("User32::GetFocus") == lParam)
          oSys.Call("User32::SetFocus", hFocus);

        bCloseCB = 0;
      }
    }
    else if ((nLowParam == IDFROMLANGCB) || (nLowParam == IDTOLANGCB))
    {
      if (nHiwParam == CBN_SETFOCUS)
        oSys.Call("User32::PostMessageW", lParam, CB_SHOWDROPDOWN, 1, 0);
      else if (nHiwParam == CBN_SELCHANGE)
      {
        ShowDetectLang(false);
        if (nLowParam == IDFROMLANGCB)
          oSelect.FromLang = AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETCURSEL, 0, 0);
        else
          oSelect.ToLang = AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_GETCURSEL, 0, 0);
      }
      else if (nHiwParam == CBN_CLOSEUP)
      {
        if (oSys.Call("User32::GetFocus") == lParam)
          oSys.Call("User32::SetFocus", hFocus);

        bCloseCB = 0;
      }
    }
    else if (nLowParam == IDTXTSOURCE)
    {
      if (nHiwParam == 0x0100) //EN_SETFOCUS
      {
        hFocus = lParam;
        SetEditStyle(lParam, aWnd[IDTXTTARGET][WND]);
      }
      else if (nHiwParam == 0x0300) //EN_CHANGE
        ShowDetectLang(false);
    }
    else if (nLowParam == IDTXTTARGET)
    {
      if (nHiwParam == 0x0100) //EN_SETFOCUS
      {
        hFocus = lParam;
        SetEditStyle(lParam, aWnd[IDTXTSOURCE][WND]);
      }
    }
    else if ((nLowParam >= IDSWITCHLANG) && (nLowParam <= IDOPTIONS))
    {
      oSys.Call("User32::DefDlgProcW", hWnd, 1025 /*DM_SETDEFID*/, nLowParam, 0);
      oSys.Call("User32::DefDlgProcW", hWnd, 1025 /*DM_SETDEFID*/, IDUSE, 0);

      if (nLowParam == IDSWITCHLANG)
        SwitchLang();
      else if (nLowParam == IDSWITCHALL)
        SwitchLang(1);
      else if (nLowParam == IDLISTEN1)
        Listen(aWnd[IDTXTSOURCE][WND], -1);
      else if (nLowParam == IDLISTEN2)
        Listen(aWnd[IDTXTTARGET][WND], -1);
      else if (nLowParam == IDOPAQMINUS)
      {
        if (nOpaque > 55)
          SetOpaqueLevel(hWnd, -2);
      }
      else if (nLowParam == IDOPAQPLUS)
      {
        if (nOpaque < 255)
          SetOpaqueLevel(hWnd, -1);
      }
      else if (nLowParam == IDTRANSLATE)
        Translate();
      else if (nLowParam == IDOPTIONS)
        ContextMenu(lParam, -2);

      oSys.Call("User32::SetFocus", hFocus);
    }
  }

  else if (uMsg == 16) //WM_CLOSE
  {
    oSys.Call("Winmm::mciSendStringW", "close TTS", 0, 0, 0);
    KillTimer();
    AkelPad.WindowUnsubClass(aWnd[IDTXTSOURCE][WND]);
    AkelPad.WindowUnsubClass(aWnd[IDTXTTARGET][WND]);
    WriteIniFile();
    //Destroy dialog
    oSys.Call("User32::DestroyWindow", hWnd);
  }

  else if (uMsg == 2) //WM_DESTROY
  {
    //Exit message loop
    oSys.Call("User32::PostQuitMessage", 0);
  }

  return 0;
}

function EditCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 256) //WM_KEYDOWN
  {
    if ((wParam == 0x56 /*V key*/) && Ctrl() && Shift())
    {
      AkelPad.WindowNoNextProc(aSubClassHand[oSys.Call("User32::GetDlgCtrlID", hWnd)]);
      return 1;
    }
  }
  else if (uMsg == 258) //WM_CHAR
  {
    if ((wParam == 13 /*VK_RETURN*/) && (Ctrl() || Shift()))
    {
      AkelPad.WindowNoNextProc(aSubClassHand[oSys.Call("User32::GetDlgCtrlID", hWnd)]);
      return 1;
    }
  }

  return 0;
}

function LoWord(nParam)
{
  return (nParam & 0xffff);
}

function HiWord(nParam)
{
  return ((nParam >> 16) & 0xffff);
}

function Shift()
{
  return Boolean(oSys.Call("User32::GetKeyState", 0x10 /*VK_SHIFT*/) & 0x8000);
}

function Ctrl()
{
  return Boolean(oSys.Call("User32::GetKeyState", 0x11 /*VK_CONTROL*/) & 0x8000);
}

function Alt()
{
  return Boolean(oSys.Call("User32::GetKeyState", 0x12 /*VK_MENU*/) & 0x8000);
}

function SetWndFontAndText(hWnd, hFont, sText)
{
  if (hFont)
    AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, true);

  AkelPad.MemCopy(lpBuffer, sText.substr(0, nBufSize - 1).replace(/\r$/, ""), DT_UNICODE);
  oSys.Call("User32::SetWindowTextW", hWnd, lpBuffer);
}

function GetWindowPos(hWnd, oRect)
{
  var lpRect = AkelPad.MemAlloc(16) //sizeof(RECT);

  oSys.Call("User32::GetWindowRect", hWnd, lpRect);

  oRect.X = AkelPad.MemRead(lpRect,      DT_DWORD);
  oRect.Y = AkelPad.MemRead(lpRect +  4, DT_DWORD);
  oRect.W = AkelPad.MemRead(lpRect +  8, DT_DWORD) - oRect.X;
  oRect.H = AkelPad.MemRead(lpRect + 12, DT_DWORD) - oRect.Y;

  AkelPad.MemFree(lpRect);
}

function ResizeWindow(hWnd)
{
  var oRect = {};

  GetWindowPos(hWnd, oRect);

  for (i = IDFROMLANG; i <= IDLISTEN2; ++i)
    oSys.Call("User32::SetWindowPos", aWnd[i][WND], 0,
                                      aWnd[i][WNDX] + (oRect.W - oWndMin.W) / 2,
                                      aWnd[i][WNDY],
                                      0,
                                      0,
                                      0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
  for (i = IDOPAQMINUS; i <= IDOPTIONS; ++i)
    oSys.Call("User32::SetWindowPos", aWnd[i][WND], 0,
                                      aWnd[i][WNDX] + oRect.W - oWndMin.W,
                                      aWnd[i][WNDY],
                                      0,
                                      0,
                                      0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
  oSys.Call("User32::SetWindowPos", aWnd[IDTXTSOURCE][WND], 0,
                                    0,
                                    0,
                                    aWnd[IDTXTSOURCE][WNDW] + (oRect.W - oWndMin.W) / 2,
                                    aWnd[IDTXTSOURCE][WNDH] + oRect.H - oWndMin.H,
                                    0x16 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOMOVE*/);
  if (bSourceWnd)
    oSys.Call("User32::SetWindowPos", aWnd[IDTXTTARGET][WND], 0,
                                      aWnd[IDTXTTARGET][WNDX] + (oRect.W - oWndMin.W) / 2,
                                      aWnd[IDTXTTARGET][WNDY],
                                      aWnd[IDTXTTARGET][WNDW] + (oRect.W - oWndMin.W) / 2,
                                      aWnd[IDTXTTARGET][WNDH] + oRect.H - oWndMin.H,
                                      0x14 /*SWP_NOZORDER|SWP_NOACTIVATE*/);
  else
    oSys.Call("User32::SetWindowPos", aWnd[IDTXTTARGET][WND], 0,
                                      aWnd[IDTXTTARGET][WNDX],
                                      aWnd[IDTXTTARGET][WNDY],
                                      aWnd[IDTXTTARGET][WNDW] + oRect.W - oWndMin.W,
                                      aWnd[IDTXTTARGET][WNDH] + oRect.H - oWndMin.H,
                                      0x14 /*SWP_NOZORDER|SWP_NOACTIVATE*/);
}

function PaintSizeGrip(hWnd)
{
  var lpPaint = AkelPad.MemAlloc(64); //sizeof(PAINTSTRUCT)
  var lpRect  = AkelPad.MemAlloc(16); //sizeof(RECT)
  var hDC;

  if (hDC = oSys.Call("User32::BeginPaint", hWnd, lpPaint))
  {
    oSys.Call("User32::GetClientRect", hWnd, lpRect);

    AkelPad.MemCopy(lpRect,     AkelPad.MemRead(lpRect +  8, DT_DWORD) - oSys.Call("User32::GetSystemMetrics",  2 /*SM_CXVSCROLL*/), DT_DWORD);
    AkelPad.MemCopy(lpRect + 4, AkelPad.MemRead(lpRect + 12, DT_DWORD) - oSys.Call("User32::GetSystemMetrics", 20 /*SM_CYVSCROLL*/), DT_DWORD);

    oSys.Call("User32::DrawFrameControl", hDC, lpRect, 3 /*DFC_SCROLL*/, 0x8 /*DFCS_SCROLLSIZEGRIP*/);
    oSys.Call("User32::EndPaint", hWnd, lpPaint);
  }

  AkelPad.MemFree(lpPaint);
  AkelPad.MemFree(lpRect);
}

function FillComboLangs(nFromLang, nToLang)
{
  var nPos;
  var i;

  AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_RESETCONTENT, 0, 0);
  AkelPad.SendMessage(aWnd[IDTOLANGCB  ][WND], CB_RESETCONTENT, 0, 0);

  if (aAPIs[oSelect.API].AutoDetect)
  {
    AkelPad.MemCopy(lpBuffer, "   " + sTxtAutoDetect, DT_UNICODE);
    nPos = AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_ADDSTRING, 0, lpBuffer);
    AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_SETITEMDATA, nPos, -1);
  }

  for (i = 0; i < aLangs.length; ++i)
  {
    if (aLangs[i][oSelect.API + 2])
    {
      if (bSortCode) //sort by code
        AkelPad.MemCopy(lpBuffer, aLangs[i][0] + " - "  + aLangs[i][1], DT_UNICODE);
      else //sort by name
        AkelPad.MemCopy(lpBuffer, aLangs[i][1] + " - "  + aLangs[i][0], DT_UNICODE);

      nPos = AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_ADDSTRING, 0, lpBuffer);
      AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_SETITEMDATA, nPos, i);

      nPos = AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_ADDSTRING, 0, lpBuffer);
      AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_SETITEMDATA, nPos, i);
    }
  }

  if ((typeof nFromLang == "undefined") && (typeof nToLang == "undefined"))
  {
    if (WScript.Arguments.length > 0)
    {
      if (WScript.Arguments(0).toLowerCase() == "auto")
      {
        if (aAPIs[oSelect.API].AutoDetect)
          oSelect.FromLang = 0;
      }
      else
      {
        for (i = aAPIs[oSelect.API].AutoDetect; i < AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETCOUNT, 0, 0); ++i)
        {
          if (WScript.Arguments(0) == aLangs[AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETITEMDATA, i, 0)][0])
          {
            oSelect.FromLang = i;
            break;
          }
        }
      }

      if (WScript.Arguments.length > 1)
      {
        for (i = 0; i < AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_GETCOUNT, 0, 0); ++i)
        {
          if (WScript.Arguments(1) == aLangs[AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_GETITEMDATA, i, 0)][0])
          {
            oSelect.ToLang = i;
            break;
          }
        }
      }
    }
  }
  else
  {
    if (typeof nFromLang != "undefined")
    {
      oSelect.FromLang = 0;
      for (i = 0; i < AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETCOUNT, 0, 0); ++i)
      {
        if (nFromLang == AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETITEMDATA, i, 0))
        {
          oSelect.FromLang = i;
          break;
        }
      }
    }

    if (typeof nToLang != "undefined")
    {
      oSelect.ToLang = 0;
      for (i = 0; i < AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_GETCOUNT, 0, 0); ++i)
      {
        if (nToLang == AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_GETITEMDATA, i, 0))
        {
          oSelect.ToLang = i;
          break;
        }
      }
    }
  }

  AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_SETCURSEL, oSelect.FromLang, 0);
  AkelPad.SendMessage(aWnd[IDTOLANGCB  ][WND], CB_SETCURSEL, oSelect.ToLang,   0);
}

function SwitchLang(bSwitchText)
{
  var nFromLang = AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETITEMDATA, oSelect.FromLang, 0);
  var nToLang   = AkelPad.SendMessage(aWnd[IDTOLANGCB  ][WND], CB_GETITEMDATA, oSelect.ToLang,   0);
  var nSelTarget;
  var nSelSource;
  var i;

  for (i = 0; i < AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETCOUNT, 0, 0); ++i)
  {
    if (nToLang == AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETITEMDATA, i, 0))
    {
      oSelect.FromLang = i;
      break;
    }
  }

  if (nFromLang == -1) //Auto detect
  {
    oSelect.ToLang = 0;
    if (nDetectLang >= 0)
    {
      for (i = 0; i < AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_GETCOUNT, 0, 0); ++i)
      {
        if (nDetectLang == AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_GETITEMDATA, i, 0))
        {
          oSelect.ToLang = i;
          break;
        }
      }
    }
  }
  else
  {
    for (i = 0; i < AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_GETCOUNT, 0, 0); ++i)
    {
      if (nFromLang == AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_GETITEMDATA, i, 0))
      {
        oSelect.ToLang = i;
        break;
      }
    }
  }

  AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_SETCURSEL, oSelect.FromLang, 0);
  AkelPad.SendMessage(aWnd[IDTOLANGCB  ][WND], CB_SETCURSEL, oSelect.ToLang,   0);

  ShowDetectLang(false);

  if (bSwitchText)
  {
    oSys.Call("User32::GetWindowTextW", aWnd[IDTXTSOURCE][WND], lpBuffer, nBufSize);
    sTarget = AkelPad.MemRead(lpBuffer, DT_UNICODE);
    oSys.Call("User32::GetWindowTextW", aWnd[IDTXTTARGET][WND], lpBuffer, nBufSize);
    sSource = AkelPad.MemRead(lpBuffer, DT_UNICODE).substr(0, aAPIs[oSelect.API].TextLen);

    nSelTarget = AkelPad.SendMessage(aWnd[IDTXTSOURCE][WND], 0x00B0 /*EM_GETSEL*/, 0, 0);
    nSelSource = AkelPad.SendMessage(aWnd[IDTXTTARGET][WND], 0x00B0 /*EM_GETSEL*/, 0, 0);

    SetWndFontAndText(aWnd[IDTXTSOURCE][WND], 0, sSource);
    SetWndFontAndText(aWnd[IDTXTTARGET][WND], 0, sTarget);

    AkelPad.SendMessage(aWnd[IDTXTSOURCE][WND], 0x00B1 /*EM_SETSEL*/, LoWord(nSelSource), HiWord(nSelSource));
    AkelPad.SendMessage(aWnd[IDTXTTARGET][WND], 0x00B1 /*EM_SETSEL*/, LoWord(nSelTarget), HiWord(nSelTarget));
  }
}

function ShowDetectLang(bShow)
{
 if (bShow)
  {
    if (nDetectLang >= 0)
      SetWndFontAndText(aWnd[IDDETECTLANG][WND], 0, sTxtAutoDetect + ": " + aLangs[nDetectLang][1]);
  }
  else
  {
    nDetectLang = -1;
    SetWndFontAndText(aWnd[IDDETECTLANG][WND], 0, "");
  }
}

function SetEditWordWrap()
{
  AkelPad.SendMessage(aWnd[IDTXTSOURCE][WND], 0x0CAA /*AEM_SETWORDWRAP*/, bWordWrap ? 1 /*AEWW_WORD*/ : 0 /*AEWW_NONE*/, 0);
  AkelPad.SendMessage(aWnd[IDTXTTARGET][WND], 0x0CAA /*AEM_SETWORDWRAP*/, bWordWrap ? 1 /*AEWW_WORD*/ : 0 /*AEWW_NONE*/, 0);
}

function SetEditFont()
{
  var hFont;

  if (hEditWnd && bFontAP)
    hFont = AkelPad.SendMessage(hEditWnd, 49 /*WM_GETFONT*/, 0, 0);
  else if (bFontGUI)
    hFont = hGuiFont;
  else
    hFont = ConvertFontFormat(aFont, 3, 2);

  AkelPad.SendMessage(aWnd[IDTXTSOURCE][WND], 48 /*WM_SETFONT*/, hFont, 1);
  AkelPad.SendMessage(aWnd[IDTXTTARGET][WND], 48 /*WM_SETFONT*/, hFont, 1);
}

function SetEditStyle(hWnd1, hWnd2)
{
  AkelPad.SendMessage(hWndDlg, 11 /*WM_SETREDRAW*/, 0, 0);

  oSys.Call("User32::SetWindowLongW", hWnd1, -20 /*GWL_EXSTYLE*/, 0);
  oSys.Call("User32::SetWindowLongW", hWnd1, -16 /*GWL_STYLE*/, 0x50B11104);
  oSys.Call("User32::SetWindowPos", hWnd1, 0, 0, 0, 0, 0, 0x37 /*SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE*/);

  if (bSourceWnd)
  {
    oSys.Call("User32::SetWindowLongW", hWnd2, -20 /*GWL_EXSTYLE*/, 0x20000 /*WS_EX_STATICEDGE*/);
    oSys.Call("User32::SetWindowLongW", hWnd2, -16 /*GWL_STYLE*/, 0x50311104);
    oSys.Call("User32::SetWindowPos", hWnd2, 0, 0, 0, 0, 0, 0x37 /*SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE*/);
  }

  AkelPad.SendMessage(hWndDlg, 11 /*WM_SETREDRAW*/, 1, 0);

  oSys.Call("User32::InvalidateRect", hWndDlg, 0, 0);
}

function ShowSourceWindow()
{
  if (bSourceWnd)
  {
    aWnd[IDTXTTARGET][WNDX] = aWnd[IDTXTTARGET][WNDX] + aWnd[IDTXTTARGET][WNDW] - aWnd[IDTXTSOURCE][WNDW];
    aWnd[IDTXTTARGET][WNDW] = aWnd[IDTXTSOURCE][WNDW];
    hFocus = aWnd[IDTXTSOURCE][WND];
  }
  else
  {
    aWnd[IDTXTTARGET][WNDW] = aWnd[IDTXTTARGET][WNDX] + aWnd[IDTXTTARGET][WNDW] - aWnd[IDTXTSOURCE][WNDX];
    aWnd[IDTXTTARGET][WNDX] = aWnd[IDTXTSOURCE][WNDX];
    hFocus = aWnd[IDTXTTARGET][WND];
  }

  oSys.Call("User32::ShowWindow", aWnd[IDSWITCHALL][WND], bSourceWnd);
  oSys.Call("User32::ShowWindow", aWnd[IDLISTEN1  ][WND], bSourceWnd);
  oSys.Call("User32::ShowWindow", aWnd[IDTXTSOURCE][WND], bSourceWnd);
  oSys.Call("User32::SetFocus", hFocus);
  ResizeWindow(hWndDlg)
}

function SetOpaqueLevel(hWnd, nLevel)
{
  var lpBuf;
  var nStyle;

  if (nLevel < 0)
  {
    lpBuf = AkelPad.MemAlloc(1);
    if (oSys.Call("User32::GetLayeredWindowAttributes", hWnd, 0, lpBuf, 0))
      nOpaque = AkelPad.MemRead(lpBuf, DT_BYTE);
    else
      nOpaque = 255;
    nOpaque += (nLevel == -1) ? 20 : -20;
    AkelPad.MemFree(lpBuf);
  }

  if (nOpaque > 255)
    nOpaque = 255;
  else if (nOpaque < 55)
    nOpaque = 55;

  //WS_EX_LAYERED style
  nStyle = oSys.Call("User32::GetWindowLongW", hWnd, -20 /*GWL_EXSTYLE*/);

  if (! (nStyle & 0x00080000 /*WS_EX_LAYERED*/))
  {
    nStyle |= 0x00080000 /*WS_EX_LAYERED*/;
    oSys.Call("User32::SetWindowLongW", hWnd, -20 /*GWL_EXSTYLE*/, nStyle);
  }

  oSys.Call("User32::SetLayeredWindowAttributes", hWnd, 0, nOpaque, 2 /*LWA_ALPHA*/);
}

function InsertTextToAP(hWnd, bEntireText)
{
  if (hEditWnd)
  {
    var nTextLen;

    if (bEntireText)
      nTextLen = oSys.Call("User32::GetWindowTextW", hWnd, lpBuffer, nBufSize);
    else
      nTextLen = AkelPad.SendMessage(hWnd, 0x043E /*EM_GETSELTEXT*/, 0, lpBuffer);

    if (nTextLen)
      AkelPad.ReplaceSel(AkelPad.MemRead(lpBuffer, DT_UNICODE), 1);
  }
}

function PasteTextFromAP(hWnd, bEntireText)
{
  if (hEditWnd && (AkelPad.GetSelStart() != AkelPad.GetSelEnd()))
  {
    AkelPad.MemCopy(lpBuffer, AkelPad.GetSelText(3 /*"\r\n"*/).substr(0, nBufSize - 1).replace(/\r$/, ""), DT_UNICODE);

    if (bEntireText)
      AkelPad.SendMessage(hWnd, 0x00B1 /*EM_SETSEL*/, 0, -1);

    AkelPad.SendMessage(hWnd, 0x00C2 /*EM_REPLACESEL*/, 1, lpBuffer);
  }
}

function CopyEntireTextToCB(hWnd)
{
  if (oSys.Call("User32::GetWindowTextW", hWnd, lpBuffer, nBufSize))
    AkelPad.SetClipboardText(AkelPad.MemRead(lpBuffer, DT_UNICODE));
}

function PasteEntireTextFromCB(hWnd)
{
  if (AkelPad.GetClipboardText())
  {
    AkelPad.SendMessage(hWnd, 0x00B1 /*EM_SETSEL*/, 0, -1);
    AkelPad.SendMessage(hWnd, 0x0302 /*WM_PASTE*/, 0, 0);
  }
}

function DeleteEntireText(hWnd)
{
  AkelPad.SendMessage(hWnd, 0x00B1 /*EM_SETSEL*/, 0, -1);
  AkelPad.SendMessage(hWnd, 0x0303 /*WM_CLEAR*/, 0, 0);
}


Last edited by KDJ on Fri May 03, 2013 11:55 am; edited 30 times in total
Back to top
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1081
Location: Poland

PostPosted: Wed May 25, 2011 6:40 pm    Post subject: Reply with quote

Translates text via Google, MS Bing and Yandex - Part Two.
In the next post are the files with the translated interface.

Translator_part2.js

Code:
function ContextMenu(hWnd, nPosParam)
{
  var MF_STRING    = 0x0;
  var MF_GRAYED    = 0x1;
  var MF_POPUP     = 0x10;
  var MF_SEPARATOR = 0x800;
  var hMenu  = oSys.Call("User32::CreatePopupMenu");
  var hMenu1 = oSys.Call("User32::CreatePopupMenu");
  var hMenu2 = oSys.Call("User32::CreatePopupMenu");
  var oRect;
  var lpPoint;
  var nPosX;
  var nPosY;
  var nWnd;
  var nCmd;

  //Sub menu source text (Entire text)
  oSys.Call("User32::AppendMenuW", hMenu1,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTSOURCE][WND]) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 21, sTxtCut + "\tAlt+X");
  oSys.Call("User32::AppendMenuW", hMenu1,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTSOURCE][WND]) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 22, sTxtCopyCB + "\tAlt+C");
  oSys.Call("User32::AppendMenuW", hMenu1,
            AkelPad.SendMessage(aWnd[IDTXTSOURCE][WND], 0x0432 /*EM_CANPASTE*/, 0, 0) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 23, sTxtPasteCB + "\tAlt+V");
  oSys.Call("User32::AppendMenuW", hMenu1,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTSOURCE][WND]) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 24, sTxtDelete + "\tAlt+Del");
  oSys.Call("User32::AppendMenuW", hMenu1, MF_SEPARATOR, 0, 0);
  oSys.Call("User32::AppendMenuW", hMenu1,
            (hEditWnd && oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTSOURCE][WND])) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 25, sTxtInsertAP + "\tShift+Alt+C");
  oSys.Call("User32::AppendMenuW", hMenu1,
            AkelPad.SendMessage(hEditWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 26, sTxtPasteAP + "\tShift+Alt+V");
  oSys.Call("User32::AppendMenuW", hMenu1, MF_SEPARATOR, 0, 0);
  oSys.Call("User32::AppendMenuW", hMenu1,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTSOURCE][WND]) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 27, sTxtListen + "\tCtrl+L");
  oSys.Call("User32::AppendMenuW", hMenu1, MF_SEPARATOR, 0, 0);
  oSys.Call("User32::AppendMenuW", hMenu1,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTSOURCE][WND]) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 28, sTxtTranslate + "\tCtrl+Enter");
  oSys.Call("User32::AppendMenuW", hMenu1,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTSOURCE][WND]) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 29, sTxtTranslateP + "\tAlt+Enter");

  //Sub menu target text (Entire text)
  oSys.Call("User32::AppendMenuW", hMenu2,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTTARGET][WND]) ? MF_STRING : MF_GRAYED,
            (2 << 8) | 21, sTxtCut + "\tAlt+X");
  oSys.Call("User32::AppendMenuW", hMenu2,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTTARGET][WND]) ? MF_STRING : MF_GRAYED,
            (2 << 8) | 22, sTxtCopyCB + "\tAlt+C");
  oSys.Call("User32::AppendMenuW", hMenu2,
            AkelPad.SendMessage(aWnd[IDTXTTARGET][WND], 0x0432 /*EM_CANPASTE*/, 0, 0) ? MF_STRING : MF_GRAYED,
            (2 << 8) | 23, sTxtPasteCB + "\tAlt+V");
  oSys.Call("User32::AppendMenuW", hMenu2,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTTARGET][WND]) ? MF_STRING : MF_GRAYED,
            (2 << 8) | 24, sTxtDelete + "\tAlt+Del");
  oSys.Call("User32::AppendMenuW", hMenu2, MF_SEPARATOR, 0, 0);
  oSys.Call("User32::AppendMenuW", hMenu2,
            (hEditWnd && oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTTARGET][WND])) ? MF_STRING : MF_GRAYED,
            (2 << 8) | 25, sTxtInsertAP + "\tShift+Alt+C");
  oSys.Call("User32::AppendMenuW", hMenu2,
            AkelPad.SendMessage(hEditWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
            (2 << 8) | 26, sTxtPasteAP + "\tShift+Alt+V");
  oSys.Call("User32::AppendMenuW", hMenu2, MF_SEPARATOR, 0, 0);
  oSys.Call("User32::AppendMenuW", hMenu2,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTTARGET][WND]) ? MF_STRING : MF_GRAYED,
            (2 << 8) | 27, sTxtListen + "\tCtrl+L");

  if (nPosParam == -2) //Context menu for button Options
  {
    oRect = new Object();
    GetWindowPos(hWnd, oRect);
    nPosX = oRect.X + oRect.W;
    nPosY = oRect.Y + oRect.H;

    if (bSourceWnd)
      oSys.Call("User32::AppendMenuW", hMenu, MF_POPUP, hMenu1, sTxtSource);

    oSys.Call("User32::AppendMenuW", hMenu, MF_POPUP, hMenu2, sTxtTarget);
    oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR, 0, 0);
    oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, (1 << 8) | 41, sTxtSettings + "\tAlt+S");
  }
  else
  {
    if (nPosParam == -1) //Context menu from keyboard
    {
      lpPoint = AkelPad.MemAlloc(8); //sizeof(POINT)
      oSys.Call("User32::GetCaretPos", lpPoint);
      oSys.Call("User32::ClientToScreen", hWnd, lpPoint);
      nPosX = AkelPad.MemRead(lpPoint,     DT_DWORD);
      nPosY = AkelPad.MemRead(lpPoint + 4, DT_DWORD) + AkelPad.SendMessage(hWnd, 3188 /*AEM_GETCHARSIZE*/, 0 /*AECS_HEIGHT*/, 0);
      AkelPad.MemFree(lpPoint);
    }
    else //Right click
    {
      nPosX = LoWord(nPosParam);
      nPosY = HiWord(nPosParam);
    }

    nWnd = (hWnd == aWnd[IDTXTSOURCE][WND]) ? 1 : 2;

    oSys.Call("User32::AppendMenuW", hMenu,
              AkelPad.SendMessage(hWnd, 0x00C6 /*EM_CANUNDO*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 1, sTxtUndo + "\tCtrl+Z");
    oSys.Call("User32::AppendMenuW", hMenu,
              AkelPad.SendMessage(hWnd, 0x0455 /*EM_CANREDO*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 2, sTxtRedo + "\tCtrl+Shift+Z");
    oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR, 0, 0);
    oSys.Call("User32::AppendMenuW", hMenu,
              AkelPad.SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 3, sTxtCut + "\tCtrl+X");
    oSys.Call("User32::AppendMenuW", hMenu,
              AkelPad.SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 4, sTxtCopyCB + "\tCtrl+C");
    oSys.Call("User32::AppendMenuW", hMenu,
              AkelPad.SendMessage(hWnd, 0x0432 /*EM_CANPASTE*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 5, sTxtPasteCB + "\tCtrl+V");
    oSys.Call("User32::AppendMenuW", hMenu,
              AkelPad.SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 6, sTxtDelete + "\tDel");
    oSys.Call("User32::AppendMenuW", hMenu,
              oSys.Call("User32::GetWindowTextLengthW", hWnd) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 7, sTxtSelectAll + "\tCtrl+A");
    oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR, 0, 0);
    oSys.Call("User32::AppendMenuW", hMenu,
              (hEditWnd && AkelPad.SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0)) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 8, sTxtInsertAP + "\tCtrl+Shift+C");
    oSys.Call("User32::AppendMenuW", hMenu,
              AkelPad.SendMessage(hEditWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 9, sTxtPasteAP + "\tCtrl+Shift+V");
    oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR, 0, 0);
    oSys.Call("User32::AppendMenuW", hMenu,
              AkelPad.SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 10, sTxtListen + "\tCtrl+Shift+L");
    if (nWnd == 1)
    {
      oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR, 0, 0);
      oSys.Call("User32::AppendMenuW", hMenu,
                AkelPad.SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
                (nWnd << 8) | 11, sTxtTranslate + "\tShift+Enter");
      oSys.Call("User32::AppendMenuW", hMenu,
                AkelPad.SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
                (nWnd << 8) | 12, sTxtTranslateP + "\tShift+Alt+Enter");
    }
    oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR, 0, 0);
    oSys.Call("User32::AppendMenuW", hMenu, MF_POPUP, (nWnd == 1) ? hMenu1 : hMenu2, sTxtEntireText);
  }

  nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, (nPosParam > -2)
                    ? 0x180 /*TPM_NONOTIFY|TPM_RETURNCMD*/
                    : 0x188 /*TPM_RIGHTALIGN|TPM_NONOTIFY|TPM_RETURNCMD*/,
                    nPosX, nPosY, 0, hWndDlg, 0);

  oSys.Call("User32::DestroyMenu", hMenu);
  oSys.Call("User32::DestroyMenu", hMenu1);
  oSys.Call("User32::DestroyMenu", hMenu2);

  nWnd = nCmd >> 8;
  nCmd = nCmd & 0xFF;
  hWnd = (nWnd == 1) ? aWnd[IDTXTSOURCE][WND] : aWnd[IDTXTTARGET][WND];

  //Selected text
  if (nCmd == 1)
    AkelPad.SendMessage(hWnd, 0x00C7 /*EM_UNDO*/, 0, 0);
  else if (nCmd == 2)
    AkelPad.SendMessage(hWnd, 0x0454 /*EM_REDO*/, 0, 0);
  else if (nCmd == 3)
    AkelPad.SendMessage(hWnd, 0x0300 /*WM_CUT*/, 0, 0);
  else if (nCmd == 4)
    AkelPad.SendMessage(hWnd, 0x0301 /*WM_COPY*/, 0, 0);
  else if (nCmd == 5)
    AkelPad.SendMessage(hWnd, 0x0302 /*WM_PASTE*/, 0, 0);
  else if (nCmd == 6)
    AkelPad.SendMessage(hWnd, 0x0303 /*WM_CLEAR*/, 0, 0);
  else if (nCmd == 7)
    AkelPad.SendMessage(hWnd, 0x00B1 /*EM_SETSEL*/, 0, -1);
  else if (nCmd == 8)
    InsertTextToAP(hWnd, 0);
  else if (nCmd == 9)
    PasteTextFromAP(hWnd, 0);
  else if (nCmd == 10)
    Listen(hWnd, 1);
  else if (nCmd == 11)
    Translate(1);
  else if (nCmd == 12)
    Translate(1, 1);

  //Entire text
  else if (nCmd == 21)
  {
    CopyEntireTextToCB(hWnd);
    DeleteEntireText(hWnd);
  }
  else if (nCmd == 22)
    CopyEntireTextToCB(hWnd);
  else if (nCmd == 23)
    PasteEntireTextFromCB(hWnd);
  else if (nCmd == 24)
    DeleteEntireText(hWnd);
  else if (nCmd == 25)
    InsertTextToAP(hWnd, 1);
  else if (nCmd == 26)
    PasteTextFromAP(hWnd, 1);
  else if (nCmd == 27)
    Listen(hWnd, 0);
  else if (nCmd == 28)
    Translate();
  else if (nCmd == 29)
    Translate(0, 1);

  //Settings
  else if (nCmd == 41)
    Settings();
}

function Settings()
{
  var oRect = {};
  var nW    = 440;
  var nH    = 350;
  var nX, nY;
  var hWndSet;

  GetWindowPos(hWndDlg, oRect);
  nX = oRect.X + (oRect.W - nW) / 2;
  nY = oRect.Y + (oRect.H - nH) / 2;

  hWndSet = oSys.Call("User32::CreateWindowExW",
                      0,            //dwExStyle
                      sClassName,   //lpClassName
                      sTxtSettings, //lpWindowName
                      0x90C80000,   //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU
                      nX,           //x
                      nY,           //y
                      nW,           //nWidth
                      nH,           //nHeight
                      hWndDlg,      //hWndParent
                      0,            //ID
                      hInstanceDLL, //hInstance
                      DialogCallbackSet); //lpParam

  if (hWndSet)
  {
    oSys.Call("User32::EnableWindow", hMainWnd, 0);
    oSys.Call("User32::EnableWindow", hWndDlg, 0);
  }
}

function DialogCallbackSet(hWnd, uMsg, wParam, lParam)
{
  var i;

  if (uMsg == 1) //WM_CREATE
  {
    for (i = 1100; i < aWndSet.length; ++i)
    {
      aWndSet[i][WND] = oSys.Call("User32::CreateWindowExW",
                                   0,                    //dwExStyle
                                   aWndSet[i][WNDCLASS], //lpClassName
                                   0,                    //lpWindowName
                                   aWndSet[i][WNDSTY],   //dwStyle
                                   aWndSet[i][WNDX],     //x
                                   aWndSet[i][WNDY],     //y
                                   aWndSet[i][WNDW],     //nWidth
                                   aWndSet[i][WNDH],     //nHeight
                                   hWnd,                 //hWndParent
                                   i,                    //ID
                                   hInstanceDLL,         //hInstance
                                   0);                   //lpParam
      SetWndFontAndText(aWndSet[i][WND], hGuiFont, aWndSet[i][WNDTXT]);
    }

    AkelPad.SendMessage(hWnd, 0x0080 /*WM_SETICON*/, 0 /*ICON_SMALL*/, hIcon);

    AkelPad.SendMessage(aWndSet[IDAPIKEY1][WND], 197 /*EM_SETLIMITTEXT*/, 128, 0);
    SetWndFontAndText(aWndSet[IDAPIKEY1][WND], 0, aAPIs[1].APIkeyP);

    FillComboInterface();

    //Check buttons
    AkelPad.SendMessage(aWndSet[IDSOURCEINCB][WND], 241 /*BM_SETCHECK*/, bSourceInCB || (! hEditWnd), 0);
    AkelPad.SendMessage(aWndSet[IDSOURCEWND ][WND], 241 /*BM_SETCHECK*/, bSourceWnd, 0);
    AkelPad.SendMessage(aWndSet[IDLOADTEXT  ][WND], 241 /*BM_SETCHECK*/, bLoadText,  0);
    AkelPad.SendMessage(aWndSet[IDIMMEDIATE ][WND], 241 /*BM_SETCHECK*/, bImmediate, 0);
    AkelPad.SendMessage(aWndSet[IDWORDWRAP  ][WND], 241 /*BM_SETCHECK*/, bWordWrap,  0);
    AkelPad.SendMessage(aWndSet[IDFONTAP    ][WND], 241 /*BM_SETCHECK*/, bFontAP && hEditWnd, 0);
    AkelPad.SendMessage(aWndSet[IDFONTGUI   ][WND], 241 /*BM_SETCHECK*/, bFontGUI,   0);
    AkelPad.SendMessage(aWndSet[IDSORTNAME - bSortCode][WND], 241 /*BM_SETCHECK*/, 1, 0);
    oSys.Call("User32::EnableWindow", aWndSet[IDSOURCEINCB][WND], hEditWnd);
    oSys.Call("User32::EnableWindow", aWndSet[IDLOADTEXT  ][WND], bSourceWnd);
    oSys.Call("User32::EnableWindow", aWndSet[IDIMMEDIATE ][WND], (! bSourceWnd) || (bSourceWnd && bLoadText));
    oSys.Call("User32::EnableWindow", aWndSet[IDFONTAP    ][WND], hEditWnd);
    oSys.Call("User32::EnableWindow", aWndSet[IDFONT      ][WND], ((! bFontAP) || (! hEditWnd)) && (! bFontGUI));

    hFocusSet = aWndSet[IDINTERFACECB][WND];
  }

  else if ((uMsg == 6 /*WM_ACTIVATE*/) && (! wParam))
    hFocusSet = oSys.Call("User32::GetFocus");

  else if (uMsg == 7) //WM_SETFOCUS
    oSys.Call("User32::SetFocus", hFocusSet);

  else if (uMsg == 256) //WM_KEYDOWN
  {
    if (bCloseCB)
    {
      if ((wParam == 13 /*VK_RETURN*/) && (oSys.Call("User32::GetFocus") != aWndSet[IDFONT][WND]))
        oSys.Call("User32::PostMessageW", hWnd, 273 /*WM_COMMAND*/, IDOK, 0);
      else if (wParam == 27 /*VK_ESCAPE*/)
        oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
  }

  else if (uMsg == 273) //WM_COMMAND
  {
    var nLowParam = LoWord(wParam);
    var nHiwParam = HiWord(wParam);
    bCloseCB = 1;

    if (nLowParam == IDINTERFACECB)
    {
      if (nHiwParam == CBN_CLOSEUP)
        bCloseCB = 0;
    }
    else if ((nLowParam == IDSOURCEWND) || (nLowParam == IDLOADTEXT))
    {
      oSys.Call("User32::EnableWindow", aWndSet[IDLOADTEXT][WND],
                AkelPad.SendMessage(aWndSet[IDSOURCEWND][WND], 240 /*BM_GETCHECK*/, 0, 0));
      oSys.Call("User32::EnableWindow", aWndSet[IDIMMEDIATE][WND],
                (! AkelPad.SendMessage(aWndSet[IDSOURCEWND][WND], 240 /*BM_GETCHECK*/, 0, 0)) ||
                (AkelPad.SendMessage(aWndSet[IDSOURCEWND][WND], 240 /*BM_GETCHECK*/, 0, 0) &&
                 AkelPad.SendMessage(aWndSet[IDLOADTEXT][WND], 240 /*BM_GETCHECK*/, 0, 0)));
    }
    else if (nLowParam == IDFONTAP)
    {
      if (AkelPad.SendMessage(aWndSet[IDFONTAP][WND], 240 /*BM_GETCHECK*/, 0, 0))
        AkelPad.SendMessage(aWndSet[IDFONTGUI][WND], 241 /*BM_SETCHECK*/, 0, 0);

      oSys.Call("User32::EnableWindow", aWndSet[IDFONT][WND],
                (! AkelPad.SendMessage(aWndSet[IDFONTAP][WND], 240 /*BM_GETCHECK*/, 0, 0)) &&
                (! AkelPad.SendMessage(aWndSet[IDFONTGUI][WND], 240 /*BM_GETCHECK*/, 0, 0)));
    }
    else if (nLowParam == IDFONTGUI)
    {
      if (AkelPad.SendMessage(aWndSet[IDFONTGUI][WND], 240 /*BM_GETCHECK*/, 0, 0) && hEditWnd)
        AkelPad.SendMessage(aWndSet[IDFONTAP][WND], 241 /*BM_SETCHECK*/, 0, 0);

      oSys.Call("User32::EnableWindow", aWndSet[IDFONT][WND],
                ((! AkelPad.SendMessage(aWndSet[IDFONTAP][WND], 240 /*BM_GETCHECK*/, 0, 0)) || (! hEditWnd)) &&
                 (! AkelPad.SendMessage(aWndSet[IDFONTGUI][WND], 240 /*BM_GETCHECK*/, 0, 0)));
    }
    else if (nLowParam == IDFONT)
    {
      var vCF;
      if (vCF = ChooseFont(hWnd, aFont))
      {
        aFont = vCF;
        oSys.Call("User32::SetWindowTextW", aWndSet[IDFONT][WND], aWndSet[IDFONT][WNDTXT] = aFont.toString());
      }
      oSys.Call("User32::SetFocus", aWndSet[IDFONT][WND]);
    }
    else if (nLowParam == IDOK)
    {
      //Change interface language
      var nCurSel   = AkelPad.SendMessage(aWndSet[IDINTERFACECB][WND], CB_GETCURSEL, 0, 0);
      var sLangName = "";
      if (AkelPad.SendMessage(aWndSet[IDINTERFACECB][WND], CB_GETITEMDATA, nCurSel, 0) != -1)
      {
        AkelPad.SendMessage(aWndSet[IDINTERFACECB][WND], 0x0148 /*CB_GETLBTEXT*/, nCurSel, lpBuffer);
        sLangName = AkelPad.MemRead(lpBuffer, DT_UNICODE);
      }
      if (sLangName.toUpperCase() != sLanguage.toUpperCase())
      {
        sLanguage = sLangName;
        ReadInterfaceLang();
        SetInterfaceLangToWndDef();
        SetWndFontAndText(hWndDlg, hGuiFont, sTxtCaption);
        for (i = IDUSE; i <= IDOPTIONS; ++i)
          SetWndFontAndText(aWnd[i][WND], hGuiFont, aWnd[i][WNDTXT]);

        ShowDetectLang(true);
      }

      if (hEditWnd)
      {
        bSourceInCB = AkelPad.SendMessage(aWndSet[IDSOURCEINCB][WND], 240 /*BM_GETCHECK*/, 0, 0);
        bFontAP     = AkelPad.SendMessage(aWndSet[IDFONTAP    ][WND], 240 /*BM_GETCHECK*/, 0, 0);
      }

      bSourceWnd = AkelPad.SendMessage(aWndSet[IDSOURCEWND][WND], 240 /*BM_GETCHECK*/, 0, 0);
      bLoadText  = AkelPad.SendMessage(aWndSet[IDLOADTEXT ][WND], 240 /*BM_GETCHECK*/, 0, 0);
      bImmediate = AkelPad.SendMessage(aWndSet[IDIMMEDIATE][WND], 240 /*BM_GETCHECK*/, 0, 0);
      bWordWrap  = AkelPad.SendMessage(aWndSet[IDWORDWRAP ][WND], 240 /*BM_GETCHECK*/, 0, 0);
      bFontGUI   = AkelPad.SendMessage(aWndSet[IDFONTGUI  ][WND], 240 /*BM_GETCHECK*/, 0, 0);
      bSortCode  = AkelPad.SendMessage(aWndSet[IDSORTCODE ][WND], 240 /*BM_GETCHECK*/, 0, 0);

      SetEditWordWrap();
      SetEditFont();
      ShowSourceWindow();
      FillComboLangs(AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETITEMDATA, oSelect.FromLang, 0),
                     AkelPad.SendMessage(aWnd[IDTOLANGCB  ][WND], CB_GETITEMDATA, oSelect.ToLang,   0));

      oSys.Call("User32::GetWindowTextW", aWndSet[IDAPIKEY1][WND], lpBuffer, nBufSize);
      aAPIs[1].APIkeyP = AkelPad.MemRead(lpBuffer, DT_UNICODE);

      oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
    else if (nLowParam == IDCANCEL)
      oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
  }

  else if (uMsg == 16) //WM_CLOSE
  {
    oSys.Call("User32::EnableWindow", hMainWnd, 1);
    oSys.Call("User32::EnableWindow", hWndDlg, 1);
    oSys.Call("User32::DestroyWindow", hWnd);
  }

  return 0;
}

function FillComboInterface()
{
  var sScriptName = WScript.ScriptName.substring(0, WScript.ScriptName.lastIndexOf(".")) + "_";
  var sTemplate   = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + "_*.lng";
  var hFindFile   = oSys.Call("kernel32::FindFirstFileW", sTemplate, lpBuffer);
  var sLangFile;
  var sLangName;
  var nPos;

  AkelPad.MemCopy(lpBuffer, "English (built-in)", DT_UNICODE);
  nPos = AkelPad.SendMessage(aWndSet[IDINTERFACECB][WND], CB_ADDSTRING, 0, lpBuffer);
  AkelPad.SendMessage(aWndSet[IDINTERFACECB][WND], CB_SETITEMDATA, nPos, -1);
  AkelPad.SendMessage(aWndSet[IDINTERFACECB][WND], CB_SETCURSEL, nPos, 0);

  if (hFindFile != -1) //INVALID_HANDLE_VALUE
  {
    do
    {
      sLangFile = AkelPad.MemRead(lpBuffer + 44 /*offsetof(WIN32_FIND_DATAW, cFileName)*/, DT_UNICODE);
      sLangName = sLangFile.substring(sScriptName.length, sLangFile.lastIndexOf("."));

      if (sLangName)
      {
        AkelPad.MemCopy(lpBuffer, sLangName, DT_UNICODE);
        nPos = AkelPad.SendMessage(aWndSet[IDINTERFACECB][WND], CB_ADDSTRING, 0, lpBuffer);

        if (sLangName.toUpperCase() == sLanguage.toUpperCase())
          AkelPad.SendMessage(aWndSet[IDINTERFACECB][WND], CB_SETCURSEL, nPos, 0);
      }
    }
    while(oSys.Call("kernel32::FindNextFileW", hFindFile, lpBuffer));
  }
  oSys.Call("kernel32::FindClose", hFindFile);
}

function ChooseFont(hWndOwn, aFontIni)
{
  var nCFSize    = 60; //sizeof(CHOOSEFONT)
  var lpCF       = AkelPad.MemAlloc(nCFSize);
  var lpLF       = ConvertFontFormat(aFontIni, 3, 1);
  var lpCallback = oSys.RegisterCallback(0, CFHookProcCallback, 4);
  var vResult    = 0;

  AkelPad.MemCopy(lpCF     ,    nCFSize, DT_DWORD); //lStructSize
  AkelPad.MemCopy(lpCF +  4,    hWndOwn, DT_DWORD); //hwndOwner
  AkelPad.MemCopy(lpCF + 12,       lpLF, DT_DWORD); //lpLogFont
  AkelPad.MemCopy(lpCF + 20, 0x00010049, DT_DWORD); //Flags=CF_ENABLEHOOK|CF_FORCEFONTEXIST|CF_INITTOLOGFONTSTRUCT|CF_SCREENFONTS
  AkelPad.MemCopy(lpCF + 32, lpCallback, DT_DWORD); //lpfnHook

  if (oSys.Call("Comdlg32::ChooseFontW", lpCF))
    vResult = ConvertFontFormat(lpLF, 1, 3);

  oSys.UnregisterCallback(lpCallback);
  AkelPad.MemFree(lpCF);
  AkelPad.MemFree(lpLF);

  return vResult;
}

function CFHookProcCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 272 /*WM_INITDIALOG*/)
  {
    var hWndOwn   = AkelPad.MemRead(lParam + 4, DT_DWORD);
    var oRectWnd  = {};
    var oRectOwn  = {};
    var oRectDesk = {};

    //center dialog
    GetWindowPos(hWnd, oRectWnd);
    GetWindowPos(hWndOwn, oRectOwn);
    GetWindowPos(oSys.Call("User32::GetDesktopWindow"), oRectDesk);

    oRectWnd.X = oRectOwn.X + (oRectOwn.W - oRectWnd.W) / 2;
    oRectWnd.Y = oRectOwn.Y + (oRectOwn.H - oRectWnd.H) / 2;

    if ((oRectWnd.X + oRectWnd.W) > oRectDesk.W)
      oRectWnd.X = oRectDesk.W - oRectWnd.W;
    if (oRectWnd.X < 0)
      oRectWnd.X = 0;
    if ((oRectWnd.Y + oRectWnd.H) > oRectDesk.H)
      oRectWnd.Y = oRectDesk.H - oRectWnd.H;
    if (oRectWnd.Y < 0)
      oRectWnd.Y = 0;

    oSys.Call("User32::MoveWindow", hWnd, oRectWnd.X, oRectWnd.Y, oRectWnd.W, oRectWnd.H, 0);
  }

  return 0;
}

//---------------------------------------------------
// vFont - pointer to LOGFONTW, font handle, or array
// nInType - vFont type,
// nRetType - vResult type:
//   1 - pointer to LOGFONTW structure
//   2 - handle to font
//   3 - array [sFontName, nFontStyle, nFontSize]
//---------------------------------------------------
function ConvertFontFormat(vFont, nInType, nRetType)
{
  var nLFSize = 28 + 32 * 2; //sizeof(LOGFONTW)
  var lpLF    = AkelPad.MemAlloc(nLFSize);
  var hFont;
  var hDC;
  var nHeight;
  var nWeight;
  var bItalic;
  var vRetVal;
  var i;

  if (nInType == 1)
  {
    for (i = 0; i < nLFSize; ++i)
      AkelPad.MemCopy(lpLF + i, AkelPad.MemRead(vFont + i, DT_BYTE), DT_BYTE);
  }
  else if (nInType == 2)
  {
    if (! vFont)
      vFont = oSys.Call("Gdi32::GetStockObject", 13 /*SYSTEM_FONT*/);

    oSys.Call("Gdi32::GetObjectW", vFont, nLFSize, lpLF);
  }
  else if (nInType == 3)
  {
    hDC     = oSys.Call("User32::GetDC", hMainWnd);
    nHeight = -oSys.Call("Kernel32::MulDiv", vFont[2], oSys.Call("Gdi32::GetDeviceCaps", hDC, 90 /*LOGPIXELSY*/), 72);
    oSys.Call("User32::ReleaseDC", hMainWnd, hDC);

    nWeight = 400;
    bItalic = 0;
    if ((vFont[1] == 2) || (vFont[1] == 4))
      nWeight = 700;
    if (vFont[1] > 2)
      bItalic = 1;

    AkelPad.MemCopy(lpLF     , nHeight,  DT_DWORD); //lfHeight
    AkelPad.MemCopy(lpLF + 16, nWeight,  DT_DWORD); //lfWeight
    AkelPad.MemCopy(lpLF + 20, bItalic,  DT_BYTE);  //lfItalic
    AkelPad.MemCopy(lpLF + 28, vFont[0], DT_UNICODE); //lfFaceName
  }

  if (nRetType == 1)
    vRetVal = lpLF;
  else if (nRetType == 2)
  {
    vRetVal = oSys.Call("Gdi32::CreateFontIndirectW", lpLF);
    AkelPad.MemFree(lpLF);
  }
  else if (nRetType == 3)
  {
    vRetVal    = [];
    vRetVal[0] = AkelPad.MemRead(lpLF + 28, DT_UNICODE); //lfFaceName

    nWeight = AkelPad.MemRead(lpLF + 16, DT_DWORD); //lfWeight
    bItalic = AkelPad.MemRead(lpLF + 20, DT_BYTE);  //lfItalic

    if (nWeight < 600)
      vRetVal[1] = 1;
    else
      vRetVal[1] = 2;

    if (bItalic)
      vRetVal[1] += 2;

    hDC        = oSys.Call("User32::GetDC", hMainWnd);
    nHeight    = AkelPad.MemRead(lpLF, DT_DWORD); //lfHeight
    vRetVal[2] = -oSys.Call("Kernel32::MulDiv", nHeight, 72, oSys.Call("Gdi32::GetDeviceCaps", hDC, 90 /*LOGPIXELSY*/));
    oSys.Call("User32::ReleaseDC", hMainWnd, hDC);
    AkelPad.MemFree(lpLF);
  }

  return vRetVal;
}

function GetAkelPadObject()
{
  if (typeof AkelPad == "undefined")
  {
    var oError;

    try
    {
      AkelPad = new ActiveXObject("AkelPad.Document");
    }
    catch (oError)
    {
      WScript.Echo(sTxtRegScripts);
      WScript.Quit();
    }
  }
}

function ReadIniFile()
{
  var oFile;
  var oError;

  if (oFSO.FileExists(sIniFile))
  {
    oFile = oFSO.OpenTextFile(sIniFile, 1, false, -1);
    try
    {
      eval(oFile.ReadAll());
    }
    catch (oError)
    {
    }
    oFile.Close();
  }
}

function WriteIniFile()
{
  var oFile = oFSO.OpenTextFile(sIniFile, 2, true, -1);
  var sIniTxt;
  var i;

  oWndPos.Max = oSys.Call("User32::IsZoomed", hWndDlg);
  oSys.Call("User32::GetWindowTextW", aWnd[IDTXTSOURCE][WND], lpBuffer, nBufSize);
  sSource = AkelPad.MemRead(lpBuffer, DT_UNICODE).replace(/[\\"]/g, "\\$&").replace(/\r/g, "\\r").replace(/\n/g, "\\n");
  oSys.Call("User32::GetWindowTextW", aWnd[IDTXTTARGET][WND], lpBuffer, nBufSize);
  sTarget = AkelPad.MemRead(lpBuffer, DT_UNICODE).replace(/[\\"]/g, "\\$&").replace(/\r/g, "\\r").replace(/\n/g, "\\n");

  sIniTxt = 'nOpaque='     + nOpaque     + ';\r\n'  +
            'bSourceInCB=' + bSourceInCB + ';\r\n'  +
            'bSourceWnd='  + bSourceWnd  + ';\r\n'  +
            'bLoadText='   + bLoadText   + ';\r\n'  +
            'bImmediate='  + bImmediate  + ';\r\n'  +
            'bWordWrap='   + bWordWrap   + ';\r\n'  +
            'bFontAP='     + bFontAP     + ';\r\n'  +
            'bFontGUI='    + bFontGUI    + ';\r\n'  +
            'aFont=["'     + aFont[0] + '",' + aFont[1] + ',' + aFont[2] + '];\r\n' +
            'bSortCode='   + bSortCode   + ';\r\n'  +
            'nDetectLang=' + nDetectLang + ';\r\n'  +
            'sSource="'    + sSource     + '";\r\n' +
            'sTarget="'    + sTarget     + '";\r\n' +
            'sLanguage="'  + sLanguage   + '";\r\n';

  for (i = 0; i < aAPIs.length; ++i)
    sIniTxt += 'aAPIs[' + i + '].APIkeyP="' + aAPIs[i].APIkeyP + '";\r\n';

  for (i in oSelect)
    sIniTxt += 'oSelect.' + i + '=' + oSelect[i] + ';\r\n';
  for (i in oWndPos)
    sIniTxt += 'oWndPos.' + i + '=' + oWndPos[i] + ';\r\n';

  oFile.Write(sIniTxt);
  oFile.Close();
}

function ReadInterfaceLang()
{
  if (sLanguage)
  {
    var sLangFile = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + "_" + sLanguage + ".lng";
    var oFile;
    var oError;

    if (oFSO.FileExists(sLangFile))
    {
      oFile = oFSO.OpenTextFile(sLangFile, 1, false, -2);

      try
      {
        eval(oFile.ReadAll());
      }
      catch (oError)
      {
        BuiltInLang();
      }

      oFile.Close();
    }
    else
      BuiltInLang();
  }
  else
    BuiltInLang();
}

function BuiltInLang()
{
  sTxtCaption    = "Translator";
  sTxtUse        = "Use";
  sTxtFromLang   = "From language";
  sTxtToLang     = "To language";
  sTxtAutoDetect = "Auto detect language";
  sTxtListen     = "Listen";
  sTxtTranslate  = "&Translate";
  sTxtTranslateP = "Translate+";
  sTxtOptions    = "&Options";
  sTxtSource     = "Source text";
  sTxtTarget     = "Translated text";
  sTxtSettings   = "Settings";
  sTxtUndo       = "&Undo";
  sTxtRedo       = "&Redo";
  sTxtCut        = "&Cut";
  sTxtCopyCB     = "C&opy to clipboard";
  sTxtInsertAP   = "&Insert to AkelPad";
  sTxtPasteCB    = "&Paste from clipboard";
  sTxtPasteAP    = "Pa&ste from AkelPad";
  sTxtDelete     = "&Delete";
  sTxtSelectAll  = "Select &all";
  sTxtEntireText = "&Entire text";
  sTxtInterface  = "Interface language";
  sTxtSourceInCB = "Source text from Clipboard";
  sTxtSourceWnd  = "Show panel with source text";
  sTxtLoadText   = "Load source text to panel at start";
  sTxtImmediate  = "Start immediately translate";
  sTxtWordWrap   = "Wrap lines";
  sTxtFontAP     = "Font from AkelPad";
  sTxtFontGUI    = "GUI font";
  sTxtSortLang   = "Languages sort";
  sTxtSortCode   = "By code";
  sTxtSortName   = "By name";
  sTxtOwnKey     = "own key";
  sTxtRegister   = "Registration:";
  sTxtOK         = "OK";
  sTxtCancel     = "Cancel";
  sTxtError      = "Error";
  sTxtNoText     = "There is no text to translate.";
  sTxtNoSupport  = "Your system does not support XMLHttpRequest.";
  sTxtNoInternet = "There was a problem with internet connection.";
  sTxtWait       = "Wait...";
  sTxtUndefined  = "Undefined";
  sTxtChooseLang = "You need to choose the language.";
  sTxtNoSpeech   = "No support for speech in this language.";
  sTxtRegScripts = "You must register library: Scripts.dll";
  sTxtNoLibrary  = "Can not load library: ";

  aLangs[ 0][1] = "Afrikaans";
  aLangs[ 1][1] = "Arabic";
  aLangs[ 2][1] = "Belarusian";
  aLangs[ 3][1] = "Bulgarian";
  aLangs[ 4][1] = "Catalan";
  aLangs[ 5][1] = "Czech";
  aLangs[ 6][1] = "Welsh";
  aLangs[ 7][1] = "Danish";
  aLangs[ 8][1] = "German";
  aLangs[ 9][1] = "Greek";
  aLangs[10][1] = "English";
  aLangs[11][1] = "Esperanto";
  aLangs[12][1] = "Spanish";
  aLangs[13][1] = "Estonian";
  aLangs[14][1] = "Persian";
  aLangs[15][1] = "Finnish";
  aLangs[16][1] = "French";
  aLangs[17][1] = "Irish";
  aLangs[18][1] = "Galician";
  aLangs[19][1] = "Hindi";
  aLangs[20][1] = "Croatian";
  aLangs[21][1] = "Haitian Creole";
  aLangs[22][1] = "Hungarian";
  aLangs[23][1] = "Indonesian";
  aLangs[24][1] = "Icelandic";
  aLangs[25][1] = "Italian";
  aLangs[26][1] = "Hebrew";
  aLangs[27][1] = "Japanese";
  aLangs[28][1] = "Korean";
  aLangs[29][1] = "Latin";
  aLangs[30][1] = "Lithuanian";
  aLangs[31][1] = "Latvian";
  aLangs[32][1] = "Macedonian";
  aLangs[33][1] = "Malay";
  aLangs[34][1] = "Maltese";
  aLangs[35][1] = "Dutch";
  aLangs[36][1] = "Norwegian";
  aLangs[37][1] = "Polish";
  aLangs[38][1] = "Portuguese";
  aLangs[39][1] = "Romanian";
  aLangs[40][1] = "Russian";
  aLangs[41][1] = "Slovak";
  aLangs[42][1] = "Slovenian";
  aLangs[43][1] = "Albanian";
  aLangs[44][1] = "Serbian";
  aLangs[45][1] = "Swedish";
  aLangs[46][1] = "Swahili";
  aLangs[47][1] = "Thai";
  aLangs[48][1] = "Filipino";
  aLangs[49][1] = "Turkish";
  aLangs[50][1] = "Ukrainian";
  aLangs[51][1] = "Urdu";
  aLangs[52][1] = "Vietnamese";
  aLangs[53][1] = "Yiddish";
  aLangs[54][1] = "Chinese";
  aLangs[55][1] = "Chinese Simplified";
  aLangs[56][1] = "Chinese Traditional";
}

function Translate(bSelection, bAddToTarget)
{
  var sMethod    = "POST";
  var sAPIkey    = aAPIs[oSelect.API].APIkeyP ? aAPIs[oSelect.API].APIkeyP : aAPIs[oSelect.API].APIkey;
  var nLang      = AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETITEMDATA, oSelect.FromLang, 0);
  var sFromLang  = (nLang < 0) ? "" : aLangs[nLang][0];
  var sToLang    = aLangs[AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_GETITEMDATA, oSelect.ToLang, 0)][0];
  var nTargetLen = oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTTARGET][WND])
  var nTargetSel = 0;
  var sLangName;
  var sURL;
  var sSend;
  var oRequest;
  var oResponse;
  var oError;
  var i, n;

  SetWndFontAndText(aWnd[IDDETECTLANG][WND], 0, sTxtWait);
  nDetectLang = -1;

  try
  {
    oRequest = new ActiveXObject("Microsoft.XMLHTTP");
  }
  catch (oError)
  {
    ErrorBox(sTxtNoSupport);
    return;
  }

  if (bSourceWnd)
  {
    if (bSelection && AkelPad.SendMessage(aWnd[IDTXTSOURCE][WND], 3125 /*AEM_GETSEL*/, 0, 0))
      AkelPad.SendMessage(aWnd[IDTXTSOURCE][WND], 1086 /*EM_GETSELTEXT*/, 0, lpBuffer);
    else
      oSys.Call("User32::GetWindowTextW", aWnd[IDTXTSOURCE][WND], lpBuffer, nBufSize);

    sSource = AkelPad.MemRead(lpBuffer, DT_UNICODE);
  }
  else
  {
    if (bSourceInCB || (! hEditWnd) || ((WScript.Arguments.length > 2) && (WScript.Arguments(2) == "1")))
      sSource = AkelPad.GetClipboardText().substr(0, aAPIs[oSelect.API].TextLen);
    else
      sSource = AkelPad.GetSelText(3 /*"\r\n"*/).substr(0, aAPIs[oSelect.API].TextLen);
  }

  sSource = sSource.replace(/^[ \t\r\n]+|[ \t\r\n]+$/, "");

  if (! sSource)
  {
    ErrorBox(sTxtNoText);
    return;
  }

  if (oSelect.API == 0) //Google
  {
    sURL  = "http://translate.google.com/translate_a/t";
    sSend = "client=qlt&sl=" + (sFromLang || "auto") + "&tl=" + sToLang + "&q=" + encodeURIComponent(sSource);
  }
  else if (oSelect.API == 1) //Bing
//  //Bing GET method
//  {
//    sMethod = "GET";
//
//    if (nLang < 0) //Auto detect
//    {
//      sURL = "http://api.microsofttranslator.com/V2/Http.svc/Detect?appId=" + sAPIkey + "&text=" + encodeURIComponent(sSource);
//
//      OpenRequest(oRequest, sMethod, sURL);
//
//      if (! SendRequest(oRequest, null))
//        return;
//
//      if (oRequest.status != 200)
//      {
//        ErrorBox(oRequest.status + " : " + oRequest.statusText);
//        return;
//      }
//      sFromLang = oRequest.responseText.substring(oRequest.responseText.indexOf(">") + 1, oRequest.responseText.lastIndexOf("<"));
//    }
//
//    sURL  = "http://api.microsofttranslator.com/V2/Http.svc/Translate?appId=" + sAPIkey + "&from=" + sFromLang + "&to=" + sToLang + "&text=" + encodeURIComponent(sSource);
//    sSend = null;
//  }
  //Bing POST method
  {
    if (nLang < 0) //Auto detect
    {
      sURL = "http://api.microsofttranslator.com/V2/Http.svc/Detect?appId=" + sAPIkey;

      OpenRequest(oRequest, sMethod, sURL);

      if (! SendRequest(oRequest, sSource))
        return;

      if (oRequest.status != 200)
      {
        ErrorBox(oRequest.status + " : " + oRequest.statusText);
        return;
      }
      sFromLang = oRequest.responseText.substring(oRequest.responseText.indexOf(">") + 1, oRequest.responseText.lastIndexOf("<"));
    }

    sURL  = "http://api.microsofttranslator.com/V2/Http.svc/Translate?appId=" + sAPIkey + "&from=" + sFromLang + "&to=" + sToLang;
    sSend = sSource;
  }
  else //Yandex
  {
    sURL  = "http://translate.yandex.ru/tr.json/translate";
    sSend = "lang=" + sFromLang + "-" + sToLang + "&text=" + encodeURIComponent(sSource);
  }

  OpenRequest(oRequest, sMethod, sURL);

  if (! SendRequest(oRequest, sSend))
    return;

  if (oRequest.status != 200)
  {
    ErrorBox(oRequest.status + " : " + oRequest.statusText);
    return;
  }

  if (oSelect.API == 0) //Google
  {
    eval("oResponse=" + oRequest.responseText + ";");

    sFromLang = oResponse.src;

    sTarget = "";
    for (i = 0; i < oResponse.sentences.length; ++i)
      sTarget += oResponse.sentences[i].trans;

    if (oResponse.dict)
    {
      for (i = 0; i < oResponse.dict.length; ++i)
      {
        sTarget += "\r\n\r\n" + oResponse.dict[i].pos + ":";
        for (n = 0; n < oResponse.dict[i].terms.length; ++n)
          sTarget += "\r\n" + (n + 1) + ". " + oResponse.dict[i].terms[n];
      }
    }
  }
  else if (oSelect.API == 1) //Bing
  {
    sTarget = oRequest.responseText.substring(oRequest.responseText.indexOf(">") + 1, oRequest.responseText.lastIndexOf("<"));
    sTarget = sTarget.replace(/&#xD;/g, "\r");
    sTarget = sTarget.replace(/&amp;/g, "&");
    sTarget = sTarget.replace(/&lt;/g,  "<");
    sTarget = sTarget.replace(/&gt;/g,  ">");
  }
  else //Yandex
  {
    sTarget = eval(oRequest.responseText);
  }

  if (bAddToTarget && nTargetLen)
    sTarget = "\r\n\r\n" + sTarget;

  AkelPad.MemCopy(lpBuffer, sTarget, DT_UNICODE);
  AkelPad.SendMessage(aWnd[IDTXTTARGET][WND], 0x00B1 /*EM_SETSEL*/, bAddToTarget ? -1 : 0, -1);

  if (bAddToTarget && nTargetLen)
    nTargetSel = oSelect.Target1 + 2;

  AkelPad.SendMessage(aWnd[IDTXTTARGET][WND], 0x00C2 /*EM_REPLACESEL*/, 1, lpBuffer);
  AkelPad.SendMessage(aWnd[IDTXTTARGET][WND], 0x00B1 /*EM_SETSEL*/, nTargetSel, nTargetSel);

  if (nLang < 0)
  {
    for (i = 0; i < aLangs.length; ++i)
    {
      if (aLangs[i][0] == sFromLang)
      {
        nDetectLang = i;
        sLangName   = aLangs[i][1];
        break;
      }
    }
    if (! sLangName)
      sLangName = sFromLang + " - "  + sTxtUndefined;

    SetWndFontAndText(aWnd[IDDETECTLANG][WND], 0, sTxtAutoDetect + ": " + sLangName);
  }
  else
    SetWndFontAndText(aWnd[IDDETECTLANG][WND], 0, "");
}

function OpenRequest(oRequest, sMethod, sURL)
{
  oRequest.open(sMethod, sURL, false);
  oRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
}

function SendRequest(oRequest, sSend)
{
  try
  {
    oRequest.send(sSend);
  }
  catch (oError)
  {
    ErrorBox(sTxtNoInternet);
    return false;
  }
  return true;
}

function ErrorBox(sError)
{
  SetWndFontAndText(aWnd[IDDETECTLANG][WND], 0, "");
  AkelPad.MessageBox(hWndDlg, sError, sTxtError, 48);
}

function Listen(hWnd, nSelection)
{
  var lpReturn = AkelPad.MemAlloc(64 * 2);
  var sMode;

  oSys.Call("Winmm::mciSendStringW", "status TTS mode", lpReturn, 64, 0);
  sMode = AkelPad.MemRead(lpReturn, DT_UNICODE);
  AkelPad.MemFree(lpReturn);

  if (sMode == "playing")
  {
    oSys.Call("Winmm::mciSendStringW", "close TTS", 0, 0, 0);
    KillTimer();
  }
  else
  {
    if (nSelection < 0)
      nSelection = AkelPad.SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0);

    if (nSelection)
      AkelPad.SendMessage(hWnd, 1086 /*EM_GETSELTEXT*/, 0, lpBuffer);
    else
      oSys.Call("User32::GetWindowTextW", hWnd, lpBuffer, nBufSize);

    sSpeechText = AkelPad.MemRead(lpBuffer, DT_UNICODE).replace(/([\$\+\*=_#&~])\1{2,}/g, "$1$1").replace(/([\,;.:\?!'])\1+/g, "$1").replace(/\[\(\)\[\]\{\}\^\/\|\\<>%"`-]+/g, " ").replace(/\s+/g, " ").replace(/^ | $/g, "");

    if (hWnd == aWnd[IDTXTSOURCE][WND])
    {
      nSpeechLang = AkelPad.SendMessage(aWnd[IDFROMLANGCB][WND], CB_GETITEMDATA, oSelect.FromLang, 0);
      nListenID   = IDLISTEN1;

      if (nSpeechLang < 0)
      {
        AkelPad.MessageBox(hWndDlg, sTxtChooseLang, sTxtListen, 48);
        return;
      }
    }
    else
    {
      nSpeechLang = AkelPad.SendMessage(aWnd[IDTOLANGCB][WND], CB_GETITEMDATA, oSelect.ToLang, 0);
      nListenID   = IDLISTEN2;
    }

    if (! aLangs[nSpeechLang][5])
    {
      AkelPad.MessageBox(hWndDlg, aLangs[nSpeechLang][1] + "\n\n" + sTxtNoSpeech, sTxtListen, 48);
      return;
    }

    GetTextToSpeech();
    nTimerCount = 0;
    oSys.Call("User32::SetTimer", hWndDlg, IDTIMER, 250, 0);
    PlayTextToSpeech();
  }
}

function GetTextToSpeech()
{
  var nPartLen = 100; //Google TTS limit text length
  var oRequest;
  var oError;

  uSpeechBody = null;

  if (sSpeechText.length > nPartLen)
  {
    sSpeechPart = sSpeechText.substr(0, nPartLen + 1);

    if ((/ \S*$/.test(sSpeechPart)) && (RegExp.index > 0))
      nPartLen = RegExp.index;

    sSpeechPart = sSpeechPart.substr(0, nPartLen);
    sSpeechText = sSpeechText.substr(nPartLen).replace(/^ /, "");
  }
  else
  {
    sSpeechPart = sSpeechText;
    sSpeechText = "";
  }

  if (sSpeechPart)
  {
    try
    {
      oRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (oError)
    {
      sSpeechPart = "";
      ErrorBox(sTxtNoSupport);
      return;
    }

    OpenRequest(oRequest, "GET", "http://translate.google.com/translate_tts?ie=utf-8&tl=" + aLangs[nSpeechLang][0] + "&q=" + encodeURIComponent(sSpeechPart));

    if (! SendRequest(oRequest, null))
    {
      sSpeechPart = "";
      return;
    }

    if (oRequest.status == 200)
      uSpeechBody = oRequest.responseBody; //array of unsigned bytes, typeof="unknown"
    else
    {
      sSpeechPart = "";
      ErrorBox(oRequest.status + " : " + oRequest.statusText);
    }
  }
}

function PlayTextToSpeech()
{
  if (sSpeechPart)
  {
    var sMp3File = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + ".mp3";
    var oStream  = new ActiveXObject("ADODB.Stream");
    var nError;

    oStream.Type = 1; // adTypeBinary
    oStream.Open();
    oStream.Write(uSpeechBody);
    oStream.SaveToFile(sMp3File, 2 /*adSaveCreateOverWrite*/);
    oStream.Close();

    nError = oSys.Call("Winmm::mciSendStringW", 'open "' + sMp3File + '" alias TTS', 0, 0, 0);

    if (! nError)
    {
      nError = oSys.Call("Winmm::mciSendStringW", "play TTS notify", 0, 0, hWndDlg);

      if (! nError)
        GetTextToSpeech();
    }

    if (nError)
    {
      KillTimer();
      oSys.Call("Winmm::mciGetErrorStringW", nError, lpBuffer, nBufSize);
      ErrorBox(nError + ": " + AkelPad.MemRead(lpBuffer, DT_UNICODE));
    }
  }
  else
    KillTimer();
}

function KillTimer()
{
  oSys.Call("User32::KillTimer", hWndDlg, IDTIMER);
  SetWndFontAndText(aWnd[nListenID][WND], hGuiFont, sTxtListen);
}

/**********************
Google v2 response:
{
"sentences": [
  {"trans":"matka","orig":"mother","translit":"","src_translit":""}
  {"trans":"...","orig":"...","translit":"","src_translit":""}
  ...
  {"trans":"matka","orig":"mother","translit":"","src_translit":""}
  ],
"dict": [
  {"pos":"rzeczownik","terms":["matka","mama",...]},
  ...
  {"pos":"czasownik","terms":["matkowac","zrodzic"...]}
  ],
"src": "en",
"server_time": 7
}
-----------------------
Bing API v2 response:
language detect:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">en</string>
translation:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Edycja</string>
**********************/


Last edited by KDJ on Sun Apr 07, 2013 6:19 pm; edited 26 times in total
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3 ... 10, 11, 12 ... 15, 16, 17  Next
Page 11 of 17

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group