Atrinik Client  4.0
main.c
Go to the documentation of this file.
1 /*************************************************************************
2  * Atrinik, a Multiplayer Online Role Playing Game *
3  * *
4  * Copyright (C) 2009-2014 Alex Tokar and Atrinik Development Team *
5  * *
6  * Fork from Crossfire (Multiplayer game for X-windows). *
7  * *
8  * This program is free software; you can redistribute it and/or modify *
9  * it under the terms of the GNU General Public License as published by *
10  * the Free Software Foundation; either version 2 of the License, or *
11  * (at your option) any later version. *
12  * *
13  * This program is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16  * GNU General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU General Public License *
19  * along with this program; if not, write to the Free Software *
20  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
21  * *
22  * The author can be reached at admin@atrinik.org *
23  ************************************************************************/
24 
34 #include <stdio.h>
35 #include <windows.h>
36 #include <windowsx.h>
37 #include <mmsystem.h>
38 #include <direct.h>
39 #include <shellapi.h>
40 
41 #define HUGE_BUF 4096 * 12
42 
43 int main(int argc, char *argv[])
44 {
45  char params[HUGE_BUF], path[HUGE_BUF], wdir[HUGE_BUF];
46  int i;
47 
48  params[0] = '\0';
49 
50  /* Construct the command parameters from arguments. */
51  for (i = 1; i < argc; i++) {
52  strncat(params, argv[i], sizeof(params) - strlen(params) - 1);
53  }
54 
55  /* Check if we have upgrades to apply. */
56  snprintf(path, sizeof(path), "%s/.atrinik/temp", getenv("APPDATA"));
57 
58  if (access(path, R_OK) == 0) {
59  SHELLEXECUTEINFO shExecInfo;
60 
61  shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
62  shExecInfo.fMask = 0;
63  shExecInfo.hwnd = NULL;
64  shExecInfo.lpVerb = "runas";
65  shExecInfo.lpFile = "atrinik.bat";
66  shExecInfo.lpParameters = params;
67  shExecInfo.lpDirectory = NULL;
68  shExecInfo.nShow = SW_SHOW;
69  shExecInfo.hInstApp = NULL;
70 
71  ShellExecuteEx(&shExecInfo);
72  } else {
73  /* No updates, execute the client. */
74  snprintf(path, sizeof(path), "%s\\atrinik.exe", getcwd(wdir, sizeof(wdir) - 1));
75  ShellExecute(NULL, "open", path, params, NULL, SW_SHOWNORMAL);
76  }
77 
78  return 0;
79 }
int main(int argc, char *argv[])
Definition: main.c:614