changes from Alessandro Scotti from 20050322
[xboard.git] / winboard / wclipbrd.c
index 79ff2a2..dbb47a7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * wclipbrd.c -- Clipboard routines for WinBoard\r
- * $Id$\r
+ * $Id: wclipbrd.c,v 2.1 2003/10/27 19:21:02 mann Exp $
  *\r
  * Copyright 2000 Free Software Foundation, Inc.\r
  *\r
@@ -194,6 +194,16 @@ CopyTextToClipboard(char *text)
   return TRUE;\r
 }\r
 \r
+/* [AS] Reworked paste functions so they can work with strings too */
+
+VOID PasteFENFromString( char * fen )
+{
+  if (appData.debugMode) {
+    fprintf(debugFP, "PasteFenFromString(): fen '%s'\n", fen);
+  }
+  EditPositionPasteFEN(fen); /* call into backend */
+  free(fen);
+}
 \r
 \r
 VOID\r
@@ -204,42 +214,68 @@ PasteFENFromClipboard()
       DisplayError("Unable to paste FEN from clipboard.", 0);\r
       return;\r
   }\r
-  if (appData.debugMode) {\r
-    fprintf(debugFP, "PasteFenFromClipboard(): fen '%s'\n", fen);\r
-  }\r
-  EditPositionPasteFEN(fen); /* call into backend */\r
-  free(fen);\r
+  PasteFENFromString( fen );
 }\r
 \r
-\r
-VOID\r
-PasteGameFromClipboard()\r
+VOID PasteGameFromString( char * buf )
 {\r
-  /* Write the clipboard to a temp file, then let LoadGameFromFile()\r
-   * do all the work.  */\r
-  char *buf;\r
   FILE *f;\r
   size_t len;\r
-  if (!PasteTextFromClipboard(&buf)) {\r
-    return;\r
-  }\r
   if (!pasteTemp) {\r
     pasteTemp = tempnam(NULL, "wbpt");\r
   }\r
   f = fopen(pasteTemp, "w");\r
   if (!f) {\r
     DisplayError("Unable to create temporary file.", 0);\r
+    free(buf); /* [AS] */
     return;\r
   }\r
   len = fwrite(buf, sizeof(char), strlen(buf), f);\r
   fclose(f);\r
   if (len != strlen(buf)) {\r
     DisplayError("Error writing to temporary file.", 0);\r
+    free(buf); /* [AS] */
     return;\r
   }\r
   LoadGameFromFile(pasteTemp, 0, "Clipboard", TRUE);\r
+  free( buf ); /* [AS] */
+}
+
+
+VOID
+PasteGameFromClipboard()
+{
+  /* Write the clipboard to a temp file, then let LoadGameFromFile()
+   * do all the work.  */
+  char *buf;
+  if (!PasteTextFromClipboard(&buf)) {
+    return;
+  }
+  PasteGameFromString( buf );
 }\r
 \r
+/* [AS] Try to detect whether the clipboard contains FEN or PGN data */
+VOID PasteGameOrFENFromClipboard()
+{
+  char *buf;
+  char *tmp;
+
+  if (!PasteTextFromClipboard(&buf)) {
+    return;
+  }
+
+  tmp = buf;
+  while( *tmp == ' ' || *tmp == '\t' || *tmp == '\r' || *tmp == '\n' ) {
+      tmp++;
+  }
+
+  if( *tmp == '[' ) {
+      PasteGameFromString( buf );
+  }
+  else {
+      PasteFENFromString( buf );
+  }
+}
 \r
 int \r
 PasteTextFromClipboard(char **text)\r