X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=winboard%2Fwclipbrd.c;h=55b9dfd712e2fb0674d3083aca7b4a0ac4e34852;hb=36da20342a0bc5ef6c36587944cb2f35b2ea46da;hp=66a3638102725434c07a0be2ad1cd7b8fd4b1091;hpb=05bc30b15e31c427ce208495a889e9ff36e6642b;p=xboard.git diff --git a/winboard/wclipbrd.c b/winboard/wclipbrd.c index 66a3638..55b9dfd 100644 --- a/winboard/wclipbrd.c +++ b/winboard/wclipbrd.c @@ -1,6 +1,6 @@ /* * wclipbrd.c -- Clipboard routines for WinBoard - * $Id$ + * $Id: wclipbrd.c,v 2.1 2003/10/27 19:21:02 mann Exp $ * * Copyright 2000 Free Software Foundation, Inc. * @@ -27,7 +27,6 @@ #include #include #include -#include #include #include "common.h" @@ -48,7 +47,7 @@ CopyFENToClipboard() { char *fen = NULL; - fen = PositionToFEN(currentMove); + fen = PositionToFEN(currentMove,1); if (!fen) { DisplayError("Unable to convert position to FEN.", 0); return; @@ -58,6 +57,38 @@ CopyFENToClipboard() free(fen); } +/* [AS] */ +HGLOBAL ExportGameListAsText(); + +VOID CopyGameListToClipboard() +{ + HGLOBAL hMem = ExportGameListAsText(); + + if( hMem != NULL ) { + /* Assign memory block to clipboard */ + BOOL ok = OpenClipboard( hwndMain ); + + if( ok ) { + ok = EmptyClipboard(); + + if( ok ) { + if( hMem != SetClipboardData( CF_TEXT, hMem ) ) { + ok = FALSE; + } + } + + CloseClipboard(); + + if( ! ok ) { + GlobalFree( hMem ); + } + } + + if( ! ok ) { + DisplayError( "Cannot copy list to clipboard.", 0 ); + } + } +} VOID CopyGameToClipboard() @@ -72,13 +103,13 @@ CopyGameToClipboard() struct stat st; if (!copyTemp) { - copyTemp = tmpnam(NULL); + copyTemp = tempnam(NULL, "wbcp"); } if (!copyTemp) { DisplayError("Cannot create temporary file name.",0); return; } - f = fopen(copyTemp, "w"); + f = fopen(copyTemp, "w"); if (!f) { DisplayError("Cannot open temporary file.", 0); return; @@ -195,6 +226,16 @@ CopyTextToClipboard(char *text) return TRUE; } +/* [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); +} VOID @@ -205,42 +246,68 @@ PasteFENFromClipboard() DisplayError("Unable to paste FEN from clipboard.", 0); return; } - if (appData.debugMode) { - fprintf(debugFP, "PasteFenFromClipboard(): fen '%s'\n", fen); - } - EditPositionPasteFEN(fen); /* call into backend */ - free(fen); + PasteFENFromString( fen ); } - -VOID -PasteGameFromClipboard() +VOID PasteGameFromString( char * buf ) { - /* Write the clipboard to a temp file, then let LoadGameFromFile() - * do all the work. */ - char *buf; FILE *f; size_t len; - if (!PasteTextFromClipboard(&buf)) { - return; - } if (!pasteTemp) { - pasteTemp = tmpnam(NULL); + pasteTemp = tempnam(NULL, "wbpt"); } - f = fopen(pasteTemp, "wb+"); + f = fopen(pasteTemp, "w"); if (!f) { DisplayError("Unable to create temporary file.", 0); + free(buf); /* [AS] */ return; } len = fwrite(buf, sizeof(char), strlen(buf), f); fclose(f); if (len != strlen(buf)) { DisplayError("Error writing to temporary file.", 0); + free(buf); /* [AS] */ return; } LoadGameFromFile(pasteTemp, 0, "Clipboard", TRUE); + 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 ); } +/* [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 ); + } +} int PasteTextFromClipboard(char **text)