ISTR that when I made a script for this camera, I just used key presses for the zoom lever, so it's quite possible this doesn't work (I'm not sure if I tried the other way, I was in a hurry). I believe that zoom_busy and zoom_status should be OK, you can always double check them with misc debug vals.
With only a handful of zoom steps, the button press method is quite workable. This is what I used
function set_zoom_step(n)
local current=get_prop(props.ZOOM_POS)
if n >= get_zoom_steps() then
n = get_zoom_steps() - 1
end
if n < 0 then
n=0
end
-- we don't test for overshoot
if current < n then
-- TODO won't work well for S
-- can't hold down because propcase doesn't update until after release :X
while get_prop(props.ZOOM_POS) < n do
click("zoom_in")
sleep(650)
end
elseif current > n then
while get_prop(props.ZOOM_POS) > n do
click("zoom_in")
sleep(650)
end
end
end
translating to ubasic is left as an exercise to the reader