[PATCH] show memory 2nd attempt

From: Christian Loth (sg618lo@UNIDUI.UNI-DUISBURG.DE)
Date: 07/08/98


Greetings,

  How's this? (patch against pl14)

- Chris

diff -uN src.orig/act.wizard.c src/act.wizard.c
--- src.orig/act.wizard.c       Mon Jun  8 22:43:33 1998
+++ src/act.wizard.c    Mon Jun  8 23:37:17 1998
@@ -57,6 +57,7 @@
 void reset_zone(int zone);
 void roll_real_abils(struct char_data *ch);
 int parse_class(char arg);
+void show_memory(struct char_data *ch);

 /* local functions */
 int perform_set(struct char_data *ch, struct char_data *vict, int mode,
char *val_arg);
@@ -1926,6 +1927,7 @@
     { "godrooms",      LVL_GOD },
     { "shops",         LVL_IMMORT },
     { "houses",                LVL_GOD },
+    { "memory",        LVL_IMPL },
     { "\n", 0 }
   };

@@ -2062,6 +2064,9 @@
     break;
   case 9:
     hcontrol_list_houses(ch);
+    break;
+  case 10:
+    show_memory(ch);
     break;
   default:
     send_to_char("Sorry, I don't understand that.\r\n", ch);
diff -uN src.orig/comm.c src/comm.c
--- src.orig/comm.c     Mon Jun  8 22:43:33 1998
+++ src/comm.c  Mon Jun  8 23:41:06 1998
@@ -140,6 +140,7 @@
 #if defined(POSIX)
 sigfunc *my_signal(int signo, sigfunc * func);
 #endif
+void show_memory(struct char_data *ch);

 /* extern fcnts */
 void reboot_wizlists(void);
@@ -2246,3 +2247,82 @@
        strlen(buf), strlen(buf1), strlen(buf2), strlen(arg));
 #endif
 }
+
+/*
+ *  The following are the show_memory() functions for the various
+ *  platforms. Must be defined in comm.c as only comm.c includes
+ *  the system headers that are needed for the functionality.
+ */
+
+#ifdef __linux__
+
+void show_memory(struct char_data *ch)
+{
+  int i;
+  char *c_ptr1, *c_ptr2;
+
+  /* Reading the info from /proc/self/status */
+  i = open("/proc/self/status", O_RDONLY);
+  buf1[read(i, buf1, MAX_STRING_LENGTH)] = '\0';
+  close(i);
+
+  /* Writing Memory usage into buf */
+  sprintf(buf, "Memory Usage:\r\n");
+
+  /* Writing VmSize into buf */
+  c_ptr1 = strstr(buf1, "VmSize");
+  c_ptr2 = strchr(c_ptr1, '\n');
+  strncat(buf, c_ptr1, c_ptr2 - c_ptr1);
+  strcat(buf, "\r\n");
+
+  /* Writing VmRSS into buf */
+  c_ptr1 = strstr(c_ptr2, "VmRSS");
+  c_ptr2 = strchr(c_ptr1, '\n');
+  strncat(buf, c_ptr1, c_ptr2 - c_ptr1);
+  strcat(buf, "\r\n");
+
+  /* Size of Data */
+  c_ptr1 = strstr(c_ptr2, "VmData");
+  c_ptr2 = strchr(c_ptr1, '\n');
+  strncat(buf, c_ptr1, c_ptr2 - c_ptr1);
+  strcat(buf, "\r\n");
+
+  /* Size of Stack */
+  c_ptr1 = strstr(c_ptr2, "VmStk");
+  c_ptr2 = strchr(c_ptr1, '\n');
+  strncat(buf, c_ptr1, c_ptr2 - c_ptr1);
+  strcat(buf, "\r\n");
+
+  /* send all to the player */
+  send_to_char(buf, ch);
+  return;
+}
+
+#elif defined RUSAGE_SELF /* if not linux, unix with getrusage() ? */
+
+void show_memory(struct char_data *ch)
+{
+  struct rusage ru;
+
+  getrusage(RUSAGE_SELF, &ru);
+  sprintf(buf, "Memory Usage:\r\n"
+               "Maximum resident set size:    %ld\r\n"
+               "Integral shared memory size:  %ld\r\n"
+               "Integral unshared data size:  %ld\r\n"
+               "Integral unshared stack size: %ld\r\n",
+          ru.ru_maxrss, ru.ru_ixrss, ru.ru_idrss, ru.ru_isrss);
+  send_to_char(buf, ch);
+  return;
+}
+
+#else
+
+void show_memory(struct char_data *ch)
+{
+  send_to_char("Sorry, not implemented for this OS.\r\n", ch);
+  return;
+}
+
+#endif
+/* please add other versions of show memory here. */
+



--
/----------------------------------------------------------------------------\
| Christian Loth                      | Meet me as the >Shadowdancer< in the |
| chris@rom.mud.de                    |           REALM OF MAGIC             |
| http://rom.mud.de/~chris            | telnet rom.mud.de 4000               |
|                                     | http://rom.mud.de/                   |
|               "The road goes ever on and on!" - Bilbo Baggins              |
\----------------------------------------------------------------------------/


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/15/00 PST