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
20 USER_TYPE_NORMAL = 0x00,
21 USER_TYPE_COKE = 0x01,
22 USER_TYPE_WHEEL = 0x02,
27 static int GetUnixID(const char *Name);
35 int Bank_GetUserByUnixID(int UnixID)
38 // Expensive search :(
39 for( i = 0; i < giBank_NumUsers; i ++ )
41 if( gaBank_Users[i].UnixID == UnixID )
48 int Bank_GetUserBalance(int ID)
50 if( ID < 0 || ID >= giBank_NumUsers )
53 return gaBank_Users[ID].Balance;
56 int Bank_AlterUserBalance(int ID, int Delta)
59 if( ID < 0 || ID >= giBank_NumUsers )
63 gaBank_Users[ID].Balance += Delta;
66 fseek(gBank_File, ID*sizeof(gaBank_Users[0]), SEEK_SET);
67 fwrite(&gaBank_Users[ID], sizeof(gaBank_Users[0]), 1, gBank_File);
72 int Bank_SetUserBalance(int ID, int Value)
75 if( ID < 0 || ID >= giBank_NumUsers )
79 gaBank_Users[ID].Balance = Value;
82 fseek(gBank_File, ID*sizeof(gaBank_Users[0]), SEEK_SET);
83 fwrite(&gaBank_Users[ID], sizeof(gaBank_Users[0]), 1, gBank_File);
88 int Bank_GetMinAllowedBalance(int ID)
90 if( ID < 0 || ID >= giBank_NumUsers )
93 switch( gaBank_Users[ID].Flags & FLAG_TYPEMASK )
95 case USER_TYPE_NORMAL: return 0;
96 case USER_TYPE_COKE: return -2000;
97 case USER_TYPE_WHEEL: return -10000;
98 case USER_TYPE_GOD: return INT_MIN;
104 * \brief Create a new user in our database
106 int Bank_AddUser(const char *Username)
109 int uid = GetUnixID(Username);
111 // Can has moar space plz?
112 tmp = realloc(gaBank_Users, (giBank_NumUsers+1)*sizeof(gaBank_Users[0]));
113 if( !tmp ) return -1;
117 gaBank_Users[giBank_NumUsers].UnixID = uid;
118 gaBank_Users[giBank_NumUsers].Balance = 0;
119 gaBank_Users[giBank_NumUsers].Flags = 0;
122 fseek(gBank_File, giBank_NumUsers*sizeof(gaBank_Users[0]), SEEK_SET);
123 fwrite(&gaBank_Users[giBank_NumUsers], sizeof(gaBank_Users[0]), 1, gBank_File);
132 // Unix user dependent code
133 // TODO: Modify to keep its own list of usernames
135 char *Bank_GetUserName(int ID)
139 if( ID < 0 || ID >= giBank_NumUsers )
142 if( gaBank_Users[ID].UnixID == -1 )
143 return strdup(">sales");
145 if( gaBank_Users[ID].UnixID == -2 )
146 return strdup(">liability");
148 pwd = getpwuid(gaBank_Users[ID].UnixID);
149 if( !pwd ) return NULL;
151 return strdup(pwd->pw_name);
154 static int GetUnixID(const char *Username)
158 if( strcmp(Username, ">sales") == 0 ) { // Pseudo account that sales are made into
161 else if( strcmp(Username, ">liability") == 0 ) { // Pseudo acount that money is added from
167 pwd = getpwnam(Username);
168 if( !pwd ) return -1;