* <note><title>Chimara</title>
* <para>
* Chimara uses a <link
- * linkend="gtk-GtkFileChooserDialog">GtkFileChooserDialog</link>.
+ * linkend="gtk-GtkFileChooserDialog">GtkFileChooserDialog</link>. The default
+ * starting location for the dialog may be set with glkunix_set_base_file().
* </para></note>
*
* @fmode must be one of these values:
* <variablelist>
* <varlistentry>
- * <term>#filemode_Read</term>
+ * <term>%filemode_Read</term>
* <listitem><para>The file must already exist; and the player will be asked
* to select from existing files which match the usage.</para></listitem>
* </varlistentry>
* <varlistentry>
- * <term>#filemode_Write</term>
+ * <term>%filemode_Write</term>
* <listitem><para>The file should not exist; if the player selects an
* existing file, he will be warned that it will be replaced.
* </para></listitem>
* </varlistentry>
* <varlistentry>
- * <term>#filemode_ReadWrite</term>
+ * <term>%filemode_ReadWrite</term>
* <listitem><para>The file may or may not exist; if it already exists, the
* player will be warned that it will be modified.</para></listitem>
* </varlistentry>
* <varlistentry>
- * <term>#filemode_WriteAppend</term>
- * <listitem><para>Same behavior as #filemode_ReadWrite.</para></listitem>
+ * <term>%filemode_WriteAppend</term>
+ * <listitem><para>Same behavior as %filemode_ReadWrite.</para></listitem>
* </varlistentry>
* </variablelist>
*
return NULL;
}
+ if(glk_data->current_dir)
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), glk_data->current_dir);
+
if(gtk_dialog_run( GTK_DIALOG(chooser) ) != GTK_RESPONSE_ACCEPT)
{
gtk_widget_destroy(chooser);
* </para></note>
* <note><title>Chimara</title>
* <para>
- * In Chimara, the file is created in the current working directory.
+ * In Chimara, the file is created in the directory last set by
+ * glkunix_set_base_file(), and otherwise in the current working directory.
* </para></note>
*
* Since filenames are highly platform-specific, you should use
{
g_return_val_if_fail(name != NULL && strlen(name) > 0, NULL);
+ /* Do any string-munging here to remove illegal Latin-1 characters from
+ filename. On ext3, the only illegal characters are '/' and '\0'. */
+
+ char *ptr = name;
+ while(*ptr++)
+ if(*ptr == '/')
+ *ptr = '_';
+
/* Find out what encoding filenames are in */
const gchar **charsets; /* Do not free */
g_get_filename_charsets(&charsets);
WARNING_S("Error during latin1->filename conversion", error->message);
return NULL;
}
-
- /* Do any string-munging here to remove illegal characters from filename.
- On ext3, the only illegal characters are '/' and '\0'. TODO: Should this
- function be allowed to reference files in other directories, or should we
- disallow '/'? */
-
- frefid_t f = fileref_new(osname, rock, usage, filemode_ReadWrite);
+
+ gchar *path;
+ if(glk_data->current_dir)
+ path = g_build_filename(glk_data->current_dir, osname, NULL);
+ else
+ path = g_strdup(osname);
g_free(osname);
+
+ frefid_t f = fileref_new(path, rock, usage, filemode_ReadWrite);
+ g_free(path);
return f;
}
* original fileref is not modified.)
*
* The use of this function can be tricky. If you change the type of the fileref
- * (#fileusage_Data, #fileusage_SavedGame, etc), the new reference may or may
+ * (%fileusage_Data, %fileusage_SavedGame, etc), the new reference may or may
* not point to the same actual disk file.
*
* <note><para>
* unpredictable. It is safest to change the type of a fileref only if it refers
* to a nonexistent file.
*
- * If you change the mode of a fileref (#fileusage_TextMode,
- * #fileusage_BinaryMode), but leave the rest of the type unchanged, the new
+ * If you change the mode of a fileref (%fileusage_TextMode,
+ * %fileusage_BinaryMode), but leave the rest of the type unchanged, the new
* fileref will definitely point to the same disk file as the old one.
*
* Obviously, if you write to a file in text mode and then read from it in