🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Ray Nickson Thu, 16 Nov 1989 00:57
HPUX and job control
#733
Author: Ray Nickson
Date: Thu, 16 Nov 1989 00:57
373 lines
9464 bytes
I finally got around to doing the work necessary to get bash to do job
control under HPUX, recent versions of which do have BSD-compatible
process group handling.  I've done this via new #defines in config.h,
so if Brian uses the fixes, old HPUX users can just edit them out of
config.h.  Patches follow.

-rgn
--
Ray Nickson, Dept. Comp. Sci., Victoria University of Wellington, New Zealand.
Ray.Nickson@comp.vuw.ac.nz                                  + 64 4 721000x8593

*** config.h.orig	Fri Sep 22 12:41:17 1989
--- config.h	Wed Nov 15 15:35:10 1989
***************
*** 25,44 ****
  #define SYSV
  #endif
  
  /* Define NO_DUP2 if your OS doesn't have a dup2 () call. */
! #ifdef hpux
  #define NO_DUP2
  #endif
  
  /* Define JOB_CONTROL if your operating system supports
     BSD-like job control. */
  #define JOB_CONTROL
  
  /* Note that System V machines don't support job control. */
! #if defined (SYSV) && !defined (HP9KS300)
  #undef JOB_CONTROL
! #endif /* SYSV && !HP9KS300 */
  
  /* Define ALIAS if you want the alias features. */
  #define ALIAS
  
--- 25,64 ----
  #define SYSV
  #endif
  
+ /* for glob.c */
+ #ifdef SYSV
+ #define USG
+ #endif 
+ 
  /* Define NO_DUP2 if your OS doesn't have a dup2 () call. */
! #ifdef notdef  /* hpux does! */
  #define NO_DUP2
  #endif
  
+ /* define TERMIO if you have SYSV style ioctl in termio.h */
+ #ifdef SYSV
+ #define TERMIO
+ #endif 
+ 
+ /* define BSDTTY if you have BSD tty process group emulation in bsdtty.h */
+ #ifdef hpux
+ #define BSDTTY
+ #endif 
+ 
  /* Define JOB_CONTROL if your operating system supports
     BSD-like job control. */
  #define JOB_CONTROL
  
  /* Note that System V machines don't support job control. */
! #if defined (SYSV) && !defined (HPUX)
  #undef JOB_CONTROL
! #endif /* SYSV && !HPUX */
  
+ /* Define RUSAGE if your system has a wait3() that knows about rusage */
+ #if defined (Bsd)
+ #define RUSAGE
+ #endif 
+ 
  /* Define ALIAS if you want the alias features. */
  #define ALIAS
  
***************
*** 66,72 ****
  
  /* Define NO_WAIT_H if your system doesn't seem to have sys/wait.h.
     This is true for HPUX and ALTOS. */
! #if defined (HPUX) || defined (ALTOS)
  #define NO_WAIT_H
  #endif
  
--- 86,92 ----
  
  /* Define NO_WAIT_H if your system doesn't seem to have sys/wait.h.
     This is true for HPUX and ALTOS. */
! #if defined (ALTOS) /* ||  defined (HPUX) hpux does have it. */
  #define NO_WAIT_H
  #endif
  
*** jobs.c.orig	Sun Nov  5 05:54:16 1989
--- jobs.c	Wed Nov 15 15:38:38 1989
***************
*** 28,41 ****
--- 28,59 ----
  #include <signal.h>
  #include <errno.h>
  #include <sys/time.h>
+ #include <sys/types.h>
+ #ifdef RUSAGE
  #include <sys/resource.h>
+ #endif 
  #include <sys/file.h>
  #include <sys/ioctl.h>
  #include <sys/param.h>
+ #ifdef TERMIO
+ #include <termio.h>
+ #ifdef BSDTTY
+ #include <bsdtty.h>
+ #endif 
+ #else
  #include <sgtty.h>
+ #endif 
  #include "shell.h"
  #include "jobs.h"
  
+ #ifdef TERMIO
+ /* SYSV names for BSD ioctl things */
+ #define sgttyb termio
+ #define TIOCGETP TCGETA
+ #define TIOCSETP TCSETA
+ #define TIOCSETN TCSETA
+ #endif 
+ 
  /* Not all systems define errno in errno.h. */
  extern int errno;
  
***************
*** 1185,1203 ****
       int sig, code;
  {
    union wait status;
    struct rusage rusage;
    PROCESS *child;
    int pid;
  
    do
      {
        pid = wait3 (&status, (WNOHANG | WUNTRACED), &rusage);
! 
        if (pid > 0)
  	{
  	  /* Keep track of total time used. */
  	  if (! WIFSTOPPED (status))
  	    add_times (&rusage);
  
  	  /* Locate our PROCESS for this pid. */
  	  child = find_pipeline (pid);
--- 1203,1229 ----
       int sig, code;
  {
    union wait status;
+ #ifdef RUSAGE
    struct rusage rusage;
+ #endif 
    PROCESS *child;
    int pid;
  
    do
      {
+ #ifdef RUSAGE
        pid = wait3 (&status, (WNOHANG | WUNTRACED), &rusage);
! #else
!       /* hpux has wait3() but not rusage; what do other systems do? */
!       pid = wait3 (&status, (WNOHANG | WUNTRACED), NULL);
! #endif       
        if (pid > 0)
  	{
  	  /* Keep track of total time used. */
+ #ifdef RUSAGE	  
  	  if (! WIFSTOPPED (status))
  	    add_times (&rusage);
+ #endif 
  
  	  /* Locate our PROCESS for this pid. */
  	  child = find_pipeline (pid);
***************
*** 1332,1337 ****
--- 1358,1366 ----
    sigsetmask (oldmask);
  }
  
+ #ifdef RUSAGE
+ /* If we don't have rusage, we can't gather these statistics this way.  
+    Do we need them? */
  add_times (rused)
       struct rusage *rused;
  {
***************
*** 1356,1361 ****
--- 1385,1391 ----
      user_seconds_used = (total_usertime.tv_sec % 60);
    }
  }
+ #endif 
  
  /* Initialize the job control mechanism, and set up the tty stuff. */
  initialize_jobs ()
***************
*** 1387,1393 ****
  
        /* Find the highest unused file descriptor we can. */
        {
! 	int ignore, nds = getdtablesize ();
  	
  	while (--nds > 3)
  	  {
--- 1417,1428 ----
  
        /* Find the highest unused file descriptor we can. */
        {
! 	int ignore;
! #ifdef _NFILE
! 	int nds = _NFILE;
! #else	
! 	int nds = getdtablesize ();
! #endif 	
  	
  	while (--nds > 3)
  	  {
***************
*** 1417,1422 ****
--- 1452,1458 ----
  	  break;
  	}
  
+ #ifdef TIOCGETD /* what we don't know, can't hurt */
        if (ioctl (shell_tty, TIOCGETD, &ldisc) < 0)
  	goto bad_ioctl;
  
***************
*** 1432,1437 ****
--- 1468,1474 ----
  	      file_error ("jobs.c");
  	    }
  	}
+ #endif 
  
        original_pgrp = shell_pgrp;
        shell_pgrp = getpid ();
***************
*** 1438,1445 ****
--- 1475,1485 ----
        give_terminal_to (shell_pgrp);
        setpgrp (0, shell_pgrp);
  
+ #ifdef FIOCLEX
+       /* sorry, I don't know the hpux/sysv equivalent. */
        if (shell_tty != fileno (stdin))
  	ioctl (shell_tty, FIOCLEX, 0);
+ #endif 
  
        job_control = 1;
      }
*** jobs.h.orig	Mon Aug 21 14:29:49 1989
--- jobs.h	Fri Nov 10 14:49:11 1989
***************
*** 2,8 ****
  
  #include "quit.h"
  
! #if !defined (SYSV) || defined (UNIXPC)
  #include <sys/wait.h>
  #else
  
--- 2,8 ----
  
  #include "quit.h"
  
! #ifndef NO_WAIT_H
  #include <sys/wait.h>
  #else
  
*** shell.c.orig	Wed Nov  8 10:56:45 1989
--- shell.c	Wed Nov  8 10:57:48 1989
***************
*** 669,675 ****
--- 669,679 ----
  {
  
    /* Line buffer output for stderr. */
+ #ifdef Bsd
+   setlinebuf (stderr);
+ #else  
    setvbuf (stderr, (char *)NULL, _IOLBF, BUFSIZ);
+ #endif
  
    /* The initialization of the basic underlying signal handlers must
       happen before we initialize_traps ().  */
*** siglist.c.orig	Thu Jul 27 01:02:05 1989
--- siglist.c	Wed Nov 15 16:33:13 1989
***************
*** 19,24 ****
--- 19,25 ----
  Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
  
  char *sys_siglist[] = {
+ #ifndef HPUX
    "bogus signal",			/* 0 */
    "hangup",				/* 1  SIGHUP */
    "interrupt",				/* 2  SIGINT */
***************
*** 43,47 ****
    "profiling timer alarm",		/* 21 SIGPROF */
    "asynchronous I/O",			/* 22 SIGIO */
    "window change or mouse signal",	/* 23 SIGWINDOW */
    (char *)0x0
! };
--- 44,81 ----
    "profiling timer alarm",		/* 21 SIGPROF */
    "asynchronous I/O",			/* 22 SIGIO */
    "window change or mouse signal",	/* 23 SIGWINDOW */
+ #else HPUX
+   "Signal 0", /* 0 */
+   "Hangup", /* 1 */
+   "Interrupt", /* 2 */
+   "Quit", /* 3 */
+   "Illegal instruction", /* 4 */
+   "Trace/BPT trap", /* 5 */
+   "IOT trap", /* 6 */
+   "EMT trap", /* 7 */
+   "Floating point exception", /* 8 */
+   "Killed", /* 9 */
+   "Bus error", /* 10 */
+   "Segmentation fault", /* 11 */
+   "Bad system call", /* 12 */
+   "Broken pipe", /* 13 */
+   "Alarm clock", /* 14 */
+   "Terminated", /* 15 */
+   "User defined signal 1", /* 16 */
+   "User defined signal 2", /* 17 */
+   "Child exited", /* 18 */
+   "Power failure restart", /* 19 */
+   "Virtual timer expired", /* 20 */
+   "Profiling timer expired", /* 21 */
+   "I/O possible", /* 22 */
+   "Window changed", /* 23 */
+   "Stopped (signal)", /* 24 */
+   "Stopped", /* 25 */
+   "Continued", /* 26 */
+   "Stopped (tty input)", /* 27 */
+   "Stopped (tty output)", /* 28 */
+   "Urgent I/O condition", /* 29 */
+ #endif 
    (char *)0x0
!   };
! 
*** trap.c.orig	Sun Aug  6 03:27:10 1989
--- trap.c	Wed Nov 15 16:37:55 1989
***************
*** 60,65 ****
--- 60,77 ----
     "SIGUSR2",
     "SIGCLD",
     "SIGPWR",
+ #ifdef HPUX
+    "SIGVTALRM",
+    "SIGPROF",
+    "SIGIO",
+    "SIGWINDOW",
+    "SIGSTOP",
+    "SIGTSTP",
+    "SIGCONT",
+    "SIGTTIN",
+    "SIGTTOU",
+    "SIGURG"
+ #endif
  #if NSIG == 23
     "SIGJUNK1",
     "SIGJUNK2",
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads