void merge(name, dest)
    char *name, *dest;
{
    char *from;
    int dlen;

    strcpy(dest, current_file);
    if (from = strrchr(dest, '/')) {  /* strip filename */
      *from = 0;
      dlen = from - dest;
    } else {
      /* current_file was the file_name */
      /* include from the root directory */
      *dest = 0;
      dlen = 0;
    }

    from = name;
    if (*from == '/') {
      *dest=0;        /* absolute path */
      dlen = 0;
      do from++; while (*from == '/');
    }

    while(*from) {
      if(!strncmp(from, "../", 3)) {
          char *tmp;
          
          if(*dest == 0) /* including from above mudlib is NOT allowed */
              break;
          tmp = strrchr(dest, '/');
          if(tmp == NULL) { /* 1 component in dest */
              *dest = 0;
              dlen = 0;
          } else {
              *tmp = 0;
              dlen = tmp - dest;
          } from +=3;   /* skip "../" */
      }
      else if(!strncmp(from, "./", 2)) {
          from += 2;
      }
      else { /* append first component to dest */
          char *q;
          
          if(*dest) {
              /* only if dest is not empty !! */
              dest[dlen] = '/';
              dest[++dlen] = '\0';
          }
          q = strchr(from, '/');
          
          if(q) { /* from has 2 or more components */
              while(*from=='/') /* find the start */
                  from++;
              strncpy(dest+dlen, from, q - from);
              dest[dlen += q-from] = '\0';
              for(from = q+1;*from=='/';from++)
                  ;
          }
          else {
              /* this was the last component */
              strcat(dest, from);
              break;
          }
      }
    }
}
