/* { dg-do compile } */
/* { dg-require-effective-target ia32 } */
/* { dg-options "-O2 -march=pentiumpro" } */

typedef struct t_anim_info {
   char        *new_filename;
   long         first_frame_nr; 
} t_anim_info;
void gimp_image_delete(int);
static int
p_frames_to_multilayer(t_anim_info *ainfo_ptr,
                      long range_from, long range_to)
{
  long    l_cur_frame_nr;
  long    l_step, l_begin, l_end;
  int  l_tmp_image_id;
  int  l_new_image_id;
  if(range_from > range_to)
  {
    l_step  = -1;      
    if(range_to < ainfo_ptr->first_frame_nr)
    { l_begin = ainfo_ptr->first_frame_nr; 
     }
  }
  else
  {
    l_step  = 1;       
  }
  l_cur_frame_nr = l_begin;
  while(1)
  {
    if(ainfo_ptr->new_filename == ((void *)0) )
    if(l_tmp_image_id < 0)
      gimp_image_delete(l_tmp_image_id);
    if(l_cur_frame_nr == l_end)
       break;
    l_cur_frame_nr += l_step;
  }
  return 0;
}
