Commit | Line | Data |
---|---|---|
cef9e134 GV |
1 | /* Add entries to the GNU Emacs Program Manager folder. |
2 | Copyright (C) 1995 Free Software Foundation, Inc. | |
3 | ||
4 | This file is part of GNU Emacs. | |
5 | ||
6 | GNU Emacs is free software; you can redistribute it and/or modify it | |
7 | under the terms of the GNU General Public License as published by the | |
8 | Free Software Foundation; either version 2, or (at your option) any later | |
9 | version. | |
10 | ||
11 | GNU Emacs is distributed in the hope that it will be useful, but WITHOUT | |
12 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
14 | more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License along | |
17 | with GNU Emacs; see the file COPYING. If not, write to the Free Software | |
18 | Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
19 | */ | |
20 | ||
cef9e134 | 21 | /**************************************************************************** |
6fbcbee7 RS |
22 | * |
23 | * Program: addpm (adds emacs to the Windows program manager) | |
24 | * | |
25 | * Usage: | |
26 | * argv[1] = full path to program to execute | |
27 | * argv[2] = full path to icon for emacs (optional) | |
28 | */ | |
cef9e134 | 29 | |
6fbcbee7 RS |
30 | #include <windows.h> |
31 | #include <ddeml.h> | |
32 | #include <stdlib.h> | |
33 | #include <stdio.h> | |
cef9e134 | 34 | |
6fbcbee7 RS |
35 | HDDEDATA CALLBACK DdeCallback (UINT uType, UINT uFmt, HCONV hconv, |
36 | HSZ hsz1, HSZ hsz2, HDDEDATA hdata, | |
37 | DWORD dwData1, DWORD dwData2) | |
38 | { | |
39 | return ((HDDEDATA)NULL); | |
40 | } | |
cef9e134 | 41 | |
6fbcbee7 RS |
42 | #define DdeCommand(str) \ |
43 | DdeClientTransaction (str, strlen(str)+1, HConversation, (HSZ)NULL, \ | |
44 | CF_TEXT, XTYP_EXECUTE, 30000, NULL) | |
cef9e134 | 45 | |
6fbcbee7 RS |
46 | main (argc, argv) |
47 | int argc; | |
48 | char *argv[]; | |
cef9e134 | 49 | { |
6fbcbee7 RS |
50 | DWORD idDde; |
51 | HCONV HConversation; | |
52 | HSZ ProgMan; | |
cef9e134 GV |
53 | char additem[MAX_PATH*2 + 100]; |
54 | ||
6fbcbee7 | 55 | if (argc < 2 || argc > 3) |
cef9e134 | 56 | { |
6fbcbee7 RS |
57 | fprintf(stderr, "usage: addpm exe_path [icon_path]\n"); |
58 | exit(1); | |
cef9e134 | 59 | } |
cef9e134 | 60 | |
6fbcbee7 | 61 | DdeInitialize (&idDde, (PFNCALLBACK)DdeCallback, APPCMD_CLIENTONLY, 0); |
cef9e134 | 62 | |
6fbcbee7 | 63 | ProgMan = DdeCreateStringHandle (idDde, "PROGMAN", CP_WINANSI); |
cef9e134 | 64 | |
6fbcbee7 | 65 | if (HConversation = DdeConnect (idDde, ProgMan, ProgMan, NULL)) |
cef9e134 | 66 | { |
6fbcbee7 RS |
67 | DdeCommand ("[CreateGroup(Gnu Emacs)]"); |
68 | DdeCommand ("[ReplaceItem(Emacs)]"); | |
69 | sprintf (additem, "[AddItem(%s,Emacs%c%s)]", | |
70 | argv[1], (argc>2 ? ',' : ' '), | |
71 | (argc>2 ? argv[2] : "")); | |
72 | DdeCommand (additem); | |
73 | ||
74 | DdeDisconnect (HConversation); | |
cef9e134 GV |
75 | } |
76 | ||
6fbcbee7 RS |
77 | DdeFreeStringHandle (idDde, ProgMan); |
78 | ||
79 | DdeUninitialize (idDde); | |
cef9e134 | 80 | |
6fbcbee7 | 81 | return (0); |
cef9e134 | 82 | } |