Changed layout and names of directories. Removed unused cruft.
[gpgol.git] / src / common.c
1 /* common.c 
2  *      Copyright (C) 2005 g10 Code GmbH
3  *
4  * This file is part of GPGME Dialogs.
5  *
6  * GPGME Dialogs is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public License
8  * as published by the Free Software Foundation; either version 2.1 
9  * of the License, or (at your option) any later version.
10  *  
11  * GPGME Dialogs is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with GPGME Dialogs; if not, write to the Free Software Foundation, 
18  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
19  */
20 #include <windows.h>
21 #include <time.h>
22
23 #include "gpgme.h"
24 #include "keycache.h"
25 #include "intern.h"
26
27 HINSTANCE glob_hinst = NULL;
28
29 void
30 set_global_hinstance (HINSTANCE hinst)
31 {
32     glob_hinst = hinst;
33 }
34
35 /* Center the given window with the desktop window as the
36    parent window. */
37 void
38 center_window (HWND childwnd, HWND style) 
39 {     
40     HWND parwnd;
41     RECT rchild, rparent;    
42     HDC hdc;
43     int wchild, hchild, wparent, hparent;
44     int wscreen, hscreen, xnew, ynew;
45     int flags = SWP_NOSIZE | SWP_NOZORDER;
46
47     parwnd = GetDesktopWindow ();
48     GetWindowRect (childwnd, &rchild);     
49     wchild = rchild.right - rchild.left;     
50     hchild = rchild.bottom - rchild.top;
51
52     GetWindowRect (parwnd, &rparent);     
53     wparent = rparent.right - rparent.left;     
54     hparent = rparent.bottom - rparent.top;      
55     
56     hdc = GetDC (childwnd);     
57     wscreen = GetDeviceCaps (hdc, HORZRES);     
58     hscreen = GetDeviceCaps (hdc, VERTRES);     
59     ReleaseDC (childwnd, hdc);      
60     xnew = rparent.left + ((wparent - wchild) / 2);     
61     if (xnew < 0)
62         xnew = 0;
63     else if ((xnew+wchild) > wscreen) 
64         xnew = wscreen - wchild;
65     ynew = rparent.top  + ((hparent - hchild) / 2);
66     if (ynew < 0)
67         ynew = 0;
68     else if ((ynew+hchild) > hscreen)
69         ynew = hscreen - hchild;
70     if (style == HWND_TOPMOST || style == HWND_NOTOPMOST)
71         flags = SWP_NOMOVE | SWP_NOSIZE;
72     SetWindowPos (childwnd, style? style : NULL, xnew, ynew, 0, 0, flags);
73 }
74
75
76 static void
77 out_of_core (void)
78 {
79     MessageBox (NULL, "Out of core!", "Fatal Error", MB_OK);
80 }
81
82 void*
83 xmalloc (size_t n)
84 {
85     void *p = malloc (n);
86     if (!p)
87         out_of_core ();
88     return p;
89 }
90
91 void*
92 xcalloc (size_t m, size_t n)
93 {
94     void *p = calloc (m, n);
95     if (!p)
96         out_of_core ();
97     return p;
98 }
99
100 char*
101 xstrdup (const char *s)
102 {
103     char *p = xmalloc (strlen (s)+1);
104     strcpy (p, s);
105     return p;
106 }
107
108 void
109 xfree (void *p)
110 {
111     if (p)
112         free (p);
113 }
114
115
116 cache_item_t
117 cache_item_new (void)
118 {
119     return xcalloc (1, sizeof (struct cache_item_s));
120 }
121
122 void
123 cache_item_free (cache_item_t itm)
124 {
125     if (itm == NULL)
126         return;
127     xfree (itm->pass); 
128     itm->pass = NULL;
129     xfree (itm);
130 }