So, i finally forced my self to learn scripting for Hollyhock.
the thing is i love it and hate it.
love it because i cand do lot of stuf much easier by writing a script - i am more familiar with code than with visual boxes, and the signal flow is not always working as expected. and now with controllers like akai apc or launchpad it is better to write script than patch it thru modules.
I hate it because of, ahm Pascal. And poor debuging options. I understand that make script debuging possible will bring lot of unnecessary stuff into hollyhock - actually a whole IDE. I tried rearJS VST - as webdeveloper i am more familiar with JavaScript, so in fact this plugin should be what i need. But i dindt find it useful with hollyhock, as hollyhock scripting provides me somehow easy way to prepare inputs/outputs bound to internal formats of signal in hollyhock.
So i made some smal research, and installed Lazarus - http://www.lazarus.freepascal.org/ which is nice multipilatform pascal IDE. there are some slight differences - like when you ar eusing dynamic arrays in Lazarus you have to use SetLength function, in hollyhock SetArrayLength. but overall it makes writing sripts for hollyhock much more easier. I recommend it for everyone who is writing own scripts.
scripting made easier
Thanks drakh, can be useful for many users, will test it for sure.
-
karl-marci
- New member
- Posts: 2
- Contact:
Hi drakh, do you mean you write Pascal programs in Lazarus and then use the compiled modules inside Usine?
Yes do tell, I am curious on how you are using the IDE in conjunction.
-S
-S
"Every act of creation is first an act of destruction." -Picasso
i use lazaurs as debugger mainly. so i wrote program - simulate some input values, and the usine "procoesss" routine, trace thru runtime. and if its is working as expected copypaste the code inside usine
lazarus code
hollyhock code
lazarus code
Code: Select all
program test;
var pattern:array of integer;
var counts:array of integer;
var remainders:array of integer;
var c:integer;
procedure build(l:integer);
var i:integer;
begin
if((l>-1))then
begin
for i:=0 to (counts[l]-1) do
begin
build(l-1);
end;
if(remainders[l]<>0) then
begin
build(l-2);
end;
end
else if (l=-1)then
begin
pattern[c]:=0;
c:=c+1;
end
else if (l=-2) then
begin
pattern[c]:=1;
c:=c+1;
end;
end;
procedure bjorklund(steps:integer;pulses:integer);
var level:integer;
var st:boolean;
var divisor:integer;
var i:integer;
begin
divisor:=steps-pulses;
level:=0;
st:=true;
SetLength(pattern,steps);
SetLength(remainders,level+1);
remainders[level]:=pulses;
while(st=true) do
begin
SetLength(counts,level+1);//in usine this should be SetArrayLength
counts[level]:= divisor div remainders[level];
SetLength(remainders,level+2);
remainders[level+1]:=divisor mod remainders[level];
divisor:=remainders[level];
level:=level+1;
if(remainders[level]<=1) then
begin
st:=false;
end;
end;
SetLength(counts,level+1);
counts[level]:=divisor;
c:=0;
build(level);
for i:=0 to steps-1 do
begin
write(pattern[(steps-1)-i]);
end;
end;
begin
bjorklund(5,5);
readln;//you should remov
end.Code: Select all
//////////////////////////
//
/////////////////////////
// parameters declaration
var o_arr:tParameter;
var i_steps:tParameter;
var i_pulses:tParameter;
var counts: array of integer;
var pattern: array of integer;
var remainders: array of integer;
var c:integer;
var steps:integer;
var pulses:integer;
var has_changed:boolean;
procedure get_steps;
begin
steps:=round(GetValue(i_steps));
has_changed:=true;
end;
procedure get_pulses;
begin
pulses:=round(GetValue(i_pulses));
has_changed:=true;
end;
procedure build(l:integer);
var i:integer;
begin
if((l>-1))then
begin
for i:=0 to (counts[l]-1) do
begin
build(l-1);
end;
if(remainders[l]<>0) then
begin
build(l-2);
end;
end
else if (l=-1)then
begin
pattern[c]:=0;
c:=c+1;
end
else if (l=-2) then
begin
pattern[c]:=1;
c:=c+1;
end;
end;
procedure bjorklund(s:integer;p:integer);
var level:integer;
var st:boolean;
var divisor:integer;
var i:integer;
begin
divisor:=s-p;
level:=0;
st:=true;
SetArrayLength(remainders,level+1);
remainders[level]:=p;
while(st=true) do
begin
SetArrayLength(counts,level+1);
counts[level]:= divisor div remainders[level];
SetArrayLength(remainders,level+2);
remainders[level+1]:=divisor mod remainders[level];
divisor:=remainders[level];
level:=level+1;
if(remainders[level]<=1) then
begin
st:=false;
end;
end;
SetArrayLength(counts,level+1);
counts[level]:=divisor;
c:=0;
build(level);
end;
// initialisation : create parameters
procedure init;
begin
o_arr := CreateParam('cells out', ptArray);
SetIsInput(o_arr,false);
i_steps:=CreateParam('steps', ptDataField);
SetIsOutPut(i_steps,false);
i_pulses:=CreateParam('pulses', ptDataField);
SetIsOutPut(i_pulses,false);
get_steps();
get_pulses();
end;
// Callback procedure
Procedure Callback(n:integer);
begin
CASE n OF
i_steps:get_steps();
i_pulses:get_pulses();
END;
end;
//////////////////////////////
// main proc
//////////////////////////////
Procedure Process;
var arr_l:integer;
var i:integer;
begin
arr_l:=0;
if(has_changed=true) then
begin
SetArrayLength(pattern,steps);
get_steps();
get_pulses();
bjorklund(steps,pulses);
for i:=0 to steps-1 do
begin
SetDataArrayValue(o_arr,i,pattern[(steps-1)-i]);
//SetDataArrayValue(o_arr,i,1);
end;
arr_l:=steps;
has_changed:=false;
end;
SetLength(o_arr,arr_l);
end;Who is online
Users browsing this forum: No registered users and 36 guests
