Пример #1
0
static int 
rank_set_class(graph_t * g)
{
    static char *name[] = { "same", "min", "source", "max", "sink", NULL };
    static int class[] =
	{ SAMERANK, MINRANK, SOURCERANK, MAXRANK, SINKRANK, 0 };
    int val;

    if (is_cluster(g))
	return CLUSTER;
    val = maptoken(agget(g, "rank"), name, class);
    GD_set_type(g) = val;
    return val;
}

static int 
make_new_cluster(graph_t * g, graph_t * subg)
{
    int cno;
    cno = ++(GD_n_cluster(g));
    GD_clust(g) = ZALLOC(cno + 1, GD_clust(g), graph_t *, GD_n_cluster(g));
    GD_clust(g)[cno] = subg;
    do_graph_label(subg);
    return cno;
}
Пример #2
0
int rank_set_class(graph_t* g)
{
	static char	*name[] = {"same","min","source","max","sink",NULL};
	static int	class[] = {SAMERANK,MINRANK,SOURCERANK,MAXRANK,SINKRANK,0};
	int		val;

	if (is_cluster(g)) return CLUSTER;
	val = maptoken(agget(g,"rank"),name,class);
	GD_set_type(g) = val;
	return val;
}

/* Execute union commands for "same rank" subgraphs and clusters. */
void collapse_sets(graph_t* g)
{
	int			c;
	graph_t		*mg,*subg;
	node_t		*mn,*n;
	edge_t		*me;

	mg = g->meta_node->graph;
	for (me = agfstout(mg,g->meta_node); me; me = agnxtout(mg,me)) {
		mn = me->head;
		subg = agusergraph(mn);

		c = rank_set_class(subg);
		if (c) {
			if ((c == CLUSTER) && CL_type == LOCAL) collapse_cluster(g,subg);
			else collapse_rankset(g,subg,c);
		}

		/* mark nodes with ordered edges so their leaves are not collapsed */
		if (agget(subg,"ordering"))
			for (n = agfstnode(subg); n; n = agnxtnode(subg,n)) ND_order(n) = 1;
	}
}
char *platform_get_windows_runtime_os(void)
{
    int found = 0;
    int i;
    VGPI ViceGetProductInfo;
    VGNSI ViceGetNativeSystemInfo;
    SYSTEM_INFO systeminfo;
    DWORD PT;
    int sp;
    int exinfo_valid = 0;

    ZeroMemory(&os_version_info, sizeof(os_version_info));
    os_version_info.dwOSVersionInfoSize = sizeof(os_version_info);

    ZeroMemory(&os_version_ex_info, sizeof(os_version_ex_info));
    os_version_ex_info.dwOSVersionInfoSize = sizeof(os_version_ex_info);

    GetVersionEx(&os_version_info);

    windows_versions[0].platformid = (DWORD)os_version_info.dwPlatformId;
    windows_versions[0].majorver = (DWORD)os_version_info.dwMajorVersion;
    windows_versions[0].minorver = (DWORD)os_version_info.dwMinorVersion;
    windows_versions[0].realos = GetRealOS();

    if (windows_versions[0].platformid == VER_PLATFORM_WIN32_NT) {
        if (GetVersionEx(&os_version_ex_info)) {
            if (os_version_ex_info.wProductType == VER_NT_DOMAIN_CONTROLLER) {
                windows_versions[0].producttype = (BYTE)VER_NT_SERVER;
            } else {
                windows_versions[0].producttype = (BYTE)os_version_ex_info.wProductType;
            }
            windows_versions[0].suite = (WORD)os_version_ex_info.wSuiteMask;
            exinfo_valid = 1;
        } else {
            switch (get_product_type_from_reg()) {
                case 0:
                default:
                    windows_versions[0].producttype = 0;
                    windows_versions[0].suite = 0;
                    break;
                case 1:
                    windows_versions[0].producttype = VER_NT_WORKSTATION;
                    windows_versions[0].suite = 0;
                    break;
                case 2:
                    windows_versions[0].producttype = VER_NT_SERVER;
                    windows_versions[0].suite = 0;
                    break;
                case 3:
                    windows_versions[0].producttype = VER_NT_SERVER;
                    windows_versions[0].suite = VER_SUITE_ENTERPRISE;
                    break;
                case 4:
                    windows_versions[0].producttype = VER_NT_SERVER;
                    windows_versions[0].suite = VER_SUITE_TERMINAL;
                    break;
                case 5:
                    windows_versions[0].producttype = VER_NT_SERVER;
                    windows_versions[0].suite = VER_SUITE_SMALLBUSINESS;
                    break;
            }
        }
        if (windows_versions[0].majorver >= 6) {
            ViceGetProductInfo = (VGPI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetProductInfo");
            ViceGetProductInfo(os_version_ex_info.dwMajorVersion, os_version_ex_info.dwMinorVersion, 0, 0, &PT);
            windows_versions[0].pt6 = PT;
        } else {
            windows_versions[0].pt6 = -1;
        }
    } else {
		windows_versions[0].producttype = -1;
		windows_versions[0].suite = -1;
    }

/* Metrics: 0000RMST
   R: Windows Server 2003 R2			SM_SERVERR2
   M: Windows XP Media Center Edition		SM_MEDIACENTER
   S: Windows XP Starter Edition		SM_STARTER
   T: Windows XP Tablet PC Edition		SM_TABLETPC
*/
    windows_versions[0].metrics = 0;
    if (GetSystemMetrics(SM_TABLETPC)) {
        windows_versions[0].metrics |= 1;
    }
    if (GetSystemMetrics(SM_STARTER)) {
        windows_versions[0].metrics |= 2;
    }
    if (GetSystemMetrics(SM_MEDIACENTER)) {
        windows_versions[0].metrics |= 4;
    }
    if (GetSystemMetrics(SM_SERVERR2)) {
        windows_versions[0].metrics |= 8;
    }

    if (windows_versions[0].suite == (VER_SUITE_EMBEDDEDNT | VER_SUITE_SINGLEUSERTS)) {
        if (is_flp() == 0) {
            windows_versions[0].suite = VER_SUITE_EMBEDDEDNT;
        }
    }

    if (is_pe_builder() && windows_versions[0].majorver == 5 && windows_versions[0].minorver == 2) {
        windows_versions[0].producttype = VER_NT_SERVER;
    }

    if (is_cluster()) {
        windows_versions[0].suite |= VER_SUITE_COMPUTE_SERVER;
    }

    for (i = 1; found == 0 && windows_versions[i].name != NULL; i++) {
        if (windows_versions[0].platformid == windows_versions[i].platformid) {
            if (windows_versions[0].majorver == windows_versions[i].majorver) {
                if (windows_versions[0].minorver == windows_versions[i].minorver) {
                    if (windows_versions[0].realos > windows_versions[i].realos) {
                        windows_versions[0].producttype = -1;
                        windows_versions[0].suite = 0;
                        windows_versions[0].pt6 = 0;
                        windows_versions[0].metrics = 0;
                    }
                    if (windows_versions[0].producttype == windows_versions[i].producttype) {
                        if (optional_mask_compare(windows_versions[0].suite, windows_versions[i].suite)) {
                            if (optional_compare(windows_versions[0].pt6, windows_versions[i].pt6)) {
                                if (optional_mask_compare(windows_versions[0].metrics, windows_versions[i].metrics)) {
                                    found = 1;
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    if (found) {
        sprintf(windows_version, "%s", windows_versions[i - 1].name);
        if (windows_versions[0].platformid == VER_PLATFORM_WIN32_WINDOWS) {
            if (windows_versions[0].minorver == 0) {
                sprintf(windows_version, "%s%s", windows_version, get_win95_version());
            }
            if (windows_versions[0].minorver == 10) {
                sprintf(windows_version, "%s%s", windows_version, get_win98_version());
            }
        } else {
            if (exinfo_valid) {
                sp = os_version_ex_info.wServicePackMajor;
            } else {
                sp = get_sp_from_reg();
            }
            if (sp) {
                if (sp == 6) {
                    if (sp_is_nt4_6a()) {
                        sprintf(windows_version, "%s SP6A", windows_version);
                    } else {
                        sprintf(windows_version, "%s SP6", windows_version);
                    }
                } else {
                    sprintf(windows_version, "%s SP%d", windows_version, sp);
                }
            }
        }
        if (is_pe_builder()) {
            sprintf(windows_version, "%s (PE)", windows_version);
        }
        if (windows_versions[0].realos > windows_versions[i - 1].realos) {
            sprintf(windows_version, "%s (compatibility mode)", windows_version);
        }
        if (IsWow64()) {
            ViceGetNativeSystemInfo = (VGNSI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");
            ViceGetNativeSystemInfo(&systeminfo);
            if (systeminfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
                sprintf(windows_version, "%s (WOW64 X64)", windows_version);
            } else {
                sprintf(windows_version, "%s (WOW64 IA64)", windows_version);
            }
        } else {
            if (windows_versions[0].majorver >= 5) {
                GetSystemInfo(&systeminfo);
                if (systeminfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64) {
                    sprintf(windows_version, "%s (64bit IA64)", windows_version);
                } else if (systeminfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
                    sprintf(windows_version, "%s (64bit X64)", windows_version);
                } else if (systeminfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_MIPS) {
                    sprintf(windows_version, "%s (32bit MIPS)", windows_version);
                } else if (systeminfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ALPHA) {
                    sprintf(windows_version, "%s (32bit AXP)", windows_version);
                } else if (systeminfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ALPHA64) {
                    sprintf(windows_version, "%s (32bit AXP64)", windows_version);
                } else if (systeminfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_PPC) {
                    sprintf(windows_version, "%s (32bit PPC)", windows_version);
                } else {
                    sprintf(windows_version, "%s (32bit X86)", windows_version);
                }
            }
        }
        if (IsReactOS()) {
            sprintf(windows_version, "%s (ReactOS)", windows_version);
        }
        if (IsWine()) {
            sprintf(windows_version, "%s (Wine)", windows_version);
        }
        if (IsOdin32()) {
            sprintf(windows_version, "%s (Odin32)", windows_version);
        }
        if (IsHxDos()) {
            sprintf(windows_version, "%s (HXDOS)", windows_version);
        }
    } else {
        sprintf(windows_version, "%s (%d %d %d %d %d %d)", "Unknown Windows version",
                                                            windows_versions[0].platformid,
                                                            windows_versions[0].majorver,
                                                            windows_versions[0].minorver,
                                                            windows_versions[0].realos,
                                                            windows_versions[0].producttype,
                                                            windows_versions[0].suite);
    }
    return windows_version;
}