annotate lib-src/gnuclient.c @ 149:538048ae2ab8 r20-3b1

Import from CVS: tag r20-3b1
author cvs
date Mon, 13 Aug 2007 09:36:16 +0200
parents 360340f9fd5f
children 59463afc5666
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 /* -*-C-*-
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 Client code to allow local and remote editing of files by XEmacs.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 Copyright (C) 1989 Free Software Foundation, Inc.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 Copyright (C) 1995 Sun Microsystems, Inc.
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
5 Copyright (C) 1997 Free Software Foundation, Inc.
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 This file is part of XEmacs.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 XEmacs is free software; you can redistribute it and/or modify it
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 under the terms of the GNU General Public License as published by the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 Free Software Foundation; either version 2, or (at your option) any
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12 later version.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 XEmacs is distributed in the hope that it will be useful, but WITHOUT
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 for more details.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 You should have received a copy of the GNU General Public License
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 along with XEmacs; see the file COPYING. If not, write to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22 Boston, MA 02111-1307, USA.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 Author: Andy Norman (ange@hplb.hpl.hp.com), based on
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 'etc/emacsclient.c' from the GNU Emacs 18.52 distribution.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 Please mail bugs and suggestions to the author at the above address.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31 * This file incorporates new features added by Bob Weiner <weiner@mot.com>,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 * Darrell Kindred <dkindred@cmu.edu> and Arup Mukherjee <arup@cmu.edu>.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 * GNUATTACH support added by Ben Wing <wing@xemacs.org>.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 * Please see the note at the end of the README file for details.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 *
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 * (If gnuserv came bundled with your emacs, the README file is probably
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 * ../etc/gnuserv.README relative to the directory containing this file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 #if 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 /* Hand-munged RCS header */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 static char rcsid [] = "!Header: gnuclient.c,v 2.2 95/12/12 01:39:21 wing nene !";
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 #include "gnuserv.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 #include "getopt.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 #include <stdio.h>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 #include <stdlib.h>
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
50 #ifdef HAVE_STRING_H
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 #include <string.h>
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
52 #endif /* HAVE_STRING_H */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 #include <sys/types.h>
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
54 #ifdef HAVE_UNISTD_H
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 #include <unistd.h>
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
56 #endif /* HAVE_UNISTD_H */
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
57 #include <signal.h>
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
58
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 #if !defined(SYSV_IPC) && !defined(UNIX_DOMAIN_SOCKETS) && \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 !defined(INTERNET_DOMAIN_SOCKETS)
78
c7528f8e288d Import from CVS: tag r20-0b34
cvs
parents: 70
diff changeset
62 int
c7528f8e288d Import from CVS: tag r20-0b34
cvs
parents: 70
diff changeset
63 main (int argc, char *argv[])
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 fprintf (stderr, "Sorry, the Emacs server is only "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 "supported on systems that have\n");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 fprintf (stderr, "Unix Domain sockets, Internet Domain "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 "sockets or System V IPC.\n");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 exit (1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 } /* main */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 #else /* SYSV_IPC || UNIX_DOMAIN_SOCKETS || INTERNET_DOMAIN_SOCKETS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 static char cwd[MAXPATHLEN+2]; /* current working directory when calculated */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 static char *cp = NULL; /* ptr into valid bit of cwd above */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
76 static pid_t emacs_pid; /* Process id for emacs process */
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
77
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
78 void initialize_signals (void);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
79
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
80 void
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
81 tell_emacs_to_resume (int sig)
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
82 {
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
83 char buffer[GSERV_BUFSZ+1];
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
84 int s; /* socket / msqid to server */
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
85 int connect_type; /* CONN_UNIX, CONN_INTERNET, or
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
86 ONN_IPC */
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
87
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
88 /* Why is SYSV so retarded? */
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
89 /* We want emacs to realize that we are resuming */
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
90 signal(SIGCONT, tell_emacs_to_resume);
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
91
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
92 connect_type = make_connection (NULL, (u_short) 0, &s);
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
93
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
94 sprintf(buffer,"(gnuserv-eval '(resume-pid-console %d))", getpid());
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
95 send_string(s, buffer);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
96
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
97 #ifdef SYSV_IPC
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
98 if (connect_type == (int) CONN_IPC)
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
99 disconnect_from_ipc_server (s, msgp, FALSE);
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
100 #else /* !SYSV_IPC */
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
101 if (connect_type != (int) CONN_IPC)
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
102 disconnect_from_server (s, FALSE);
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
103 #endif /* !SYSV_IPC */
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
104 }
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
105
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
106 void
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
107 pass_signal_to_emacs (int sig)
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
108 {
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
109 if (kill (emacs_pid, sig) == -1)
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
110 {
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
111 fprintf (stderr, "gnuattach: Could not pass signal to emacs process\n");
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
112 exit (1);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
113 }
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
114 initialize_signals ();
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
115 }
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
116
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
117 void
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
118 initialize_signals ()
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
119 {
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
120 /* Set up signal handler to pass relevant signals to emacs process.
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
121 We used to send SIGSEGV, SIGBUS, SIGPIPE, SIGILL and others to
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
122 Emacs, but I think it's better not to. I can see no reason why
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
123 Emacs should SIGSEGV whenever gnuclient SIGSEGV-s, etc. */
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
124 signal (SIGHUP, pass_signal_to_emacs);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
125 signal (SIGQUIT, pass_signal_to_emacs);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
126 signal (SIGINT, pass_signal_to_emacs);
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
127
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
128 /* We want emacs to realize that we are resuming */
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
129 signal (SIGCONT, tell_emacs_to_resume);
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
130 }
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
131
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 get_current_working_directory -- return the cwd.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 static char *
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 get_current_working_directory (void)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 if (cp == NULL)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 { /* haven't calculated it yet */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 #ifdef BSD
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 if (getwd (cwd) == 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 #else /* !BSD */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 if (getcwd (cwd,MAXPATHLEN) == NULL)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 #endif /* !BSD */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 perror (progname);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 fprintf (stderr, "%s: unable to get current working directory\n",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 progname);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 exit (1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 } /* if */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 /* on some systems, cwd can look like '@machine/' ... */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 /* ignore everything before the first '/' */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 for (cp = cwd; *cp && *cp != '/'; ++cp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 ;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158 } /* if */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 return cp;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 } /* get_current_working_directory */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 filename_expand -- try to convert the given filename into a fully-qualified
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 pathname.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 filename_expand (char *fullpath, char *filename)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 /* fullpath - returned full pathname */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172 /* filename - filename to expand */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 int len;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 fullpath[0] = '\0';
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 if (filename[0] && filename[0] != '/')
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 { /* relative filename */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 strcat (fullpath, get_current_working_directory ());
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 len = strlen (fullpath);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 if (len > 0 && fullpath[len-1] == '/') /* trailing slash already? */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 ; /* yep */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 strcat (fullpath, "/"); /* nope, append trailing slash */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 } /* if */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 strcat (fullpath,filename);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 } /* filename_expand */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192
78
c7528f8e288d Import from CVS: tag r20-0b34
cvs
parents: 70
diff changeset
193 int
c7528f8e288d Import from CVS: tag r20-0b34
cvs
parents: 70
diff changeset
194 main (int argc, char *argv[])
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 int starting_line = 1; /* line to start editing at */
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
197 char command[MAXPATHLEN+50]; /* emacs command buffer */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 char fullpath[MAXPATHLEN+1]; /* full pathname to file */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 int qflg = 0; /* quick edit, don't wait for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 * user to finish */
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
201 int view = 0; /* view only. */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 int errflg = 0; /* option error */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 int c; /* char from getopt */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 int s; /* socket / msqid to server */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205 int connect_type; /* CONN_UNIX, CONN_INTERNET, or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 * CONN_IPC */
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
207 int suppress_windows_system = 0;
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
208 char *display;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209 #ifdef INTERNET_DOMAIN_SOCKETS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 char *hostarg = NULL; /* remote hostname */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211 char thishost[HOSTNAMSZ]; /* this hostname */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 char remotepath[MAXPATHLEN+1]; /* remote pathname */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 int rflg = 0; /* pathname given on cmdline */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 u_short portarg = 0; /* port to server */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215 char *ptr; /* return from getenv */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 #endif /* INTERNET_DOMAIN_SOCKETS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 #ifdef SYSV_IPC
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 struct msgbuf *msgp; /* message */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219 #endif /* SYSV_IPC */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220 char *tty;
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
221 char buffer[GSERV_BUFSZ+1]; /* buffer to read pid */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 #ifdef INTERNET_DOMAIN_SOCKETS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224 memset (remotepath, 0, sizeof (remotepath));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 #endif /* INTERNET_DOMAIN_SOCKETS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 progname = argv[0];
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
229 display = getenv ("DISPLAY");
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
230 if (!display)
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
231 suppress_windows_system = 1;
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
232
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
233 while ((c = getopt (argc, argv,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
234
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235 #ifdef INTERNET_DOMAIN_SOCKETS
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
236 "n:h:p:r:qv"
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
237 #else /* !INTERNET_DOMAIN_SOCKETS */
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
238 "n:qv"
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
239 #endif /* !INTERNET_DOMAIN_SOCKETS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
241 )) != EOF)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
242 switch (c)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
243 {
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
244 case 'n':
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
245 if (*optarg == 'w')
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
246 suppress_windows_system++;
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
247 else
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
248 errflg++;
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
249 break;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
250 case 'q': /* quick mode specified */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
251 qflg++;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
252 break;
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
253 case 'v':
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
254 view++;
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
255 break;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
256
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
257 #ifdef INTERNET_DOMAIN_SOCKETS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
258 case 'h': /* server host name specified */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
259 hostarg = optarg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
260 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
261 case 'r': /* remote path from server specifed */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
262 strcpy (remotepath,optarg);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
263 rflg++;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
265 case 'p': /* port number specified */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
266 portarg = atoi (optarg);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
267 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
268 #endif /* INTERNET_DOMAIN_SOCKETS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
269
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
270 case '?':
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
271 errflg++;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
272 } /* switch */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
273
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
274 if (errflg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
275 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
276 fprintf (stderr,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
277 #ifdef INTERNET_DOMAIN_SOCKETS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
278 "usage: %s [-q] [-h hostname] [-p port] [-r pathname] "
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
279 "[[+line] path] ...\n",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
280 #else /* !INTERNET_DOMAIN_SOCKETS */
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
281 "usage: %s [-nw] [-q] [[+line] path] ...\n",
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
282 #endif /* !INTERNET_DOMAIN_SOCKETS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
283 progname);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
284 exit (1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
285 } /* if */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
286
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
287 if (suppress_windows_system)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
288 {
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
289 tty = ttyname (0);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
290 if (!tty)
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
291 {
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
292 fprintf (stderr, "%s: Not connected to a tty", progname);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
293 exit (1);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
294 }
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
295 }
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
296 /* This next stuff added in an attempt to make handling of the tty
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
297 do the right thing when dealing with signals. The idea is to
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
298 pass all the appropriate signals to the emacs process. */
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
299
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
300 connect_type = make_connection (NULL, (u_short) 0, &s);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
301
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
302 send_string (s, "(gnuserv-eval '(emacs-pid))");
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
303 send_string (s, EOT_STR);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
304
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
305 if (read_line (s, buffer) == 0)
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
306 {
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
307 fprintf (stderr, "%s: Could not establish emacs procces id\n",
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
308 progname);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
309 exit (1);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
310 }
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
311 /* Don't do disconnect_from_server becasue we have already read
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
312 data, and disconnect doesn't do anything else. */
108
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
313 #ifdef SYSV_IPC
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
314 if (connect_type == (int) CONN_IPC)
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
315 disconnect_from_ipc_server (s, msgp, FALSE);
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
316 #endif /* !SYSV_IPC */
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
317
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
318 emacs_pid = (pid_t)atol(buffer);
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
319 initialize_signals();
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
320
360340f9fd5f Import from CVS: tag r20-1b6
cvs
parents: 78
diff changeset
321 #if defined(INTERNET_DOMAIN_SOCKETS) && !defined(GNUATTACH)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
322 connect_type = make_connection (hostarg, portarg, &s);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
323 #else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
324 connect_type = make_connection (NULL, (u_short) 0, &s);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
325 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
326
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
327 #ifdef INTERNET_DOMAIN_SOCKETS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
328 if (connect_type == (int) CONN_INTERNET)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
329 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
330 gethostname (thishost, HOSTNAMSZ);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
331 if (!rflg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
332 { /* attempt to generate a path
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
333 * to this machine */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
334 if ((ptr = getenv ("GNU_NODE")) != NULL)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
335 /* user specified a path */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
336 strcpy (remotepath, ptr);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
337 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
338 #if 0 /* This is really bogus... re-enable it if you must have it! */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
339 #if defined (hp9000s300) || defined (hp9000s800)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
340 else if (strcmp (thishost,hostarg))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
341 { /* try /net/thishost */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
342 strcpy (remotepath, "/net/"); /* (this fails using internet
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
343 addresses) */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
344 strcat (remotepath, thishost);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
345 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
346 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
347 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
348 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
349 else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
350 { /* same machines, no need for path */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
351 remotepath[0] = '\0'; /* default is the empty path */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
352 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
353 #endif /* INTERNET_DOMAIN_SOCKETS */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
354
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
355 #ifdef SYSV_IPC
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
356 if ((msgp = (struct msgbuf *)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
357 malloc (sizeof *msgp + GSERV_BUFSZ)) == NULL)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
358 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
359 fprintf (stderr, "%s: not enough memory for message buffer\n", progname);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
360 exit (1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
361 } /* if */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
362
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
363 msgp->mtext[0] = '\0'; /* ready for later strcats */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
364 #endif /* SYSV_IPC */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
365
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
366 if (suppress_windows_system)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
367 {
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
368 ptr = getenv ("TERM");
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
369 if (!ptr)
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
370 {
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
371 fprintf (stderr, "%s: unknown terminal type\n", progname);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
372 exit (1);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
373 }
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
374 sprintf (command,
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
375 "(gnuserv-edit-files '(tty \"%s\" \"%s\" %d) '(",
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
376 tty, ptr, getpid ());
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
377 }
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
378 else /* !suppress_windows_system */
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
379 {
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
380 sprintf (command, "(gnuserv-edit-files '(x \"%s\") '(",
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
381 display);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
382 } /* !suppress_windows_system */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
383 send_string (s, command);
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
384
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
385 if (!suppress_windows_system && (optind == argc))
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
386 qflg = 1;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
387
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
388 for (; optind < argc; optind++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
389 {
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
390 if (optind < argc - 1 && *argv[optind] == '+')
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
391 starting_line = atoi (argv[optind++]);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
392 else
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
393 starting_line = 1;
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
394 /* If the last argument is +something, treat it as a file. */
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
395 if (optind == argc)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
396 {
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
397 starting_line = 1;
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
398 --optind;
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
399 }
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
400 filename_expand (fullpath, argv[optind]);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
401 sprintf (command, "(%d . \"%s%s\")", starting_line,
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
402 #ifdef INTERNET_DOMAIN_SOCKETS
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
403 remotepath,
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
404 #else /* !INTERNET_DOMAIN_SOCKETS */
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
405 "",
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
406 #endif
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
407 fullpath);
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
408 send_string (s, command);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
409 } /* for */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
410
149
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
411 sprintf (command, ") %s)", qflg ? "'quick" : (view ? "'view" : ""));
538048ae2ab8 Import from CVS: tag r20-3b1
cvs
parents: 108
diff changeset
412 send_string (s, command);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
413
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
414 #ifdef SYSV_IPC
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
415 if (connect_type == (int) CONN_IPC)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
416 disconnect_from_ipc_server (s, msgp, FALSE);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
417 #else /* !SYSV_IPC */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
418 if (connect_type != (int) CONN_IPC)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
419 disconnect_from_server (s, FALSE);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
420 #endif /* !SYSV_IPC */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
421
78
c7528f8e288d Import from CVS: tag r20-0b34
cvs
parents: 70
diff changeset
422 return 0;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
423
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
424 } /* main */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
425
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
426 #endif /* SYSV_IPC || UNIX_DOMAIN_SOCKETS || INTERNET_DOMAIN_SOCKETS */