Make a ;#*:) interpreter
Ruby, 147 144 bytes

Saved 3 bytes thanks to m-chrzan!



z=STDIN.read
eval ARGV[i=a=0].gsub(/./){|e|"#{{?;=&gt;"a+=1",?#=&gt;"putc(a%127);a=0",?:=&gt;"while a&gt;0",?)=&gt;"end",?*=&gt;"a+=z[i%=z.size].ord;i+=1"}[e]};"}


Try it online!

Program is taken from first command line argument.