@@ -27,17 +27,20 @@ # include #endif #if defined(OF_MACOS) || defined(OF_NETBSD) # include #endif + +#ifdef OF_AMIGAOS +# include +# include +#endif #if defined(OF_AMIGAOS4) # include -# include #elif defined(OF_MORPHOS) # include -# include #endif #import "OFSystemInfo.h" #import "OFApplication.h" #import "OFArray.h" @@ -212,16 +215,14 @@ objc_autoreleasePoolPop(pool); } # endif #elif defined(OF_ANDROID) /* TODO */ -#elif defined(OF_MORPHOS) - /* TODO */ -#elif defined(OF_AMIGAOS4) - /* TODO */ -#elif defined(OF_AMIGAOS_M68K) - /* TODO */ +#elif defined(OF_AMIGAOS) + operatingSystemVersion = [[OFString alloc] + initWithFormat: @"Kickstart %u.%u", + SysBase->LibNode.lib_Version, SysBase->SoftVer]; #elif defined(OF_WII) || defined(NINTENDO_3DS) || defined(OF_NINTENDO_DS) || \ defined(OF_PSP) || defined(OF_MSDOS) /* Intentionally nothing */ #elif defined(HAVE_SYS_UTSNAME_H) && defined(HAVE_UNAME) struct utsname utsname; @@ -352,12 +353,11 @@ # if defined(OF_MACOS) || defined(OF_IOS) char pathC[PATH_MAX]; OFMutableString *path; # ifdef HAVE_SYSDIR_START_SEARCH_PATH_ENUMERATION - /* (1) to disable dead code warning when it is not a weak symbol */ - if ((1) && &sysdir_start_search_path_enumeration != NULL) { + if (@available(macOS 10.12, iOS 10, *)) { sysdir_search_path_enumeration_state state; state = sysdir_start_search_path_enumeration( SYSDIR_DIRECTORY_APPLICATION_SUPPORT, SYSDIR_DOMAIN_MASK_USER); @@ -445,12 +445,11 @@ # if defined(OF_MACOS) || defined(OF_IOS) char pathC[PATH_MAX]; OFMutableString *path; # ifdef HAVE_SYSDIR_START_SEARCH_PATH_ENUMERATION - /* (1) to disable dead code warning when it is not a weak symbol */ - if ((1) && &sysdir_start_search_path_enumeration != NULL) { + if (@available(macOS 10.12, iOS 10, *)) { sysdir_search_path_enumeration_state state; state = sysdir_start_search_path_enumeration( SYSDIR_DIRECTORY_LIBRARY, SYSDIR_DOMAIN_MASK_USER); if (sysdir_get_next_search_path_enumeration(state, pathC) == 0) @@ -522,10 +521,61 @@ object: self]; return [var stringByAppendingPathComponent: @".config"]; # endif } + ++ (OFString *)temporaryDirectoryPath +{ +# if defined(OF_MACOS) || defined(OF_IOS) + char buffer[PATH_MAX]; + size_t length; + + if ((length = confstr(_CS_DARWIN_USER_TEMP_DIR, buffer, PATH_MAX)) == 0) + return @"/tmp"; + + return [OFString stringWithCString: buffer + encoding: [OFLocale encoding] + length: length - 1]; +# elif defined(OF_WINDOWS) + if ([self isWindowsNT]) { + wchar_t buffer[PATH_MAX]; + + if (!GetTempPathW(PATH_MAX, buffer)) + return nil; + + return [OFString stringWithUTF16String: buffer]; + } else { + char buffer[PATH_MAX]; + + if (!GetTempPathA(PATH_MAX, buffer)) + return nil; + + return [OFString stringWithCString: buffer + encoding: [OFLocale encoding]]; + } +# elif defined(OF_HAIKU) + char pathC[PATH_MAX]; + + if (find_directory(B_SYSTEM_TEMP_DIRECTORY, 0, false, + pathC, PATH_MAX) != B_OK) + @throw [OFNotImplementedException exceptionWithSelector: _cmd + object: self]; + + return [OFString stringWithUTF8String: pathC]; +# elif defined(OF_AMIGAOS) + return @"T:"; +# else + OFString *path = + [[OFApplication environment] objectForKey: @"XDG_RUNTIME_DIR"]; + + if (path != nil) + return path; + + return @"/tmp"; +# endif +} #endif + (OFString *)CPUVendor { #if (defined(OF_X86_64) || defined(OF_X86)) && defined(__GNUC__) @@ -540,10 +590,12 @@ buffer[2] = regs.ecx; return [OFString stringWithCString: (char *)buffer encoding: OFStringEncodingASCII length: 12]; +#elif defined(OF_M68K) + return @"Motorola"; #else return nil; #endif } @@ -574,10 +626,23 @@ if (version != NULL) return [OFString stringWithFormat: @"%s V%s", model, version]; else return [OFString stringWithCString: model encoding: OFStringEncodingASCII]; +#elif defined(OF_AMIGAOS_M68K) + if (SysBase->AttnFlags & AFF_68060) + return @"68060"; + if (SysBase->AttnFlags & AFF_68040) + return @"68040"; + if (SysBase->AttnFlags & AFF_68030) + return @"68030"; + if (SysBase->AttnFlags & AFF_68020) + return @"68020"; + if (SysBase->AttnFlags & AFF_68010) + return @"68010"; + else + return @"68000"; #else return nil; #endif }