From 958a983841b3263e37b1849c25cfe71d45c1c079 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Mon, 19 Apr 2021 02:32:52 +0100 Subject: [PATCH] Implement OS information for AmigaOS. --- setter/src/amiga/CMakeLists.txt | 2 + setter/src/amiga/os.c | 82 ++++++++++++++++++++++++++++++++- 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/setter/src/amiga/CMakeLists.txt b/setter/src/amiga/CMakeLists.txt index 5695142..b936c3b 100644 --- a/setter/src/amiga/CMakeLists.txt +++ b/setter/src/amiga/CMakeLists.txt @@ -31,6 +31,8 @@ project( DESCRIPTION "Filesystem test creator for AmigaOS and compatibles" LANGUAGES C) +add_definitions(-D__USE_INLINE__) + set(PLATFORM_SOURCES attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c perms.h rsrcfork.c sparse.c time.c volume.c xattr.c) set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}") diff --git a/setter/src/amiga/os.c b/setter/src/amiga/os.c index f2bc711..8e15e2b 100644 --- a/setter/src/amiga/os.c +++ b/setter/src/amiga/os.c @@ -22,9 +22,89 @@ Aaru Data Preservation Suite Copyright (C) 2011-2021 Natalia Portillo *****************************************************************************/ +#include +#include +#include +#include + #include "../include/defs.h" +#include "../log.h" void GetOsInfo() { - // TODO + BOOL amithlon = FALSE; + struct Node* node; + char version[16]; + char system[16]; + struct Library* VersionBase; + struct Library* ArosBase; + int error = -1; + + memset(version, 0, 16); + memset(system, 0, 16); + + strncpy(system, "AmigaOS", 7); + + switch(SysBase->LibNode.lib_Version) + { + case 27: strncpy(version, "0.7", 3); break; + case 29: strncpy(version, "0.9", 3); break; + case 30: strncpy(version, "1.0", 3); break; + case 31: + case 32: strncpy(version, "1.1", 3); break; + case 33: strncpy(version, "1.2", 3); break; + case 34: + case 35: strncpy(version, "1.3", 3); break; + case 36: strncpy(version, "2.0", 3); break; + case 37: strncpy(version, "2.04", 4); break; + case 38: strncpy(version, "2.1", 3); break; + case 39: strncpy(version, "3.0", 3); break; + case 40: + case 41: strncpy(version, "3.1", 3); break; + case 43: strncpy(version, "3.2", 3); break; + case 44: strncpy(version, "3.5", 3); break; + case 45: strncpy(version, "3.9", 3); break; + case 50: + case 51: + case 52: strncpy(version, "4.0", 3); break; + case 53: strncpy(version, "4.1", 3); break; + default: strncpy(version, "unknown version", 15); break; + } + + Disable(); + for(node = SysBase->ResourceList.lh_Head; node->ln_Succ != NULL; node = node->ln_Succ) + { + if(strcmp(node->ln_Name, "amithlon.resource") == 0) + { + amithlon = TRUE; + break; + } + } + Enable(); + + ArosBase = OpenLibrary((CONST_STRPTR) "aros.library", 0); + if(ArosBase) + { + memset(system, 0, 16); + memset(version, 0, 16); + strncpy(system, "AROS", 4); + snprintf(version, 16, "%d.%d", ArosBase->lib_Version, ArosBase->lib_Revision); + } + + // TODO: Detect MorphOS + + log_write("OS information:\n"); + + log_write("Running under %s %s\n", system, version); + log_write("KickStart v%d.%d\n", SysBase->LibNode.lib_Version, SysBase->LibNode.lib_Revision); + + VersionBase = OpenLibrary((CONST_STRPTR) "version.library", 0); + if(VersionBase) + { + log_write("Workbench v%d.%d\n", VersionBase->lib_Version, VersionBase->lib_Revision); + + CloseLibrary(VersionBase); + } + + if(amithlon) log_write("Running under Amithlon\n"); }