annotate lib-src/winclient.c @ 5797:a1808d52a34a

If the position of a window's cached point is deleted, use buffer point instead src/ChangeLog addition: 2014-06-17 Aidan Kehoe <kehoea@parhasard.net> * extents.h: * window.c: * window.c (unshow_buffer): * window.c (Fset_window_buffer): Use extents, rather than markers, for the window buffer point cache, so that when the text containing that window buffer point is deleted, the window display code uses the buffer's actual point instead of the position that the marker had been moved to. Fixes Michael Heinrich's problem of http://mid.gmane.org/6zr42uxtf5.fsf@elektra.science-computing.de , introduced by Ben's patch of https://bitbucket.org/xemacs/xemacs/commits/047d37eb70d70f43803 .
author Aidan Kehoe <kehoea@parhasard.net>
date Tue, 17 Jun 2014 20:55:45 +0100
parents 308d34e9f07d
children 68639fb08af8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
1 /* DDE client for XEmacs.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
2 Copyright (C) 2002 Alastair J. Houghton
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
3
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
4 This file is part of XEmacs.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
5
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5030
diff changeset
6 XEmacs is free software: you can redistribute it and/or modify it
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5030
diff changeset
7 under the terms of the GNU General Public License as published by the
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5030
diff changeset
8 Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5030
diff changeset
9 option) any later version.
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
10
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5030
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5030
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5030
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5030
diff changeset
14 for more details.
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
15
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5030
diff changeset
16 You should have received a copy of the GNU General Public License
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5030
diff changeset
17 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
18
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
19 /* Synched up with: Not in FSF. */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
20
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
21 /* -- Includes -------------------------------------------------------------- */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
22
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
23 #ifdef HAVE_CONFIG_H
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
24 # include <config.h>
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
25 #endif
2993
49316578f12d [xemacs-hg @ 2005-10-14 01:02:29 by ben]
ben
parents: 853
diff changeset
26 #include <windows.h>
49316578f12d [xemacs-hg @ 2005-10-14 01:02:29 by ben]
ben
parents: 853
diff changeset
27 #include <ddeml.h>
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
28 #include <stdlib.h>
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
29 #include <stdio.h>
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
30 #include <ctype.h>
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
31 #include <errno.h>
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
32
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
33 #ifdef __CYGWIN__
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
34 #include <stdlib.h>
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
35 #include <unistd.h>
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
36 #endif
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
37
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
38 static void error (const char* s1, const char* s2);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
39 static void fatal (const char *s1, const char *s2);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
40 static void * xmalloc (size_t size);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
41 static char * getNextArg (const char **ptr, unsigned *len);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
42
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
43 /* -- Post-Include Defines -------------------------------------------------- */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
44
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
45 /* Timeouts & delays */
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
46 #define CONNECT_RETRIES 20
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
47 #define CONNECT_DELAY 500 /* ms */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
48 #define TRANSACTION_TIMEOUT 5000 /* ms */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
49 #define MAX_INPUT_IDLE_WAIT INFINITE /* ms */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
50
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
51 /* DDE Strings */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
52 #define SERVICE_NAME "XEmacs"
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
53 #define TOPIC_NAME "System"
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
54 #define COMMAND_FORMAT "[open(\"%s%s\")]"
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
55
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
56 /* XEmacs program name */
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
57 #define GENERIC_PROGRAM EMACS_PROGNAME ".exe"
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
58 #define VERSIONED_PROGRAM EMACS_PROGNAME "-" EMACS_VERSION ".exe"
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
59
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
60 /* -- Constants ------------------------------------------------------------- */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
61
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
62 /* -- Global Variables ------------------------------------------------------ */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
63
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
64 HINSTANCE hInstance;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
65 DWORD idInst = 0;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
66
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
67 /* -- Function Declarations ------------------------------------------------- */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
68
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
69 HDDEDATA CALLBACK ddeCallback (UINT uType, UINT uFmt, HCONV hconv,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
70 HSZ hsz1, HSZ hsz2, HDDEDATA hdata,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
71 DWORD dwData1, DWORD dwData2);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
72
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
73 int WINAPI WinMain (HINSTANCE hInst,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
74 HINSTANCE hPrev,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
75 LPSTR lpCmdLine,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
76 int nCmdShow);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
77
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
78 static HCONV openConversation (void);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
79 static void closeConversation (HCONV hConv);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
80 static int doFile (HCONV hConv, LPSTR lpszFileName1, LPSTR lpszFileName2);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
81 static int parseCommandLine (HCONV hConv, LPSTR lpszCommandLine);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
82
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
83 /* -- Function Definitions -------------------------------------------------- */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
84
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
85 /*
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
86 * Name : ddeCallback
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
87 * Function: Gets called by DDEML.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
88 *
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
89 */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
90
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
91 HDDEDATA CALLBACK
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
92 ddeCallback (UINT uType, UINT uFmt, HCONV hconv,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
93 HSZ hsz1, HSZ hsz2, HDDEDATA hdata,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
94 DWORD dwData1, DWORD dwData2)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
95 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
96 return (HDDEDATA) NULL;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
97 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
98
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
99 /*
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
100 * Name : WinMain
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
101 * Function: The program's entry point function.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
102 *
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
103 */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
104
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
105 int WINAPI
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
106 WinMain (HINSTANCE hInst,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
107 HINSTANCE hPrev,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
108 LPSTR lpCmdLine,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
109 int nCmdShow)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
110 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
111 HCONV hConv;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
112 int ret = 0;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
113 UINT uiRet;
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
114
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
115 /* Initialise the DDEML library */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
116 uiRet = DdeInitialize (&idInst,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
117 (PFNCALLBACK) ddeCallback,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
118 APPCMD_CLIENTONLY
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
119 |CBF_FAIL_ALLSVRXACTIONS,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
120 0);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
121
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
122 if (uiRet != DMLERR_NO_ERROR)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
123 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
124 MessageBox (NULL, "Could not initialise DDE management library.",
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
125 "winclient", MB_ICONEXCLAMATION | MB_OK);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
126
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
127 return 1;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
128 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
129
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
130 /* Open a conversation */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
131 hConv = openConversation ();
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
132
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
133 if (hConv)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
134 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
135 /* OK. Next, we need to parse the command line. */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
136 ret = parseCommandLine (hConv, lpCmdLine);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
137
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
138 /* Close the conversation */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
139 closeConversation (hConv);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
140 }
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
141
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
142 DdeUninitialize (idInst);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
143
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
144 return ret;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
145 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
146
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
147 /*
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
148 * Name : openConversation
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
149 * Function: Start a conversation.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
150 *
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
151 */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
152
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
153 static HCONV
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
154 openConversation (void)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
155 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
156 HSZ hszService = NULL, hszTopic = NULL;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
157 HCONV hConv = NULL;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
158
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
159 /* Get the application (service) name */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
160 hszService = DdeCreateStringHandle (idInst,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
161 SERVICE_NAME,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
162 CP_WINANSI);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
163
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
164 if (!hszService)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
165 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
166 MessageBox (NULL, "Could not create string handle for service.",
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
167 "winclient", MB_ICONEXCLAMATION | MB_OK);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
168
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
169 goto error;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
170 }
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
171
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
172 /* Get the topic name */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
173 hszTopic = DdeCreateStringHandle (idInst,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
174 TOPIC_NAME,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
175 CP_WINANSI);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
176
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
177 if (!hszTopic)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
178 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
179 MessageBox (NULL, "Could not create string handle for topic.",
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
180 "winclient", MB_ICONEXCLAMATION | MB_OK);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
181
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
182 goto error;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
183 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
184
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
185 /* Try to connect */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
186 hConv = DdeConnect (idInst, hszService, hszTopic, NULL);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
187
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
188 if (!hConv)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
189 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
190 STARTUPINFO sti;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
191 PROCESS_INFORMATION pi;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
192 int n;
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
193
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
194 /* Try to start the program */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
195 ZeroMemory (&sti, sizeof (sti));
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
196 sti.cb = sizeof (sti);
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
197 if (!CreateProcess (NULL, GENERIC_PROGRAM, NULL, NULL, FALSE, 0,
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
198 NULL, NULL, &sti, &pi) &&
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
199 !CreateProcess (NULL, VERSIONED_PROGRAM, NULL, NULL, FALSE, 0,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
200 NULL, NULL, &sti, &pi))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
201 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
202 MessageBox (NULL, "Could not start process.",
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
203 "winclient", MB_ICONEXCLAMATION | MB_OK);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
204
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
205 goto error;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
206 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
207
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
208 /* Wait for the process to enter an idle state */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
209 WaitForInputIdle (pi.hProcess, MAX_INPUT_IDLE_WAIT);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
210
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
211 /* Close the handles */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
212 CloseHandle (pi.hThread);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
213 CloseHandle (pi.hProcess);
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
214
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
215 /* Try to connect */
4464
61aff09a7589 Increase DDE connection retries because waiting for XEmacs to start
Vin Shelton <acs@xemacs.org>
parents: 2993
diff changeset
216 for (n = 0; n < CONNECT_RETRIES; n++)
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
217 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
218 Sleep (CONNECT_DELAY);
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
219
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
220 hConv = DdeConnect (idInst, hszService, hszTopic, NULL);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
221
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
222 if (hConv)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
223 break;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
224 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
225
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
226 if (!hConv)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
227 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
228 /* Still couldn't connect. */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
229 MessageBox (NULL, "Could not connect to DDE server.",
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
230 "winclient", MB_ICONEXCLAMATION | MB_OK);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
231
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
232 goto error;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
233 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
234 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
235
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
236 /* Release the string handles */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
237 DdeFreeStringHandle (idInst, hszService);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
238 DdeFreeStringHandle (idInst, hszTopic);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
239
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
240 return hConv;
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
241
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
242 error:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
243 if (hConv)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
244 DdeDisconnect (hConv);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
245 if (hszService)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
246 DdeFreeStringHandle (idInst, hszService);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
247 if (hszTopic)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
248 DdeFreeStringHandle (idInst, hszTopic);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
249
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
250 return NULL;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
251 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
252
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
253 /*
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
254 * Name : closeConversation
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
255 * Function: Close a conversation.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
256 *
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
257 */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
258
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
259 static void
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
260 closeConversation (HCONV hConv)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
261 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
262 /* Shut down */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
263 DdeDisconnect (hConv);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
264 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
265
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
266 /*
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
267 * Name : doFile
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
268 * Function: Process a file.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
269 *
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
270 */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
271
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
272 int
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
273 doFile (HCONV hConv, LPSTR lpszFileName1, LPSTR lpszFileName2)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
274 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
275 char *buf = NULL;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
276 unsigned len;
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
277
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
278 /* Calculate the buffer length */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
279 len = strlen (lpszFileName1) + strlen (lpszFileName2)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
280 + strlen (COMMAND_FORMAT);
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
281
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
282 /* Allocate a buffer */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
283 buf = (char *) xmalloc (len);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
284
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
285 if (!buf)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
286 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
287 MessageBox (NULL, "Not enough memory.",
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
288 "winclient", MB_ICONEXCLAMATION | MB_OK);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
289
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
290 return 1;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
291 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
292
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
293 /* Build the command */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
294 len = wsprintf (buf, COMMAND_FORMAT, lpszFileName1, lpszFileName2);
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
295 len++;
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
296
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
297 /* OK. We're connected. Send the message. */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
298 DdeClientTransaction (buf, len, hConv, NULL,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
299 0, XTYP_EXECUTE, TRANSACTION_TIMEOUT, NULL);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
300
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
301 free (buf);
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
302
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
303 return 0;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
304 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
305
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
306 /*
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
307 * Name : getNextArg
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
308 * Function: Retrieve the next command line argument.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
309 *
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
310 */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
311
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
312 static char *
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
313 getNextArg (const char **ptr, unsigned *len)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
314 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
315 int in_quotes = 0, quit = 0, all_in_quotes = 0;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
316 const char *p = *ptr, *start;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
317 char *buf = NULL;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
318 unsigned length = 0;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
319
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
320 /* Skip whitespace */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
321 while (*p && isspace (*p))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
322 p++;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
323
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
324 /* If this is the end, return NULL */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
325 if (!*p)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
326 return NULL;
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
327
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
328 /* Remember where we are */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
329 start = p;
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
330
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
331 /* Find the next whitespace character outside quotes */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
332 if (*p == '"')
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
333 all_in_quotes = 1;
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
334
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
335 while (*p && !quit)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
336 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
337 switch (*p)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
338 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
339 case '"':
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
340 in_quotes = 1 - in_quotes;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
341 p++;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
342 break;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
343
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
344 case '\\':
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
345 if (!in_quotes)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
346 all_in_quotes = 0;
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
347
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
348 p++;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
349
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
350 if (!*p)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
351 break;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
352
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
353 p++;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
354 break;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
355
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
356 default:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
357 if (isspace (*p) && !in_quotes)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
358 quit = 1;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
359 else if (!in_quotes)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
360 all_in_quotes = 0;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
361
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
362 if (!quit)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
363 p++;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
364 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
365 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
366
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
367 /* Work out the length */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
368 length = p - start;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
369
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
370 /* Strip quotes if the argument is completely quoted */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
371 if (all_in_quotes)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
372 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
373 start++;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
374 length -= 2;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
375 }
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
376
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
377 /* Copy */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
378 buf = (char *) xmalloc (length + 1);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
379
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
380 if (!buf)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
381 return NULL;
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
382
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
383 strncpy (buf, start, length);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
384 buf[length] = '\0';
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
385
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
386 /* Return the pointer and length */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
387 *ptr = p;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
388 *len = length;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
389
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
390 return buf;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
391 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
392
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
393 /*
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
394 * Name : parseCommandLine
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
395 * Function: Process the command line. This program accepts a list of strings
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
396 * : (which may contain wildcards) representing filenames.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
397 *
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
398 */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
399
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
400 int
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
401 parseCommandLine (HCONV hConv, LPSTR lpszCommandLine)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
402 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
403 char *fullpath, *filepart;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
404 char *arg;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
405 unsigned len, pathlen;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
406 int ret = 0;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
407 HANDLE hFindFile = NULL;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
408 WIN32_FIND_DATA wfd;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
409
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
410 /* Retrieve arguments */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
411 while ((arg = getNextArg ((const char**)&lpszCommandLine, &len)) != NULL)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
412 {
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
413 fullpath = NULL;
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
414 #ifdef __CYGWIN__
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
415 /* If the filename is not an absolute path,
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
416 add the current directory to the pathname */
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
417 if (*arg != '/')
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
418 {
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
419 len = pathconf(".", _PC_PATH_MAX);
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
420 fullpath = (char *) xmalloc (len+1);
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
421 if (!fullpath)
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
422 {
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
423 MessageBox (NULL, "Not enough memory.", "winclient",
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
424 MB_ICONEXCLAMATION | MB_OK);
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
425 ret = 1;
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
426 break;
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
427 }
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
428 if (!getcwd(fullpath, (size_t)len))
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
429 {
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
430 MessageBox (NULL, "Could not retrieve current directory.",
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
431 "winclient", MB_ICONEXCLAMATION | MB_OK);
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
432 ret = 1;
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
433 break;
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
434 }
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
435 /* Append trailing slash */
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
436 strcat(fullpath, "/");
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
437 ret = doFile (hConv, fullpath, arg);
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
438 }
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
439 else
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
440 {
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
441 /* The arg has already been expanded, so pass it as it is */
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
442 ret = doFile (hConv, "", arg);
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
443 }
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
444 #else
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
445 /* First find the canonical path name */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
446 fullpath = filepart = NULL;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
447 pathlen = GetFullPathName (arg, 0, fullpath, &filepart);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
448
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
449 fullpath = (char *) xmalloc (pathlen);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
450
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
451 if (!fullpath)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
452 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
453 MessageBox (NULL, "Not enough memory.", "winclient",
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
454 MB_ICONEXCLAMATION | MB_OK);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
455 ret = 1;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
456 break;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
457 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
458
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
459 GetFullPathName (arg, pathlen, fullpath, &filepart);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
460
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
461 /* Find the first matching file */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
462 hFindFile = FindFirstFile (arg, &wfd);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
463
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
464 if (hFindFile == INVALID_HANDLE_VALUE)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
465 ret = doFile (hConv, fullpath, "");
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
466 else
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
467 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
468 /* Chop off the file part from the full path name */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
469 if (filepart)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
470 *filepart = '\0';
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
471
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
472 /* For each matching file */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
473 do
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
474 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
475 /* Process it */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
476 ret = doFile (hConv, fullpath, wfd.cFileName);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
477
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
478 if (ret)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
479 break;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
480 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
481 while (FindNextFile (hFindFile, &wfd));
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
482
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
483 FindClose (hFindFile);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
484 }
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
485 #endif
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
486 /* Release the path name buffers */
5030
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
487 if (fullpath)
422b4b4fb2a6 Winclient updates
Vin Shelton <acs@xemacs.org>
parents: 4464
diff changeset
488 free (fullpath);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
489 free (arg);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
490
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
491 if (ret)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
492 break;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
493 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
494
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
495 return ret;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
496 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
497
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
498 static void
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
499 fatal (const char *s1, const char *s2)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
500 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
501 error (s1, s2);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
502 exit (1);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
503 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
504
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
505 /* Print error message. `s1' is printf control string, `s2' is arg for it. */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
506 static void
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
507 error (const char* s1, const char* s2)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
508 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
509 fprintf (stderr, "winclient: ");
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
510 fprintf (stderr, s1, s2);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
511 fprintf (stderr, "\n");
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
512 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
513
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
514 /* Like malloc but get fatal error if memory is exhausted. */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
515
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
516 static void *
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
517 xmalloc (size_t size)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
518 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
519 void *result = malloc (size);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
520 if (result == NULL)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
521 fatal ("virtual memory exhausted", (char *) 0);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
522 return result;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 819
diff changeset
523 }