mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-01 19:02:13 +00:00
204 lines
7.9 KiB
Odin
204 lines
7.9 KiB
Odin
package objc_Foundation
|
|
|
|
import "base:intrinsics"
|
|
|
|
import "core:c"
|
|
|
|
@(objc_class="NSProcessInfo")
|
|
ProcessInfo :: struct {using _: Object}
|
|
|
|
// Getting the Process Information Agent
|
|
|
|
@(objc_type=ProcessInfo, objc_name="processInfo", objc_is_class_method=true)
|
|
ProcessInfo_processInfo :: proc "c" () -> ^ProcessInfo {
|
|
return msgSend(^ProcessInfo, ProcessInfo, "processInfo")
|
|
}
|
|
|
|
// Accessing Process Information
|
|
|
|
@(objc_type=ProcessInfo, objc_name="arguments")
|
|
ProcessInfo_arguments :: proc "c" (self: ^ProcessInfo) -> ^Array {
|
|
return msgSend(^Array, self, "arguments")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="environment")
|
|
ProcessInfo_environment :: proc "c" (self: ^ProcessInfo) -> ^Dictionary {
|
|
return msgSend(^Dictionary, self, "environment")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="globallyUniqueString")
|
|
ProcessInfo_globallyUniqueString :: proc "c" (self: ^ProcessInfo) -> ^String {
|
|
return msgSend(^String, self, "globallyUniqueString")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="isMacCatalystApp")
|
|
ProcessInfo_isMacCatalystApp :: proc "c" (self: ^ProcessInfo) -> bool {
|
|
return msgSend(bool, self, "isMacCatalystApp")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="isiOSAppOnMac")
|
|
ProcessInfo_isiOSAppOnMac :: proc "c" (self: ^ProcessInfo) -> bool {
|
|
return msgSend(bool, self, "isiOSAppOnMac")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="processIdentifier")
|
|
ProcessInfo_processIdentifier :: proc "c" (self: ^ProcessInfo) -> c.int {
|
|
return msgSend(c.int, self, "processIdentifier")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="processName")
|
|
ProcessInfo_processName :: proc "c" (self: ^ProcessInfo) -> ^String {
|
|
return msgSend(^String, self, "processName")
|
|
}
|
|
|
|
// Accessing User Information
|
|
|
|
@(objc_type=ProcessInfo, objc_name="userName")
|
|
ProcessInfo_userName :: proc "c" (self: ^ProcessInfo) -> ^String {
|
|
return msgSend(^String, self, "userName")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="fullUserName")
|
|
ProcessInfo_fullUserName :: proc "c" (self: ^ProcessInfo) -> ^String {
|
|
return msgSend(^String, self, "fullUserName")
|
|
}
|
|
|
|
// Sudden Application Termination
|
|
|
|
@(objc_type=ProcessInfo, objc_name="disableSuddenTermination")
|
|
ProcessInfo_disableSuddenTermination :: proc "c" (self: ^ProcessInfo) {
|
|
msgSend(nil, self, "disableSuddenTermination")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="enableSuddenTermination")
|
|
ProcessInfo_enableSuddenTermination :: proc "c" (self: ^ProcessInfo) {
|
|
msgSend(nil, self, "enableSuddenTermination")
|
|
}
|
|
|
|
// Controlling Automatic Termination
|
|
|
|
@(objc_type=ProcessInfo, objc_name="disableAutomaticTermination")
|
|
ProcessInfo_disableAutomaticTermination :: proc "c" (self: ^ProcessInfo, reason: ^String) {
|
|
msgSend(nil, self, "disableAutomaticTermination:", reason)
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="enableAutomaticTermination")
|
|
ProcessInfo_enableAutomaticTermination :: proc "c" (self: ^ProcessInfo, reason: ^String) {
|
|
msgSend(nil, self, "enableAutomaticTermination:", reason)
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="automaticTerminationSupportEnabled")
|
|
ProcessInfo_automaticTerminationSupportEnabled :: proc "c" (self: ^ProcessInfo) -> bool {
|
|
return msgSend(bool, self, "automaticTerminationSupportEnabled")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="setAutomaticTerminationSupportEnabled")
|
|
ProcessInfo_setAutomaticTerminationSupportEnabled :: proc "c" (self: ^ProcessInfo, automaticTerminationSupportEnabled: bool) {
|
|
msgSend(nil, self, "setAutomaticTerminationSupportEnabled:", automaticTerminationSupportEnabled)
|
|
}
|
|
|
|
// Getting Host Information
|
|
|
|
@(objc_type=ProcessInfo, objc_name="hostName")
|
|
ProcessInfo_hostName :: proc "c" (self: ^ProcessInfo) -> ^String {
|
|
return msgSend(^String, self, "hostName")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="operatingSystemVersionString")
|
|
ProcessInfo_operatingSystemVersionString :: proc "c" (self: ^ProcessInfo) -> ^String {
|
|
return msgSend(^String, self, "operatingSystemVersionString")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="operatingSystemVersion")
|
|
ProcessInfo_operatingSystemVersion :: proc "c" (self: ^ProcessInfo) -> OperatingSystemVersion {
|
|
return msgSend(OperatingSystemVersion, self, "operatingSystemVersion")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="isOperatingSystemAtLeastVersion")
|
|
ProcessInfo_isOperatingSystemAtLeastVersion :: proc "c" (self: ^ProcessInfo, version: OperatingSystemVersion) -> bool {
|
|
return msgSend(bool, self, "isOperatingSystemAtLeastVersion:", version)
|
|
}
|
|
|
|
// Getting Computer Information
|
|
|
|
@(objc_type=ProcessInfo, objc_name="processorCount")
|
|
ProcessInfo_processorCount :: proc "c" (self: ^ProcessInfo) -> UInteger {
|
|
return msgSend(UInteger, self, "processorCount")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="activeProcessorCount")
|
|
ProcessInfo_activeProcessorCount :: proc "c" (self: ^ProcessInfo) -> UInteger {
|
|
return msgSend(UInteger, self, "activeProcessorCount")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="physicalMemory")
|
|
ProcessInfo_physicalMemory :: proc "c" (self: ^ProcessInfo) -> c.ulonglong {
|
|
return msgSend(c.ulonglong, self, "physicalMemory")
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="systemUptime")
|
|
ProcessInfo_systemUptime :: proc "c" (self: ^ProcessInfo) -> TimeInterval {
|
|
return msgSend(TimeInterval, self, "systemUptime")
|
|
}
|
|
|
|
// Managing Activities
|
|
|
|
@(private)
|
|
log2 :: intrinsics.constant_log2
|
|
|
|
ActivityOptionsBits :: enum u64 {
|
|
IdleDisplaySleepDisabled = log2(1099511627776), // Require the screen to stay powered on.
|
|
IdleSystemSleepDisabled = log2(1048576), // Prevent idle sleep.
|
|
SuddenTerminationDisabled = log2(16384), // Prevent sudden termination.
|
|
AutomaticTerminationDisabled = log2(32768), // Prevent automatic termination.
|
|
AnimationTrackingEnabled = log2(35184372088832), // Track activity with an animation signpost interval.
|
|
TrackingEnabled = log2(70368744177664), // Track activity with a signpost interval.
|
|
UserInitiated = log2(16777215), // Performing a user-requested action.
|
|
UserInitiatedAllowingIdleSystemSleep = log2(15728639), // Performing a user-requested action, but the system can sleep on idle.
|
|
Background = log2(255), // Initiated some kind of work, but not as the direct result of a user request.
|
|
LatencyCritical = log2(1095216660480), // Requires the highest amount of timer and I/O precision available.
|
|
UserInteractive = log2(1095233437695), // Responding to user interaction.
|
|
}
|
|
ActivityOptions :: bit_set[ActivityOptionsBits; u64]
|
|
|
|
@(objc_type=ProcessInfo, objc_name="beginActivityWithOptions")
|
|
ProcessInfo_beginActivityWithOptions :: proc "c" (self: ^ProcessInfo, options: ActivityOptions, reason: ^String) -> ^ObjectProtocol {
|
|
return msgSend(^ObjectProtocol, self, "beginActivityWithOptions:reason:", options, reason)
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="endActivity")
|
|
ProcessInfo_endActivity :: proc "c" (self: ^ProcessInfo, activity: ^ObjectProtocol) {
|
|
msgSend(nil, self, "endActivity:", activity)
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="performActivityWithOptions")
|
|
ProcessInfo_performActivityWithOptions :: proc "c" (self: ^ProcessInfo, options: ActivityOptions, reason: ^String, block: proc "c" ()) {
|
|
msgSend(nil, self, "performActivityWithOptions:reason:usingBlock:", options, reason, block)
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="performExpiringActivityWithReason")
|
|
ProcessInfo_performExpiringActivityWithReason :: proc "c" (self: ^ProcessInfo, reason: ^String, block: proc "c" (expired: bool)) {
|
|
msgSend(nil, self, "performExpiringActivityWithReason:usingBlock:", reason, block)
|
|
}
|
|
|
|
// Getting the Thermal State
|
|
|
|
ProcessInfoThermalState :: enum c.long {
|
|
Nominal,
|
|
Fair,
|
|
Serious,
|
|
Critical,
|
|
}
|
|
|
|
@(objc_type=ProcessInfo, objc_name="thermalState")
|
|
ProcessInfo_thermalState :: proc "c" (self: ^ProcessInfo) -> ProcessInfoThermalState {
|
|
return msgSend(ProcessInfoThermalState, self, "thermalState")
|
|
}
|
|
|
|
// Determining Whether Low Power Mode is Enabled
|
|
|
|
@(objc_type=ProcessInfo, objc_name="isLowPowerModeEnabled")
|
|
ProcessInfo_isLowPowerModeEnabled :: proc "c" (self: ^ProcessInfo) -> bool {
|
|
return msgSend(bool, self, "isLowPowerModeEnabled")
|
|
}
|