|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 3377 (0xd31) Types: TextFile Names: »main.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec8/sps/main.c«
# include "sps.h" # include "flags.h" # include <h/text.h> # include <sys/stat.h> # include <stdio.h> /* SPS - Show Process Status */ /* J. R. Ward - Hasler AG Bern, CH - 24 May 1985 */ /* 26 Nov 1986 */ main ( argc,argv ) int argc ; char **argv ; { register struct process *plist ; register struct process *process ; register struct text *text ; int flinfo ; char *fileinfo, *filesymbol ; struct stat sinfo, ssymbol, spasswd ; extern struct flags Flg ; extern struct info Info ; extern int Flmem ; extern int Flkmem ; extern int Flswap ; char *getcore() ; struct process *needed(), *mktree() ; /* Renice as fast as possible for root only (Suggested by Jeff Mogul, gregorio!mogul) */ if ( !getuid() ) (void)nice( -40 ) ; /* Decode the flag arguments */ flagdecode( argc, argv ) ; /* Determine the terminal width */ if ( !Flg.flg_w && !Flg.flg_N && !Flg.flg_i ) termwidth() ; /* Open the cpu physical memory, kernel virtual memory and swap device*/ if ( Flg.flg_k ) { Flmem = openfile( Flg.flg_k ) ; Flkmem = Flmem ; } else { Flmem = openfile( FILE_MEM ) ; Flkmem = openfile( FILE_KMEM ) ; if ( !Flg.flg_o ) Flswap = openfile( FILE_SWAP ) ; } if ( Flg.flg_i ) { /* -i flag for info file initialisation */ initialise() ; exit( 0 ) ; } /* Check that the information file is newer than the symbol and password files, suggested by gregorio!mogul */ fileinfo = Flg.flg_j ? Flg.flg_j : FILE_INFO ; filesymbol = Flg.flg_s ? Flg.flg_s : FILE_SYMBOL ; flinfo = openfile( fileinfo ) ; (void)fstat( flinfo, &sinfo ) ; if ( !stat( filesymbol, &ssymbol ) && sinfo.st_mtime < ssymbol.st_mtime ) fprintf( stderr, "sps - WARNING: Info file `%s' is older than symbol file `%s'\n", fileinfo, filesymbol ) ; if ( !stat( FILE_PASSWD, &spasswd ) && sinfo.st_mtime < spasswd.st_mtime ) fprintf( stderr, "sps - WARNING: Info file `%s' is older than passwd file `%s'\n", fileinfo, FILE_PASSWD ) ; /* Read the information file */ if ( read( flinfo, (char*)&Info, sizeof( struct info ) ) != sizeof( struct info ) ) { fprintf( stderr, "sps - Can't read info file `%s'", fileinfo ) ; sysperror() ; } (void)close( flinfo ) ; /* Find current tty status */ ttystatus() ; /* Now that we know the available ttys, decode the flags */ flagsetup() ; process = (struct process*)getcore(Info.i_nproc*sizeof(struct process)); text = (struct text*)getcore( Info.i_ntext * sizeof( struct text ) ) ; do { /* Read current process and text status */ readstatus( process, text ) ; /* Select those processes to be listed */ plist = needed( process, text ) ; /* Form a tree of listed processes */ plist = mktree( process, plist ) ; if ( !Flg.flg_N ) { /* Print the processes */ prheader() ; printall( plist, 0 ) ; } prsummary() ; (void)fflush( stdout ) ; if ( Flg.flg_r ) { /* If repeating, again get tty status */ ttystatus() ; if ( Flg.flg_rdelay ) # ifdef BSD42 sleep( Flg.flg_rdelay ) ; # else sleep( (int)Flg.flg_rdelay ) ; # endif } } while ( Flg.flg_r ) ; exit( 0 ) ; }