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 

AkelPad to Pascal

 
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian)
View previous topic :: View next topic  
Author Message
booleg



Joined: 07 Mar 2012
Posts: 20

PostPosted: Thu Oct 18, 2012 1:00 pm    Post subject: AkelPad to Pascal Reply with quote

Можно ли как то сделать, что бы по нажатию какой либо кнопки текст из Акелпада передавался в Borland Pascal? Как вариант: сахранялся в Акелпаде и сразу же запускался паскаль с открытием этого файла.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5368

PostPosted: Thu Oct 18, 2012 2:11 pm    Post subject: Reply with quote

booleg
Для передачи файла на обработку компилятору см. Log плагин.
Back to top
View user's profile Send private message Send e-mail
DV



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

PostPosted: Thu Oct 18, 2012 2:21 pm    Post subject: Reply with quote

А для автоматизации этого дела можно воспользоваться скриптом RunMe.js:
http://akelpad.sourceforge.net/forum/viewtopic.php?p=13010#13010
Открыв скрипт, нужно будет добавить в определение oCommands что-то вроде
Code:
"pas" :
    "cmd /c Path_To_Pascal_Compiler.exe \"%f\" || pause" ,

Затем назначаем горячую клавишу для вызова RunMe.js - и вуаля.

Обновил RunMe.js.
Что нового:
- расширения файлов сравниваются регистро-независимо;
- добавлен Python и Free Pascal (предполагается, что при установке они зарегистрировались в системе - иначе в файле RunMe.js нужно указать к ним полный путь);
- добавлен внешний вызов Call("Scripts::Main", 1, "RunMe.js", "1"), позволяющий изменить строку запуска - например, добавить какие-то параметры. Изменённая строка запуска сохраняется для последующего использования.
Вот такие вот пироги с котятами Smile
Back to top
View user's profile Send private message
booleg



Joined: 07 Mar 2012
Posts: 20

PostPosted: Thu Dec 06, 2012 10:18 am    Post subject: Reply with quote

Рабочий вариант (огромное спасибо DV помощь) получился такой:
в RunMe.js v.1.9 в раздел oCommands добавляем
Code:
"pas" :
    ":run_pasfile(\"%f\")" ,

и добавляем функцию
Code:
function run_pasfile(filePathName)
{
var cmd1 = "fpc.exe \"%f\""; // compile
var cmd2 = "cd \"%d\\\" && rundll32.exe shell32,ShellExec_RunDLL \"%d\\%n.exe\""; // current dir = file dir && run .exe
var cmd = "cmd /c" + cmd1 + " && " + cmd2;
cmd = prepareCommand(cmd, filePathName); // pre-process %f, %n etc.
runCommand(cmd); // run
}


Получаем скрипт, который компилирует во FreePascal и сразу запускает полученный exe файл. Проверил на WinServer2003(32) и Win7(32) - всё отлично работает! Если у кого то есть возможность протестировать на 64-битной системе - сообщите пожалуйста о результатах.
А теперь добавим в эту бочку мёда маленькую ложечку дёгтя.
Если вы пишете программы, в которых информация вводится с клавиатуры и выводится на экран, то можете спокойно пользоваться этим скриптом всё отлично работает. Если же ввод-вывод идет через файлы, а именно используется конструкция типа
Code:
assign(f,'input.txt');

где предполагается работа с входным файлом расположенным в той же директории, что и файл программы и не указывается полный путь к этому файлу, то возникают проблемы. Если редактируемый паскалевский файл находится на том же диске, что и Акелпад ( не важно в какой папке) - всё в порядке, а иначе он этот входной файл не находит. В скрипт надо добавить кроме команды смены директории ещё команду смены диска, а для этого видимо нужна соответствующая системная переменная типа %d только для диска.
Как это сделать и реально ли вообще это сделать я не знаю. Sad
Back to top
View user's profile Send private message
DV



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

PostPosted: Thu Dec 06, 2012 10:33 am    Post subject: Reply with quote

Надо в скрипт добавить примерно такую функцию:
Code:
function setCurrentDir(dir)
{
  var oSys = AkelPad.SystemFunction();
  oSys.Call("kernel32::SetCurrentDirectory" + _TCHAR, dir);
}

и вызывать её где-то перед вызовом runCommand.

setCurrentDir будет функцией общего назначения, её логично разместить рядом с функциями envGetVar и envSetVar.
Back to top
View user's profile Send private message
booleg



Joined: 07 Mar 2012
Posts: 20

PostPosted: Thu Dec 06, 2012 10:44 am    Post subject: Reply with quote

параметр dir что должен из себя представлять?
Back to top
View user's profile Send private message
DV



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

PostPosted: Thu Dec 06, 2012 11:20 am    Post subject: Reply with quote

хм, путь к папке.
В нашем случае вызвать можно как setCurrentDir(getFileDir(filePathName)).
Back to top
View user's profile Send private message
booleg



Joined: 07 Mar 2012
Posts: 20

PostPosted: Thu Dec 06, 2012 12:07 pm    Post subject: Reply with quote

Ура!!! Работает!!! Я в качестве параметра пробовал %d ставить оно и не шло.
Саму функцию после envSetVar воткнул, ну а run_pasfile сейчас выглядит так:
Code:
function run_pasfile(filePathName)
{
var cmd1 = "fpc.exe \"%f\""; // compile
var cmd2 = "cd \"%d\\\" && rundll32.exe shell32,ShellExec_RunDLL \"%d\\%n.exe\""; // current dir = file dir && run .exe
var cmd = "cmd /c" + cmd1 + " && " + cmd2;
cmd = prepareCommand(cmd, filePathName); // pre-process %f, %n etc.
setCurrentDir(getFileDir(filePathName));
runCommand(cmd); // run
}

Огромное спасибо! Теперь для полного счастья, только подсветки ошибок в лог окошке не хватает.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian) All times are GMT
Page 1 of 1

 
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