From: mf@ircam.fr (Michel Fingerhut) Newsgroups: alt.sources Subject: Unofficial patches to sps for DEC/MIPS + Ultrix 4.x Message-ID: <1990Nov25.230124.1828@ircam.fr> Date: 25 Nov 90 23:01:24 GMT Here are the patches. Thanks to Alan Rollow from Dec for his tip. ------------------------------------------------------------------------------------ diff -c /old/sps/Makefile.dec3100 sps/Makefile.dec3100 *** /old/sps/Makefile.dec3100 Sun Nov 25 23:52:57 1990 --- sps/Makefile.dec3100 Sun Nov 25 23:42:34 1990 *************** *** 9,17 **** selectproc.o selecttty.o termwidth.o ttystatus.o waitingfor.o INCS = sps.h CC = cc ! CFLAGS = -DBSD42 -DULTRIX20 -DULTRIX30 -DVPRINTF -DDEC3100 -I/sys LIBS = -ltermlib ! DIRINSTALL = /bin all: $(PROG) .c.o: --- 9,18 ---- selectproc.o selecttty.o termwidth.o ttystatus.o waitingfor.o INCS = sps.h CC = cc ! CFLAGS = -DBSD42 -DULTRIX20 -DULTRIX30 -DULTRIX40 -DVPRINTF -DDEC3100 -I/sys LIBS = -ltermlib ! DIRINSTALL = /usr/local/bin ! DIRMAN = /usr/local/man/man1 all: $(PROG) .c.o: *************** *** 26,36 **** $(CC) -o $@ $(OBJS) $(LIBS) install: $(PROG) ! strip $(PROG) ! mv $(PROG) $(DIRINSTALL)/$(PROG) ! /etc/chown root $(DIRINSTALL)/$(PROG) ! chgrp kmem $(DIRINSTALL)/$(PROG) ! chmod 2755 $(DIRINSTALL)/$(PROG) lint: lint -x -b $(CFLAGS) *.c --- 27,34 ---- $(CC) -o $@ $(OBJS) $(LIBS) install: $(PROG) ! install -s -c -o root -g kmem -m 2755 $(PROG) $(DIRINSTALL)/$(PROG) ! install -c -o root -g wheel -m 644 sps.l $(DIRMAN)/sps.1 lint: lint -x -b $(CFLAGS) *.c Common subdirectories: /old/sps/SCCS and sps/SCCS diff -c /old/sps/getcmd.c sps/getcmd.c *** /old/sps/getcmd.c Sun Nov 25 23:52:56 1990 --- sps/getcmd.c Wed Nov 21 18:31:52 1990 *************** *** 54,60 **** --- 54,64 ---- p->pr_upag = 0 ; if ( p->pr_p.p_stat == SZOMB ) return ( "** Exit **" ) ; + # ifdef ULTRIX40 + if ( !(p->pr_p.p_sched & SLOAD) && Flg.flg_o ) + # else if ( !(p->pr_p.p_flag & SLOAD) && Flg.flg_o ) + # endif return ( "** Swapped out **" ) ; /* Find the process' upage */ # ifdef KVM *************** *** 65,71 **** --- 69,79 ---- return ( "** No upage **" ) ; p->pr_upag = 1 ; /* Is this a system process ? */ + # ifdef ULTRIX40 + if ( p->pr_p.p_type & SSYS ) + # else if ( p->pr_p.p_flag & SSYS ) + # endif switch ( p->pr_p.p_pid ) { case 0 : *************** *** 142,148 **** --- 150,160 ---- /* Look at the top of the upage to locate the command arguments. The page is loaded if the process itself is loaded and the pte contains is marked as valid. */ + # ifdef ULTRIX40 + if ( (p->pr_p.p_sched & SLOAD) + # else if ( (p->pr_p.p_flag & SLOAD) + # endif && !ptetbl[0].pg_fod && ptetbl[0].pg_pfnum ) { /* If the page is loaded, read the arguments from physical memory. */ *************** *** 152,158 **** --- 164,174 ---- } else { /* Otherwise the page is on the swap device */ + # ifdef ULTRIX40 + vstodb( 0, ctod( CLSIZE ), &User.u_us.u_procp->p_smap, &db, 1) ; + # else vstodb( 0, ctod( CLSIZE ), &User.u_us.u_smap, &db, 1 ) ; + # endif # ifdef BSD42 swseek( (long)dtob( db.db_base ) ) ; # else diff -c /old/sps/getupage.c sps/getupage.c *** /old/sps/getupage.c Sun Nov 25 23:52:57 1990 --- sps/getupage.c Sun Nov 25 21:04:36 1990 *************** *** 40,52 **** --- 40,67 ---- extern int Flmem, Flkmem, Flswap ; /* If the process is not loaded, look for the upage on the swap device*/ + # ifdef ULTRIX40 + if ( !(p->pr_p.p_sched & SLOAD) ) + # else if ( !(p->pr_p.p_flag & SLOAD) ) + # endif { + # ifdef ULTRIX40 + struct dmap l_dmap; + int ublkno; + + memseek( Flkmem, (long)p->pr_p.p_smap ); + read( Flkmem, (char*)&l_dmap, sizeof( struct dmap )); + memseek( Flkmem, l_dmap.dm_ptdaddr ); + read( Flkmem, (char *)&ublkno, sizeof(int)); + swseek( (long)dtob(ublkno) ); + # else ULTRIX40 # ifdef BSD42 swseek( (long)dtob( p->pr_p.p_swaddr ) ) ; # else BSD42 swseek( (long)ctob( p->pr_p.p_swaddr ) ) ; # endif BSD42 + # endif ULTRIX40 # ifdef SUN if ( read( Flswap, (char*)&User.u_us, sizeof( union userstate )) != sizeof( union userstate ) ) diff -c /old/sps/needed.c sps/needed.c *** /old/sps/needed.c Sun Nov 25 23:52:57 1990 --- sps/needed.c Sun Nov 25 23:38:17 1990 *************** *** 78,84 **** --- 78,89 ---- uid = getuid() ; for ( p = process ; p < lastp ; p++ ) { + # ifdef ULTRIX40 + if ( !p->pr_p.p_stat + || p->pr_p.p_pid==0 && p->pr_p.p_stat == SIDL) + # else if ( !p->pr_p.p_stat ) + # endif continue ; /* Count processes and sizes */ summarise( p ) ; *************** *** 150,156 **** --- 155,165 ---- # endif Summary.sm_kloaded += p->pr_p.p_rssize ; Summary.sm_kswapped += p->pr_p.p_swrss ; + # ifdef ULTRIX40 + if ( p->pr_p.p_sched & SLOAD ) + # else if ( p->pr_p.p_flag & SLOAD ) + # endif Summary.sm_nloaded++ ; else Summary.sm_nswapped++ ; diff -c /old/sps/percentmem.c sps/percentmem.c *** /old/sps/percentmem.c Sun Nov 25 23:52:57 1990 --- sps/percentmem.c Thu Nov 22 08:31:59 1990 *************** *** 34,40 **** --- 34,44 ---- fracmem = ( (double)p->pr_p.p_rssize + szptudot ) ; # else tp = p->pr_p.p_textp ; + # ifdef ULTRIX40 + if ( !(p->pr_p.p_sched & SLOAD) || !tp ) + # else if ( !(p->pr_p.p_flag & SLOAD) || !tp ) + # endif return ( 0.0 ) ; szptudot = UPAGES + clrnd( ctopt( p->pr_p.p_dsize + p->pr_p.p_ssize ) ); fracmem = ( (double)p->pr_p.p_rssize + szptudot ) / CLSIZE ; diff -c /old/sps/printproc.c sps/printproc.c *** /old/sps/printproc.c Sun Nov 25 23:52:57 1990 --- sps/printproc.c Thu Nov 22 08:38:06 1990 *************** *** 138,146 **** --- 138,158 ---- break ; } /* If the process is loaded, list the status information in capitals */ + # ifdef ULTRIX40 + printf( "%-6.6s ", p->pr_p.p_sched & SLOAD ? + # else printf( "%-6.6s ", p->pr_p.p_flag & SLOAD ? + # endif (capitals( chp, chbuf ), chbuf) : chp ) ; /* List process flags */ + # ifdef ULTRIX40 + printf( "%c%c%c", p->pr_p.p_type & SSYS ? 'U' : + p->pr_p.p_trace & STRC ? 'T' : ' ', + p->pr_p.p_vm & SVFORK ? 'V' : + p->pr_p.p_vm & SPHYSIO ? 'I' : ' ', + p->pr_p.p_vm & SUANOM ? 'A' : + p->pr_p.p_vm & SSEQL ? 'S' : ' ' ) ; + # else printf( "%c%c%c", p->pr_p.p_flag & SSYS ? 'U' : p->pr_p.p_flag & STRC ? 'T' : ' ', p->pr_p.p_flag & SVFORK ? 'V' : *************** *** 147,152 **** --- 159,165 ---- p->pr_p.p_flag & SPHYSIO ? 'I' : ' ', p->pr_p.p_flag & SUANOM ? 'A' : p->pr_p.p_flag & SSEQL ? 'S' : ' ' ) ; + # endif /* List process niceness */ if ( p->pr_p.p_nice != NZERO ) printf( "%3d ", p->pr_p.p_nice - NZERO ) ; diff -c /old/sps/waitingfor.c sps/waitingfor.c *** /old/sps/waitingfor.c Sun Nov 25 23:52:57 1990 --- sps/waitingfor.c Thu Nov 22 08:41:47 1990 *************** *** 79,85 **** --- 79,89 ---- return ( "null" ) ; /* Waiting for a child process, alternatively in a vfork() ? */ if ( INRANGE( w, Info.i_proc0, &Info.i_proc0[ Info.i_nproc ] ) ) + # ifdef ULTRIX40 + return ( p->pr_p.p_vm & SNOVM ? "vfork" : "child" ) ; + # else return ( p->pr_p.p_flag & SNOVM ? "vfork" : "child" ) ; + # endif # ifndef SUNOS40 /* Waiting for a page to be brought in ? */ if ( INRANGE( w, Info.i_swbuf0, &Info.i_swbuf0[ Info.i_nswbuf ] ) ) -- Michael Fingerhut email: mf@ircam.fr voice: +33 1 42770105 IRCAM, 31 rue St Merri, 75004 Paris, France fax: +33 1 42772947