Scripts plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Instructor
Yes, this is it! Now IsAkelEdit and SetEditWnd works properly. :D

But after adding support for 8-byte integers on x64, many scripts stopped working. :(
For example, if ListView control is empty:
AkelPad.SendMessage(hWndListView, 0x100C /*LVM_GETNEXTITEM*/, -1, 0x2 /*LVNI_SELECTED*/);
returns 3-character string "\0-1" instead of number -1.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

KDJ
Now devepment version converts if value > 0x7FFFFFFF or value < -0x7FFFFFFF. Debug version if value > 0xFFFF or value < -0xFFFF.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Instructor
In the development version all works properly.
Debug version shows some errors, but I don't know how to interpret them.
In KDJ.zip archive, I put two sample scripts (in dir \Test_for_Scripts_v16).
Can you check them?

-------
PS. About JavaScript integers: http://stackoverflow.com/questions/3071 ... hout-losin

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

KDJ
You can use debugger for scripts to step-by-step checking.
TextMarker.js wrote:function DrawColorButton(nID, lpDRAWITEMSTRUCT)
{
var hDC = AkelPad.MemRead(_PtrAdd(lpDRAWITEMSTRUCT, _X64 ? 32 : 24) /*offsetof(DRAWITEMSTRUCT, hDC)*/, 2 /*DT_QWORD*/);
var lpRect = _PtrAdd(lpDRAWITEMSTRUCT? _X64 ? 40 : 28) /*offsetof(DRAWITEMSTRUCT, rcItem)*/;
With new debug and dev versions possible to write (only for debug, dev version not need _PtrMath here):
RunCommand.js wrote:function LoWord(nDwNum)
{
return _PtrMath(nDwNum, "&", 0xFFFF);
//return nDwNum & 0xFFFF;
}

function HiWord(nDwNum)
{
return _PtrMath(_PtrMath(nDwNum, ">>", 16), "&", 0xFFFF);
//return (nDwNum >> 16) & 0xFFFF;
}

function MkLong(nLoWord, nHiWord)
{
return _PtrMath(_PtrMath(nLoWord, "&", 0xFFFF), "|", _PtrMath(nHiWord, "<<", 16));
//return (nLoWord & 0xFFFF) | (nHiWord << 16);
}

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Instructor
Thank you very much.
Two test scripts for Scripts plugin v16 dev (dir \Test_for_Scripts_v16): KDJ.zip

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

KDJ
Works fine for me.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Instructor
In Scripts v16 dev version dated 30-12-2014 doesn't work AkelPad.Global._PtrAdd as ActiveX.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

KDJ

Code: Select all

AkelPad=new ActiveXObject("AkelPad.Document");
_PtrAdd=function(a, b) {return AkelPad.Global._PtrAdd(a, b);};
_PtrMath=function(a, b, c) {return AkelPad.Global._PtrMath(a, b, c);};

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Instructor
Oh yes, it works. Thank you.
I tried in this way:
_PtrAdd = AkelPad.Global._PtrAdd;

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Добавлено: поддержка 8-ми байтовых чисел (__int64) на x64.
Добавлено: методы _PtrAdd, vbPtrAdd, _PtrMath, vbPtrMath для выполнения математических действий над 8-ми байтовыми числами.
Добавлено: внешний вызов с кодом 5 и 6 - взаимодействие с работающими скриптами.
Добавлено: AkelPad.MemPtrStr - получить строковое представление указателя.
Добавлено: необязательный аргумент AkelPad.MemStrPtr - получить указатель из pString, т.е конвертировать содержимое pString в число.
Исправлено: код "On Error Resume Next" на VBScript приводил к тому, что метод WScript.Quit переставал работать.
Исправлено: IsAkelEdit, SetEditWnd на x64.

Added: support for 8-byte integers (__int64) on x64.
Added: methods _PtrAdd, vbPtrAdd, _PtrMath, vbPtrMath to do mathematical operations with 8-byte integers.
Added: external call with code 5 and 6 - interact with running scripts.
Added: AkelPad.MemPtrStr - get string representation of a pointer.
Added: optional argument to AkelPad.MemStrPtr - get pointer from the pString, ie convert pString contents in number.
Fixed: code "On Error Resume Next" on VBScript cause method WScript.Quit to stop working.
Fixed: IsAkelEdit, SetEditWnd on x64.


Scripts plugin v16.0

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Instructor
Поясните пожалуйста на счёт функций

Code: Select all

AkelPad.ScriptSettings().Begin
AkelPad.ScriptSettings().Read
AkelPad.ScriptSettings().Write
AkelPad.ScriptSettings().Delete
AkelPad.ScriptSettings().End
1. Поддерживается только ini?
2. ANSI кодировка не поддерживается?
3. Ключи берутся только из секции [Options] ?
4. Можно ли прописывать просто путь к настройкам? Ведь они могут быть как вне папки Scripts (например в корне AkelPad), так и в подпапке Scripts\File\
Описания не встретил, выяснил эти моменты в ходе тестирования.
Может есть ещё какие-то особенности?

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

1. Поддерживается только ini?
Да.
2. ANSI кодировка не поддерживается?
Нет.
3. Ключи берутся только из секции [Options] ?
Да.
4. Можно ли прописывать просто путь к настройкам? Ведь они могут быть как вне папки Scripts (например в корне AkelPad), так и в подпапке Scripts\File\
Через относительные пути:

Code: Select all

  if (oSet.Begin("..\\..\\..\\MyScript", 0x2 /*POB_SAVE*/))

Code: Select all

  if (oSet.Begin("File\\MyScript", 0x2 /*POB_SAVE*/))

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Instructor
You can not edit some scripts if the interface language is other than English or Russian.

Example:
1, Run AkelPad.
2. Open Scripts dialog box (Alt+P), choose all columns to display and close Scripts dialog.
3. Set interface language to Polish.
4. Restart AkelPad.
5. Open Scripts dialog box (Alt+P).
6. Select SearchReplace.js and open it for editing (Alt+E).
7. Insert to SearchReplace.js text any character(s).
8. Try save it (Ctrl+S). You can not save the file!
Polish message:
"Nie można otworzyć pliku "E:\...\AkelPad\AkelFiles\Plugs\Scripts\SearchReplace.js"."
this is:
MSG_CANNOT_OPEN_FILE "Cannot open file ""%s""."

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Исправлено: чтение файла.

Fixed: file reading.


Scripts plugin v16.1

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Instructor
При несовпадении типов в том, что задан в GetArgValue в значении по умолчанию и переданного значения в аргументах, вылетает ошибка:
Scripts плагин wrote:---------------------------
Строка: 1
Символ: 1
Ошибка: Синтаксическая ошибка
Код: 800A03EA
Источник: Ошибка компиляции Microsoft JScript
---------------------------
Да Нет
---------------------------
Можно, чтобы для этого случая сделать более верное отображение информации об ошибке?
Хотелось бы видеть что-то типа "Несовпадение типов..." и верный номер строки ошибки, а не 1.
Post Reply