source: trunk/Lucide/SOURCE/gui/clipbrd.cpp @ 2

Last change on this file since 2 was 2, checked in by Eugene Romanenko, 15 years ago

First import

File size: 2.1 KB
Line 
1#define INCL_WIN
2#define INCL_DOS
3#include <os2.h>
4
5#include <string.h>
6#include <malloc.h>
7#include "cpconv.h"
8
9
10#define kUnicodeMime "text/unicode"
11
12inline ULONG RegisterClipboardFormat(PCSZ pcszFormat)
13{
14    ATOM atom = WinFindAtom(WinQuerySystemAtomTable(), pcszFormat);
15    if (!atom) {
16        atom = WinAddAtom(WinQuerySystemAtomTable(), pcszFormat);
17    }
18    return atom;
19}
20
21void initClipbrd()
22{
23    RegisterClipboardFormat( kUnicodeMime );
24}
25
26void textToClipbrd( HAB hab, const char *text )
27{
28    size_t len = 0;
29    size_t olen = 0;
30    const char *tsav = text;
31
32    if ( WinOpenClipbrd( hab ) )
33    {
34        WinEmptyClipbrd( hab );
35
36        len = strlen( text );
37        olen = (len + 2)*2;
38
39        void *memuni = NULL;
40
41        // place to clipboard as unicode
42        if ( DosAllocSharedMem( &memuni, NULL, olen ,
43                                PAG_WRITE | PAG_COMMIT | OBJ_GIVEABLE ) == 0 )
44        {
45            memset( memuni, 0, olen );
46            void *tmem = memuni;
47
48            //cpconv c( 1208, 1200 );
49            tsav = text;
50            //c.conv( &text, &len, (char **)&memuni, &olen );
51            cnvUTF8ToUni( &text, &len, (char **)&memuni, &olen );
52            text = tsav;
53
54            ULONG ulFormatID = RegisterClipboardFormat( kUnicodeMime );
55            WinSetClipbrdData( hab, (ULONG)tmem, ulFormatID, CFI_POINTER );
56        }
57
58        len = strlen( text );
59        olen = (len + 2)*2;
60        void *memcp = NULL;
61
62        // place to clipboard as current codepage
63        if ( DosAllocSharedMem( &memcp, NULL, olen ,
64                                PAG_WRITE | PAG_COMMIT | OBJ_GIVEABLE ) == 0 )
65        {
66            memset( memcp, 0, olen );
67            void *tmem = memcp;
68
69            //cpconv c( 1208 );
70            tsav = text;
71            //c.conv( &text, &len, (char **)&memcp, &olen );
72            cnvUTF8ToSys( &text, &len, (char **)&memcp, &olen );
73                        text = tsav;
74
75            WinSetClipbrdData( hab, (ULONG)tmem, CF_TEXT, CFI_POINTER );
76        }
77
78
79        WinCloseClipbrd( hab );
80    }
81}
82
Note: See TracBrowser for help on using the repository browser.