PennMUSH 1.8.3p12
authorRick L Bird <nveid@yahoo.com>
Sun, 15 May 2011 20:42:02 +0000 (16:42 -0400)
committerRick L Bird <nveid@yahoo.com>
Sun, 15 May 2011 20:42:02 +0000 (16:42 -0400)
Author: talvo@talvo.com <talvo@talvo.com@ba372814-4f39-11de-9ad6-1127a62b9fcd>
Date:   Mon Jan 25 04:33:21 2010 +0000

    Issue 162, new pfun() function to evaluate attrs from parents
Fixes #208

src/function.c
src/funufun.c

index e45b1a466ca7b63cd4b54c4f779387e0c630da72..ef61c5dff5ea055ac089b5961f09bed3de4d9326 100644 (file)
@@ -732,6 +732,7 @@ FUNTAB flist[] = {
   {"UCSTR", fun_ucstr, 1, -1, FN_REG},
   {"UDEFAULT", fun_udefault, 2, 12, FN_NOPARSE},
   {"UFUN", fun_ufun, 1, 11, FN_REG},
+  {"PFUN", fun_pfun, 1, 11, FN_REG},
   {"ULAMBDA", fun_ufun, 1, 11, FN_REG},
   {"ULDEFAULT", fun_udefault, 1, 12, FN_NOPARSE | FN_LOCALIZE},
   {"ULOCAL", fun_ufun, 1, 11, FN_REG | FN_LOCALIZE},
index 8c905c0e59c3bfa0f65534e28f3ff1652637de0a..f622d33ab8b37287849b5e3bef91ef29d496e89a 100644 (file)
@@ -205,6 +205,47 @@ FUNCTION(fun_ufun)
   return;
 }
 
+/* ARGSUSED */
+FUNCTION(fun_pfun)
+{
+
+  char rbuff[BUFFER_LEN];
+  ATTR *a;
+  int pe_flags = PE_UDEFAULT;
+  dbref parent;
+  ufun_attrib ufun;
+
+  parent = Parent(executor);
+
+  if (!GoodObject(parent))
+    return;
+
+  /* This is a stripped down version of fetch_ufun_attrib that gets
+     the atr value directly from the parent */
+
+  a = atr_get(parent, upcasestr(args[0]));
+  if (!a)
+    return; /* no attr */
+
+  if(AF_Internal(a) || AF_Private(a))
+    return; /* attr isn't inheritable */
+
+  /* DEBUG attributes */
+  if (AF_Debug(a))
+    pe_flags |= PE_DEBUG;
+
+  ufun.thing = executor;
+  mush_strncpy(ufun.contents, atr_value(a), BUFFER_LEN);
+  ufun.pe_flags = pe_flags;
+  ufun.errmess = (char *) "";
+
+  call_ufun(&ufun, args + 1, nargs - 1, rbuff, executor, enactor, pe_info);
+
+  safe_str(rbuff, buff, bp);
+
+  return;
+}
+
 /* Like fun_ufun, but takes as second argument a default message
  * to use if the attribute isn't there.  If called as uldefault,
  * then preserve registers, too.