(mail-setup): Call set-buffer-multibyte because
[bpt/emacs.git] / src / vmsproc.c
index 777ae61..d973960 100644 (file)
@@ -1,11 +1,11 @@
 /* Interfaces to subprocesses on VMS.
-   Copyright (C) 1988 Free Software Foundation, Inc.
+   Copyright (C) 1988, 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 1, or (at your option)
+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,
@@ -15,7 +15,8 @@ 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.  */
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
 
 
 /*
@@ -26,11 +27,20 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
     23 is the timer event flag
     24-31 are reserved by VMS
 */
+#include <config.h>
 #include       <ssdef.h>
 #include       <iodef.h>
 #include       <dvidef.h>
 #include       <clidef.h>
 #include       "vmsproc.h"
+#include       "lisp.h"
+#include       "buffer.h"
+#include       <file.h>
+#include       "process.h"
+#include       "commands.h"
+#include       <errno.h>
+extern Lisp_Object call_process_cleanup ();
+
 
 #define                KEYBOARD_EVENT_FLAG             1
 #define                TIMER_EVENT_FLAG                23
@@ -241,7 +251,7 @@ write_to_vms_process (vs, buf, len)
          error ("Could not write to subprocess: %x", status);
          return (0);
        }
-      len =- out;
+      len -= out;
     }
   return (1);
 }
@@ -393,7 +403,7 @@ child_setup (in, out, err, new_argv, env)
   close_process_descs ();
 #endif
 
-  if (XTYPE (current_buffer->directory) == Lisp_String)
+  if (STRINGP (current_buffer->directory))
     chdir (XSTRING (current_buffer->directory)->data);
 }
 
@@ -497,7 +507,7 @@ if you quit, the process is killed.")
     status = get_pty_channel (inDevName, outDevName, &inchannel, &outchannel);
     if (!(status & 1))
       error ("Error getting PTY channel: %x", status);
-    if (XTYPE (buffer) == Lisp_Int)
+    if (INTEGERP (buffer))
       {
        dout.l = strlen ("NLA0:");
        dout.a = "NLA0:";
@@ -536,7 +546,7 @@ if you quit, the process is killed.")
   /*
       Start a read on the process channel
   */
-  if (XTYPE (buffer) != Lisp_Int)
+  if (!INTEGERP (buffer))
     {
       start_vms_process_read (vs);
       SpawnFlags = CLI$M_NOWAIT;
@@ -565,7 +575,7 @@ if you quit, the process is killed.")
     }
   pid = vs->pid;
 
-  if (XTYPE (buffer) == Lisp_Int)
+  if (INTEGERP (buffer))
     {
 #ifndef subprocesses
       wait_without_blocking ();
@@ -580,7 +590,7 @@ if you quit, the process is killed.")
                         Fcons (make_number (fd[0]), make_number (pid)));
 
 
-  if (XTYPE (buffer) == Lisp_Buffer)
+  if (BUFFERP (buffer))
     Fset_buffer (buffer);
 
   immediate_quit = 1;
@@ -598,7 +608,7 @@ if you quit, the process is killed.")
              InsCStr (vs->inputBuffer, vs->iosb[1]);
            }
          if (!NILP (display) && INTERACTIVE)
-         redisplay_preserve_echo_area ();
+         redisplay_preserve_echo_area (19);
          immediate_quit = 1;
          QUIT;
          if (!start_vms_process_read (vs))
@@ -710,16 +720,16 @@ create_process (process, new_argv)
     
     Event flags returned start at 1 for the keyboard.
     Since Unix expects descriptor 0 for the keyboard,
-    we substract one from the event flag.
+    we subtract one from the event flag.
     */
   inchannel = vs->eventFlag-1;
 
   /* Record this as an active process, with its channels.
      As a result, child_setup will close Emacs's side of the pipes.  */
   chan_process[inchannel] = process;
-  XFASTINT (XPROCESS (process)->infd) = inchannel;
-  XFASTINT (XPROCESS (process)->outfd) = outchannel;
-  XFASTINT (XPROCESS (process)->flags) = RUNNING;
+  XSETFASTINT (XPROCESS (process)->infd, inchannel);
+  XSETFASTINT (XPROCESS (process)->outfd, outchannel);
+  XPROCESS (process)->status = Qrun
 
   /* Delay interrupts until we have a chance to store
      the new fork's pid in its process structure */
@@ -733,7 +743,7 @@ create_process (process, new_argv)
     */
   write_to_vms_process (vs, NO_ECHO, strlen (NO_ECHO));
 
-  XFASTINT (XPROCESS (process)->pid) = pid;
+  XSETFASTINT (XPROCESS (process)->pid, pid);
   sys$setast (1);
 }
 
@@ -748,21 +758,18 @@ child_sig (vs)
   pid = vs->pid;
   sys$setef (vs->eventFlag);
 
-  for (tail = Vprocess_alist; XSYMBOL (tail) != XSYMBOL (Qnil); tail = XCONS (tail)->cdr)
+  for (tail = Vprocess_alist; ! NILP (tail); tail = XCDR (tail))
     {
-      proc = XCONS (XCONS (tail)->car)->cdr;
+      proc = XCDR (XCAR (tail));
       p = XPROCESS (proc);
       if (EQ (p->childp, Qt) && XFASTINT (p->pid) == pid)
        break;
     }
 
-  if (XSYMBOL (tail) == XSYMBOL (Qnil))
+  if (NILP (tail))
     return;
 
-  child_changed++;
-  XFASTINT (p->flags) = EXITED | CHANGED;
-  /* Truncate the exit status to 24 bits so that it fits in a FASTINT */
-  XFASTINT (p->reason) = (vs->exitStatus) & 0xffffff;
+  p->status = Fcons (Qexit, Fcons (make_number (vs->exitStatus), Qnil))
 }
 
 syms_of_vmsproc ()