OSDN Git Service

アリーナで倒したモンスターの名前が日記に書き込まれるとき、幻覚状態だと名前が変わってしまうバグ修正。
[hengband/hengband.git] / src / main-win.c
index 79dc19d..3f85edb 100644 (file)
 #define IDM_WINDOW_FONT_6              216
 #define IDM_WINDOW_FONT_7              217
 
+#define IDM_WINDOW_POS_0               220
+#define IDM_WINDOW_POS_1               221
+#define IDM_WINDOW_POS_2               222
+#define IDM_WINDOW_POS_3               223
+#define IDM_WINDOW_POS_4               224
+#define IDM_WINDOW_POS_5               225
+#define IDM_WINDOW_POS_6               226
+#define IDM_WINDOW_POS_7               227
+
 #define IDM_WINDOW_BIZ_0               230
 #define IDM_WINDOW_BIZ_1               231
 #define IDM_WINDOW_BIZ_2               232
 #define IDM_OPTIONS_NO_GRAPHICS         400
 #define IDM_OPTIONS_OLD_GRAPHICS 401
 #define IDM_OPTIONS_NEW_GRAPHICS 402
+#define IDM_OPTIONS_BIGTILE            409
 #define IDM_OPTIONS_SOUND              410
 #define IDM_OPTIONS_SAVER              420
 #define IDM_OPTIONS_MAP                        430
@@ -358,8 +368,8 @@ struct _term_data
 
        uint keys;
 
-       int rows;
-       int cols;
+       uint rows;      /* int -> uint */
+       uint cols;
 
        uint pos_x;
        uint pos_y;
@@ -398,6 +408,8 @@ struct _term_data
        LOGFONT lf;
 #endif
 
+       bool posfix;
+
 /* bg */
 #if 0
        char *bgfile;
@@ -533,11 +545,15 @@ static cptr AngList = "AngList";
 /*
  * Directory names
  */
-static cptr ANGBAND_DIR_XTRA_FONT;
 static cptr ANGBAND_DIR_XTRA_GRAF;
 static cptr ANGBAND_DIR_XTRA_SOUND;
-static cptr ANGBAND_DIR_XTRA_MUSIC;
 static cptr ANGBAND_DIR_XTRA_HELP;
+#ifndef JP
+static cptr ANGBAND_DIR_XTRA_FONT;
+#endif
+#ifdef USE_MUSIC
+static cptr ANGBAND_DIR_XTRA_MUSIC;
+#endif
 
 
 /*
@@ -689,7 +705,7 @@ static byte special_key_list[] =
 #endif
 
 /* bg */
-static void delete_bg()
+static void delete_bg(void)
 {
        if (hBG != NULL)
        {
@@ -698,7 +714,7 @@ static void delete_bg()
        }
 }
 
-static int init_bg()
+static int init_bg(void)
 {
        char * bmfile = bg_bitmap_file;
 
@@ -717,15 +733,15 @@ static int init_bg()
        int i, j;
 
        delete_bg();
-       
+
        wnddc = GetDC(hwnd);
        dcimage = CreateCompatibleDC(wnddc);
        dcbg = CreateCompatibleDC(wnddc);
-       
+
        bmimage = LoadImage(NULL, "bg.bmp", LR_LOADFROMFILE, 0, 0, 0);
        if (!bmimage) quit("bg.bmp¤¬Æɤߤ³¤á¤Ê¤¤¡ª");
        bmimage_old = SelectObject(dcimage, bmimage);
-       
+
        CreateCompatibleBitmap();
 
        ReleaseDC(hwnd, wnddc);
@@ -769,6 +785,7 @@ static void DrawBG(HDC hdc, RECT *r)
        DeleteDC(hdcSrc);
 }
 
+#if 0
 /*
  * Hack -- given a pathname, point at the filename
  */
@@ -785,6 +802,7 @@ static cptr extract_file_name(cptr s)
        /* Return file name */
        return (p+1);
 }
+#endif
 
 
 /*
@@ -998,10 +1016,6 @@ static void term_getsize(term_data *td)
        if (td->cols < 1) td->cols = 1;
        if (td->rows < 1) td->rows = 1;
 
-       /* Paranoia */
-       if (td->cols > 80) td->cols = 80;
-       if (td->rows > 24) td->rows = 24;
-
        /* Window sizes */
        wid = td->cols * td->tile_wid + td->size_ow1 + td->size_ow2;
        hgt = td->rows * td->tile_hgt + td->size_oh1 + td->size_oh2;
@@ -1098,6 +1112,10 @@ static void save_prefs_aux(term_data *td, cptr sec_name)
        /* Window position (y) */
        wsprintf(buf, "%d", rc.top);
        WritePrivateProfileString(sec_name, "PositionY", buf, ini_file);
+
+       /* Window Z position */
+       strcpy(buf, td->posfix ? "1" : "0");
+       WritePrivateProfileString(sec_name, "PositionFix", buf, ini_file);
 }
 
 
@@ -1116,6 +1134,10 @@ static void save_prefs(void)
        sprintf(buf, "%d", arg_graphics);
        WritePrivateProfileString("Angband", "Graphics", buf, ini_file);
 
+       /* Save the "arg_bigtile" flag */
+       strcpy(buf, arg_bigtile ? "1" : "0");
+       WritePrivateProfileString("Angband", "Bigtile", buf, ini_file);
+
        /* Save the "arg_sound" flag */
        strcpy(buf, arg_sound ? "1" : "0");
        WritePrivateProfileString("Angband", "Sound", buf, ini_file);
@@ -1190,6 +1212,9 @@ static void load_prefs_aux(term_data *td, cptr sec_name)
        /* Window position */
        td->pos_x = GetPrivateProfileInt(sec_name, "PositionX", td->pos_x, ini_file);
        td->pos_y = GetPrivateProfileInt(sec_name, "PositionY", td->pos_y, ini_file);
+
+       /* Window Z position */
+       td->posfix = GetPrivateProfileInt(sec_name, "PositionFix", td->posfix, ini_file);
 }
 
 
@@ -1205,6 +1230,10 @@ static void load_prefs(void)
        /* Extract the "arg_graphics" flag */
        arg_graphics = GetPrivateProfileInt("Angband", "Graphics", GRAPHICS_NONE, ini_file);
 
+       /* Extract the "arg_bigtile" flag */
+       arg_bigtile = GetPrivateProfileInt("Angband", "Bigtile", FALSE, ini_file);
+       use_bigtile = arg_bigtile;
+
        /* Extract the "arg_sound" flag */
        arg_sound = (GetPrivateProfileInt("Angband", "Sound", 0, ini_file) != 0);
 
@@ -1408,7 +1437,7 @@ static bool init_graphics(void)
                }
 
                /* Access the bitmap file */
-               path_build(buf, 1024, ANGBAND_DIR_XTRA_GRAF, name);
+               path_build(buf, sizeof(buf), ANGBAND_DIR_XTRA_GRAF, name);
 
                /* Load the bitmap or quit */
                if (!ReadDIB(data[0].w, buf, &infGraph))
@@ -1431,7 +1460,7 @@ static bool init_graphics(void)
                if (arg_graphics == GRAPHICS_ADAM_BOLT)
                {
                        /* Access the mask file */
-                       path_build(buf, 1024, ANGBAND_DIR_XTRA_GRAF, "mask.bmp");
+                       path_build(buf, sizeof(buf), ANGBAND_DIR_XTRA_GRAF, "mask.bmp");
 
                        /* Load the bitmap or quit */
                        if (!ReadDIB(data[0].w, buf, &infMask))
@@ -1489,7 +1518,7 @@ static bool init_sound(void)
                        sprintf(wav, "%s.wav", angband_sound_name[i]);
 
                        /* Access the sound */
-                       path_build(buf, 1024, ANGBAND_DIR_XTRA_SOUND, wav);
+                       path_build(buf, sizeof(buf), ANGBAND_DIR_XTRA_SOUND, wav);
 
                        /* Save the sound filename, if it exists */
                        if (check_file(buf)) sound_file[i] = string_make(buf);
@@ -1515,8 +1544,8 @@ static void term_window_resize(term_data *td)
 
        /* Resize the window */
        SetWindowPos(td->w, 0, 0, 0,
-                    td->size_wid, td->size_hgt,
-                    SWP_NOMOVE | SWP_NOZORDER);
+                    td->size_wid, td->size_hgt,
+                    SWP_NOMOVE | SWP_NOZORDER);
 
        /* Redraw later */
        InvalidateRect(td->w, NULL, TRUE);
@@ -1611,9 +1640,9 @@ static errr term_force_font(term_data *td, cptr path)
        if (!td->font_id) return (1);
 #else
        td->font_id = CreateFont(hgt, wid, 0, 0, FW_DONTCARE, 0, 0, 0,
-                                ANSI_CHARSET, OUT_DEFAULT_PRECIS,
-                                CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
-                                FIXED_PITCH | FF_DONTCARE, base);
+                                ANSI_CHARSET, OUT_DEFAULT_PRECIS,
+                                CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
+                                FIXED_PITCH | FF_DONTCARE, base);
 #endif
 
 
@@ -1705,7 +1734,7 @@ static void term_change_font(term_data *td)
                if (term_force_font(td, tmp))
                {
                        /* Access the standard font file */
-                       path_build(tmp, 1024, ANGBAND_DIR_XTRA_FONT, "8X13.FON");
+                       path_build(tmp, sizeof(tmp), ANGBAND_DIR_XTRA_FONT, "8X13.FON");
 
                        /* Force the use of that font */
                        (void)term_force_font(td, tmp);
@@ -1728,7 +1757,14 @@ static void term_change_font(term_data *td)
 
 }
 
-
+/*
+ * Allow the user to lock this window.
+ */
+static void term_window_pos(term_data *td, HWND hWnd)
+{
+       SetWindowPos(td->w, hWnd, 0, 0, 0, 0,
+                       SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
+}
 
 static void windows_map(void);
 
@@ -1918,7 +1954,7 @@ static errr Term_xtra_win_react(void)
                term_data *td = &data[i];
 
                /* Update resized windows */
-               if ((td->cols != td->t.wid) || (td->rows != td->t.hgt))
+               if ((td->cols != (uint)td->t.wid) || (td->rows != (uint)td->t.hgt))
                {
                        /* Activate */
                        Term_activate(&td->t);
@@ -2221,6 +2257,48 @@ static errr Term_curs_win(int x, int y)
 /*
  * Low level graphics (Assumes valid input).
  *
+ * Draw a "big cursor" at (x,y), using a "yellow box".
+ */
+static errr Term_bigcurs_win(int x, int y)
+{
+       term_data *td = (term_data*)(Term->data);
+
+       RECT rc;
+       HDC hdc;
+
+       int tile_wid, tile_hgt;
+
+       if (td->map_active)
+       {
+               /* Normal cursor in map window */
+               Term_curs_win(x, y);
+               return 0;
+       }
+       else
+       {
+               tile_wid = td->tile_wid;
+               tile_hgt = td->tile_hgt;
+       }
+
+       /* Frame the grid */
+       rc.left = x * tile_wid + td->size_ow1;
+       rc.right = rc.left + 2 * tile_wid;
+       rc.top = y * tile_hgt + td->size_oh1;
+       rc.bottom = rc.top + tile_hgt;
+
+       /* Cursor is done as a yellow "box" */
+       hdc = GetDC(td->w);
+       FrameRect(hdc, &rc, hbrYellow);
+       ReleaseDC(td->w, hdc);
+
+       /* Success */
+       return 0;
+}
+
+
+/*
+ * Low level graphics (Assumes valid input).
+ *
  * Erase a "block" of "n" characters starting at (x,y).
  */
 static errr Term_wipe_win(int x, int y, int n)
@@ -2337,12 +2415,32 @@ static errr Term_text_win(int x, int y, int n, byte a, const char *s)
                for (i = 0; i < n; i++)
                {
 #ifdef JP
-                       if ( iskanji(*(s+i)) )  /*  £²¥Ð¥¤¥Èʸ»ú  */
+                       if (use_bigtile && *(s+i)=="¢£"[0] && *(s+i+1)=="¢£"[1])
+                       {
+                               rc.right += td->font_wid;
+
+                               oldBrush = SelectObject(hdc, myBrush);
+                               oldPen = SelectObject(hdc, GetStockObject(NULL_PEN) );
+
+                               /* Dump the wall */
+                               Rectangle(hdc, rc.left, rc.top, rc.right+1, rc.bottom+1);
+
+                               SelectObject(hdc, oldBrush);
+                               SelectObject(hdc, oldPen);
+                               rc.right -= td->font_wid;
+
+                               /* Advance */
+                               i++;
+                               rc.left += 2 * td->tile_wid;
+                               rc.right += 2 * td->tile_wid;
+                       }
+                       else if ( iskanji(*(s+i)) )  /*  £²¥Ð¥¤¥Èʸ»ú  */
                        {
                                rc.right += td->font_wid;
                                /* Dump the text */
                                ExtTextOut(hdc, rc.left, rc.top, ETO_CLIPPED, &rc,
-                                      s+i, 2, NULL);
+                                      s+i, 2, NULL);
+                               rc.right -= td->font_wid;
 
                                /* Advance */
                                i++;
@@ -2364,7 +2462,7 @@ static errr Term_text_win(int x, int y, int n, byte a, const char *s)
                        } else {
                                /* Dump the text */
                                ExtTextOut(hdc, rc.left, rc.top, ETO_CLIPPED, &rc,
-                                      s+i, 1, NULL);
+                                      s+i, 1, NULL);
 
                                /* Advance */
                                rc.left += td->tile_wid;
@@ -2373,7 +2471,7 @@ static errr Term_text_win(int x, int y, int n, byte a, const char *s)
 #else
                        /* Dump the text */
                        ExtTextOut(hdc, rc.left, rc.top, 0, &rc,
-                                  s+i, 1, NULL);
+                                  s+i, 1, NULL);
 
                        /* Advance */
                        rc.left += td->tile_wid;
@@ -2388,7 +2486,7 @@ static errr Term_text_win(int x, int y, int n, byte a, const char *s)
        {
                /* Dump the text */
                ExtTextOut(hdc, rc.left, rc.top, ETO_OPAQUE | ETO_CLIPPED, &rc,
-                          s, n, NULL);
+                          s, n, NULL);
        }
 
        /* Release DC */
@@ -2424,7 +2522,7 @@ static errr Term_pict_win(int x, int y, int n, const byte *ap, const char *cp)
 
        int i;
        int x1, y1, w1, h1;
-       int x2, y2, w2, h2;
+       int x2, y2, w2, h2, tw2;
 
 # ifdef USE_TRANSPARENCY
 
@@ -2459,6 +2557,10 @@ static errr Term_pict_win(int x, int y, int n, const byte *ap, const char *cp)
        {
                w2 = td->tile_wid;
                h2 = td->tile_hgt;
+               tw2 = w2;
+
+               /* big tile mode */
+               if (use_bigtile) tw2 *= 2;
        }
 
        /* Location of window cell */
@@ -2504,16 +2606,16 @@ static errr Term_pict_win(int x, int y, int n, const byte *ap, const char *cp)
                        y3 = (tap[i] & 0x7F) * h1;
 
                        /* Perfect size */
-                       if ((w1 == w2) && (h1 == h2))
+                       if ((w1 == tw2) && (h1 == h2))
                        {
                                /* Copy the terrain picture from the bitmap to the window */
-                               BitBlt(hdc, x2, y2, w2, h2, hdcSrc, x3, y3, SRCCOPY);
+                               BitBlt(hdc, x2, y2, tw2, h2, hdcSrc, x3, y3, SRCCOPY);
 
                                /* Mask out the tile */
-                               BitBlt(hdc, x2, y2, w2, h2, hdcMask, x1, y1, SRCAND);
+                               BitBlt(hdc, x2, y2, tw2, h2, hdcMask, x1, y1, SRCAND);
 
                                /* Draw the tile */
-                               BitBlt(hdc, x2, y2, w2, h2, hdcSrc, x1, y1, SRCPAINT);
+                               BitBlt(hdc, x2, y2, tw2, h2, hdcSrc, x1, y1, SRCPAINT);
                        }
 
                        /* Need to stretch */
@@ -2523,16 +2625,16 @@ static errr Term_pict_win(int x, int y, int n, const byte *ap, const char *cp)
                                SetStretchBltMode(hdc, COLORONCOLOR);
 
                                /* Copy the terrain picture from the bitmap to the window */
-                               StretchBlt(hdc, x2, y2, w2, h2, hdcSrc, x3, y3, w1, h1, SRCCOPY);
+                               StretchBlt(hdc, x2, y2, tw2, h2, hdcSrc, x3, y3, w1, h1, SRCCOPY);
 
                                /* Only draw if terrain and overlay are different */
                                if ((x1 != x3) || (y1 != y3))
                                {
                                        /* Mask out the tile */
-                                       StretchBlt(hdc, x2, y2, w2, h2, hdcMask, x1, y1, w1, h1, SRCAND);
+                                       StretchBlt(hdc, x2, y2, tw2, h2, hdcMask, x1, y1, w1, h1, SRCAND);
 
                                        /* Draw the tile */
-                                       StretchBlt(hdc, x2, y2, w2, h2, hdcSrc, x1, y1, w1, h1, SRCPAINT);
+                                       StretchBlt(hdc, x2, y2, tw2, h2, hdcSrc, x1, y1, w1, h1, SRCPAINT);
                                }
                        }
                }
@@ -2542,10 +2644,10 @@ static errr Term_pict_win(int x, int y, int n, const byte *ap, const char *cp)
 
                {
                        /* Perfect size */
-                       if ((w1 == w2) && (h1 == h2))
+                       if ((w1 == tw2) && (h1 == h2))
                        {
                                /* Copy the picture from the bitmap to the window */
-                               BitBlt(hdc, x2, y2, w2, h2, hdcSrc, x1, y1, SRCCOPY);
+                               BitBlt(hdc, x2, y2, tw2, h2, hdcSrc, x1, y1, SRCCOPY);
                        }
 
                        /* Need to stretch */
@@ -2555,7 +2657,7 @@ static errr Term_pict_win(int x, int y, int n, const byte *ap, const char *cp)
                                SetStretchBltMode(hdc, COLORONCOLOR);
 
                                /* Copy the picture from the bitmap to the window */
-                               StretchBlt(hdc, x2, y2, w2, h2, hdcSrc, x1, y1, w1, h1, SRCCOPY);
+                               StretchBlt(hdc, x2, y2, tw2, h2, hdcSrc, x1, y1, w1, h1, SRCCOPY);
                        }
                }
        }
@@ -2590,13 +2692,6 @@ static errr Term_pict_win(int x, int y, int n, const byte *ap, const char *cp)
 }
 
 
-#ifdef USE_TRANSPARENCY
-extern void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp);
-#else /* USE_TRANSPARENCY */
-extern void map_info(int y, int x, byte *ap, char *cp);
-#endif /* USE_TRANSPARENCY */
-
-
 static void windows_map(void)
 {
        term_data *td = &data[0];
@@ -2697,6 +2792,7 @@ static void term_data_link(term_data *td)
        t->user_hook = Term_user_win;
        t->xtra_hook = Term_xtra_win;
        t->curs_hook = Term_curs_win;
+       t->bigcurs_hook = Term_bigcurs_win;
        t->wipe_hook = Term_wipe_win;
        t->text_hook = Term_text_win;
        t->pict_hook = Term_pict_win;
@@ -2744,6 +2840,7 @@ static void init_windows(void)
        td->size_oh2 = 2;
        td->pos_x = 7 * 30;
        td->pos_y = 7 * 20;
+       td->posfix = FALSE;
 
 #ifdef JP
        td->bizarre = TRUE;
@@ -2764,6 +2861,7 @@ static void init_windows(void)
                td->size_oh2 = 1;
                td->pos_x = (7 - i) * 30;
                td->pos_y = (7 - i) * 20;
+               td->posfix = FALSE;
 #ifdef JP
                        td->bizarre = TRUE;
 #endif
@@ -2777,8 +2875,8 @@ static void init_windows(void)
        /* Main window (need these before term_getsize gets called) */
        td = &data[0];
        td->dwStyle = (WS_OVERLAPPED | WS_THICKFRAME | WS_SYSMENU |
-                      WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION |
-                      WS_VISIBLE);
+                      WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION |
+                      WS_VISIBLE);
        td->dwExStyle = 0;
        td->visible = TRUE;
 
@@ -2798,8 +2896,6 @@ static void init_windows(void)
 
 #ifdef JP
                strncpy(td->lf.lfFaceName, td->font_want, LF_FACESIZE);
-               td->lf.lfHeight = td->tile_hgt;
-               td->lf.lfWidth  = td->tile_wid;
                td->lf.lfCharSet = SHIFTJIS_CHARSET;
                td->lf.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE;
                /* Activate the chosen font */
@@ -2808,13 +2904,13 @@ static void init_windows(void)
                td->tile_hgt = td->font_hgt;
 #else
                /* Access the standard font file */
-               path_build(buf, 1024, ANGBAND_DIR_XTRA_FONT, td->font_want);
+               path_build(buf, sizeof(buf), ANGBAND_DIR_XTRA_FONT, td->font_want);
 
                /* Activate the chosen font */
                if (term_force_font(td, buf))
                {
                        /* Access the standard font file */
-                       path_build(buf, 1024, ANGBAND_DIR_XTRA_FONT, "8X13.FON");
+                       path_build(buf, sizeof(buf), ANGBAND_DIR_XTRA_FONT, "8X13.FON");
 
                        /* Force the use of that font */
                        (void)term_force_font(td, buf);
@@ -2844,10 +2940,10 @@ static void init_windows(void)
 
                my_td = td;
                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);
+                                      td->s, td->dwStyle,
+                                      td->pos_x, td->pos_y,
+                                      td->size_wid, td->size_hgt,
+                                      HWND_DESKTOP, NULL, hInstance, NULL);
                my_td = NULL;
 #ifdef JP
                if (!td->w) quit("¥µ¥Ö¥¦¥£¥ó¥É¥¦¤ËºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿");
@@ -2870,9 +2966,15 @@ static void init_windows(void)
                {
                        /* Activate the window */
                        SetActiveWindow(td->w);
+               }
 
-                       /* Bring window to top */
-                       SetWindowPos(td->w, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
+               if (data[i].posfix)
+               {
+                       term_window_pos(&data[i], HWND_TOPMOST);
+               }
+               else
+               {
+                       term_window_pos(&data[i], td->w);
                }
        }
 
@@ -2883,10 +2985,10 @@ static void init_windows(void)
        /* Main window */
        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);
+                              td->s, td->dwStyle,
+                              td->pos_x, td->pos_y,
+                              td->size_wid, td->size_hgt,
+                              HWND_DESKTOP, NULL, hInstance, NULL);
        my_td = NULL;
 #ifdef JP
        if (!td->w) quit("¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿");
@@ -2931,15 +3033,15 @@ static void setup_menus(void)
 
        /* Menu "File", Disable all */
        EnableMenuItem(hm, IDM_FILE_NEW,
-                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        EnableMenuItem(hm, IDM_FILE_OPEN,
-                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        EnableMenuItem(hm, IDM_FILE_SAVE,
-                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        EnableMenuItem(hm, IDM_FILE_EXIT,
-                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        EnableMenuItem(hm, IDM_FILE_SCORE,
-                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 
 
        /* No character available */
@@ -2957,40 +3059,56 @@ static void setup_menus(void)
        {
                /* Menu "File", Item "Save" */
                EnableMenuItem(hm, IDM_FILE_SAVE,
-                          MF_BYCOMMAND | MF_ENABLED);
+                          MF_BYCOMMAND | MF_ENABLED);
        }
 
        /* Menu "File", Item "Exit" */
        EnableMenuItem(hm, IDM_FILE_EXIT,
-                      MF_BYCOMMAND | MF_ENABLED);
+                      MF_BYCOMMAND | MF_ENABLED);
 
        EnableMenuItem(hm, IDM_FILE_SCORE,
-                      MF_BYCOMMAND | MF_ENABLED);
+                      MF_BYCOMMAND | MF_ENABLED);
 
 
        /* Menu "Window::Visibility" */
        for (i = 0; i < MAX_TERM_DATA; i++)
        {
                EnableMenuItem(hm, IDM_WINDOW_VIS_0 + i,
-                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 
                CheckMenuItem(hm, IDM_WINDOW_VIS_0 + i,
-                             (data[i].visible ? MF_CHECKED : MF_UNCHECKED));
+                             (data[i].visible ? MF_CHECKED : MF_UNCHECKED));
 
                EnableMenuItem(hm, IDM_WINDOW_VIS_0 + i,
-                              MF_BYCOMMAND | MF_ENABLED);
+                              MF_BYCOMMAND | MF_ENABLED);
        }
 
        /* Menu "Window::Font" */
        for (i = 0; i < MAX_TERM_DATA; i++)
        {
                EnableMenuItem(hm, IDM_WINDOW_FONT_0 + i,
-                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 
                if (data[i].visible)
                {
                        EnableMenuItem(hm, IDM_WINDOW_FONT_0 + i,
-                                      MF_BYCOMMAND | MF_ENABLED);
+                                      MF_BYCOMMAND | MF_ENABLED);
+               }
+       }
+
+       /* Menu "Window::Window Position Fix" */
+       for (i = 0; i < MAX_TERM_DATA; i++)
+       {
+               EnableMenuItem(hm, IDM_WINDOW_POS_0 + i,
+                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+
+               CheckMenuItem(hm, IDM_WINDOW_POS_0 + i,
+                             (data[i].posfix ? MF_CHECKED : MF_UNCHECKED));
+
+               if (data[i].visible)
+               {
+                       EnableMenuItem(hm, IDM_WINDOW_POS_0 + i,
+                                      MF_BYCOMMAND | MF_ENABLED);
                }
        }
 
@@ -2998,15 +3116,15 @@ static void setup_menus(void)
        for (i = 0; i < MAX_TERM_DATA; i++)
        {
                EnableMenuItem(hm, IDM_WINDOW_BIZ_0 + i,
-                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 
                CheckMenuItem(hm, IDM_WINDOW_BIZ_0 + i,
-                             (data[i].bizarre ? MF_CHECKED : MF_UNCHECKED));
+                             (data[i].bizarre ? MF_CHECKED : MF_UNCHECKED));
 
                if (data[i].visible)
                {
                        EnableMenuItem(hm, IDM_WINDOW_BIZ_0 + i,
-                                  MF_BYCOMMAND | MF_ENABLED);
+                                  MF_BYCOMMAND | MF_ENABLED);
 
                }
        }
@@ -3015,12 +3133,12 @@ static void setup_menus(void)
        for (i = 0; i < MAX_TERM_DATA; i++)
        {
                EnableMenuItem(hm, IDM_WINDOW_I_WID_0 + i,
-                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 
                if (data[i].visible)
                {
                        EnableMenuItem(hm, IDM_WINDOW_I_WID_0 + i,
-                                  MF_BYCOMMAND | MF_ENABLED);
+                                  MF_BYCOMMAND | MF_ENABLED);
 
                }
        }
@@ -3029,12 +3147,12 @@ static void setup_menus(void)
        for (i = 0; i < MAX_TERM_DATA; i++)
        {
                EnableMenuItem(hm, IDM_WINDOW_D_WID_0 + i,
-                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 
                if (data[i].visible)
                {
                        EnableMenuItem(hm, IDM_WINDOW_D_WID_0 + i,
-                                  MF_BYCOMMAND | MF_ENABLED);
+                                  MF_BYCOMMAND | MF_ENABLED);
 
                }
        }
@@ -3043,12 +3161,12 @@ static void setup_menus(void)
        for (i = 0; i < MAX_TERM_DATA; i++)
        {
                EnableMenuItem(hm, IDM_WINDOW_I_HGT_0 + i,
-                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 
                if (data[i].visible)
                {
                        EnableMenuItem(hm, IDM_WINDOW_I_HGT_0 + i,
-                                  MF_BYCOMMAND | MF_ENABLED);
+                                  MF_BYCOMMAND | MF_ENABLED);
 
                }
        }
@@ -3057,28 +3175,30 @@ static void setup_menus(void)
        for (i = 0; i < MAX_TERM_DATA; i++)
        {
                EnableMenuItem(hm, IDM_WINDOW_D_HGT_0 + i,
-                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 
                if (data[i].visible)
                {
                        EnableMenuItem(hm, IDM_WINDOW_D_HGT_0 + i,
-                                  MF_BYCOMMAND | MF_ENABLED);
+                                  MF_BYCOMMAND | MF_ENABLED);
 
                }
        }
 
        /* Menu "Options", disable all */
        EnableMenuItem(hm, IDM_OPTIONS_NO_GRAPHICS,
-                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        EnableMenuItem(hm, IDM_OPTIONS_OLD_GRAPHICS,
-                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        EnableMenuItem(hm, IDM_OPTIONS_NEW_GRAPHICS,
-                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+       EnableMenuItem(hm, IDM_OPTIONS_BIGTILE,
+                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        EnableMenuItem(hm, IDM_OPTIONS_SOUND,
-                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 #ifndef JP
        EnableMenuItem(hm, IDM_OPTIONS_SAVER,
-                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                      MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 #endif
 
        /* Menu "Options", Item "Map" */
@@ -3086,22 +3206,24 @@ static void setup_menus(void)
                EnableMenuItem(GetMenu(data[0].w), IDM_OPTIONS_MAP, MF_BYCOMMAND | MF_ENABLED);
        else
                EnableMenuItem(GetMenu(data[0].w), IDM_OPTIONS_MAP,
-                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
+                              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 
        /* Menu "Options", update all */
        CheckMenuItem(hm, IDM_OPTIONS_NO_GRAPHICS,
-                     (arg_graphics == GRAPHICS_NONE ? MF_CHECKED : MF_UNCHECKED));
+                     (arg_graphics == GRAPHICS_NONE ? MF_CHECKED : MF_UNCHECKED));
        CheckMenuItem(hm, IDM_OPTIONS_OLD_GRAPHICS,
-                     (arg_graphics == GRAPHICS_ORIGINAL ? MF_CHECKED : MF_UNCHECKED));
+                     (arg_graphics == GRAPHICS_ORIGINAL ? MF_CHECKED : MF_UNCHECKED));
        CheckMenuItem(hm, IDM_OPTIONS_NEW_GRAPHICS,
-                     (arg_graphics == GRAPHICS_ADAM_BOLT ? MF_CHECKED : MF_UNCHECKED));
+                     (arg_graphics == GRAPHICS_ADAM_BOLT ? MF_CHECKED : MF_UNCHECKED));
+       CheckMenuItem(hm, IDM_OPTIONS_BIGTILE,
+                     (arg_bigtile ? MF_CHECKED : MF_UNCHECKED));
        CheckMenuItem(hm, IDM_OPTIONS_SOUND,
-                     (arg_sound ? MF_CHECKED : MF_UNCHECKED));
+                     (arg_sound ? MF_CHECKED : MF_UNCHECKED));
        CheckMenuItem(hm, IDM_OPTIONS_BG,
-                     (use_bg ? MF_CHECKED : MF_UNCHECKED));
+                     (use_bg ? MF_CHECKED : MF_UNCHECKED));
 #ifndef JP
        CheckMenuItem(hm, IDM_OPTIONS_SAVER,
-                     (hwndSaver ? MF_CHECKED : MF_UNCHECKED));
+                     (hwndSaver ? MF_CHECKED : MF_UNCHECKED));
 #endif
 
 #ifdef USE_GRAPHICS
@@ -3111,6 +3233,8 @@ static void setup_menus(void)
        EnableMenuItem(hm, IDM_OPTIONS_OLD_GRAPHICS, MF_ENABLED);
        /* Menu "Options", Item "Graphics" */
        EnableMenuItem(hm, IDM_OPTIONS_NEW_GRAPHICS, MF_ENABLED);
+       /* Menu "Options", Item "Graphics" */
+       EnableMenuItem(hm, IDM_OPTIONS_BIGTILE, MF_ENABLED);
 #endif /* USE_GRAPHICS */
 
 #ifdef USE_SOUND
@@ -3121,7 +3245,7 @@ static void setup_menus(void)
 #ifdef USE_SAVER
        /* Menu "Options", Item "ScreenSaver" */
        EnableMenuItem(hm, IDM_OPTIONS_SAVER,
-                      MF_BYCOMMAND | MF_ENABLED);
+                      MF_BYCOMMAND | MF_ENABLED);
 #endif /* USE_SAVER */
 }
 
@@ -3296,7 +3420,7 @@ static void process_menus(WORD wCmd)
                                if (!can_save)
                                {
 #ifdef JP
-                               plog("º£¤Ï½ªÎ»¤Ç¤­¤Þ¤»¤ó¡£");
+                                       plog("º£¤Ï½ªÎ»¤Ç¤­¤Þ¤»¤ó¡£");
 #else
                                        plog("You may not do that right now.");
 #endif
@@ -3313,10 +3437,12 @@ static void process_menus(WORD wCmd)
 
                                /* Save the game */
 #ifdef ZANGBAND
-                               do_cmd_save_game(FALSE);
+                               /* do_cmd_save_game(FALSE); */
 #else /* ZANGBAND */
-                               do_cmd_save_game();
+                               /* do_cmd_save_game(); */
 #endif /* ZANGBAND */
+                               Term_key_push(SPECIAL_KEY_QUIT);
+                               break;
                        }
                        quit(NULL);
                        break;
@@ -3328,7 +3454,7 @@ static void process_menus(WORD wCmd)
                        char buf[1024];
 
                        /* Build the filename */
-                       path_build(buf, 1024, ANGBAND_DIR_APEX, "scores.raw");
+                       path_build(buf, sizeof(buf), ANGBAND_DIR_APEX, "scores.raw");
 
                        /* Open the binary high score file, for reading */
                        highscore_fd = fd_open(buf, O_RDONLY);
@@ -3402,6 +3528,7 @@ static void process_menus(WORD wCmd)
                        else
                        {
                                td->visible = FALSE;
+                               td->posfix = FALSE;
                                ShowWindow(td->w, SW_HIDE);
                        }
 
@@ -3429,6 +3556,35 @@ static void process_menus(WORD wCmd)
                        break;
                }
 
+               /* Window Z Position */
+               case IDM_WINDOW_POS_1:
+               case IDM_WINDOW_POS_2:
+               case IDM_WINDOW_POS_3:
+               case IDM_WINDOW_POS_4:
+               case IDM_WINDOW_POS_5:
+               case IDM_WINDOW_POS_6:
+               case IDM_WINDOW_POS_7:
+               {
+                       i = wCmd - IDM_WINDOW_POS_0;
+
+                       if ((i < 0) || (i >= MAX_TERM_DATA)) break;
+
+                       td = &data[i];
+
+                       if (!td->posfix && td->visible)
+                       {
+                               td->posfix = TRUE;
+                               term_window_pos(td, HWND_TOPMOST);
+                       }
+                       else
+                       {
+                               td->posfix = FALSE;
+                               term_window_pos(td, data[0].w);
+                       }
+
+                       break;
+               }
+
                /* Bizarre Display */
                case IDM_WINDOW_BIZ_0:
                case IDM_WINDOW_BIZ_1:
@@ -3626,6 +3782,32 @@ static void process_menus(WORD wCmd)
                        break;
                }
 
+               case IDM_OPTIONS_BIGTILE:
+               {
+                       term_data *td = &data[0];
+
+                       /* Paranoia */
+                       if (!inkey_flag)
+                       {
+                               plog("You may not do that right now.");
+                               break;
+                       }
+
+                       /* Toggle "arg_sound" */
+                       arg_bigtile = !arg_bigtile;
+
+                       /* Activate */
+                       Term_activate(&td->t);
+
+                       /* Resize the term */
+                       Term_resize(td->cols, td->rows);
+
+                       /* Redraw later */
+                       InvalidateRect(td->w, NULL, TRUE);
+
+                       break;
+               }
+
                case IDM_OPTIONS_SOUND:
                {
                        /* Paranoia */
@@ -3734,7 +3916,6 @@ static void process_menus(WORD wCmd)
 
                        if (GetSaveFileName(&ofn))
                        {
-                               extern void do_cmd_save_screen_html_aux(char *filename, int message);
                                do_cmd_save_screen_html_aux(buf, 0);
                        }
                        break;
@@ -3753,11 +3934,11 @@ static void process_menus(WORD wCmd)
                        {
                                /* Create a screen scaver window */
                                hwndSaver = CreateWindowEx(WS_EX_TOPMOST, "WindowsScreenSaverClass",
-                                                          "Angband Screensaver",
-                                                          WS_POPUP | WS_MAXIMIZE | WS_VISIBLE,
-                                                          0, 0, GetSystemMetrics(SM_CXSCREEN),
-                                                          GetSystemMetrics(SM_CYSCREEN),
-                                                          NULL, NULL, hInstance, NULL);
+                                                          "Angband Screensaver",
+                                                          WS_POPUP | WS_MAXIMIZE | WS_VISIBLE,
+                                                          0, 0, GetSystemMetrics(SM_CXSCREEN),
+                                                          GetSystemMetrics(SM_CYSCREEN),
+                                                          NULL, NULL, hInstance, NULL);
 
                                if (hwndSaver)
                                {
@@ -3789,7 +3970,7 @@ static void process_menus(WORD wCmd)
                {
 #ifdef HTML_HELP
                        char tmp[1024];
-                       path_build(tmp, 1024, ANGBAND_DIR_XTRA_HELP, "zangband.chm");
+                       path_build(tmp, sizeof(tmp), ANGBAND_DIR_XTRA_HELP, "zangband.chm");
                        if (check_file(tmp))
                        {
                                HtmlHelp(data[0].w, tmp, HH_DISPLAY_TOPIC, 0);
@@ -3809,7 +3990,7 @@ static void process_menus(WORD wCmd)
 #else /* HTML_HELP */
                        char buf[1024];
                        char tmp[1024];
-                       path_build(tmp, 1024, ANGBAND_DIR_XTRA_HELP, "zangband.hlp");
+                       path_build(tmp, sizeof(tmp), ANGBAND_DIR_XTRA_HELP, "zangband.hlp");
                        if (check_file(tmp))
                        {
                                sprintf(buf, "winhelp.exe %s", tmp);
@@ -3836,12 +4017,12 @@ static void process_menus(WORD wCmd)
 
 #ifdef __MWERKS__
 LRESULT FAR PASCAL AngbandWndProc(HWND hWnd, UINT uMsg,
-                                  WPARAM wParam, LPARAM lParam);
+                                 WPARAM wParam, LPARAM lParam);
 LRESULT FAR PASCAL AngbandWndProc(HWND hWnd, UINT uMsg,
-                                  WPARAM wParam, LPARAM lParam)
+                                 WPARAM wParam, LPARAM lParam)
 #else /* __MWERKS__ */
 LRESULT FAR PASCAL AngbandWndProc(HWND hWnd, UINT uMsg,
-                                          WPARAM wParam, LPARAM lParam)
+                                         WPARAM wParam, LPARAM lParam)
 #endif /* __MWERKS__ */
 {
        PAINTSTRUCT ps;
@@ -3875,16 +4056,18 @@ LRESULT FAR PASCAL AngbandWndProc(HWND hWnd, UINT uMsg,
 
                case WM_GETMINMAXINFO:
                {
-#if 0
+                       MINMAXINFO FAR *lpmmi;
+                       RECT rc;
+
                        lpmmi = (MINMAXINFO FAR *)lParam;
 
                        /* this message was sent before WM_NCCREATE */
                        if (!td) return 1;
 
-                       /* Minimum window size is 8x2 */
+                       /* Minimum window size is 80x24 */
                        rc.left = rc.top = 0;
-                       rc.right = rc.left + 8 * td->tile_wid + td->size_ow1 + td->size_ow2;
-                       rc.bottom = rc.top + 2 * td->tile_hgt + td->size_oh1 + td->size_oh2 + 1;
+                       rc.right = rc.left + 80 * td->tile_wid + td->size_ow1 + td->size_ow2;
+                       rc.bottom = rc.top + 24 * td->tile_hgt + td->size_oh1 + td->size_oh2 + 1;
 
                        /* Adjust */
                        AdjustWindowRectEx(&rc, td->dwStyle, TRUE, td->dwExStyle);
@@ -3893,26 +4076,6 @@ LRESULT FAR PASCAL AngbandWndProc(HWND hWnd, UINT uMsg,
                        lpmmi->ptMinTrackSize.x = rc.right - rc.left;
                        lpmmi->ptMinTrackSize.y = rc.bottom - rc.top;
 
-                       /* Maximum window size */
-                       rc.left = rc.top = 0;
-                       rc.right = rc.left + 80 * td->tile_wid + td->size_ow1 + td->size_ow2;
-                       rc.bottom = rc.top + 24 * td->tile_hgt + td->size_oh1 + td->size_oh2;
-
-                       /* Paranoia */
-                       rc.right  += (td->tile_wid - 1);
-                       rc.bottom += (td->tile_hgt - 1);
-
-                       /* Adjust */
-                       AdjustWindowRectEx(&rc, td->dwStyle, TRUE, td->dwExStyle);
-
-                       /* Save maximum size */
-                       lpmmi->ptMaxSize.x = rc.right - rc.left;
-                       lpmmi->ptMaxSize.y = rc.bottom - rc.top;
-
-                       /* Save maximum size */
-                       lpmmi->ptMaxTrackSize.x = rc.right - rc.left;
-                       lpmmi->ptMaxTrackSize.y = rc.bottom - rc.top;
-#endif
                        return 0;
                }
 
@@ -3985,7 +4148,11 @@ LRESULT FAR PASCAL AngbandWndProc(HWND hWnd, UINT uMsg,
                        {
                                if (!can_save)
                                {
+#ifdef JP
+                                       plog("º£¤Ï½ªÎ»¤Ç¤­¤Þ¤»¤ó¡£");
+#else
                                        plog("You may not do that right now.");
+#endif
                                        return 0;
                                }
 
@@ -3998,10 +4165,12 @@ LRESULT FAR PASCAL AngbandWndProc(HWND hWnd, UINT uMsg,
 
                                /* Save the game */
 #ifdef ZANGBAND
-                               do_cmd_save_game(FALSE);
+                               /* do_cmd_save_game(FALSE); */
 #else /* ZANGBAND */
-                               do_cmd_save_game();
+                               /* do_cmd_save_game(); */
 #endif /* ZANGBAND */
+                               Term_key_push(252);
+                               return 0;
                        }
                        quit(NULL);
                        return 0;
@@ -4049,23 +4218,28 @@ LRESULT FAR PASCAL AngbandWndProc(HWND hWnd, UINT uMsg,
 
                                case SIZE_RESTORED:
                                {
-                                       uint old_tile_wid = td->tile_wid;
-                                       uint old_tile_hgt = td->tile_hgt;
+                                       uint cols = (LOWORD(lParam) - td->size_ow1) / td->tile_wid;
+                                       uint rows = (HIWORD(lParam) - td->size_oh1) / td->tile_hgt;
 
-                                       td->size_hack = TRUE;
+                                       /* New size */
+                                       if ((td->cols != cols) || (td->rows != rows))
+                                       {
+                                               /* Save the new size */
+                                               td->cols = cols;
+                                               td->rows = rows;
 
-                                       td->tile_wid = LOWORD(lParam) / td->cols;
-                                       td->tile_hgt = HIWORD(lParam) / td->rows;
+                                               /* Activate */
+                                               Term_activate(&td->t);
 
-                                       if ((td->tile_wid != old_tile_wid) ||
-                                               (td->tile_hgt != old_tile_hgt))
-                                       {
-                                               term_getsize(td);
+                                               /* Resize the term */
+                                               Term_resize(td->cols, td->rows);
 
                                                /* Redraw later */
                                                InvalidateRect(td->w, NULL, TRUE);
                                        }
 
+                                       td->size_hack = TRUE;
+
                                        /* Show sub-windows */
                                        for (i = 1; i < MAX_TERM_DATA; i++)
                                        {
@@ -4113,8 +4287,7 @@ LRESULT FAR PASCAL AngbandWndProc(HWND hWnd, UINT uMsg,
                                /* Do something to sub-windows */
                                for (i = 1; i < MAX_TERM_DATA; i++)
                                {
-                                       SetWindowPos(data[i].w, hWnd, 0, 0, 0, 0,
-                                                    SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
+                                       if (!data[i].posfix) term_window_pos(&data[i], hWnd);
                                }
 
                                /* Focus on main window */
@@ -4125,6 +4298,24 @@ LRESULT FAR PASCAL AngbandWndProc(HWND hWnd, UINT uMsg,
 
                        break;
                }
+
+               case WM_ACTIVATEAPP:
+               {
+                       for (i = 1; i < MAX_TERM_DATA; i++)
+                       {
+                               if(data[i].visible)
+                               {
+                                       if (wParam == TRUE)
+                                       {
+                                               ShowWindow(data[i].w, SW_SHOW);
+                                       }
+                                       else
+                                       {
+                                               ShowWindow(data[i].w, SW_HIDE);
+                                       }
+                               }
+                       }
+               }
        }
 
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
@@ -4133,12 +4324,12 @@ LRESULT FAR PASCAL AngbandWndProc(HWND hWnd, UINT uMsg,
 
 #ifdef __MWERKS__
 LRESULT FAR PASCAL AngbandListProc(HWND hWnd, UINT uMsg,
-                                           WPARAM wParam, LPARAM lParam);
+                                          WPARAM wParam, LPARAM lParam);
 LRESULT FAR PASCAL AngbandListProc(HWND hWnd, UINT uMsg,
-                                           WPARAM wParam, LPARAM lParam)
+                                          WPARAM wParam, LPARAM lParam)
 #else /* __MWERKS__ */
 LRESULT FAR PASCAL AngbandListProc(HWND hWnd, UINT uMsg,
-                                           WPARAM wParam, LPARAM lParam)
+                                          WPARAM wParam, LPARAM lParam)
 #endif /* __MWERKS__ */
 {
        term_data *td;
@@ -4172,52 +4363,34 @@ LRESULT FAR PASCAL AngbandListProc(HWND hWnd, UINT uMsg,
 
                case WM_GETMINMAXINFO:
                {
-#if 0
-                       /* this message was sent before WM_NCCREATE */
-                       if (!td) return 1;
+                       MINMAXINFO FAR *lpmmi;
+                       RECT rc;
 
                        lpmmi = (MINMAXINFO FAR *)lParam;
 
-                       /* Minimum size */
+                       /* this message was sent before WM_NCCREATE */
+                       if (!td) return 1;
+
+                       /* Minimum window size is 80x24 */
                        rc.left = rc.top = 0;
-                       rc.right = rc.left + 8 * td->tile_wid + td->size_ow1 + td->size_ow2;
-                       rc.bottom = rc.top + 2 * td->tile_hgt + td->size_oh1 + td->size_oh2;
+                       rc.right = rc.left + 20 * td->tile_wid + td->size_ow1 + td->size_ow2;
+                       rc.bottom = rc.top + 3 * td->tile_hgt + td->size_oh1 + td->size_oh2 + 1;
 
                        /* Adjust */
                        AdjustWindowRectEx(&rc, td->dwStyle, TRUE, td->dwExStyle);
 
-                       /* Save the minimum size */
+                       /* Save minimum size */
                        lpmmi->ptMinTrackSize.x = rc.right - rc.left;
                        lpmmi->ptMinTrackSize.y = rc.bottom - rc.top;
 
-                       /* Maximum window size */
-                       rc.left = rc.top = 0;
-                       rc.right = rc.left + 80 * td->tile_wid + td->size_ow1 + td->size_ow2;
-                       rc.bottom = rc.top + 24 * td->tile_hgt + td->size_oh1 + td->size_oh2;
-
-                       /* Paranoia */
-                       rc.right += (td->tile_wid - 1);
-                       rc.bottom += (td->tile_hgt - 1);
-
-                       /* Adjust */
-                       AdjustWindowRectEx(&rc, td->dwStyle, TRUE, td->dwExStyle);
-
-                       /* Save maximum size */
-                       lpmmi->ptMaxSize.x = rc.right - rc.left;
-                       lpmmi->ptMaxSize.y = rc.bottom - rc.top;
-
-                       /* Save the maximum size */
-                       lpmmi->ptMaxTrackSize.x = rc.right - rc.left;
-                       lpmmi->ptMaxTrackSize.y = rc.bottom - rc.top;
-#endif
                        return 0;
                }
 
                case WM_SIZE:
                {
-                       uint old_tile_wid = td->tile_wid;
-                       uint old_tile_hgt = td->tile_hgt;
-
+                       uint cols;
+                       uint rows;
+                       
                        /* this message was sent before WM_NCCREATE */
                        if (!td) return 1;
 
@@ -4229,29 +4402,34 @@ LRESULT FAR PASCAL AngbandListProc(HWND hWnd, UINT uMsg,
 
                        td->size_hack = TRUE;
 
-                       td->tile_wid = LOWORD(lParam) / td->cols;
-                       td->tile_hgt = HIWORD(lParam) / td->rows;
+                       cols = (LOWORD(lParam) - td->size_ow1) / td->tile_wid;
+                       rows = (HIWORD(lParam) - td->size_oh1) / td->tile_hgt;
 
-                       if ((td->tile_wid != old_tile_wid) ||
-                               (td->tile_hgt != old_tile_hgt))
+                       /* New size */
+                       if ((td->cols != cols) || (td->rows != rows))
                        {
-                               if (((td->tile_wid < td->font_wid) ||
-                                        (td->tile_hgt < td->font_hgt)) ||
-                                       ((td->cols < 80) || (td->rows < 24)))
-                               {
-                                       td->tile_wid = td->font_wid;
-                                       td->tile_hgt = td->font_hgt;
+                               /* Save old term */
+                               term *old_term = Term;
 
-                                       td->cols = (LOWORD(lParam) - td->size_ow1 - td->size_ow2) / td->tile_wid;
-                                       td->rows = (HIWORD(lParam) - td->size_oh1 - td->size_oh2) / td->tile_hgt;
-                               }
+                               /* Save the new size */
+                               td->cols = cols;
+                               td->rows = rows;
+
+                               /* Activate */
+                               Term_activate(&td->t);
 
-                               term_getsize(td);
+                               /* Resize the term */
+                               Term_resize(td->cols, td->rows);
 
-                               MoveWindow(hWnd, td->pos_x, td->pos_y, td->size_wid, td->size_hgt, TRUE);
+                               /* Activate */
+                               Term_activate(old_term);
 
                                /* Redraw later */
                                InvalidateRect(td->w, NULL, TRUE);
+
+                               /* HACK - Redraw all windows */
+                               p_ptr->window = 0xFFFFFFFF;
+                               window_stuff();
                        }
 
                        td->size_hack = FALSE;
@@ -4366,12 +4544,12 @@ LRESULT FAR PASCAL AngbandListProc(HWND hWnd, UINT uMsg,
 
 #ifdef __MWERKS__
 LRESULT FAR PASCAL AngbandSaverProc(HWND hWnd, UINT uMsg,
-                                    WPARAM wParam, LPARAM lParam);
+                                   WPARAM wParam, LPARAM lParam);
 LRESULT FAR PASCAL AngbandSaverProc(HWND hWnd, UINT uMsg,
-                                    WPARAM wParam, LPARAM lParam)
+                                   WPARAM wParam, LPARAM lParam)
 #else /* __MWERKS__ */
 LRESULT FAR PASCAL AngbandSaverProc(HWND hWnd, UINT uMsg,
-                                            WPARAM wParam, LPARAM lParam)
+                                           WPARAM wParam, LPARAM lParam)
 #endif /* __MWERKS__ */
 {
        static int iMouse = 0;
@@ -4469,10 +4647,10 @@ static void hack_plog(cptr str)
        {
 #ifdef JP
                MessageBox(NULL, str, "·Ù¹ð¡ª",
-                          MB_ICONEXCLAMATION | MB_OK);
+                          MB_ICONEXCLAMATION | MB_OK);
 #else
                MessageBox(NULL, str, "Warning",
-                          MB_ICONEXCLAMATION | MB_OK);
+                          MB_ICONEXCLAMATION | MB_OK);
 #endif
 
        }
@@ -4489,10 +4667,10 @@ static void hack_quit(cptr str)
        {
 #ifdef JP
                MessageBox(NULL, str, "¥¨¥é¡¼¡ª",
-                          MB_ICONEXCLAMATION | MB_OK | MB_ICONSTOP);
+                          MB_ICONEXCLAMATION | MB_OK | MB_ICONSTOP);
 #else
                MessageBox(NULL, str, "Error",
-                          MB_ICONEXCLAMATION | MB_OK | MB_ICONSTOP);
+                          MB_ICONEXCLAMATION | MB_OK | MB_ICONSTOP);
 #endif
 
        }
@@ -4522,10 +4700,10 @@ static void hook_plog(cptr str)
        {
 #ifdef JP
                MessageBox(data[0].w, str, "·Ù¹ð¡ª",
-                          MB_ICONEXCLAMATION | MB_OK);
+                          MB_ICONEXCLAMATION | MB_OK);
 #else
                MessageBox(data[0].w, str, "Warning",
-                          MB_ICONEXCLAMATION | MB_OK);
+                          MB_ICONEXCLAMATION | MB_OK);
 #endif
 
        }
@@ -4545,10 +4723,10 @@ static void hook_quit(cptr str)
        {
 #ifdef JP
                MessageBox(data[0].w, str, "¥¨¥é¡¼¡ª",
-                          MB_ICONEXCLAMATION | MB_OK | MB_ICONSTOP);
+                          MB_ICONEXCLAMATION | MB_OK | MB_ICONSTOP);
 #else
                MessageBox(data[0].w, str, "Error",
-                          MB_ICONEXCLAMATION | MB_OK | MB_ICONSTOP);
+                          MB_ICONEXCLAMATION | MB_OK | MB_ICONSTOP);
 #endif
 
        }
@@ -4672,9 +4850,9 @@ static void init_stuff(void)
 
        /* Build the filename */
 #ifdef JP
-       path_build(path, 1024, ANGBAND_DIR_FILE, "news_j.txt");
+       path_build(path, sizeof(path), ANGBAND_DIR_FILE, "news_j.txt");
 #else
-       path_build(path, 1024, ANGBAND_DIR_FILE, "news.txt");
+       path_build(path, sizeof(path), ANGBAND_DIR_FILE, "news.txt");
 #endif
 
 
@@ -4684,7 +4862,7 @@ static void init_stuff(void)
 
 #ifndef JP
        /* Build the "font" path */
-       path_build(path, 1024, ANGBAND_DIR_XTRA, "font");
+       path_build(path, sizeof(path), ANGBAND_DIR_XTRA, "font");
 
        /* Allocate the path */
        ANGBAND_DIR_XTRA_FONT = string_make(path);
@@ -4693,7 +4871,7 @@ static void init_stuff(void)
        validate_dir(ANGBAND_DIR_XTRA_FONT, TRUE);
 
        /* Build the filename */
-       path_build(path, 1024, ANGBAND_DIR_XTRA_FONT, "8X13.FON");
+       path_build(path, sizeof(path), ANGBAND_DIR_XTRA_FONT, "8X13.FON");
 
        /* Hack -- Validate the basic font */
        validate_file(path);
@@ -4703,7 +4881,7 @@ static void init_stuff(void)
 #ifdef USE_GRAPHICS
 
        /* Build the "graf" path */
-       path_build(path, 1024, ANGBAND_DIR_XTRA, "graf");
+       path_build(path, sizeof(path), ANGBAND_DIR_XTRA, "graf");
 
        /* Allocate the path */
        ANGBAND_DIR_XTRA_GRAF = string_make(path);
@@ -4717,7 +4895,7 @@ static void init_stuff(void)
 #ifdef USE_SOUND
 
        /* Build the "sound" path */
-       path_build(path, 1024, ANGBAND_DIR_XTRA, "sound");
+       path_build(path, sizeof(path), ANGBAND_DIR_XTRA, "sound");
 
        /* Allocate the path */
        ANGBAND_DIR_XTRA_SOUND = string_make(path);
@@ -4730,7 +4908,7 @@ static void init_stuff(void)
 #ifdef USE_MUSIC
 
        /* Build the "music" path */
-       path_build(path, 1024, ANGBAND_DIR_XTRA, "music");
+       path_build(path, sizeof(path), ANGBAND_DIR_XTRA, "music");
 
        /* Allocate the path */
        ANGBAND_DIR_XTRA_MUSIC = string_make(path);
@@ -4741,7 +4919,7 @@ static void init_stuff(void)
 #endif /* USE_MUSIC */
 
        /* Build the "help" path */
-       path_build(path, 1024, ANGBAND_DIR_XTRA, "help");
+       path_build(path, sizeof(path), ANGBAND_DIR_XTRA, "help");
 
        /* Allocate the path */
        ANGBAND_DIR_XTRA_HELP = string_make(path);
@@ -4752,7 +4930,7 @@ static void init_stuff(void)
 
 
 int FAR PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,
-                       LPSTR lpCmdLine, int nCmdShow)
+                      LPSTR lpCmdLine, int nCmdShow)
 {
        int i;
 
@@ -4887,6 +5065,7 @@ int FAR PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,
          switch(lpCmdLine[1])
          {
          case 'p':
+         case 'P':
            {
              if (!lpCmdLine[2]) break;
              chuukei_server = TRUE;
@@ -4900,6 +5079,7 @@ int FAR PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,
            }
 
          case 'c':
+         case 'C':
            {
              if (!lpCmdLine[2]) break;
              chuukei_client = TRUE;