1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-25 19:11:56 +00:00

Initial revision

This commit is contained in:
Geoff Voelker 1995-06-10 02:24:19 +00:00
parent 01b96d5c13
commit cef9e134b1
2 changed files with 231 additions and 0 deletions

193
nt/addpm.c Normal file
View File

@ -0,0 +1,193 @@
/* Add entries to the GNU Emacs Program Manager folder.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any later
version.
GNU Emacs is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along
with GNU Emacs; see the file COPYING. If not, write to the Free Software
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* addpm: Adds entries to the GNU Emacs Program Manager folder.
argv[1] = full path to program to execute
argv[2] = full path to icon for emacs (optional)
*/
#include <windows.h> // required for all Windows applications
#include <ddeml.h> // required for DDEML
#include <string.h> // required for strcpy and strlen
HDDEDATA EXPENTRY dde_callback (WORD, WORD, HCONV, HSZ, HSZ, HDDEDATA, DWORD, DWORD);
BOOL send_shell_command (DWORD, LPSTR);
// Global variables
HANDLE gh_inst; // current instance
/****************************************************************************
FUNCTION: WinMain()
PURPOSE: Calls initialization function, processes message loop
PARAMETERS:
HANDLE h_instance
HANDLE h_prev_instance
LPSTR lp_cmd_line
int n_cmd_show
RETURNS:
int
****************************************************************************/
int PASCAL
WinMain (HANDLE h_instance, // current instance
HANDLE h_prev_instance, // previous instance
LPSTR lp_cmd_line, // command line
int n_cmd_show) // show-window type (open/icon)
{
DWORD id_inst = 0L; // instance identifier
FARPROC lp_dde_proc;
char *path, *icon, *s;
char additem[MAX_PATH*2 + 100];
gh_inst = h_instance;
for (path = NULL, s = lp_cmd_line; *s && isspace (*s); s++);
if (*s)
{
path = s;
while (*s && !isspace (*s))
s++;
if (*s)
*(s++) = '\0';
}
for (icon = NULL; *s && isspace (*s); s++);
if (*s)
{
icon = s;
while (*s && !isspace (*s))
s++;
if (*s)
*(s++) = '\0';
}
lp_dde_proc = MakeProcInstance ((FARPROC) dde_callback, gh_inst);
DdeInitialize (&id_inst, // receives instance ID
(PFNCALLBACK) lp_dde_proc, // address of callback function
APPCMD_CLIENTONLY, // this is a client app
0L); // reserved
send_shell_command (id_inst, (LPSTR) "[CreateGroup(Gnu Emacs)]");
send_shell_command (id_inst, (LPSTR) "[ReplaceItem(Emacs)]");
sprintf (additem, "[AddItem(%s,Emacs%c%s)]",
path, (icon ? ',' : ' '), (icon ? icon : ""));
send_shell_command (id_inst, additem);
DdeUninitialize (id_inst);
return (0);
}
/****************************************************************************
FUNCTION: dde_callback()
PURPOSE: Processes messages for DDEML conversation
PARAMETERS:
WORD w_type
WORD w_fmt
HCONV h_conv
HSZ hsz1
HSZ hsz2
HDDEDATA h_data
DWORD dw_data1
DWORD dw_data2
RETURNS:
HDDEDATA
****************************************************************************/
HDDEDATA EXPENTRY
dde_callback (WORD w_type, // transaction type
WORD w_fmt, // clipboard format
HCONV h_conv, // handle of the conversation
HSZ hsz1, // handle of a string
HSZ hsz2, // handle of a string
HDDEDATA h_data, // handle of a global memory object
DWORD dw_data1, // transaction-specific data
DWORD dw_data2) // transaction-specific data
{
// Nothing need be done here...
return (HDDEDATA) NULL;
}
/****************************************************************************
FUNCTION: send_shell_command()
PURPOSE: Sends the given command string to Program Manager
PARAMETERS:
LPSTR - pointer to command string
RETURNS:
BOOL - TRUE if this function succeeds, FALSE otherwise
****************************************************************************/
BOOL
send_shell_command (DWORD id_inst, // instance identifier
LPSTR lp_command) // command string to execute
{
HSZ hsz_serv_top; // Service and Topic name are "PROGMAN"
HCONV hconv; // handle of conversation
int n_len; // length of command string
HDDEDATA h_data; // return value of DdeClientTransaction
DWORD dw_result; // result of transaction
BOOL b_result = FALSE; // TRUE if this function is successful
// create string handle to service/topic
hsz_serv_top = DdeCreateStringHandle (id_inst, "PROGMAN", CP_WINANSI);
// attempt to start conversation with server app
if ((hconv = DdeConnect (id_inst, hsz_serv_top, hsz_serv_top, NULL))
!= (HCONV) NULL)
{
// get length of the command string
n_len = lstrlen ((LPSTR) lp_command);
// send command to server app
h_data = DdeClientTransaction ((LPBYTE) lp_command, // data to pass
n_len + 1, // length of data
hconv, // handle of conversation
(HCONV) NULL, // handle of name-string
CF_TEXT, // clipboard format
XTYP_EXECUTE, // transaction type
1000, // timeout duration
&dw_result); // transaction result
if (h_data)
b_result = TRUE;
// end conversation
DdeDisconnect (hconv);
}
// free service/topic string handle
DdeFreeStringHandle (id_inst, hsz_serv_top);
return b_result;
}

38
nt/emacs.bat.in Normal file
View File

@ -0,0 +1,38 @@
REM Here begins emacs.bat.in
REM Set OS specific values.
set ARCH_SAVE=%PROCESSOR_ARCHITECTURE%
set PROCESSOR_ARCHITECTURE=
if "%ARCH_SAVE%" == "%PROCESSOR_ARCHITECTURE%" goto win95
set PROCESSOR_ARCHITECTURE=%ARCH_SAVE%
set SHELL=cmd
goto next
:win95
set SHELL=command
:next
set EMACSLOADPATH=%emacs_dir%\lisp
set EMACSDATA=%emacs_dir%\etc
set EMACSPATH=%emacs_dir%\bin
set EMACSLOCKDIR=%emacs_dir%\lock
set INFOPATH=%emacs_dir%\info
set EMACSDOC=%emacs_dir%\etc
set TERM=CMD
REM The variable HOME is used to find the startup file, ~\_emacs. Ideally,
REM this will not be set in this file but should already be set before
REM this file is invoked. If HOME is not set, use some generic default.
set HOME_SAVE=%HOME%
set HOME_EXISTS=yes
set HOME_DEFAULT=C:\
set HOME=
if "%HOME%" == "%HOME_SAVE%" set HOME_EXISTS=no
if "%HOME_EXISTS%" == "yes" set HOME=%HOME_SAVE%
if "%HOME_EXISTS%" == "no" set HOME=%HOME_DEFAULT%
if "%HOME_EXISTS%" == "no" echo HOME is not set! Using %HOME% as a default...
%emacs_dir%\bin\emacs.exe %1 %2 %3 %4 %5 %6 %7 %8 %9