forked from odin-lang/Odin
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
sys/info & odin report: rework macos version retrieval
- Loading branch information
Showing
6 changed files
with
324 additions
and
1,027 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package objc_Foundation | ||
|
||
@(objc_class="NSObjectProtocol") | ||
ObjectProtocol :: struct {using _: Object} | ||
// TODO: implement NSObjectProtocol |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,203 @@ | ||
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") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.