mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 18:40:39 -08:00
Initial revision
This commit is contained in:
parent
14f29224a0
commit
c911543b1c
8 changed files with 266 additions and 0 deletions
45
lib-src/ntlib.h
Normal file
45
lib-src/ntlib.h
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
/* Utility and Unix shadow routines for GNU Emacs support programs on NT.
|
||||||
|
Copyright (C) 1994 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.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
void sleep(int seconds);
|
||||||
|
int getwd (char *dir);
|
||||||
|
int getppid(void);
|
||||||
|
char * getlogin ();
|
||||||
|
char * cuserid (char * s);
|
||||||
|
int getuid ();
|
||||||
|
int setuid (int uid);
|
||||||
|
struct passwd * getpwuid (int uid);
|
||||||
|
char * getpass (const char * prompt);
|
||||||
|
int fchown (int fd, int uid, int gid);
|
||||||
|
|
||||||
|
#ifndef BSTRING
|
||||||
|
#define bzero(b, l) memset(b, 0, l)
|
||||||
|
#define bcopy(s, d, l) memcpy(d, s, l)
|
||||||
|
#define bcmp(a, b, l) memcmp(a, b, l)
|
||||||
|
|
||||||
|
#define index strchr
|
||||||
|
#define rindex strrchr
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* end of ntlib.h */
|
||||||
1
nt/inc/arpa/inet.h
Normal file
1
nt/inc/arpa/inet.h
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
/* null version of <arpa/inet.h> - <sys/socket.h> has everything */
|
||||||
1
nt/inc/netdb.h
Normal file
1
nt/inc/netdb.h
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
/* null version of <netdb.h> - <sys/socket.h> has everything */
|
||||||
1
nt/inc/netinet/in.h
Normal file
1
nt/inc/netinet/in.h
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
/* null version of <netinet/in.h> - <sys/socket.h> has everything */
|
||||||
119
nt/inc/sys/socket.h
Normal file
119
nt/inc/sys/socket.h
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
/* Workable version of <sys/socket.h> based on winsock.h */
|
||||||
|
|
||||||
|
#ifndef _SOCKET_H_
|
||||||
|
#define _SOCKET_H_
|
||||||
|
|
||||||
|
/* defeat the multiple include protection */
|
||||||
|
#ifdef _WINSOCKAPI_
|
||||||
|
#undef _WINSOCKAPI_
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* avoid confusion with our version of select */
|
||||||
|
#ifdef select
|
||||||
|
#undef select
|
||||||
|
#define MUST_REDEF_SELECT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* avoid clashing with our version of FD_SET if already defined */
|
||||||
|
#ifdef FD_SET
|
||||||
|
#undef FD_SET
|
||||||
|
#undef FD_CLR
|
||||||
|
#undef FD_ISSET
|
||||||
|
#undef FD_ZERO
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* allow us to provide our own version of fd_set */
|
||||||
|
#define fd_set ws_fd_set
|
||||||
|
|
||||||
|
/* avoid duplicate definition of timeval */
|
||||||
|
#ifdef HAVE_TIMEVAL
|
||||||
|
#define timeval ws_timeval
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <winsock.h>
|
||||||
|
|
||||||
|
/* redefine select to reference our version */
|
||||||
|
#ifdef MUST_REDEF_SELECT
|
||||||
|
#define select sys_select
|
||||||
|
#undef MUST_REDEF_SELECT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* revert to our version of FD_SET */
|
||||||
|
#undef FD_SET
|
||||||
|
#undef FD_CLR
|
||||||
|
#undef FD_ISSET
|
||||||
|
#undef FD_ZERO
|
||||||
|
#undef fd_set
|
||||||
|
#include "nt.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_TIMEVAL
|
||||||
|
#undef timeval
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* shadow functions where we provide our own wrapper */
|
||||||
|
#define socket sys_socket
|
||||||
|
#define bind sys_bind
|
||||||
|
#define connect sys_connect
|
||||||
|
#define htons sys_htons
|
||||||
|
#define ntohs sys_ntohs
|
||||||
|
#define inet_addr sys_inet_addr
|
||||||
|
#define gethostname sys_gethostname
|
||||||
|
#define gethostbyname sys_gethostbyname
|
||||||
|
#define getservbyname sys_getservbyname
|
||||||
|
|
||||||
|
int sys_socket(int af, int type, int protocol);
|
||||||
|
int sys_bind (int s, const struct sockaddr *addr, int namelen);
|
||||||
|
int sys_connect (int s, const struct sockaddr *addr, int namelen);
|
||||||
|
u_short sys_htons (u_short hostshort);
|
||||||
|
u_short sys_ntohs (u_short netshort);
|
||||||
|
unsigned long sys_inet_addr (const char * cp);
|
||||||
|
int sys_gethostname (char * name, int namelen);
|
||||||
|
struct hostent * sys_gethostbyname(const char * name);
|
||||||
|
struct servent * sys_getservbyname(const char * name, const char * proto);
|
||||||
|
|
||||||
|
/* we are providing a real h_errno variable */
|
||||||
|
#undef h_errno
|
||||||
|
extern int h_errno;
|
||||||
|
|
||||||
|
/* map winsock error codes to standard names */
|
||||||
|
#define EWOULDBLOCK WSAEWOULDBLOCK
|
||||||
|
#define EINPROGRESS WSAEINPROGRESS
|
||||||
|
#define EALREADY WSAEALREADY
|
||||||
|
#define ENOTSOCK WSAENOTSOCK
|
||||||
|
#define EDESTADDRREQ WSAEDESTADDRREQ
|
||||||
|
#define EMSGSIZE WSAEMSGSIZE
|
||||||
|
#define EPROTOTYPE WSAEPROTOTYPE
|
||||||
|
#define ENOPROTOOPT WSAENOPROTOOPT
|
||||||
|
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
|
||||||
|
#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
|
||||||
|
#define EOPNOTSUPP WSAEOPNOTSUPP
|
||||||
|
#define EPFNOSUPPORT WSAEPFNOSUPPORT
|
||||||
|
#define EAFNOSUPPORT WSAEAFNOSUPPORT
|
||||||
|
#define EADDRINUSE WSAEADDRINUSE
|
||||||
|
#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
|
||||||
|
#define ENETDOWN WSAENETDOWN
|
||||||
|
#define ENETUNREACH WSAENETUNREACH
|
||||||
|
#define ENETRESET WSAENETRESET
|
||||||
|
#define ECONNABORTED WSAECONNABORTED
|
||||||
|
#define ECONNRESET WSAECONNRESET
|
||||||
|
#define ENOBUFS WSAENOBUFS
|
||||||
|
#define EISCONN WSAEISCONN
|
||||||
|
#define ENOTCONN WSAENOTCONN
|
||||||
|
#define ESHUTDOWN WSAESHUTDOWN
|
||||||
|
#define ETOOMANYREFS WSAETOOMANYREFS
|
||||||
|
#define ETIMEDOUT WSAETIMEDOUT
|
||||||
|
#define ECONNREFUSED WSAECONNREFUSED
|
||||||
|
#define ELOOP WSAELOOP
|
||||||
|
/* #define ENAMETOOLONG WSAENAMETOOLONG */
|
||||||
|
#define EHOSTDOWN WSAEHOSTDOWN
|
||||||
|
#define EHOSTUNREACH WSAEHOSTUNREACH
|
||||||
|
/* #define ENOTEMPTY WSAENOTEMPTY */
|
||||||
|
#define EPROCLIM WSAEPROCLIM
|
||||||
|
#define EUSERS WSAEUSERS
|
||||||
|
#define EDQUOT WSAEDQUOT
|
||||||
|
#define ESTALE WSAESTALE
|
||||||
|
#define EREMOTE WSAEREMOTE
|
||||||
|
|
||||||
|
#endif /* _SOCKET_H_ */
|
||||||
|
|
||||||
|
/* end of socket.h */
|
||||||
18
nt/inc/sys/time.h
Normal file
18
nt/inc/sys/time.h
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* sys/time.h doesn't exist on NT
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct timeval
|
||||||
|
{
|
||||||
|
long tv_sec; /* seconds */
|
||||||
|
long tv_usec; /* microseconds */
|
||||||
|
};
|
||||||
|
struct timezone
|
||||||
|
{
|
||||||
|
int tz_minuteswest; /* minutes west of Greenwich */
|
||||||
|
int tz_dsttime; /* type of dst correction */
|
||||||
|
};
|
||||||
|
|
||||||
|
void gettimeofday (struct timeval *, struct timezone *);
|
||||||
|
|
||||||
|
/* end of sys/time.h */
|
||||||
1
nt/inc/unistd.h
Normal file
1
nt/inc/unistd.h
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
/* Fake unistd.h: config.h already provides most of the relevant things. */
|
||||||
80
nt/runemacs.c
Normal file
80
nt/runemacs.c
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
/*
|
||||||
|
Simple program to start Emacs with its console window hidden.
|
||||||
|
|
||||||
|
This program is provided purely for convenience, since most users will
|
||||||
|
use Emacs in windowing (GUI) mode, and will not want to have an extra
|
||||||
|
console window lying around. */
|
||||||
|
|
||||||
|
#define WIN32
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
int WINAPI
|
||||||
|
WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
|
||||||
|
{
|
||||||
|
STARTUPINFO start;
|
||||||
|
SECURITY_ATTRIBUTES sec_attrs;
|
||||||
|
SECURITY_DESCRIPTOR sec_desc;
|
||||||
|
PROCESS_INFORMATION child;
|
||||||
|
int wait_for_child = FALSE;
|
||||||
|
DWORD ret_code = 0;
|
||||||
|
char * new_cmdline;
|
||||||
|
char * p;
|
||||||
|
char modname[MAX_PATH];
|
||||||
|
|
||||||
|
if (!GetModuleFileName (NULL, modname, MAX_PATH))
|
||||||
|
goto error;
|
||||||
|
if ((p = strrchr (modname, '\\')) == NULL)
|
||||||
|
goto error;
|
||||||
|
*p = 0;
|
||||||
|
|
||||||
|
new_cmdline = alloca (MAX_PATH + strlen (cmdline) + 1);
|
||||||
|
strcpy (new_cmdline, modname);
|
||||||
|
strcat (new_cmdline, "\\emacs.exe ");
|
||||||
|
|
||||||
|
/* append original arguments if any; first look for -wait as first
|
||||||
|
argument, and apply that ourselves */
|
||||||
|
if (strncmp (cmdline, "-wait", 5) == 0)
|
||||||
|
{
|
||||||
|
wait_for_child = TRUE;
|
||||||
|
cmdline += 5;
|
||||||
|
}
|
||||||
|
strcat (new_cmdline, cmdline);
|
||||||
|
|
||||||
|
/* set emacs_dir variable if runemacs was in "%emacs_dir%\bin" */
|
||||||
|
if ((p = strrchr (modname, '\\')) && stricmp (p, "\\bin") == 0)
|
||||||
|
{
|
||||||
|
*p = 0;
|
||||||
|
SetEnvironmentVariable ("emacs_dir", modname);
|
||||||
|
}
|
||||||
|
|
||||||
|
memset (&start, 0, sizeof (start));
|
||||||
|
start.cb = sizeof (start);
|
||||||
|
start.dwFlags = STARTF_USESHOWWINDOW;
|
||||||
|
start.wShowWindow = SW_HIDE;
|
||||||
|
|
||||||
|
sec_attrs.nLength = sizeof (sec_attrs);
|
||||||
|
sec_attrs.lpSecurityDescriptor = NULL;
|
||||||
|
sec_attrs.bInheritHandle = FALSE;
|
||||||
|
|
||||||
|
if (CreateProcess (NULL, new_cmdline, &sec_attrs, NULL, TRUE, 0,
|
||||||
|
NULL, NULL, &start, &child))
|
||||||
|
{
|
||||||
|
if (wait_for_child)
|
||||||
|
{
|
||||||
|
WaitForSingleObject (child.hProcess, INFINITE);
|
||||||
|
GetExitCodeProcess (child.hProcess, &ret_code);
|
||||||
|
}
|
||||||
|
CloseHandle (child.hThread);
|
||||||
|
CloseHandle (child.hProcess);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
goto error;
|
||||||
|
return (int) ret_code;
|
||||||
|
|
||||||
|
error:
|
||||||
|
MessageBox (NULL, "Could not start Emacs.", "Error", MB_ICONSTOP);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue