From 355aae6a6f325d8aa5e8ca71f37bce6da9196ccc Mon Sep 17 00:00:00 2001 From: Michael Dirks Date: Sat, 6 Jun 2015 18:45:48 +0200 Subject: [PATCH] Move Blitz files to the Blitz subfolder. --- BlitzSteam.bb => Blitz/BlitzSteam.bb | 16 + BlitzSteam.decls => Blitz/BlitzSteam.decls | 82 ++-- Blitz/BlitzSteamUtility.bb | 471 +++++++++++++++++++++ 3 files changed, 538 insertions(+), 31 deletions(-) rename BlitzSteam.bb => Blitz/BlitzSteam.bb (93%) rename BlitzSteam.decls => Blitz/BlitzSteam.decls (62%) create mode 100644 Blitz/BlitzSteamUtility.bb diff --git a/BlitzSteam.bb b/Blitz/BlitzSteam.bb similarity index 93% rename from BlitzSteam.bb rename to Blitz/BlitzSteam.bb index 4c0f67a..0a0deee 100644 --- a/BlitzSteam.bb +++ b/Blitz/BlitzSteam.bb @@ -1,3 +1,19 @@ +; BlitzSteam - Steam wrapper for Blitz. +; Copyright (C) 2015 Project Kube (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + ;---------------------------------------------------------------- ;-- Enumerations ;---------------------------------------------------------------- diff --git a/BlitzSteam.decls b/Blitz/BlitzSteam.decls similarity index 62% rename from BlitzSteam.decls rename to Blitz/BlitzSteam.decls index ecfe3df..f98759e 100644 --- a/BlitzSteam.decls +++ b/Blitz/BlitzSteam.decls @@ -1,3 +1,19 @@ +; BlitzSteam - Steam wrapper for Blitz. +; Copyright (C) 2015 Project Kube (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + .lib "BlitzSteam.dll" ; Steam ------------------------------------------------------------------------- BlitzSteam_Init%() @@ -7,43 +23,43 @@ BlitzSteam_RestartAppIfNecessary%(unOwnAppID%) BlitzSteam_SetMiniDumpComment(pchMsg$) BlitzSteam_WriteMiniDump(uStructuredExceptionCode%, pvExceptionInfo%, uBuildID%) BlitzSteam_WriteMiniDumpBank(uStructuredExceptionCode%, pvExceptionInfo*, uBuildID%) : "BlitzSteam_WriteMiniDump" +; -- Interfaces +BlitzSteamAppList%() +BlitzSteamApps%() +BlitzSteamClient%() +BlitzSteamController%() +BlitzSteamFriends%() +BlitzSteamHTTP%() +BlitzSteamHTMLSurface%() +BlitzSteamInventory%() +BlitzSteamMatchmaking%() +BlitzSteamMatchmakingServers%() +BlitzSteamMusic%() +BlitzSteamMusicRemote%() +BlitzSteamNetworking%() +BlitzSteamRemoteStorage%() +BlitzSteamScreenshots%() +BlitzSteamUGC%() +BlitzSteamUnifiedMessages%() +BlitzSteamUser%() +BlitzSteamUserStats%() +BlitzSteamUtils%() +BlitzSteamVideo%() ; -- Callbacks & Hooks BlitzSteam_RunCallbacks() BlitzSteam_RegisterCallback(pCallback%, iCallback%) BlitzSteam_UnregisterCallback(pCallback%) BlitzSteam_RegisterCallResult(pCallback%, hAPICall_L%, hAPICall_R%) BlitzSteam_UnregisterCallResult(pCallback%, hAPICall_L%, hAPICall_R%) -; -- Interfaces -BlitzSteamClient%() -BlitzSteamUser%() -BlitzSteamFriends%() -BlitzSteamUtils%() -BlitzSteamMatchmaking%() -BlitzSteamUserStats%() -BlitzSteamApps%() -BlitzSteamNetworking%() -BlitzSteamMatchmakingServers%() -BlitzSteamRemoteStorage%() -BlitzSteamScreenshots%() -BlitzSteamHTTP%() -BlitzSteamUnifiedMessages%() -BlitzSteamController%() -BlitzSteamUGC%() -BlitzSteamAppList%() -BlitzSteamMusic%() -BlitzSteamMusicRemote%() -BlitzSteamHTMLSurface%() -BlitzSteamInventory%() -BlitzSteamVideo%() ; SteamAppList ------------------------------------------------------------------ BlitzSteamAppList_GetNumInstalledApps%(lpSteamAppList%) -BlitzSteamAppList_GetInstalledApps%(lpSteamAppList%, pvecAppID%, unMaxIDs%) -BlitzSteamAppList_GetInstalledAppsBank%(lpSteamAppList%, pvecAppID*, unMaxIDs%) : "BlitzSteamAppList_GetInstalledApps" -BlitzSteamAppList_GetAppName%(lpSteamAppList%, nAppId%, pchName%, cchNameMax%) -BlitzSteamAppList_GetAppNameBank%(lpSteamAppList%, nAppId%, pchName*, cchNameMax%) : "BlitzSteamAppList_GetAppName" -BlitzSteamAppList_GetAppInstallDir%(lpSteamAppList%, nAppId%, pchDirectory%, cchDirectoryMax%) -BlitzSteamAppList_GetAppInstallDirBank%(lpSteamAppList%, nAppId%, pchDirectory*, cchDirectoryMax%) : "BlitzSteamAppList_GetAppInstallDir" +BlitzSteamAppList_GetInstalledAppsEx%(lpSteamAppList%, pvecAppID%, unMaxIDs%) : "BlitzSteamAppList_GetInstalledApps" +BlitzSteamAppList_GetInstalledApps%(lpSteamAppList%, pvecAppIDBank*, unMaxIDs%) +BlitzSteamAppList_GetAppNameEx%(lpSteamAppList%, nAppId%, pchName%, cchNameMax%) : "BlitzSteamAppList_GetAppName" +BlitzSteamAppList_GetAppName%(lpSteamAppList%, nAppId%, pchNameBank*, cchNameMax%) +BlitzSteamAppList_GetAppInstallDirEx%(lpSteamAppList%, nAppId%, pchDirectory%, cchDirectoryMax%) : "BlitzSteamAppList_GetAppInstallDir" +BlitzSteamAppList_GetAppInstallDir%(lpSteamAppList%, nAppId%, pchDirectoryBank*, cchDirectoryMax%) BlitzSteamAppList_GetAppBuildId%(lpSteamAppList%, nAppId%) ; SteamApps --------------------------------------------------------------------- @@ -57,16 +73,20 @@ BlitzSteamApps_IsSubscribedApp%(lpSteamApps%, appID%) BlitzSteamApps_IsDlcInstalled%(lpSteamApps%, appID%) BlitzSteamApps_GetEarliestPurchaseUnixTime%(lpSteamApps%, appID%) BlitzSteamApps_IsSubscribedFromFreeWeekend%(lpSteamApps%) +BlitzSteamApps_GetDLCCount%(lpSteamApps%) BlitzSteamApps_GetDLCDataByIndexEx%(lpSteamApps%, iDLC%, pAppId%, pbAvailable%, pchName%, cchNameBufferSize%) : "BlitzSteamApps_GetDLCDataByIndex" -BlitzSteamApps_GetDLCDataByIndex%(lpSteamApps%, iDLC%, pAppId%, pbAvailable*, pchName*, cchNameBufferSize%) +BlitzSteamApps_GetDLCDataByIndex%(lpSteamApps%, iDLC%, pAppIdBank*, pbAvailableBank*, pchNameBank*, cchNameBufferSize%) BlitzSteamApps_InstallDLC(lpSteamApps%, nAppID%) BlitzSteamApps_UninstallDLC(lpSteamApps%, nAppID%) BlitzSteamApps_RequestAppProofOfPurchaseKey(lpSteamApps%, nAppID%) BlitzSteamApps_GetCurrentBetaNameEx%(lpSteamApps%, pchName%, cchNameBufferSize%) : "BlitzSteamApps_GetCurrentBetaName" -BlitzSteamApps_GetCurrentBetaName%(lpSteamApps%, pchName*, cchNameBufferSize%) +BlitzSteamApps_GetCurrentBetaName%(lpSteamApps%, pchNameBank*, cchNameBufferSize%) BlitzSteamApps_MarkContentCorrupt%(lpSteamApps%, bMissingFilesOnly%) BlitzSteamApps_GetInstalledDepotsEx%(lpSteamApps%, nAppID%, pvecDepots%, cMaxDepots%) : "BlitzSteamApps_GetInstalledDepots" -BlitzSteamApps_GetInstalledDepots%(lpSteamApps%, nAppID%, pvecDepots%, cMaxDepots%) +BlitzSteamApps_GetInstalledDepots%(lpSteamApps%, nAppID%, pvecDepotsBank*, cMaxDepots%) +BlitzSteamApps_GetAppInstallDirEx%(lpSteamApps%, nAppID%, pchFolder%, cchFolderBufferSize%) : "BlitzSteamApps_GetAppInstallDir" +BlitzSteamApps_GetAppInstallDir%(lpSteamApps%, nAppID%, pchFolderBank*, cchFolderBufferSize%) +BlitzSteamApps_IsAppInstalled%(lpSteamApps%, nAppID%) BlitzSteamApps_GetAppOwner%(lpSteamApps%) BlitzSteamApps_GetLaunchQueryParam$(lpSteamApps%, pchKey$) BlitzSteamApps_GetDlcDownloadProgress%(lpSteamApps%, nAppID%, pOutputBank*) diff --git a/Blitz/BlitzSteamUtility.bb b/Blitz/BlitzSteamUtility.bb new file mode 100644 index 0000000..39b75a2 --- /dev/null +++ b/Blitz/BlitzSteamUtility.bb @@ -0,0 +1,471 @@ +; BlitzSteam - Steam wrapper for Blitz. +; Copyright (C) 2015 Project Kube (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +;---------------------------------------------------------------- +; -- Constants +;---------------------------------------------------------------- +Const BSU_NAME_LENGTH = 4096 +Const BSU_INSTALLDIR_LENGTH = 4096 +Const BSU_APPID_COUNT = 4096 +Const BSU_INSTALLEDDEPOTS_COUNT = 4096 + +;---------------------------------------------------------------- +; -- Globals +;---------------------------------------------------------------- +Global BSUInitialized = False +Global BSUIsSteamRunning% = False +; -- Interfaces +Global BSUAppList%, BSUApps%, BSUClient%, BSUController% +Global BSUFriends%, BSUHTTP%, BSUHTMLSurface%, BSUInventory% +Global BSUMatchmaking%, BSUMatchmakingServers%, BSUMusic% +Global BSUMusicRemote%, BSUNetworking%, BSURemoteStorage% +Global BSUScreenshots%, BSUUGC%, BSUUnifiedMessages%, BSUUser% +Global BSUUserStats%, BSUUtils%, BSUVideo% + +;---------------------------------------------------------------- +; -- Types +;---------------------------------------------------------------- +Type BSU_App + Field AppId% + Field Name$ + Field InstallDir$ +End Type + +Type BSU_DLC + Field AppId% + Field Available% + Field Name$ +End Type + +Type BSU_Depot + Field DepotId% +End Type + +Type BSU_DLCDownloadProgress + Field unBytesDownloaded_L + Field unBytesDownloaded_R + Field unBytesTotal_L + Field unBytesTotal_R +End Type + +;---------------------------------------------------------------- +; -- Functions +;---------------------------------------------------------------- +; -- Utility +; Writes a C-String value to a Bank. +; Returns amount of bytes written. +Function BSU_PokeCString%(Bank%, Pos%, Value$) + If Bank Then + Local BankSz = BankSize(Bank) + + If Pos < 0 Then Pos = 0 + If Pos >= BankSz Then Pos = BankSz - 1 + + Local ValuePos, ValueLen = Len(Value) + For ValuePos = 1 To ValueLen + ; Don't write over the edge, we still need space for the 0-byte + If (Pos + ValuePos) >= (BankSz - 1) Then Exit + + PokeByte Bank, Pos + ValuePos, Asc(Mid(Value, ValuePos, 1)) + Next + PokeByte Bank, Pos + ValuePos, 0 + Return ValuePos + EndIf +End Function + +; Reads a C-String value from a Bank. +; Returns read C-String +Function BSU_PeekCString$(Bank%, Pos%) + If Bank Then + Local BankSz = BankSize(Bank) + + If Pos < 0 Then Pos = 0 + If Pos >= BankSz Then Pos = BankSz - 1 + + Local OutStr$, OutLen = (BankSz - Pos) + Local BankPos + For BankPos = 0 To OutLen + If (Pos + BankPos) >= BankSz Then Exit + + Local Value = PeekByte(Bank, Pos + BankPos) + + If Value = 0 Then + Exit + Else + OutStr=OutStr+Chr(Value) + EndIf + Next + Return OutStr + EndIf +End Function + +; -- Steam +Function BSU_Init() + BSUIsSteamRunning = BlitzSteam_IsSteamRunning() + If BSUIsSteamRunning Then + BlitzSteam_Init() + + BSUAppList = BlitzSteamAppList() + BSUApps = BlitzSteamApps() + BSUClient = BlitzSteamClient() + BSUController = BlitzSteamController() + BSUFriends = BlitzSteamFriends() + BSUHTTP = BlitzSteamHTTP() + BSUHTMLSurface = BlitzSteamHTMLSurface() + BSUInventory = BlitzSteamInventory() + BSUMatchmaking = BlitzSteamMatchmaking() + BSUMatchmakingServers = BlitzSteamMatchmakingServers() + BSUMusic = BlitzSteamMusic() + BSUMusicRemote = BlitzSteamMusicRemote() + BSUNetworking = BlitzSteamNetworking() + BSURemoteStorage = BlitzSteamRemoteStorage() + BSUScreenshots = BlitzSteamScreenshots() + BSUUGC = BlitzSteamUGC() + BSUUnifiedMessages = BlitzSteamUnifiedMessages() + BSUUser = BlitzSteamUser() + BSUUserStats = BlitzSteamUserStats() + BSUUtils = BlitzSteamUtils() + BSUVideo = BlitzSteamVideo() + + BSUInitialized = True + EndIf +End Function + +Function BSU_Shutdown() + If BSUIsSteamRunning + BlitzSteam_Shutdown() + BSUAppList=0 + BSUApps=0 + BSUClient=0 + BSUController=0 + BSUFriends=0 + BSUHTTP=0 + BSUHTMLSurface=0 + BSUInitialized=0 + BSUMatchmaking=0 + BSUMatchmakingServers=0 + BSUMusic=0 + BSUMusicRemote=0 + BSUNetworking=0 + BSURemoteStorage=0 + BSUScreenshots=0 + BSUUGC=0 + BSUUnifiedMessages=0 + BSUUser=0 + BSUUserStats=0 + BSUUtils=0 + BSUVideo=0 + + BSUInitialized = False + EndIf +End Function + +; -- SteamAppList +Function BSUAppList_GetInstalledApps(BankAppIdsStorage=0, BankAppNameStorage=0, BankAppInstallDirStorage=0) + Local BankAppIds, BankAppIdsSz = BSU_APPID_COUNT + Local BankAppName, BankAppNameSz = BSU_NAME_LENGTH + Local BankAppInstallDir, BankAppInstallDirSz = BSU_INSTALLDIR_LENGTH + Local AppCount%, InstalledApp.BSU_App + + If BSUInitialized Then + ; Clear Installed App List + Delete Each BSU_App + + ; Early-Exit to not waste time. + If BlitzSteamAppList_GetNumInstalledApps(BSUApps) = 0 Then Return + + If BankAppIdsStorage = 0 + ; Create Temporary storage for AppIds. + BankAppIds = CreateBank(BankAppIdsSz * 4) + Else + ; Reuse existing Bank. + BankAppIds = BankAppIdsStorage + BankAppIdsSz = Floor(BankSize(BankAppIds) / 4) + EndIf + + ; Request installed apps from Steam. + AppCount = BlitzSteamAppList_GetInstalledApps(BSUAppList, BankAppIds, BankAppIdsSz) + + ; We don't need to do this if we don't actually have any apps returned. + If AppCount > 0 Then + If BankAppNameStorage = 0 Then + ; Create temporary storage for name. + BankAppName = CreateBank(BankAppNameSz) + Else + BankAppName = BankAppNameStorage + BankAppNameSz = BankSize(BankAppName) + EndIf + If BankAppInstallDirStorage = 0 Then + ; Create temporary storage for installdir. + BankAppInstallDir = CreateBank(BankAppInstallDirSz) + Else + BankAppInstallDir = BankAppInstallDirStorage + BankAppInstallDirSz = BankSize(BankAppInstallDir) + EndIf + + ; Index all apps. + Local AppIndex + For AppIndex = 1 To AppCount + InstalledApp.BSU_App = New BSU_App + InstalledApp\AppId = PeekInt(BankAppIds, AppIndex * 4) + InstalledApp\Name = BSUAppList_GetAppName(InstalledApp\AppId, BankAppName) + InstalledApp\InstallDir = BSUAppList_GetInstallDir(InstalledApp\AppId, BankAppInstallDir) + Next + + ; Free temporary storage for name and installdir. + If BankAppInstallDirStorage = 0 Then FreeBank BankAppInstallDir + If BankAppNameStorage = 0 FreeBank BankAppName + EndIf + + ; Free temporary storage for AppIds. + If BankAppIdsStorage = 0 FreeBank BankAppIds + EndIf +End Function + +Function BSUAppList_GetAppName$(AppID%, BankStorage=0) + Local Bank, BankSz = BSU_NAME_LENGTH + Local AppName$ + + If BSUInitialized Then + If BankStorage = 0 Then + ; Create temporary storage. + Bank = CreateBank(BankSz) + Else + ; Reuse existing Bank. + Bank = BankStorage + BankSz = BankSize(Bank) + EndIf + + ; Request App name from Steam. + BlitzSteamAppList_GetAppName(BSUAppList, AppID, Bank, BankSz) + + ; Read returned C-String from Bank. + AppName$ = BSU_PeekCString(Bank, 0) + + ; Free temporary storage. + If BankStorage = 0 Then FreeBank Bank + EndIf + + ; Return name read. + Return AppName +End Function + +Function BSUAppList_GetInstallDir$(AppID%, BankStorage=0) + Local Bank, BankSz = BSU_INSTALLDIR_LENGTH + Local AppInstallDir$ + + If BSUInitialized Then + If BankStorage = 0 Then + ; Create temporary storage. + Bank = CreateBank(BankSz) + Else + ; Reuse existing Bank. + Bank = BankStorage + BankSz = BankSize(Bank) + EndIf + + ; Request App name from Steam. + BlitzSteamAppList_GetAppInstallDir(BSUAppList, AppID, Bank, BankSz) + + ; Read returned C-String from Bank. + AppInstallDir$ = BSU_PeekCString(Bank, 0) + + ; Free temporary storage. + If BankStorage = 0 Then FreeBank Bank + EndIf + + ; Return name read. + Return AppInstallDir +End Function + +; -- SteamApps +Function BSUApps_GetDLCData(BankAppIdStorage=0, BankAvailableStorage=0, BankNameStorage=0) + Local BankAppId%, BankAvailable% + Local BankName%, BankNameSz% = BSU_NAME_LENGTH + Local DLCCount% = 0 + + If BSUInitialized Then + Delete Each BSU_DLC + + DLCCount = BlitzSteamApps_GetDLCCount(BSUApps) + If DLCCount > 0 + If BankAppIdStorage = 0 Then + ; Create temporary storage for AppId. + BankAppId = CreateBank(4) + Else + ; Reuse existing storage. + BankAppId = BankAppIdStorage + EndIf + + If BankAvailableStorage = 0 Then + ; Create temporary storage for Availability. + BankAvailable = CreateBank(4) + Else + ; Reuse existing storage. + BankAvailable = BankAvailableStorage + EndIf + + If BankNameStorage = 0 Then + ; Create temporary storage for Availability. + BankName = CreateBank(BankNameSz) + Else + ; Reuse existing storage. + BankName = BankNameStorage + BankNameSz = BankSize(BankName) + EndIf + + Local DLCIndex% + For DLCIndex = 0 To DLCCount - 1 + BSUApps_GetDLCDataByIndex(DLCIndex, BankAppId, BankAvailable, BankName) + Next + + ; Free temporary storages. + If BankNameStorage = 0 Then FreeBank BankName + If BankAvailableStorage = 0 Then FreeBank BankAvailable + If BankAppIdStorage = 0 Then FreeBank BankAppId + EndIf + EndIf +End Function + +Function BSUApps_GetDLCDataByIndex.BSU_DLC(iDLC%, BankAppIdStorage=0, BankAvailableStorage=0, BankNameStorage=0) + Local BankAppId%, BankAvailable% + Local BankName%, BankNameSz% = BSU_NAME_LENGTH + Local DLC.BSU_DLC + + If BSUInitialized Then + If BankAppIdStorage = 0 Then + ; Create temporary storage for AppId. + BankAppId = CreateBank(4) + Else + ; Reuse existing storage. + BankAppId = BankAppIdStorage + EndIf + + If BankAvailableStorage = 0 Then + ; Create temporary storage for Availability. + BankAvailable = CreateBank(4) + Else + ; Reuse existing storage. + BankAvailable = BankAvailableStorage + EndIf + + If BankNameStorage = 0 Then + ; Create temporary storage for Availability. + BankName = CreateBank(BankNameSz) + Else + ; Reuse existing storage. + BankName = BankNameStorage + BankNameSz = BankSize(BankName) + EndIf + + ; Request DLC Data from Steam. + If BlitzSteamApps_GetDLCDataByIndex(BSUApps, iDLC, BankAppId, BankAvailable, BankName, BankNameSz) + ; Create a result DLC object. + DLC.BSU_DLC = New BSU_DLC + DLC\AppId = PeekInt(BankAppId, 0) + DLC\Available = PeekInt(BankAvailable, 0) + DLC\Name = BSU_PeekCString(BankName, 0) + EndIf + + ; Free temporary storages. + If BankNameStorage = 0 Then FreeBank BankName + If BankAvailableStorage = 0 Then FreeBank BankAvailable + If BankAppIdStorage = 0 Then FreeBank BankAppId + EndIf + + ; Return the result. + Return DLC +End Function + +Function BSUApps_GetCurrentBetaName$(BankNameStorage=0) + Local BankName, BankNameSz = BSU_NAME_LENGTH + Local BetaName$ = "" + + If BSUInitialized Then + If BankNameStorage = 0 Then + ; Create temporary storage for name. + BankName = CreateBank(BankNameSz) + Else + ; Reuse existing storage. + BankName = BankNameStorage + BankNameSz = BankSize(BankName) + EndIf + + ; Request beta name from Steam. + BlitzSteamApps_GetCurrentBetaName(BSUApps, BankName, BankNameSz) + + ; Read returned name. + BetaName = BSU_PeekCString(BankName, 0) + + ; Free temporary storage. + If BankNameStorage = 0 Then FreeBank BankName + EndIf + + ; Return the result. + Return BetaName +End Function + +Function BSUApps_GetInstalledDepots(nAppID%, BankDepotStorage=0) + Local BankDepot, BankDepotSz = BSU_INSTALLEDDEPOTS_COUNT + Local DepotCount + + If BSUInitialized Then + Delete Each BSU_Depot + + If BankDepotStorage = 0 Then + ; Create temporary storage. + BankDepot = CreateBank(BankDepotSz * 4) + Else + ; Reuse existing storage. + BankDepot = BankDepotStorage + BankDepotSz = BankSize(BankDepot) / 4 + EndIf + + ; Request depots from Steam. + DepotCount = BlitzSteamApps_GetInstalledDepots(BSUApps, nAppID, BankDepot, BankDepotSz) + + ; Read returned depots into objects. + Local DepotIndex + For DepotIndex = 0 To DepotCount - 1 + Local Depot.BSU_Depot = New BSU_Depot + Depot\DepotId = PeekInt(BankDepot, DepotIndex * 4) + Next + + ; Free temporary storage. + If BankDepotStorage = 0 Then FreeBank BankDepot + EndIf +End Function + +Function BSUApps_GetAppInstallDir$(nAppID%, BankInstallDirStorage=0) + Local BankInstallDir, BankInstallDirSz = BSU_INSTALLDIR_LENGTH + Local InstallDir$ + + If BSUInitialized Then + If BankInstallDirStorage = 0 Then + ; Create temporary storage. + Else + ; Reuse existing storage. + BankInstallDir = BankInstallDirStorage + BankInstallDirSz = + EndIf + EndIf + + Return InstallDir$ +End Function + +;~IDEal Editor Parameters: +;~F#18#1E#24#35#4A#63#82#A0#DD#F9#116#146#178 +;~C#Blitz3D \ No newline at end of file