Pascal Script - выполнение хелловордов

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Pascal Script - выполнение хелловордов

Сообщение Сквозняк » 14.03.2015 03:56:48

Пытаюсь выполнить на паскаль скрипте хелловорд в среде линукс на лазарусе 1.2.4 но лыжи что-то не едут.
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}


interface

uses
  Classes, SysUtils, FileUtil, uPSComponent, Forms, Controls, Graphics, Dialogs,
  StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    PSScript1: TPSScript;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure PSScript1Compile(Sender: TPSScript);
    procedure PSScript1Execute(Sender: TPSScript);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  KOMPILJACIJA: BOOLEAN;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
VAR
Q2: LONGINT;
begin
IF PARAMSTR(1)='' THEN BEGIN
                       SHOWMESSAGE('не задан выполняемый скрипт в командной строке');
                       CLOSE;//тут не срабатывает
                       END;
end;

procedure TForm1.Button1Click(Sender: TObject);
VAR
Q5: ANSISTRING;
Q2,W2: LONGINT;
begin
Q2:=SYSUTILS.FILEOPEN(PARAMSTR(1),fmOpenRead);
W2:=SYSUTILS.FILESEEK(Q2,0,2);
SYSUTILS.FILESEEK(Q2,0,0);
SETLENGTH(Q5,W2);
SYSUTILS.FILEREAD(Q2,Q5[1],W2);
SYSUTILS.FILECLOSE(Q2);
SHOWMESSAGE(Q5);
PSSCRIPT1.SCRIPT.TEXT:=Q5;
//PSSCRIPT1.Script.LoadFromFile(PARAMSTR(1)); //загрузка файла напрямую, с ней тоже не работает
KOMPILJACIJA:=PSSCRIPT1.COMPILE;
end;

procedure TForm1.PSScript1Compile(Sender: TPSScript);
VAR
Z2: LONGINT;
Z5,R5: ANSISTRING;
begin
IF KOMPILJACIJA=FALSE THEN R5:='не ';
SHOWMESSAGE(R5+'скомпилировалось');
Z5:='Сообщения компилятора:'+#13#10;
FOR Z2:=0 TO PSSCRIPT1.CompilerMessageCount -1 DO
  Z5:=Z5+PSSCRIPT1.CompilerMessages[Z2].MessageToString+#13#10;
SHOWMESSAGE(Z5);
IF PSSCRIPT1.EXECUTE=FALSE THEN SHOWMESSAGE('не запустилось :(');
end;

procedure TForm1.PSScript1Execute(Sender: TPSScript);
begin
SHOWMESSAGE('запустилось, хрен знает что и где');
end;

end.

Файл 1.pp
Код: Выделить всё
USES
SYSUTILS;

BEGIN
WRITELN('111111111111  ');
SYSUTILS.EXECUTEPROCESS('/usr/bin/klickety',''); //КДЕшная игрушка
END.

Файл 2.pp
Код: Выделить всё
begin end.

Команды в консоли:
Код: Выделить всё
$ ./project1 1.pp
$ ./project1 2.pp

Должно выполняться после клика на кнопку. Эффект нулевой: и не компилируется и никаких ошибок компиляции не выдаёт. Как же заставить паскаль скрипт работать?
Сквозняк
энтузиаст
 
Сообщения: 1129
Зарегистрирован: 29.06.2006 22:08:32

Re: Pascal Script - выполнение хелловордов

Сообщение *Rik* » 14.03.2015 10:10:06

У Вас в Button1Click последняя строка компиляция скрипта - KOMPILJACIJA:=PSSCRIPT1.COMPILE;
А где запуск его на выполнение? Должно быть что-то типа PSSCRIPT1.Run
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Pascal Script - выполнение хелловордов

Сообщение Снег Север » 14.03.2015 10:52:42

Скрипт выполняется после компиляции вызовом метода Execute.
Если вы хотите вызвать в скрипте что-то вроде EXECUTEPROCESS, то вам надо создать в программе процедуру-обертку с таким вызовом и зарегистрировать ее в скриптовой машине через AddMethod в событии OnCompile.

Я когда-то сделал переводы статей по PascalScript с дополнительными примерами - гляньте тут: http://goodbyamerica.sourceforge.net/papers.shtml
Это под Делфи, но, вроде, под лазарем ничего существенного не изменилось.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3053
Зарегистрирован: 27.11.2007 16:14:47

Re: Pascal Script - выполнение хелловордов

Сообщение Сквозняк » 14.03.2015 15:12:53

*Rik* писал(а):У Вас в Button1Click последняя строка компиляция скрипта - KOMPILJACIJA:=PSSCRIPT1.COMPILE;
А где запуск его на выполнение? Должно быть что-то типа PSSCRIPT1.Run

Обработчик события Button1Click только компилирует. После компиляции возникает событие PSScript1Compile и в его обработчике и есть IF PSSCRIPT1.EXECUTE=FALSE которое запускает то, что скомпилировалось. Можно перенести PSSCRIPT1.EXECUTE в конец обработчика события Button1Click, только это ничего не меняет, поскольку ошибка проявляется уже на этапе компиляции. Если не скомпилировалось, то что исполнять? И я не знаю, ошибка в коде или в лазарусе.

Добавлено спустя 6 минут 14 секунд:
Снег Север писал(а):Скрипт выполняется после компиляции вызовом метода Execute.

Так и делал, но у меня даже не скомпилировалось, о чём и сообщали окна с сообщениями.

Я когда-то сделал переводы статей по PascalScript с дополнительными примерами - гляньте тут: http://goodbyamerica.sourceforge.net/papers.shtml
Это под Делфи, но, вроде, под лазарем ничего существенного не изменилось.

Эти статьи и пытался адаптировать под лазарус, но я не знаю, правильно ли там собран Pascal Script и как его пересобрать правильно.
Сквозняк
энтузиаст
 
Сообщения: 1129
Зарегистрирован: 29.06.2006 22:08:32

Re: Pascal Script - выполнение хелловордов

Сообщение *Rik* » 14.03.2015 17:33:47

Сквозняк писал(а):
*Rik* писал(а):У Вас в Button1Click последняя строка компиляция скрипта - KOMPILJACIJA:=PSSCRIPT1.COMPILE;
А где запуск его на выполнение? Должно быть что-то типа PSSCRIPT1.Run

Обработчик события Button1Click только компилирует. После компиляции возникает событие PSScript1Compile и в его обработчике и есть IF PSSCRIPT1.EXECUTE=FALSE которое запускает то, что скомпилировалось. Можно перенести PSSCRIPT1.EXECUTE в конец обработчика события Button1Click, только это ничего не меняет, поскольку ошибка проявляется уже на этапе компиляции. Если не скомпилировалось, то что исполнять? И я не знаю, ошибка в коде или в лазарусе.

Добавлено спустя 6 минут 14 секунд:
Снег Север писал(а):Скрипт выполняется после компиляции вызовом метода Execute.

Так и делал, но у меня даже не скомпилировалось, о чём и сообщали окна с сообщениями.

Я когда-то сделал переводы статей по PascalScript с дополнительными примерами - гляньте тут: http://goodbyamerica.sourceforge.net/papers.shtml
Это под Делфи, но, вроде, под лазарем ничего существенного не изменилось.

Эти статьи и пытался адаптировать под лазарус, но я не знаю, правильно ли там собран Pascal Script и как его пересобрать правильно.


Да, я понял теперь как оно работает, стразу не разглядел где запуск скрипта. Но у меня вот есть сомнения в одном месте.
Опять в Button1Click последняя строка:
KOMPILJACIJA:=PSSCRIPT1.COMPILE;
В переменной KOMPILJACIJA значение появится после компиляции, Вы проверяете значение этой переменной в PSScript1Compile, я подозреваю, что при вызове PSSCRIPT1.COMPILE сначала срабатывает событие
PSScript1Compile, только после этого функция PSSCRIPT1.COMPILE вернет значение и поместит его в переменную KOMPILJACIJA, т.е. делать проверку KOMPILJACIJA в PSScript1Compile
Код: Выделить всё
IF KOMPILJACIJA=FALSE THEN R5:='не ';
SHOWMESSAGE(R5+'скомпилировалось');
, здесь возможно неправильно...

У компоненты интерпретатора, должно быть событие, куда стекают ошибки, надо его задействовать, чтобы не гадать что конкретно не нравится интерпретатору.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Pascal Script - выполнение хелловордов

Сообщение Снег Север » 14.03.2015 17:41:54

Сквозняк писал(а):Эти статьи и пытался адаптировать под лазарус, но я не знаю, правильно ли там собран Pascal Script и как его пересобрать правильно.

Я проверял свои примеры под Делфи ХЕ7 с последней версией Pascal Script, всё работало. Под лазарем не проверял. Постараюсь адаптировать хоть один пример под лазарь и отпишусь, что получится.

Добавлено спустя 40 минут 30 секунд:
Сквозняк писал(а):.

Вот пример для лазаря с запуском внешней программы из скрипта (для винды, линукса у меня сейчас нет)
passcript.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3053
Зарегистрирован: 27.11.2007 16:14:47

Re: Pascal Script - выполнение хелловордов

Сообщение Сквозняк » 14.03.2015 18:54:26

Снег Север писал(а):Вот пример для лазаря с запуском внешней программы из скрипта (для винды, линукса у меня сейчас нет)

passcript.zip

Вот оно как. Оказывается, чтобы что-то заработало, надо бросить 3 компонента на форму а не 1, и "writeln" этот паскаль не понимает. В линуксе заработала такая программа:
Код: Выделить всё
Program Test;
begin
        ExecProg('/usr/bin/klickety','');
end.
Сквозняк
энтузиаст
 
Сообщения: 1129
Зарегистрирован: 29.06.2006 22:08:32

Re: Pascal Script - выполнение хелловордов

Сообщение Снег Север » 14.03.2015 18:59:14

Вот и разобрались... :)
Да, надо, как минимум, два плагина и, если вы создаете компоненты в рантайме, не забыть их подключать к скриптовой машине.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3053
Зарегистрирован: 27.11.2007 16:14:47


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 243

Рейтинг@Mail.ru