AkelPad to Pascal
- Author
- Message
-
Offline
- Posts: 20
- Joined: Wed Mar 07, 2012 10:27 am
AkelPad to Pascal
Можно ли как то сделать, что бы по нажатию какой либо кнопки текст из Акелпада передавался в Borland Pascal? Как вариант: сахранялся в Акелпаде и сразу же запускался паскаль с открытием этого файла.
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
booleg
Для передачи файла на обработку компилятору см. Log плагин.
Для передачи файла на обработку компилятору см. Log плагин.
-
Offline
- Posts: 1250
- Joined: Thu Nov 16, 2006 11:53 am
- Location: Kyiv, Ukraine
А для автоматизации этого дела можно воспользоваться скриптом RunMe.js:
viewtopic.php?p=13010#p13010
Открыв скрипт, нужно будет добавить в определение oCommands что-то вроде
Затем назначаем горячую клавишу для вызова RunMe.js - и вуаля.
Обновил RunMe.js.
Что нового:
- расширения файлов сравниваются регистро-независимо;
- добавлен Python и Free Pascal (предполагается, что при установке они зарегистрировались в системе - иначе в файле RunMe.js нужно указать к ним полный путь);
- добавлен внешний вызов Call("Scripts::Main", 1, "RunMe.js", "1"), позволяющий изменить строку запуска - например, добавить какие-то параметры. Изменённая строка запуска сохраняется для последующего использования.
Вот такие вот пироги с котятами
viewtopic.php?p=13010#p13010
Открыв скрипт, нужно будет добавить в определение oCommands что-то вроде
Code: Select all
"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"), позволяющий изменить строку запуска - например, добавить какие-то параметры. Изменённая строка запуска сохраняется для последующего использования.
Вот такие вот пироги с котятами
-
Offline
- Posts: 20
- Joined: Wed Mar 07, 2012 10:27 am
Рабочий вариант (огромное спасибо DV помощь) получился такой:
в RunMe.js v.1.9 в раздел oCommands добавляем
и добавляем функцию
Получаем скрипт, который компилирует во FreePascal и сразу запускает полученный exe файл. Проверил на WinServer2003(32) и Win7(32) - всё отлично работает! Если у кого то есть возможность протестировать на 64-битной системе - сообщите пожалуйста о результатах.
А теперь добавим в эту бочку мёда маленькую ложечку дёгтя.
Если вы пишете программы, в которых информация вводится с клавиатуры и выводится на экран, то можете спокойно пользоваться этим скриптом всё отлично работает. Если же ввод-вывод идет через файлы, а именно используется конструкция типа
где предполагается работа с входным файлом расположенным в той же директории, что и файл программы и не указывается полный путь к этому файлу, то возникают проблемы. Если редактируемый паскалевский файл находится на том же диске, что и Акелпад ( не важно в какой папке) - всё в порядке, а иначе он этот входной файл не находит. В скрипт надо добавить кроме команды смены директории ещё команду смены диска, а для этого видимо нужна соответствующая системная переменная типа %d только для диска.
Как это сделать и реально ли вообще это сделать я не знаю.
в RunMe.js v.1.9 в раздел oCommands добавляем
Code: Select all
"pas" :
":run_pasfile(\"%f\")" ,
Code: Select all
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
}
А теперь добавим в эту бочку мёда маленькую ложечку дёгтя.
Если вы пишете программы, в которых информация вводится с клавиатуры и выводится на экран, то можете спокойно пользоваться этим скриптом всё отлично работает. Если же ввод-вывод идет через файлы, а именно используется конструкция типа
Code: Select all
assign(f,'input.txt');
Как это сделать и реально ли вообще это сделать я не знаю.
-
Offline
- Posts: 1250
- Joined: Thu Nov 16, 2006 11:53 am
- Location: Kyiv, Ukraine
Надо в скрипт добавить примерно такую функцию:
и вызывать её где-то перед вызовом runCommand.
setCurrentDir будет функцией общего назначения, её логично разместить рядом с функциями envGetVar и envSetVar.
Code: Select all
function setCurrentDir(dir)
{
var oSys = AkelPad.SystemFunction();
oSys.Call("kernel32::SetCurrentDirectory" + _TCHAR, dir);
}
setCurrentDir будет функцией общего назначения, её логично разместить рядом с функциями envGetVar и envSetVar.
-
Offline
- Posts: 20
- Joined: Wed Mar 07, 2012 10:27 am
Ура!!! Работает!!! Я в качестве параметра пробовал %d ставить оно и не шло.
Саму функцию после envSetVar воткнул, ну а run_pasfile сейчас выглядит так:
Огромное спасибо! Теперь для полного счастья, только подсветки ошибок в лог окошке не хватает.
Саму функцию после envSetVar воткнул, ну а run_pasfile сейчас выглядит так:
Code: Select all
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
}