3 * UCC (University [of WA] Computer Club) Electronic Accounting System
4 * - Cokebank (Basic Version)
6 * bank.c - Actual bank database
8 * This file is licenced under the 3-clause BSD Licence. See the file COPYING
18 USER_TYPE_NORMAL = 0x00,
19 USER_TYPE_COKE = 0x01,
20 USER_TYPE_WHEEL = 0x02,
30 int Bank_GetUserByUnixID(int UnixID)
33 // Expensive search :(
34 for( i = 0; i < giBank_NumUsers; i ++ )
36 if( gaBank_Users[i].UnixID == UnixID )
43 int Bank_GetUserBalance(int ID)
45 if( ID < 0 || ID >= giBank_NumUsers )
48 return gaBank_Users[ID].Balance;
51 int Bank_AlterUserBalance(int ID, int Delta)
54 if( ID < 0 || ID >= giBank_NumUsers )
58 gaBank_Users[ID].Balance += Delta;
61 fseek(gBank_File, ID*sizeof(gaBank_Users[0]), SEEK_SET);
62 fwrite(&gaBank_Users[ID], sizeof(gaBank_Users[0]), 1, gBank_File);
67 int Bank_SetUserBalance(int ID, int Value)
70 if( ID < 0 || ID >= giBank_NumUsers )
74 gaBank_Users[ID].Balance = Value;
77 fseek(gBank_File, ID*sizeof(gaBank_Users[0]), SEEK_SET);
78 fwrite(&gaBank_Users[ID], sizeof(gaBank_Users[0]), 1, gBank_File);
83 int Bank_GetMinAllowedBalance(int ID)
85 if( ID < 0 || ID >= giBank_NumUsers )
88 switch( gaBank_Users[ID].Flags & FLAG_TYPEMASK )
90 case USER_TYPE_NORMAL: return 0;
91 case USER_TYPE_COKE: return -2000;
92 case USER_TYPE_WHEEL: return -10000;
93 case USER_TYPE_GOD: return INT_MIN;
98 int Bank_GetUserUnixID(int ID)
100 if( ID < 0 || ID >= giBank_NumUsers )
103 return gaBank_Users[ID].UnixID;
107 * \brief Create a new user in our database
109 int Bank_AddUser(int UnixID)
113 // Can has moar space plz?
114 tmp = realloc(gaBank_Users, (giBank_NumUsers+1)*sizeof(gaBank_Users[0]));
115 if( !tmp ) return -1;
119 gaBank_Users[giBank_NumUsers].UnixID = UnixID;
120 gaBank_Users[giBank_NumUsers].Balance = 0;
121 gaBank_Users[giBank_NumUsers].Flags = 0;
124 fseek(gBank_File, giBank_NumUsers*sizeof(gaBank_Users[0]), SEEK_SET);
125 fwrite(&gaBank_Users[giBank_NumUsers], sizeof(gaBank_Users[0]), 1, gBank_File);