diff -ur libgeda-orig/noweb/f_basic.nw libgeda/noweb/f_basic.nw
--- libgeda-orig/noweb/f_basic.nw	2005-01-27 19:27:25.000000000 +0100
+++ libgeda/noweb/f_basic.nw	2005-01-27 19:01:56.000000000 +0100
@@ -15,7 +15,6 @@
 <<f_basic.c : f_close()>>
 <<f_basic.c : f_save_close()>>
 <<f_basic.c : f_save()>>
-<<f_basic.c : f_get_directory_from_path()>>
 <<f_basic.c : f_normalize_filename()>>
 
 @ 
@@ -64,12 +63,14 @@
 @section Function @code{f_open()}
 
 @defun f_open w_current filename
+Opens the schematic file.
+
+It returns 0 on failure and 1 on success.
+
+Before it reads the schematic, it tries to open and read the local gafrc file.
 @end defun
 
 <<f_basic.c : f_open()>>=
-/* This fcn opens the schematic file.  It returns 0 on failure and 1 
- * on success.  Before it reads the schematic, it tries to open 
- * and read the local gafrc file.  */
 int
 f_open(TOPLEVEL *w_current, char *filename)
 {
@@ -85,7 +86,7 @@
              w_current->init_top, w_current->init_bottom);
 
   /* get full, absolute path to file */
-  full_filename = u_basic_strdup(f_normalize_filename(filename)); 
+  full_filename = f_normalize_filename(filename); 
 
   /* write full, absolute filename into page_current->page_filename */
   if (w_current->page_current->page_filename) {
@@ -95,12 +96,12 @@
 
 
   /* Before we open the page, let's load the corresponding gafrc. */
-  file_directory = f_get_directory_from_path(full_filename);  /* experimental call  */
+  file_directory = g_dirname (full_filename);  /* experimental call  */
 
   full_rcfilename = u_basic_strdup_multiple(file_directory,  
-	     				      PATH_SEPARATER_STRING, 
-					      "gafrc", 
-					      NULL);
+                                            G_DIR_SEPARATOR_S, 
+                                            "gafrc",
+                                            NULL);
   /* the directory gets reset in here to file_directory. */
   g_rc_parse_specified_rc(w_current, full_rcfilename);
 
@@ -131,7 +132,6 @@
 
   w_current->page_current->CHANGED=0; /* added 4/7/98 */
 
-  /* Do I really need to free these, or will they just go away when I return? */
   free(file_directory);
   free(full_filename);
   free(full_rcfilename);
@@ -194,69 +194,13 @@
 
 
 /* -------------------------------------------------- */
-@section Function @code{f_get_directory_from_path()}
-
-@defun f_get_directory_from_path path
-@end defun
-
-<<f_basic.c : f_get_directory_from_path()>>=
-/* ------------------------------------------------------------- *
- * given a path like /home/user/foo.sch, this fcn returns the 
- * directory /home/user.  Note that I use PATH_SEPARATER_* to make
- * the fcn transportable.
- * ------------------------------------------------------------- */
-char* f_get_directory_from_path(char *path)
-{
-  int num_slash;
-  int i;
-  char *base_directory = NULL;
-  char *temp_string;
-
-  /*
-   * I should probably do some sanity checking of the path here
-   */
-
-  num_slash = u_basic_count_char(path, PATH_SEPARATER_CHAR);
-
-  /* 
-   * Now we know how many slashes are in the file path.  Now assemble the
-   * file path by taking portions of path and concatenating them
-   * together. 
-   */
-  base_directory = u_basic_strdup(""); /* hack to make u_basic_strdup_multiple happy */
-  for (i = 1; i <= num_slash-1; i++) {
-    temp_string = u_basic_breakup_string(path, PATH_SEPARATER_CHAR, i);
-    base_directory = u_basic_strdup_multiple(base_directory,
-                                             PATH_SEPARATER_STRING, 
-                                             temp_string,
-                                             NULL);
-    free(temp_string);
-  }
-
-  
-
-#ifdef DEBUG 
-  printf ("In f_get_directory_from_path, base_directory = %s\n", base_directory);
-#endif
-
-  return base_directory;
-
-}
-
-@ %def f_get_directory_from_path
-
-
-/* -------------------------------------------------- */
 @section Function @code{f_normalize_filename()}
 
 @defun f_normalize_filename filename
+Given a filename in any format, this returns the full, absolute resolved filename.
 @end defun
 
 <<f_basic.c : f_normalize_filename()>>=
-/* ------------------------------------------------------------- *
- * Given a filename in any format, this returns the full, absolute
- * resolved filename,
- * ------------------------------------------------------------- */
 char* f_normalize_filename(char *filename)
 {
   char filename_buffer[1024];  /* nasty hack for realpath */
diff -ur libgeda-orig/noweb/g_rc.nw libgeda/noweb/g_rc.nw
--- libgeda-orig/noweb/g_rc.nw	2005-01-27 19:27:25.000000000 +0100
+++ libgeda/noweb/g_rc.nw	2005-01-27 18:51:42.000000000 +0100
@@ -118,7 +118,6 @@
   char *tmp;
   GList *found_rc_filename_element;
   char *rc_file_directory;
-  char *msg;
 
   if (w_current->wid == -1) {
     /* This is a preview window. Don't do any RC file processing */
@@ -127,22 +126,22 @@
 
 
   /* First see if fname is in list of previously read files. */
-  found_rc_filename_element = (GList *) g_list_find_custom(w_current->RC_list, 
-                                                           (gconstpointer) fname,
-                                                           (GCompareFunc) strcmp);
+  found_rc_filename_element = g_list_find_custom(w_current->RC_list, 
+                                                 (gconstpointer) fname,
+                                                 (GCompareFunc) strcmp);
   if (found_rc_filename_element != NULL) {
     /* We've already read this one in. */
     found_rc = 1;
-    msg = u_basic_strdup("RC file [%s] already read in.\n");
-    s_log_message(msg, fname);
+    s_log_message("RC file [%s] already read in.\n", fname);
     return found_rc;
   }
 
   /* This is a new RC file.  First change directory to its directory. */
-  rc_file_directory = f_get_directory_from_path(fname);
+  rc_file_directory = g_dirname (fname);
   if (rc_file_directory) { 
     chdir(rc_file_directory);  
     /* Probably should do some checking of chdir return values */
+    free (rc_file_directory);
   }
 
   /* Now try to read in contents of RC file.  */
diff -ur libgeda-orig/noweb/s_page.nw libgeda/noweb/s_page.nw
--- libgeda-orig/noweb/s_page.nw	2005-01-27 19:27:25.000000000 +0100
+++ libgeda/noweb/s_page.nw	2005-01-27 15:57:39.000000000 +0100
@@ -552,7 +552,9 @@
   w_current->page_current = p_new;
 
   if (w_current->page_current->page_filename) { /* sanity check */
-    chdir(f_get_directory_from_path(w_current->page_current->page_filename));
+    gchar *dirname = g_dirname (w_current->page_current->page_filename);
+    chdir (dirname);
+    g_free (dirname);
   }
 }
 
diff -ur libgeda-orig/noweb/s_project.nw libgeda/noweb/s_project.nw
--- libgeda-orig/noweb/s_project.nw	2005-01-27 19:27:25.000000000 +0100
+++ libgeda/noweb/s_project.nw	2005-01-27 16:00:28.000000000 +0100
@@ -346,10 +346,10 @@
 
 /* -------------------------------------------------------- */
 @section Function @code{s_project_fill_out()}
-After s_project_alloc, this fills out the 
-guts of the new project.  This is the top of the s_project_* functions
-@defun s_project_fill_out
 
+@defun s_project_fill_out
+Fills out the guts of the new project after [[s_project_alloc]].
+This is the top of the [[s_project_*]] functions
 @end defun
 
 <<s_project.c : s_project_fill_out()>>=
