summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
authorRuss Allbery <rra@debian.org>2013-07-21 13:49:36 -0700
committerRuss Allbery <rra@debian.org>2013-07-21 13:49:36 -0700
commit02afa49ca106bbd29895a61ce16c110d3d819b3d (patch)
tree5b1c86964e47ed31dca8c4f96fa9b88c48f28e0a /file.c
parent71a137c6c77cadddd4ed628cf0dcc310fbb32a49 (diff)
Imported Upstream version 1.01.003
Diffstat (limited to 'file.c')
-rw-r--r--file.c683
1 files changed, 369 insertions, 314 deletions
diff --git a/file.c b/file.c
index 4dbb2ae..675fc26 100644
--- a/file.c
+++ b/file.c
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * $Id: file.c,v 1.24 2011/01/30 17:10:52 plm Exp $
+ * $Id: file.c,v 1.25 2013/06/16 02:16:12 mdpetch Exp $
*/
#include "config.h"
@@ -25,417 +25,472 @@
#include <stdlib.h>
ExportFormat export_format[] = {
- {EXPORT_SGF, ".sgf", N_("Gnu Backgammon File"), "sgf", {TRUE, TRUE, TRUE}}, /*must be the first element */
- {EXPORT_HTML, ".html", N_("HTML"), "html", {TRUE, TRUE, TRUE}},
- {EXPORT_GAM, ".gam", N_("Jellyfish Game"), "gam", {FALSE, TRUE, FALSE}},
- {EXPORT_MAT, ".mat", N_("Jellyfish Match"), "mat", {TRUE, FALSE, FALSE}},
- {EXPORT_POS, ".pos", N_("Jellyfish Position"), "pos", {FALSE, FALSE, TRUE}},
- {EXPORT_LATEX, ".tex", N_("LaTeX"), "latex", {TRUE, TRUE, FALSE}},
+ {EXPORT_SGF, ".sgf", N_("Gnu Backgammon File"), "sgf", {TRUE, TRUE, TRUE}
+ }
+ , /*must be the first element */
+ {EXPORT_HTML, ".html", N_("HTML"), "html", {TRUE, TRUE, TRUE}
+ }
+ ,
+ {EXPORT_GAM, ".gam", N_("Jellyfish Game"), "gam", {FALSE, TRUE, FALSE}
+ }
+ ,
+ {EXPORT_MAT, ".mat", N_("Jellyfish Match"), "mat", {TRUE, FALSE, FALSE}
+ }
+ ,
+ {EXPORT_POS, ".pos", N_("Jellyfish Position"), "pos", {FALSE, FALSE, TRUE}
+ }
+ ,
+ {EXPORT_LATEX, ".tex", N_("LaTeX"), "latex", {TRUE, TRUE, FALSE}
+ }
+ ,
#if HAVE_PANGOCAIRO
- {EXPORT_PDF, ".pdf", N_("PDF"), "pdf", {TRUE, TRUE, TRUE}},
+ {EXPORT_PDF, ".pdf", N_("PDF"), "pdf", {TRUE, TRUE, TRUE}
+ }
+ ,
#endif
- {EXPORT_TEXT, ".txt", N_("Plain Text"), "text", {TRUE, TRUE, TRUE}},
+ {EXPORT_TEXT, ".txt", N_("Plain Text"), "text", {TRUE, TRUE, TRUE}
+ }
+ ,
#if HAVE_LIBPNG
- {EXPORT_PNG, ".png", N_("Portable Network Graphics"), "png", {FALSE, FALSE, TRUE}},
+ {EXPORT_PNG, ".png", N_("Portable Network Graphics"), "png", {FALSE, FALSE, TRUE}
+ }
+ ,
#endif
#if HAVE_PANGOCAIRO
- {EXPORT_PS, ".ps", N_("Postscript"), "ps", {TRUE, TRUE, TRUE}},
+ {EXPORT_PS, ".ps", N_("Postscript"), "ps", {TRUE, TRUE, TRUE}
+ }
+ ,
#endif
- {EXPORT_SNOWIETXT, ".txt", N_("Snowie Text"), "snowietxt", {TRUE, TRUE, TRUE}},
+ {EXPORT_SNOWIETXT, ".txt", N_("Snowie Text"), "snowietxt", {TRUE, TRUE, TRUE}
+ }
+ ,
#if HAVE_PANGOCAIRO
- {EXPORT_SVG, ".svg", N_("SVG"), "svg", {FALSE, FALSE, TRUE}},
+ {EXPORT_SVG, ".svg", N_("SVG"), "svg", {FALSE, FALSE, TRUE}
+ }
+ ,
#endif
};
ImportFormat import_format[] = {
- {IMPORT_SGF, ".sgf", N_("Gnu Backgammon File"), "sgf"}, /*must be the first element */
- {IMPORT_SGG, ".sgg", N_("Gamesgrid Save Game"), "sgg"},
- {IMPORT_BKG, ".bkg", N_("Hans Berliner's BKG Format"), "bkg"},
- {IMPORT_MAT, ".mat", N_("Jellyfish Match"), "mat"},
- {IMPORT_OLDMOVES, ".fibs", N_("FIBS oldmoves format"), "oldmoves"},
- {IMPORT_POS, ".pos", N_("Jellyfish Position"), "pos"},
- {IMPORT_SNOWIETXT, ".txt", N_("Snowie Text"), "snowietxt"},
- {IMPORT_TMG, ".tmg", N_("True Moneygames"), "tmg"},
- {IMPORT_EMPIRE, ".gam", N_("GammonEmpire Game"), "empire"},
- {IMPORT_PARTY, ".gam", N_("PartyGammon Game"), "party"},
- {IMPORT_BGROOM, ".bgf", N_("BackGammonRoom Game"), "bgroom"},
- {N_IMPORT_TYPES, NULL, N_("Unknown file format"), NULL}
+ {IMPORT_SGF, ".sgf", N_("Gnu Backgammon File"), "sgf"}
+ , /*must be the first element */
+ {IMPORT_SGG, ".sgg", N_("Gamesgrid Save Game"), "sgg"}
+ ,
+ {IMPORT_BKG, ".bkg", N_("Hans Berliner's BKG Format"), "bkg"}
+ ,
+ {IMPORT_MAT, ".mat", N_("Jellyfish Match"), "mat"}
+ ,
+ {IMPORT_OLDMOVES, ".fibs", N_("FIBS oldmoves format"), "oldmoves"}
+ ,
+ {IMPORT_POS, ".pos", N_("Jellyfish Position"), "pos"}
+ ,
+ {IMPORT_SNOWIETXT, ".txt", N_("Snowie Text"), "snowietxt"}
+ ,
+ {IMPORT_TMG, ".tmg", N_("True Moneygames"), "tmg"}
+ ,
+ {IMPORT_EMPIRE, ".gam", N_("GammonEmpire Game"), "empire"}
+ ,
+ {IMPORT_PARTY, ".gam", N_("PartyGammon Game"), "party"}
+ ,
+ {IMPORT_BGROOM, ".bgf", N_("BackGammonRoom Game"), "bgroom"}
+ ,
+ {N_IMPORT_TYPES, NULL, N_("Unknown file format"), NULL}
};
typedef struct _FileHelper {
- FILE *fp;
- size_t dataRead;
- unsigned int dataPos;
- char *data;
+ FILE *fp;
+ size_t dataRead;
+ unsigned int dataPos;
+ char *data;
} FileHelper;
/* Data structures and functions for getting file type data */
-static FileHelper *OpenFileHelper(const char *filename)
+static FileHelper *
+OpenFileHelper(const char *filename)
{
- FileHelper *fh;
- if (!filename || !g_file_test(filename, G_FILE_TEST_EXISTS) || g_file_test(filename, G_FILE_TEST_IS_DIR))
- return NULL; /* File not found */
-
- fh = g_new(FileHelper, 1);
- fh->fp = g_fopen(filename, "r");
- if (!fh->fp) { /* Failed to open file */
- g_free(fh);
- return NULL;
- }
- fh->dataRead = 0;
- fh->dataPos = 0;
- fh->data = NULL;
- return fh;
+ FileHelper *fh;
+ if (!filename || !g_file_test(filename, G_FILE_TEST_EXISTS) || g_file_test(filename, G_FILE_TEST_IS_DIR))
+ return NULL; /* File not found */
+
+ fh = g_new(FileHelper, 1);
+ fh->fp = g_fopen(filename, "r");
+ if (!fh->fp) { /* Failed to open file */
+ g_free(fh);
+ return NULL;
+ }
+ fh->dataRead = 0;
+ fh->dataPos = 0;
+ fh->data = NULL;
+ return fh;
}
-static void CloseFileHelper(/*lint -e{818}*/FileHelper * fh)
+static void
+CloseFileHelper( /*lint -e{818} */ FileHelper * fh)
{
- fclose(fh->fp);
- free(fh->data);
+ fclose(fh->fp);
+ free(fh->data);
}
-static void fhReset(FileHelper * fh)
-{ /* Reset data pointer to start of file */
- fh->dataPos = 0;
+static void
+fhReset(FileHelper * fh)
+{ /* Reset data pointer to start of file */
+ fh->dataPos = 0;
}
-static void fhDataGetChar(FileHelper * fh)
+static void
+fhDataGetChar(FileHelper * fh)
{
- size_t numRead;
- if (fh->dataPos < fh->dataRead)
- return;
+ size_t numRead;
+ if (fh->dataPos < fh->dataRead)
+ return;
#define BLOCK_SIZE 1024
#define MAX_READ_SIZE 5000
- fh->data = realloc(fh->data, fh->dataRead + BLOCK_SIZE);
- if (fh->dataRead > MAX_READ_SIZE)
- numRead = 0; /* Too big - should have worked things out by now! */
- else
- numRead = fread(fh->data + fh->dataRead, 1, BLOCK_SIZE, fh->fp);
- if (numRead < BLOCK_SIZE)
- {
- (fh->data + fh->dataRead)[numRead] = '\0';
- numRead++;
- }
- fh->dataRead += numRead;
+ fh->data = realloc(fh->data, fh->dataRead + BLOCK_SIZE);
+ if (fh->dataRead > MAX_READ_SIZE)
+ numRead = 0; /* Too big - should have worked things out by now! */
+ else
+ numRead = fread(fh->data + fh->dataRead, 1, BLOCK_SIZE, fh->fp);
+ if (numRead < BLOCK_SIZE) {
+ (fh->data + fh->dataRead)[numRead] = '\0';
+ numRead++;
+ }
+ fh->dataRead += numRead;
}
-static char fhPeekNextChar(FileHelper * fh)
+static char
+fhPeekNextChar(FileHelper * fh)
{
- fhDataGetChar(fh);
- return fh->data[fh->dataPos];
+ fhDataGetChar(fh);
+ return fh->data[fh->dataPos];
}
-static char fhReadNextChar(FileHelper * fh)
+static char
+fhReadNextChar(FileHelper * fh)
{
- fhDataGetChar(fh);
- return fh->data[fh->dataPos++];
+ fhDataGetChar(fh);
+ return fh->data[fh->dataPos++];
}
-static int fhPeekNextIsWS(FileHelper * fh)
+static int
+fhPeekNextIsWS(FileHelper * fh)
{
- char c = fhPeekNextChar(fh);
- return (c == ' ' || c == '\t' || c == '\r' || c == '\n');
+ char c = fhPeekNextChar(fh);
+ return (c == ' ' || c == '\t' || c == '\r' || c == '\n');
}
-static void fhSkipWS(FileHelper * fh)
+static void
+fhSkipWS(FileHelper * fh)
{
- while (fhPeekNextIsWS(fh))
- (void)fhReadNextChar(fh);
+ while (fhPeekNextIsWS(fh))
+ (void) fhReadNextChar(fh);
}
-static int fhSkipToEOL(FileHelper * fh)
+static int
+fhSkipToEOL(FileHelper * fh)
{
- char c;
- do {
- c = fhReadNextChar(fh);
- if (c == '\n')
- return TRUE;
- } while (c != '\0');
-
- return FALSE;
+ char c;
+ do {
+ c = fhReadNextChar(fh);
+ if (c == '\n')
+ return TRUE;
+ } while (c != '\0');
+
+ return FALSE;
}
-static int fhReadString(FileHelper * fh, const char *str)
-{ /* Check file has str next */
- while (*str) {
- if (fhReadNextChar(fh) != *str)
- return FALSE;
- str++;
- }
- return TRUE;
+static int
+fhReadString(FileHelper * fh, const char *str)
+{ /* Check file has str next */
+ while (*str) {
+ if (fhReadNextChar(fh) != *str)
+ return FALSE;
+ str++;
+ }
+ return TRUE;
}
-static int fhReadStringNC(FileHelper * fh, const char *str)
-{ /* Check file has str next (ignoring case) */
- while (*str) {
- char c = fhReadNextChar(fh);
- if (g_ascii_tolower(c) != *str)
- return FALSE;
- str++;
- }
- return TRUE;
+static int
+fhReadStringNC(FileHelper * fh, const char *str)
+{ /* Check file has str next (ignoring case) */
+ while (*str) {
+ char c = fhReadNextChar(fh);
+ if (g_ascii_tolower(c) != *str)
+ return FALSE;
+ str++;
+ }
+ return TRUE;
}
-static int fhPeekStringNC(FileHelper * fh, const char *str)
-{ /* Check file has str next (ignoring case) but don't move */
- unsigned int pos = fh->dataPos;
- int ret = TRUE;
- while (*str) {
- char c = fhReadNextChar(fh);
- if (g_ascii_tolower(c) != *str) {
- ret = FALSE;
- break;
- }
- str++;
- }
- fh->dataPos = pos;
- return ret;
+static int
+fhPeekStringNC(FileHelper * fh, const char *str)
+{ /* Check file has str next (ignoring case) but don't move */
+ unsigned int pos = fh->dataPos;
+ int ret = TRUE;
+ while (*str) {
+ char c = fhReadNextChar(fh);
+ if (g_ascii_tolower(c) != *str) {
+ ret = FALSE;
+ break;
+ }
+ str++;
+ }
+ fh->dataPos = pos;
+ return ret;
}
-static int fhReadNumber(FileHelper * fh)
-{ /* Check file has str next */
- int anyNumbers = FALSE;
- do {
- char c = fhPeekNextChar(fh);
- if (!g_ascii_isdigit(c))
- return anyNumbers;
- anyNumbers = TRUE;
- } while (fhReadNextChar(fh) != '\0');
-
- return TRUE;
+static int
+fhReadNumber(FileHelper * fh)
+{ /* Check file has str next */
+ int anyNumbers = FALSE;
+ do {
+ char c = fhPeekNextChar(fh);
+ if (!g_ascii_isdigit(c))
+ return anyNumbers;
+ anyNumbers = TRUE;
+ } while (fhReadNextChar(fh) != '\0');
+
+ return TRUE;
}
-static int fhReadAnyAlphNumString(FileHelper * fh)
+static int
+fhReadAnyAlphNumString(FileHelper * fh)
{
- char c = fhPeekNextChar(fh);
- if (!g_ascii_isalnum(c))
- return FALSE;
- do {
- c = fhPeekNextChar(fh);
- if (!g_ascii_isalnum(c) && c != '_')
- return fhPeekNextIsWS(fh);
- } while (fhReadNextChar(fh) != '\0');
- return TRUE;
+ char c = fhPeekNextChar(fh);
+ if (!g_ascii_isalnum(c))
+ return FALSE;
+ do {
+ c = fhPeekNextChar(fh);
+ if (!g_ascii_isalnum(c) && c != '_')
+ return fhPeekNextIsWS(fh);
+ } while (fhReadNextChar(fh) != '\0');
+ return TRUE;
}
-static int IsSGFFile(FileHelper * fh)
+static int
+IsSGFFile(FileHelper * fh)
{
- const char *elements[] =
- { "(", ";", "FF", "[", "4", "]", "GM", "[", "6", "]", "" };
- const char **test = elements;
-
- fhReset(fh);
- while (**test) {
- fhSkipWS(fh);
- if (!fhReadString(fh, *test))
- return FALSE;
- test++;
- }
- return TRUE;
+ const char *elements[] = { "(", ";", "FF", "[", "4", "]", "GM", "[", "6", "]", "" };
+ const char **test = elements;
+
+ fhReset(fh);
+ while (**test) {
+ fhSkipWS(fh);
+ if (!fhReadString(fh, *test))
+ return FALSE;
+ test++;
+ }
+ return TRUE;
}
-static int IsSGGFile(FileHelper * fh)
+static int
+IsSGGFile(FileHelper * fh)
{
- fhReset(fh);
- fhSkipWS(fh);
-
- if (fhReadAnyAlphNumString(fh)) {
- fhSkipWS(fh);
- if (!fhReadString(fh, "vs."))
- return FALSE;
- fhSkipWS(fh);
- if (fhReadAnyAlphNumString(fh))
- return TRUE;
- }
- return FALSE;
+ fhReset(fh);
+ fhSkipWS(fh);
+
+ if (fhReadAnyAlphNumString(fh)) {
+ fhSkipWS(fh);
+ if (!fhReadString(fh, "vs."))
+ return FALSE;
+ fhSkipWS(fh);
+ if (fhReadAnyAlphNumString(fh))
+ return TRUE;
+ }
+ return FALSE;
}
-static int IsMATFile(FileHelper * fh)
+static int
+IsMATFile(FileHelper * fh)
{
- fhReset(fh);
- do {
- char c;
- fhSkipWS(fh);
- c = fhPeekNextChar(fh);
- if (g_ascii_isdigit(c)) {
- if (fhReadNumber(fh)) {
- fhSkipWS(fh);
- if (fhReadStringNC(fh, "point")) {
- fhSkipWS(fh);
- if (fhReadStringNC(fh, "match"))
- return TRUE;
- }
- }
- return FALSE;
- }
- } while (fhSkipToEOL(fh));
- return FALSE;
+ fhReset(fh);
+ do {
+ char c;
+ fhSkipWS(fh);
+ c = fhPeekNextChar(fh);
+ if (g_ascii_isdigit(c)) {
+ if (fhReadNumber(fh)) {
+ fhSkipWS(fh);
+ if (fhReadStringNC(fh, "point")) {
+ fhSkipWS(fh);
+ if (fhReadStringNC(fh, "match"))
+ return TRUE;
+ }
+ }
+ return FALSE;
+ }
+ } while (fhSkipToEOL(fh));
+ return FALSE;
}
-static int IsTMGFile(FileHelper * fh)
+static int
+IsTMGFile(FileHelper * fh)
{
- fhReset(fh);
- do {
- fhSkipWS(fh);
- if (fhPeekStringNC(fh, "game")) {
- (void)fhReadStringNC(fh, "game");
- fhSkipWS(fh);
- return fhReadNumber(fh)
- && (fhPeekNextChar(fh) == ':');
- }
- (void)fhReadAnyAlphNumString(fh);
- if (fhPeekNextChar(fh) != ':')
- return FALSE;
- } while (fhSkipToEOL(fh));
-
- return FALSE;
+ fhReset(fh);
+ do {
+ fhSkipWS(fh);
+ if (fhPeekStringNC(fh, "game")) {
+ (void) fhReadStringNC(fh, "game");
+ fhSkipWS(fh);
+ return fhReadNumber(fh)
+ && (fhPeekNextChar(fh) == ':');
+ }
+ (void) fhReadAnyAlphNumString(fh);
+ if (fhPeekNextChar(fh) != ':')
+ return FALSE;
+ } while (fhSkipToEOL(fh));
+
+ return FALSE;
}
-static int IsTXTFile(FileHelper * fh)
+static int
+IsTXTFile(FileHelper * fh)
{
- fhReset(fh);
- fhSkipWS(fh);
- if (fhReadNumber(fh) && fhReadNextChar(fh) == ';') {
- fhSkipWS(fh);
- if (fhReadNumber(fh) && fhReadNextChar(fh) == ';')
- return TRUE;
- }
- return FALSE;
+ fhReset(fh);
+ fhSkipWS(fh);
+ if (fhReadNumber(fh) && fhReadNextChar(fh) == ';') {
+ fhSkipWS(fh);
+ if (fhReadNumber(fh) && fhReadNextChar(fh) == ';')
+ return TRUE;
+ }
+ return FALSE;
}
-static int IsJFPFile(FileHelper * fh)
+static int
+IsJFPFile(FileHelper * fh)
{
- char firstbyte;
+ char firstbyte;
- fhReset(fh);
+ fhReset(fh);
- firstbyte = fhReadNextChar(fh);
- if (firstbyte < 124 || firstbyte > 126)
- return FALSE;
+ firstbyte = fhReadNextChar(fh);
+ if (firstbyte < 124 || firstbyte > 126)
+ return FALSE;
- if ((fhReadNextChar(fh) == '\0'))
- return TRUE;
- else
- return FALSE;
+ if ((fhReadNextChar(fh) == '\0'))
+ return TRUE;
+ else
+ return FALSE;
}
-static int IsBKGFile(FileHelper * fh)
+static int
+IsBKGFile(FileHelper * fh)
{
- fhReset(fh);
- fhSkipWS(fh);
- if (fhReadString(fh, "Black"))
- return TRUE;
- fhReset(fh);
- fhSkipWS(fh);
- if (fhReadString(fh, "White"))
- return TRUE;
-
- return FALSE;
+ fhReset(fh);
+ fhSkipWS(fh);
+ if (fhReadString(fh, "Black"))
+ return TRUE;
+ fhReset(fh);
+ fhSkipWS(fh);
+ if (fhReadString(fh, "White"))
+ return TRUE;
+
+ return FALSE;
}
-static int IsGAMFile(FileHelper * fh)
+static int
+IsGAMFile(FileHelper * fh)
{
- fhReset(fh);
- fhSkipWS(fh);
-
- if (fhReadAnyAlphNumString(fh)) {
- fhSkipWS(fh);
- if (fhReadAnyAlphNumString(fh)) {
- fhSkipWS(fh);
- return fhReadString(fh, "1)");
- }
- }
-
- return FALSE;
+ fhReset(fh);
+ fhSkipWS(fh);
+
+ if (fhReadAnyAlphNumString(fh)) {
+ fhSkipWS(fh);
+ if (fhReadAnyAlphNumString(fh)) {
+ fhSkipWS(fh);
+ return fhReadString(fh, "1)");
+ }
+ }
+
+ return FALSE;
}
-static int IsPARFile(FileHelper * fh)
+static int
+IsPARFile(FileHelper * fh)
{
- fhReset(fh);
- fhSkipWS(fh);
+ fhReset(fh);
+ fhSkipWS(fh);
- if (fhReadStringNC(fh, "boardid=")) {
- (void)fhSkipToEOL(fh);
- if (fhReadStringNC(fh, "creator="))
- return TRUE;
- }
+ if (fhReadStringNC(fh, "boardid=")) {
+ (void) fhSkipToEOL(fh);
+ if (fhReadStringNC(fh, "creator="))
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-static int IsBGRFile(FileHelper *fh)
+static int
+IsBGRFile(FileHelper * fh)
{
- fhReset(fh);
- fhSkipWS(fh);
+ fhReset(fh);
+ fhSkipWS(fh);
- if (fhReadStringNC(fh, "bgf version"))
- {
- fhSkipWS(fh);
- if (!fhReadString(fh, "1.2"))
- printf("Unexpected version of bgroom file!\n");
+ if (fhReadStringNC(fh, "bgf version")) {
+ fhSkipWS(fh);
+ if (!fhReadString(fh, "1.2"))
+ printf("Unexpected version of bgroom file!\n");
- return TRUE;
- }
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-extern FilePreviewData *ReadFilePreview(const char *filename)
+extern FilePreviewData *
+ReadFilePreview(const char *filename)
{
- FilePreviewData *fpd;
- FileHelper *fh = OpenFileHelper(filename);
- if (!fh)
- return NULL;
-
- fpd = g_new0(FilePreviewData, 1);
- fpd -> type = N_IMPORT_TYPES;
-
- if (IsSGFFile(fh))
- fpd->type = IMPORT_SGF;
- else if (IsSGGFile(fh))
- fpd->type = IMPORT_SGG;
- else if (IsTXTFile(fh))
- fpd->type = IMPORT_SNOWIETXT;
- else if (IsTMGFile(fh))
- fpd->type = IMPORT_TMG;
- else if (IsMATFile(fh))
- fpd->type = IMPORT_MAT;
- else if (IsJFPFile(fh))
- fpd->type = IMPORT_POS;
- else if (IsBKGFile(fh))
- fpd->type = IMPORT_BKG;
- else if (IsGAMFile(fh))
- fpd->type = IMPORT_EMPIRE;
- else if (IsPARFile(fh))
- fpd->type = IMPORT_PARTY;
- else if (IsBGRFile(fh))
- fpd->type = IMPORT_BGROOM;
-
- CloseFileHelper(fh);
- return fpd;
+ FilePreviewData *fpd;
+ FileHelper *fh = OpenFileHelper(filename);
+ if (!fh)
+ return NULL;
+
+ fpd = g_new0(FilePreviewData, 1);
+ fpd->type = N_IMPORT_TYPES;
+
+ if (IsSGFFile(fh))
+ fpd->type = IMPORT_SGF;
+ else if (IsSGGFile(fh))
+ fpd->type = IMPORT_SGG;
+ else if (IsTXTFile(fh))
+ fpd->type = IMPORT_SNOWIETXT;
+ else if (IsTMGFile(fh))
+ fpd->type = IMPORT_TMG;
+ else if (IsMATFile(fh))
+ fpd->type = IMPORT_MAT;
+ else if (IsJFPFile(fh))
+ fpd->type = IMPORT_POS;
+ else if (IsBKGFile(fh))
+ fpd->type = IMPORT_BKG;
+ else if (IsGAMFile(fh))
+ fpd->type = IMPORT_EMPIRE;
+ else if (IsPARFile(fh))
+ fpd->type = IMPORT_PARTY;
+ else if (IsBGRFile(fh))
+ fpd->type = IMPORT_BGROOM;
+
+ CloseFileHelper(fh);
+ return fpd;
}
-extern char *GetFilename(int CheckForCurrent, ExportType type)
+extern char *
+GetFilename(int CheckForCurrent, ExportType type)
{
- char *sz, tstr[15];
- time_t t;
-
- if (CheckForCurrent && szCurrentFileName && *szCurrentFileName)
- sz = g_strdup_printf("%s%s", szCurrentFileName,
- export_format[type].extension);
- else {
- if (mi.nYear)
- sprintf(tstr, "%04d-%02d-%02d", mi.nYear,
- mi.nMonth, mi.nDay);
- else {
- t = time(NULL);
- if (strftime(tstr, 14, "%Y-%m-%d-%H%M", localtime(&t)) == 0)
- *tstr='\0';
- }
- sz = g_strdup_printf("%s-%s_%dp_%s.sgf", ap[0].szName,
- ap[1].szName, ms.nMatchTo, tstr);
- }
- return sz;
+ char *sz, tstr[15];
+ time_t t;
+
+ if (CheckForCurrent && szCurrentFileName && *szCurrentFileName)
+ sz = g_strdup_printf("%s%s", szCurrentFileName, export_format[type].extension);
+ else {
+ if (mi.nYear)
+ sprintf(tstr, "%04d-%02d-%02d", mi.nYear, mi.nMonth, mi.nDay);
+ else {
+ t = time(NULL);
+ if (strftime(tstr, 14, "%Y-%m-%d-%H%M", localtime(&t)) == 0)
+ *tstr = '\0';
+ }
+ sz = g_strdup_printf("%s-%s_%dp_%s.sgf", ap[0].szName, ap[1].szName, ms.nMatchTo, tstr);
+ }
+ return sz;
}