OSDN Git Service

v3.0.0 Alpha5 OSDN最終版
[hengband/hengband.git] / src / main-win.c
index 631a9b3..d50d04f 100644 (file)
 #include "floor/floor-events.h"
 #include "game-option/runtime-arguments.h"
 #include "game-option/special-options.h"
-#include "io/record-play-movie.h"
 #include "io/files-util.h"
 #include "io/inet.h"
 #include "io/input-key-acceptor.h"
+#include "io/record-play-movie.h"
 #include "io/signal-handlers.h"
 #include "io/write-diary.h"
 #include "main/angband-initializer.h"
@@ -695,21 +695,26 @@ static void term_getsize(term_data *td)
     TERM_LEN wid = td->cols * td->tile_wid + td->size_ow1 + td->size_ow2;
     TERM_LEN hgt = td->rows * td->tile_hgt + td->size_oh1 + td->size_oh2;
 
-    RECT rc;
-    rc.left = 0;
-    rc.right = rc.left + wid;
-    rc.top = 0;
-    rc.bottom = rc.top + hgt;
-
-    AdjustWindowRectEx(&rc, td->dwStyle, TRUE, td->dwExStyle);
-    td->size_wid = rc.right - rc.left;
-    td->size_hgt = rc.bottom - rc.top;
-    if (!td->w)
-        return;
+    RECT rw, rc;
+    if (td->w) {
+        GetWindowRect(td->w, &rw);
+        GetClientRect(td->w, &rc);
 
-    GetWindowRect(td->w, &rc);
-    td->pos_x = rc.left;
-    td->pos_y = rc.top;
+        td->size_wid = (rw.right - rw.left) - (rc.right - rc.left) + wid;
+        td->size_hgt = (rw.bottom - rw.top) - (rc.bottom - rc.top) + hgt;
+
+        td->pos_x = rw.left;
+        td->pos_y = rw.top;
+    } else {
+        /* Tempolary calculation */
+        rc.left = 0;
+        rc.right = wid;
+        rc.top = 0;
+        rc.bottom = hgt;
+        AdjustWindowRectEx(&rc, td->dwStyle, TRUE, td->dwExStyle);
+        td->size_wid = rc.right - rc.left;
+        td->size_hgt = rc.bottom - rc.top;
+    }
 }
 
 /*
@@ -812,6 +817,7 @@ static void save_prefs(void)
     strcpy(buf, use_bg ? "1" : "0");
     WritePrivateProfileString("Angband", "BackGround", buf, ini_file);
     WritePrivateProfileString("Angband", "BackGroundBitmap", bg_bitmap_file[0] != '\0' ? bg_bitmap_file : "bg.bmp", ini_file);
+    WritePrivateProfileString("Angband", "SaveFile", savefile, ini_file);
 
     for (int i = 0; i < MAX_TERM_DATA; ++i) {
         save_prefs_aux(i);
@@ -887,6 +893,7 @@ static void load_prefs(void)
     arg_music = (GetPrivateProfileInt("Angband", "Music", 0, ini_file) != 0);
     use_bg = GetPrivateProfileInt("Angband", "BackGround", 0, ini_file);
     GetPrivateProfileString("Angband", "BackGroundBitmap", "bg.bmp", bg_bitmap_file, 1023, ini_file);
+    GetPrivateProfileString("Angband", "SaveFile", "", savefile, 1023, ini_file);
     for (int i = 0; i < MAX_TERM_DATA; ++i) {
         load_prefs_aux(i);
     }
@@ -940,15 +947,17 @@ static void load_sound_prefs(void)
     char wav_path[1024];
     char *zz[SAMPLE_SOUND_MAX];
 
-    path_build(ini_path, 1024, ANGBAND_DIR_XTRA_SOUND, "sound.cfg");
+    path_build(ini_path, 1024, ANGBAND_DIR_XTRA_SOUND, "sound_debug.cfg");
+    if (GetPrivateProfileString("Device", "type", "", mci_device_type, 256, ini_path) == 0) {
+        path_build(ini_path, 1024, ANGBAND_DIR_XTRA_SOUND, "sound.cfg");
+        GetPrivateProfileString("Device", "type", "", mci_device_type, 256, ini_path);
+    }
+
     for (int i = 0; i < SOUND_MAX; i++) {
         GetPrivateProfileString("Sound", angband_sound_name[i], "", tmp, 1024, ini_path);
         int num = tokenize_whitespace(tmp, SAMPLE_SOUND_MAX, zz);
         for (int j = 0; j < num; j++) {
-            /* Access the sound */
             path_build(wav_path, 1024, ANGBAND_DIR_XTRA_SOUND, zz[j]);
-
-            /* Save the sound filename, if it exists */
             if (check_file(wav_path))
                 sound_file[i][j] = string_make(zz[j]);
         }
@@ -963,8 +972,12 @@ static void load_music_prefs(void)
     char *zz[SAMPLE_MUSIC_MAX];
     char key[80];
 
-    path_build(ini_path, 1024, ANGBAND_DIR_XTRA_MUSIC, "music.cfg");
-    GetPrivateProfileString("Device", "type", "", mci_device_type, 256, ini_path);
+    path_build(ini_path, 1024, ANGBAND_DIR_XTRA_MUSIC, "music_debug.cfg");
+    if (GetPrivateProfileString("Device", "type", "", mci_device_type, 256, ini_path) == 0) {
+        path_build(ini_path, 1024, ANGBAND_DIR_XTRA_MUSIC, "music.cfg");
+        GetPrivateProfileString("Device", "type", "", mci_device_type, 256, ini_path);
+    }
+
     for (int i = 0; i < MUSIC_BASIC_MAX; i++) {
         GetPrivateProfileString("Basic", angband_music_basic_name[i], "", tmp, 1024, ini_path);
         int num = tokenize_whitespace(tmp, SAMPLE_MUSIC_MAX, zz);
@@ -1967,7 +1980,7 @@ static void windows_map(player_type *player_ptr)
 static void term_data_link(term_data *td)
 {
     term_type *t = &td->t;
-    term_init(t, td->cols, td->rows, td->keys);
+    term_init(t, td->cols, td->rows, FILE_READ_BUFF_SIZE);
     t->soft_cursor = TRUE;
     t->higher_pict = TRUE;
     t->attr_blank = TERM_WHITE;
@@ -2034,17 +2047,21 @@ static void init_windows(void)
     }
 
     load_prefs();
+
+    /* Atrributes of main window */
     td = &data[0];
     td->dwStyle = (WS_OVERLAPPED | WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | WS_VISIBLE);
     td->dwExStyle = 0;
     td->visible = TRUE;
 
+    /* Attributes of sub windows */
     for (int i = 1; i < MAX_TERM_DATA; i++) {
         td = &data[i];
         td->dwStyle = (WS_OVERLAPPED | WS_THICKFRAME | WS_SYSMENU);
         td->dwExStyle = (WS_EX_TOOLWINDOW);
     }
 
+    /* Font of each window */
     for (int i = 0; i < MAX_TERM_DATA; i++) {
         td = &data[i];
         strncpy(td->lf.lfFaceName, td->font_want, LF_FACESIZE);
@@ -2055,11 +2072,11 @@ static void init_windows(void)
             td->tile_wid = td->font_wid;
         if (!td->tile_hgt)
             td->tile_hgt = td->font_hgt;
-
         term_getsize(td);
         term_window_resize(td);
     }
 
+    /* Create sub windows */
     for (int i = MAX_TERM_DATA - 1; i >= 1; --i) {
         td = &data[i];
 
@@ -2067,14 +2084,18 @@ static void init_windows(void)
         td->w
             = CreateWindowEx(td->dwExStyle, AngList, td->s, td->dwStyle, td->pos_x, td->pos_y, td->size_wid, td->size_hgt, HWND_DESKTOP, NULL, hInstance, NULL);
         my_td = NULL;
+
         if (!td->w)
             quit(_("サブウィンドウに作成に失敗しました", "Failed to create sub-window"));
 
+        td->size_hack = TRUE;
+        term_getsize(td);
+        term_window_resize(td);
+
         if (td->visible) {
-            td->size_hack = TRUE;
             ShowWindow(td->w, SW_SHOW);
-            td->size_hack = FALSE;
         }
+        td->size_hack = FALSE;
 
         term_data_link(td);
         angband_term[i] = &td->t;
@@ -2084,20 +2105,28 @@ static void init_windows(void)
             SetActiveWindow(td->w);
         }
 
-        if (data[i].posfix) {
-            term_window_pos(&data[i], HWND_TOPMOST);
+        if (td->posfix) {
+            term_window_pos(td, HWND_TOPMOST);
         } else {
-            term_window_pos(&data[i], td->w);
+            term_window_pos(td, td->w);
         }
     }
 
+    /* Create main window */
     td = &data[0];
     my_td = td;
     td->w = CreateWindowEx(td->dwExStyle, AppName, td->s, td->dwStyle, td->pos_x, td->pos_y, td->size_wid, td->size_hgt, HWND_DESKTOP, NULL, hInstance, NULL);
     my_td = NULL;
+
     if (!td->w)
         quit(_("メインウィンドウの作成に失敗しました", "Failed to create Angband window"));
 
+    /* Resize */
+    td->size_hack = TRUE;
+    term_getsize(td);
+    term_window_resize(td);
+    td->size_hack = FALSE;
+
     term_data_link(td);
     angband_term[0] = &td->t;
     normsize.x = td->cols;
@@ -2268,6 +2297,7 @@ static void process_menus(player_type *player_ptr, WORD wCmd)
         } else {
             game_in_progress = TRUE;
             term_flush();
+            strcpy(savefile, "");
             play_game(player_ptr, TRUE, FALSE);
             quit(NULL);
         }
@@ -3029,7 +3059,7 @@ LRESULT PASCAL AngbandWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
         p_ptr->panic_save = 1;
         signals_ignore_tstp();
         (void)strcpy(p_ptr->died_from, _("(緊急セーブ)", "(panic save)"));
-        (void)save_player(p_ptr);
+        (void)save_player(p_ptr, SAVE_TYPE_CLOSE_GAME);
         quit(NULL);
         return 0;
     }
@@ -3238,10 +3268,8 @@ LRESULT PASCAL AngbandListProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara
         return 0;
     }
     case WM_NCLBUTTONDOWN: {
-#ifdef HTCLOSE
         if (wParam == HTCLOSE)
             wParam = HTSYSMENU;
-#endif /* HTCLOSE */
 
         if (wParam == HTSYSMENU) {
             if (td->visible) {
@@ -3426,7 +3454,7 @@ static void init_stuff(void)
 
     strcpy(path + i + 1, "lib\\");
     validate_dir(path, TRUE);
-    init_file_paths(path);
+    init_file_paths(path, path);
     validate_dir(ANGBAND_DIR_APEX, FALSE);
     validate_dir(ANGBAND_DIR_BONE, FALSE);
     if (!check_dir(ANGBAND_DIR_EDIT)) {
@@ -3440,6 +3468,7 @@ static void init_stuff(void)
     validate_dir(ANGBAND_DIR_INFO, FALSE);
     validate_dir(ANGBAND_DIR_PREF, TRUE);
     validate_dir(ANGBAND_DIR_SAVE, FALSE);
+    validate_dir(ANGBAND_DIR_DEBUG_SAVE, FALSE);
     validate_dir(ANGBAND_DIR_USER, TRUE);
     validate_dir(ANGBAND_DIR_XTRA, TRUE);
     path_build(path, sizeof(path), ANGBAND_DIR_FILE, _("news_j.txt", "news.txt"));