From 81c1746e8550682b581548e262660271b5d4d6dd Mon Sep 17 00:00:00 2001 From: hgn Date: Sat, 6 May 2023 00:30:44 +0100 Subject: [PATCH] Various things but also major error --- vg_console.h | 13 +- vg_imgui.h | 56 ++++-- vg_io.h | 8 +- vg_steam.h | 389 +++++++++++++++++++------------------- vg_steam_auth.h | 30 +-- vg_steam_friends.h | 2 +- vg_steam_http.h | 12 +- vg_steam_networking.h | 40 ++-- vg_steam_remote_storage.h | 179 +++++++++++++++++- vg_steam_ugc.h | 169 +++++++++-------- vg_steam_user_stats.h | 21 +- vg_steam_utils.h | 10 +- vg_tex.h | 11 ++ 13 files changed, 575 insertions(+), 365 deletions(-) diff --git a/vg_console.h b/vg_console.h index 66e7f5f..c25dc6f 100644 --- a/vg_console.h +++ b/vg_console.h @@ -677,12 +677,15 @@ VG_STATIC void _vg_console_draw(void) /* * Input area */ - vg_ui.textbuf_on_up = _vg_console_on_up; - vg_ui.textbuf_on_down = _vg_console_on_down; - vg_ui.textbuf_on_change = _vg_console_on_update; - vg_ui.textbuf_on_enter = _vg_console_on_enter; + + struct ui_textbox_callbacks callbacks = { + .up = _vg_console_on_up, + .down = _vg_console_on_down, + .change = _vg_console_on_update, + .enter = _vg_console_on_enter + }; ui_textbox( rect_input, vg_console.input, vg_list_size(vg_console.input), - UI_TEXTBOX_AUTOFOCUS ); + UI_TEXTBOX_AUTOFOCUS, &callbacks ); /* * suggestions diff --git a/vg_imgui.h b/vg_imgui.h index bb98812..75f441e 100644 --- a/vg_imgui.h +++ b/vg_imgui.h @@ -6,6 +6,10 @@ * 1. layout is defined by subdividing * 2. a parent node should never be resized by the content after creation * 3. when the ui is in an interactive state, no controls should ever move + * 4. controls directly reference a memory location and use that as their + * unique id + * 5. a maximum of ONE control per memory location can be drawn at any given + * point. */ #ifndef VG_IMGUI_H @@ -105,13 +109,16 @@ struct{ int cursor_user, cursor_pos; u32 len; u32 flags; + + struct ui_textbox_callbacks{ + void (*enter)( char *, u32 ), + (*up)( char *, u32 ), + (*down)( char *, u32 ), + (*change)( char *, u32 ); + } + callbacks; } textbox; - - void (*textbuf_on_enter) ( char *buf, u32 len ); - void (*textbuf_on_up) ( char *buf, u32 len ); - void (*textbuf_on_down) ( char *buf, u32 len ); - void (*textbuf_on_change)( char *buf, u32 len ); GLuint tex_glyphs, vao, vbo, ebo; @@ -1265,8 +1272,8 @@ static void _ui_textbox_up(void) } } else{ - if( vg_ui.textbuf_on_up ){ - vg_ui.textbuf_on_up( vg_ui.textbuf, vg_ui.textbox.len ); + if( vg_ui.textbox.callbacks.up ){ + vg_ui.textbox.callbacks.up( vg_ui.textbuf, vg_ui.textbox.len ); } } } @@ -1320,8 +1327,8 @@ static void _ui_textbox_down(void) vg_ui.textbox.cursor_pos = line_below_begin+offset; } else{ - if( vg_ui.textbuf_on_down ){ - vg_ui.textbuf_on_down( vg_ui.textbuf, vg_ui.textbox.len ); + if( vg_ui.textbox.callbacks.down ){ + vg_ui.textbox.callbacks.down( vg_ui.textbuf, vg_ui.textbox.len ); } } } @@ -1345,8 +1352,9 @@ static void _ui_textbox_backspace(void) vg_ui.textbox.cursor_user = _ui_textbox_delete_char( -1 ); vg_ui.textbox.cursor_pos = vg_ui.textbox.cursor_user; - if( vg_ui.textbuf_on_change ) - vg_ui.textbuf_on_change( vg_ui.textbuf, vg_ui.textbox.len ); + if( vg_ui.textbox.callbacks.change ){ + vg_ui.textbox.callbacks.change( vg_ui.textbuf, vg_ui.textbox.len ); + } } } @@ -1356,8 +1364,9 @@ static void _ui_textbox_delete(void) vg_ui.textbox.cursor_user = _ui_textbox_delete_char( 1 ); vg_ui.textbox.cursor_pos = vg_ui.textbox.cursor_user; - if( vg_ui.textbuf_on_change ) - vg_ui.textbuf_on_change( vg_ui.textbuf, vg_ui.textbox.len ); + if( vg_ui.textbox.callbacks.change ){ + vg_ui.textbox.callbacks.change( vg_ui.textbuf, vg_ui.textbox.len ); + } } } @@ -1408,8 +1417,8 @@ static void _ui_textbox_enter(void) ui_defocus_all(); } - if( vg_ui.textbuf_on_enter ){ - vg_ui.textbuf_on_enter( vg_ui.textbuf, vg_ui.textbox.len ); + if( vg_ui.textbox.callbacks.enter ){ + vg_ui.textbox.callbacks.enter( vg_ui.textbuf, vg_ui.textbox.len ); } } } @@ -1499,7 +1508,8 @@ static int _ui_textbox_run_remaining( int index[3], int wrap_length ) return printed_chars+1; } -static int ui_textbox( ui_rect rect, char *buf, u32 len, u32 flags ) +static int ui_textbox( ui_rect rect, char *buf, u32 len, u32 flags, + struct ui_textbox_callbacks *callbacks ) { int clickup= ui_click_up(UI_MOUSE_LEFT), click = ui_clicking(UI_MOUSE_LEFT) | clickup, @@ -1656,6 +1666,16 @@ static int ui_textbox( ui_rect rect, char *buf, u32 len, u32 flags ) vg_ui.textbox.cursor_pos = 0; vg_ui.textbox.cursor_user = 0; + if( callbacks ){ + vg_ui.textbox.callbacks = *callbacks; + } + else{ + vg_ui.textbox.callbacks.change = NULL; + vg_ui.textbox.callbacks.down = NULL; + vg_ui.textbox.callbacks.up = NULL; + vg_ui.textbox.callbacks.enter = NULL; + } + SDL_StartTextInput(); } } @@ -1757,8 +1777,8 @@ VG_STATIC void ui_proc_utf8( const char *text ) ptr ++; } - if( vg_ui.textbuf_on_change ){ - vg_ui.textbuf_on_change( vg_ui.textbuf, vg_ui.textbox.len ); + if( vg_ui.textbox.callbacks.change ){ + vg_ui.textbox.callbacks.change( vg_ui.textbuf, vg_ui.textbox.len ); } } } diff --git a/vg_io.h b/vg_io.h index 640ceae..af1554b 100644 --- a/vg_io.h +++ b/vg_io.h @@ -15,11 +15,17 @@ #define _TINYDIR_FREE(_size) #include "submodules/tinydir/tinydir.h" - #include + +/* + * Create directory and silently ignore errors for already exists + */ VG_STATIC int vg_mkdir( const char *path ) { if( mkdir( path, S_IRWXU|S_IRWXG|S_IWOTH|S_IXOTH ) ){ + if( errno == EEXIST ) + return 1; + vg_error( "Failed to create directory: %s\n", path ); return 0; } diff --git a/vg_steam.h b/vg_steam.h index 01c448a..2ca5280 100644 --- a/vg_steam.h +++ b/vg_steam.h @@ -25,12 +25,12 @@ #pragma pack( push, 8 ) #endif -typedef i32 HSteamPipe; -typedef i32 HSteamUser; +typedef i32 HSteamPipe; +typedef i32 HSteamUser; typedef int E_iCallBack_t; -typedef u64 u64_steamid; +typedef u64 u64_steamid; typedef u64 SteamAPICall_t; typedef u32 AppId_t; @@ -41,6 +41,7 @@ const DepotId_t k_uDepotIdInvalid = 0x0; typedef u32 RTime32; typedef u32 AccountID_t; +typedef i8 steamapi_bool; enum { k_iSteamUserCallbacks = 100 }; enum { k_iSteamGameServerCallbacks = 200 }; @@ -109,275 +110,275 @@ enum { k_iSteamChatCallbacks = 5900 }; // General result codes typedef enum EResult { - k_EResultNone = 0, // no result - k_EResultOK = 1, // success - k_EResultFail = 2, // generic failure - k_EResultNoConnection = 3, // no/failed network connection -// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed - k_EResultInvalidPassword = 5, // password/ticket is invalid - k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere - k_EResultInvalidProtocolVer = 7, // protocol version is incorrect - k_EResultInvalidParam = 8, // a parameter is incorrect - k_EResultFileNotFound = 9, // file was not found - k_EResultBusy = 10, // called method busy - action not taken - k_EResultInvalidState = 11, // called object was in an invalid state - k_EResultInvalidName = 12, // name is invalid - k_EResultInvalidEmail = 13, // email is invalid - k_EResultDuplicateName = 14, // name is not unique - k_EResultAccessDenied = 15, // access is denied - k_EResultTimeout = 16, // operation timed out - k_EResultBanned = 17, // VAC2 banned - k_EResultAccountNotFound = 18, // account not found - k_EResultInvalidSteamID = 19, // steamID is invalid - k_EResultServiceUnavailable = 20,// The requested service is currently + k_EResultNone = 0, // no result + k_EResultOK = 1, // success + k_EResultFail = 2, // generic failure + k_EResultNoConnection = 3, // no/failed network connection +// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed + k_EResultInvalidPassword = 5, // password/ticket is invalid + k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere + k_EResultInvalidProtocolVer = 7, // protocol version is incorrect + k_EResultInvalidParam = 8, // a parameter is incorrect + k_EResultFileNotFound = 9, // file was not found + k_EResultBusy = 10, // called method busy - action not taken + k_EResultInvalidState = 11, // called object was in an invalid state + k_EResultInvalidName = 12, // name is invalid + k_EResultInvalidEmail = 13, // email is invalid + k_EResultDuplicateName = 14, // name is not unique + k_EResultAccessDenied = 15, // access is denied + k_EResultTimeout = 16, // operation timed out + k_EResultBanned = 17, // VAC2 banned + k_EResultAccountNotFound = 18, // account not found + k_EResultInvalidSteamID = 19, // steamID is invalid + k_EResultServiceUnavailable = 20,// The requested service is currently // unavailable - k_EResultNotLoggedOn = 21, // The user is not logged on - k_EResultPending = 22, // Request is pending (may be in process, or + k_EResultNotLoggedOn = 21, // The user is not logged on + k_EResultPending = 22, // Request is pending (may be in process, or // waiting on third party) - k_EResultEncryptionFailure = 23, // Encryption or Decryption failed - k_EResultInsufficientPrivilege = 24,// Insufficient privilege - k_EResultLimitExceeded = 25, // Too much of a good thing - k_EResultRevoked = 26, // Access has been revoked (used for revoked + k_EResultEncryptionFailure = 23, // Encryption or Decryption failed + k_EResultInsufficientPrivilege = 24,// Insufficient privilege + k_EResultLimitExceeded = 25, // Too much of a good thing + k_EResultRevoked = 26, // Access has been revoked (used for revoked // guest passes) - k_EResultExpired = 27, // License/Guest pass the user is trying to + k_EResultExpired = 27, // License/Guest pass the user is trying to // access is expired - k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by + k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by // account, cannot be acked again - k_EResultDuplicateRequest = 29, // The request is a duplicate and the action + k_EResultDuplicateRequest = 29, // The request is a duplicate and the action // has already occurred in the past, ignored // this time - k_EResultAlreadyOwned = 30, // All the games in this guest pass + k_EResultAlreadyOwned = 30, // All the games in this guest pass // redemption request are already owned by // the user - k_EResultIPNotFound = 31, // IP address not found - k_EResultPersistFailed = 32, // failed to write change to the data store - k_EResultLockingFailed = 33, // failed to acquire access lock for this + k_EResultIPNotFound = 31, // IP address not found + k_EResultPersistFailed = 32, // failed to write change to the data store + k_EResultLockingFailed = 33, // failed to acquire access lock for this // operation - k_EResultLogonSessionReplaced = 34, - k_EResultConnectFailed = 35, - k_EResultHandshakeFailed = 36, - k_EResultIOFailure = 37, - k_EResultRemoteDisconnect = 38, - k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart + k_EResultLogonSessionReplaced = 34, + k_EResultConnectFailed = 35, + k_EResultHandshakeFailed = 36, + k_EResultIOFailure = 37, + k_EResultRemoteDisconnect = 38, + k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart // requested - k_EResultBlocked = 40, // a user didn't allow it - k_EResultIgnored = 41, // target is ignoring sender - k_EResultNoMatch = 42, // nothing matching the request found - k_EResultAccountDisabled = 43, - k_EResultServiceReadOnly = 44, // this service is not accepting content + k_EResultBlocked = 40, // a user didn't allow it + k_EResultIgnored = 41, // target is ignoring sender + k_EResultNoMatch = 42, // nothing matching the request found + k_EResultAccountDisabled = 43, + k_EResultServiceReadOnly = 44, // this service is not accepting content // changes right now - k_EResultAccountNotFeatured = 45, // account doesn't have value, so this + k_EResultAccountNotFeatured = 45, // account doesn't have value, so this // feature isn't available - k_EResultAdministratorOK = 46, // allowed to take this action, but only + k_EResultAdministratorOK = 46, // allowed to take this action, but only // because requester is admin - k_EResultContentVersion = 47, // A Version mismatch in content + k_EResultContentVersion = 47, // A Version mismatch in content // transmitted within the Steam protocol. - k_EResultTryAnotherCM = 48, // The current CM can't service the user + k_EResultTryAnotherCM = 48, // The current CM can't service the user // making a request, user should try // another. - k_EResultPasswordRequiredToKickSession = 49, // You are already logged in + k_EResultPasswordRequiredToKickSession = 49, // You are already logged in // elsewhere, this cached credential // login has failed. - k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in + k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in // elsewhere, you must wait - k_EResultSuspended = 51, // Long running operation (content download) + k_EResultSuspended = 51, // Long running operation (content download) // suspended/paused - k_EResultCancelled = 52, // Operation canceled (typically by user: + k_EResultCancelled = 52, // Operation canceled (typically by user: // content download) - k_EResultDataCorruption = 53, // Operation canceled because data is ill + k_EResultDataCorruption = 53, // Operation canceled because data is ill // formed or unrecoverable - k_EResultDiskFull = 54, // Operation canceled - not enough disk space. - k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed - k_EResultPasswordUnset = 56, // Password could not be verified as it's + k_EResultDiskFull = 54, // Operation canceled - not enough disk space. + k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed + k_EResultPasswordUnset = 56, // Password could not be verified as it's // unset server side - k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) + k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) // is not linked to a Steam account - k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid - k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, + k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid + k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, // Facebook...) is already linked to some other account, // must explicitly request to replace/delete the link first - k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict + k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict // between the local and remote files - k_EResultIllegalPassword = 61, // The requested new password is not legal - k_EResultSameAsPreviousValue = 62,// new value is the same as the old one ( + k_EResultIllegalPassword = 61, // The requested new password is not legal + k_EResultSameAsPreviousValue = 62,// new value is the same as the old one ( // secret question and answer ) - k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor + k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor // authentication failure - k_EResultCannotUseOldPassword = 64, // The requested new password is not + k_EResultCannotUseOldPassword = 64, // The requested new password is not // legal - k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code + k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code // invalid - k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd + k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd // factor auth failure - and no mail // has been sent - k_EResultHardwareNotCapableOfIPT = 67, - k_EResultIPTInitError = 68, - k_EResultParentalControlRestricted = 69,// operation failed due to parental + k_EResultHardwareNotCapableOfIPT = 67, + k_EResultIPTInitError = 68, + k_EResultParentalControlRestricted = 69,// operation failed due to parental // control restrictions for current // user - k_EResultFacebookQueryError = 70, // Facebook query returned an error - k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth + k_EResultFacebookQueryError = 70, // Facebook query returned an error + k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth // code expired - k_EResultIPLoginRestrictionFailed = 72, - k_EResultAccountLockedDown = 73, - k_EResultAccountLogonDeniedVerifiedEmailRequired = 74, - k_EResultNoMatchingURL = 75, - k_EResultBadResponse = 76, // parse failure, missing field, etc. - k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action + k_EResultIPLoginRestrictionFailed = 72, + k_EResultAccountLockedDown = 73, + k_EResultAccountLogonDeniedVerifiedEmailRequired = 74, + k_EResultNoMatchingURL = 75, + k_EResultBadResponse = 76, // parse failure, missing field, etc. + k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action // until they re-enter their password - k_EResultValueOutOfRange = 78, // the value entered is outside the + k_EResultValueOutOfRange = 78, // the value entered is outside the // acceptable range - k_EResultUnexpectedError = 79, // something happened that we didn't expect + k_EResultUnexpectedError = 79, // something happened that we didn't expect // to ever happen - k_EResultDisabled = 80, // The requested service has been configured + k_EResultDisabled = 80, // The requested service has been configured // to be unavailable - k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG + k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG // server are not valid ! - k_EResultRestrictedDevice = 82, // The device being used is not allowed + k_EResultRestrictedDevice = 82, // The device being used is not allowed // to perform this action - k_EResultRegionLocked = 83, // The action could not be complete + k_EResultRegionLocked = 83, // The action could not be complete // because it is region restricted - k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try + k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try // again later, different from // k_EResultLimitExceeded which may be // permanent - k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to + k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to // login - k_EResultItemDeleted = 86, // The thing we're trying to access has been + k_EResultItemDeleted = 86, // The thing we're trying to access has been // deleted - k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to + k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to // throttle response to possible // attacker - k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch - k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for + k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch + k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for // two-factor didn't match - k_EResultAccountAssociatedToMultiplePartners = 90, // account has been + k_EResultAccountAssociatedToMultiplePartners = 90, // account has been // associated with multiple partners - k_EResultNotModified = 91, // data not modified - k_EResultNoMobileDevice = 92, // the account does not have a mobile + k_EResultNotModified = 91, // data not modified + k_EResultNoMobileDevice = 92, // the account does not have a mobile // device associated with it - k_EResultTimeNotSynced = 93, // the time presented is out of range or + k_EResultTimeNotSynced = 93, // the time presented is out of range or // tolerance - k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, + k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, // etc.) - k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource - k_EResultAccountActivityLimitExceeded = 96,// Too many changes to + k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource + k_EResultAccountActivityLimitExceeded = 96,// Too many changes to // this account - k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone - k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use + k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone + k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use // wallet - k_EResultEmailSendFailure = 99, // Cannot send an email - k_EResultNotSettled = 100, // Can't perform operation till payment + k_EResultEmailSendFailure = 99, // Cannot send an email + k_EResultNotSettled = 100, // Can't perform operation till payment // has settled - k_EResultNeedCaptcha = 101,// Needs to provide a valid captcha - k_EResultGSLTDenied = 102, // a game server login token owned by this token's + k_EResultNeedCaptcha = 101,// Needs to provide a valid captcha + k_EResultGSLTDenied = 102, // a game server login token owned by this token's // owner has been banned - k_EResultGSOwnerDenied = 103, // game server owner is denied for other reason + k_EResultGSOwnerDenied = 103, // game server owner is denied for other reason // (account lock, community ban, vac ban, missing phone) - k_EResultInvalidItemType = 104,// the type of thing we were requested to act + k_EResultInvalidItemType = 104,// the type of thing we were requested to act // on is invalid - k_EResultIPBanned = 105,// the ip address has been banned from taking this + k_EResultIPBanned = 105,// the ip address has been banned from taking this // action - k_EResultGSLTExpired = 106,// this token has expired from disuse; can be + k_EResultGSLTExpired = 106,// this token has expired from disuse; can be // reset for use - k_EResultInsufficientFunds = 107,// user doesn't have enough wallet funds to + k_EResultInsufficientFunds = 107,// user doesn't have enough wallet funds to // complete the action - k_EResultTooManyPending = 108, // There are too many of this thing pending + k_EResultTooManyPending = 108, // There are too many of this thing pending // already - k_EResultNoSiteLicensesFound = 109, // No site licenses found - k_EResultWGNetworkSendExceeded = 110,// the WG couldn't send a response + k_EResultNoSiteLicensesFound = 109, // No site licenses found + k_EResultWGNetworkSendExceeded = 110,// the WG couldn't send a response // because we exceeded max network send size - k_EResultAccountNotFriends = 111, // the user is not mutually friends - k_EResultLimitedUserAccount = 112,// the user is limited - k_EResultCantRemoveItem = 113, // item can't be removed - k_EResultAccountDeleted = 114, // account has been deleted - k_EResultExistingUserCancelledLicense = 115, + k_EResultAccountNotFriends = 111, // the user is not mutually friends + k_EResultLimitedUserAccount = 112,// the user is limited + k_EResultCantRemoveItem = 113, // item can't be removed + k_EResultAccountDeleted = 114, // account has been deleted + k_EResultExistingUserCancelledLicense = 115, // A license for this already exists, but cancelled - k_EResultCommunityCooldown = 116, // access is denied because of a + k_EResultCommunityCooldown = 116, // access is denied because of a // community cooldown (probably from support profile data resets) - k_EResultNoLauncherSpecified = 117, // No launcher was specified, but a + k_EResultNoLauncherSpecified = 117, // No launcher was specified, but a // launcher was needed to choose correct realm for operation. - k_EResultMustAgreeToSSA = 118,// User must agree to china SSA or global SSA + k_EResultMustAgreeToSSA = 118,// User must agree to china SSA or global SSA // before login - k_EResultLauncherMigrated = 119, // The specified launcher type is no longer + k_EResultLauncherMigrated = 119, // The specified launcher type is no longer // supported; the user should be directed elsewhere - k_EResultSteamRealmMismatch = 120, // The user's realm does not match the + k_EResultSteamRealmMismatch = 120, // The user's realm does not match the // realm of the requested resource - k_EResultInvalidSignature = 121, // signature check did not match - k_EResultParseFailure = 122, // Failed to parse input - k_EResultNoVerifiedPhone = 123, // account does not have a verified phone + k_EResultInvalidSignature = 121, // signature check did not match + k_EResultParseFailure = 122, // Failed to parse input + k_EResultNoVerifiedPhone = 123, // account does not have a verified phone // number } EResult; typedef struct { - HSteamUser m_hSteamUser; // Specific user to whom this callback applies. - int m_iCallback; - u8 *m_pubParam; // Points to the callback structure - int m_cubParam; // Size of the data pointed to by m_pubParam - + HSteamUser m_hSteamUser; // Specific user to whom this callback applies. + int m_iCallback; + u8 *m_pubParam; // Points to the callback structure + int m_cubParam; // Size of the data pointed to by m_pubParam + } CallbackMsg_t; typedef struct { - SteamAPICall_t m_hAsyncCall; - int m_iCallback; - u32 m_cubParam; - + SteamAPICall_t m_hAsyncCall; + int m_iCallback; + u32 m_cubParam; + } SteamAPICallCompleted_t; - enum { k_iSteamAPICallCompleted = k_iSteamUtilsCallbacks + 3 }; // Steam universes. Each universe is a self-contained Steam instance. -typedef enum { - k_EUniverseInvalid = 0, - k_EUniversePublic = 1, - k_EUniverseBeta = 2, - k_EUniverseInternal = 3, - k_EUniverseDev = 4, - // k_EUniverseRC = 5, // no such universe anymore - k_EUniverseMax +typedef enum EUniverse { + k_EUniverseInvalid = 0, + k_EUniversePublic = 1, + k_EUniverseBeta = 2, + k_EUniverseInternal = 3, + k_EUniverseDev = 4, + // k_EUniverseRC = 5, // no such universe anymore + k_EUniverseMax } EUniverse_t; +#pragma pack( push, 1 ) struct SteamIDComponent_t { #ifdef VALVE_BIG_ENDIAN - EUniverse_t m_EUniverse : 8 - unsigned int m_EAccountType : 4; - unsigned int m_unAccountInstance : 20; - u32 m_unAccountID : 32; + EUniverse_t m_EUniverse : 8 + unsigned int m_EAccountType : 4; + unsigned int m_unAccountInstance : 20; + u32 m_unAccountID : 32; #else - u32 m_unAccountID : 32; - unsigned int m_unAccountInstance : 20; - unsigned int m_EAccountType : 4; - EUniverse_t m_EUniverse : 8; + u32 m_unAccountID : 32; + unsigned int m_unAccountInstance : 20; + unsigned int m_EAccountType : 4; + EUniverse_t m_EUniverse : 8; #endif }; typedef struct { - // 64 bits total - union + // 64 bits total + union { struct SteamIDComponent_t m_comp; - u64 m_unAll64Bits; - }; + u64 m_unAll64Bits; + }; } CSteamID; typedef struct GameID_t { #ifdef VALVE_BIG_ENDIAN - unsigned int m_nModID : 32; - unsigned int m_nType : 8; - unsigned int m_nAppID : 24; + unsigned int m_nModID : 32; + unsigned int m_nType : 8; + unsigned int m_nAppID : 24; #else - unsigned int m_nAppID : 24; - unsigned int m_nType : 8; - unsigned int m_nModID : 32; + unsigned int m_nAppID : 24; + unsigned int m_nType : 8; + unsigned int m_nModID : 32; #endif } CGameID; - +#pragma pack( pop ) #pragma pack( pop ) /* @@ -397,10 +398,10 @@ void SteamAPI_Shutdown(void); typedef enum EServerMode EServerMode; enum EServerMode { - eServerModeInvalid = 0, - eServerModeNoAuthentication = 1, - eServerModeAuthentication = 2, - eServerModeAuthenticationAndSecure = 3, + eServerModeInvalid = 0, + eServerModeNoAuthentication = 1, + eServerModeAuthentication = 2, + eServerModeAuthenticationAndSecure = 3, }; int SteamInternal_GameServer_Init( u32 unIP, u16 usLegacySteamPort, @@ -517,16 +518,16 @@ static void steam_register_callback( u32 id, HSteamPipe SteamAPI_GetHSteamPipe(void); HSteamPipe SteamGameServer_GetHSteamPipe(void); HSteamUser SteamAPI_GetHSteamUser(void); -void SteamAPI_ManualDispatch_Init(void); -void SteamAPI_ManualDispatch_RunFrame( HSteamPipe hSteamPipe ); -int SteamAPI_ManualDispatch_GetNextCallback( HSteamPipe hSteamPipe, +void SteamAPI_ManualDispatch_Init(void); +void SteamAPI_ManualDispatch_RunFrame( HSteamPipe hSteamPipe ); +steamapi_bool SteamAPI_ManualDispatch_GetNextCallback( HSteamPipe hSteamPipe, CallbackMsg_t *pCallbackMsg ); -void SteamAPI_ManualDispatch_FreeLastCallback( HSteamPipe hSteamPipe ); -int SteamAPI_ManualDispatch_GetAPICallResult( HSteamPipe hSteamPipe, +void SteamAPI_ManualDispatch_FreeLastCallback( HSteamPipe hSteamPipe ); +steamapi_bool SteamAPI_ManualDispatch_GetAPICallResult( HSteamPipe hSteamPipe, SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, - int iCallbackExpected, int *pbFailed ); + int iCallbackExpected, steamapi_bool *pbFailed ); -void SteamAPI_ReleaseCurrentThreadMemory(void); +void SteamAPI_ReleaseCurrentThreadMemory(void); static void steamworks_process_api_call( HSteamPipe pipe, CallbackMsg_t *callback ) @@ -534,7 +535,7 @@ static void steamworks_process_api_call( HSteamPipe pipe, SteamAPICallCompleted_t *pCallCompleted = (SteamAPICallCompleted_t *)callback->m_pubParam; - int bFailed; + steamapi_bool bFailed; void *call_data = alloca( pCallCompleted->m_cubParam ); if( SteamAPI_ManualDispatch_GetAPICallResult( @@ -578,7 +579,7 @@ static void steamworks_process_api_call( HSteamPipe pipe, { k_ESteamAPICallFailureNone = -1, k_ESteamAPICallFailureSteamGone = 0, - k_ESteamAPICallFailureNetworkFailure = 1, + k_ESteamAPICallFailureNetworkFailure = 1, k_ESteamAPICallFailureInvalidHandle = 2, k_ESteamAPICallFailureMismatchedCallback = 3, } @@ -597,21 +598,21 @@ static void steamworks_process_api_call( HSteamPipe pipe, static void steamworks_event_loop( HSteamPipe pipe ) { - SteamAPI_ManualDispatch_RunFrame( pipe ); - CallbackMsg_t callback; - - while( SteamAPI_ManualDispatch_GetNextCallback( pipe, &callback ) ){ - vg_low( "steamworks_event::callback( %i )\n", callback.m_iCallback ); - - /* Check for dispatching API call results */ - if( callback.m_iCallback == k_iSteamAPICallCompleted ){ + SteamAPI_ManualDispatch_RunFrame( pipe ); + CallbackMsg_t callback; + + while( SteamAPI_ManualDispatch_GetNextCallback( pipe, &callback ) ){ + vg_low( "steamworks_event::callback( %i )\n", callback.m_iCallback ); + + /* Check for dispatching API call results */ + if( callback.m_iCallback == k_iSteamAPICallCompleted ){ steamworks_process_api_call( pipe, &callback ); - } - else { - /* + } + else { + /* * Look at callback.m_iCallback to see what kind of callback it is, - * and dispatch to appropriate handler(s) - * void *data = callback.m_pubParam; + * and dispatch to appropriate handler(s) + * void *data = callback.m_pubParam; */ for( int i=0; i