#ifdef _WIN32 #include #else #include #include #endif #include int ver_underbars = 0; char *ver() { char *q; #ifdef _WIN32 static char verbuf[256]; #else static char verbuf[4*SYS_NMLN + 4]; #endif #ifdef _WIN32 OSVERSIONINFO VersionInfo; VersionInfo.dwOSVersionInfoSize = sizeof(VersionInfo); if(GetVersionEx(&VersionInfo)) { if(strlen(VersionInfo.szCSDVersion) > 200) VersionInfo.szCSDVersion[100] = 0; sprintf(verbuf, "Windows %d.%d build%d PlatformId %d SP=\"%s\"", VersionInfo.dwMajorVersion, VersionInfo.dwMinorVersion, VersionInfo.dwBuildNumber, VersionInfo.dwPlatformId, VersionInfo.szCSDVersion); } else { strcpy(verbuf, "WINDOWS UNKNOWN"); } #else struct utsname ubuf; if(uname(&ubuf)) { strcpy(verbuf, "LINUX UNKNOWN"); } else { sprintf(verbuf,"%s %s %s %s", ubuf.sysname, ubuf.release, ubuf.version, ubuf.machine); } #endif // Substitute an underbar for white space. Makes output // easier to parse. if(ver_underbars) { for(q = verbuf; *q; q++) if(*q == ' ' || *q == '\t' || *q == '\n' || *q == '\r' || *q == '\b' || *q == '\f') *q = '_'; } return verbuf; } #ifdef MAIN int main(int ac, char *av) { if(ac > 1) ver_underbars = 1; printf("%s\n", ver()); return 0; } #endif