#ifdef WINDOWS
-
+#include <windows.h>
#include <direct.h>
/*
#define IDM_FILE_OPEN 101
#define IDM_FILE_SAVE 110
#define IDM_FILE_SCORE 120
+#define IDM_FILE_MOVIE 121
#define IDM_FILE_EXIT 130
#define IDM_WINDOW_VIS_0 200
/*
* This may need to be removed for some compilers XXX XXX XXX
*/
+#if 0
#define STRICT
+#endif
/*
* Exclude parts of WINDOWS.H that are not needed
uint map_tile_hgt;
bool map_active;
-#ifdef JP
+#if 1 /* #ifdef JP */
LOGFONT lf;
#endif
static term_data *my_td;
/*
+ * Remember normal size of main window when maxmized
+ */
+POINT normsize;
+
+/*
+ * was main window maximized on previous playing
+ */
+bool win_maximized = FALSE;
+
+/*
* game in progress
*/
bool game_in_progress = FALSE;
static cptr ANGBAND_DIR_XTRA_GRAF;
static cptr ANGBAND_DIR_XTRA_SOUND;
static cptr ANGBAND_DIR_XTRA_HELP;
-#ifndef JP
+#if 0 /* #ifndef JP */
static cptr ANGBAND_DIR_XTRA_FONT;
#endif
#ifdef USE_MUSIC
*/
static bool Term_no_press = FALSE;
+/*
+ * Copy and paste
+ */
+static bool mouse_down = FALSE;
+static bool paint_rect = FALSE;
+static int mousex = 0, mousey = 0;
+static int oldx, oldy;
+
/*
* The "simple" color values
*
* Return a pointer to a static buffer holding the capitalized base name.
*/
-#ifndef JP
+#if 0 /* #ifndef JP */
static char *analyze_font(char *path, int *wp, int *hp)
{
int wid, hgt;
/*
* Write the "prefs" for a single term
*/
-static void save_prefs_aux(term_data *td, cptr sec_name)
+static void save_prefs_aux(int i)
{
+ term_data *td = &data[i];
+ char sec_name[128];
char buf[1024];
RECT rc;
+ WINDOWPLACEMENT lpwndpl;
/* Paranoia */
if (!td->w) return;
+ /* Make section name */
+ sprintf(sec_name, "Term-%d", i);
+
/* Visible */
- strcpy(buf, td->visible ? "1" : "0");
- WritePrivateProfileString(sec_name, "Visible", buf, ini_file);
+ if (i > 0)
+ {
+ strcpy(buf, td->visible ? "1" : "0");
+ WritePrivateProfileString(sec_name, "Visible", buf, ini_file);
+ }
/* Font */
#ifdef JP
strcpy(buf, td->lf.lfFaceName[0]!='\0' ? td->lf.lfFaceName : "£Í£Ó ¥´¥·¥Ã¥¯");
#else
+#if 0
strcpy(buf, td->font_file ? td->font_file : "8X13.FON");
+#else
+ strcpy(buf, td->lf.lfFaceName[0]!='\0' ? td->lf.lfFaceName : "Courier");
+#endif
#endif
WritePrivateProfileString(sec_name, "Font", buf, ini_file);
-#ifdef JP
+#if 1 /* #ifdef JP */
wsprintf(buf, "%d", td->lf.lfWidth);
WritePrivateProfileString(sec_name, "FontWid", buf, ini_file);
wsprintf(buf, "%d", td->lf.lfHeight);
wsprintf(buf, "%d", td->tile_hgt);
WritePrivateProfileString(sec_name, "TileHgt", buf, ini_file);
+ /* Get window placement and dimensions */
+ lpwndpl.length = sizeof(WINDOWPLACEMENT);
+ GetWindowPlacement(td->w, &lpwndpl);
+
+ /* Acquire position in *normal* mode (not minimized) */
+ rc = lpwndpl.rcNormalPosition;
+
/* Window size (x) */
- wsprintf(buf, "%d", td->cols);
+ if (i == 0) wsprintf(buf, "%d", normsize.x);
+ else wsprintf(buf, "%d", td->cols);
WritePrivateProfileString(sec_name, "NumCols", buf, ini_file);
/* Window size (y) */
- wsprintf(buf, "%d", td->rows);
+ if (i == 0) wsprintf(buf, "%d", normsize.y);
+ else wsprintf(buf, "%d", td->rows);
WritePrivateProfileString(sec_name, "NumRows", buf, ini_file);
+ /* Maxmized (only main window) */
+ if (i == 0)
+ {
+ strcpy(buf, IsZoomed(td->w) ? "1" : "0");
+ WritePrivateProfileString(sec_name, "Maximized", buf, ini_file);
+ }
+
/* Acquire position */
GetWindowRect(td->w, &rc);
WritePrivateProfileString(sec_name, "PositionY", buf, ini_file);
/* Window Z position */
- strcpy(buf, td->posfix ? "1" : "0");
- WritePrivateProfileString(sec_name, "PositionFix", buf, ini_file);
+ if (i > 0)
+ {
+ strcpy(buf, td->posfix ? "1" : "0");
+ WritePrivateProfileString(sec_name, "PositionFix", buf, ini_file);
+ }
}
/* Save window prefs */
for (i = 0; i < MAX_TERM_DATA; ++i)
{
- term_data *td = &data[i];
-
- sprintf(buf, "Term-%d", i);
-
- save_prefs_aux(td, buf);
+ save_prefs_aux(i);
}
}
/*
* Load the "prefs" for a single term
*/
-static void load_prefs_aux(term_data *td, cptr sec_name)
+static void load_prefs_aux(int i)
{
+ term_data *td = &data[i];
+ char sec_name[128];
char tmp[1024];
int wid, hgt;
+ /* Make section name */
+ sprintf(sec_name, "Term-%d", i);
+
+ /* Make section name */
+ sprintf(sec_name, "Term-%d", i);
+
/* Visible */
- td->visible = (GetPrivateProfileInt(sec_name, "Visible", td->visible, ini_file) != 0);
+ if (i > 0)
+ {
+ td->visible = (GetPrivateProfileInt(sec_name, "Visible", td->visible, ini_file) != 0);
+ }
/* Desired font, with default */
#ifdef JP
GetPrivateProfileString(sec_name, "Font", "£Í£Ó ¥´¥·¥Ã¥¯", tmp, 127, ini_file);
#else
+#if 0
GetPrivateProfileString(sec_name, "Font", "8X13.FON", tmp, 127, ini_file);
+#else
+ GetPrivateProfileString(sec_name, "Font", "Courier", tmp, 127, ini_file);
+#endif
#endif
td->bizarre = (GetPrivateProfileInt(sec_name, "Bizarre", td->bizarre, ini_file) != 0);
/* Analyze font, save desired font name */
-#ifdef JP
+#if 1 /* #ifdef JP */
td->font_want = string_make(tmp);
hgt = 15; wid = 0;
td->lf.lfWidth = GetPrivateProfileInt(sec_name, "FontWid", wid, ini_file);
/* Tile size */
-#ifdef JP
+#if 1 /* #ifdef JP */
td->tile_wid = GetPrivateProfileInt(sec_name, "TileWid", td->lf.lfWidth, ini_file);
td->tile_hgt = GetPrivateProfileInt(sec_name, "TileHgt", td->lf.lfHeight, ini_file);
#else
/* Window size */
td->cols = GetPrivateProfileInt(sec_name, "NumCols", td->cols, ini_file);
td->rows = GetPrivateProfileInt(sec_name, "NumRows", td->rows, ini_file);
+ normsize.x = td->cols; normsize.y = td->rows;
+
+ /* Window size */
+ if (i == 0)
+ {
+ win_maximized = GetPrivateProfileInt(sec_name, "Maximized", win_maximized, ini_file);
+ }
/* 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);
+ if (i > 0)
+ {
+ td->posfix = GetPrivateProfileInt(sec_name, "PositionFix", td->posfix, ini_file);
+ }
}
{
int i;
- char buf[1024];
-
/* Extract the "arg_graphics" flag */
arg_graphics = GetPrivateProfileInt("Angband", "Graphics", GRAPHICS_NONE, ini_file);
/* Load window prefs */
for (i = 0; i < MAX_TERM_DATA; ++i)
{
- term_data *td = &data[i];
-
- sprintf(buf, "Term-%d", i);
-
- load_prefs_aux(td, buf);
+ load_prefs_aux(i);
}
}
{
int wid, hgt;
-#ifndef JP
+#if 0 /* #ifndef JP */
int i;
char *base;
char buf[1024];
/* Forget the old font (if needed) */
if (td->font_id) DeleteObject(td->font_id);
-#ifdef JP
+#if 1 /* #ifdef JP */
/* Unused */
(void)path;
*/
static void term_change_font(term_data *td)
{
-#ifdef JP
+#if 1 /* #ifdef JP */
CHOOSEFONT cf;
memset(&cf, 0, sizeof(cf));
}
+void Term_inversed_area(HWND hWnd, int x, int y, int w, int h)
+{
+ HDC hdc;
+ HPEN oldPen;
+ HBRUSH myBrush, oldBrush;
+
+ term_data *td = (term_data *)GetWindowLong(hWnd, 0);
+ int tx = td->size_ow1 + x * td->tile_wid;
+ int ty = td->size_oh1 + y * td->tile_hgt;
+ int tw = w * td->tile_wid - 1;
+ int th = h * td->tile_hgt - 1;
+
+ hdc = GetDC(hWnd);
+ myBrush = CreateSolidBrush(RGB(255, 255, 255));
+ oldBrush = SelectObject(hdc, myBrush);
+ oldPen = SelectObject(hdc, GetStockObject(NULL_PEN) );
+
+ PatBlt(hdc, tx, ty, tw, th, PATINVERT);
+
+ SelectObject(hdc, oldBrush);
+ SelectObject(hdc, oldPen);
+}
RECT rc;
HDC hdc;
-
-#ifdef JP
+#if 1 /* #ifdef JP */
static HBITMAP WALL;
static HBRUSH myBrush, oldBrush;
static HPEN oldPen;
rc.right += td->tile_wid;
}
#else
+#if 1
+ if (*(s+i)==127){
+ 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);
+
+ /* Advance */
+ rc.left += td->tile_wid;
+ rc.right += td->tile_wid;
+ } else {
+ /* Dump the text */
+ ExtTextOut(hdc, rc.left, rc.top, ETO_CLIPPED, &rc,
+ s+i, 1, NULL);
+
+ /* Advance */
+ rc.left += td->tile_wid;
+ rc.right += td->tile_wid;
+ }
+#else
/* Dump the text */
ExtTextOut(hdc, rc.left, rc.top, 0, &rc,
s+i, 1, NULL);
rc.left += td->tile_wid;
rc.right += td->tile_wid;
#endif
+#endif
}
}
term_data *td;
-#ifndef JP
+#if 0 /* #ifndef JP */
char buf[1024];
#endif
td->pos_x = 7 * 30;
td->pos_y = 7 * 20;
td->posfix = FALSE;
-
-#ifdef JP
+#if 1 /* #ifdef JP */
td->bizarre = TRUE;
#endif
/* Sub windows */
td->pos_x = (7 - i) * 30;
td->pos_y = (7 - i) * 20;
td->posfix = FALSE;
-#ifdef JP
+#if 1 /* #ifdef JP */
td->bizarre = TRUE;
#endif
}
{
td = &data[i];
-#ifdef JP
+#if 1 /* #ifdef JP */
strncpy(td->lf.lfFaceName, td->font_want, LF_FACESIZE);
- td->lf.lfCharSet = SHIFTJIS_CHARSET;
+ td->lf.lfCharSet = DEFAULT_CHARSET;
td->lf.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE;
/* Activate the chosen font */
term_force_font(td, NULL);
term_data_link(td);
angband_term[0] = &td->t;
+ normsize.x = td->cols;
+ normsize.y = td->rows;
/* Activate the main window */
- SetActiveWindow(td->w);
+ if (win_maximized) ShowWindow(td->w, SW_SHOWMAXIMIZED);
+ else ShowWindow(td->w, SW_SHOW);
/* Bring main window back to top */
SetWindowPos(td->w, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
break;
}
+ /* Open game */
+ case IDM_FILE_MOVIE:
+ {
+ if (!initialized)
+ {
+#ifdef JP
+ plog("¤Þ¤À½é´ü²½Ãæ¤Ç¤¹...");
+#else
+ plog("You cannot do that yet...");
+#endif
+ }
+ else if (game_in_progress)
+ {
+#ifdef JP
+ plog("¥×¥ì¥¤Ãæ¤Ï¥à¡¼¥Ó¡¼¤ò¥í¡¼¥É¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤»¤ó¡ª");
+#else
+ plog("You can't open a movie while you're playing!");
+#endif
+ }
+ else
+ {
+ memset(&ofn, 0, sizeof(ofn));
+ ofn.lStructSize = sizeof(ofn);
+ ofn.hwndOwner = data[0].w;
+ ofn.lpstrFilter = "Angband Movie Files (*.amv)\0*.amv\0";
+ ofn.nFilterIndex = 1;
+ ofn.lpstrFile = savefile;
+ ofn.nMaxFile = 1024;
+ ofn.lpstrInitialDir = ANGBAND_DIR_USER;
+ ofn.Flags = OFN_FILEMUSTEXIST | OFN_NOCHANGEDIR;
+
+ if (GetOpenFileName(&ofn))
+ {
+ /* Load 'savefile' */
+ prepare_browse_movie_aux(savefile);
+ play_game(FALSE);
+ quit(NULL);
+ return;
+ }
+ }
+ break;
+ }
+
case IDM_WINDOW_VIS_0:
{
return 0;
}
+ case WM_LBUTTONDOWN:
+ {
+ mousex = MIN(LOWORD(lParam) / td->tile_wid, td->cols - 1);
+ mousey = MIN(HIWORD(lParam) / td->tile_hgt, td->rows - 1);
+ mouse_down = TRUE;
+ oldx = mousex;
+ oldy = mousey;
+ return 0;
+ }
+
+ case WM_LBUTTONUP:
+ {
+ HGLOBAL hGlobal;
+ LPSTR lpStr;
+ int i, j, sz;
+ int dx = abs(oldx - mousex) + 1;
+ int dy = abs(oldy - mousey) + 1;
+ int ox = (oldx > mousex) ? mousex : oldx;
+ int oy = (oldy > mousey) ? mousey : oldy;
+
+ mouse_down = FALSE;
+ paint_rect = FALSE;
+
+#ifdef JP
+ sz = (dx + 3) * dy;
+#else
+ sz = (dx + 2) * dy;
+#endif
+ hGlobal = GlobalAlloc(GHND, sz + 1);
+ if (hGlobal == NULL) return 0;
+ lpStr = (LPSTR)GlobalLock(hGlobal);
+
+ for (i = 0; i < dy; i++)
+ {
+#ifdef JP
+ char *s;
+ char **scr = data[0].t.scr->c;
+
+ C_MAKE(s, (dx + 1), char);
+ strncpy(s, &scr[oy + i][ox], dx);
+
+ if (ox > 0)
+ {
+ if (iskanji(scr[oy + i][ox - 1])) s[0] = ' ';
+ }
+
+ if (ox + dx < data[0].cols)
+ {
+ if (iskanji(scr[oy + i][ox + dx - 1])) s[dx - 1] = ' ';
+ }
+
+ for (j = 0; j < dx; j++)
+ {
+ if (s[j] == 127) s[j] = '#';
+ *lpStr++ = s[j];
+ }
+#else
+ for (j = 0; j < dx; j++)
+ {
+ *lpStr++ = data[0].t.scr->c[oy + i][ox + j];
+ }
+#endif
+ if (dy > 1)
+ {
+ *lpStr++ = '\r';
+ *lpStr++ = '\n';
+ }
+ }
+
+ GlobalUnlock(hGlobal);
+ if (OpenClipboard(hWnd) == 0)
+ {
+ GlobalFree(hGlobal);
+ return 0;
+ }
+ EmptyClipboard();
+ SetClipboardData(CF_TEXT, hGlobal);
+ CloseClipboard();
+
+ Term_redraw();
+
+ return 0;
+ }
+
+ case WM_MOUSEMOVE:
+ {
+ if (mouse_down)
+ {
+ int dx, dy;
+ int cx = MIN(LOWORD(lParam) / td->tile_wid, td->cols - 1);
+ int cy = MIN(HIWORD(lParam) / td->tile_hgt, td->rows - 1);
+ int ox, oy;
+
+ if (paint_rect)
+ {
+ dx = abs(oldx - mousex) + 1;
+ dy = abs(oldy - mousey) + 1;
+ ox = (oldx > mousex) ? mousex : oldx;
+ oy = (oldy > mousey) ? mousey : oldy;
+ Term_inversed_area(hWnd, ox, oy, dx, dy);
+ }
+ else
+ {
+ paint_rect = TRUE;
+ }
+
+ dx = abs(cx - mousex) + 1;
+ dy = abs(cy - mousey) + 1;
+ ox = (cx > mousex) ? mousex : cx;
+ oy = (cy > mousey) ? mousey : cy;
+ Term_inversed_area(hWnd, ox, oy, dx, dy);
+
+ oldx = cx;
+ oldy = cy;
+ }
+ return 0;
+ }
+
case WM_INITMENU:
{
setup_menus();
td->cols = cols;
td->rows = rows;
+ if (!IsZoomed(td->w) && !IsIconic(td->w))
+ {
+ normsize.x = td->cols;
+ normsize.y = td->rows;
+ }
+
/* Activate */
Term_activate(&td->t);
case WM_ACTIVATEAPP:
{
+ if (IsIconic(td->w)) break;
+
for (i = 1; i < MAX_TERM_DATA; i++)
{
if(data[i].visible)
validate_file(path);
-#ifndef JP
+#if 0 /* #ifndef JP */
/* Build the "font" path */
path_build(path, sizeof(path), ANGBAND_DIR_XTRA, "font");
/* We are now initialized */
initialized = TRUE;
-
#ifdef CHUUKEI
if(lpCmdLine[0] == '-'){
switch(lpCmdLine[1])
quit(NULL);
return 0;
}
+ case 'X':
+ case 'x':
+ {
+ if (!lpCmdLine[2]) break;
+ prepare_browse_movie(&lpCmdLine[2]);
+ play_game(FALSE);
+ quit(NULL);
+ return 0;
+ }
}
}
#endif