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 ... 17, 18, 19  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: 1394
Location: Poland

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

Inserts date/time from calendar.

InsertDateFromCalendar.js

Code:
// InsertDateFromCalendar.js - ver. 2013-09-24 (x86/x64)
//
// Inserts date/time from calendar.
//
// Usage:
// Call("Scripts::Main", 1, "InsertDateFromCalendar.js")
//
// In calendar window, press F1 for help, or press O(S) for options-settings

if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 0x0415) //Polish
{
  var sHelp = "   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 sHelpDF = " 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 sHelpTF = " 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 sTxtOK       = "OK";
  var sTxtOptions  = "Opcje";
  var sTxtHelp     = "Pomoc";
  var sTxtSettings = "Opcje - ustawienia";
  var sTxtFormat   = "Wstaw - format daty/czasu";
  var sTxtSystem   = "System";
  var sTxtLongDate = "Data długa";
  var sTxtDateForm = "Format daty";
  var sTxtTimeForm = "Format czasu";
  var sTxtKeyAssig = "Wstaw - przydzielone klawisze";
  var sTxtDate     = "Data";
  var sTxtTime     = "Czas";
  var sTxtOkBut    = "Przycisk OK";
  var sTxtCalendar = "Kalendarz";
  var sTxtMonths   = "Liczba widocznych miesięcy";
  var sTxtColor1   = "Tło kalendarza";
  var sTxtColor2   = "Tekst dni miesiąca";
  var sTxtColor3   = "Tło nagłówka miesiąca";
  var sTxtColor4   = "Tekst nagłówka miesiąca";
  var sTxtColor5   = "Początkowe i końcowe dni";
  var sTxtReset    = "R\n" +
                     "e\n" +
                     "s\n" +
                     "e\n" +
                     "t";
}
else
{
  var sHelp = "   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 sHelpDF = " 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 sHelpTF = " 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 sTxtOK       = "OK";
  var sTxtOptions  = "Options";
  var sTxtHelp     = "Help";
  var sTxtSettings = "Options - settings";
  var sTxtFormat   = "Insert - date/time format";
  var sTxtSystem   = "System";
  var sTxtLongDate = "Long date";
  var sTxtDateForm = "Date format";
  var sTxtTimeForm = "Time format";
  var sTxtKeyAssig = "Insert - key assignment";
  var sTxtDate     = "Date";
  var sTxtTime     = "Time";
  var sTxtOkBut    = "OK button";
  var sTxtCalendar = "Calendar";
  var sTxtMonths   = "Count of visible months";
  var sTxtColor1   = "Background within a month";
  var sTxtColor2   = "Text within a month";
  var sTxtColor3   = "Background calendar title";
  var sTxtColor4   = "Text calendar title";
  var sTxtColor5   = "Header day and trailing day";
  var sTxtReset    = "R\n" +
                     "e\n" +
                     "s\n" +
                     "e\n" +
                     "t";
}

var DT_QWORD = 2;
var DT_DWORD = 3;
var DT_WORD  = 4;

var oSys        = AkelPad.SystemFunction();
var hMainWnd    = AkelPad.GetMainWnd();
var hEditWnd    = AkelPad.GetEditWnd();
var hInstDLL    = AkelPad.GetInstanceDll();
var sClassName  = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstDLL;
var hGuiFont    = oSys.Call("Gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
var nOsVer      = GetOsVersion();
var lpSysTime   = AkelPad.MemAlloc(16); //SYSTEMTIME
var bSystem     = 1;
var bLongDate   = 0;
var sDateForm   = "yyyy-MM-dd";
var sTimeForm   = "HH:mm:ss";
var aKeyAssign  = [["Enter", 1], ["Shift+Enter", 0], ["Ctrl+Enter", 2], ["Ctrt+Shift+Enter", 3], [sTxtOkBut, 1]];
var nMonthCount = 1;
var nMonthMax   = 7;
var aColor;
var hDlgCal;
var hWndCal;
var hWndOK;
var hWndOpt;
var hBrushColor;
var bResetColors;
var aCalPos;
var aSetPos;

ReadWriteIni(0);

var aWnd         = [];
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 IDASSIG4     = 1016;
var IDENTER      = 1017;
var IDSHENTER    = 1018;
var IDCTENTER    = 1019;
var IDCTSHENTER  = 1020;
var IDOKBUT      = 1021;
var IDCALENDAR   = 1022;
var IDMONTHCOUNT = 1023;
var IDMONTHDESCR = 1024;
var IDCOLOR1     = 1025;
var IDCOLOR2     = 1026;
var IDCOLOR3     = 1027;
var IDCOLOR4     = 1028;
var IDCOLOR5     = 1029;
var IDCOLOR1BUTT = 1030;
var IDCOLOR2BUTT = 1031;
var IDCOLOR3BUTT = 1032;
var IDCOLOR4BUTT = 1033;
var IDCOLOR5BUTT = 1034;
var IDRESET      = 1035;
var IDDFHLPTXT   = 1036;
var IDTFHLPTXT   = 1037;

var CLASS   = 0;
var WND     = 1;
var EXSTYLE = 2;
var STYLE   = 3;
var X       = 4;
var Y       = 5;
var W       = 6;
var H       = 7;
var TXT     = 8;

AkelPad.WindowRegisterClass(sClassName);

do
{
  hDlgCal = oSys.Call("User32::CreateWindowEx" + _TCHAR,
              0,               //dwExStyle
              sClassName,      //lpClassName
              sTxtCalendar,    //lpWindowName
              0x90C80000,      //dwStyle=WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU
              0,               //x
              0,               //y
              0,               //nWidth
              0,               //nHeight
              hMainWnd,        //hWndParent
              0,               //ID
              hInstDLL,        //hInstance
              DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.

  //Disable main window, to make dialog modal
  oSys.Call("User32::EnableWindow", hMainWnd, false);

  //Message loop
  AkelPad.WindowGetMessage();
}
while (bResetColors);

AkelPad.MemFree(lpSysTime);
AkelPad.WindowUnregisterClass(sClassName);

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
                hInstDLL,        //hInstance
                0);              //lpParam
    AkelPad.SendMessage(hWndCal, 0x1014 /*MCM_SETMONTHDELTA*/, 1, 0);

    hWndOK = oSys.Call("User32::CreateWindowEx" + _TCHAR,
               0,          //dwExStyle
               "BUTTON",   //lpClassName
               sTxtOK,     //lpWindowName
               0x50000001, //WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON
               0,          //x
               0,          //y
               0,          //nWidth
               0,          //nHeight
               hWnd,       //hWndParent
               0,          //ID
               hInstDLL,   //hInstance
               0);         //lpParam

    hWndOpt = oSys.Call("User32::CreateWindowEx" + _TCHAR,
                0,           //dwExStyle
                "BUTTON",    //lpClassName
                sTxtOptions, //lpWindowName
                0x50000000,  //WS_VISIBLE|WS_CHILD
                0,           //x
                0,           //y
                0,           //nWidth
                0,           //nHeight
                hWnd,        //hWndParent
                0,           //ID
                hInstDLL,    //hInstance
                0);          //lpParam

    SetWindowFont(hWndOK, hGuiFont);
    SetWindowFont(hWndOpt, hGuiFont);

    SetWindowSize(hWnd);
    MoveWindow(hMainWnd, hWnd, (bResetColors ? aCalPos : ""));

    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*/) && (nOsVer < 6 /*Vista*/))
      SetDate(-1);
    else if ((wParam == 0x27 /*VK_RIGHT*/) && (nOsVer < 6))
      SetDate(1);
    else if ((wParam == 0x26 /*VK_UP*/) && (nOsVer < 6))
      SetDate(-7);
    else if ((wParam == 0x28 /*VK_DOWN*/) && (nOsVer < 6))
      SetDate(7);
    else if (wParam == 0x08 /*VK_BACK*/)
      SetDate(0); //today
    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 < nMonthMax)
      {
        ++nMonthCount;
        SetWindowSize(hWnd);
        MoveWindow(hMainWnd, hWnd, "CV");
      }
    }
    else if (wParam == 112) //VK_F1
      Help();
    else if ((wParam == 0x4F) || (wParam == 0x53)) //O or S
      oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, 0, hWndOpt);

    oSys.Call("User32::SetFocus", hWndCal);
    AkelPad.SendMessage(hWndOpt, 0x00F4 /*BM_SETSTYLE*/, 0 /*BS_PUSHBUTTON*/, 0);
    AkelPad.SendMessage(hWndOK,  0x00F4 /*BM_SETSTYLE*/, 1 /*BS_DEFPUSHBUTTON*/, 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 == 273) //WM_COMMAND
  {
    if (lParam == hWndOK)
    {
      InsertDateTime(aKeyAssign[4][1]);
      oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
    else if (lParam == hWndOpt)
    {
      Settings();
      if (bResetColors)
        oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
  }

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

    oSys.Call("User32::EnableWindow", hMainWnd, true);
    oSys.Call("User32::DestroyWindow", hWnd);
  }

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

  return 0;
}

function GetOsVersion()
{
  var nVerLen = 4 * 5 + 128 * _TSIZE; //sizeof(OSVERSIONINFO)
  var lpOsVer = AkelPad.MemAlloc(nVerLen);
  var nMajorVer;

  AkelPad.MemCopy(lpOsVer, nVerLen, 3 /*DT_DWORD*/);
  oSys.Call("Kernel32::GetVersionEx" + _TCHAR, lpOsVer);
  nMajorVer = AkelPad.MemRead(lpOsVer + 4, 3 /*DT_DWORD*/);
  AkelPad.MemFree(lpOsVer);

  return nMajorVer;
}

function GetWindowText(hWnd)
{
  var lpBuffer = AkelPad.MemAlloc(256 * _TSIZE);
  var sText;

  oSys.Call("User32::GetWindowText" + _TCHAR, hWnd, lpBuffer, 256);
  sText = AkelPad.MemRead(lpBuffer, _TSTR);
  AkelPad.MemFree(lpBuffer);
  return sText;
}

function SetWindowText(hWnd, sText)
{
  oSys.Call("User32::SetWindowText" + _TCHAR, hWnd, sText);
}

function SetWindowFont(hWnd, hFont)
{
  AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, true);
}

function SetWindowSize(hDlg)
{
  var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
  var nCY    = oSys.Call("User32::GetSystemMetrics", 4 /*SM_CYCAPTION*/);
  var nFX    = oSys.Call("User32::GetSystemMetrics", 7 /*SM_CXFIXEDFRAME*/);
  var nFY    = oSys.Call("User32::GetSystemMetrics", 8 /*SM_CYFIXEDFRAME*/);
  var nW, nH, nBW;

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

  nW  = Math.max(AkelPad.MemRead(lpRect + 8, DT_DWORD), AkelPad.SendMessage(hWndCal, 0x1015 /*MCM_GETMAXTODAYWIDTH*/, 0, 0));
  nH  = AkelPad.MemRead(lpRect + 12, DT_DWORD) * nMonthCount - ((nOsVer < 6) ? 13 : 27) * (nMonthCount - 1);
  nBW = Math.round((nW - 15) / 2);

  oSys.Call("User32::SetWindowPos", hDlg, 0, 0, 0, nW + 2 * nFX, nH + 2 * nFY + nCY + 30, 0x16 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOMOVE*/);
  oSys.Call("User32::SetWindowPos", hWndCal, 0, 0, 0, nW, nH, 0x16 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOMOVE*/);
  oSys.Call("User32::SetWindowPos", hWndOK, 0, 5, nH + 5, nBW, 21, 0x14 /*SWP_NOZORDER|SWP_NOACTIVATE*/);
  oSys.Call("User32::SetWindowPos", hWndOpt, 0, nW - nBW - 5, nH + 5, nBW, 21, 0x14 /*SWP_NOZORDER|SWP_NOACTIVATE*/);

  AkelPad.MemFree(lpRect);
}

function MoveWindow(hWndParent, hWnd, sAction)
{
  var aRectParent;
  var aRect;
  var lpPoint;
  var nX;
  var nY;
  var nWndWidth;
  var nWndHeight;
  var nCharHeight;

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

  aRectParent = GetWindowPos(hWndParent);
  aRect       = GetWindowPos(hWnd);

  nX = aRect.left;
  nY = aRect.top;

  if (! sAction) //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   = aRect.right - aRect.left;
      nWndHeight  = aRect.bottom - aRect.top;
      nCharHeight = AkelPad.SendMessage(hEditWnd, 3188 /*AEM_GETCHARSIZE*/, 0 /*AECS_HEIGHT*/, 0);

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

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

      AkelPad.MemFree(lpPoint);
    }
  }
  else if (sAction == "R") //Move right
    nX = aRect.left + ((aRect.right < aRectParent.right) ? 10: 0);
  else if (sAction == "L") //Move left
    nX = aRect.left - ((aRect.left > aRectParent.left) ? 10: 0);
  else if (sAction == "D") //Move down
    nY = aRect.top + ((aRect.bottom < aRectParent.bottom) ? 10: 0);
  else if (sAction == "U") //Move up
    nY = aRect.top - ((aRect.top > aRectParent.top) ? 10: 0);
  else if (sAction == "E") //Move end (right)
    nX = aRect.left + (aRectParent.right - aRect.right);
  else if (sAction == "H") //Move home (left)
    nX = aRect.left + (aRectParent.left - aRect.left);
  else if (sAction == "B") //Move bottom
    nY = aRect.top + (aRectParent.bottom - aRect.bottom);
  else if (sAction == "T") //Move top
    nY = aRect.top + (aRectParent.top - aRect.top);
  else if (sAction == "C") //Center window
  {
    nX = aRectParent.left + ((aRectParent.right  - aRectParent.left) / 2 - (aRect.right  - aRect.left) / 2);
    nY = aRectParent.top  + ((aRectParent.bottom - aRectParent.top)  / 2 - (aRect.bottom - aRect.top)  / 2);
  }
  else if (sAction == "CV") //Center vertically
  {
    nY = aRectParent.top  + ((aRectParent.bottom - aRectParent.top)  / 2 - (aRect.bottom - aRect.top)  / 2);
  }
  else if (sAction == "LT") //Move left top
  {
    nX = aRectParent.left;
    nY = aRectParent.top;
  }
  else if (sAction == "RT") //Move right top
  {
    nX = aRect.left + (aRectParent.right - aRect.right);
    nY = aRectParent.top;
  }
  else if (sAction == "LB") //Move left bottom
  {
    nX = aRectParent.left;
    nY = aRect.top + (aRectParent.bottom - aRect.bottom);
  }
  else if (sAction == "RB") //Move right bottom
  {
    nX = aRect.left + (aRectParent.right - aRect.right);
    nY = aRect.top + (aRectParent.bottom - aRect.bottom);
  }
  else
  {
    nX = sAction.left;
    nY = sAction.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 aRect  = [];

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

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

  return aRect;
}

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

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

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

  if (bWrite)
  {
    sIniTxt = 'bSystem='          + bSystem     + ';\r\n' +
              'bLongDate='        + bLongDate   + ';\r\n' +
              'sDateForm="'       + sDateForm.replace(/[\\"]/g, "\\$&") + '";\r\n' +
              'sTimeForm="'       + sTimeForm.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' +
              'aKeyAssign[4][1]=' + aKeyAssign[4][1] + ';\r\n' +
              'nMonthCount='      + nMonthCount + ';\r\n' +
              'aColor='

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

    sIniTxt += ';';

    oFile = oFSO.OpenTextFile(sIniName, 2, true, -1);
    oFile.Write(sIniTxt);
    oFile.Close();
  }

  else if (oFSO.FileExists(sIniName))
  {
    try
    {
      eval(AkelPad.ReadFile(sIniName));
    }
    catch (oError)
    {
    }
  }
}

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    = 0;
  var sDate;

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

  if (bSystem)
    nFlag = bLongDate ? 0x2 /*DATE_LONGDATE*/ : 0x1 /*DATE_SHORTDATE*/;
  else
    AkelPad.MemCopy(lpFormat, sDateForm, _TSTR);

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

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

  return sDate;
}

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

  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, sTimeForm, _TSTR);

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

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

  return sTime;
}

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

  if (nWhat == 0)
    sDateTime = GetDate();
  else if (nWhat == 1)
    sDateTime = GetDate() + " " + GetTime();
  else if (nWhat == 2)
    sDateTime = GetTime();
  else
    sDateTime = 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   = [];

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

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

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

function Help()
{
  var aRectDesk = GetWindowPos(oSys.Call("User32::GetDesktopWindow"));
  var aRect     = GetWindowPos(hDlgCal);
  var nWidth    = 350;
  var nHeight   = 350;
  var nX        = aRect.right;
  var nY        = aRect.top;
  var hDlgHlp;

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

  hDlgHlp = oSys.Call("User32::CreateWindowEx" + _TCHAR,
              0,          //dwExStyle
              sClassName, //lpClassName
              sTxtHelp,   //lpWindowName
              0x90C80000, //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU
              nX,         //x
              nY,         //y
              nWidth,     //nWidth
              nHeight,    //nHeight
              hDlgCal,    //hWndParent
              0,          //ID
              hInstDLL,   //hInstance
              DialogCallbackHlp); //Script function callback

  oSys.Call("User32::EnableWindow", hDlgCal, 0);
}

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

  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", hDlgCal, 1);
    oSys.Call("User32::DestroyWindow", hWnd);
  }

  return 0;
}

function Settings()
{
  var nWidth  = 265
  var nHeight = 485;
  var aRectDesk;
  var aRect;
  var nX;
  var nY;
  var hDlgSet;
  var i;

  if (bResetColors)
  {
    nX = aSetPos.left;
    nY = aSetPos.top;
  }
  else
  {
    aRectDesk = GetWindowPos(oSys.Call("User32::GetDesktopWindow"));
    aRect     = GetWindowPos(hDlgCal);
    nX        = aRect.right;
    nY        = aRect.top;

    if ((nX + nWidth) > aRectDesk.right)
      nX = aRect.left - nWidth;
    if ((nY + nHeight) > aRectDesk.bottom)
      nY = aRect.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                CLASS, WND, EXSTYLE,      STYLE,   X,   Y,   W,   H, TXT
  aWnd[IDFORMAT    ] = ["BUTTON",   0,       0, 0x50000007,  10,  10, 240, 130, sTxtFormat];
  aWnd[IDDATE      ] = ["STATIC",   0,       0, 0x50000000,  20,  30, 220,  13, ""];
  aWnd[IDTIME      ] = ["STATIC",   0,       0, 0x50000000,  20,  50, 220,  13, ""];
  aWnd[IDSYSTEM    ] = ["BUTTON",   0,       0, 0x50010003,  20,  70,  80,  16, sTxtSystem];
  aWnd[IDLONGDATE  ] = ["BUTTON",   0,       0, 0x50010003, 120,  70,  80,  16, sTxtLongDate];
  aWnd[IDDF        ] = ["EDIT",     0,   0x200, 0x50010080,  20,  90, 135,  20, sDateForm];
  aWnd[IDDFHLP     ] = ["BUTTON",   0,       0, 0x50010000, 155,  90,  15,  20, "?"];
  aWnd[IDDFDESCR   ] = ["STATIC",   0,       0, 0x50000000, 175,  90,  70,  13, sTxtDateForm];
  aWnd[IDTF        ] = ["EDIT",     0,   0x200, 0x50010080,  20, 110, 135,  20, sTimeForm];
  aWnd[IDTFHLP     ] = ["BUTTON",   0,       0, 0x50010000, 155, 110,  15,  20, "?"];
  aWnd[IDTFDESCR   ] = ["STATIC",   0,       0, 0x50000000, 175, 110,  70,  13, sTxtTimeForm];
  aWnd[IDKEYASSIG  ] = ["BUTTON",   0,       0, 0x50000007,  10, 150, 240, 130, sTxtKeyAssig];
  aWnd[IDASSIG0    ] = ["COMBOBOX", 0,       0, 0x50010003,  20, 170, 100,  20, ""];
  aWnd[IDASSIG1    ] = ["COMBOBOX", 0,       0, 0x50010003,  20, 190, 100,  20, ""];
  aWnd[IDASSIG2    ] = ["COMBOBOX", 0,       0, 0x50010003,  20, 210, 100,  20, ""];
  aWnd[IDASSIG3    ] = ["COMBOBOX", 0,       0, 0x50010003,  20, 230, 100,  20, ""];
  aWnd[IDASSIG4    ] = ["COMBOBOX", 0,       0, 0x50010003,  20, 250, 100,  20, ""];
  aWnd[IDENTER     ] = ["STATIC",   0,       0, 0x50000000, 125, 170,  80,  13, aKeyAssign[0][0]];
  aWnd[IDSHENTER   ] = ["STATIC",   0,       0, 0x50000000, 125, 190,  80,  13, aKeyAssign[1][0]];
  aWnd[IDCTENTER   ] = ["STATIC",   0,       0, 0x50000000, 125, 210,  80,  13, aKeyAssign[2][0]];
  aWnd[IDCTSHENTER ] = ["STATIC",   0,       0, 0x50000000, 125, 230,  80,  13, aKeyAssign[3][0]];
  aWnd[IDOKBUT     ] = ["STATIC",   0,       0, 0x50000000, 125, 250,  80,  13, aKeyAssign[4][0]];
  aWnd[IDCALENDAR  ] = ["BUTTON",   0,       0, 0x50000007,  10, 290, 240, 155, sTxtCalendar];
  aWnd[IDMONTHCOUNT] = ["COMBOBOX", 0,       0, 0x50010003,  20, 310,  40,  20, ""];
  aWnd[IDMONTHDESCR] = ["STATIC",   0,       0, 0x50000000,  65, 310, 180,  13, sTxtMonths];
  aWnd[IDCOLOR1    ] = ["STATIC",   0,       0, 0x50800000,  20, 340,  18,  18, ""];
  aWnd[IDCOLOR2    ] = ["STATIC",   0,       0, 0x50800000,  20, 360,  18,  18, ""];
  aWnd[IDCOLOR3    ] = ["STATIC",   0,       0, 0x50800000,  20, 380,  18,  18, ""];
  aWnd[IDCOLOR4    ] = ["STATIC",   0,       0, 0x50800000,  20, 400,  18,  18, ""];
  aWnd[IDCOLOR5    ] = ["STATIC",   0,       0, 0x50800000,  20, 420,  18,  18, ""];
  aWnd[IDCOLOR1BUTT] = ["BUTTON",   0,       0, 0x50010000,  45, 340, 170,  20, sTxtColor1];
  aWnd[IDCOLOR2BUTT] = ["BUTTON",   0,       0, 0x50010000,  45, 360, 170,  20, sTxtColor2];
  aWnd[IDCOLOR3BUTT] = ["BUTTON",   0,       0, 0x50010000,  45, 380, 170,  20, sTxtColor3];
  aWnd[IDCOLOR4BUTT] = ["BUTTON",   0,       0, 0x50010000,  45, 400, 170,  20, sTxtColor4];
  aWnd[IDCOLOR5BUTT] = ["BUTTON",   0,       0, 0x50010000,  45, 420, 170,  20, sTxtColor5];
  aWnd[IDRESET     ] = ["BUTTON",   0,       0, 0x50012000, 220, 340,  20, 100, sTxtReset];
  aWnd[IDDFHLPTXT  ] = ["STATIC",   0,       0, 0x40400000,   0, 110, 255, 155, sHelpDF];
  aWnd[IDTFHLPTXT  ] = ["STATIC",   0,       0, 0x40400000,   0, 130, 255, 140, sHelpTF];

  hDlgSet = oSys.Call("User32::CreateWindowEx" + _TCHAR,
              0,            //dwExStyle
              sClassName,   //lpClassName
              sTxtSettings, //lpWindowName
              0x90C80000,   //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU
              nX,           //x
              nY,           //y
              nWidth,       //nWidth
              nHeight,      //nHeight
              hDlgCal,      //hWndParent
              0,            //ID
              hInstDLL,     //hInstance
              DialogCallbackSet); //Script function callback

  oSys.Call("User32::EnableWindow", hDlgCal, 0);
  AkelPad.WindowGetMessage();
}

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

  if (uMsg == 1) //WM_CREATE
  {
    for (i = 1000; i < aWnd.length; ++i)
    {
      aWnd[i][WND] = oSys.Call("User32::CreateWindowEx" + _TCHAR,
                       aWnd[i][EXSTYLE],//dwExStyle
                       aWnd[i][CLASS],  //lpClassName
                       0,               //lpWindowName
                       aWnd[i][STYLE],  //dwStyle
                       aWnd[i][X],      //x
                       aWnd[i][Y],      //y
                       aWnd[i][W],      //nWidth
                       aWnd[i][H],      //nHeight
                       hWnd,            //hWndParent
                       i,               //ID
                       hInstDLL,        //hInstance
                       0);              //lpParam
      SetWindowFont(aWnd[i][WND], hGuiFont);
      SetWindowText(aWnd[i][WND], aWnd[i][TXT]);
    }

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

    //Fill comboboxes
    for (i = 0; i < aKeyAssign.length; ++i)
    {
      AkelPad.SendMessage(aWnd[IDASSIG0 + i][WND], 0x143 /*CB_ADDSTRING*/, 0, sTxtDate);
      AkelPad.SendMessage(aWnd[IDASSIG0 + i][WND], 0x143 /*CB_ADDSTRING*/, 0, sTxtDate + " " + sTxtTime);
      AkelPad.SendMessage(aWnd[IDASSIG0 + i][WND], 0x143 /*CB_ADDSTRING*/, 0, sTxtTime);
      AkelPad.SendMessage(aWnd[IDASSIG0 + i][WND], 0x143 /*CB_ADDSTRING*/, 0, sTxtTime + " " + sTxtDate);
      AkelPad.SendMessage(aWnd[IDASSIG0 + i][WND], 0x14E /*CB_SETCURSEL*/, aKeyAssign[i][1], 0);
    }
    for (i = 1; i < nMonthMax + 1; ++i)
      AkelPad.SendMessage(aWnd[IDMONTHCOUNT][WND], 0x143 /*CB_ADDSTRING*/, 0, " " + i + " ");
    AkelPad.SendMessage(aWnd[IDMONTHCOUNT][WND], 0x14E /*CB_SETCURSEL*/, nMonthCount - 1, 0);

    CheckButtons();
  }

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

  else if (uMsg == 256) //WM_KEYDOWN
  {
    if (wParam == 112) //VK_F1
    {
      if (oSys.Call("User32::GetFocus") == aWnd[IDDF][WND])
        oSys.Call("User32::PostMessage" + _TCHAR, hWnd, 273 /*WM_COMMAND*/, IDDFHLP, 0);
      else if (oSys.Call("User32::GetFocus") == aWnd[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", aWnd[IDDFHLPTXT][WND]))
        ShowFormatHelp(hWnd, aWnd[IDDFHLPTXT][WND], 0);
      else if (oSys.Call("User32::IsWindowVisible", aWnd[IDTFHLPTXT][WND]))
        ShowFormatHelp(hWnd, aWnd[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", aWnd[IDDFHLPTXT][WND]))
      ShowFormatHelp(hWnd, aWnd[IDDFHLPTXT][WND], 0);
    else if (oSys.Call("User32::IsWindowVisible", aWnd[IDTFHLPTXT][WND]))
      ShowFormatHelp(hWnd, aWnd[IDTFHLPTXT][WND], 0);
  }

  else if (uMsg == 0x0138) //WM_CTLCOLORSTATIC
  {
    if ((lParam == aWnd[IDDFHLPTXT][WND]) || (lParam == aWnd[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 == aWnd[IDCOLOR1][WND])
    {
      oSys.Call("Gdi32::DeleteObject", hBrushColor);
      hBrushColor = oSys.Call("Gdi32::CreateSolidBrush", aColor[4]);
      return hBrushColor;
    }
    if (lParam == aWnd[IDCOLOR2][WND])
    {
      oSys.Call("Gdi32::DeleteObject", hBrushColor);
      hBrushColor = oSys.Call("Gdi32::CreateSolidBrush", aColor[1]);
      return hBrushColor;
    }
    if (lParam == aWnd[IDCOLOR3][WND])
    {
      oSys.Call("Gdi32::DeleteObject", hBrushColor);
      hBrushColor = oSys.Call("Gdi32::CreateSolidBrush", aColor[2]);
      return hBrushColor;
    }
    if (lParam == aWnd[IDCOLOR4][WND])
    {
      oSys.Call("Gdi32::DeleteObject", hBrushColor);
      hBrushColor = oSys.Call("Gdi32::CreateSolidBrush", aColor[3]);
      return hBrushColor;
    }
    if (lParam == aWnd[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*/))
    {
      sDateForm = GetWindowText(aWnd[IDDF][WND]);
      SetWindowText(aWnd[IDDATE][WND], GetDate());
    }
    else if ((nLowParam == IDTF) && (nHiwParam == 0x300 /*EN_CHANGE*/))
    {
      sTimeForm = GetWindowText(aWnd[IDTF][WND]);
      SetWindowText(aWnd[IDTIME][WND], GetTime());
    }
    else if (nLowParam == IDDFHLP)
      ShowFormatHelp(hWnd, aWnd[IDDFHLPTXT][WND],
                       ! oSys.Call("User32::IsWindowVisible", aWnd[IDDFHLPTXT][WND]));
    else if (nLowParam == IDTFHLP)
      ShowFormatHelp(hWnd, aWnd[IDTFHLPTXT][WND],
                       ! oSys.Call("User32::IsWindowVisible", aWnd[IDTFHLPTXT][WND]));
    else if ((nLowParam >= IDASSIG0) && (nLowParam <= IDASSIG4) && (nHiwParam == 1 /*CBN_SELCHANGE*/))
      aKeyAssign[nLowParam - IDASSIG0][1] = AkelPad.SendMessage(aWnd[nLowParam][WND], 0x147 /*CB_GETCURSEL*/, 0, 0);
    else if ((nLowParam == IDMONTHCOUNT) && (nHiwParam == 1 /*CBN_SELCHANGE*/))
    {
      nMonthCount = AkelPad.SendMessage(aWnd[IDMONTHCOUNT][WND], 0x147 /*CB_GETCURSEL*/, 0, 0) + 1;
      SetWindowSize(hDlgCal);
      MoveWindow(hMainWnd, hDlgCal, "CV");
    }
    else if ((nLowParam >= IDCOLOR1BUTT) && (nLowParam <= IDCOLOR5BUTT))
      ChangeColor(hWnd, nLowParam);
    else if (nLowParam == IDRESET)
    {
      bResetColors = true;
      aColor       = undefined;
      aCalPos      = GetWindowPos(hDlgCal);
      aSetPos      = 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("Gdi32::DeleteObject", hBrushColor);
    oSys.Call("User32::EnableWindow", hDlgCal, 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(aWnd[IDSYSTEM][WND],   241 /*BM_SETCHECK*/, bSystem,   0);
  AkelPad.SendMessage(aWnd[IDLONGDATE][WND], 241 /*BM_SETCHECK*/, bLongDate, 0);

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

  SetWindowText(aWnd[IDDATE][WND], GetDate());
  SetWindowText(aWnd[IDTIME][WND], GetTime());
}

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

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

function ChangeColor(hWnd, nButton)
{
  var nCo        = nButton - IDCOLOR1BUTT;
  var nChoCoSize = _X64 ? 72 : 36; //sizeof(CHOOSECOLOR)
  var lpChoCo    = AkelPad.MemAlloc(nChoCoSize); //CHOOSECOLOR
  var lpCusCo    = AkelPad.MemAlloc(4 * 16); //sizeof(COLORREF) * 16
  var hFocus     = oSys.Call("User32::GetFocus");

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

  AkelPad.MemCopy(lpChoCo,                    nChoCoSize,  DT_DWORD); //lStructSize
  AkelPad.MemCopy(lpChoCo + (_X64 ?  8 :  4), hWnd,        DT_QWORD); //hWndOwner
  AkelPad.MemCopy(lpChoCo + (_X64 ? 24 : 12), aColor[nCo], DT_DWORD); //rgbResult
  AkelPad.MemCopy(lpChoCo + (_X64 ? 32 : 16), lpCusCo,     DT_QWORD); //lpCustColors
  AkelPad.MemCopy(lpChoCo + (_X64 ? 40 : 20), 0x103,       DT_DWORD); //Flags - CC_ANYCOLOR|CC_FULLOPEN|CC_RGBINIT

  if (oSys.Call("Comdlg32::ChooseColor" + _TCHAR, lpChoCo))
  {
    aColor[nCo] = AkelPad.MemRead(lpChoCo + (_X64 ? 24 : 12), DT_DWORD);
    SetWindowText(aWnd[nButton - 5][WND], aWnd[nButton - 5][TXT]);
    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 Tue Sep 24, 2013 5:59 pm; edited 4 times in total
Back to top
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 2614
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: 2054
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: 2614
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: 5398

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.6
//
//
//// 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=pFile.lastIndexOf("\\");

  if (nOffset != -1)
    pFile=pFile.substr(nOffset + 1);
  return pFile;
}


Last edited by Instructor on Fri Sep 05, 2014 2:35 pm; edited 4 times in total
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1629

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 Visit poster's website
VladSh



Joined: 29 Nov 2006
Posts: 2614
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: 1394
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: 1629

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

crypt.js <download | mirror | development version>
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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
B<`!T`"X`:@!S````%`H!```_`X'C:<\!%08!`"``````````
`
end
sum -r/size 13836/25279

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 Wed May 07, 2014 11:28 am; edited 4 times in total
Back to top
View user's profile Send private message Visit poster's website
VladSh



Joined: 29 Nov 2006
Posts: 2614
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: 851
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.1                                                   *
 *  (C) DV, Oct 2013                                                  *
 **********************************************************************/
/*
 *  Simple usage:
 *    Call("Scripts::Main", 1, "RunMe.js")
 *  To specify command line manually:
 *    Call("Scripts::Main", 1, "RunMe.js", "1")
 *
 *  Version 2.1 adds new ability to run a file specified by the selected
 *  text. First it tries to extract a file extension from the selected
 *  text - and if this succeeds, searches for a matching item in the
 *  oCommands. If such item exists, the specified file is run. Otherwise
 *  it calls isSupportedFileExtFromSelectedText - and if this function
 *  returns false, the physical file itself is processed.
 *
 *  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 */ ,
  "bat cmd" :
    "cmd /c \"%f\" || pause" ,
  "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\")" ,
  "xml" :
    "cmd /c C:\\tools\\libxml\\xmllint.exe --format \"%f\" || pause" ,

  // this item should be always the last one!
  "" /* apply to any remained extension */ :
    ":run_anyfile(\"%f\")"
  /* Do not add anything after this !!! */
};


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

function run_pas(filePathName, args) // 'args' is optional
{
  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 = buildCommandWithOptionalArgs("\"%n.exe\"", args); // 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 = substituteVars(cmd, filePathName); // pre-process %f, %n etc.
  setCurrentDir(getFileDir(filePathName));
  runCommand(cmd); // run
  envSetVar("PATH", sPath); // restoring original PATH
}

function run_cpp(filePathName, args) // 'args' is optional
{
  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 = buildCommandWithOptionalArgs("\"%d\\%n.exe\"", args);
    // cmd: the whole command line
    var cmd = "cmd /c " + cmd1 + " && " + cmd2 + " && " + cmd3 + " || pause";
    cmd = substituteVars(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 = buildCommandWithOptionalArgs("\"%d\\%n.exe\"", args);
    var cmd = "cmd /c " + cmd1 + " && " + cmd2 + " || pause";
    cmd = substituteVars(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, args) // 'args' is optional
{
  var sProgramFiles = getProgramFilesDir("x86");
  var cmd = "\"" + sProgramFiles + "\\NSIS\\makensisw.exe\" \"" + filePathName + "\"";
  cmd = buildCommandWithOptionalArgs(cmd, args);
  runCommand(cmd, "", 0); // do not capture output
}

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

/* Explicitly defined extensions to recognize supported file types
   that may be extracted from the selected text.
   This function applies to any remaining extension that was not
   handled by any item from 'oCommands' prior to the last one.
   It's needed to filter strings like "some text.other text" that
   do not look like a valid file name.
*/
function isSupportedFileExtFromSelectedText(fileExt)
{
  var supportedExts = "bat bmp cmd doc docx exe gif htm html ico ini jpg nfo png reg rtf shtm shtml txt xls xlsx xml";
  return isOneOf(fileExt, supportedExts);
}

/* Helper function: when the optional argument 'args' exists,
   it is appended to the command 'cmd'.
*/
function buildCommandWithOptionalArgs(cmd, args)
{
  if (args != undefined)
  {
    if (args != "")
    {
      cmd = cmd + " " + args;
    }
  }
  return cmd;
}


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

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

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

var oSys = undefined;
RunFile(GetCurrentFileInfo());

function GetCurrentFileInfo()
{
  var currentFile = {};
  currentFile.pathName = AkelPad.GetEditFile(0);
  currentFile.isModified = AkelPad.GetEditModified(0);

  // check if the selected text specifies a file
  var s = AkelPad.GetSelText();
  if (s != undefined)
  {
    if (s.length > 0)
    {
      // not empty
      if ((s.indexOf("\n") < 0) && (s.indexOf("\r") < 0))
      {
        // not multi-line
        var sExt = getFileExt(s);
        if ((sExt.length > 0) && (sExt.length < 10))
        {
          var ext = getCommandItemExt(sExt); // extension(s) from 'oCommands'
          if ((ext != undefined) &&
              (ext != "" || isSupportedFileExtFromSelectedText(sExt)))
          {
            // strings like "some text.other text" are filtered above
            s = s.replace(/\//g, "\\"); // all '/' to '\'
            currentFile.pathName = substituteVars(s, currentFile.pathName);
            currentFile.isModified = false;
          }
        }
      }
    }
    delete s;
  }

  if (currentFile.pathName.toUpperCase() == WScript.ScriptFullName.toUpperCase())
  {
    WScript.Echo("Don\'t want to execute self :)");
    WScript.Quit();
  }
 
  return currentFile;
}

function RunFile(currentFile)
{
  var fileExt = getFileExt(currentFile.pathName);
  if (fileExt.length > 0)
  {
    var ext = getCommandItemExt(fileExt);
    if (ext != undefined)
    {
      var cmd = oCommands[ext];
      if (cmd.length > 0)
      {
        if (currentFile.isModified)
          AkelPad.Command(4105); // save file

        if (WScript.Arguments.length > 0)
        {
          if (WScript.Arguments(0) == "1") // Command line...
          {
            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(); // 'Cancel' pressed

            if (cmd2 != cmd1)
            {
              // This may save an empty cmd2 - such case has the special
              // meaning: it allows to use (restore) the default cmd.
              if (oSettings.Begin(WScript.ScriptBaseName, 0x2 /*POB_SAVE*/))
              {
                oSettings.Write(ext, 3 /*PO_STRING*/, cmd2);
                oSettings.End();
              }
            }
            if (cmd2 == "")
              WScript.Quit(); // Empty command line, nothing to do

            cmd = cmd2;
          }
        }

        cmd = substituteVars(cmd, currentFile.pathName);
        if (cmd.charAt(0) == ':')
        {
          cmd = cmd.replace(/\\/g, "\\\\");
          eval(cmd.substr(1));
        }
        else
        {
          runCommand(cmd, "");
        }
      }
    }
    else
      WScript.Echo("No matched extension found!");
  }
  else
    WScript.Echo("File extension is empty!");
}

function getCommandItemExt(fileExt)
{
  fileExt = fileExt.toLowerCase();
  for (var ext in oCommands)
  {
    ext = ext.toLowerCase();
    if ((ext.length == 0) || isOneOf(fileExt, ext))
      return ext;
  }
  return undefined;
}

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;
  var s = "";
  if (n >= 0)
    s = filePathName.substr(0, n);
  else if (isFullPath(filePathName))
    s = filePathName;
  return s;
}

function isFullPath(filePathName)
{
  return /^([A-Za-z]\:)|(\\\\)/.test(filePathName);
}

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

function substituteVars(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;
}


RunMe_Usage_Rus.txt
Code:
1. Скрипт RunMe.js предназначен для компиляции и запуска различных исходных
файлов прямо из AkelPad.
При этом непосредственно компиляция или интерпретация исходного файла
производится внешним компилятором/интерпретатором.
Какой именно компилятор/интерпретатор вызывать для текущего файла,
определяется расширением этого файла и соответствующей этому расширению
командой, прописанной в наборе 'oCommands' (подробности ниже).
2. Также RunMe.js позволяет выполнять запуск файла, имя которого указано в
выделенном тексте (подробности ниже).
3. Вызов RunMe.js с параметром "1" позволяет модифицировать командную строку,
которая будет выполнена для запуска или компиляции файла. Это, в частности,
позволяет указать дополнительные аргументы командной строки (подробности ниже).

1. Компиляция и запуск текущего файла
Скрипт RunMe.js состоит из двух логических частей:
1) верхняя, пользовательская, часть - это набор 'oCommands', описывающий
известные скрипту расширения файлов и что с ними делать. Сюда же относятся
пользовательские функции 'run_js', 'run_pas' и т.д. Предполагается, что
эту часть будет менять сам пользователь в зависимости от своих нужд, добавляя
новые расширения файлов и обработчики для них или же редактируя существующие.
2) нижняя, внутренняя, часть - это "движок" скрипта. Эту часть лучше не
трогать. Изменения здесь могут понадобиться только в том случае, если вы
хорошо разобрались, как скрипт работает в целом, и вам не хватает какого-то
вспомогательного функционала.
За компиляцию и запуск конкретных файлов отвечает пользовательская часть.
Для поддержки новых расширений файлов просто добавьте новый элемент в
набор 'oCommands' по аналогии с имеющимися.
Каждый элемент представляет собой пару "расширения" : "команда", где
расширения файлов перечисляются через пробел, а команда представляет собой
либо непосредственно командную строку, либо имя функции внутри RunMe.js,
которая будет вызвана для запуска/компиляции файлов с соответствующим
расширением. Вариант с функцией предусмотрен на тот случай, когда для запуска
файла нужно выполнить достаточно много действий - как пример, см. 'run_cpp'.
При добавлении новых элементов в 'oCommands' всегда оставляйте элемент
"" : ":run_anyfile(\"%f\")" самым последним в наборе.
При анализе расширения файла элементы в 'oCommands' просматриваются по
порядку, сверху вниз. Срабатывает первый из элементов, соответствующий
указанному расширению файла.

2. Запуск файла, указанного в выделенном тексте
Пример: набираем в редакторе "calc.exe", выделяем "calc.exe", запускаем
RunMe.js - и, вуаля, калькулятор перед нами.
Точно так же мы можем выделить и запустить .bat, .reg и прочие файлы по
их полному пути и расширению, например: "C:\Tools\SomeCommands.bat".
В выделенном тексте также поддерживаются %a, %d, %e, %f и %n, соответствующие
текущему файлу (если он сохранён).
Если выделенный текст не может быть распознан как имя файла, который можно
запустить, то RunMe.js работает в обычном режиме - пытается найти подходящую
команду для расширения физического файла.
Распознавание имени файла в выделенном тексте сделано очень просто:
1) выделенный текст не должен включать больше одной строки;
2) выделенный текст должен оканчиваться расширением файла, перечисленным
либо в 'oCommands', либо в 'isSupportedFileExtFromSelectedText'.
Фильтр по расширениям добавлен из соображений того, чтобы отсеять текст
общего вида, например "some text.other text" - который хотя и содержит
точку, но явно не представляет собой имя файла. (Возможно, в функции
'isSupportedFileExtFromSelectedText' вместо проверки конкретных расширений
следует сделать проверку на некоторое регулярное выражение.)

3. Запуск с модификацией командной строки
Иногда нам не достаточно просто запустить файл, как есть, - в особенности
если это скрипт, принимающий некоторые входные аргументы. Для этой цели в
RunMe.js предусмотрен режим модификации командной строки.
У себя я это настроил с помощью плагина Hotkeys:
1) Run  | Call("Scripts::Main", 1, "RunMe.js")      | Ctrl + F9
2) Run2 | Call("Scripts::Main", 1, "RunMe.js", "1") | Ctrl + Shift + F9
При нажатии Ctrl+Shift+F9 я вижу что-то вроде:
  Command:
  cmd /c python "%f" || pause
Когда мне нужны дополнительные аргументы, я их просто вписываю в эту строку.
Например:
  Command:
  cmd /c python "%f" 1 2 "Hello world!" || pause
При этом RunMe.js запоминает изменённую команду - и показывает её при
следующем нажатии Ctrl+Shift+F9.
При этом обычный запуск (Ctrl+F9) ориентируется сугубо на содержимое самого
RunMe.js, не подставляя изменённую команду.
В случае команд, выполняющихся путём вызова функции из RunMe.js, мы видим
несколько другое:
  Command:
  :run_js("%d", "%n.%e")
Для поддержки аргументов в пользовательские функции был специально добавлен
необязательный параметр 'args'. По умолчанию он не указан, но мы можем его
добавить:
  Command:
  :run_js("%d", "%n.%e", '1 2 "Hello world!" ')
Обратите внимание на использование одинарных кавычек для возможности передачи
двойных кавычек как части аргументов.


Чтобы выяснить пути к Visual C++:
detect_vc.bat

Code:
@echo off

set PathToProgramFiles=%ProgramFiles%

set PathToProgramFilesx86=%ProgramFiles%
if "%ProgramFiles(x86)%" == "" goto programfiles_ok
set PathToProgramFilesx86=%ProgramFiles(x86)%
:programfiles_ok

set PathToMicrosoftSDKs=%PathToProgramFiles%\Microsoft SDKs
if exist "%PathToMicrosoftSDKs%" goto microsoftsdks_ok
set PathToMicrosoftSDKs=%PathToProgramFilesx86%\Microsoft SDKs
:microsoftsdks_ok

set PathToWindowsKits=%PathToProgramFiles%\Windows Kits
if exist "%PathToWindowsKits%" goto windowskits_ok
set PathToWindowsKits=%PathToProgramFilesx86%\Windows Kits
:windowskits_ok

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",
               "%PathToProgramFilesx86%\Microsoft Visual Studio 11.0\VC",
               "%PathToProgramFilesx86%\Microsoft Visual Studio 12.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:
        call :EchoUnquotedString "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:
            call :EchoUnquotedString "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:
            call :EchoUnquotedString "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
    )
    if "%~1" == "%PathToProgramFilesx86%\Microsoft Visual Studio 11.0\VC" (
        echo * VC11 /2012/ detected:
        goto DetectDetails_Proceed
    )
    if "%~1" == "%PathToProgramFilesx86%\Microsoft Visual Studio 12.0\VC" (
        echo * VC12 /2013/ detected:
        goto DetectDetails_Proceed
    )
:DetectDetails_Proceed   
    call :EchoUnquotedString "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",
                   "%PathToMicrosoftSDKs%\Windows\v6.0A",
                   "%PathToMicrosoftSDKs%\Windows\v7.0",
                   "%PathToMicrosoftSDKs%\Windows\v7.0A",
                   "%PathToMicrosoftSDKs%\Windows\v7.1",
                   "%PathToMicrosoftSDKs%\Windows\v7.1A",
                   "%PathToMicrosoftSDKs%\Windows\v8.0",
                   "%PathToMicrosoftSDKs%\Windows\v8.0A",
                   "%PathToMicrosoftSDKs%\Windows\v8.1",
                   "%PathToMicrosoftSDKs%\Windows\v8.1A",
                   "%PathToMicrosoftSDKs%\Windows\v9.0",
                   "%PathToMicrosoftSDKs%\Windows\v9.0A",
                   "%PathToMicrosoftSDKs%\Windows\v9.1",
                   "%PathToMicrosoftSDKs%\Windows\v9.1A",
                   "%PathToWindowsKits%\8.0",
                   "%PathToWindowsKits%\8.0A",
                   "%PathToWindowsKits%\8.1",
                   "%PathToWindowsKits%\8.1A",
                   "%PathToWindowsKits%\9.0",
                   "%PathToWindowsKits%\9.0A",
                   "%PathToWindowsKits%\9.1",
                   "%PathToWindowsKits%\9.1A"
                  ) do (
        if exist "%%~s" (
            if exist "%%~s\bin" (
                if exist "%%~s\lib" (
                    if exist "%%~s\include" (
                        call :EchoUnquotedString "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

:EchoUnquotedString
    echo %~1
goto End

:End


Last edited by DV on Wed Oct 30, 2013 5:16 pm; edited 19 times in total
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5398

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

Export highlighted text to HTML or BBCode.

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

//Arguments
var pFormat=AkelPad.GetArgValue("Format", "HTML");
var pEnclose=AkelPad.GetArgValue("Enclose", "<pre>${result}</pre>");
var pBR=AkelPad.GetArgValue("BR", "");
var bStrict=AkelPad.GetArgValue("Strict", false);
var bInfo=AkelPad.GetArgValue("Info", true);
var pInfoSize=AkelPad.GetArgValue("InfoSize", "1");

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var oSys=AkelPad.SystemFunction();
var dwSystemTextColor=oSys.Call("user32::GetSysColor", 8 /*COLOR_WINDOWTEXT*/);
var dwSystemBkColor=oSys.Call("user32::GetSysColor", 5 /*COLOR_WINDOW*/);
var lpGH;
var lpCallback;
var pText="";
var lpMemText=0;
var dwMemTextBytes;
var dwPrevColorCloseStart;
var dwPrevColorCloseEnd;
var dwPrevActiveTextColor;
var dwPrevActiveBkColor;
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 dwMemTextBytes
      dwMemTextBytes=0;
      dwPrevColorCloseStart=-1;
      dwPrevColorCloseEnd=-1;
      dwPrevActiveTextColor=-1;
      dwPrevActiveBkColor=-1;
      AkelPad.SendMessage(hWndEdit, 3595 /*AEM_HLGETHIGHLIGHT*/, 0, lpGH);

      if (lpMemText=AkelPad.MemAlloc(dwMemTextBytes + _TSIZE))
      {
        //Fill lpMemText
        dwMemTextBytes=0;
        dwPrevColorCloseStart=-1;
        dwPrevColorCloseEnd=-1;
        dwPrevActiveTextColor=-1;
        dwPrevActiveBkColor=-1;
        AkelPad.SendMessage(hWndEdit, 3595 /*AEM_HLGETHIGHLIGHT*/, 0, lpGH);

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

  if (pText)
  {
    if (pEnclose)
    {
      pText=pText.replace(/\$/g, "$$$$");
      pText=pEnclose.replace(/\$\{result\}/, pText);
    }
    if (bInfo)
    {
      if (bBBCode)
        pText+="[color=Purple][size=" + pInfoSize + "]* " + GetLangString(0) + " [URL=" + pScriptURL + "]CodePoster.js[/URL] " + GetLangString(1) + "[/size]" + "[/color]\r";
      else
      {
        if (bStrict)
          pText+="\r<span style=\"color:Purple; font-size:" + pInfoSize + ";\">* " + GetLangString(0) + " <a href=\"" + pScriptURL + "\">CodePoster.js</a> " + GetLangString(1) + "</span>\r";
        else
          pText+="\r<font color=\"Purple\" size=\"" + pInfoSize + "\">* " + 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 dwActiveBkColor=AkelPad.MemRead(hlp + (_X64?12:12) /*offsetof(AEHLPAINT, dwActiveBk)*/, 3 /*DT_DWORD*/);
  var dwPaintType=AkelPad.MemRead(hlp + (_X64?20:20) /*offsetof(AEHLPAINT, dwPaintType)*/, 3 /*DT_DWORD*/);
  var pColorOpen="";
  var pColorClose="";

  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 || (!bBBCode && bStrict && dwSystemBkColor != dwActiveBkColor))
    {
      if (dwMemTextBytes == dwPrevColorCloseEnd &&
          dwPrevActiveTextColor == dwActiveTextColor && (bBBCode || !bStrict || dwPrevActiveBkColor == dwActiveBkColor))
        dwMemTextBytes=dwPrevColorCloseStart;

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

    if (pColorClose)
    {
      dwPrevColorCloseStart=dwMemTextBytes - pColorClose.length * _TSIZE;
      dwPrevColorCloseEnd=dwMemTextBytes;
    }
    dwPrevActiveTextColor=dwActiveTextColor;
    dwPrevActiveBkColor=dwActiveBkColor;
  }

  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)
      dwMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + dwMemTextBytes:0, "\r", _TSTR) - _TSIZE;
    else
      dwMemTextBytes+=AkelPad.MemCopy(lpMemText?lpMemText + dwMemTextBytes:0, "\r" + pBR, _TSTR) - _TSIZE;
  }
  return 0;
}

function rgb2hex(dwColor)
{
  var pHexColor;

  pHexColor=dwColor.toString(16);
  pHexColor="000000".substr(pHexColor.length) + 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
Quote:
//Arguments
var pFormat=AkelPad.GetArgValue("Format", "HTML");
var pEnclose=AkelPad.GetArgValue("Enclose", "<pre>${result}</pre>");
var pBR=AkelPad.GetArgValue("BR", "");
var bStrict=AkelPad.GetArgValue("Strict", false);
var bInfo=AkelPad.GetArgValue("Info", true);
var pInfoSize=AkelPad.GetArgValue("InfoSize", "1");
* Подсвечено с помощью скрипта CodePoster.js для AkelPad


Last edited by Instructor on Sat Apr 12, 2014 5:29 pm; edited 19 times in total
Back to top
View user's profile Send private message Send e-mail
KDJ



Joined: 06 Mar 2010
Posts: 1394
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. 2014-07-28 (x86/x64)
//
// 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: regsvr32.exe 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 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 nOpacity    = 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 aLangs      = [];
var aFont;

ReadIni();
ReadInterfaceLang();

if (typeof AkelPad == "undefined")
{
  try
  {
    AkelPad = new ActiveXObject("AkelPad.Document");
    _X64    = AkelPad.Constants._X64;
  }
  catch (oError)
  {
    WScript.Echo(sTxtRegScripts);
    WScript.Quit();
  }
}

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_QWORD   = 2;
  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 (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 IDTOLANG      = 1004;
  var IDFROMLANGCB  = 1005;
  var IDTOLANGCB    = 1006;
  var IDSWITCHLANG  = 1007;
  var IDSWITCHALL   = 1008;
  var IDLISTEN1     = 1009;
  var IDLISTEN2     = 1010;
  var IDOPACMINUS   = 1011;
  var IDOPACPLUS    = 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;

  //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
  aWnd[IDUSE       ] = {Class: "STATIC",    Style: 0x50000000};
  aWnd[IDAPICB     ] = {Class: "COMBOBOX",  Style: 0x50200003, Txt: ""};
  aWnd[IDDETECTLANG] = {Class: "STATIC",    Style: 0x50000000, Txt: ""};
  aWnd[IDFROMLANG  ] = {Class: "STATIC",    Style: 0x50000000};
  aWnd[IDTOLANG    ] = {Class: "STATIC",    Style: 0x50000000};
  aWnd[IDFROMLANGCB] = {Class: "COMBOBOX",  Style: 0x50200103, Txt: ""};
  aWnd[IDTOLANGCB  ] = {Class: "COMBOBOX",  Style: 0x50200103, Txt: ""};
  aWnd[IDSWITCHLANG] = {Class: "BUTTON",    Style: 0x50000000, Txt: "<->"};
  aWnd[IDSWITCHALL ] = {Class: "BUTTON",    Style: 0x50000000, Txt: "<=>"};
  aWnd[IDLISTEN1   ] = {Class: "BUTTON",    Style: 0x50000000, Txt: sTxtListen};
  aWnd[IDLISTEN2   ] = {Class: "BUTTON",    Style: 0x50000000, Txt: sTxtListen};
  aWnd[IDOPACMINUS ] = {Class: "BUTTON",    Style: 0x50000000, Txt: "-"};
  aWnd[IDOPACPLUS  ] = {Class: "BUTTON",    Style: 0x50000000, Txt: "+"};
  aWnd[IDTRANSLATE ] = {Class: "BUTTON",    Style: 0x50000000};
  aWnd[IDOPTIONS   ] = {Class: "BUTTON",    Style: 0x50000000};
  aWnd[IDTXTSOURCE ] = {Class: "AkelEditW", Style: 0x50311104, Txt: sSource};
  aWnd[IDTXTTARGET ] = {Class: "AkelEditW", Style: 0x50311104, Txt: sTarget};

  aWndSet[IDINTERFACECB] = {Class: "COMBOBOX", Style: 0x50210103, X:  10, Y:  10, W: 150, H: 150, Txt: ""};
  aWndSet[IDINTERFACE  ] = {Class: "STATIC",   Style: 0x50000000, X: 165, Y:  13, W: 120, H:  13};
  aWndSet[IDEDITOPTIONS] = {Class: "BUTTON",   Style: 0x50000007, X:  10, Y:  40, W: 285, H: 185, Txt: ""};
  aWndSet[IDSOURCEINCB ] = {Class: "BUTTON",   Style: 0x50010003, X:  20, Y:  55, W: 270, H:  16};
  aWndSet[IDSOURCEWND  ] = {Class: "BUTTON",   Style: 0x50010003, X:  20, Y:  75, W: 270, H:  16};
  aWndSet[IDLOADTEXT   ] = {Class: "BUTTON",   Style: 0x50010003, X:  20, Y:  95, W: 270, H:  16};
  aWndSet[IDIMMEDIATE  ] = {Class: "BUTTON",   Style: 0x50010003, X:  20, Y: 115, W: 270, H:  16};
  aWndSet[IDWORDWRAP   ] = {Class: "BUTTON",   Style: 0x50010003, X:  20, Y: 135, W: 270, H:  16};
  aWndSet[IDFONTAP     ] = {Class: "BUTTON",   Style: 0x50010003, X:  20, Y: 155, W: 270, H:  16};
  aWndSet[IDFONTGUI    ] = {Class: "BUTTON",   Style: 0x50010003, X:  20, Y: 175, W: 270, H:  16};
  aWndSet[IDFONT       ] = {Class: "BUTTON",   Style: 0x50010000, X:  20, Y: 195, W: 170, H:  20, Txt: aFont.toString()};
  aWndSet[IDSORTLANG   ] = {Class: "BUTTON",   Style: 0x50000007, X: 305, Y: 160, W: 120, H:  65};
  aWndSet[IDSORTCODE   ] = {Class: "BUTTON",   Style: 0x50000009, X: 315, Y: 180, W:  90, H:  16};
  aWndSet[IDSORTNAME   ] = {Class: "BUTTON",   Style: 0x50000009, X: 315, Y: 200, W:  90, H:  16};
  aWndSet[IDAPINAME1   ] = {Class: "BUTTON",   Style: 0x50000007, X:  10, Y: 235, W: 415, H:  75};
  aWndSet[IDAPIKEYS1   ] = {Class: "STATIC",   Style: 0x50000000, X:  20, Y: 255, W:  70, H:  13, Txt: "AppID:"};
  aWndSet[IDAPIKEY1    ] = {Class: "EDIT",     Style: 0x50810080, X:  90, Y: 255, W: 325, H:  20, Txt: ""};
  aWndSet[IDREGIST1    ] = {Class: "STATIC",   Style: 0x50000000, X:  20, Y: 280, W:  70, H:  13};
  aWndSet[IDREGURL1    ] = {Class: "EDIT",     Style: 0x50810880, X:  90, Y: 280, W: 325, H:  20, Txt: aAPIs[1].RegistrURL};
  aWndSet[IDOK         ] = {Class: "BUTTON",   Style: 0x50010001, X: 345, Y:  10, W:  80, H:  23};
  aWndSet[IDCANCEL     ] = {Class: "BUTTON",   Style: 0x50010000, X: 345, Y:  35, W:  80, H:  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      ].Txt = sTxtUse;
  aWnd[IDFROMLANG ].Txt = sTxtFromLang;
  aWnd[IDTOLANG   ].Txt = sTxtToLang;
  aWnd[IDLISTEN1  ].Txt = sTxtListen;
  aWnd[IDLISTEN2  ].Txt = sTxtListen;
  aWnd[IDTRANSLATE].Txt = sTxtTranslate;
  aWnd[IDOPTIONS  ].Txt = sTxtOptions;

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

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

    for (i = IDUSE; i < aWnd.length; ++i)
    {
      aWnd[i].Handle =
        oSys.Call("User32::CreateWindowExW",
          0,             //dwExStyle
          aWnd[i].Class, //lpClassName
          0,             //lpWindowName
          aWnd[i].Style, //dwStyle
          aWnd[i].X,     //x
          aWnd[i].Y,     //y
          aWnd[i].W,     //nWidth
          aWnd[i].H,     //nHeight
          hWnd,          //hWndParent
          i,             //ID
          hInstanceDLL,  //hInstance
          0);            //lpParam
      SetWindowFont(aWnd[i].Handle, hGuiFont);
      SetWindowText(aWnd[i].Handle, aWnd[i].Txt);
    }

    SendMessage(hWnd, 0x0080 /*WM_SETICON*/, 0 /*ICON_SMALL*/, hIcon);
    SendMessage(hWnd, 0x0080 /*WM_SETICON*/, 1 /*ICON_BIG*/, hIcon);

    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;
          SendMessage(aWnd[IDTXTSOURCE].Handle, 0x00B1 /*EM_SETSEL*/, 0, -1);
          SendMessage(aWnd[IDTXTSOURCE].Handle, 0x00C2 /*EM_REPLACESEL*/, 1, sSource);
        }
      }
      else if (SendMessage(hEditWnd, 3125 /*AEM_GETSEL*/, 0, 0))
      {
        sSource = AkelPad.GetSelText(3 /*"\r\n"*/).substr(0, aAPIs[oSelect.API].TextLen);
        oSelect.Source1 = oSelect.Source2 = 0;
        SendMessage(aWnd[IDTXTSOURCE].Handle, 0x00B1 /*EM_SETSEL*/, 0, -1);
        SendMessage(aWnd[IDTXTSOURCE].Handle, 0x00C2 /*EM_REPLACESEL*/, 1, sSource);
      }
    }

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

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

    SetEditWordWrap();
    SetEditFont();

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

    //Fill combobox APIs
    for (i = 0; i < aAPIs.length; ++i)
      SendMessage(aWnd[IDAPICB].Handle, CB_ADDSTRING, 0, aAPIs[i].Name);
    SendMessage(aWnd[IDAPICB].Handle, CB_SETCURSEL, oSelect.API, 0);

    FillComboFromLang();
    FillComboToLang();
    ShowDetectLang(true);
    EnableListenWindows();

    if (nOpacity < 255)
      SetOpacityLevel(hWnd, nOpacity);

    ShowSourceWindow();

    if (((! bSourceWnd) || (bSourceWnd && bLoadText)) && (bImmediate))
      PostMessage(hWnd, 0x8000 /*WM_APP*/, 0, 0);
  }

  else if (uMsg == 0x8000 /*WM_APP*/)
  {
    oSys.Call("User32::UpdateWindow", hWnd);
    PostMessage(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].Handle) ||
           (oSys.Call("User32::GetFocus") == aWnd[IDTXTTARGET].Handle)))
        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)
      PostMessage(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)
          PostMessage(hWnd, 273 /*WM_COMMAND*/, IDSWITCHALL, 0);
      }
      else
        PostMessage(hWnd, 273 /*WM_COMMAND*/, IDSWITCHLANG, 0);
    }
    else if (wParam == 0x70) //VK_F1
      oSys.Call("User32::SetFocus", aWnd[IDAPICB].Handle);
    else if (wParam == 0x31) //1 key
      oSys.Call("User32::SetFocus", aWnd[IDFROMLANGCB].Handle);
    else if (wParam == 0x32) //2 key
      oSys.Call("User32::SetFocus", aWnd[IDTOLANGCB].Handle);
    else if ((wParam == 109) || (wParam == 189)) //Num- or -
      PostMessage(hWnd, 273 /*WM_COMMAND*/, IDOPACMINUS, 0);
    else if ((wParam == 107) || (wParam == 187)) //Num+ or +
      PostMessage(hWnd, 273 /*WM_COMMAND*/, IDOPACPLUS, 0);
    else if (wParam == 0x53) //S key
      Settings();
  }

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

  else if (uMsg == 0x004E) //WM_NOTIFY
  {
    if (AkelPad.MemRead(lParam + (_X64 ? 16 : 8), DT_DWORD) == 0x0702 /*EN_SELCHANGE*/)
    {
      if (wParam == IDTXTSOURCE)
      {
        oSelect.Source1 = AkelPad.MemRead(lParam + (_X64 ? 24 : 12), DT_DWORD);
        oSelect.Source2 = AkelPad.MemRead(lParam + (_X64 ? 28 : 16), DT_DWORD);
      }
      else if (wParam == IDTXTTARGET)
      {
        oSelect.Target1 = AkelPad.MemRead(lParam + (_X64 ? 24 : 12), DT_DWORD);
        oSelect.Target2 = AkelPad.MemRead(lParam + (_X64 ? 28 : 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
    SetWindowText(aWnd[nListenID].Handle, (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)
        PostMessage(lParam, CB_SHOWDROPDOWN, 1, 0);
      if (nHiwParam == CBN_SELCHANGE)
      {
        var nSel1 = oSelect.Source1;
        var nSel2 = oSelect.Source2;

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

        SetWindowText(aWnd[IDTXTSOURCE].Handle, GetWindowText(aWnd[IDTXTSOURCE].Handle).substr(0, aAPIs[oSelect.API].TextLen));
        SendMessage(aWnd[IDTXTSOURCE].Handle, 0x00B1 /*EM_SETSEL*/, nSel1, nSel2);

        FillComboFromLang(SendMessage(aWnd[IDFROMLANGCB].Handle, CB_GETITEMDATA, oSelect.FromLang, 0));
        FillComboToLang(SendMessage(aWnd[IDTOLANGCB].Handle, CB_GETITEMDATA, oSelect.ToLang, 0));

        ShowDetectLang(false);
        EnableListenWindows();
      }
      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)
        PostMessage(lParam, CB_SHOWDROPDOWN, 1, 0);
      else if (nHiwParam == CBN_SELCHANGE)
      {
        if (nLowParam == IDFROMLANGCB)
        {
          oSelect.FromLang = SendMessage(aWnd[IDFROMLANGCB].Handle, CB_GETCURSEL, 0, 0);
          FillComboToLang(SendMessage(aWnd[IDTOLANGCB].Handle, CB_GETITEMDATA, oSelect.ToLang, 0));
        }
        else
          oSelect.ToLang = SendMessage(aWnd[IDTOLANGCB].Handle, CB_GETCURSEL, 0, 0);

        ShowDetectLang(false);
        EnableListenWindows();
      }
      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].Handle);
      }
      else if (nHiwParam == 0x0300) //EN_CHANGE
      {
        ShowDetectLang(false);
        EnableListenWindows();
      }
    }
    else if (nLowParam == IDTXTTARGET)
    {
      if (nHiwParam == 0x0100) //EN_SETFOCUS
      {
        hFocus = lParam;
        SetEditStyle(lParam, aWnd[IDTXTSOURCE].Handle);
      }
    }
    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].Handle, -1);
      else if (nLowParam == IDLISTEN2)
        Listen(aWnd[IDTXTTARGET].Handle, -1);
      else if (nLowParam == IDOPACMINUS)
      {
        if (nOpacity > 55)
          SetOpacityLevel(hWnd, -2);
      }
      else if (nLowParam == IDOPACPLUS)
      {
        if (nOpacity < 255)
          SetOpacityLevel(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].Handle);
    AkelPad.WindowUnsubClass(aWnd[IDTXTTARGET].Handle);
    WriteIni();
    //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 SendMessage(hWnd, uMsg, wParam, lParam)
{
  return oSys.Call("User32::SendMessageW", hWnd, uMsg, wParam, lParam);
}

function PostMessage(hWnd, uMsg, wParam, lParam)
{
  return oSys.Call("User32::PostMessageW", hWnd, uMsg, wParam, lParam);
}

function SetWindowFont(hWnd, hFont)
{
  SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, true);
}

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

function SetWindowText(hWnd, sText)
{
  oSys.Call("User32::SetWindowTextW", hWnd, sText.substr(0, nBufSize - 1).replace(/\r$/, ""));
}

function SetEditFont()
{
  var hFont;

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

  SetWindowFont(aWnd[IDTXTSOURCE].Handle, hFont)
  SetWindowFont(aWnd[IDTXTTARGET].Handle, hFont)
}

function GetEditSelText(hWnd)
{
  SendMessage(hWnd, 1086 /*EM_GETSELTEXT*/, 0, lpBuffer);
  return AkelPad.MemRead(lpBuffer, DT_UNICODE);
}

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

function SetEditStyle(hWnd1, hWnd2)
{
  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*/);
  }

  SendMessage(hWndDlg, 11 /*WM_SETREDRAW*/, 1, 0);
  oSys.Call("User32::InvalidateRect", hWndDlg, 0, 0);
}

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 lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
  var nW, nH, nW2;

  oSys.Call("User32::GetClientRect", hWnd, lpRect);
  nW  = AkelPad.MemRead(lpRect +  8, DT_DWORD);
  nH  = AkelPad.MemRead(lpRect + 12, DT_DWORD);
  nW2 = Math.round(nW / 2);
  AkelPad.MemFree(lpRect);

  oSys.Call("User32::SetWindowPos", aWnd[IDUSE].Handle, 0,
    10,
    10,
    80,
    13,
    0x14 /*SWP_NOACTIVATE|SWP_NOZORDER*/);
  oSys.Call("User32::SetWindowPos", aWnd[IDAPICB].Handle, 0,
    10,
    25,
    80,
    100,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDDETECTLANG].Handle, 0,
    10,
    60,
    210,
    13,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDFROMLANG].Handle, 0,
    nW2 - 215,
    10,
    200,
    13,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDTOLANG].Handle, 0,
    nW2 + 15,
    10,
    200,
    13,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDFROMLANGCB].Handle, 0,
    nW2 - 215,
    25,
    200,
    420,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDTOLANGCB].Handle, 0,
    nW2 + 15,
    25,
    200,
    420,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDSWITCHLANG].Handle, 0,
    nW2 - 15,
    25,
    30,
    21,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDSWITCHALL].Handle, 0,
    nW2 - 15,
    50,
    30,
    21,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDLISTEN1].Handle, 0,
    nW2 - 100,
    50,
    80,
    21,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDLISTEN2].Handle, 0,
    nW2 + 20,
    50,
    80,
    21,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDOPACMINUS].Handle, 0,
    nW - 32,
    0,
    16,
    16,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDOPACPLUS].Handle, 0,
    nW - 16,
    0,
    16,
    16,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDTRANSLATE].Handle, 0,
    nW - 90,
    25,
    80,
    21,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDOPTIONS].Handle, 0,
    nW - 90,
    50,
    80,
    21,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDTXTSOURCE].Handle, 0,
    10,
    75,
    nW2 - 15,
    nH - 85,
    0x14);
  oSys.Call("User32::SetWindowPos", aWnd[IDTXTTARGET].Handle, 0,
    bSourceWnd ? nW2 + 5 : 10,
    75,
    bSourceWnd ? nW - nW2 - 15 : nW - 20,
    nH - 85,
    0x14);
}

function PaintSizeGrip(hWnd)
{
  var lpPaint = AkelPad.MemAlloc(_X64 ? 72 : 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 FillComboFromLang(nFromLang)
{
  var nPos;
  var i;

  SendMessage(aWnd[IDFROMLANGCB].Handle, CB_RESETCONTENT, 0, 0);

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

  for (i = 0; i < aLangs.length; ++i)
  {
    if (aLangs[i][oSelect.API + 3])
    {
      nPos = SendMessage(aWnd[IDFROMLANGCB].Handle, CB_ADDSTRING, 0, aLangs[i][Number(! bSortCode)] + " - "  + aLangs[i][Number(bSortCode)]);
      SendMessage(aWnd[IDFROMLANGCB].Handle, CB_SETITEMDATA, nPos, i);
    }
  }

  if (typeof nFromLang == "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 < SendMessage(aWnd[IDFROMLANGCB].Handle, CB_GETCOUNT, 0, 0); ++i)
        {
          if (WScript.Arguments(0) == aLangs[SendMessage(aWnd[IDFROMLANGCB].Handle, CB_GETITEMDATA, i, 0)][0])
          {
            oSelect.FromLang = i;
            break;
          }
        }
      }
    }
  }
  else
  {
    oSelect.FromLang = 0;
    for (i = 0; i < SendMessage(aWnd[IDFROMLANGCB].Handle, CB_GETCOUNT, 0, 0); ++i)
    {
      if (nFromLang == SendMessage(aWnd[IDFROMLANGCB].Handle, CB_GETITEMDATA, i, 0))
      {
        oSelect.FromLang = i;
        break;
      }
    }
  }

  SendMessage(aWnd[IDFROMLANGCB].Handle, CB_SETCURSEL, oSelect.FromLang, 0);
}

function FillComboToLang(nToLang)
{
  var nFromLang = SendMessage(aWnd[IDFROMLANGCB].Handle, CB_GETITEMDATA, oSelect.FromLang, 0);
  var nPos;
  var i;

  SendMessage(aWnd[IDTOLANGCB].Handle, CB_RESETCONTENT, 0, 0);

  if ((nFromLang > -1) && (aLangs[nFromLang][oSelect.API + 3]) instanceof Array)
  {
    for (i = 0; i < aLangs[nFromLang][oSelect.API + 3].length; ++i)
    {
      nPos = SendMessage(aWnd[IDTOLANGCB].Handle, CB_ADDSTRING, 0, aLangs[aLangs[nFromLang][oSelect.API + 3][i]][Number(! bSortCode)] + " - "  + aLangs[aLangs[nFromLang][oSelect.API + 3][i]][Number(bSortCode)]);
      SendMessage(aWnd[IDTOLANGCB].Handle, CB_SETITEMDATA, nPos, aLangs[nFromLang][oSelect.API + 3][i]);
    }
  }
  else
  {
    for (i = 0; i < aLangs.length; ++i)
    {
      if (aLangs[i][oSelect.API + 3])
      {
        nPos = SendMessage(aWnd[IDTOLANGCB].Handle, CB_ADDSTRING, 0, aLangs[i][Number(! bSortCode)] + " - "  + aLangs[i][Number(bSortCode)]);
        SendMessage(aWnd[IDTOLANGCB].Handle, CB_SETITEMDATA, nPos, i);
      }
    }
  }

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

  SendMessage(aWnd[IDTOLANGCB].Handle, CB_SETCURSEL, oSelect.ToLang, 0);
}

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

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


  FillComboToLang(0);
  oSelect.ToLang = 0;

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

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

  if (bSwitchText)
  {
    sTarget = GetWindowText(aWnd[IDTXTSOURCE].Handle);
    sSource = GetWindowText(aWnd[IDTXTTARGET].Handle).substr(0, aAPIs[oSelect.API].TextLen);

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

    SetWindowText(aWnd[IDTXTSOURCE].Handle, sSource);
    SetWindowText(aWnd[IDTXTTARGET].Handle, sTarget);

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

  ShowDetectLang(false);
  EnableListenWindows();
}

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

function EnableListenWindows()
{
  var nFromLang = SendMessage(aWnd[IDFROMLANGCB].Handle, CB_GETITEMDATA, oSelect.FromLang, 0);
  var nToLang   = SendMessage(aWnd[IDTOLANGCB  ].Handle, CB_GETITEMDATA, oSelect.ToLang, 0);

  if (nFromLang < 0)
    nFromLang = nDetectLang;

  if (nFromLang < 0)
    oSys.Call("User32::EnableWindow", aWnd[IDLISTEN1].Handle, 0);
  else
    oSys.Call("User32::EnableWindow", aWnd[IDLISTEN1].Handle, aLangs[nFromLang][2]);

  oSys.Call("User32::EnableWindow", aWnd[IDLISTEN2].Handle, aLangs[nToLang][2]);
}

function ShowSourceWindow()
{
  if (bSourceWnd)
  {
    aWnd[IDTXTTARGET].X = aWnd[IDTXTTARGET].X + aWnd[IDTXTTARGET].W - aWnd[IDTXTSOURCE].W;
    aWnd[IDTXTTARGET].W = aWnd[IDTXTSOURCE].W;
    hFocus = aWnd[IDTXTSOURCE].Handle;
  }
  else
  {
    aWnd[IDTXTTARGET].W = aWnd[IDTXTTARGET].X + aWnd[IDTXTTARGET].W - aWnd[IDTXTSOURCE].X;
    aWnd[IDTXTTARGET].X = aWnd[IDTXTSOURCE].X;
    hFocus = aWnd[IDTXTTARGET].Handle;
  }

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

function SetOpacityLevel(hWnd, nLevel)
{
  var nStyle = oSys.Call("User32::GetWindowLongW", hWnd, -20 /*GWL_EXSTYLE*/);
  var lpAlpha;

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

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

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

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

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

    if (bEntireText)
      sText = GetWindowText(hWnd);
    else
      sText = GetEditSelText(hWnd);

    if (sText) AkelPad.ReplaceSel(sText, 1);
  }
}

function PasteTextFromAP(hWnd, bEntireText)
{
  if (hEditWnd && (AkelPad.GetSelStart() != AkelPad.GetSelEnd()))
  {
    var sText = AkelPad.GetSelText(3 /*"\r\n"*/);

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

    SendMessage(hWnd, 0x00C2 /*EM_REPLACESEL*/, 1, sText);
  }
}

function CopyEntireTextToCB(hWnd)
{
  var sText = GetWindowText(hWnd);

  if (sText) AkelPad.SetClipboardText(sText);
}

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

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



Last edited by KDJ on Mon Jul 28, 2014 7:54 pm; edited 37 times in total
Back to top
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1394
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].Handle) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 21, sTxtCut + "\tAlt+X");
  oSys.Call("User32::AppendMenuW", hMenu1,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTSOURCE].Handle) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 22, sTxtCopyCB + "\tAlt+C");
  oSys.Call("User32::AppendMenuW", hMenu1,
            SendMessage(aWnd[IDTXTSOURCE].Handle, 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].Handle) ? 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].Handle)) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 25, sTxtInsertAP + "\tShift+Alt+C");
  oSys.Call("User32::AppendMenuW", hMenu1,
            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].Handle) && oSys.Call("User32::IsWindowEnabled", aWnd[IDLISTEN1].Handle)) ? 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].Handle) ? MF_STRING : MF_GRAYED,
            (1 << 8) | 28, sTxtTranslate + "\tCtrl+Enter");
  oSys.Call("User32::AppendMenuW", hMenu1,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTSOURCE].Handle) ? 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].Handle) ? MF_STRING : MF_GRAYED,
            (2 << 8) | 21, sTxtCut + "\tAlt+X");
  oSys.Call("User32::AppendMenuW", hMenu2,
            oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTTARGET].Handle) ? MF_STRING : MF_GRAYED,
            (2 << 8) | 22, sTxtCopyCB + "\tAlt+C");
  oSys.Call("User32::AppendMenuW", hMenu2,
            SendMessage(aWnd[IDTXTTARGET].Handle, 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].Handle) ? 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].Handle)) ? MF_STRING : MF_GRAYED,
            (2 << 8) | 25, sTxtInsertAP + "\tShift+Alt+C");
  oSys.Call("User32::AppendMenuW", hMenu2,
            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].Handle) && oSys.Call("User32::IsWindowEnabled", aWnd[IDLISTEN2].Handle)) ? 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) + 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].Handle) ? 1 : 2;

    oSys.Call("User32::IsWindowEnabled", aWnd[IDLISTEN1 + nWnd - 1].Handle)

    oSys.Call("User32::AppendMenuW", hMenu,
              SendMessage(hWnd, 0x00C6 /*EM_CANUNDO*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 1, sTxtUndo + "\tCtrl+Z");
    oSys.Call("User32::AppendMenuW", hMenu,
              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,
              SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 3, sTxtCut + "\tCtrl+X");
    oSys.Call("User32::AppendMenuW", hMenu,
              SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 4, sTxtCopyCB + "\tCtrl+C");
    oSys.Call("User32::AppendMenuW", hMenu,
              SendMessage(hWnd, 0x0432 /*EM_CANPASTE*/, 0, 0) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 5, sTxtPasteCB + "\tCtrl+V");
    oSys.Call("User32::AppendMenuW", hMenu,
              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 && SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0)) ? MF_STRING : MF_GRAYED,
              (nWnd << 8) | 8, sTxtInsertAP + "\tCtrl+Shift+C");
    oSys.Call("User32::AppendMenuW", hMenu,
              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,
              (SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0) && oSys.Call("User32::IsWindowEnabled", aWnd[IDLISTEN1 + nWnd - 1].Handle)) ? 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,
                SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0) ? MF_STRING : MF_GRAYED,
                (nWnd << 8) | 11, sTxtTranslate + "\tShift+Enter");
      oSys.Call("User32::AppendMenuW", hMenu,
                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].Handle : aWnd[IDTXTTARGET].Handle;

  //Selected text
  if (nCmd == 1)
    SendMessage(hWnd, 0x00C7 /*EM_UNDO*/, 0, 0);
  else if (nCmd == 2)
    SendMessage(hWnd, 0x0454 /*EM_REDO*/, 0, 0);
  else if (nCmd == 3)
    SendMessage(hWnd, 0x0300 /*WM_CUT*/, 0, 0);
  else if (nCmd == 4)
    SendMessage(hWnd, 0x0301 /*WM_COPY*/, 0, 0);
  else if (nCmd == 5)
    SendMessage(hWnd, 0x0302 /*WM_PASTE*/, 0, 0);
  else if (nCmd == 6)
    SendMessage(hWnd, 0x0303 /*WM_CLEAR*/, 0, 0);
  else if (nCmd == 7)
    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
                      SettingsCallback); //lpParam

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

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

  if (uMsg == 1) //WM_CREATE
  {
    for (i = 1100; i < aWndSet.length; ++i)
    {
      aWndSet[i].Handle =
        oSys.Call("User32::CreateWindowExW",
          0,                //dwExStyle
          aWndSet[i].Class, //lpClassName
          0,                //lpWindowName
          aWndSet[i].Style, //dwStyle
          aWndSet[i].X,     //x
          aWndSet[i].Y,     //y
          aWndSet[i].W,     //nWidth
          aWndSet[i].H,     //nHeight
          hWnd,             //hWndParent
          i,                //ID
          hInstanceDLL,     //hInstance
          0);               //lpParam
      SetWindowFont(aWndSet[i].Handle, hGuiFont);
      SetWindowText(aWndSet[i].Handle, aWndSet[i].Txt);
    }

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

    SendMessage(aWndSet[IDAPIKEY1].Handle, 197 /*EM_SETLIMITTEXT*/, 128, 0);
    SetWindowText(aWndSet[IDAPIKEY1].Handle, aAPIs[1].APIkeyP);

    FillComboInterface();

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

    hFocusSet = aWndSet[IDINTERFACECB].Handle;
  }

  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].Handle))
        PostMessage(hWnd, 273 /*WM_COMMAND*/, IDOK, 0);
      else if (wParam == 27 /*VK_ESCAPE*/)
        PostMessage(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].Handle,
                SendMessage(aWndSet[IDSOURCEWND].Handle, 240 /*BM_GETCHECK*/, 0, 0));
      oSys.Call("User32::EnableWindow", aWndSet[IDIMMEDIATE].Handle,
                (! SendMessage(aWndSet[IDSOURCEWND].Handle, 240 /*BM_GETCHECK*/, 0, 0)) ||
                (SendMessage(aWndSet[IDSOURCEWND].Handle, 240 /*BM_GETCHECK*/, 0, 0) &&
                 SendMessage(aWndSet[IDLOADTEXT].Handle, 240 /*BM_GETCHECK*/, 0, 0)));
    }
    else if (nLowParam == IDFONTAP)
    {
      if (SendMessage(aWndSet[IDFONTAP].Handle, 240 /*BM_GETCHECK*/, 0, 0))
        SendMessage(aWndSet[IDFONTGUI].Handle, 241 /*BM_SETCHECK*/, 0, 0);

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

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

        ShowDetectLang(true);
      }

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

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

      SetEditWordWrap();
      SetEditFont();
      ShowSourceWindow();
      FillComboFromLang(SendMessage(aWnd[IDFROMLANGCB].Handle, CB_GETITEMDATA, oSelect.FromLang, 0));
      FillComboToLang(SendMessage(aWnd[IDTOLANGCB].Handle, CB_GETITEMDATA, oSelect.ToLang, 0));

      aAPIs[1].APIkeyP = GetWindowText(aWndSet[IDAPIKEY1].Handle);

      PostMessage(hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
    else if (nLowParam == IDCANCEL)
      PostMessage(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;

  nPos = SendMessage(aWndSet[IDINTERFACECB].Handle, CB_ADDSTRING, 0, "English (built-in)");
  SendMessage(aWndSet[IDINTERFACECB].Handle, CB_SETITEMDATA, nPos, -1);
  SendMessage(aWndSet[IDINTERFACECB].Handle, CB_SETCURSEL, nPos, 0);

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

      if (sLangName)
      {
        nPos = SendMessage(aWndSet[IDINTERFACECB].Handle, CB_ADDSTRING, 0, sLangName);

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

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

  AkelPad.MemCopy(lpCF,                       nCFSize, DT_DWORD); //lStructSize
  AkelPad.MemCopy(lpCF + (_X64 ?  8 :  4),    hWndOwn, DT_QWORD); //hwndOwner
  AkelPad.MemCopy(lpCF + (_X64 ? 24 : 12),       lpLF, DT_QWORD); //lpLogFont
  AkelPad.MemCopy(lpCF + (_X64 ? 36 : 20), 0x00010049, DT_DWORD); //Flags=CF_ENABLEHOOK|CF_FORCEFONTEXIST|CF_INITTOLOGFONTSTRUCT|CF_SCREENFONTS
  AkelPad.MemCopy(lpCF + (_X64 ? 56 : 32), lpCallback, DT_QWORD); //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 + (_X64 ? 8 : 4), DT_QWORD);
    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 Translate(bSelection, bAddToTarget)
{
  var sMethod    = "POST";
  var sAPIkey    = aAPIs[oSelect.API].APIkeyP ? aAPIs[oSelect.API].APIkeyP : aAPIs[oSelect.API].APIkey;
  var nFromLang  = SendMessage(aWnd[IDFROMLANGCB].Handle, CB_GETITEMDATA, oSelect.FromLang, 0);
  var sFromLang  = (nFromLang < 0) ? "" : aLangs[nFromLang][0];
  var sToLang    = aLangs[SendMessage(aWnd[IDTOLANGCB].Handle, CB_GETITEMDATA, oSelect.ToLang, 0)][0];
  var nTargetLen = oSys.Call("User32::GetWindowTextLengthW", aWnd[IDTXTTARGET].Handle)
  var nTargetSel = 0;
  var sLangName;
  var sURL;
  var sSend;
  var oRequest;
  var oResponse;
  var i, n;

  SetWindowText(aWnd[IDDETECTLANG].Handle, sTxtWait);
  nDetectLang = -1;

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

  if (bSourceWnd)
  {
    if (bSelection && SendMessage(aWnd[IDTXTSOURCE].Handle, 3125 /*AEM_GETSEL*/, 0, 0))
      sSource = GetEditSelText(aWnd[IDTXTSOURCE].Handle);
    else
      sSource = GetWindowText(aWnd[IDTXTSOURCE].Handle);
  }
  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 (nFromLang < 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 (nFromLang < 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.net/tr.json/translate";
    sSend = "lang=" + sFromLang + "-" + sToLang + "&text=" + encodeURIComponent(sSource) + "&srv=tr-text";
  }

  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;

  SendMessage(aWnd[IDTXTTARGET].Handle, 0x00B1 /*EM_SETSEL*/, bAddToTarget ? -1 : 0, -1);

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

  SendMessage(aWnd[IDTXTTARGET].Handle, 0x00C2 /*EM_REPLACESEL*/, 1, sTarget);
  SendMessage(aWnd[IDTXTTARGET].Handle, 0x00B1 /*EM_SETSEL*/, nTargetSel, nTargetSel);

  if (nFromLang < 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;

    SetWindowText(aWnd[IDDETECTLANG].Handle, sTxtAutoDetect + ": " + sLangName);
  }
  else
    SetWindowText(aWnd[IDDETECTLANG].Handle, "");

  EnableListenWindows();
}

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)
{
  SetWindowText(aWnd[IDDETECTLANG].Handle, "");
  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 = SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0);

    if (nSelection)
      sSpeechText = GetEditSelText(hWnd);
    else
      sSpeechText = GetWindowText(hWnd);

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

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

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

    if (! aLangs[nSpeechLang][2])
    {
      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;

  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);
  SetWindowText(aWnd[nListenID].Handle, sTxtListen);
}

function ReadIni()
{
  var oFile;

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

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

  oWndPos.Max = oSys.Call("User32::IsZoomed", hWndDlg);
  sSource     = GetWindowText(aWnd[IDTXTSOURCE].Handle).replace(/[\\"]/g, "\\$&").replace(/\r/g, "\\r").replace(/\n/g, "\\n");
  sTarget     = GetWindowText(aWnd[IDTXTTARGET].Handle).replace(/[\\"]/g, "\\$&").replace(/\r/g, "\\r").replace(/\n/g, "\\n");

  sIniTxt = 'nOpacity='    + nOpacity    + ';\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.replace(/[\\"]/g, "\\$&") + '";\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()
{
  BuiltInLang();

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

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

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

      oFile.Close();
    }
  }
}

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] = ["af",    "Afrikaans",           1, 1, 0, 0]; //TTS, Google, Bing, Yandex
  aLangs[ 1] = ["ar",    "Arabic",              1, 1, 1, 1];
  aLangs[ 2] = ["az",    "Azerbaijani",         0, 1, 0, 1];
  aLangs[ 3] = ["be",    "Belarusian",          0, 1, 0, 1];
  aLangs[ 4] = ["bg",    "Bulgarian",           0, 1, 1, 1];
  aLangs[ 5] = ["bs",    "Bosnian",             1, 1, 0, 1];
  aLangs[ 6] = ["ca",    "Catalan",             1, 1, 1, 1];
  aLangs[ 7] = ["cs",    "Czech",               1, 1, 1, 1];
  aLangs[ 8] = ["cy",    "Welsh",               1, 1, 1, 0];
  aLangs[ 9] = ["da",    "Danish",              1, 1, 1, 1];
  aLangs[10] = ["de",    "German",              1, 1, 1, 1];
  aLangs[11] = ["el",    "Greek",               1, 1, 1, 1];
  aLangs[12] = ["en",    "English",             1, 1, 1, 1];
  aLangs[13] = ["eo",    "Esperanto",           1, 1, 0, 0];
  aLangs[14] = ["es",    "Spanish",             1, 1, 1, 1];
  aLangs[15] = ["et",    "Estonian",            0, 1, 1, 1];
  aLangs[16] = ["fa",    "Persian",             0, 1, 1, 0];
  aLangs[17] = ["fi",    "Finnish",             1, 1, 1, 1];
  aLangs[18] = ["fr",    "French",              1, 1, 1, 1];
  aLangs[19] = ["ga",    "Irish",               0, 1, 0, 0];
  aLangs[20] = ["gl",    "Galician",            0, 1, 0, 0];
  aLangs[21] = ["hi",    "Hindi",               1, 1, 1, 0];
  aLangs[22] = ["hr",    "Croatian",            1, 1, 0, 1];
  aLangs[23] = ["ht",    "Haitian Creole",      1, 1, 1, 0];
  aLangs[24] = ["hu",    "Hungarian",           1, 1, 1, 1];
  aLangs[25] = ["hy",    "Armenian",            1, 1, 0, 1];
  aLangs[26] = ["id",    "Indonesian",          1, 1, 1, 1];
  aLangs[27] = ["is",    "Icelandic",           1, 1, 0, 1];
  aLangs[28] = ["it",    "Italian",             1, 1, 1, 1];
  aLangs[29] = ["iw",    "Hebrew",              0, 1, 1, 0];
  aLangs[30] = ["ja",    "Japanese",            1, 1, 1, 0];
  aLangs[31] = ["ka",    "Georgian",            0, 1, 0, 1];
  aLangs[32] = ["ko",    "Korean",              1, 1, 1, 0];
  aLangs[33] = ["la",    "Latin",               1, 1, 0, 0];
  aLangs[34] = ["lt",    "Lithuanian",          0, 1, 1, 1];
  aLangs[35] = ["lv",    "Latvian",             1, 1, 1, 1];
  aLangs[36] = ["mk",    "Macedonian",          1, 1, 0, 1];
  aLangs[37] = ["ms",    "Malay",               0, 1, 1, 1];
  aLangs[38] = ["mt",    "Maltese",             0, 1, 1, 1];
  aLangs[39] = ["nl",    "Dutch",               1, 1, 1, 1];
  aLangs[40] = ["no",    "Norwegian",           1, 1, 1, 1];
  aLangs[41] = ["pl",    "Polish",              1, 1, 1, 1];
  aLangs[42] = ["pt",    "Portuguese",          1, 1, 1, 1];
  aLangs[43] = ["ro",    "Romanian",            1, 1, 1, 1];
  aLangs[44] = ["ru",    "Russian",             1, 1, 1, 1];
  aLangs[45] = ["sk",    "Slovak",              1, 1, 1, 1];
  aLangs[46] = ["sl",    "Slovenian",           0, 1, 1, 1];
  aLangs[47] = ["sq",    "Albanian",            1, 1, 0, 1];
  aLangs[48] = ["sr",    "Serbian",             1, 1, 0, 1];
  aLangs[49] = ["sv",    "Swedish",             1, 1, 1, 1];
  aLangs[50] = ["sw",    "Swahili",             1, 1, 0, 0];
  aLangs[51] = ["th",    "Thai",                1, 1, 1, 0];
  aLangs[52] = ["tl",    "Filipino",            0, 1, 0, 0];
  aLangs[53] = ["tr",    "Turkish",             1, 1, 1, 1];
  aLangs[54] = ["uk",    "Ukrainian",           0, 1, 1, 1];
  aLangs[55] = ["ur",    "Urdu",                0, 1, 1, 0];
  aLangs[56] = ["vi",    "Vietnamese",          1, 1, 1, 1];
  aLangs[57] = ["yi",    "Yiddish",             0, 1, 0, 0];
  aLangs[58] = ["zh",    "Chinese",             1, 1, 0, 0];
  aLangs[59] = ["zh-CN", "Chinese Simplified",  1, 1, 1, 0];
  aLangs[60] = ["zh-TW", "Chinese Traditional", 1, 1, 1, 0];
}

/**********************
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 Mon Jul 28, 2014 7:55 pm; edited 33 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 ... 17, 18, 19  Next
Page 11 of 19

 
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