home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Mint / mntlib25.zoo / wait.c < prev    next >
C/C++ Source or Header  |  1992-09-05  |  711b  |  38 lines

  1. /*
  2.  * wait.c: a version of wait() for MiNT
  3.  */
  4.  
  5. #include <errno.h>
  6. #include <osbind.h>
  7. #include "mintbind.h"
  8.  
  9. /* under TOS, vfork() puts its result in __waitval */
  10. extern long __waitval;    /* in thread.c */
  11.  
  12. int wait(status)
  13.     int *status;
  14. {
  15.     long r;
  16.     int exit_status, sig_term, pid;
  17.     extern int __mint;
  18.  
  19.     if (__mint == 0) {    /* wait is faked by vfork() */
  20.         r = __waitval;
  21.         __waitval = -ENOENT;
  22.     }
  23.     else
  24.         r = Pwait3(0, 0L);
  25.  
  26.     if (r < 0) {
  27.         errno = (int) -r;
  28.         return -1;
  29.     }
  30.     pid = (int) ((r & 0xffff0000L) >> 16);
  31.     exit_status = (int) (r & 0x000000ffL);
  32.     sig_term = (int) ((r & 0x00007f00L) >> 8);
  33.     if (status) {
  34.         *status = (exit_status << 8) | sig_term;
  35.     }
  36.     return pid;
  37. }
  38.