def get_programs_dict(pkgname_only=None, flag_protected=False):
    """
    Scans COLLABORATORS_S packages for scripts, eventually filtering if arguments passed

    Args:
        pkgname_only: name of single package within COLLABORATORS_S
        flag_protected: include scripts starting with "_"?

    Returns:
        dictionary: {"packagename0": {"exeinfo": [ExeInfo00, ...], "description": description0}, ...}
    """

    ___ret = _get_programs_dict()
    __ret = ___ret if pkgname_only is None else OrderedDict(((pkgname_only, ___ret[pkgname_only]),))
    if flag_protected:
        _ret = __ret
    else:
        _ret = copy.deepcopy(__ret)
        for value in _ret.values():
            value["exeinfo"] = [exeinfo for exeinfo in value["exeinfo"] if not exeinfo.filename.startswith("_")]

    # Removes packages that may have gone out of scripts after filtering
    ret = _ret if pkgname_only is None and flag_protected is None else \
        OrderedDict(((key, value) for key, value in _ret.items() if len(value["exeinfo"]) > 0))

    return ret