@prog impediment-driver.muf 1 9999 d 1 i : apply-impediment (str xN ... x1 N progspec source -- str' xN ... x1 N) swap atoi dbref dup program? if dup "l" flag? if swap pop 1 else over eif dup owner rot dbcmp else swap pop 0 then else swap pop 0 then dup if pop dup "_impediment" prop-exists? then if ( str xN ... x1 N tocall ) over 3 + rotate swap call over 2 + neg rotate ( str' xN ... x1 N ) else pop me @ "[impediment call: Permission denied.]" notify then ; : unknown-impediment "[\"" swap "\": unknown impediment]" strcat strcat me @ swap notify ; : do-impediment (str xN ... x1 N type -- str xN ... x1 N) dup not if pop exit then dup me @ "_impediment-" rot strcat over over prop-exists? if getpropstr swap pop me @ apply-impediment else swap pop prog swap over over prop-exists? eif getpropstr swap pop #-1 apply-impediment else pop pop unknown-impediment then ; : main me @ "_impediment" getpropstr dup not if pop exit then " " explode begin dup 0 > while 1 - swap do-impediment loop pop ; . c q