BOOL NNLayer::load_model (FILE *f) {
    assert(f != NULL);
    free_space();

    ignore_comment(f);
    if (fscanf(f, "%u %u %lf %lf\n",
               &n_input, &n_neuron, &winit_min, &winit_max) != 4)
        return FALSE;
    if (winit_min >= winit_max) return FALSE;

    if (n_input <= 0 || n_neuron <= 0)
        return FALSE;

    alloc_space();

    for (size_t i = 0; i < n_neuron; i++)
        for (size_t j = 0; j <= n_input; j++)
            if (fscanf(f, "%lf", &weight[i][j]) != 1)
                return FALSE;
    return TRUE;
}
PRIVATE char *get_array1(int *arr, int size)
{
  int    i, p, pos, pp, r, last;
  char  *line, buf[16];


  i = last = 0;
  while( i<size ) {
    line = get_line(fp);
    if (!line) vrna_message_error("unexpected end of file in get_array1");
    ignore_comment(line);
    pos=0;
    while ((i<size)&&(sscanf(line+pos,"%15s%n", buf, &pp)==1)) {
      pos += pp;
      if (buf[0]=='*') {i++; continue;}
      else if (buf[0]=='x') { /* should only be used for loop parameters */
        if (i==0) vrna_message_error("can't extrapolate first value");
        p = arr[last] + (int) (0.5+ lxc37*log(((double) i)/(double)(last)));
      }
      else if (strcmp(buf,"DEF") == 0) p = DEF;
      else if (strcmp(buf,"INF") == 0) p = INF;
      else if (strcmp(buf,"NST") == 0) p = NST;
      else {
        r=sscanf(buf,"%d", &p);
        if (r!=1) {
          return line+pos;
          fprintf(stderr, "can't interpret `%s' in get_array1\n", buf);
          exit(1);
        }
        last = i;
      }
      arr[i++]=p;
    }
    free(line);
  }

  return NULL;
}