+ if (!fe->timer) {
+ fe->timer = SetTimer(fe->hwnd, fe->timer, 20, NULL);
+ fe->timer_last_tickcount = GetTickCount();
+ }
+}
+
+void write_clip(HWND hwnd, char *data)
+{
+ HGLOBAL clipdata;
+ int len = strlen(data);
+ void *lock;
+
+ clipdata = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, len + 1);
+ if (!clipdata)
+ return;
+ lock = GlobalLock(clipdata);
+ if (!lock)
+ return;
+ memcpy(lock, data, len);
+ ((unsigned char *) lock)[len] = 0;
+ GlobalUnlock(clipdata);
+
+ if (OpenClipboard(hwnd)) {
+ EmptyClipboard();
+ SetClipboardData(CF_TEXT, clipdata);
+ CloseClipboard();
+ } else
+ GlobalFree(clipdata);
+}
+
+/*
+ * See if we can find a help file.
+ */
+static void find_help_file(frontend *fe)
+{
+ char b[2048], *p, *q, *r;
+ FILE *fp;
+ if (!fe->help_path) {
+ GetModuleFileName(NULL, b, sizeof(b) - 1);
+ r = b;
+ p = strrchr(b, '\\');
+ if (p && p >= r) r = p+1;
+ q = strrchr(b, ':');
+ if (q && q >= r) r = q+1;
+ strcpy(r, HELP_FILE_NAME);
+ if ( (fp = fopen(b, "r")) != NULL) {
+ fe->help_path = dupstr(b);
+ fclose(fp);
+ } else
+ fe->help_path = NULL;
+ strcpy(r, HELP_CNT_NAME);
+ if ( (fp = fopen(b, "r")) != NULL) {
+ fe->help_has_contents = TRUE;
+ fclose(fp);
+ } else
+ fe->help_has_contents = FALSE;
+ }