/* CoreProperties.c */ #include "CoreProperties.h" #include "Core.h" #include "malloc.h" Property CreateProp(next, key, value) Property next; Atom key; Ref value; { Property prop; prop=New(Property, PropertyRec); prop->next=next; prop->key=key; prop->value=value; return(prop); }; Atom uniqueID=0; String *propNames; PropPrintProc *printProcs; Atom RegisterProp(name, printProc) String name; PropPrintProc printProc; { PropPrintProc *newPrintProcs; String *newPropNames; Nat i; newPropNames=(String *)malloc((uniqueID+1)*sizeof(String)); newPrintProcs=(PropPrintProc *)malloc((uniqueID+1)*sizeof(PropPrintProc)); for (i=0; i<uniqueID; i++) { newPropNames[i]=propNames[i]; newPrintProcs[i]=printProcs[i]; }; newPropNames[uniqueID]=name; newPrintProcs[uniqueID]=printProc; propNames=newPropNames; printProcs=newPrintProcs; uniqueID+=1; return(uniqueID-1); }; Ref GetProp(from, prop) Properties from; Atom prop; { while (from) { if (from->key==prop) return(from->value); from=from->next; }; return(nil); }; Properties PutProp(on, prop, value) Properties on; Atom prop; Ref value; { Properties scan=on; while (scan) { if (scan->key==prop) { scan->value=value; return(on); }; scan=scan->next; }; return(CreateProp(on, prop, value)); }; void PrintProperties(props, indent, cr, level) Properties props; Nat indent; Bool cr; Nat level; { Properties scan=props; while (scan) { if (printProcs[scan->key]!=nil) (printProcs[scan->key])(scan->key, scan->value, indent, level, cr); scan=scan->next; }; }; void PrintPropertyString(prop, value, indent, level, cr) Atom prop; Ref value; Nat indent; Nat level; Bool cr; { level=level; PrintIndent(indent, cr); printf("%s: %s", propNames[prop], value); };