[3069] in Athena Bugs

home help back first fref pref prev next nref lref last post

Re: machtype

daemon@ATHENA.MIT.EDU (John Carr)
Fri Sep 1 20:56:35 1989

To: bugs@ATHENA.MIT.EDU
Cc: geer@ATHENA.MIT.EDU
In-Reply-To: [2746]
Date: Fri, 01 Sep 89 20:56:01 EDT
From: John Carr <jfc@ATHENA.MIT.EDU>

Here are patches to machtype to print out memory size.  I've tested
this on RT, VAX, and pmax.  Since the '-m' flag was taken, I made
machtype use '-M' instead for this option.

Sample output:
 3100:	0x667400 user, 0x7E3000 (8 M) total
 uVII:	0x3C4400 user, 0x4FF000 (5 M) total
 rt:	0x629800 user, 0x800000 (8 M) total

*** /minos/source/4.3/bin.athena/machtype.c	Sat Aug  5 20:38:56 1989
--- machtype.c	Fri Sep  1 20:21:03 1989
***************
*** 10,15 ****
--- 10,16 ----
  #include <nlist.h>
  #include <sys/types.h>
  #include <machine/cpu.h>
+ #include <machine/machparam.h>
  #include <ctype.h>
  
  #if defined(ibm032)
***************
*** 41,46 ****
--- 42,51 ----
  	{ "_udadinfo"},
  #define X_udatypes 9
  	{ "_udatypes"},
+ #define X_maxmem 10
+ 	{ "_maxmem" },
+ #define X_physmem 11
+ 	{ "_physmem" },
  #else
  #if defined(ibm032)
  #define X_cpu_model 0
***************
*** 51,56 ****
--- 56,65 ----
  	{ "_screen_sw" },
  #define X_NSCREEN 3
  	{ "_NSCREEN" },
+ #define X_maxmem 4
+ 	{ "_maxmem" },
+ #define X_physmem 5
+ 	{ "_physmem" },
  #endif
  #endif
  	{ "" },
***************
*** 62,68 ****
  char	**argv;
  {
      int i;
!     int cpuflg = 0, dpyflg = 0, raflg = 0;
      char *kernel = KERNEL,  *memory = MEMORY;
  
      for (i = 1; i < argc; i++) {
--- 71,77 ----
  char	**argv;
  {
      int i;
!     int cpuflg = 0, dpyflg = 0, raflg = 0, memflg = 0;
      char *kernel = KERNEL,  *memory = MEMORY;
  
      for (i = 1; i < argc; i++) {
***************
*** 79,84 ****
--- 88,96 ----
  	case 'r':
  	    raflg++;
  	    break;
+ 	case 'M':
+ 	    memflg++;
+ 	    break;
  	case 'k':
  	    kernel = argv[i+1];
  	    i++;
***************
*** 98,103 ****
--- 110,117 ----
        do_dpy(kernel, memory);
      else if (raflg)
        do_disk(kernel, memory);
+     else if (memflg)
+       do_memory(kernel, memory);
      else
  #if defined(vax)
        printf("vax\n");
***************
*** 406,408 ****
--- 420,464 ----
  }
  
  #endif
+ 
+ #define MEG (1024*1024)
+ do_memory (kernel, memory)
+ char *kernel, *memory;
+ 
+ {
+   int mf, pos, mem;
+   if (nlist(kernel, nl) < 0) {
+     fprintf(stderr, "can't get namelist\n");
+     exit(1);
+   }
+   if ((mf = open(memory, 0)) < 0) {
+     fprintf(stderr, "can't open memory\n");
+     exit(2);
+   }
+   pos = nl[X_maxmem].n_value;
+   if(pos == 0) {
+     fprintf(stderr, "can't find maxmem\n");
+     exit(3);
+   }
+   lseek(mf,pos,0);	/* Error checking ? */
+   if(read(mf,&mem,4) == -1) {
+     perror("read (kmem)");
+     exit(4);
+   } else {
+     printf("0x%06X user, ",mem * NBPG);
+   }
+   pos = nl[X_physmem].n_value;
+   if(pos == 0) {
+     fprintf(stderr, "can't find physmem\n");
+     exit(3);
+   }
+   lseek(mf,pos,0);
+   if(read(mf,&mem,4) == -1) {
+     perror("read (kmem)");
+     exit(4);
+   } else {
+     printf("0x%06X (%d M) total",mem * NBPG,(mem * NBPG + MEG/2)/MEG);
+   }
+   putchar('\n');
+   return; 
+ }

home help back first fref pref prev next nref lref last post