/* @@@HEAD@@@
// System Object Module
*/
#include <sys/time.h> /* getrusage() 25-Jan-95 BJG */
#include <sys/resource.h> /* getrusage() 25-Jan-95 BJG */
#include "config.h"
#include "defs.h"
#include "y.tab.h"
#include "cdc_types.h"
#include "execute.h"
#ifdef HAVE_GETRUSAGE
int getrusage(int who, struct rusage * r_usage);
#endif
void op_next_dbref(void) {
if (!func_init_0())
return;
push_dbref(db_top);
}
void op_load(void) {
if (!func_init_0())
return;
push_int(1);
}
void op_status(void) {
#ifdef HAVE_GETRUSAGE
struct rusage r;
#endif
list_t *status;
data_t *d;
int x;
if (!func_init_0())
return;
#define __LLENGTH__ 18
status = list_new(__LLENGTH__);
d = list_empty_spaces(status, __LLENGTH__);
for (x=0; x < __LLENGTH__; x++)
d[x].type = INTEGER;
#ifndef HAVE_GETRUSAGE
for (x=0; x < __LLENGTH__; x++)
d[x].u.val = -1;
#else
getrusage(RUSAGE_SELF, &r);
d[0].u.val = (int) r.ru_utime.tv_sec; /* user time used (seconds) */
d[1].u.val = (int) r.ru_utime.tv_usec;/* user time used (microseconds) */
d[2].u.val = (int) r.ru_stime.tv_sec; /* system time used (seconds) */
d[3].u.val = (int) r.ru_stime.tv_usec;/* system time used (microseconds) */
d[4].u.val = (int) r.ru_maxrss;
d[7].u.val = (int) r.ru_idrss; /* integral unshared data size */
d[8].u.val = (int) r.ru_minflt; /* page reclaims */
d[9].u.val = (int) r.ru_majflt; /* page faults */
d[10].u.val = (int) r.ru_nswap; /* swaps */
d[11].u.val = (int) r.ru_inblock; /* block input operations */
d[12].u.val = (int) r.ru_oublock; /* block output operations */
d[13].u.val = (int) r.ru_msgsnd; /* messages sent */
d[14].u.val = (int) r.ru_msgrcv; /* messages received */
d[15].u.val = (int) r.ru_nsignals; /* signals received */
d[16].u.val = (int) r.ru_nvcsw; /* voluntary context switches */
d[17].u.val = (int) r.ru_nivcsw; /* involuntary context switches */
#endif
#undef __LLENGTH__
push_list(status);
list_discard(status);
}
void op_version(void) {
list_t *version;
data_t *d;
/* Take no arguments. */
if (!func_init_0())
return;
/* Construct a list of the version numbers and push it. */
version = list_new(3);
d = list_empty_spaces(version, 3);
d[0].type = d[1].type = d[2].type = INTEGER;
d[0].u.val = VERSION_MAJOR;
d[1].u.val = VERSION_MINOR;
d[2].u.val = VERSION_PATCH;
push_list(version);
list_discard(version);
}