*/
#include "angband.h"
+#include "io/exit-panic.h"
#include "files.h"
#include "term.h"
-
#ifdef USE_GCU
/*
/*
* Include the proper "header" file
*/
-#ifdef USE_NCURSES
-# undef bool
-# include <ncurses.h>
-#else
# include <curses.h>
-#endif
typedef struct term_data term_data;
* Mega-Hack -- try to guess when "POSIX" is available.
* If the user defines two of these, we will probably crash.
*/
-#if !defined(USE_TPOSIX)
-# if !defined(USE_TERMIO) && !defined(USE_TCHARS)
-# if defined(_POSIX_VERSION)
-# define USE_TPOSIX
+#if !defined(USE_TERMIO) && !defined(USE_TCHARS)
+# if defined(_POSIX_VERSION)
+# define USE_TPOSIX
+# else
+# if defined(linux)
+# define USE_TERMIO
# else
-# if defined(linux)
-# define USE_TERMIO
-# else
-# define USE_TCHARS
-# endif
+# define USE_TCHARS
# endif
# endif
#endif
/*
- * Hack -- Amiga uses "fake curses" and cannot do any of this stuff
- */
-#if defined(AMIGA)
-# undef USE_TPOSIX
-# undef USE_TERMIO
-# undef USE_TCHARS
-#endif
-
-/*
* Try redefining the colors at startup.
*/
#define REDEFINE_COLORS
-
-
/*
* POSIX stuff
*/
# include <sys/types.h>
#endif
-
#include <locale.h>
-
/*
* XXX XXX Hack -- POSIX uses "O_NONBLOCK" instead of "O_NDELAY"
*
# define O_NDELAY O_NONBLOCK
#endif
-
/*
* OPTION: some machines lack "cbreak()"
* On these machines, we use an older definition
*/
/* #define cbreak() crmode() */
-
/*
* OPTION: some machines cannot handle "nonl()" and "nl()"
* On these machines, we can simply ignore those commands.
/* #define nonl() */
/* #define nl() */
-
/*
* Standard sound names
*/
static concptr ANGBAND_DIR_XTRA_SOUND;
/*
+ * todo 有効活用されていない疑惑
* Flag set once "sound" has been initialized
*/
static bool can_use_sound = FALSE;
*/
static concptr sound_file[SOUND_MAX];
-
/*
* Save the "normal" and "angband" terminal settings
*/
#endif
#ifdef USE_TCHARS
-
static struct ltchars norm_speciax_chars;
static struct sgttyb norm_ttyb;
static struct tchars norm_tchars;
static struct sgttyb game_ttyb;
static struct tchars game_tchars;
static int game_locax_chars;
-
#endif
-
-
/*
* Hack -- Number of initialized "term" structures
*/
static int active = 0;
-
-
#ifdef A_COLOR
-
/*
* Hack -- define "A_BRIGHT" to be "A_BOLD", because on many
* machines, "A_BRIGHT" produces ugly "inverse" video.
* Simple Angband to Curses color conversion table
*/
static int colortable[16];
-
#endif
-
-
/*
* Place the "keymap" into its "normal" state
*/
static void keymap_norm(void)
{
-
#ifdef USE_TPOSIX
-
/* restore the saved values of the special chars */
(void)tcsetattr(0, TCSAFLUSH, &norm_termios);
-
#endif
#ifdef USE_TERMIO
-
/* restore the saved values of the special chars */
(void)ioctl(0, TCSETA, (char *)&norm_termio);
-
#endif
#ifdef USE_TCHARS
-
/* restore the saved values of the special chars */
(void)ioctl(0, TIOCSLTC, (char *)&norm_speciax_chars);
(void)ioctl(0, TIOCSETP, (char *)&norm_ttyb);
(void)ioctl(0, TIOCSETC, (char *)&norm_tchars);
(void)ioctl(0, TIOCLSET, (char *)&norm_locax_chars);
-
#endif
-
}
*/
static void keymap_game(void)
{
-
#ifdef USE_TPOSIX
-
/* restore the saved values of the special chars */
(void)tcsetattr(0, TCSAFLUSH, &game_termios);
-
#endif
#ifdef USE_TERMIO
-
/* restore the saved values of the special chars */
(void)ioctl(0, TCSETA, (char *)&game_termio);
-
#endif
#ifdef USE_TCHARS
-
/* restore the saved values of the special chars */
(void)ioctl(0, TIOCSLTC, (char *)&game_speciax_chars);
(void)ioctl(0, TIOCSETP, (char *)&game_ttyb);
(void)ioctl(0, TIOCSETC, (char *)&game_tchars);
(void)ioctl(0, TIOCLSET, (char *)&game_locax_chars);
-
#endif
-
}
*/
static void keymap_norm_prepare(void)
{
-
#ifdef USE_TPOSIX
-
/* Get the normal keymap */
tcgetattr(0, &norm_termios);
-
#endif
#ifdef USE_TERMIO
-
/* Get the normal keymap */
(void)ioctl(0, TCGETA, (char *)&norm_termio);
-
#endif
#ifdef USE_TCHARS
-
/* Get the normal keymap */
(void)ioctl(0, TIOCGETP, (char *)&norm_ttyb);
(void)ioctl(0, TIOCGLTC, (char *)&norm_speciax_chars);
(void)ioctl(0, TIOCGETC, (char *)&norm_tchars);
(void)ioctl(0, TIOCLGET, (char *)&norm_locax_chars);
-
#endif
-
}
*/
static void keymap_game_prepare(void)
{
-
#ifdef USE_TPOSIX
-
/* Acquire the current mapping */
tcgetattr(0, &game_termios);
/* Normally, block until a character is read */
game_termios.c_cc[VMIN] = 1;
game_termios.c_cc[VTIME] = 0;
-
#endif
#ifdef USE_TERMIO
-
/* Acquire the current mapping */
(void)ioctl(0, TCGETA, (char *)&game_termio);
/* Force "Ctrl-Z" to suspend */
game_termio.c_cc[VSUSP] = (char)26;
- /* Hack -- Leave "VSTART/VSTOP" alone */
-
/* Disable the standard control characters */
game_termio.c_cc[VQUIT] = (char)-1;
game_termio.c_cc[VERASE] = (char)-1;
/* Normally, block until a character is read */
game_termio.c_cc[VMIN] = 1;
game_termio.c_cc[VTIME] = 0;
-
#endif
#ifdef USE_TCHARS
-
/* Get the default game characters */
(void)ioctl(0, TIOCGETP, (char *)&game_ttyb);
(void)ioctl(0, TIOCGLTC, (char *)&game_speciax_chars);
game_tchars.t_quitc = (char)-1;
game_tchars.t_eofc = (char)-1;
game_tchars.t_brkc = (char)-1;
-
#endif
-
}
-
/*
* Suspend/Resume
*/
static errr Term_xtra_gcu_alive(int v)
{
- /* Suspend */
if (!v)
{
/* Go to normal keymap mode */
/* Flush the output */
(void)fflush(stdout);
}
-
- /* Resume */
else
{
- /* Refresh */
- /* (void)touchwin(curscr); */
- /* (void)wrefresh(curscr); */
-
/* Restore the settings */
cbreak();
noecho();
keymap_game();
}
- /* Success */
return (0);
}
+
/*
* Check for existance of a file
*/
static bool check_file(concptr s)
{
FILE *fff;
-
fff = fopen(s, "r");
if (!fff) return (FALSE);
static bool init_sound(void)
{
/* Initialize once */
- if (!can_use_sound)
- {
- int i;
-
- char wav[128];
- char buf[1024];
+ if (can_use_sound) return can_use_sound;
- /* Prepare the sounds */
- for (i = 1; i < SOUND_MAX; i++)
- {
- /* Extract name of sound file */
- sprintf(wav, "%s.wav", angband_sound_name[i]);
+ int i;
+ char wav[128];
+ char buf[1024];
- /* Access the sound */
- path_build(buf, sizeof(buf), ANGBAND_DIR_XTRA_SOUND, wav);
+ /* Prepare the sounds */
+ for (i = 1; i < SOUND_MAX; i++)
+ {
+ /* Extract name of sound file */
+ sprintf(wav, "%s.wav", angband_sound_name[i]);
- /* Save the sound filename, if it exists */
- if (check_file(buf)) sound_file[i] = string_make(buf);
- }
+ /* Access the sound */
+ path_build(buf, sizeof(buf), ANGBAND_DIR_XTRA_SOUND, wav);
- /* Sound available */
- can_use_sound = TRUE;
- }
+ /* Save the sound filename, if it exists */
+ if (check_file(buf)) sound_file[i] = string_make(buf);
+ }
- /* Result */
- return (can_use_sound);
+ /* Sound available */
+ can_use_sound = TRUE;
+ return (can_use_sound);
}
if (can_fix_color)
{
/* Prepare the color pairs */
- for (i = 1; i <= 63; i++)
- {
- /* Reset the color */
- if (init_pair(i, (i - 1) % 8, (i - 1) / 8) == ERR)
- {
- quit("Color pair init failed");
- }
-
- /* Set up the colormap */
- colortable[i - 1] = (COLOR_PAIR(i) | A_NORMAL);
- colortable[i + 7] = (COLOR_PAIR(i) | A_BRIGHT);
-
- /* XXX XXX XXX Take account of "gamma correction" */
-
- /* Prepare the "Angband Colors" */
- Term_xtra_gcu_react();
- }
+ for (i = 1; i <= 15; i++)
+ {
+ if (init_pair(i, i, 0) == ERR)
+ {
+ quit("Color pair init failed");
+ }
+
+ colortable[i] = COLOR_PAIR(i);
+ Term_xtra_gcu_react();
+ }
}
/* Attempt to use colors */
else if (can_use_color)