Never mind... I figured it out.
Code:
AviSource("D:\Tape 1v1.avi")
shift_fields_GMa(58, 0, 1)
function shift_fields_GMa(clip c, int frame_number, line_shift_even, line_shift_odd)
{
# separate fields tff
c_tff_sep=c.AssumeTFF().separateFields()
# separate fields tff even
c_tff_sep_even=c_tff_sep.SelectEven()
# separate fields tff odd
c_tff_sep_odd=c_tff_sep.SelectOdd()
# shift field even
c_tff_sep_even_rep = (line_shift_even > 0) ?\
c_tff_sep_even.trim(0,frame_number-1)\
++c_tff_sep_even.trim(frame_number,frame_number).crop(0,0,0,-line_shift_even).addborders(0,line_shift_even,0,0)\
++c_tff_sep_even.trim(frame_number+1,0)\
:\
c_tff_sep_even.trim(0,frame_number-1)\
++c_tff_sep_even.trim(frame_number,frame_number).crop(0,-line_shift_even,0,0).addborders(0,0,0,-line_shift_even)\
++c_tff_sep_even.trim(frame_number+1,0)
# shift field odd
c_tff_sep_odd_rep = (line_shift_odd > 0) ?\
c_tff_sep_odd.trim(0,frame_number-1)\
++c_tff_sep_odd.trim(frame_number,frame_number).crop(0,0,0,-line_shift_odd).addborders(0,line_shift_odd,0,0)\
++c_tff_sep_odd.trim(frame_number+1,0)\
:\
c_tff_sep_odd.trim(0,frame_number-1)\
++c_tff_sep_odd.trim(frame_number,frame_number).crop(0,-line_shift_odd,0,0).addborders(0,0,0,-line_shift_odd)\
++c_tff_sep_odd.trim(frame_number+1,0)
# repaired video
c_rep=interleave(c_tff_sep_even_rep,c_tff_sep_odd_rep).Weave()
return(c_rep)
}