REM ======================================================================================================================= REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. === REM === Full documentation is available on https://help.libreoffice.org/ === REM ======================================================================================================================= Option Compatible Option Explicit ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''' SF_Platform ''' =========== ''' Singleton class implementing the "ScriptForge.Platform" service ''' Implemented as a usual Basic module ''' ''' A collection of properties about the execution environment: ''' - HW platform ''' - Operating System ''' - current user ''' - LibreOffice version ''' ''' Service invocation example: ''' Dim platform As Variant ''' platform = CreateScriptService("Platform") ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' REM ================================================================== EXCEPTIONS REM ============================================================ MODULE CONSTANTS REM ===================================================== CONSTRUCTOR/DESTRUCTOR REM ----------------------------------------------------------------------------- Public Function Dispose() As Variant Set Dispose = Nothing End Function ' ScriptForge.SF_Array Explicit destructor REM ================================================================== PROPERTIES REM ----------------------------------------------------------------------------- Property Get Architecture() As String ''' Returns the actual bit architecture ''' Example: ''' MsgBox platform.Architecture ' 64bit Architecture = _PropertyGet("Architecture") End Property ' ScriptForge.SF_Platform.Architecture (get) REM ----------------------------------------------------------------------------- Property Get ComputerName() As String ''' Returns the computer's network name ''' Example: ''' MsgBox platform.ComputerName ComputerName = _PropertyGet("ComputerName") End Property ' ScriptForge.SF_Platform.ComputerName (get) REM ----------------------------------------------------------------------------- Property Get CPUCount() As Integer ''' Returns the number of Central Processor Units ''' Example: ''' MsgBox platform.CPUCount ' 4 CPUCount = _PropertyGet("CPUCount") End Property ' ScriptForge.SF_Platform.CPUCount (get) REM ----------------------------------------------------------------------------- Property Get CurrentUser() As String ''' Returns the name of logged in user ''' Example: ''' MsgBox platform.CurrentUser CurrentUser = _PropertyGet("CurrentUser") End Property ' ScriptForge.SF_Platform.CurrentUser (get) REM ----------------------------------------------------------------------------- Property Get Machine() As String ''' Returns the machine type like 'i386' or 'x86_64' ''' Example: ''' MsgBox platform.Machine Machine = _PropertyGet("Machine") End Property ' ScriptForge.SF_Platform.Machine (get) REM ----------------------------------------------------------------------------- Property Get ObjectType As String ''' Only to enable object representation ObjectType = "SF_Platform" End Property ' ScriptForge.SF_Platform.ObjectType REM ----------------------------------------------------------------------------- Property Get ServiceName As String ''' Internal use ServiceName = "ScriptForge.Platform" End Property ' ScriptForge.SF_Platform.ServiceName REM ----------------------------------------------------------------------------- Property Get OfficeVersion() As String ''' Returns the office software version in the form 'LibreOffice w.x.y.z (The Document Foundation)' ''' Example: ''' MsgBox platform.OfficeVersion OfficeVersion = _PropertyGet("OfficeVersion") End Property ' ScriptForge.SF_Platform.OfficeVersion (get) REM ----------------------------------------------------------------------------- Property Get OSName() As String ''' Returns the name of the operating system like 'Linux' or 'Windows' ''' Example: ''' MsgBox platform.OSName OSName = _PropertyGet("OSName") End Property ' ScriptForge.SF_Platform.OSName (get) REM ----------------------------------------------------------------------------- Property Get OSPlatform() As String ''' Returns a single string identifying the underlying platform with as much useful and human-readable information as possible ''' Example: ''' MsgBox platform.OSPlatform ' Linux-4.15.0-117-generic-x86_64-with-Ubuntu-18.04-bionic OSPlatform = _PropertyGet("OSPlatform") End Property ' ScriptForge.SF_Platform.OSPlatform (get) REM ----------------------------------------------------------------------------- Property Get OSRelease() As String ''' Returns the operating system's release ''' Example: ''' MsgBox platform.OSRelease ' 4.15.0-117-generic OSRelease = _PropertyGet("OSRelease") End Property ' ScriptForge.SF_Platform.OSRelease (get) REM ----------------------------------------------------------------------------- Property Get OSVersion() As String ''' Returns the name of the operating system build or version ''' Example: ''' MsgBox platform.OSVersion ' #118-Ubuntu SMP Fri Sep 4 20:02:41 UTC 2020 OSVersion = _PropertyGet("OSVersion") End Property ' ScriptForge.SF_Platform.OSVersion (get) REM ----------------------------------------------------------------------------- Property Get Processor() As String ''' Returns the (real) processor name, e.g. 'amdk6'. Might return the same value as Machine ''' Example: ''' MsgBox platform.Processor Processor = _PropertyGet("Processor") End Property ' ScriptForge.SF_Platform.Processor (get) REM ===================================================================== METHODS REM ----------------------------------------------------------------------------- Public Function GetProperty(Optional ByVal PropertyName As Variant) As Variant ''' Return the actual value of the given property ''' Args: ''' PropertyName: the name of the property as a string ''' Returns: ''' The actual value of the property ''' If the property does not exist, returns Null ''' Exceptions: ''' ARGUMENTERROR The property does not exist Const cstThisSub = "Platform.GetProperty" Const cstSubArgs = "" If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch GetProperty = Null Check: If SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then If Not SF_Utils._Validate(PropertyName, "PropertyName", V_STRING, Properties()) Then GoTo Catch End If Try: GetProperty = _PropertyGet(PropertyName) Finally: SF_Utils._ExitFunction(cstThisSub) Exit Function Catch: GoTo Finally End Function ' ScriptForge.SF_Platform.GetProperty REM ----------------------------------------------------------------------------- Public Function Methods() As Variant ''' Return the list of public methods of the Model service as an array Methods = Array( _ ) End Function ' ScriptForge.SF_Platform.Methods REM ----------------------------------------------------------------------------- Public Function Properties() As Variant ''' Return the list or properties of the Platform class as an array Properties = Array( _ "Architecture" _ , "ComputerName" _ , "CPUCount" _ , "CurrentUser" _ , "Machine" _ , "OfficeVersion" _ , "OSName" _ , "OSPlatform" _ , "OSRelease" _ , "OSVersion" _ , "Processor" _ ) End Function ' ScriptForge.SF_Platform.Properties REM =========================================================== PRIVATE FUNCTIONS REM ----------------------------------------------------------------------------- Public Function _GetProductName() as String ''' Returns Office product and version numbers found in configuration registry ''' Derived from the Tools library Dim oProdNameAccess as Object ' configmgr.RootAccess Dim sProdName as String Dim sVersion as String Dim sVendor As String On Local Error GoTo Catch ' Prevent any error _GetProductName = "" Try: Set oProdNameAccess = SF_Utils._GetRegistryKeyContent("org.openoffice.Setup/Product") sProdName = oProdNameAccess.ooName sVersion = oProdNameAccess.ooSetupVersionAboutBox sVendor = oProdNameAccess.ooVendor _GetProductName = sProdName & " " & sVersion & " (" & sVendor & ")" Finally: Exit Function Catch: GoTo Finally End Function ' ScriptForge.SF_Platform._GetProductName REM ----------------------------------------------------------------------------- Private Function _PropertyGet(Optional ByVal psProperty As String) As Variant ''' Return the value of the named property ''' Args: ''' psProperty: the name of the property Dim sOSName As String ' Operating system Const cstPyHelper = "$" & "_SF_Platform" Dim cstThisSub As String Const cstSubArgs = "" cstThisSub = "Platform.get" & psProperty SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Select Case psProperty Case "Architecture", "ComputerName", "CPUCount", "CurrentUser", "Machine" _ , "OSPlatform", "OSRelease", "OSVersion", "Processor" With ScriptForge.SF_Session _PropertyGet = .ExecutePythonScript(.SCRIPTISSHARED, _SF_.PythonHelper & cstPyHelper, psProperty) End With Case "OfficeVersion" _PropertyGet = _GetProductName() Case "OSName" ' Calc INFO function preferred to Python script to avoid ScriptForge initialization risks when Python is not installed sOSName = _SF_.OSName If sOSName = "" Then sOSName = SF_Session.ExecuteCalcFunction("INFO", "system") Select Case sOSName Case "WNT" : sOSName = "Windows" Case "MACOSX" : sOSName = "macOS" Case "LINUX" : sOSName = "Linux" Case "SOLARIS" : sOSName = "Solaris" Case Else : sOSName = SF_String.Capitalize(sOSName) End Select EndIf _PropertyGet = sOSName Case Else _PropertyGet = Null End Select Finally: SF_Utils._ExitFunction(cstThisSub) Exit Function End Function ' ScriptForge.SF_Platform._PropertyGet REM ============================================ END OF SCRIPTFORGE.SF_PLATFORM