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)
+the Free Software Foundation; either version 3, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
#include <signal.h>
#include <errno.h>
-/* From lisp.h */
-#ifndef DIRECTORY_SEP
-#define DIRECTORY_SEP '/'
-#endif
-#ifndef IS_DIRECTORY_SEP
-#define IS_DIRECTORY_SEP(_c_) ((_c_) == DIRECTORY_SEP)
-#endif
-#ifndef IS_DEVICE_SEP
-#ifndef DEVICE_SEP
-#define IS_DEVICE_SEP(_c_) 0
-#else
-#define IS_DEVICE_SEP(_c_) ((_c_) == DEVICE_SEP)
-#endif
-#endif
-#ifndef IS_ANY_SEP
-#define IS_ANY_SEP(_c_) (IS_DIRECTORY_SEP (_c_))
-#endif
-
-
\f
char *getenv (), *getwd ();
char *(getcwd) ();
/* Name used to invoke this program. */
char *progname;
-/* The first argument to main. */
-int main_argc;
-
/* The second argument to main. */
char **main_argv;
/* Nonzero means args are expressions to be evaluated. --eval. */
int eval = 0;
-/* Nonzero means don't open a new frame. --current-frame. */
-int current_frame = 0;
+/* Nonzero means don't open a new frame. Inverse of --create-frame. */
+int current_frame = 1;
/* Nonzero means open a new graphical frame. */
int window_system = 0;
{ "help", no_argument, NULL, 'H' },
{ "version", no_argument, NULL, 'V' },
{ "tty", no_argument, NULL, 't' },
- { "current-frame", no_argument, NULL, 'c' },
+ { "create-frame", no_argument, NULL, 'c' },
{ "alternate-editor", required_argument, NULL, 'a' },
#ifndef NO_SOCKETS_IN_FILE_SYSTEM
{ "socket-name", required_argument, NULL, 's' },
/* From sysdep.c */
#if !defined (HAVE_GET_CURRENT_DIR_NAME) || defined (BROKEN_GET_CURRENT_DIR_NAME)
+/* From lisp.h */
+#ifndef DIRECTORY_SEP
+#define DIRECTORY_SEP '/'
+#endif
+#ifndef IS_DIRECTORY_SEP
+#define IS_DIRECTORY_SEP(_c_) ((_c_) == DIRECTORY_SEP)
+#endif
+#ifndef IS_DEVICE_SEP
+#ifndef DEVICE_SEP
+#define IS_DEVICE_SEP(_c_) 0
+#else
+#define IS_DEVICE_SEP(_c_) ((_c_) == DEVICE_SEP)
+#endif
+#endif
+#ifndef IS_ANY_SEP
+#define IS_ANY_SEP(_c_) (IS_DIRECTORY_SEP (_c_))
+#endif
+
+
/* Return the current working directory. Returns NULL on errors.
Any other returned value must be freed with free. This is used
only when get_current_dir_name is not defined on the system. */
}
/*
- execvp wrapper for Windows. Quotes arguments with embedded spaces.
+ execvp wrapper for Windows. Quotes arguments with embedded spaces.
This is necessary due to the broken implementation of exec* routines in
the Microsoft libraries: they concatenate the arguments together without
case 't':
tty = 1;
+ current_frame = 0;
break;
case 'c':
- current_frame = 1;
+ current_frame = 0;
break;
case 'H':
-V, --version Just print version info and return\n\
-H, --help Print this usage information message\n\
-t, --tty Open a new Emacs frame on the current terminal\n\
--c, --current-frame Do not create a new frame;\n\
+-c, --create-frame Create a new frame instead of trying to\n\
use the current Emacs frame\n\
-e, --eval Evaluate the FILE arguments as ELisp expressions\n\
-n, --no-wait Don't wait for the server to return\n\
/*
Try to run a different command, or --if no alternate editor is
defined-- exit with an errorcode.
+ Uses argv, but gets it from the global variable main_argv.
*/
void
fail (void)
int argc;
char **argv;
{
- main_argc = argc;
main_argv = argv;
progname = argv[0];
message (TRUE, "%s: Sorry, the Emacs server is supported only\n"
# include <sys/types.h>
# include <sys/socket.h>
# include <sys/un.h>
-# include <sys/stat.h>
-# include <errno.h>
#endif
#define AUTH_KEY_LENGTH 64
static int
strprefix (char *prefix, char *string)
{
- int i;
- if (! prefix)
- return 1;
-
- if (!string)
- return 0;
-
- for (i = 0; prefix[i]; i++)
- if (!string[i] || string[i] != prefix[i])
- return 0;
- return 1;
+ return !strncmp (prefix, string, strlen (prefix));
}
int sock_status = 0;
int default_sock = !socket_name;
int saved_errno = 0;
-
char *server_name = "server";
if (socket_name && !index (socket_name, '/') && !index (socket_name, '\\'))
char *cwd, *str;
char string[BUFSIZ+1];
- main_argc = argc;
main_argv = argv;
progname = argv[0];
w32_give_focus ();
#endif
- /* First of all, send our version number for verification. */
- send_to_emacs (emacs_socket, "-version ");
- send_to_emacs (emacs_socket, VERSION);
- send_to_emacs (emacs_socket, " ");
-
/* Send over our environment. */
if (!current_frame)
{
while (p > string && *p == '\n')
*p-- = 0;
- if (strprefix ("-good-version ", string))
- {
- /* -good-version: The versions match. */
- }
- else if (strprefix ("-emacs-pid ", string))
+ if (strprefix ("-emacs-pid ", string))
{
/* -emacs-pid PID: The process id of the Emacs process. */
emacs_pid = strtol (string + strlen ("-emacs-pid"), NULL, 10);
fprintf (stderr, "*ERROR*: %s", str);
needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
}
-#ifndef WINDOWSNT
+#ifdef SIGSTOP
else if (strprefix ("-suspend ", string))
{
/* -suspend: Suspend this terminal, i.e., stop the process. */