/* autogenerated from "macros/Linear/DELAY_f.sci" */
function DELAY_f() {
    DELAY_f.prototype.define = function DELAY_f() {
        var evtdly = EVTDLY_f("define");
        evtdly.graphics.orig = [243,296];
        evtdly.graphics.sz = [40,40];
        evtdly.graphics.flip = true;
        evtdly.graphics.exprs = [["0.1"],["0"]];
        evtdly.graphics.pein = 10;
        evtdly.graphics.peout = 7;
        evtdly.model.rpar = 0.1;
        evtdly.model.firing = 0;
        var register = REGISTER_f("define");
        register.graphics.orig = [238,195];
        register.graphics.sz = [50,50];
        register.graphics.flip = true;
        register.graphics.exprs = "0;0;0;0;0;0;0;0;0;0";
        register.graphics.pin = 6;
        register.graphics.pout = 5;
        register.graphics.pein = 9;
        var input_port = IN_f("define");
        input_port.graphics.orig = [92,210];
        input_port.graphics.sz = [20,20];
        input_port.graphics.flip = true;
        input_port.graphics.exprs = [["1"],["1"]];
        input_port.graphics.pout = 6;
        input_port.model.ipar = 1;
        var output_port = OUT_f("define");
        output_port.graphics.orig = [440,210];
        output_port.graphics.sz = [20,20];
        output_port.graphics.flip = true;
        output_port.graphics.exprs = [["1"],["1"]];
        output_port.graphics.pin = 5;
        output_port.model.ipar = 1;
        var split = CLKSPLIT_f("define");
        split.graphics.orig = [[263],[271.2]];
        split.graphics.pein = 7;
        split.graphics.peout = [[9],[10]];
        var diagram = scicos_diagram();
        diagram.objs[1-1] = input_port;
        diagram.objs[2-1] = output_port;
        diagram.objs[3-1] = register;
        diagram.objs[4-1] = evtdly;
        diagram.objs[5-1] = scicos_link(xx=[[296.6],[440]],yy=[[220],[220]],from=[3,1],to=[2,1]);
        diagram.objs[6-1] = scicos_link(xx=[[112],[229.4]],yy=[[220],[220]],from=[1,1],to=[3,1]);
        diagram.objs[7-1] = scicos_link(xx=[[263],[263]],yy=[[290.3],[271.2]],ct=[5,-1],from=[4,1],to=[8,1]);
        diagram.objs[8-1] = split;
        diagram.objs[9-1] = scicos_link(xx=[[263],[263]],yy=[[271.2],[250.7]],ct=[5,-1],from=[8,1],to=[3,1]);
        diagram.objs[10-1] = scicos_link(xx=[[263],[308.6],[308.6],[263],[263]],yy=[[271.2],[271.2],[367],[367],[341.7]],ct=[5,-1],from=[8,2],to=[4,1]);
        this.x = scicos_block();
        this.x.gui = "DELAY_f";
        this.x.graphics.sz = [2,2];
        this.x.graphics.gr_i = [];
        this.x.graphics.pin = 0;
        this.x.graphics.pout = 0;
        this.x.model.sim = "csuper";
        this.x.model.in = 1;
        this.x.model.out = 1;
        this.x.model.blocktype = "h";
        this.x.model.dep_ut = [false,false];
        this.x.model.rpar = diagram;
        this.x.graphics.in_implicit = ["E"];
        this.x.graphics.in_style = "";
        this.x.graphics.out_implicit = ["E"];
        this.x.graphics.out_style = "";
        return new BasicBlock(this.x);
    }
    DELAY_f.prototype.details = function DELAY_f() {
        return this.x;
    }
    DELAY_f.prototype.get = function DELAY_f() {
        var options = {
            dt:["Discretization time step",this.dt],
            z0:["Register initial state",this.z0],
        }
        return options;
    }
    DELAY_f.prototype.set = function DELAY_f() {
        var ppath = list(0,0);
            if (typeof(o)=="Block"&&o.gui=="REGISTER_f") {
                ppath[1-1] = i;
            }
            if (typeof(o)=="Block"&&o.gui=="EVTDLY_f") {
                ppath[2-1] = i;
            }
            if (and(ppath!=list(0,0))) {
                break;
            }
        }
        var newpar = list();
        var register = this.x.model.rpar.objs[ppath[1-1]-1];
        var evtdly = this.x.model.rpar.objs[ppath[2-1]-1];
        var register_exprs = register.graphics.exprs;
        var evtdly_exprs = evtdly.graphics.exprs;
        var exprs = [[evtdly_exprs[1-1]],[register_exprs]];
        while (true) {
            var ok = true;
            this.dt = arguments[0]["dt"];
            this.z0 = arguments[0]["z0"];
            if (!ok) {
                break;
            }
            var mess = [];
            if (prod(size(this.z0))<1) {
                var mess = [[mess],["Register length must be at least 1"],[" "]];
                var ok = false;
            }
            if (this.dt<=0) {
                var mess = [[mess],["Discretization time step must be positive"],[" "]];
                var ok = false;
            }
            if (!ok) {
                message(mess);
                throw "user error";
            } else {
                evtdly.graphics.exprs[1-1] = exprs[1-1];
                if (evtdly.model.rpar!=this.dt) {
                    evtdly.model.rpar = this.dt;
                    newpar[$+1-1] = ppath[2-1];
                }
                this.x.model.rpar.objs[ppath[2-1]-1] = evtdly;
                register.graphics.exprs = exprs[2-1];
                if (or(register.model.dstate!=this.z0.slice())) {
                    register.model.dstate = this.z0.slice();
                    newpar[$+1-1] = ppath[1-1];
                }
                this.x.model.rpar.objs[ppath[1-1]-1] = register;
                break;
            }
        }
        var needcompile = 0;
        var y = needcompile;
        var typ = newpar;
        return new BasicBlock(this.x);
    }
    DELAY_f.prototype.get_popup_title = function DELAY_f() {
        var set_param_popup_title = "This block implements as a discretized delay";
        return set_param_popup_title;
    }
}