Create new (empty) branch for board themes
[xboard.git] / winboard / wclipbrd.c
diff --git a/winboard/wclipbrd.c b/winboard/wclipbrd.c
deleted file mode 100644 (file)
index 700ccde..0000000
+++ /dev/null
@@ -1,391 +0,0 @@
-/*\r
- * wclipbrd.c -- Clipboard routines for WinBoard\r
- *\r
- * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free\r
- * Software Foundation, Inc.\r
- *\r
- * Enhancements Copyright 2005 Alessandro Scotti\r
- *\r
- * ------------------------------------------------------------------------\r
- *\r
- * GNU XBoard is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or (at\r
- * your option) any later version.\r
- *\r
- * GNU XBoard is distributed in the hope that it will be useful, but\r
- * WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
- * General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see http://www.gnu.org/licenses/.  *\r
- *\r
- *------------------------------------------------------------------------\r
- ** See the file ChangeLog for a revision history.  */\r
-\r
-#include "config.h"\r
-\r
-#include <windows.h>   /* required for all Windows applications */\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <malloc.h>\r
-#include <sys/stat.h>\r
-\r
-#include "common.h"\r
-#include "frontend.h"\r
-#include "backend.h"\r
-#include "winboard.h"\r
-#include "wclipbrd.h"\r
-\r
-#define _(s) T_(s)\r
-#define N_(s) s\r
-\r
-/* Imports from winboard.c */\r
-extern HWND hwndMain;\r
-\r
-/* File globals */\r
-static char *copyTemp;\r
-static char *pasteTemp;\r
-\r
-VOID \r
-CopyFENToClipboard()\r
-{\r
-  char *fen = NULL;\r
-\r
-  if(gameMode == EditPosition) EditPositionDone(TRUE); // [HGM] mak sure castling rights are set consistently\r
-  fen = PositionToFEN(currentMove, NULL, 1);\r
-  if (!fen) {\r
-    DisplayError(_("Unable to convert position to FEN."), 0);\r
-    return;\r
-  }\r
-  if (!CopyTextToClipboard(fen))\r
-      DisplayError(_("Unable to copy FEN to clipboard."), 0);\r
-  free(fen);\r
-}\r
-\r
-/* [AS] */\r
-HGLOBAL ExportGameListAsText();\r
-\r
-VOID CopyGameListToClipboard()\r
-{\r
-    HGLOBAL hMem = ExportGameListAsText();\r
-    \r
-    if( hMem != NULL ) {\r
-        /* Assign memory block to clipboard */\r
-        BOOL ok = OpenClipboard( hwndMain );\r
-\r
-        if( ok ) {\r
-            ok = EmptyClipboard();\r
-\r
-            if( ok ) {\r
-                if( hMem != SetClipboardData( CF_TEXT, hMem ) ) {\r
-                    ok = FALSE;\r
-                }\r
-            }\r
-\r
-            CloseClipboard();\r
-\r
-            if( ! ok ) {\r
-                GlobalFree( hMem );\r
-            }\r
-        }\r
-\r
-        if( ! ok ) {\r
-            DisplayError( "Cannot copy list to clipboard.", 0 );\r
-        }\r
-    }\r
-}\r
-\r
-VOID\r
-CopyGameToClipboard()\r
-{\r
-  /* A rather cheesy hack here. Write the game to a file, then read from the\r
-   * file into the clipboard.\r
-   */\r
-  char *buf = NULL;\r
-  FILE *f;\r
-  unsigned long size;\r
-  size_t len;\r
-  struct stat st;\r
-\r
-  if (!copyTemp) {\r
-    copyTemp = tempnam(NULL, "wbcp");\r
-  }\r
-  if (!copyTemp) {\r
-      DisplayError(_("Cannot create temporary file name."),0);\r
-      return;\r
-  }\r
-  f = fopen(copyTemp, "w");\r
-  if (!f) {\r
-    DisplayError(_("Cannot open temporary file."), 0);\r
-    return;\r
-  }\r
-  if (!SaveGame(f,0,"")) {                     /* call into backend */\r
-    DisplayError(_("Cannot write to temporary file."), 0);\r
-    goto copy_game_to_clipboard_cleanup;\r
-  }\r
-  f = fopen(copyTemp, "rb");\r
-  if (!f) {\r
-    DisplayError(_("Cannot reopen temporary file."), 0);\r
-    goto copy_game_to_clipboard_cleanup;\r
-  }\r
-  if (fstat(fileno(f), &st) < 0) {\r
-    DisplayError(_(_("Cannot determine size of file.")), 0);\r
-    goto copy_game_to_clipboard_cleanup;\r
-  }\r
-  size = st.st_size;\r
-  if (size == -1) {\r
-    DisplayError(_(_("Cannot determine size of file.")), 0);\r
-    goto copy_game_to_clipboard_cleanup;\r
-  }\r
-  rewind(f);\r
-  buf = (char*)malloc(size+1);\r
-  if (!buf) {\r
-    DisplayError(_("Cannot allocate clipboard buffer."), 0);\r
-    goto copy_game_to_clipboard_cleanup;\r
-  }\r
-  len = fread(buf, sizeof(char), size, f);\r
-  if (len == -1) {\r
-    DisplayError(_("Cannot read from temporary file."), 0);\r
-    goto copy_game_to_clipboard_cleanup;\r
-  }\r
-  if ((unsigned long)size != (unsigned long)len) { /* sigh */ \r
-      DisplayError(_("Error reading from temporary file."), 0);\r
-      goto copy_game_to_clipboard_cleanup;\r
-  }\r
-  buf[size] = 0;\r
-  if (!CopyTextToClipboard(buf)) {\r
-      DisplayError(_("Cannot copy text to clipboard"), 0);\r
-  }\r
-\r
-copy_game_to_clipboard_cleanup:\r
-  if (buf) free(buf);\r
-  if (f) fclose(f);\r
-}\r
-\r
-\r
-int \r
-CopyTextToClipboard(char *text)\r
-{\r
-  /* some (most?) of the error checking may be overkill, \r
-   * but hey, this is Windows \r
-   */\r
-  HGLOBAL hGlobalMem;\r
-  LPVOID lpGlobalMem;\r
-  BOOL locked;\r
-  UINT lockCount;\r
-  DWORD err;\r
-\r
-  hGlobalMem = GlobalAlloc(GHND, (DWORD)lstrlen(text)+1);\r
-  if (hGlobalMem == NULL) {\r
-    DisplayError(_("Unable to allocate memory for clipboard."), 0);\r
-    return FALSE;\r
-  }\r
-  lpGlobalMem = GlobalLock(hGlobalMem);\r
-  if (lpGlobalMem == NULL) {\r
-    DisplayError(_(_("Unable to lock clipboard memory.")), 0);\r
-    GlobalFree(hGlobalMem);\r
-    return FALSE;\r
-  }\r
-  safeStrCpy(lpGlobalMem, text, 1<<20);\r
-  if (appData.debugMode) {\r
-    lockCount = GlobalFlags(hGlobalMem) & GMEM_LOCKCOUNT;\r
-    fprintf(debugFP, "CopyTextToClipboard(): lock count %d\n", lockCount);\r
-  }\r
-  SetLastError(NO_ERROR);\r
-  locked = GlobalUnlock(hGlobalMem);\r
-  err = GetLastError();\r
-  if (appData.debugMode) {\r
-    lockCount = GlobalFlags(hGlobalMem) & GMEM_LOCKCOUNT;\r
-    fprintf(debugFP, "CopyTextToClipboard(): lock count %d\n", lockCount);\r
-  }\r
-  if (!locked) {\r
-    locked = !((err == NO_ERROR) || (err == ERROR_NOT_LOCKED));\r
-    if (appData.debugMode) {\r
-      fprintf(debugFP, \r
-             "CopyTextToClipboard(): err %d locked %d\n", (int)err, locked);\r
-    }\r
-  }\r
-  if (locked) {\r
-    DisplayError(_("Cannot unlock clipboard memory."), 0);\r
-    GlobalFree(hGlobalMem);\r
-    return FALSE;\r
-  }\r
-  if (!OpenClipboard(hwndMain)) {\r
-    DisplayError(_("Cannot open clipboard."), 0);\r
-    GlobalFree(hGlobalMem);\r
-    return FALSE;\r
-  }\r
-  if (!EmptyClipboard()) {\r
-    DisplayError(_("Cannot empty clipboard."), 0);\r
-    return FALSE;\r
-  }\r
-  if (hGlobalMem != SetClipboardData(CF_TEXT, hGlobalMem)) {\r
-    DisplayError(_("Cannot copy text to clipboard."), 0);\r
-    CloseClipboard();\r
-    GlobalFree(hGlobalMem);\r
-    return FALSE;\r
-  }\r
-  if (!CloseClipboard())\r
-    DisplayError(_("Cannot close clipboard."), 0);\r
-  \r
-  return TRUE;\r
-}\r
-\r
-/* [AS] Reworked paste functions so they can work with strings too */\r
-\r
-VOID PasteFENFromString( char * fen )\r
-{\r
-  if (appData.debugMode) {\r
-    fprintf(debugFP, "PasteFenFromString(): fen '%s'\n", fen);\r
-  }\r
-  EditPositionPasteFEN(fen); /* call into backend */\r
-  free(fen);\r
-}\r
-\r
-\r
-VOID\r
-PasteFENFromClipboard()\r
-{\r
-  char *fen = NULL;\r
-  if (!PasteTextFromClipboard(&fen)) {\r
-      DisplayError(_("Unable to paste FEN from clipboard."), 0);\r
-      return;\r
-  }\r
-  PasteFENFromString( fen );\r
-}\r
-\r
-VOID PasteGameFromString( char * buf )\r
-{\r
-  FILE *f;\r
-  size_t len;\r
-  int flip = appData.flipView;\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] */\r
-    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] */\r
-    return;\r
-  }\r
-  if(!appData.autoFlipView) appData.flipView = flipView;\r
-  LoadGameFromFile(pasteTemp, 0, "Clipboard", TRUE);\r
-  appData.flipView = flip;\r
-  free( buf ); /* [AS] */\r
-}\r
-\r
-\r
-VOID\r
-PasteGameFromClipboard()\r
-{\r
-  /* Write the clipboard to a temp file, then let LoadGameFromFile()\r
-   * do all the work.  */\r
-  char *buf;\r
-  if (!PasteTextFromClipboard(&buf)) {\r
-    return;\r
-  }\r
-  PasteGameFromString( buf );\r
-}\r
-\r
-/* [AS] Try to detect whether the clipboard contains FEN or PGN data */\r
-VOID PasteGameOrFENFromClipboard()\r
-{\r
-  char *buf;\r
-//  char *tmp;\r
-  Board dummyBoard; int dummy; // [HGM] paste any\r
-\r
-  if (!PasteTextFromClipboard(&buf)) {\r
-\r
-    return;\r
-  }\r
-\r
-  // [HGM] paste any: make still smarter, to allow pasting of games without tags, recognize FEN in stead\r
-  if(!ParseFEN(dummyBoard, &dummy, buf, 0) ) {\r
-      PasteGameFromString( buf );\r
-  }\r
-  else {\r
-      PasteFENFromString( buf );\r
-  }\r
-}\r
-\r
-int \r
-PasteTextFromClipboard(char **text)\r
-{\r
-  /* some (most?) of the error checking may be overkill, \r
-   * but hey, this is Windows \r
-   */\r
-  HANDLE hClipMem;\r
-  LPVOID lpClipMem;\r
-  BOOL locked = FALSE;\r
-  DWORD err;\r
-  UINT lockCount;\r
-\r
-  if (!OpenClipboard(hwndMain)) {\r
-    DisplayError(_("Unable to open clipboard."), 0);\r
-    return FALSE;\r
-  }\r
-  hClipMem = GetClipboardData(CF_TEXT);\r
-  if (hClipMem == NULL) {\r
-    CloseClipboard();\r
-    DisplayError(_("No text in clipboard."), 0);\r
-    return FALSE;\r
-  }\r
-  lpClipMem = GlobalLock(hClipMem);\r
-  if (lpClipMem == NULL) {\r
-    CloseClipboard();\r
-    DisplayError(_(_("Unable to lock clipboard memory.")), 0);\r
-    return FALSE;\r
-  }\r
-  *text = (char *) malloc(GlobalSize(hClipMem)+1);\r
-  if (!*text) {\r
-    DisplayError(_("Unable to allocate memory for text string."), 0);\r
-    CloseClipboard();\r
-    return FALSE;\r
-  }\r
-  safeStrCpy(*text, lpClipMem, 1<<20 );\r
-  if (appData.debugMode) {\r
-    lockCount = GlobalFlags(hClipMem) & GMEM_LOCKCOUNT;\r
-    fprintf(debugFP, "PasteTextFromClipboard(): lock count %d\n", lockCount);\r
-  }\r
-  SetLastError(NO_ERROR);\r
-  /*suggested by Wilkin Ng*/\r
-  lockCount = GlobalFlags(hClipMem) & GMEM_LOCKCOUNT;\r
-  if (lockCount) {\r
-    locked = GlobalUnlock(hClipMem);\r
-  }\r
-  err = GetLastError();\r
-  if (appData.debugMode) {\r
-    lockCount = GlobalFlags(hClipMem) & GMEM_LOCKCOUNT;\r
-    fprintf(debugFP, "PasteTextFromClipboard(): lock count %d\n", lockCount);\r
-  }\r
-  if (!locked) {\r
-    locked = !((err == NO_ERROR) || (err == ERROR_NOT_LOCKED));\r
-    if (appData.debugMode) {\r
-      fprintf(debugFP, \r
-             "PasteTextFromClipboard(): err %d locked %d\n", (int)err, locked);\r
-    }\r
-  }\r
-  if (locked) \r
-    DisplayError(_("Unable to unlock clipboard memory."), 0);\r
-  \r
-  if (!CloseClipboard())\r
-    DisplayError(_("Unable to close clipboard."), 0);\r
-  \r
-  return TRUE;\r
-}\r
-\r
-VOID\r
-DeleteClipboardTempFiles()\r
-{\r
-  if (copyTemp) remove(copyTemp);\r
-  if (pasteTemp) remove(pasteTemp);\r
-}\r