From 0b7d72ebdd743edeed32938bc01b707cef0a9301 Mon Sep 17 00:00:00 2001 From: Oreolek Date: Sat, 3 Sep 2011 17:41:22 +0700 Subject: [PATCH] It's working! Hooray! --- configure.sh | 8 +- sdl-instead | 1 - src/sdl-instead/Makefile | 6 +- src/sdl-instead/main.c | 631 +++++++++++++++++++++------------------ 4 files changed, 343 insertions(+), 303 deletions(-) delete mode 120000 sdl-instead diff --git a/configure.sh b/configure.sh index c12d027..151b748 100755 --- a/configure.sh +++ b/configure.sh @@ -189,11 +189,11 @@ if [ "x$ans" = "x1" -o "x$ans" = "x" ]; then echo " * Standalone version" rm -f Rules.make ln -sf Rules.make.standalone Rules.make - rm -f sdl-instead - ln -sf src/sdl-instead/sdl-instead sdl-instead + rm -f steed + ln -sf src/sdl-instead/sdl-instead steed echo "Ok. We are ready to build. Use these commands:" echo " \$ make" - echo " \$ ./sdl-instead" + echo " \$ ./steed" elif [ "x$ans" = "x2" ]; then echo -n "Enter prefix path [/usr/local]: " read ans @@ -223,7 +223,7 @@ elif [ "x$ans" = "x2" ]; then echo "Ok. We are ready to build and install. Use these commands:" echo " \$ make" echo " \$ sudo make install" - echo " \$ sdl-instead" + echo " \$ steed" else echo "Huh!!! Wrong answer." exit 1 diff --git a/sdl-instead b/sdl-instead deleted file mode 120000 index 9a492ab..0000000 --- a/sdl-instead +++ /dev/null @@ -1 +0,0 @@ -src/sdl-instead/sdl-instead \ No newline at end of file diff --git a/src/sdl-instead/Makefile b/src/sdl-instead/Makefile index 64a10db..0d909cf 100644 --- a/src/sdl-instead/Makefile +++ b/src/sdl-instead/Makefile @@ -21,12 +21,10 @@ sdl-instead$(EXE): $(OBJ) $(RESOURCES) install: $(INSTALLD) $(BIN) - $(INSTALLB) sdl-instead$(EXE) $(BIN)/sdl-instead$(EXE) - $(LN) sdl-instead$(EXE) $(BIN)/instead$(EXE) + $(INSTALLB) sdl-instead$(EXE) $(BIN)/steed$(EXE) uninstall: - $(RM) $(BIN)/sdl-instead$(EXE) - $(RM) $(BIN)/instead$(EXE) + $(RM) $(BIN)/steed$(EXE) clean: $(RM) -f *.o sdl-instead$(EXE) diff --git a/src/sdl-instead/main.c b/src/sdl-instead/main.c index a492229..8c458ac 100644 --- a/src/sdl-instead/main.c +++ b/src/sdl-instead/main.c @@ -19,7 +19,7 @@ #endif #ifdef _WIN32_WCE -extern void libwince_init(const char* prog, int debug); +extern void libwince_init(const char* prog, int debug); #endif extern int debug_init(void); @@ -46,374 +46,417 @@ char *start_idf_sw = NULL; extern int unpack(const char *zipfilename, const char *where); extern char zip_game_dirname[]; +static void +get_url (const char *url, const char *outfile) +{ + const char *name; + static SoupSession *session; + SoupMessage *msg; + const char *header; + + session = soup_session_sync_new_with_options ( + SOUP_SESSION_SSL_CA_FILE, NULL, + SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER, + SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_COOKIE_JAR, + SOUP_SESSION_USER_AGENT, "get ", + SOUP_SESSION_ACCEPT_LANGUAGE_AUTO, TRUE, + NULL); + + + msg = soup_message_new (SOUP_METHOD_GET, url); + soup_message_set_flags (msg, SOUP_MESSAGE_NO_REDIRECT); + + soup_session_send_message (session, msg); + + name = soup_message_get_uri (msg)->path; + + if (SOUP_STATUS_IS_REDIRECTION (msg->status_code)) { + header = soup_message_headers_get_one (msg->response_headers, + "Location"); + if (header) { + SoupURI *uri; + char *uri_string; + uri = soup_uri_new_with_base (soup_message_get_uri (msg), header); + uri_string = soup_uri_to_string (uri, FALSE); + get_url (uri_string,outfile); + g_free (uri_string); + soup_uri_free (uri); + } + } else if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) { + //FILE * temp = fopen(outfile,"w"); + //fwrite (msg->response_body->data, 1, msg->response_body->length, temp); + int fd = open (outfile, O_WRONLY | O_CREAT | O_TRUNC, 0644); + write (fd, msg->response_body->data, msg->response_body->length); + close (fd); + //fclose(temp); + } +} + static int setup_zip(const char *file, char *p) { - if (!p) - return -1; + if (!p) return -1; #ifdef _USE_HTTP - SoupSession * soup_session = soup_session_sync_new (); - SoupMessage * msg; - int fd; - if (soup_uri_new (file)){ - msg = soup_message_new ("GET", file); - if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) return -2; - sprintf(file,"%s/temp_download.zip",p); - fd = open (file, O_WRONLY | O_CREAT | O_TRUNC, 0644); - write (fd, msg->response_body, msg->response_body->length); - } + SoupURI * parsed = soup_uri_new (file); + if (parsed){ + char * outfile = game_tmp_path(); + strcat(outfile,"/temp_download.zip"); + get_url(file,outfile); + file = outfile; + } + soup_uri_free (parsed); #endif - fprintf(stderr,"Trying to install: %s\n", file); - if (unpack(file, p)) { - if (zip_game_dirname[0]) { - p = getpath(p, zip_game_dirname); - fprintf(stderr, "Cleaning: '%s'...\n", p); - remove_dir(p); - free(p); - } - return -1; - } - game_sw = zip_game_dirname; - games_sw = p; - return 0; + fprintf(stderr,"Trying to install: %s\n", file); + if (unpack(file, p)) { + if (zip_game_dirname[0]) { + p = getpath(p, zip_game_dirname); + fprintf(stderr, "Cleaning: '%s'...\n", p); + remove_dir(p); + free(p); + } + return -1; + } + game_sw = zip_game_dirname; + games_sw = p; + return 0; } #endif static int start_idf(char *file) { - if (!file) - return -1; - if (!idf_magic(file)) - return -1; - start_idf_sw = file; - return 0; + if (!file) + return -1; + if (!idf_magic(file)) + return -1; + start_idf_sw = file; + return 0; } #ifdef __APPLE__ #include void macosx_init(void) { - char resourcePath[PATH_MAX]; - CFBundleRef mainBundle; - CFURLRef resourcesDirectoryURL; - mainBundle = CFBundleGetMainBundle(); - if (!mainBundle) - return; - resourcesDirectoryURL = CFBundleCopyResourcesDirectoryURL(mainBundle); - if (!resourcesDirectoryURL) - return; - CFURLGetFileSystemRepresentation(resourcesDirectoryURL, true, (UInt8 *) resourcePath, PATH_MAX); - CFRelease(resourcesDirectoryURL); - chdir(resourcePath); - return; + char resourcePath[PATH_MAX]; + CFBundleRef mainBundle; + CFURLRef resourcesDirectoryURL; + mainBundle = CFBundleGetMainBundle(); + if (!mainBundle) + return; + resourcesDirectoryURL = CFBundleCopyResourcesDirectoryURL(mainBundle); + if (!resourcesDirectoryURL) + return; + CFURLGetFileSystemRepresentation(resourcesDirectoryURL, true, (UInt8 *) resourcePath, PATH_MAX); + CFRelease(resourcesDirectoryURL); + chdir(resourcePath); + return; } #endif #ifdef _WIN32_WCE char *getcurdir(char *path) { - char *p; - if (path == NULL || *path == '\0') - return "."; - p = path + strlen(path) - 1; - while (*p == '/') { - if (p == path) - return path; - *p-- = '\0'; - } - while (p >= path && *p != '/') - p--; - return p < path ? "." : p == path ? "/" : (*p = '\0', path); + char *p; + if (path == NULL || *path == '\0') + return "."; + p = path + strlen(path) - 1; + while (*p == '/') { + if (p == path) + return path; + *p-- = '\0'; + } + while (p >= path && *p != '/') + p--; + return p < path ? "." : p == path ? "/" : (*p = '\0', path); } void wince_init(char *path) { - unix_path(path); - strcpy(game_cwd, getcurdir(path)); + unix_path(path); + strcpy(game_cwd, getcurdir(path)); } #endif int main(int argc, char *argv[]) { - int clean_tmp = 0; - int err = 0; - int i; + int clean_tmp = 0; + int err = 0; + int i; #ifdef __APPLE__ - macosx_init(); + macosx_init(); #endif #ifdef _USE_GTK - gtk_init(&argc, &argv); + gtk_init(&argc, &argv); #endif #ifndef S60 - putenv("SDL_MOUSE_RELATIVE=0"); /* test this! */ + putenv("SDL_MOUSE_RELATIVE=0"); /* test this! */ #endif #ifdef _WIN32_WCE - libwince_init(argv[0], 1); - wince_init(argv[0]); + libwince_init(argv[0], 1); + wince_init(argv[0]); #else #ifdef S60 - extern char s60_data[]; - strcpy(game_cwd, s60_data); + extern char s60_data[]; + strcpy(game_cwd, s60_data); #else #ifdef _WIN32 - strcpy(game_cwd, dirname(argv[0])); + strcpy(game_cwd, dirname(argv[0])); #else - getcwd(game_cwd, sizeof(game_cwd)); + getcwd(game_cwd, sizeof(game_cwd)); #endif #endif #endif - unix_path(game_cwd); - setdir(game_cwd); + unix_path(game_cwd); + setdir(game_cwd); - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i],"-alsa")) - alsa_sw = 1; - else if (!strcmp(argv[i], "-nosound")) - nosound_sw = 1; - else if (!strcmp(argv[i], "-fullscreen")) - fullscreen_sw = 1; - else if (!strcmp(argv[i], "-mode")) { - if ((i + 1) < argc) - mode_sw = argv[++i]; - else - mode_sw = "-1x-1"; - } else if (!strcmp(argv[i], "-window")) - window_sw = 1; - else if (!strcmp(argv[i], "-debug")) - debug_sw = 1; - else if (!strcmp(argv[i], "-noautosave")) - noauto_sw = 1; - else if (!strcmp(argv[i], "-game")) { - if ((i + 1) < argc) - game_sw = argv[++i]; - else - game_sw = ""; - } else if (!strcmp(argv[i], "-theme")) { - if ((i + 1) < argc) - theme_sw = argv[++i]; - else - theme_sw = ""; - } else if (!strcmp(argv[i], "-nostdgames")) { - nostdgames_sw = 1; + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i],"-alsa")) + alsa_sw = 1; + else if (!strcmp(argv[i], "-nosound")) + nosound_sw = 1; + else if (!strcmp(argv[i], "-fullscreen")) + fullscreen_sw = 1; + else if (!strcmp(argv[i], "-mode")) { + if ((i + 1) < argc) + mode_sw = argv[++i]; + else + mode_sw = "-1x-1"; + } else if (!strcmp(argv[i], "-window")) + window_sw = 1; + else if (!strcmp(argv[i], "-debug")) + debug_sw = 1; + else if (!strcmp(argv[i], "-noautosave")) + noauto_sw = 1; + else if (!strcmp(argv[i], "-game")) { + if ((i + 1) < argc) + game_sw = argv[++i]; + else + game_sw = ""; + } else if (!strcmp(argv[i], "-theme")) { + if ((i + 1) < argc) + theme_sw = argv[++i]; + else + theme_sw = ""; + } else if (!strcmp(argv[i], "-nostdgames")) { + nostdgames_sw = 1; #ifdef _LOCAL_APPDATA - } else if (!strcmp(argv[i], "-appdata")) { - if ((i + 1) < argc) - appdata_sw = argv[++i]; - else - appdata_sw = ""; + } else if (!strcmp(argv[i], "-appdata")) { + if ((i + 1) < argc) + appdata_sw = argv[++i]; + else + appdata_sw = ""; #endif - } else if (!strcmp(argv[i], "-chunksize")) { - if ((i + 1) < argc) - chunksize_sw = atoi(argv[++i]); - else - chunksize_sw = DEFAULT_CHUNKSIZE; - } else if (!strcmp(argv[i], "-gamespath")) { - if ((i + 1) < argc) - games_sw = argv[++i]; - else - games_sw = ""; - } else if (!strcmp(argv[i], "-themespath")) { - if ((i + 1) < argc) - themes_sw = argv[++i]; - else - themes_sw = ""; - } else if (!strcmp(argv[i], "-idf")) { - if ((i + 1) < argc) - idf_sw = argv[++i]; - else { - fprintf(stderr,"No data directory specified.\n"); - exit(1); - } - } else if (!strcmp(argv[i], "-encode")) { - if ((i + 1) < argc) - encode_sw = argv[++i]; - else { - fprintf(stderr,"No lua file specified.\n"); - exit(1); - } - if ((i + 1) < argc) - encode_output = argv[++i]; - else - encode_output = "lua.enc"; - } else if (!strcmp(argv[i], "-version")) { - version_sw = 1; - } else if (!strcmp(argv[i], "-nopause")) { - nopause_sw = 1; + } else if (!strcmp(argv[i], "-chunksize")) { + if ((i + 1) < argc) + chunksize_sw = atoi(argv[++i]); + else + chunksize_sw = DEFAULT_CHUNKSIZE; + } else if (!strcmp(argv[i], "-gamespath")) { + if ((i + 1) < argc) + games_sw = argv[++i]; + else + games_sw = ""; + } else if (!strcmp(argv[i], "-themespath")) { + if ((i + 1) < argc) + themes_sw = argv[++i]; + else + themes_sw = ""; + } else if (!strcmp(argv[i], "-idf")) { + if ((i + 1) < argc) + idf_sw = argv[++i]; + else { + fprintf(stderr,"No data directory specified.\n"); + exit(1); + } + } else if (!strcmp(argv[i], "-encode")) { + if ((i + 1) < argc) + encode_sw = argv[++i]; + else { + fprintf(stderr,"No lua file specified.\n"); + exit(1); + } + if ((i + 1) < argc) + encode_output = argv[++i]; + else + encode_output = "lua.enc"; + } else if (!strcmp(argv[i], "-version")) { + version_sw = 1; + } else if (!strcmp(argv[i], "-nopause")) { + nopause_sw = 1; #ifdef _USE_UNPACK - } else if (!strcmp(argv[i], "-install")) { - if ((i + 1) < argc) { - char *file = argv[++i]; - char *p; - if (games_sw) - p = games_sw; - else - p = game_local_games_path(1); - if (setup_zip(file, p)) - exit(1); - } + } else if (!strcmp(argv[i], "-install")) { + if ((i + 1) < argc) { + char *file = argv[++i]; + char *p; + if (games_sw) + p = games_sw; + else + p = game_local_games_path(1); + if (setup_zip(file, p)) + exit(1); + } #endif - } else if (!strcmp(argv[i], "-quit")) { - exit(0); - } else if (argv[i][0] == '-') { - fprintf(stderr,"Unknown option: %s\n", argv[i]); - exit(1); - } - else if (!start_idf(argv[i])) { - fprintf(stderr, "Adding idf: %s\n", argv[i]); - } + } else if (!strcmp(argv[i], "-quit")) { + exit(0); + } else if (argv[i][0] == '-') { + fprintf(stderr,"Unknown option: %s\n", argv[i]); + exit(1); + } + else if (!start_idf(argv[i])) { + fprintf(stderr, "Adding idf: %s\n", argv[i]); + } #ifdef _USE_UNPACK - else { - char *p; - if (games_sw) - p = games_sw; - else - p = game_tmp_path(); - if (setup_zip(argv[i], p)) - exit(1); - clean_tmp = 1; - } + else { + char *p; + if (games_sw) + p = games_sw; + else + p = game_tmp_path(); + if (setup_zip(argv[i], p)) + exit(1); + clean_tmp = 1; + } #endif - } + } - if (debug_sw) { - debug_init(); - } + if (debug_sw) { + debug_init(); + } - if (version_sw) { - fprintf(stdout, VERSION"\n"); - goto out; - } + if (version_sw) { + fprintf(stdout, VERSION"\n"); + goto out; + } - if (encode_sw) { - err = instead_encode(encode_sw, encode_output); - goto out; - } + if (encode_sw) { + err = instead_encode(encode_sw, encode_output); + goto out; + } - if (idf_sw) { - char *p = malloc(strlen(idf_sw) + 5); - if (p) { - char *b; - strcpy(p, idf_sw); - b = basename(p); - strcat(b, ".idf"); - idf_create(b, idf_sw); - free(p); - } else - idf_create("data.idf", idf_sw); - goto out; - } - menu_langs_lookup(dirpath(LANG_PATH)); - - if (!langs_nr) { - fprintf(stderr, "No languages found in: %s.\n", dirpath(LANG_PATH)); - exit(1); - } - - cfg_load(); - - if (!opt_lang || !opt_lang[0]) - opt_lang = game_locale(); - - if (menu_lang_select(opt_lang) && menu_lang_select(LANG_DEF)) { - fprintf(stderr, "Can not load default language.\n"); - exit(1); - } - - if (games_sw) - games_lookup(games_sw); + if (idf_sw) { + char *p = malloc(strlen(idf_sw) + 5); + if (p) { + char *b; + strcpy(p, idf_sw); + b = basename(p); + strcat(b, ".idf"); + idf_create(b, idf_sw); + free(p); + } else + idf_create("data.idf", idf_sw); + goto out; + } + menu_langs_lookup(dirpath(LANG_PATH)); + + if (!langs_nr) { + fprintf(stderr, "No languages found in: %s.\n", dirpath(LANG_PATH)); + exit(1); + } + + cfg_load(); + + if (!opt_lang || !opt_lang[0]) + opt_lang = game_locale(); + + if (menu_lang_select(opt_lang) && menu_lang_select(LANG_DEF)) { + fprintf(stderr, "Can not load default language.\n"); + exit(1); + } + + if (games_sw) + games_lookup(games_sw); - if (!nostdgames_sw && games_lookup(dirpath(GAMES_PATH))) - fprintf(stderr, "No games found in: %s.\n", GAMES_PATH); + if (!nostdgames_sw && games_lookup(dirpath(GAMES_PATH))) + fprintf(stderr, "No games found in: %s.\n", GAMES_PATH); - if (themes_sw) - themes_lookup(themes_sw); + if (themes_sw) + themes_lookup(themes_sw); - if (!nostdthemes_sw) { - themes_lookup(dirpath(THEMES_PATH)); - themes_lookup(game_local_themes_path()); - } - - if (!nostdgames_sw) - games_lookup(game_local_games_path(0)); + if (!nostdthemes_sw) { + themes_lookup(dirpath(THEMES_PATH)); + themes_lookup(game_local_themes_path()); + } + + if (!nostdgames_sw) + games_lookup(game_local_games_path(0)); - if (start_idf_sw) { - char *d, *b; - char *dd, *bb; - static char idf_game[255]; - d = strdup(start_idf_sw); - b = strdup(start_idf_sw); - if (d && b) { - dd = dirname(d); - bb = basename(b); - if (!games_replace(dirpath(dd), bb)) { - game_sw = idf_game; - strncpy(idf_game, bb, sizeof(idf_game) - 1); - idf_game[sizeof(idf_game) - 1] = 0; - } - } - if (d) - free(d); - if (b) - free(b); - } + if (start_idf_sw) { + char *d, *b; + char *dd, *bb; + static char idf_game[255]; + d = strdup(start_idf_sw); + b = strdup(start_idf_sw); + if (d && b) { + dd = dirname(d); + bb = basename(b); + if (!games_replace(dirpath(dd), bb)) { + game_sw = idf_game; + strncpy(idf_game, bb, sizeof(idf_game) - 1); + idf_game[sizeof(idf_game) - 1] = 0; + } + } + if (d) + free(d); + if (b) + free(b); + } - if (noauto_sw) - opt_autosave = 0; - if (window_sw) - opt_fs = 0; - if (fullscreen_sw) - opt_fs = 1; - - if (mode_sw) - parse_mode(mode_sw, opt_mode); - - if (game_sw) { - FREE(opt_game); - opt_game = game_sw; - } + if (noauto_sw) + opt_autosave = 0; + if (window_sw) + opt_fs = 0; + if (fullscreen_sw) + opt_fs = 1; + + if (mode_sw) + parse_mode(mode_sw, opt_mode); + + if (game_sw) { + FREE(opt_game); + opt_game = game_sw; + } - if (theme_sw) { - FREE(opt_theme); - opt_theme = theme_sw; - } - - if (opt_theme) - game_theme_select(opt_theme); - if (!curtheme_dir) - game_theme_select(DEFAULT_THEME); - - // Initialize SDL - if (gfx_init() < 0) - return -1; + if (theme_sw) { + FREE(opt_theme); + opt_theme = theme_sw; + } + + if (opt_theme) + game_theme_select(opt_theme); + if (!curtheme_dir) + game_theme_select(DEFAULT_THEME); + + // Initialize SDL + if (gfx_init() < 0) + return -1; - if (gfx_video_init() || input_init()) - return -1; + if (gfx_video_init() || input_init()) + return -1; - if (game_init(opt_game)) { - game_error(opt_game); - } + if (game_init(opt_game)) { + game_error(opt_game); + } - game_loop(); - cfg_save(); - game_done(0); + game_loop(); + cfg_save(); + game_done(0); - gfx_video_done(); + gfx_video_done(); #ifndef ANDROID - gfx_done(); + gfx_done(); #endif out: - if (debug_sw) - debug_done(); + if (debug_sw) + debug_done(); #ifdef _USE_GTK -/* gtk_main_quit (); */ +/* gtk_main_quit (); */ #endif #ifdef _USE_UNPACK - if (clean_tmp) - remove_dir(game_tmp_path()); + if (clean_tmp) + remove_dir(game_tmp_path()); #endif #ifdef ANDROID - exit(err); + exit(err); #endif - return err; + return err; }