//genesis

str lastinjectsite1 = "none"
str lastinjectsite2 = "none"

// This function is accessed from the 'when' command in the xsout file
function set_field(widget, view)
str widget
str view
	setfield {view} field {getfield {widget} value}
end

// This function is accessed from the 'when' command in the xsout file
function autoscale_toggle(widget, view)
str widget
	if (({getfield {widget} state}) == 1)
		setfield {view} autoscale TRUE
	else
		setfield {view} autoscale FALSE
	end
end

function click_site(num)
	str num

	setfield /cell_run_control/click_site{num}  \
	    value {getfield {cellpath}xout{num}/draw value}
end

function do_inject(num)
	str num
	int inum = num
	str widget = (cellpath) @ "xout" @ (num) @ "/draw"

	str name = {getfield {widget} value}
	str iname = {getfield {name} name} @ {getfield {name} index}

	click_site {num}

	setfield {name}  \
	    inject {{getfield /cell_run_control/"inject (nanoAmps)" value}/1e9}
	if (inum == 1)
		lastinjectsite1 = name
	else
		lastinjectsite2 = name
	end
	echo Setting injection on {name} to  \
	    {getfield /cell_run_control/"inject (nanoAmps)" value} nA.
	if (({exists {widget}/Inj{iname}}))
		return
	end

	copy /xproto/draw/Inj {widget}/Inj{iname}
	setfield {widget}/Inj{iname} tx {getfield {name} x}  \
	    ty {getfield {name} y} tz {getfield {name} z}
end

function clear_inject(num)
	str num
	int inum = num
	str widget = (cellpath) @ "xout" @ (num) @ "/draw"

	str name = {getfield {widget} value}
	str iname = {getfield {name} name} @ {getfield {name} index}
	click_site {num}

	setfield {name} inject {0.0}
	if (inum == 1)
		lastinjectsite1 = "none"
	else
		lastinjectsite2 = "none"
	end
	echo Setting injection on {name} to 0 nA.
	if (({exists {widget}/Inj{iname}}))
		delete {widget}/Inj{iname}
	end
end


function do_vclamp(num)
	str num
	int inum = num
	str widget = (cellpath) @ "xout" @ (num) @ "/draw"
	float temp

	str name = {getfield {widget} value}
	str iname = {getfield {name} name} @ {getfield {name} index}
	if (inum == 1)
		lastinjectsite1 = name
	else
		lastinjectsite2 = name
	end
	click_site {num}

	if (({exists {widget}/Vclamp{iname}}))
		temp = {getfield {name}/Vclamp x}
		temp = temp*1e3
		setfield /cell_run_control/"Clamp voltage (mV)"  \
		    value {temp}
		return
	end

	copy /xproto/draw/Vclamp {widget}/Vclamp{iname}
	setfield {widget}/Vclamp{iname} tx {getfield {name} x}  \
	    ty {getfield {name} y} tz {getfield {name} z}

	/*
	copy /library/Vclamp {widget}/Vclamp{iname}
	push {widget}/Vclamp{iname}/Vclamp
	*/
	copy /library/Vclamp {name}
	pushe {name}/Vclamp

	temp = {getfield /cell_run_control/"Clamp voltage (mV)" value}
	echo Setting clamp Voltage on {name} to {temp} mV.
	setfield . x {temp/1.0e3}
	addmsg . lowpass INJECT x
	addmsg {name} PID SNS Vm
	addmsg PID {name} INJECT output
	resched
	pope
end


function clear_vclamp(num)
	str num
	int inum
	str widget = (cellpath) @ "xout" @ (num) @ "/draw"

str name = {getfield {widget} value}
str iname = {getfield {name} name} @ {getfield {name} index}
	click_site {num}

	setfield {name} inject {0.0}
	if (inum == 1)
		lastinjectsite1 = "none"
	else
		lastinjectsite2 = "none"
	end
	echo Removing Voltage clamp from {name}
	if (({exists {widget}/Vclamp{iname}}))
		delete {widget}/Vclamp{iname}
		delete {name}/Vclamp
	end
end


int col1 = 15
int col2 = 15
function add_plot(num)
	str num
	str draww = (cellpath) @ "xout" @ (num) @ "/draw"
	str graphw = (cellpath) @ "graph" @ (num) @ "/graph"
	str newplot = {getfield {draww} value}
    str  \
        fieldpath = (newplot) @ "/" @ ({getfield {draww}/cell fieldpath})
    str field = {getfield {draww}/cell colfield}
    str name
	int col
    click_site {num}

	if ({strcmp {num} "1"} == 0)
		col = col1
	else
		col = col2
	end
	name = ({getfield {newplot} name}) @ "[" @ ({getfield {newplot} index}) @ "]"
    if (({exists {draww}/Tr{name}}))
        echo already recording from {newplot}, {name}
        return
    end
	if (!({exists {fieldpath}}))
		echo cannot record from {fieldpath} : it does not exist
		return
	end
    //DHB addmsg {fieldpath} {graphw} PLOT {field} *{name} *hot{col}
    addmsg {fieldpath} {graphw} PLOT {field} *{name} *{col}
	setfield {graphw}  \
	    YUnits {getfield {draww}/cell fieldpath}:{field}
	call {graphw}/{name} RESET
	copy /xproto/draw/Trode {draww}/Tr{name}
	setfield {draww}/Tr{name} pixcolor /*"hot"*/{col}  \
	    tx {getfield {newplot} x} ty {getfield {newplot} y}  \
	    tz {{getfield {newplot} z} + 0.00001}
    col = col + 7
	if (col > 63)
        col = col - 60
    end
	if ({strcmp {num} "1"} == 0)
		col1 = col
	else
		col2 = col
	end
    echo adding plot for element '{fieldpath}' of {field}
end

function drop_plot(num)
	str num
	str draww = (cellpath) @ "xout" @ (num) @ "/draw"
	str graphw = (cellpath) @ "graph" @ (num) @ "/graph"
    int nmsgs, i
    str oldplot = {getfield {draww} value}
    str fieldpath = {el {oldplot}/{getfield {draww}/cell fieldpath}}
    str src, name
    str field = {getfield {draww}/cell colfield}
    click_site {num}

    nmsgs = {getmsg {graphw} -incoming -count}

    for (i = 0; i < nmsgs; i = i + 1)
        src = {getmsg {graphw} -incoming -source {i}}
        if ({strcmp {src} {fieldpath}} == 0)
            deletemsg {graphw}  {i} -incoming
            i = i - 1
            nmsgs = nmsgs - 1
			/*
            name = {get({oldplot},name)}+ {get({oldplot},index)}+{field}
			*/
            name = ({getfield {oldplot} name}) @ "[" @ ({getfield {oldplot} index}) @ "]"
            delete {draww}/Tr{name}
    		echo dropping plot for '{field}' on element  \
    		    '{fieldpath}'
        end
    end

end

function color_plot(num)
	str num
	str draww = (cellpath) @ "xout" @ (num) @ "/draw"
	str graphw = (cellpath) @ "graph" @ (num) @ "/graph"
    int nmsgs, i, k, l
	int col
    str oldplot, src, name, char
    str field = {getfield {draww}/cell colfield}
    str fieldpath = ({getfield {draww}/cell fieldpath})
	str otype

	if ({strcmp {num} "1"} == 0)
		col = col1
	else
		col = col2
	end
    nmsgs = {getmsg {graphw} -incoming -count}
    col = col + 7
	if (col > 63)
        col = col - 60
    end
	if ({strcmp {num} "1"} == 0)
		col1 = col
	else
		col2 = col
	end

    for (i = 0; i < nmsgs; i = i + 1)
        src = {getmsg {graphw} -incoming -source {0}}
//        deletemsg {graphw}  {0} -incoming
		/*
		k = strlen({src})	
		for (l=k; l>0; l=l-1) 
			char=substring({src},{l},{l})
			if (strcmp({char},"/")==0)
				break
			end
		end
		if (strcmp({fieldpath},".") == 0) //plot is not a subelement
			oldplot = {src}
		else
			l = l - 1
			oldplot = substring({src},0,{l})
		end
        name = {get({oldplot},name)}+ {get({oldplot},index)}+{field}
        name = {get({oldplot},name)}+"["+{get({oldplot},index)}+"]"
		*/
		/*
		*/
		oldplot = (src)
		if ({strcmp {fieldpath} "."} != 0)		//plot is a subelement

			for (k = 0; k < 5; k = k + 1)
				oldplot = ({el {oldplot}/..})
				otype = {getfield {oldplot} object->name}
				if ( \
				    (({strcmp {otype} compartment}) == 0) || (({strcmp {otype} symcompartment}) == 0) \
				    )
					break
				end
			end
		end
        name = ({getfield {oldplot} name}) @ "[" @ ({getfield {oldplot} index}) @ "]"
    	//DHB addmsg {src} {graphw} PLOT {field} *{name} *hot{col}
//    	addmsg {src} {graphw} PLOT {field} *{name} *{col}
		setfield {graphw}/{name} fg {col}
		setfield {draww}/Tr{name} pixcolor /*"hot"*/{col}
    end
end

function do_spike(num)
	str num
	str compt = {getfield {cellpath}xout{num}/draw value}
	str channame = {getfield /cell_run_control/"Syn Type" value}
	str chanpath = compt @ "/" @ channame
	float weight
	click_site {num}

	if (!{exists {chanpath}})
		echo channel '{chanpath}' does not exist
		return
	end

	call /stimulus/spike_on_command SEND_SPIKE {chanpath}

	echo delivering spike to '{chanpath}'
end

function do_unspike(num)
	str num  // make this a no-op - DEB 8/195
//	str compt = {getfield {cellpath}xout{num}/draw value}
//	str channame = {getfield /cell_run_control/"Syn Type" value}
//	str chanpath = (compt) @ "/" @ (channame)
//	click_site {num}

//	if (!({exists {chanpath}}))
//		echo channel '{chanpath}' does not exist
//		return
//	end
//    setfield {chanpath} X 0.0
//    setfield {chanpath} Y 0.0
end

function do_act(num)
	str num
	str draww = (cellpath) @ "xout" @ (num) @ "/draw"
	str compt = {getfield {draww} value}
	str channame = {getfield /cell_run_control/"Syn Type" value}
	str chanpath = (compt) @ "/" @ (channame)
	str iname = {getfield {compt} name} @ {getfield {compt} index}
	float act
	click_site {num}

	if (!({exists {chanpath}}))
		echo channel '{chanpath}' does not exist
		return
	end

    act = {getfield /cell_run_control/"Amount of synaptic activation" value}

	pushe {draww}
	if (!({exists act{channame}{iname}}))
    	if ({exists /xproto/draw/act{channame}})
    		copy /xproto/draw/act{channame} act{channame}{iname}
		else
    		copy /xproto/draw/actACh act{channame}{iname}
		end
    	setfield {draww}/act{channame}{iname} tx {getfield {compt} x}  \
    	    ty {getfield {compt} y} tz {getfield {compt} z}
		create neutral act{channame}{iname}/dummy
		addmsg act{channame}{iname}/dummy {chanpath} ACTIVATION  \
		    z
	end
   	echo setting activation on {chanpath} to {act}
	setfield act{channame}{iname}/dummy z {act}
	pope
end

function do_unact(num)
	str num
	str draww = (cellpath) @ "xout" @ (num) @ "/draw"
	str compt = {getfield {draww} value}
	str channame = {getfield /cell_run_control/"Syn Type" value}
	str chanpath = (compt) @ "/" @ (channame)
	str iname = {getfield {compt} name} @ {getfield {compt} index}
	click_site {num}

	if (!({exists {chanpath}}))
		echo channel '{chanpath}' does not exist
		return
	end

	pushe {draww}
	if ({exists act{channame}{iname}})
		delete act{channame}{iname}
	else
		echo no activation has been set on {channame}
	end
	pope
end

function do_rand(num)
	str num
	str draww = (cellpath) @ "xout" @ (num) @ "/draw"
	str compt = {getfield {draww} value}
	str channame = {getfield /cell_run_control/"Syn Type" value}
	str chanpath = (compt) @ "/" @ (channame)
	str iname = {getfield {compt} name} @ {getfield {compt} index}
	float rate, weight
	click_site {num}

	if (!({exists {chanpath}}))
		echo channel '{chanpath}' does not exist
		return
	end

	pushe {draww}

    if (({exists rand{channame}{iname}}))
		echo rand input already being sent to {chanpath}
		pope
		return
	end
    addmsg /stimulus/rand {chanpath} RAND_ACTIVATION rate weight
    // This setfield shouldn't be necessary as /stimulus/rand fields
    // should always be updated from the interface elements.  Uncomment
    // if there's a consistency problem.  ---dhb
    //
    //setfield /stimulus/rand \
    //  weight {getfield /cell_run_control/"Spike weight" value} \
    //	rate {getfield /cell_run_control/"Spike rate (Hz)" value}

   	if ({exists /xproto/draw/rand{channame}})
    	copy /xproto/draw/rand{channame} rand{channame}{iname}
	else
    	copy /xproto/draw/randACh rand{channame}{iname}
	end
    setfield rand{channame}{iname} tx {getfield {compt} x}  \
        ty {getfield {compt} y} tz {getfield {compt} z}
    echo delivering rand spikes to '{chanpath}'
	pope
end

function do_unrand(num)
	str num
	str draww = (cellpath) @ "xout" @ (num) @ "/draw"
	str compt = {getfield {draww} value}
	str channame = {getfield /cell_run_control/"Syn Type" value}
	str chanpath = (compt) @ "/" @ (channame)
	str iname = {getfield {compt} name} @ {getfield {compt} index}
	click_site {num}

	if (!({exists {chanpath}}))
		echo channel '{chanpath}' does not exist
		return
	end

	pushe {draww}
    if (({exists rand{channame}{iname}}))
            echo deleting random spike input to {chanpath}
            deletemsg {chanpath} 0 -find /stimulus/rand RAND_ACTIVATION
            delete rand{channame}{iname}
	end
	pope
end

function setup_mouse(draw, x, y, but1, func1, but2, func2, but3, func3)
	str draw, but1, but2, but3, func1, func2, func3
	int x, y

	if (({exists {draw}}) == 0)
		le /
		le {cellpath}xout
		echo draw widget '{draw}' does not exist.
		return
	end

	/*
	x = get({draw},x) + x
	y = get({draw},y) + y
	*/

	if (!({exists {draw}/../MOUSE}))
		pushe {draw}/..
		create x1label MOUSE [{x},{y},330,32] -title  \
		    "MOUSE                                     "
	else
		pushe {draw}/..
	end

	if (!({exists {but1}}))
		create x1button {but1} [{x + 70},{y + 2},75,]
	end

	if (!({exists {but2}}))
		//DHB create xbutton {but2} [{x + 136},{y + 2},50,25]
		create x1button {but2} [10:{but1},{y + 2},75,]
	end
	if (!({exists {but3}}))
		create x1button {but3} [10:{but2},{y + 2},75,]
	end

	dropwhen {draw} all
	when {draw} click1 do {func1}
	when {draw} click2 do {func2}
	when {draw} click3 do {func3}

	pope
end

function select_mouse(draw, but1, func1, but2, func2, but3, func3)
	str draw, but1, but2, but3
	str func1, func2, func3

	if (!({exists {draw}}))
		echo draw widget '{draw}' does not exist.
		return
	end

	pushe {draw}/..

	if (({exists {but1}}) && ({exists {but2}}) && ({exists {but3}}))
		xraise MOUSE
		xraise {but1}
		xraise {but2}
		xraise {but3}

		dropwhen {draw} all
		when {draw} click1 do {func1}
		when {draw} click2 do {func2}
		when {draw} click3 do {func3}
	end
	pope
end

function scalecell(cell)
    str cell

    int x, y, w
    str temp

    //DHB temp = {getfield {cell}/.. form}
    //DHB x = {getfield {temp} x}
    //DHB y = {getfield {temp} y}
    //DHB w = {getfield {temp} width}
    x = {getfield {cell}/../.. xgeom}
    y = {getfield {cell}/../.. ygeom}
    w = {getfield {cell}/../.. wgeom}

    create x1form {cell}_scale [{x},{y},200,415] -title Scale
    create x1button {cell}/scale [0,0,50,] -script  \
        "disp_cellscale "{cell}

    pushe {cell}_scale
    create x1dialog colfield -value {getfield {cell} colfield}
    //DHB create xdialog fatfield -value {getfield {cell} fatfield}
    create x1dialog colmin -value {getfield {cell} colmin}
    create x1dialog colmax -value {getfield {cell} colmax}
    create x1dialog fatmin -value {getfield {cell} fatmin}
    create x1dialog fatmax -value {getfield {cell} fatmax}

    create x1toggle autocol [1%,3:fatmax.bottom,48%,] -state 0
    setfield autocol label0 "Autocol OFF" label1 "Autocol ON"

    create x1toggle colfix [51%,3:fatmax.bottom,48%,] -state 0
    setfield colfix label0 "Colfix OFF" label1 "Colfix ON"

    create x1toggle autofat [1%,3:autocol.bottom,48%,] -state 0
    setfield autofat label0 "Autofat OFF" label1 "Autofat ON"

    create x1toggle fatfix [51%,3:autocol.bottom,48%,] -state 1
    setfield fatfix label0 "Fatfix OFF" label1 "Fatfix ON" state 1

    create x1dialog fatrange -value {getfield {cell} fatrange}
    create x1dialog fieldpath -value {getfield {cell} fieldpath}
    create x1button APPLY -script  \
        "applycellscale "{cell}" "{cell}_scale" 0"
    create x1button APPLY_AND_VANISH -script  \
        "applycellscale "{cell}" "{cell}_scale" 1"

    pope
end


function disp_cellscale(cell)
    str cell
    pushe {cell}_scale

    setfield colmin value {getfield {cell} colmin}
    setfield colmax value {getfield {cell} colmax}
    setfield fatmin value {getfield {cell} fatmin}
    setfield fatmax value {getfield {cell} fatmax}
    pope
    xshowontop {cell}_scale
end

function set_cell_flag(cell, flagname, flag)
    str cell, flagname
    int flag
    str state = "FALSE"

    if (flag == 1)
        state = "TRUE"
    end
    if ({strcmp {state} {getfield {cell} {flagname}}} != 0)
        setfield {cell} {flagname} {state}
    end
end

function applycellscale(cell, cellscale, hide)
    str cell, cellscale
    int hide

    str colfield, fatfield, fieldpath
    float colmin, colmax, fatmin, fatmax, fatrange
    int autofat, autocol, fatfix, colfix

	int l = {strlen {cellpath}} + 4
	str num = {substring {cell} {l} {l}}
	str graphw = (cellpath) @ "graph" @ (num) @ "/graph"
    int nmsgs, i
    str field = {getfield {cell} colfield}
    str path, oldplot, src, name, char
	str col

    pushe {cellscale}
    colfield = {getfield colfield value}
    //DHB fatfield = {getfield fatfield value}
    fieldpath = {getfield fieldpath value}
    autocol = {getfield autocol state}
    autofat = {getfield autofat state}
    //DHB colfix = {getfield colfix state}
    //DHB fatfix = {getfield fatfix state}
    colmin = {getfield colmin value}
    colmax = {getfield colmax value}
    fatmin = {getfield fatmin value}
    fatmax = {getfield fatmax value}
    fatrange = {getfield fatrange value}
        //DHB ({strcmp {colfield} {field}} != 0) || ({strcmp {fatfield} {getfield {cell} fatfield}} != 0) || ({strcmp {fieldpath} {getfield {cell} fieldpath}} != 0) \

    if ( \
        ({strcmp {colfield} {field}} != 0) || ({strcmp {fieldpath} {getfield {cell} fieldpath}} != 0) \
        )
    	nmsgs = {getmsg {graphw} -incoming -count}
    	for (i = 0; i < nmsgs; i = i + 1)
        	src = {getmsg {graphw} -incoming -source {0}}
        	deletemsg {graphw}  {0} -incoming
    	end
		foreach name ({el {cell}/../Tr#[]})
        	oldplot = ({substring {getfield {name} name} 2}) @ "[" @ ({getfield {name} index}) @ "]"
			col = {getfield {name} fg}
    		path = (cellpath) @ "/" @ (oldplot) @ "/" @ (fieldpath)
			if (({exists {path}}))
    			addmsg {path} {graphw} PLOT {colfield}  \
    			    *{oldplot} *{col}
			end
		end
        setfield {cell} colfield {colfield}
        //DHB setfield {cell} fatfield {fatfield}
        setfield {cell} fieldpath {fieldpath}
		setfield {graphw} YUnits {fieldpath}:{colfield}
    end

    set_cell_flag {cell} autofat {autofat}
    set_cell_flag {cell} autocol {autocol}
    //DHB set_cell_flag {cell} colfix {colfix}
    //DHB set_cell_flag {cell} fatfix {fatfix}

    if (autocol == 0)
        if (colmin != ({getfield {cell} colmin}))
            setfield {cell} colmin {colmin}
        end
        if (colmax != ({getfield {cell} colmax}))
            setfield {cell} colmax {colmax}
        end
    end
    if (autofat == 0)
        if (fatmin != ({getfield {cell} fatmin}))
            setfield {cell} fatmin {fatmin}
        end
        if (fatmax != ({getfield {cell} fatmax}))
            setfield {cell} fatmax {fatmax}
        end
    end
    if (fatrange != ({getfield {cell} fatrange}))
        setfield {cell} fatrange {fatrange}
    end


    if (hide)
        xhide {cellscale}
    end

    xupdate ..
    pope
end

function do_xout(num)
	str num

	str draww = (cellpath) @ "xout" @ (num) @ "/draw"
	int xoutwidth = (user_screenwidth - 380)/2
	if ({strcmp {num} "1"} == 0)
		if ((user_numxouts) == 1)
			create x1form {cellpath}xout1 [380,50,600,470]
		else
			create x1form {cellpath}xout1  \
			    [380,50,{xoutwidth},470]
		end
	else
		create x1form {cellpath}xout2  \
		    [{380 + xoutwidth},50,{xoutwidth},470]
	end
	pushe {cellpath}xout{num}
	disable .
	create x1label "CELL GEOMETRY" [1%,2,70%,30]
	create x1draw draw [1%,2,98%,2:parent.bottom] -transform ortho3d \
	    -wx {1.4e-3} -wy  {1.4e-3} \
	    -cz 0.2e-3 -vx 10 -vy -15 -vz 7 /* -transform ortho3d */
	//DHB setfield ^ wx {user_wx} wy {user_wy} cx {user_cx} cy {user_cy}  \
	    //DHB cz {user_cz}
	setfield ^ xmin {user_cx - user_wx/2} xmax {user_cx + user_wx/2} \
	    ymin {user_cy - user_wy/2} ymax {user_cy + user_wy/2}
	//setfield ^ transform o
	if ((user_symcomps))
		create x1cell draw/cell -path  \
		    {cellpath}/##[TYPE=symcompartment] /* -fatfield dia */  \
		    -colfield Vm -autocol FALSE -colmin -0.1 -colmax  \
		    0.05
	else
		create x1cell draw/cell -path  \
		    {cellpath}/##[TYPE=compartment] /* -fatfield dia */  \
		    -colfield Vm -autocol FALSE -colmin -0.1 -colmax  \
		    0.05
	end
	if ({strcmp {num} "1"} == 0)

	setfield {draww}/cell fatrange {user_fatrange1}  \
		    fieldpath {user_path1} colfield {user_field1}  \
		    colmax {user_colmax1} colmin {user_colmin1}  \
		    labelmode none rooticon none
    	// set_cell_flag {cellpath}xout1/draw/cell colfix {user_colfix1}
    	// set_cell_flag {cellpath}xout1/draw/cell fatfix {user_fatfix1}
	else
		setfield {draww}/cell fatrange {user_fatrange2}  \
		    fieldpath {user_path2} colfield {user_field2}  \
		    colmax {user_colmax2} colmin {user_colmin2}  \
		    labelmode none rooticon none
    	// set_cell_flag {cellpath}xout2/draw/cell colfix {user_colfix2}
    	// set_cell_flag {cellpath}xout2/draw/cell fatfix {user_fatfix2}
	end
   	scalecell {draww}"/cell"

   	setup_mouse {draww} 50 0 inject "do_inject "{num} unject  \
   	    "clear_inject "{num} dummy do_dummy
	setup_mouse {draww} 50 0 Vclamp "do_vclamp "{num} unclamp  \
	    "clear_vclamp "{num} dummy do_dummy
   	setup_mouse {draww} 50 0 add_plot "add_plot "{num} drop_plot  \
   	    "drop_plot "{num} dummy do_dummy
	setup_mouse {draww} 50 0 RandSyn "do_rand "{num} UnRand  \
	    "do_unrand "{num} dummy do_dummy
	setup_mouse {draww} 50 0 SynAct "do_act "{num} UnAct  \
	    "do_unact "{num} dummy do_dummy
	setup_mouse {draww} 50 0 SynSpike "do_spike "{num} UnSpike  \
	    "do_unspike "{num} dummy do_dummy
	useclock draw/cell 9
	//	draw_control draw 0 0
	pope
end