void prim_event_count(PRIM_PROTOTYPE) { CHECKOP(0); CHECKOFLOW(1); result = muf_event_count(fr); PushInt(result); }
void prim_over(PRIM_PROTOTYPE) { CHECKOP_READONLY(2); CHECKOFLOW(1); copyinst(&arg[*top - 2], &arg[*top]); (*top)++; }
void prim_mode(PRIM_PROTOTYPE) { CHECKOP(0); result = fr->multitask; CHECKOFLOW(1); PushInt(result); }
void prim_epsilon(PRIM_PROTOTYPE) { CHECKOP(0); fresult = DBL_EPSILON; CHECKOFLOW(1); PushFloat(fresult); }
void prim_caller(PRIM_PROTOTYPE) { CHECKOP(0); ref = (dbref) fr->caller.st[fr->caller.top - 1]; CHECKOFLOW(1); PushObject(ref); }
void prim_pid(PRIM_PROTOTYPE) { CHECKOP(0); CHECKOFLOW(1); result = fr->pid; PushInt(result); }
void prim_over(PRIM_PROTOTYPE) { EXPECT_READ_STACK(2); CHECKOFLOW(1); copyinst(&arg[*top - 2], &arg[*top]); (*top)++; }
void prim_error_num(PRIM_PROTOTYPE) { CHECKOP(0); CHECKOFLOW(1); result = ERROR_NUM; PushInt(result); }
void prim_gmtoffset(PRIM_PROTOTYPE) { CHECKOP(0); CHECKOFLOW(1); result = get_tz_offset(); PushInt(result); }
void prim_pi(PRIM_PROTOTYPE) { CHECKOP(0); fresult = F_PI; CHECKOFLOW(1); PushFloat(fresult); }
void prim_is_error(PRIM_PROTOTYPE) { CHECKOP(0); CHECKOFLOW(1); result = ((fr->error.is_flags) != 0); PushInt(result); }
void prim_systime(PRIM_PROTOTYPE) { CHECKOP(0); result = time(NULL); CHECKOFLOW(1); PushInt(result); }
void prim_deep_copy(PRIM_PROTOTYPE) { EXPECT_READ_STACK(1); CHECKOFLOW(1); deep_copyinst(&arg[*top - 1], &arg[*top], fr->pinning); (*top)++; }
void prim_frand(PRIM_PROTOTYPE) { CHECKOP(0); CHECKOFLOW(1); fresult = _int_f_rand(); PushFloat( fresult ); }
void prim_inf(PRIM_PROTOTYPE) { CHECKOP(0); fresult = INF; CHECKOFLOW(1); PushFloat(fresult); }
void prim_prog(PRIM_PROTOTYPE) { CHECKOP(0); ref = (dbref) program; CHECKOFLOW(1); PushObject(ref); }
void prim_trig(PRIM_PROTOTYPE) { CHECKOP(0); ref = (dbref) fr->trig; CHECKOFLOW(1); PushObject(ref); }
void prim_fulldepth(PRIM_PROTOTYPE) { CHECKOP(0); result = *top; CHECKOFLOW(1); PushInt(result); }
void prim_depth(PRIM_PROTOTYPE) { CHECKOP(0); result = fr->trys.top ? *top - fr->trys.st->depth : *top; CHECKOFLOW(1); PushInt(result); }
void prim_dbtop(PRIM_PROTOTYPE) { CHECKOP(0); ref = (dbref) db_top; CHECKOFLOW(1); PushObject(ref); }
void prim_dup(PRIM_PROTOTYPE) { CHECKOP_READONLY(1); nargs = 0; CHECKOFLOW(1); copyinst(&arg[*top - 1], &arg[*top]); (*top)++; }
void prim_concount(PRIM_PROTOTYPE) { /* -- int */ CHECKOP(0); result = pcount(); CHECKOFLOW(1); PushInt(result); }
void prim_cmd(PRIM_PROTOTYPE) { CHECKOP(0); CHECKOFLOW(1); PushStrRaw(fr->cmd); if (fr->cmd) fr->cmd->links++; }
void prim_pdup(PRIM_PROTOTYPE) { EXPECT_READ_STACK(1); if (!false_inst(&arg[*top - 1])) { CHECKOFLOW(1); copyinst(&arg[*top - 1], &arg[*top]); (*top)++; } }
void prim_version(PRIM_PROTOTYPE) { char temp[256]; CHECKOP(0); CHECKOFLOW(1); sprintf(temp, "%s(ProtoMUCK%s)", VERSION, PROTOBASE); PushString(temp); }
void prim_stats(PRIM_PROTOTYPE) { /* A WhiteFire special. :) */ CHECKOP(1); oper1 = POP(); if (mlev < 3) abort_interp("Requires Mucker Level 3."); if (!valid_player(oper1) && (oper1->data.objref != NOTHING)) abort_interp("non-player argument (1)"); ref = oper1->data.objref; CLEAR(oper1); { dbref i; int rooms, exits, things, players, programs, garbage; /* tmp, ref */ rooms = exits = things = players = programs = garbage = 0; for (i = 0; i < db_top; i++) { if (ref == NOTHING || OWNER(i) == ref) { switch (Typeof(i)) { case TYPE_ROOM: rooms++; break; case TYPE_EXIT: exits++; break; case TYPE_THING: things++; break; case TYPE_PLAYER: players++; break; case TYPE_PROGRAM: programs++; break; case TYPE_GARBAGE: garbage++; break; } } } ref = rooms + exits + things + players + programs + garbage; CHECKOFLOW(7); PushInt(ref); PushInt(rooms); PushInt(exits); PushInt(things); PushInt(programs); PushInt(players); PushInt(garbage); /* push results */ } }
void prim_tuck(PRIM_PROTOTYPE) { CHECKOFLOW(1); CHECKOP(2); oper1 = POP(); temp2 = *(oper2 = POP()); arg[(*top)++] = *oper1; arg[(*top)++] = temp2; copyinst(&arg[*top - 2], &arg[*top]); (*top)++; }
void prim_systime_precise(PRIM_PROTOTYPE) { struct timeval fulltime; double dbltime; CHECKOP(0); gettimeofday(&fulltime, (struct timezone *) 0); CHECKOFLOW(1); dbltime = fulltime.tv_sec + (((double) fulltime.tv_usec) / 1.0e6); PushFloat(dbltime); }
void prim_forcedby(PRIM_PROTOTYPE) { CHECKOFLOW(1); if (mlev < 4) abort_interp("Wizbit only primitive."); if (forcelist) { ref = forcelist->data; } else { ref = NOTHING; } PushObject(ref); }
void prim_prettylock(PRIM_PROTOTYPE) { const char *ptr; CHECKOP(1); oper1 = POP(); /* lock: lock */ if (oper1->type != PROG_LOCK) abort_interp("Invalid argument"); ptr = unparse_boolexp(ProgUID, oper1->data.lock, 1); CHECKOFLOW(1); CLEAR(oper1); PushString(ptr); }