home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / sps3 / part02 / ttystatus.c < prev   
C/C++ Source or Header  |  1992-05-08  |  4KB  |  176 lines

  1. # ifndef lint
  2. static char SccsId[] =  "@(#)ttystatus.c    1.1\t10/1/88" ;
  3. # endif
  4.  
  5. # include       "sps.h"
  6. # include       "flags.h"
  7. # include       <stdio.h>
  8. # include       <h/ioctl.h>
  9. # ifdef SUNOS40
  10. # include       <h/stream.h>
  11. # else
  12. # include       <h/tty.h>
  13. # endif
  14. # ifdef CHAOS
  15. # include       <chunix/chsys.h>
  16. # include       <chaos/chaos.h>
  17. # endif
  18.  
  19. /*
  20. ** TTYSTATUS - Reads the kernel memory for tty structures of active processes.
  21. ** The addresses of the associated struct ttys of /dev/kmem are kept in the
  22. ** info structure. Here we use those addresses to access the structures.
  23. ** Actually, we are mostly interested just in the process group of each tty.
  24. */
  25. ttystatus ()
  26. {
  27.     register struct ttyline *lp ;
  28. # ifdef SUNOS40
  29.     struct stdata           *stdata ;
  30.     extern struct stdata    *getstdata() ;
  31. # else
  32.     struct tty              tty ;
  33. # endif
  34.     extern struct flags     Flg ;
  35.     extern struct info      Info ;
  36. # ifndef KVM
  37.     extern int              Flkmem ;
  38. # endif
  39.  
  40. # ifdef SUNOS40
  41.     if ( !init_streams_tab() )
  42.         fprintf( stderr, "can't read streams table\n" ) ;
  43. # endif
  44.  
  45.     if ( Flg.flg_y )
  46. # ifdef SUNOS40
  47.         printf( "Ty   Dev       Addr  Pgrp\n" ) ;
  48. # else
  49.         printf( "Ty   Dev       Addr Rawq Canq Outq  Pgrp\n" ) ;
  50. # endif
  51.     lp = Info.i_ttyline ;
  52. # ifdef CHAOS
  53.     while ( lp->l_name[0] && lp->l_name[0] != 'C' )
  54. # else
  55.     while ( lp->l_name[0] )
  56. # endif
  57.     {
  58. # ifdef SUNOS40 
  59.         if ( stdata = getstdata ( lp->l_addr, lp->l_dev ) )
  60.         {
  61.             lp->l_stdata = stdata ;
  62.             lp->l_pgrp = stdata->sd_pgrp ;
  63.             prstr( lp, stdata ) ;
  64.         }
  65.         else
  66.             lp->l_pgrp = 0 ;
  67.         lp++ ;
  68. # else
  69.         if ( getkmem( (long)lp->l_addr, (char*)&tty, sizeof( tty ) )
  70.         != sizeof( struct tty ) )
  71.         {
  72.             fprintf( stderr,
  73.                 "sps - Can't read struct tty for tty%.2s\n",
  74.                 lp->l_name ) ;
  75.             lp->l_pgrp = 0 ;
  76.             lp++ ;
  77.             continue ;
  78.         }
  79.         lp->l_pgrp = tty.t_pgrp ;
  80.         prtty( lp, &tty ) ;
  81.         lp++ ;
  82. # endif
  83.     }
  84. # ifdef CHAOS
  85.     chaosttys( lp ) ;               
  86. # endif
  87. }
  88.  
  89. # ifdef SUNOS40
  90.  
  91. /* PRSTR - Print out the stdata structure */
  92. prstr ( lp, stdata )
  93.  
  94. register struct ttyline         *lp ;
  95. register struct stdata          *stdata ;
  96.  
  97. {
  98.     extern struct flags     Flg ;
  99.  
  100.     if ( !Flg.flg_y )
  101.         return ;
  102.     printf( "%-2.2s %2d,%2d 0x%08x %5d\n",
  103.         lp->l_name,
  104.         major( lp->l_dev ),
  105.         minor( lp->l_dev ),
  106.         lp->l_addr,
  107.         stdata->sd_pgrp ) ;
  108. }
  109.  
  110. # else
  111.  
  112. /* PRTTY - Print out the tty structure */
  113. prtty ( lp, tty )
  114.  
  115. register struct ttyline         *lp ;
  116. register struct tty             *tty ;
  117.  
  118. {
  119.     extern struct flags     Flg ;
  120.  
  121.     if ( !Flg.flg_y )
  122.         return ;
  123.     printf( "%-2.2s %2d,%2d 0x%08x %4d %4d %4d %5d\n",
  124.         lp->l_name,
  125.         major( lp->l_dev ),
  126.         minor( lp->l_dev ),
  127.         lp->l_addr,
  128.         tty->t_rawq.c_cc,
  129.         tty->t_canq.c_cc,
  130.         tty->t_outq.c_cc,
  131.         tty->t_pgrp ) ;
  132. }
  133.  
  134. # endif
  135.  
  136. # ifdef CHAOS
  137.  
  138. /* CHAOSTTYS - Finds ttys attached to the Chaos net */
  139. chaosttys ( lp )
  140.  
  141. register struct ttyline         *lp ;
  142.  
  143. {
  144.     register struct connection      **cnp ;
  145.     register int                    i ;
  146.     struct tty                      tty ;
  147.     struct connection               *conntab[CHNCONNS] ;
  148.     struct connection               conn ;
  149.     extern struct info              Info ;
  150.     extern int                      Flkmem ;
  151.  
  152.     (void)getkmem( (long)Info.i_Chconntab, (char*)conntab,
  153.         sizeof( conntab ) ) ;
  154.     for ( i = 0, cnp = conntab ; cnp < &conntab[CHNCONNS] ; i++, cnp++ )
  155.     {
  156.         if ( !*cnp )
  157.             continue ;
  158.         (void)getkmem( (long)*cnp, (char*)&conn, sizeof( conn ) ) ;
  159.         if ( !(conn.cn_flags & CHTTY) )
  160.             continue ;
  161.         (void)getkmem( (long)conn.cn_ttyp, (char*)&tty, sizeof( tty ) ) ;
  162.         if ( lp >= &Info.i_ttyline[MAXTTYS] )
  163.             prexit( "sps - Too many chaos ttys\n" ) ;
  164.         lp->l_addr = conn.cn_ttyp ;
  165.         lp->l_pgrp = tty.t_pgrp ;
  166.         lp->l_dev = tty.t_dev ;
  167.         lp->l_name[0] = 'C' ;
  168.         lp->l_name[1] = i < 10 ? '0'+i : i-10 <= 'z'-'a' ? i-10+'a' :
  169.                 i-10-('z'-'a')+'A' ;
  170.         prtty( lp, &tty ) ;
  171.         lp++ ;
  172.     }
  173. }
  174.  
  175. # endif
  176.