/* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 1998--1999 Guido Masarotto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, a copy is available at * https://www.R-project.org/Licenses/ */ /* * * file: clipboard.c -- * Guido Masarotto (December, 1998) * */ /* This file is an add-on to GraphApp, a cross-platform C graphics library. */ #include "win-nls.h" #include "internal.h" #include "rui.h" void copytoclipboard(drawing sb) { HBITMAP hbmpOldDest, hbmpNew; HDC hdcSrc, hdcDest; rect r; r = getrect(sb); hdcSrc = get_context((object)sb); hdcDest = CreateCompatibleDC(hdcSrc); hbmpNew = CreateCompatibleBitmap(hdcSrc, r.width, r.height); hbmpOldDest = SelectObject(hdcDest, hbmpNew); BitBlt(hdcDest, 0, 0, r.width, r.height, hdcSrc, 0, 0, SRCCOPY); SelectObject(hdcDest, hbmpOldDest); DeleteDC(hdcDest); if (!OpenClipboard(NULL) || !EmptyClipboard()) { R_ShowMessage(G_("Unable to open the clipboard")); DeleteObject(hbmpNew); return; } SetClipboardData(CF_BITMAP, hbmpNew); CloseClipboard(); return; } int copystringtoclipboard(const char *str) { HGLOBAL hglb; char *s; int ll = strlen(str) + 1; if (!(hglb = GlobalAlloc(GHND, ll))){ R_ShowMessage(G_("Insufficient memory: cell not copied to the clipboard")); return 1; } if (!(s = (char *)GlobalLock(hglb))){ R_ShowMessage(G_("Insufficient memory: cell not copied to the clipboard")); return 1; } strcpy(s, str); GlobalUnlock(hglb); if (!OpenClipboard(NULL) || !EmptyClipboard()) { R_ShowMessage(G_("Unable to open the clipboard")); GlobalFree(hglb); return 1; } SetClipboardData(CF_TEXT, hglb); CloseClipboard(); return 0; } int getstringfromclipboard(char * str, int n) { HGLOBAL hglb; char *pc; if ( OpenClipboard(NULL) && (hglb = GetClipboardData(CF_TEXT)) && (pc = (char *)GlobalLock(hglb))) { strncpy(str, pc, n); str[n+1] = '\0'; GlobalUnlock(hglb); CloseClipboard(); return 0; } else return 1; } int clipboardhastext(void) { return (int) IsClipboardFormatAvailable(CF_TEXT); }