string flat_map(mapping mp) {
    mapping carte = ([]);
    mixed key, val;
    string retkey, retval, retstring;

    retstring = "";

    carte = expand_keys(mp);

    foreach( key, val in carte){
        if(arrayp(key)){
            if(!sizeof(key)) retkey = "BLANK ARRAY";
            else retkey = "ARRAY ("+implode(key,", ")+")";
        }
        else if(objectp(key)) retkey = "OBJECT ("+file_name(key)+")";
        else if(intp(key)) retkey = ""+key;
        else retkey = key;
        if(arrayp(val)){
            if(!sizeof(val)) retval = "BLANK ARRAY";
            else retval = "ARRAY ("+implode(val,", ")+")";
        }
        else if(objectp(val)) retval = "OBJECT ("+file_name(val)+")";
        else if(intp(val)) retval = ""+val;
        else retval = val;

        if(!retstring || retstring == "") retstring = retkey+":"+retval;
        else retstring += ", "+retkey+":"+retval;
    }

    return retstring;

}

varargs mapping add_maps(mapping FirstMapping,mapping  SecondMapping, int preference){
    mapping OutMap = ([]);
    mapping FirstMap = copy(FirstMapping);
    mapping SecondMap = copy(SecondMapping);
    mixed *schluessel1 = ({});
    mixed *schluessel2 = ({});

    if(!SecondMap) SecondMap = ([]);

    schluessel1 = keys(FirstMap);
    schluessel2 = keys(SecondMap);

    if(!preference) preference = 0;

    if(sizeof(schluessel1))
        foreach(mixed element in schluessel1){
            OutMap[element] = copy(FirstMap[element]);
        }

    if(sizeof(schluessel2))
        foreach(mixed element in schluessel2){
            if(member_array(element,schluessel1) != -1 && preference == 1)
                OutMap[element] = copy(FirstMap[element]);
            else OutMap[element] = copy(SecondMap[element]);
        }

    return OutMap;
}

int mgrepp(string primary, string *sub){
    foreach(string element in sub){
        if(strsrch(primary,element) != -1) return 0;
    }
    return 1;
}

mixed mapping_member(mapping Map, string sub){
    foreach(mixed key, mixed val in Map){
        if(stringp(key) && key == sub) return key;
        else if(arrayp(key) && member_array(sub, key) != -1) return key;
    }
    return 0;
}




