+ argv[1] = g_strdup_printf ("file://%s", relocate (DOCDIR "/pspp.xml"));
+ htmlfilename = g_strdup ("index.html");
+ htmlargv[1] = g_strdup_printf ("file://%s", htmlfilename);
+ }
+ else
+ {
+ gchar **tokens = NULL;
+ const int maxtokens = 5;
+ int idx = 0;
+ argv[1] = g_strdup_printf ("file://%s#%s",
+ relocate (DOCDIR "/pspp.xml"), page);
+ tokens = g_strsplit (page, "#", maxtokens);
+ for(;tokens[idx] && idx < maxtokens;idx++);
+ htmlfilename = g_strdup_printf ("%s.html", tokens[idx-1]);
+ g_strfreev (tokens);
+ }
+
+ htmlfullname = g_strdup_printf ("%s/%s", relocate (DOCDIR "/pspp.html"),
+ htmlfilename);
+ if (g_file_test (relocate (DOCDIR "/pspp.html"), G_FILE_TEST_EXISTS))
+ htmlargv[1] = g_strdup_printf ("file://%s", htmlfullname);
+ else
+ htmlargv[1] = g_strdup_printf (PACKAGE_URL "manual/html_node/%s",
+ htmlfilename);
+
+ g_free (htmlfullname);
+ g_free (htmlfilename);
+
+ if (! (g_spawn_async (NULL, argv,
+ NULL, G_SPAWN_SEARCH_PATH,
+ NULL, NULL, NULL, &err) ||
+ g_spawn_async (NULL, htmlargv,
+ NULL, G_SPAWN_SEARCH_PATH,
+ NULL, NULL, NULL, &htmlerr))
+ )
+ {
+ msg (ME, _("Cannot open reference manual via yelp: %s. "
+ "Cannot open via html: %s "
+ "The PSSP manual is also available at %s"),