home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume3 / sps / part2 / selectproc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1986-11-30  |  1.5 KB  |  65 lines

  1. # include       "sps.h"
  2. # include       "flags.h"
  3.  
  4. /*
  5. ** SELECTPROC - Given a process structure, this procedure decides whether
  6. ** the process is a candidate for printing.
  7. */
  8. selectproc ( p, process, thisuid )
  9.  
  10. register struct process         *p ;            
  11. register struct process         *process ;      
  12. int                             thisuid ;       
  13.  
  14. {
  15.     register union flaglist *fp ;
  16.     register struct process *pp ;
  17.     extern struct flags     Flg ;
  18.  
  19.     /* Flg.flg_AZ is an internal flag set if one of flags `A' to `Z'
  20.        was specified. If this is not set, a process is listed only
  21.        if it or one of its ancestors belongs to the invoking user. */
  22.     if ( !Flg.flg_AZ )
  23.         for ( pp = p ; pp > &process[1] ; pp = pp->pr_pptr )
  24.             if ( thisuid == pp->pr_p.p_uid )
  25.                 return ( 1 ) ;
  26.     if ( Flg.flg_A )
  27.         return ( 1 ) ;
  28.     if ( Flg.flg_P )
  29.         for ( fp = Flg.flg_Plist ; fp->f_pid >= 0 ; fp++ )
  30.             if ( fp->f_pid == p->pr_p.p_pid )
  31.                 return ( 1 ) ;
  32.     if ( Flg.flg_U )
  33.         for ( pp = p ; pp > &process[1] ; pp = pp->pr_pptr )
  34.             for ( fp = Flg.flg_Ulist ; fp->f_uid >= 0 ; fp++ )
  35.                 if ( fp->f_uid == pp->pr_p.p_uid )
  36.                     return ( 1 ) ;
  37.     switch ( p->pr_p.p_stat )
  38.     {
  39.         case SRUN :
  40.             if ( Flg.flg_B )
  41.                 return ( 1 ) ;
  42.             break ;
  43.         case SSLEEP :
  44.             if ( Flg.flg_B
  45.             &&   p->pr_p.p_pri < PZERO && p->pr_p.p_pid > MSPID )
  46.                 return ( 1 ) ;
  47.         case SWAIT :
  48.         case SIDL :
  49.             if ( Flg.flg_W )
  50.                 return ( 1 ) ;
  51.             break ;
  52.         case SSTOP :
  53.             if ( Flg.flg_S )
  54.                 return ( 1 ) ;
  55.             break ;
  56.         case SZOMB :
  57.             if ( Flg.flg_Z )
  58.                 return ( 1 ) ;
  59.             break ;
  60.         default :
  61.             break ;
  62.     }
  63.     return ( 0 ) ;
  64. }
  65.