{ modname = strrchr (filename, '\\'); if (modname != NULL) ++modname; else modname = filename; }
modname = filename;
ieee_start_compilation_unit (p, filename)     PTR p;     const char *filename;{  struct ieee_handle *info = (struct ieee_handle *) p;  const char *modname;  char *c, *s;  unsigned int nindx;  if (info->filename != NULL)    {      if (! ieee_finish_compilation_unit (info))	return false;    }  info->filename = filename;  modname = strrchr (filename, '/');  if (modname != NULL)    ++modname;  else    {      modname = strrchr (filename, '\\');      if (modname != NULL)	++modname;      else	modname = filename;    }  c = xstrdup (modname);  s = strrchr (c, '.');  if (s != NULL)    *s = '\0';  info->modname = c;  if (! ieee_init_buffer (info, &info->types)      || ! ieee_init_buffer (info, &info->vars)      || ! ieee_init_buffer (info, &info->cxx)      || ! ieee_init_buffer (info, &info->linenos))    return false;  info->ranges = NULL;  /* Always include a BB1 and a BB3 block.  That is what the output of     the MRI linker seems to look like.  */  if (! ieee_change_buffer (info, &info->types)      || ! ieee_write_byte (info, (int) ieee_bb_record_enum)      || ! ieee_write_byte (info, 1)      || ! ieee_write_number (info, 0)      || ! ieee_write_id (info, info->modname))    return false;  nindx = info->name_indx;  ++info->name_indx;  if (! ieee_change_buffer (info, &info->vars)      || ! ieee_write_byte (info, (int) ieee_bb_record_enum)      || ! ieee_write_byte (info, 3)      || ! ieee_write_number (info, 0)      || ! ieee_write_id (info, info->modname))    return false;  return true;}