Example #1
0
int
fetch_propvals(dbref obj, const char *dir)
{
    PropPtr p, pptr;
    int cnt = 0;
    char buf[BUFFER_LEN];
    char name[BUFFER_LEN];

    p = first_prop_nofetch(obj, dir, &pptr, name, sizeof(name));
    while (p) {
        cnt = (cnt || propfetch(obj, p));
        if (PropDir(p) || (PropFlags(p) & PROP_DIRUNLOADED)) {
            strcpyn(buf, sizeof(buf), dir);
            strcatn(buf, sizeof(buf), name);
            strcatn(buf, sizeof(buf), "/");
            if (PropFlags(p) & PROP_DIRUNLOADED) {
                SetPFlags(p, (PropFlags(p) & ~PROP_DIRUNLOADED));
                getproperties(input_file, obj, buf);
            }
            fetch_propvals(obj, buf);
        }
        p = next_prop(pptr, p, name, sizeof(name));
    }
    return cnt;
}
Example #2
0
void
untouchprop_rec(PropPtr p)
{
    if (!p)
        return;
    SetPFlags(p, (PropFlags(p) & ~PROP_TOUCHED));
    untouchprop_rec(AVL_LF(p));
    untouchprop_rec(AVL_RT(p));
    untouchprop_rec(PropDir(p));
}
Example #3
0
int
propfetch(dbref obj, PropPtr p)
{
    if (!p)
        return 0;
    SetPFlags(p, (PropFlags(p) | PROP_TOUCHED));
    if (PropFlags(p) & PROP_ISUNLOADED) {
        db_get_single_prop(input_file, obj, (long) PropDataVal(p), p, NULL);
        return 1;
    }
    return 0;
}
Example #4
0
int
propfetch(dbref obj, PropPtr p)
{
	FILE *f;

	if (!p)
		return 0;
	SetPFlags(p, (PropFlags(p) | PROP_TOUCHED));
	if (PropFlags(p) & PROP_ISUNLOADED) {
		f = (FLAGS(obj) & SAVED_DELTA) ? delta_infile : input_file;
		db_get_single_prop(f, obj, (long) PropDataVal(p), p, NULL);
		return 1;
	}
	return 0;
}
Example #5
0
void
clear_propnode(PropPtr p)
{
	if (!(PropFlags(p) & PROP_ISUNLOADED)) {
 	        if (PropType(p) == PROP_STRTYP) {
			free((void *) PropDataStr(p));
			PropDataStr(p) = NULL;
	        }
		if (PropType(p) == PROP_LOKTYP)
			free_boolexp(PropDataLok(p));
	}
	SetPDataVal(p, 0);
	SetPFlags(p, (PropFlags(p) & ~PROP_ISUNLOADED));
	SetPType(p, PROP_DIRTYP);
}
Example #6
0
/* copies properties */
void
copy_proplist(dbref obj, PropPtr * nu, PropPtr old)
{
	PropPtr p;

	if (old) {
#ifdef DISKBASE
		propfetch(obj, old);
#endif
		p = new_prop(nu, PropName(old));
		SetPFlagsRaw(p, PropFlagsRaw(old));
		switch (PropType(old)) {
		case PROP_STRTYP:
			SetPDataStr(p, alloc_string(PropDataStr(old)));
			break;
		case PROP_LOKTYP:
			if (PropFlags(old) & PROP_ISUNLOADED) {
				SetPDataLok(p, TRUE_BOOLEXP);
				SetPFlags(p, (PropFlags(p) & ~PROP_ISUNLOADED));
			} else {
				SetPDataLok(p, copy_bool(PropDataLok(old)));
			}
			break;
		case PROP_DIRTYP:
			SetPDataVal(p, 0);
			break;
		case PROP_FLTTYP:
			SetPDataFVal(p, PropDataFVal(old));
			break;
		default:
			SetPDataVal(p, PropDataVal(old));
			break;
		}
		copy_proplist(obj, &PropDir(p), PropDir(old));
		copy_proplist(obj, &AVL_LF(p), AVL_LF(old));
		copy_proplist(obj, &AVL_RT(p), AVL_RT(old));
		/*
		   copy_proplist(obj, nu, AVL_LF(old));
		   copy_proplist(obj, nu, AVL_RT(old));
		 */
	}
}
Example #7
0
/* path is the name of the propdir to find */
const char *
propdir_unloaded(PropPtr root, const char *path)
{
	PropPtr p;
	const char *n;
	char *o, *l;
	static char buf[BUFFER_LEN];

	if (!root)
		return NULL;
	n = path;
	o = buf;
	while (*n == PROPDIR_DELIMITER)
		n++;
	if (!*n)
		return NULL;
	while (*n) {
		*o++ = '/';
		l = o;
		while (*n && *n != PROPDIR_DELIMITER)
			*o++ = *n++;
		while (*n == PROPDIR_DELIMITER)
			n++;
		*o = '\0';
		p = locate_prop(root, l);
		if (!p) {
			return NULL;
		}
		if (PropFlags(p) & PROP_DIRUNLOADED) {
			SetPFlags(p, (PropFlags(p) & ~PROP_DIRUNLOADED));
			return buf + 1;
		}
		root = PropDir(p);
	}
	return NULL;
}