Remove experimental Unicode support.
This reverts commit 7f0f43e6f9 and some related
subsequent commits.
This compiles, but I have not done extensive testing.
Conflicts:
include/config.h
include/decl.h
include/extern.h
include/global.h
include/tradstdc.h
include/wintty.h
src/drawing.c
src/files.c
src/hacklib.c
src/mapglyph.c
src/options.c
sys/winnt/nttty.c
win/tty/getline.c
win/tty/topl.c
win/tty/wintty.c
This commit is contained in:
132
dat/symbols
132
dat/symbols
@@ -201,10 +201,6 @@ start: RogueEpyx
|
||||
S_food: \x05 # club (as in cards)
|
||||
S_potion: \xad # upside down '!'
|
||||
S_scroll: \x0e # musical note
|
||||
# S_armor: \x5b
|
||||
# S_ring: \x3d
|
||||
# S_amulet: \x0c
|
||||
# S_tool: \x28
|
||||
S_wand: \xe7 # greek tau
|
||||
S_coin: \x0f # yes it's the same as gems
|
||||
S_gem: \x0f # fancy '*'
|
||||
@@ -397,131 +393,3 @@ start: NHAccess
|
||||
S_explode9: \047
|
||||
finish
|
||||
|
||||
start: Unicode_US
|
||||
Description: Unicode symbols similar to code page 437
|
||||
Restrictions: Unicode
|
||||
S_vwall: U+2502 # box drawings light vertical
|
||||
S_hwall: U+2500 # box drawings light horizontal
|
||||
S_tlcorn: U+250C # box drawings light down and right
|
||||
S_trcorn: U+2510 # box drawings light down and left
|
||||
S_blcorn: U+2514 # box drawings light up and right
|
||||
S_brcorn: U+2518 # box drawings light up and left
|
||||
S_crwall: U+253C # box drawings light up and left
|
||||
S_tuwall: U+2534 # box drawings light up and horizontal
|
||||
S_tdwall: U+252C # box drawings light down and horizontal
|
||||
S_tlwall: U+2524 # box drawings light vertical and left
|
||||
S_trwall: U+251C # box drawings light vertical and right
|
||||
S_ndoor: U+2556 # box drawings down double and left single
|
||||
S_vodoor: U+25A0 # black square
|
||||
S_hodoor: U+25A0 # black square
|
||||
S_bars: U+2261 # identical to
|
||||
S_tree: U+00B1 # plus-minus sign
|
||||
S_room: U+00B7 # middle dot
|
||||
S_corr: U+2591 # light shade
|
||||
S_litcorr: U+2592 # medium shade
|
||||
S_fountain: U+2320 # top half integral
|
||||
S_pool: U+2248 # almost equal to
|
||||
S_ice: U+00B7 # middle dot
|
||||
S_lava: U+2248 # almost equal to
|
||||
S_vodbridge: U+00B7 # middle dot
|
||||
S_hodbridge: U+00B7 # middle dot
|
||||
S_water: U+2248 # almost equal to
|
||||
S_vbeam: U+2502 # box drawings light vertical
|
||||
S_hbeam: U+2500 # box drawings light horizontal
|
||||
S_sw_ml: U+2502 # box drawings light vertical
|
||||
S_sw_mr: U+2502 # box drawings light vertical
|
||||
S_explode4: U+2502 # box drawings light vertical
|
||||
S_explode6: U+2502 # box drawings light vertical
|
||||
finish
|
||||
|
||||
start: Unicode_non_US
|
||||
Description: If default OEM CP for non-Unicode programs is not 437 or 850
|
||||
Restrictions: Unicode
|
||||
S_vwall: U+2502 # box drawings light vertical
|
||||
S_hwall: U+2500 # box drawings light horizontal
|
||||
S_tlcorn: U+250C # box drawings light down and right
|
||||
S_trcorn: U+2510 # box drawings light down and left
|
||||
S_blcorn: U+2514 # box drawings light up and right
|
||||
S_brcorn: U+2518 # box drawings light up and left
|
||||
S_crwall: U+253C # box drawings light up and left
|
||||
S_tuwall: U+2534 # box drawings light up and horizontal
|
||||
S_tdwall: U+252C # box drawings light down and horizontal
|
||||
S_tlwall: U+2524 # box drawings light vertical and left
|
||||
S_trwall: U+251C # box drawings light vertical and right
|
||||
S_vodoor: U+25A0 # black square
|
||||
S_hodoor: U+25A0 # black square
|
||||
S_corr: U+2591 # light shade
|
||||
S_litcorr: U+2592 # medium shade
|
||||
S_vbeam: U+2502 # box drawings light vertical
|
||||
S_hbeam: U+2500 # box drawings light horizontal
|
||||
S_sw_ml: U+2502 # box drawings light vertical
|
||||
S_sw_mr: U+2502 # box drawings light vertical
|
||||
S_explode4: U+2502 # box drawings light vertical
|
||||
S_explode6: U+2502 # box drawings light vertical
|
||||
S_coin: U+20AC # euro
|
||||
finish
|
||||
|
||||
start: UnicodeRogueEpyx
|
||||
Description: Unicode Rogue level symbols
|
||||
Restrictions: Unicode
|
||||
Restrictions: Rogue
|
||||
Color: Yes
|
||||
S_weapon: U+2191 # up arrow
|
||||
S_armor: U+25d9 # Vert rect with o
|
||||
S_ring: U+2642 # circle with arrow
|
||||
S_amulet: U+2640 # "female" symbol
|
||||
S_food: U+2663 # club (as in cards)
|
||||
S_potion: U+00a1 # upside down '!'
|
||||
S_scroll: U+266a # musical note
|
||||
S_wand: U+03c4 # greek tau
|
||||
S_coin: U+263c # yes it's the same as gems
|
||||
S_gem: U+263c # fancy '*'
|
||||
S_rock: U+0060 # grave accent
|
||||
S_ball: U+0030 # digit 0
|
||||
S_chain: U+005f # low line
|
||||
S_venom: U+002e # full stop
|
||||
S_book: U+002b # + sign
|
||||
S_vwall: U+2551 # all walls now use
|
||||
S_hwall: U+2550 # double line graphics
|
||||
S_tlcorn: U+2554 # box drawing double down and right
|
||||
S_trcorn: U+2557 # box drawing double down and left
|
||||
S_blcorn: U+255a # box drawing double up and right
|
||||
S_brcorn: U+255d # box drawing double up and left
|
||||
S_crwall: U+256c # box drawing double vertical and horizontal
|
||||
S_tuwall: U+2569 # box drawing double up and horizontal
|
||||
S_tdwall: U+2566 # box drawing double down and horizontal
|
||||
S_tlwall: U+2563 # box drawing double vertical and left
|
||||
S_trwall: U+2560 # box drawing double vertical and right
|
||||
S_ndoor: U+256c # box drawing double vertical and horizontal
|
||||
S_vodoor: U+256c # box drawing double vertical and horizontal
|
||||
S_hodoor: U+256c # box drawing double vertical and horizontal
|
||||
S_room: U+00b7 # centered dot
|
||||
S_corr: U+2592 # medium shade
|
||||
S_litcorr: U+2593 # dark shade
|
||||
S_upstair: U+001e # Greek Xi
|
||||
S_dnstair: U+001f
|
||||
S_arrow_trap: U+2666 # diamond (cards)
|
||||
S_dart_trap: U+2666
|
||||
S_falling_rock_trap: U+2666
|
||||
S_squeaky_board: U+2666
|
||||
S_bear_trap: U+2666
|
||||
S_land_mine: U+2666
|
||||
S_rolling_boulder_trap: U+2666
|
||||
S_sleeping_gas_trap: U+2666
|
||||
S_rust_trap: U+2666
|
||||
S_fire_trap: U+2666
|
||||
S_pit: U+2666
|
||||
S_spiked_pit: U+2666
|
||||
S_hole: U+2666
|
||||
S_trap_door: U+2666
|
||||
S_teleportation_trap: U+2666
|
||||
S_level_teleporter: U+2666
|
||||
S_magic_portal: U+2666
|
||||
S_web: U+2666
|
||||
S_statue_trap: U+2666
|
||||
S_magic_trap: U+2666
|
||||
S_anti_magic_trap: U+2666
|
||||
S_polymorph_trap: U+2666
|
||||
S_human: U+263a # face
|
||||
finish
|
||||
|
||||
|
||||
@@ -315,10 +315,6 @@
|
||||
*/
|
||||
#endif /* CHDIR */
|
||||
|
||||
/*
|
||||
* Enable some UNICODE support.
|
||||
*/
|
||||
/*#define UNICODE_SUPPORT */ /* master on/off for any unicode support */
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -320,7 +320,6 @@ E NEARDATA winid WIN_MESSAGE;
|
||||
E NEARDATA winid WIN_STATUS;
|
||||
#endif
|
||||
E NEARDATA winid WIN_MAP, WIN_INVEN;
|
||||
E nhwchar toplines[];
|
||||
|
||||
/* pline (et al) for a single string argument (suppress compiler warning) */
|
||||
#define pline1(cstr) pline("%s", cstr)
|
||||
@@ -331,6 +330,7 @@ E nhwchar toplines[];
|
||||
#define Sprintf1(buf, cstr) Sprintf(buf, "%s", cstr)
|
||||
#define panic1(cstr) panic("%s", cstr)
|
||||
|
||||
E char toplines[];
|
||||
#ifndef TCAP_H
|
||||
E struct tc_gbl_data { /* also declared in tcap.h */
|
||||
char *tc_AS, *tc_AE; /* graphics start and end (tty font swapping) */
|
||||
|
||||
@@ -731,7 +731,6 @@ E void FDECL(check_recordfile, (const char *));
|
||||
E void NDECL(read_wizkit);
|
||||
E int FDECL(read_sym_file, (int));
|
||||
E int FDECL(parse_sym_line, (char *,int));
|
||||
E int FDECL(sym_val, (const char *));
|
||||
E void FDECL(paniclog, (const char *, const char *));
|
||||
E int FDECL(validate_prefix_locations, (char *));
|
||||
#ifdef SELECTSAVED
|
||||
@@ -846,20 +845,6 @@ E int NDECL(phase_of_the_moon);
|
||||
E boolean NDECL(friday_13th);
|
||||
E int NDECL(night);
|
||||
E int NDECL(midnight);
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
E nhwchar *FDECL(nhwstrncpy, (nhwchar *,const char *,size_t));
|
||||
E nhwchar *FDECL(nhwncpy, (nhwchar *,const nhwchar *,size_t));
|
||||
E nhwchar *FDECL(nhwcpy, (nhwchar *,const nhwchar *));
|
||||
E nhwchar *FDECL(nhwstrcpy, (nhwchar *,const char *));
|
||||
E char *FDECL(strnhwcpy, (char *,const nhwchar *));
|
||||
E nhwchar *FDECL(nhwstrcat, (nhwchar *,const char *));
|
||||
E nhwchar *FDECL(nhwcat, (nhwchar *,const nhwchar *));
|
||||
E nhwchar *FDECL(nhwindex, (const nhwchar *,int));
|
||||
E size_t FDECL(nhwlen, (const nhwchar *));
|
||||
E int FDECL(nhwcmp, (const nhwchar *,const nhwchar *));
|
||||
E int FDECL(nhwncmp, (const nhwchar *,const nhwchar *,int));
|
||||
E int FDECL(nhwstrcmp, (const nhwchar *,const char *));
|
||||
#endif
|
||||
|
||||
/* ### invent.c ### */
|
||||
|
||||
@@ -1587,6 +1572,7 @@ E int FDECL(load_symset, (const char *,int));
|
||||
E void FDECL(parsesymbols, (char *));
|
||||
E struct symparse *FDECL(match_sym, (char *));
|
||||
E void NDECL(set_playmode);
|
||||
E int FDECL(sym_val, (char *));
|
||||
|
||||
/* ### pager.c ### */
|
||||
|
||||
|
||||
@@ -198,8 +198,6 @@ struct instance_flags {
|
||||
boolean rlecomp; /* run-length comp of levels when writing savefile */
|
||||
uchar num_pad_mode;
|
||||
boolean echo; /* 1 to echo characters */
|
||||
boolean unicodecapable; /* unicode support is possible on platform */
|
||||
boolean unicodedisp; /* unicode support is turned on */
|
||||
#if 0
|
||||
boolean DECgraphics; /* use DEC VT-xxx extended character set */
|
||||
boolean IBMgraphics; /* use IBM extended character set */
|
||||
|
||||
@@ -65,41 +65,10 @@ typedef xchar boolean; /* 0 or 1 */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* UNICODE_SUPPORT
|
||||
* Unicode/wide character related support.
|
||||
* type nhsym: loadable symbols go into this type
|
||||
*/
|
||||
#ifdef UNICODE_SUPPORT
|
||||
# define UNICODE_DRAWING /* store drawing symbols in wchar_t data type */
|
||||
# define UNICODE_WIDEWINPORT /* store and render wide chars in window port */
|
||||
/*# define UNICODE_PLAYERTEXT*/ /* not implemented - player input in wide chars */
|
||||
#include <limits.h>
|
||||
#include <wchar.h>
|
||||
#else
|
||||
# undef UNICODE_DRAWING
|
||||
# undef UNICODE_WIDEWINPORT
|
||||
# undef UNICODE_PLAYERTEXT
|
||||
#endif
|
||||
|
||||
#if defined(UNICODE_DRAWING)
|
||||
typedef wchar_t nhsym; /* nhsym is wide char */
|
||||
#else
|
||||
typedef uchar nhsym;
|
||||
#endif
|
||||
|
||||
#if defined(UNICODE_WIDEWINPORT)
|
||||
typedef wchar_t nhwchar; /* nhwchar (window port char) is wide char */
|
||||
#else
|
||||
typedef char nhwchar;
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* Not Implemented presently */
|
||||
#if defined(UNICODE_PLAYERTEXT)
|
||||
typedef wchar_t nhptext; /* player input is wide char */
|
||||
#else
|
||||
typedef char nhptext;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef STRNCMPI
|
||||
# ifndef __SASC_60 /* SAS/C already shifts to stricmp */
|
||||
|
||||
@@ -193,11 +193,6 @@ extern void NDECL(toggle_mouse_support);
|
||||
extern void FDECL(map_subkeyvalue, (char *));
|
||||
extern void NDECL(load_keyboard_handler);
|
||||
extern void NDECL(raw_clear_screen);
|
||||
# ifdef UNICODE_WIDEWINPORT
|
||||
extern void FDECL(xputc, (NHWCHAR_P));
|
||||
# else
|
||||
extern void FDECL(xputc, (int));
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
22
include/rm.h
22
include/rm.h
@@ -227,13 +227,6 @@ struct symdef {
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
* Graphics sets for display symbols
|
||||
*/
|
||||
#define PRIMARY 0 /* primary graphics */
|
||||
#define ROGUESET 1 /* rogue graphics */
|
||||
#define NUM_GRAPHICS 2
|
||||
|
||||
struct symparse {
|
||||
unsigned range;
|
||||
#define SYM_CONTROL 1 /* start/finish markers */
|
||||
@@ -260,18 +253,25 @@ struct symsetentry {
|
||||
Bitfield(nocolor,1); /* don't use color if set */
|
||||
Bitfield(primary,1); /* restricted for use as primary set */
|
||||
Bitfield(rogue,1); /* restricted for use as rogue lev set */
|
||||
Bitfield(unicode,1); /* restricted for use as a unicode set */
|
||||
/* 5 free bits */
|
||||
};
|
||||
|
||||
/*
|
||||
* Graphics sets for display symbols
|
||||
*/
|
||||
#define DEFAULT_GRAPHICS 0 /* regular characters: '-', '+', &c */
|
||||
#define PRIMARY 0 /* primary graphics set */
|
||||
#define ROGUESET 1 /* rogue graphics set */
|
||||
#define NUM_GRAPHICS 2
|
||||
|
||||
/*
|
||||
* special symbol set handling types ( for invoking callbacks, etc.)
|
||||
* Must match the order of the known_handlers strings
|
||||
* in drawing.c
|
||||
*/
|
||||
#define H_UNK 0
|
||||
#define H_IBM 1
|
||||
#define H_DEC 2
|
||||
#define H_UNK 0
|
||||
#define H_IBM 1
|
||||
#define H_DEC 2
|
||||
|
||||
extern const struct symdef defsyms[MAXPCHARS]; /* defaults */
|
||||
extern const struct symdef def_warnsyms[WARNCOUNT];
|
||||
|
||||
@@ -257,7 +257,6 @@ typedef genericptr genericptr_t; /* (void *) or (char *) */
|
||||
# define BOOLEAN_P boolean
|
||||
# endif
|
||||
# define ALIGNTYP_P aligntyp
|
||||
# define NHWCHAR_P nhwchar
|
||||
#else
|
||||
# ifdef WIDENED_PROTOTYPES
|
||||
# define CHAR_P int
|
||||
@@ -267,14 +266,6 @@ typedef genericptr genericptr_t; /* (void *) or (char *) */
|
||||
# define SHORT_P int
|
||||
# define BOOLEAN_P int
|
||||
# define ALIGNTYP_P int
|
||||
# if defined(UNICODE_WIDEWINPORT) && defined(WCHAR_MAX)
|
||||
# if WCHAR_MAX >= INT_MAX
|
||||
# define NHWCHAR_P nhwchar
|
||||
# endif
|
||||
# endif
|
||||
# ifndef NHWCHAR_P
|
||||
# define NHWCHAR_P int
|
||||
# endif
|
||||
# else
|
||||
/* Neither widened nor unwidened prototypes. Argument list expansion
|
||||
* by FDECL/VDECL always empty; all xxx_P vanish so defs aren't needed. */
|
||||
|
||||
@@ -35,8 +35,8 @@ struct WinDesc {
|
||||
/* maxcol is also used by WIN_MESSAGE for */
|
||||
/* tracking the ^P command */
|
||||
short *datlen; /* allocation size for *data */
|
||||
nhwchar **data; /* window data [row][column] */
|
||||
nhwchar *morestr; /* string to display instead of default */
|
||||
char **data; /* window data [row][column] */
|
||||
char *morestr; /* string to display instead of default */
|
||||
tty_menu_item *mlist; /* menu information (MENU) */
|
||||
tty_menu_item **plist; /* menu page pointers (MENU) */
|
||||
short plist_size; /* size of allocated plist (MENU) */
|
||||
@@ -88,7 +88,7 @@ extern struct WinDesc *wins[MAXWIN];
|
||||
extern struct DisplayDesc *ttyDisplay; /* the tty display descriptor */
|
||||
|
||||
extern char morc; /* last character typed to xwaitforspace */
|
||||
extern nhwchar defmorestr[]; /* default --more-- prompt */
|
||||
extern char defmorestr[]; /* default --more-- prompt */
|
||||
|
||||
/* port specific external function references */
|
||||
|
||||
@@ -109,9 +109,7 @@ E void NDECL(tty_shutdown);
|
||||
* actually would be expanded. So here, we have to make an exception. */
|
||||
E void FDECL(xputc, (int));
|
||||
#else
|
||||
# ifndef WIN32CON
|
||||
E void FDECL(xputc, (CHAR_P));
|
||||
# endif
|
||||
#endif
|
||||
E void FDECL(xputs, (const char *));
|
||||
#if defined(SCREEN_VGA) || defined(SCREEN_8514)
|
||||
@@ -154,10 +152,10 @@ E int FDECL(has_color,(int color));
|
||||
|
||||
/* ### topl.c ### */
|
||||
|
||||
E void FDECL(addtopl, (const nhwchar *));
|
||||
E void FDECL(addtopl, (const char *));
|
||||
E void NDECL(more);
|
||||
E void FDECL(update_topl, (const nhwchar *));
|
||||
E void FDECL(putsyms, (const nhwchar *));
|
||||
E void FDECL(update_topl, (const char *));
|
||||
E void FDECL(putsyms, (const char*));
|
||||
|
||||
/* ### wintty.c ### */
|
||||
#ifdef CLIPPING
|
||||
@@ -167,9 +165,6 @@ E void FDECL(docorner, (int, int));
|
||||
E void NDECL(end_glyphout);
|
||||
E void FDECL(g_putch, (int));
|
||||
E void FDECL(win_tty_init, (int));
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
E void FDECL(u_putch, (nhwchar));
|
||||
#endif
|
||||
|
||||
/* external declarations */
|
||||
E void FDECL(tty_init_nhwindows, (int *, char **));
|
||||
|
||||
@@ -262,8 +262,7 @@ NEARDATA winid WIN_MESSAGE = WIN_ERR;
|
||||
NEARDATA winid WIN_STATUS = WIN_ERR;
|
||||
#endif
|
||||
NEARDATA winid WIN_MAP = WIN_ERR, WIN_INVEN = WIN_ERR;
|
||||
nhwchar toplines[TBUFSZ];
|
||||
|
||||
char toplines[TBUFSZ];
|
||||
/* Windowing stuff that's really tty oriented, but present for all ports */
|
||||
struct tc_gbl_data tc_gbl_data = { 0,0, 0,0 }; /* AS,AE, LI,CO */
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@ struct symsetentry symset[NUM_GRAPHICS];
|
||||
int currentgraphics = 0;
|
||||
|
||||
nhsym showsyms[SYM_MAX] = DUMMY; /* symbols to be displayed */
|
||||
nhsym l_syms[SYM_MAX] = DUMMY; /* loaded symbols */
|
||||
nhsym r_syms[SYM_MAX] = DUMMY; /* rogue symbols */
|
||||
nhsym l_syms[SYM_MAX] = DUMMY; /* loaded symbols */
|
||||
nhsym r_syms[SYM_MAX] = DUMMY; /* rogue symbols */
|
||||
|
||||
nhsym warnsyms[WARNCOUNT] = DUMMY; /* the current warning display symbols */
|
||||
const char invisexplain[] = "remembered, unseen, creature";
|
||||
@@ -525,7 +525,6 @@ boolean name_too;
|
||||
/* initialize restriction bits */
|
||||
symset[which_set].primary = 0;
|
||||
symset[which_set].rogue = 0;
|
||||
symset[which_set].unicode = 0;
|
||||
|
||||
if (name_too) {
|
||||
if (symset[which_set].name)
|
||||
@@ -563,7 +562,6 @@ const char *known_handling[] = {
|
||||
const char *known_restrictions[] = {
|
||||
"primary",
|
||||
"rogue",
|
||||
"unicode",
|
||||
(const char *)0,
|
||||
};
|
||||
|
||||
|
||||
90
src/files.c
90
src/files.c
@@ -2607,7 +2607,7 @@ parse_sym_line(buf, which_set)
|
||||
char *buf;
|
||||
int which_set;
|
||||
{
|
||||
int val;
|
||||
int val, i;
|
||||
struct symparse *symp = (struct symparse *)0;
|
||||
char *bufp, *commentp, *altp;
|
||||
|
||||
@@ -2657,7 +2657,6 @@ int which_set;
|
||||
return 0;
|
||||
|
||||
if (!symset[which_set].name) {
|
||||
int i;
|
||||
/* A null symset name indicates that we're just
|
||||
building a pick-list of possible symset
|
||||
values from the file, so only do that */
|
||||
@@ -2682,7 +2681,6 @@ int which_set;
|
||||
/* initialize restriction bits */
|
||||
tmpsp->primary = 0;
|
||||
tmpsp->rogue = 0;
|
||||
tmpsp->unicode = 0;
|
||||
break;
|
||||
case 2:
|
||||
/* handler type identified */
|
||||
@@ -2705,17 +2703,14 @@ int which_set;
|
||||
case 5:
|
||||
/* restrictions: xxxx*/
|
||||
tmpsp = symset_list; /* most recent symset */
|
||||
i = 0;
|
||||
while (known_restrictions[i]) {
|
||||
for (i = 0; known_restrictions[i]; ++i) {
|
||||
if (!strcmpi(known_restrictions[i], bufp)) {
|
||||
switch(i) {
|
||||
case 0: tmpsp->primary = 1; break;
|
||||
case 1: tmpsp->rogue = 1; break;
|
||||
case 2: tmpsp->unicode = 1; break;
|
||||
}
|
||||
break; /* while loop */
|
||||
}
|
||||
i++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -2732,7 +2727,7 @@ int which_set;
|
||||
chosen_symset_start = TRUE;
|
||||
/* these init_*() functions clear symset fields too */
|
||||
if (which_set == ROGUESET) init_r_symbols();
|
||||
else if (which_set == PRIMARY) init_l_symbols();
|
||||
else if (which_set == PRIMARY) init_l_symbols();
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
@@ -2771,23 +2766,12 @@ int which_set;
|
||||
break;
|
||||
case 1: symset[which_set].rogue = 1;
|
||||
break;
|
||||
case 2: symset[which_set].unicode = 1;
|
||||
break;
|
||||
}
|
||||
break; /* while loop */
|
||||
}
|
||||
n++;
|
||||
}
|
||||
/* Don't allow unicode set if code can't handle it */
|
||||
if (symset[which_set].unicode &&
|
||||
!iflags.unicodedisp) {
|
||||
if (chosen_symset_start)
|
||||
chosen_symset_end = FALSE;
|
||||
chosen_symset_start = FALSE;
|
||||
if (which_set == ROGUESET) init_r_symbols();
|
||||
else if (which_set == PRIMARY) init_l_symbols();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else { /* !SYM_CONTROL */
|
||||
@@ -2821,72 +2805,6 @@ int which_set;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Produces a single integer value.
|
||||
*/
|
||||
int
|
||||
sym_val(cp)
|
||||
const char *cp;
|
||||
{
|
||||
unsigned int cval = 0;
|
||||
int meta = 0, dcount = 0;
|
||||
const char *dp, *hex = "00112233445566778899aAbBcCdDeEfF";
|
||||
|
||||
while (*cp)
|
||||
{
|
||||
if (*cp == '\\' && index("mM", cp[1])) {
|
||||
meta = 1;
|
||||
cp += 2;
|
||||
}
|
||||
if ((*cp == 'U' || *cp == 'u') && cp[1] == '+' && index(hex, cp[2]))
|
||||
{
|
||||
dcount = 0;
|
||||
cp++;
|
||||
for (++cp; *cp && (dp = index(hex, *cp)) && (dcount++ < 4); cp++)
|
||||
cval = (unsigned int)((cval * 16) +
|
||||
((unsigned int)(dp - hex) / 2));
|
||||
}
|
||||
else if (*cp == '\\' && index("0123456789xXoO", cp[1]))
|
||||
{
|
||||
dcount = 0;
|
||||
cp++;
|
||||
if (*cp == 'x' || *cp == 'X')
|
||||
for (++cp; *cp && (dp = index(hex, *cp)) && (dcount++ < 4); cp++)
|
||||
cval = (unsigned int)((cval * 16) +
|
||||
((unsigned int)(dp - hex) / 2));
|
||||
else if (*cp == 'o' || *cp == 'O')
|
||||
for (++cp; *cp && (index("01234567",*cp)) && (dcount++ < 5); cp++)
|
||||
cval = (cval * 8) + (unsigned int)(*cp - '0');
|
||||
else
|
||||
for (; *cp && (index("0123456789",*cp)) && (dcount++ < 5); cp++)
|
||||
cval = (cval * 10) + (unsigned int)(*cp - '0');
|
||||
}
|
||||
else if (*cp == '\\') /* C-style character escapes */
|
||||
{
|
||||
switch (*++cp)
|
||||
{
|
||||
case '\\': cval = '\\'; break;
|
||||
case 'n': cval = '\n'; break;
|
||||
case 't': cval = '\t'; break;
|
||||
case 'b': cval = '\b'; break;
|
||||
case 'r': cval = '\r'; break;
|
||||
default: cval = (unsigned int)*cp;
|
||||
}
|
||||
cp++;
|
||||
}
|
||||
else if (*cp == '^') /* expand control-character syntax */
|
||||
{
|
||||
cval = (unsigned int)(*++cp & 0x1f);
|
||||
cp++;
|
||||
}
|
||||
else
|
||||
cval = (unsigned int)*cp++;
|
||||
if (meta)
|
||||
cval |= 0x80;
|
||||
}
|
||||
return cval;
|
||||
}
|
||||
|
||||
/* ---------- END CONFIG FILE HANDLING ----------- */
|
||||
|
||||
/* ---------- BEGIN SCOREBOARD CREATION ----------- */
|
||||
|
||||
188
src/hacklib.c
188
src/hacklib.c
@@ -768,192 +768,4 @@ midnight()
|
||||
return(getlt()->tm_hour == 0);
|
||||
}
|
||||
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
nhwchar *
|
||||
nhwstrncpy(dest, strSource, cnt)
|
||||
nhwchar *dest;
|
||||
const char *strSource;
|
||||
size_t cnt;
|
||||
{
|
||||
nhwchar *d = dest;
|
||||
const char *s = strSource;
|
||||
size_t dcnt = 0;
|
||||
|
||||
while(*s && dcnt < cnt) {
|
||||
*d++ = (nhwchar)*s++;
|
||||
dcnt++;
|
||||
}
|
||||
if (dcnt < cnt) *d = 0;
|
||||
return dest;
|
||||
}
|
||||
|
||||
nhwchar *
|
||||
nhwncpy(dest, src, cnt)
|
||||
nhwchar *dest;
|
||||
const nhwchar *src;
|
||||
size_t cnt;
|
||||
{
|
||||
nhwchar *d = dest;
|
||||
const nhwchar *s = src;
|
||||
size_t dcnt = 0;
|
||||
|
||||
while(*s && dcnt < cnt) {
|
||||
*d++ = *s++;
|
||||
dcnt++;
|
||||
}
|
||||
if (dcnt < cnt) *d = 0;
|
||||
return dest;
|
||||
}
|
||||
|
||||
nhwchar *
|
||||
nhwcpy(dest, src)
|
||||
nhwchar *dest;
|
||||
const nhwchar *src;
|
||||
{
|
||||
nhwchar *d = dest;
|
||||
const nhwchar *s = src;
|
||||
|
||||
while(*s) {
|
||||
*d++ = *s++;
|
||||
}
|
||||
*d = 0;
|
||||
return dest;
|
||||
}
|
||||
|
||||
nhwchar *
|
||||
nhwstrcpy(dest, strSource)
|
||||
nhwchar *dest;
|
||||
const char *strSource;
|
||||
{
|
||||
nhwchar *d = dest;
|
||||
const char *s = strSource;
|
||||
|
||||
while(*s) {
|
||||
*d++ = *s++;
|
||||
}
|
||||
*d = 0;
|
||||
return dest;
|
||||
}
|
||||
|
||||
char *
|
||||
strnhwcpy(strDest, src)
|
||||
char *strDest;
|
||||
const nhwchar *src;
|
||||
{
|
||||
char *d = strDest;
|
||||
const nhwchar *s = src;
|
||||
|
||||
while(*s) {
|
||||
*d++ = (char)*s++;
|
||||
}
|
||||
*d = 0;
|
||||
return strDest;
|
||||
}
|
||||
|
||||
nhwchar *
|
||||
nhwstrcat(dest, strSource)
|
||||
nhwchar *dest;
|
||||
const char *strSource;
|
||||
{
|
||||
nhwchar *d = dest;
|
||||
const char *s = strSource;
|
||||
|
||||
while(*d) d++;
|
||||
while(*s) {
|
||||
*d++ = *s++;
|
||||
}
|
||||
*d = 0;
|
||||
return dest;
|
||||
}
|
||||
|
||||
nhwchar *
|
||||
nhwcat(dest, src)
|
||||
nhwchar *dest;
|
||||
const nhwchar *src;
|
||||
{
|
||||
nhwchar *d = dest;
|
||||
const nhwchar *s = src;
|
||||
|
||||
while(*d) d++;
|
||||
while(*s) {
|
||||
*d++ = *s++;
|
||||
}
|
||||
*d = 0;
|
||||
return dest;
|
||||
}
|
||||
|
||||
nhwchar *
|
||||
nhwindex(ss, c)
|
||||
const nhwchar *ss;
|
||||
int c;
|
||||
{
|
||||
const nhwchar *s = ss;
|
||||
|
||||
while (*s) {
|
||||
if (*s == c) return (nhwchar *)s;
|
||||
s++;
|
||||
}
|
||||
if (*s == c) return (nhwchar *)s;
|
||||
return (nhwchar *)0;
|
||||
}
|
||||
|
||||
size_t nhwlen(src)
|
||||
const nhwchar *src;
|
||||
{
|
||||
register size_t dl = 0;
|
||||
|
||||
while(*src++) dl++;
|
||||
return dl;
|
||||
}
|
||||
|
||||
int
|
||||
nhwcmp(s1, s2) /* case sensitive comparison */
|
||||
register const nhwchar *s1, *s2;
|
||||
{
|
||||
register nhwchar t1, t2;
|
||||
|
||||
for (;;) {
|
||||
if (!*s2) return (*s1 != 0); /* s1 >= s2 */
|
||||
else if (!*s1) return -1; /* s1 < s2 */
|
||||
t1 = *s1++;
|
||||
t2 = *s2++;
|
||||
if (t1 != t2) return (t1 > t2) ? 1 : -1;
|
||||
}
|
||||
return 0; /* s1 == s2 */
|
||||
}
|
||||
|
||||
int
|
||||
nhwncmp(s1, s2, n) /* case sensitive counted nhwchar (wide string) comparison */
|
||||
register const nhwchar *s1, *s2;
|
||||
register int n; /*(should probably be size_t, which is usually unsigned)*/
|
||||
{
|
||||
register nhwchar t1, t2;
|
||||
|
||||
while (n--) {
|
||||
if (!*s2) return (*s1 != 0); /* s1 >= s2 */
|
||||
else if (!*s1) return -1; /* s1 < s2 */
|
||||
t1 = *s1++;
|
||||
t2 = *s2++;
|
||||
if (t1 != t2) return (t1 > t2) ? 1 : -1;
|
||||
}
|
||||
return 0; /* s1 == s2 */
|
||||
}
|
||||
|
||||
int
|
||||
nhwstrcmp(s1, s2)
|
||||
register const nhwchar *s1;
|
||||
const char *s2;
|
||||
{
|
||||
register nhwchar t1, t2;
|
||||
|
||||
for (;;) {
|
||||
if (!*s2) return (*s1 != 0); /* s1 >= s2 */
|
||||
else if (!*s1) return -1; /* s1 < s2 */
|
||||
t1 = *s1++;
|
||||
t2 = (nhwchar)*s2++;
|
||||
if (t1 != t2) return (t1 > t2) ? 1 : -1;
|
||||
}
|
||||
return 0; /* s1 == s2 */
|
||||
}
|
||||
#endif
|
||||
/*hacklib.c*/
|
||||
|
||||
@@ -225,7 +225,6 @@ int glyph;
|
||||
return encbuf;
|
||||
}
|
||||
|
||||
#ifndef UNICODE_WIDEWINPORT
|
||||
/*
|
||||
* This differs from putstr() because the str parameter can
|
||||
* contain a sequence of characters representing:
|
||||
@@ -267,12 +266,25 @@ genl_putmixed(window, attr, str)
|
||||
gv = (int)((gv * 16) + ((int)(dp - hex) / 2));
|
||||
so = mapglyph(gv, &ch, &oc, &os, 0, 0);
|
||||
*put++ = showsyms[so];
|
||||
continue;
|
||||
} else {
|
||||
/* possible forgery - leave it the way it is */
|
||||
cp = save_cp;
|
||||
}
|
||||
break;
|
||||
# if 0
|
||||
case 'S': /* symbol offset */
|
||||
dcount = 0;
|
||||
for (++cp; *cp && (dp = index(hex, *cp)) && (dcount++ < 4); cp++)
|
||||
rndchk = (int)((rndchk * 16) + ((int)(dp - hex) / 2));
|
||||
|
||||
if (rndchk == context.rndencode) {
|
||||
dcount = 0;
|
||||
for (; *cp && (dp = index(hex, *cp)) && (dcount++ < 2); cp++)
|
||||
so = (int)((so * 16) + ((int)(dp - hex) / 2));
|
||||
}
|
||||
*put++ = showsyms[so];
|
||||
break;
|
||||
# endif
|
||||
case '\\':
|
||||
break;
|
||||
}
|
||||
@@ -283,5 +295,4 @@ genl_putmixed(window, attr, str)
|
||||
/* now send it to the normal putstr */
|
||||
putstr(window, attr, buf);
|
||||
}
|
||||
#endif /*!UNICODE_WIDEWINPORT*/
|
||||
/*mapglyph.c*/
|
||||
|
||||
@@ -198,9 +198,6 @@ static struct Bool_Opt
|
||||
{"tombstone",&flags.tombstone, TRUE, SET_IN_GAME},
|
||||
{"toptenwin",&iflags.toptenwin, FALSE, SET_IN_GAME},
|
||||
{"travel", &flags.travelcmd, TRUE, SET_IN_GAME},
|
||||
#ifdef UNICODE_SUPPORT
|
||||
{"unicode", &iflags.unicodedisp, FALSE, SET_IN_GAME},
|
||||
#endif
|
||||
#ifdef WIN32CON
|
||||
{"use_inverse", &iflags.wc_inverse, TRUE, SET_IN_GAME}, /*WC*/
|
||||
#else
|
||||
@@ -605,9 +602,6 @@ initoptions_init()
|
||||
iflags.msg_history = 20;
|
||||
#ifdef TTY_GRAPHICS
|
||||
iflags.prevmsg_window = 's';
|
||||
# if defined(UNIX) && defined(UNICODE_WIDEWINPORT)
|
||||
iflags.unicodecapable = TRUE;
|
||||
# endif
|
||||
#endif
|
||||
iflags.menu_headings = ATR_INVERSE;
|
||||
|
||||
@@ -2514,7 +2508,7 @@ goodfruit:
|
||||
boolean badflag = FALSE;
|
||||
if (duplicate) complain_about_duplicate(opts,1);
|
||||
if (!negated) {
|
||||
for (i = PRIMARY; i <= ROGUESET; ++i) {
|
||||
for (i = 0; i < NUM_GRAPHICS; ++i) {
|
||||
if (symset[i].name)
|
||||
badflag = TRUE;
|
||||
else {
|
||||
@@ -3359,7 +3353,7 @@ boolean setinitial,setfromfile;
|
||||
|| !strcmp("roguesymset", optname)) {
|
||||
menu_item *symset_pick = (menu_item *)0;
|
||||
boolean primaryflag = (*optname == 's'),
|
||||
rogueflag = (*optname == 'r'),
|
||||
rogueflag = (*optname == 'r'),
|
||||
ready_to_switch = FALSE,
|
||||
nothing_to_do = FALSE;
|
||||
int res;
|
||||
@@ -3384,8 +3378,7 @@ boolean setinitial,setfromfile;
|
||||
sl = symset_list;
|
||||
while (sl) {
|
||||
/* check restrictions */
|
||||
if ((!rogueflag && sl->rogue) ||
|
||||
(!iflags.unicodedisp && sl->unicode) ||
|
||||
if ((!rogueflag && sl->rogue) ||
|
||||
(!primaryflag && sl->primary)) {
|
||||
sl = sl->next;
|
||||
continue;
|
||||
@@ -3398,8 +3391,8 @@ boolean setinitial,setfromfile;
|
||||
}
|
||||
if (!setcount) {
|
||||
pline("There are no appropriate %ssymbol sets available.",
|
||||
(rogueflag) ? "rogue level " :
|
||||
(primaryflag) ? "primary " :
|
||||
(rogueflag) ? "rogue level " :
|
||||
(primaryflag) ? "primary " :
|
||||
"");
|
||||
return TRUE;
|
||||
}
|
||||
@@ -3415,7 +3408,6 @@ boolean setinitial,setfromfile;
|
||||
while (sl) {
|
||||
/* check restrictions */
|
||||
if ((!rogueflag && sl->rogue) ||
|
||||
(!iflags.unicodedisp && sl->unicode) ||
|
||||
(!primaryflag && sl->primary)) {
|
||||
sl = sl->next;
|
||||
continue;
|
||||
@@ -3502,7 +3494,7 @@ boolean setinitial,setfromfile;
|
||||
if(rogueflag)
|
||||
init_r_symbols();
|
||||
else
|
||||
init_l_symbols();
|
||||
init_l_symbols();
|
||||
|
||||
if (symset[which_set].name) {
|
||||
if (read_sym_file(which_set))
|
||||
@@ -3568,14 +3560,9 @@ char *buf;
|
||||
#endif
|
||||
#ifdef BACKWARD_COMPAT
|
||||
else if (!strcmp(optname, "boulder"))
|
||||
Sprintf(buf,
|
||||
# ifdef UNICODE_DRAWING
|
||||
"\\x%04X",
|
||||
# else
|
||||
"%c",
|
||||
# endif
|
||||
iflags.bouldersym ? iflags.bouldersym :
|
||||
showsyms[(int)objects[BOULDER].oc_class + SYM_OFF_O]);
|
||||
Sprintf(buf, "%c", iflags.bouldersym ?
|
||||
iflags.bouldersym :
|
||||
showsyms[(int)objects[BOULDER].oc_class + SYM_OFF_O]);
|
||||
#endif
|
||||
else if (!strcmp(optname, "catname"))
|
||||
Sprintf(buf, "%s", catname[0] ? catname : none);
|
||||
@@ -4034,6 +4021,15 @@ char *buf;
|
||||
return (struct symparse *)0;
|
||||
}
|
||||
|
||||
int sym_val(strval)
|
||||
char *strval;
|
||||
{
|
||||
char buf[QBUFSZ];
|
||||
buf[0] = '\0';
|
||||
escapes(strval, buf);
|
||||
return (int)*buf;
|
||||
}
|
||||
|
||||
/* data for option_help() */
|
||||
static const char *opt_intro[] = {
|
||||
"",
|
||||
|
||||
@@ -571,7 +571,7 @@ do_look(mode, click_cc)
|
||||
for (i = 0; i < MAXMCLASSES; i++) {
|
||||
if (sym == ((from_screen || clicklook) ?
|
||||
showsyms[i + SYM_OFF_M] : def_monsyms[i].sym) &&
|
||||
def_monsyms[i].explain) {
|
||||
def_monsyms[i].explain) {
|
||||
need_to_look = TRUE;
|
||||
if (!found) {
|
||||
Sprintf(out_str, "%s %s",
|
||||
|
||||
@@ -76,11 +76,7 @@ pline VA_DECL(const char *, line)
|
||||
return;
|
||||
}
|
||||
#ifndef MAC
|
||||
# ifdef UNICODE_WIDEWINPORT
|
||||
if (no_repeat && !nhwstrcmp(toplines, line))
|
||||
# else
|
||||
if (no_repeat && !strcmp(toplines, line))
|
||||
# endif
|
||||
if (no_repeat && !strcmp(line, toplines))
|
||||
return;
|
||||
#endif /* MAC */
|
||||
if (vision_full_recalc) vision_recalc(0);
|
||||
|
||||
@@ -64,6 +64,9 @@ int GUILaunched;
|
||||
extern int redirect_stdout;
|
||||
static BOOL FDECL(CtrlHandler, (DWORD));
|
||||
|
||||
/* Flag for whether unicode is supported */
|
||||
static boolean has_unicode;
|
||||
|
||||
#ifdef PORT_DEBUG
|
||||
static boolean display_cursor_info = FALSE;
|
||||
#endif
|
||||
@@ -146,12 +149,6 @@ static void NDECL(init_ttycolor);
|
||||
# endif
|
||||
static void NDECL(really_move_cursor);
|
||||
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
void FDECL(xputc_core,(NHWCHAR_P));
|
||||
#else
|
||||
void FDECL(xputc_core,(int));
|
||||
#endif
|
||||
|
||||
#define MAX_OVERRIDES 256
|
||||
unsigned char key_overrides[MAX_OVERRIDES];
|
||||
|
||||
@@ -199,14 +196,11 @@ const char *s;
|
||||
void
|
||||
setftty()
|
||||
{
|
||||
static int cp = 0;
|
||||
if (!cp) cp = GetConsoleOutputCP();
|
||||
/* SetConsoleOutputCP(1250); */
|
||||
#ifdef CHANGE_COLOR
|
||||
if (altered_palette) adjust_palette();
|
||||
#endif
|
||||
start_screen();
|
||||
iflags.unicodecapable = ((GetVersion() & 0x80000000) == 0);
|
||||
has_unicode = ((GetVersion() & 0x80000000) == 0);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -457,61 +451,24 @@ int x,y;
|
||||
ttyDisplay->cury = y;
|
||||
}
|
||||
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
#define T(x) L##x
|
||||
#else
|
||||
#define T(x) x
|
||||
#endif
|
||||
|
||||
void
|
||||
xputc_core(ich)
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
nhwchar ich;
|
||||
#else
|
||||
int ich;
|
||||
#endif
|
||||
xputc_core(ch)
|
||||
char ch;
|
||||
{
|
||||
static uchar c[2] = {0,0};
|
||||
char ch = (char)ich;
|
||||
|
||||
#if 0
|
||||
/*EURO symbol*/
|
||||
if (ich == 0x20AC) {
|
||||
if (!c[0]) {
|
||||
wchar_t t[2]={0x20ac, 0x0000};
|
||||
int cp = GetConsoleOutputCP();
|
||||
(void) WideCharToMultiByte(cp,
|
||||
0,
|
||||
t, 1,
|
||||
c, 2,
|
||||
(LPCSTR)0,
|
||||
(LPBOOL)0);
|
||||
}
|
||||
ich = (nhwchar)c[0];
|
||||
}
|
||||
#endif
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
switch(ich) {
|
||||
#else
|
||||
switch(ch) {
|
||||
#endif
|
||||
case T('\n'):
|
||||
case '\n':
|
||||
cursor.Y++;
|
||||
/* fall through */
|
||||
case T('\r'):
|
||||
case '\r':
|
||||
cursor.X = 1;
|
||||
break;
|
||||
case T('\b'):
|
||||
case '\b':
|
||||
cursor.X--;
|
||||
break;
|
||||
default:
|
||||
WriteConsoleOutputAttribute(hConOut,&attr,1,
|
||||
cursor,&acount);
|
||||
if (iflags.unicodedisp) {
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
WriteConsoleOutputCharacterW(hConOut,&ich,1,
|
||||
cursor,&ccount);
|
||||
#else
|
||||
if (has_unicode) {
|
||||
/* Avoid bug in ANSI API on WinNT */
|
||||
WCHAR c2[2];
|
||||
int rc;
|
||||
@@ -522,7 +479,6 @@ int ich;
|
||||
c2, 2);
|
||||
WriteConsoleOutputCharacterW(hConOut,c2,rc,
|
||||
cursor,&ccount);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
WriteConsoleOutputCharacterA(hConOut,&ch,1,
|
||||
@@ -534,11 +490,7 @@ int ich;
|
||||
|
||||
void
|
||||
xputc(ch)
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
nhwchar ch;
|
||||
#else
|
||||
int ch;
|
||||
#endif
|
||||
char ch;
|
||||
{
|
||||
cursor.X = ttyDisplay->curx;
|
||||
cursor.Y = ttyDisplay->cury;
|
||||
@@ -569,8 +521,8 @@ const char *s;
|
||||
* for win32. It is used for glyphs only, not text.
|
||||
*/
|
||||
void
|
||||
g_putch(in_sym)
|
||||
int in_sym;
|
||||
g_putch(in_ch)
|
||||
int in_ch;
|
||||
{
|
||||
/* CP437 to Unicode mapping according to the Unicode Consortium */
|
||||
static const WCHAR cp437[] =
|
||||
@@ -608,18 +560,12 @@ int in_sym;
|
||||
0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
|
||||
0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
|
||||
};
|
||||
uchar ch = (uchar)in_sym;
|
||||
unsigned char ch = (unsigned char)in_ch;
|
||||
|
||||
cursor.X = ttyDisplay->curx;
|
||||
cursor.Y = ttyDisplay->cury;
|
||||
WriteConsoleOutputAttribute(hConOut,&attr,1,cursor,&acount);
|
||||
#ifdef UNICODE_DRAWING
|
||||
if (symset[currentgraphics].name &&
|
||||
symset[currentgraphics].unicode && iflags.unicodedisp)
|
||||
WriteConsoleOutputCharacterW(hConOut,(LPCWSTR)&in_sym,1,cursor,&ccount);
|
||||
else
|
||||
#endif
|
||||
if (SYMHANDLING(H_IBM))
|
||||
if (has_unicode)
|
||||
WriteConsoleOutputCharacterW(hConOut,&cp437[ch],1,cursor,&ccount);
|
||||
else
|
||||
WriteConsoleOutputCharacterA(hConOut,&ch,1,cursor,&ccount);
|
||||
|
||||
@@ -24,25 +24,6 @@ extern int NDECL(extcmd_via_menu); /* cmd.c */
|
||||
|
||||
extern char erase_char, kill_char; /* from appropriate tty.c file */
|
||||
|
||||
/* cloned from topl.c, but not identical
|
||||
*/
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
/* nhwchar is wchar; data from core needs narrow-to-wide conversion;
|
||||
data going back to core needs wide-to-narrow conversion; data
|
||||
used within tty routines typically needs wide-to-wide awareness */
|
||||
STATIC_VAR nhwchar getl_wbuf[BUFSZ];
|
||||
STATIC_VAR char getl_nbuf[BUFSZ];
|
||||
#define T(x) L##x
|
||||
#define Waddtopl(str) addtopl(nhwstrcpy(getl_wbuf,str))
|
||||
#define Wputsyms(str) putsyms(nhwstrcpy(getl_wbuf,str))
|
||||
#define NWstrcpy(wdst,src) nhwstrcpy(wdst,src) /* narrow-to-wide */
|
||||
#else /*!UNICODE_WIDEWINPORT*/
|
||||
/* nhwchar is char; no conversions needed */
|
||||
#define T(x) x
|
||||
#define Waddtopl(str) addtopl(str)
|
||||
#define Wputsyms(str) putsyms(str)
|
||||
#endif /*?UNICODE_WIDEWINPORT*/
|
||||
|
||||
/*
|
||||
* Read a line closed with '\n' into the array char bufp[BUFSZ].
|
||||
* (The '\n' is not stored. The string is closed with a '\0'.)
|
||||
@@ -76,12 +57,7 @@ getlin_hook_proc hook;
|
||||
*obufp = 0;
|
||||
for(;;) {
|
||||
(void) fflush(stdout);
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
Strcat(strcat(strcpy(getl_nbuf, query), " "), obufp);
|
||||
(void)NWstrcpy(toplines, getl_nbuf);
|
||||
#else
|
||||
Strcat(strcat(strcpy(toplines, query), " "), obufp);
|
||||
#endif
|
||||
c = pgetchar();
|
||||
if (c == '\033' || c == EOF) {
|
||||
obufp[0] = '\033';
|
||||
@@ -100,10 +76,10 @@ getlin_hook_proc hook;
|
||||
ttyDisplay->inread = sav;
|
||||
tty_clear_nhwindow(WIN_MESSAGE);
|
||||
cw->maxcol = cw->maxrow;
|
||||
Waddtopl(query);
|
||||
Waddtopl(T(" "));
|
||||
addtopl(query);
|
||||
addtopl(" ");
|
||||
*bufp = 0;
|
||||
Waddtopl(obufp);
|
||||
addtopl(obufp);
|
||||
} else {
|
||||
if (!doprev)
|
||||
(void) tty_doprev_message();/* need two initially */
|
||||
@@ -115,10 +91,10 @@ getlin_hook_proc hook;
|
||||
tty_clear_nhwindow(WIN_MESSAGE);
|
||||
cw->maxcol = cw->maxrow;
|
||||
doprev = 0;
|
||||
Waddtopl(query);
|
||||
Waddtopl(T(" "));
|
||||
addtopl(query);
|
||||
addtopl(" ");
|
||||
*bufp = 0;
|
||||
Waddtopl(obufp);
|
||||
addtopl(obufp);
|
||||
}
|
||||
if(c == erase_char || c == '\b') {
|
||||
if(bufp != obufp) {
|
||||
@@ -128,11 +104,11 @@ getlin_hook_proc hook;
|
||||
#endif /* NEWAUTOCOMP */
|
||||
bufp--;
|
||||
#ifndef NEWAUTOCOMP
|
||||
putsyms(T("\b \b"));/* putsym converts \b */
|
||||
putsyms("\b \b");/* putsym converts \b */
|
||||
#else /* NEWAUTOCOMP */
|
||||
putsyms(T("\b"));
|
||||
for (i = bufp; *i; ++i) putsyms(T(" "));
|
||||
for (; i > bufp; --i) putsyms(T("\b"));
|
||||
putsyms("\b");
|
||||
for (i = bufp; *i; ++i) putsyms(" ");
|
||||
for (; i > bufp; --i) putsyms("\b");
|
||||
*bufp = 0;
|
||||
#endif /* NEWAUTOCOMP */
|
||||
} else tty_nhbell();
|
||||
@@ -155,21 +131,21 @@ getlin_hook_proc hook;
|
||||
#endif /* NEWAUTOCOMP */
|
||||
*bufp = c;
|
||||
bufp[1] = 0;
|
||||
Wputsyms(bufp);
|
||||
putsyms(bufp);
|
||||
bufp++;
|
||||
if (hook && (*hook)(obufp)) {
|
||||
Wputsyms(bufp);
|
||||
putsyms(bufp);
|
||||
#ifndef NEWAUTOCOMP
|
||||
bufp = eos(bufp);
|
||||
#else /* NEWAUTOCOMP */
|
||||
/* pointer and cursor left where they were */
|
||||
for (i = bufp; *i; ++i) putsyms(T("\b"));
|
||||
for (i = bufp; *i; ++i) putsyms("\b");
|
||||
} else if (i > bufp) {
|
||||
char *s = i;
|
||||
|
||||
/* erase rest of prior guess */
|
||||
for (; i > bufp; --i) putsyms(T(" "));
|
||||
for (; s > bufp; --s) putsyms(T("\b"));
|
||||
for (; i > bufp; --i) putsyms(" ");
|
||||
for (; s > bufp; --s) putsyms("\b");
|
||||
#endif /* NEWAUTOCOMP */
|
||||
}
|
||||
} else if(c == kill_char || c == '\177') { /* Robert Viduya */
|
||||
@@ -177,11 +153,11 @@ getlin_hook_proc hook;
|
||||
#ifndef NEWAUTOCOMP
|
||||
while(bufp != obufp) {
|
||||
bufp--;
|
||||
putsyms(T("\b \b"));
|
||||
putsyms("\b \b");
|
||||
}
|
||||
#else /* NEWAUTOCOMP */
|
||||
for (; *bufp; ++bufp) putsyms(T(" "));
|
||||
for (; bufp != obufp; --bufp) putsyms(T("\b \b"));
|
||||
for (; *bufp; ++bufp) putsyms(" ");
|
||||
for (; bufp != obufp; --bufp) putsyms("\b \b");
|
||||
*bufp = 0;
|
||||
#endif /* NEWAUTOCOMP */
|
||||
} else
|
||||
@@ -192,8 +168,6 @@ getlin_hook_proc hook;
|
||||
clear_nhwindow(WIN_MESSAGE); /* clean up after ourselves */
|
||||
}
|
||||
|
||||
#undef T
|
||||
|
||||
void
|
||||
xwaitforspace(s)
|
||||
register const char *s; /* chars allowed besides return */
|
||||
|
||||
167
win/tty/topl.c
167
win/tty/topl.c
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 topl.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 topl.c $Date: 2012/01/23 06:29:37 $ $Revision: 1.24 $ */
|
||||
/* NetHack 3.5 topl.c $NHDT-Date: 1425081315 2015/02/27 23:55:15 $ $NHDT-Branch: (no branch, rebasing scshunt-unconditionals) $:$NHDT-Revision: 1.24 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -15,44 +14,8 @@
|
||||
#define C(c) (0x1f & (c))
|
||||
#endif
|
||||
|
||||
/* use caution with this stuff; it's very easy to get things mixed up...
|
||||
*/
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
/* nhwchar is wchar; data from core needs narrow-to-wide conversion;
|
||||
data going back to core needs wide-to-narrow conversion; data
|
||||
used within tty routines typically needs wide-to-wide awareness */
|
||||
STATIC_VAR nhwchar topl_wbuf[BUFSZ];
|
||||
STATIC_VAR char topl_nbuf[BUFSZ];
|
||||
#define T(x) L##x
|
||||
#define DoGputch(x) ((x) >= 0x80)
|
||||
#define Waddtopl(str) addtopl(nhwstrcpy(topl_wbuf,str))
|
||||
#define Wputstr(win,atr,wstr) putstr(win,atr,strnhwcpy(topl_nbuf,wstr))
|
||||
#define Windex(wstr,wchr) nhwindex(wstr,wchr)
|
||||
#define Wstrlen(wstr) (int)nhwlen(wstr)
|
||||
#define NWstrcpy(wdst,src) nhwstrcpy(wdst,src) /* narrow-to-wide */
|
||||
#define WNstrcpy(dst,wsrc) strnhwcpy(dst,wsrc) /* wide-to-narrow */
|
||||
#define WWstrcpy(wdst,wsrc) nhwcpy(wdst,wsrc) /* wide-to-wide */
|
||||
#define WWstrcat(wdst,wsrc) nhwcat(wdst,wsrc)
|
||||
#define WWstrncpy(wdst,wsrc,ln nhwncpy(wdst,wsrc,ln)
|
||||
#define WWstrncmp(wst1,wst2,ln) nhwncmp(wst1,wst2,ln)
|
||||
#else /*!UNICODE_WIDEWINPORT*/
|
||||
/* nhwchar is char; no conversions needed */
|
||||
#define T(x) x
|
||||
#define DoGputch(x) ((x) & 0x80)
|
||||
#define Waddtopl(str) addtopl(str)
|
||||
#define Wputstr(win,atr,str) putstr(win,atr,str)
|
||||
#define Windex(wstr,wchr) index(wstr,wchr)
|
||||
#define Wstrlen(wstr) (int)strlen(wstr)
|
||||
#define NWstrcpy(wdst,src) strcpy(wdst,src)
|
||||
#define WNstrcpy(dst,wsrc) strcpy(dst,wsrc)
|
||||
#define WWstrcpy(wdst,wsrc) strcpy(wdst,wsrc)
|
||||
#define WWstrcat(wdst,wsrc) strcat(wdst,wsrc)
|
||||
#define WWstrncpy(wdst,wsrc,ln) strncpy(wdst,wsrc,ln)
|
||||
#define WWstrncmp(wst1,wst2,ln) strncmp(wst1,wst2,ln)
|
||||
#endif /*?UNICODE_WIDEWINPORT*/
|
||||
|
||||
STATIC_DCL void FDECL(redotoplin, (const nhwchar*));
|
||||
STATIC_DCL void FDECL(topl_putsym, (NHWCHAR_P));
|
||||
STATIC_DCL void FDECL(redotoplin, (const char*));
|
||||
STATIC_DCL void FDECL(topl_putsym, (CHAR_P));
|
||||
STATIC_DCL void NDECL(remember_topl);
|
||||
STATIC_DCL void FDECL(removetopl, (int));
|
||||
STATIC_DCL void FDECL(msghistory_snapshot, (BOOLEAN_P));
|
||||
@@ -62,9 +25,9 @@ int
|
||||
tty_doprev_message()
|
||||
{
|
||||
register struct WinDesc *cw = wins[WIN_MESSAGE];
|
||||
|
||||
winid prevmsg_win;
|
||||
int i;
|
||||
|
||||
if ((iflags.prevmsg_window != 's') && !ttyDisplay->inread) { /* not single */
|
||||
if(iflags.prevmsg_window == 'f') { /* full */
|
||||
prevmsg_win = create_nhwindow(NHW_MENU);
|
||||
@@ -73,11 +36,11 @@ tty_doprev_message()
|
||||
cw->maxcol = cw->maxrow;
|
||||
i = cw->maxcol;
|
||||
do {
|
||||
if (cw->data[i] && *cw->data[i])
|
||||
Wputstr(prevmsg_win, 0, cw->data[i]);
|
||||
if(cw->data[i] && strcmp(cw->data[i], "") )
|
||||
putstr(prevmsg_win, 0, cw->data[i]);
|
||||
i = (i + 1) % cw->rows;
|
||||
} while (i != cw->maxcol);
|
||||
Wputstr(prevmsg_win, 0, toplines);
|
||||
putstr(prevmsg_win, 0, toplines);
|
||||
display_nhwindow(prevmsg_win, TRUE);
|
||||
destroy_nhwindow(prevmsg_win);
|
||||
} else if (iflags.prevmsg_window == 'c') { /* combination */
|
||||
@@ -104,12 +67,11 @@ tty_doprev_message()
|
||||
cw->maxcol = cw->maxrow;
|
||||
i = cw->maxcol;
|
||||
do {
|
||||
if (cw->data[i] && *cw->data[i])
|
||||
Wputstr(prevmsg_win, 0, cw->data[i]);
|
||||
if(cw->data[i] && strcmp(cw->data[i], "") )
|
||||
putstr(prevmsg_win, 0, cw->data[i]);
|
||||
i = (i + 1) % cw->rows;
|
||||
} while (i != cw->maxcol);
|
||||
|
||||
Wputstr(prevmsg_win, 0, toplines);
|
||||
putstr(prevmsg_win, 0, toplines);
|
||||
display_nhwindow(prevmsg_win, TRUE);
|
||||
destroy_nhwindow(prevmsg_win);
|
||||
}
|
||||
@@ -121,11 +83,11 @@ tty_doprev_message()
|
||||
prevmsg_win = create_nhwindow(NHW_MENU);
|
||||
putstr(prevmsg_win, 0, "Message History");
|
||||
putstr(prevmsg_win, 0, "");
|
||||
Wputstr(prevmsg_win, 0, toplines);
|
||||
putstr(prevmsg_win, 0, toplines);
|
||||
cw->maxcol=cw->maxrow-1;
|
||||
if(cw->maxcol < 0) cw->maxcol = cw->rows-1;
|
||||
do {
|
||||
Wputstr(prevmsg_win, 0, cw->data[cw->maxcol]);
|
||||
putstr(prevmsg_win, 0, cw->data[cw->maxcol]);
|
||||
cw->maxcol--;
|
||||
if (cw->maxcol < 0) cw->maxcol = cw->rows-1;
|
||||
if (!cw->data[cw->maxcol])
|
||||
@@ -156,19 +118,19 @@ tty_doprev_message()
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
redotoplin(symstr)
|
||||
const nhwchar *symstr;
|
||||
redotoplin(str)
|
||||
const char *str;
|
||||
{
|
||||
int otoplin = ttyDisplay->toplin;
|
||||
home();
|
||||
if (DoGputch(*symstr)) {
|
||||
if(*str & 0x80) {
|
||||
/* kludge for the / command, the only time we ever want a */
|
||||
/* graphics character on the top line */
|
||||
g_putch((int)*symstr++);
|
||||
g_putch((int)*str++);
|
||||
ttyDisplay->curx++;
|
||||
}
|
||||
end_glyphout(); /* in case message printed during graphics output */
|
||||
putsyms(symstr);
|
||||
putsyms(str);
|
||||
cl_end();
|
||||
ttyDisplay->toplin = 1;
|
||||
if(ttyDisplay->cury && otoplin != 3)
|
||||
@@ -180,25 +142,25 @@ remember_topl()
|
||||
{
|
||||
register struct WinDesc *cw = wins[WIN_MESSAGE];
|
||||
int idx = cw->maxrow;
|
||||
unsigned len;
|
||||
unsigned len = strlen(toplines) + 1;
|
||||
|
||||
if ((cw->flags & WIN_LOCKHISTORY) || !*toplines) return;
|
||||
|
||||
len = Wstrlen(toplines) + 1;
|
||||
|
||||
if (len > (unsigned)cw->datlen[idx]) {
|
||||
if (cw->data[idx]) free(cw->data[idx]);
|
||||
len += (8 - (len & 7)); /* pad up to next multiple of 8 */
|
||||
cw->data[idx] = (nhwchar *)alloc(sizeof(nhwchar) * len);
|
||||
cw->data[idx] = (char *)alloc(len);
|
||||
cw->datlen[idx] = (short)len;
|
||||
}
|
||||
(void)WWstrcpy(cw->data[idx], toplines);
|
||||
Strcpy(cw->data[idx], toplines);
|
||||
*toplines = '\0';
|
||||
cw->maxcol = cw->maxrow = (idx + 1) % cw->rows;
|
||||
}
|
||||
|
||||
void
|
||||
addtopl(s)
|
||||
const nhwchar *s;
|
||||
const char *s;
|
||||
{
|
||||
register struct WinDesc *cw = wins[WIN_MESSAGE];
|
||||
|
||||
@@ -219,8 +181,7 @@ more()
|
||||
|
||||
if(ttyDisplay->toplin) {
|
||||
tty_curs(BASE_WINDOW, cw->curx+1, cw->cury);
|
||||
if(cw->curx >= CO - 8)
|
||||
topl_putsym(T('\n'));
|
||||
if(cw->curx >= CO - 8) topl_putsym('\n');
|
||||
}
|
||||
|
||||
if(flags.standout)
|
||||
@@ -249,22 +210,22 @@ more()
|
||||
|
||||
void
|
||||
update_topl(bp)
|
||||
register const nhwchar *bp;
|
||||
register const char *bp;
|
||||
{
|
||||
register nhwchar *tl, *otl;
|
||||
register char *tl, *otl;
|
||||
register int n0;
|
||||
int notdied = 1;
|
||||
struct WinDesc *cw = wins[WIN_MESSAGE];
|
||||
|
||||
/* If there is room on the line, print message on same line */
|
||||
/* But messages like "You die..." deserve their own line */
|
||||
n0 = Wstrlen(bp);
|
||||
n0 = strlen(bp);
|
||||
if ((ttyDisplay->toplin == 1 || (cw->flags & WIN_STOP)) &&
|
||||
cw->cury == 0 &&
|
||||
n0 + Wstrlen(toplines) + 3 < CO-8 && /* room for --More-- */
|
||||
(notdied = WWstrncmp(bp, T("You die"), 7))) {
|
||||
(void)WWstrcat(toplines, T(" "));
|
||||
(void)WWstrcat(toplines, bp);
|
||||
n0 + (int)strlen(toplines) + 3 < CO-8 && /* room for --More-- */
|
||||
(notdied = strncmp(bp, "You die", 7))) {
|
||||
Strcat(toplines, " ");
|
||||
Strcat(toplines, bp);
|
||||
cw->curx += 2;
|
||||
if(!(cw->flags & WIN_STOP))
|
||||
addtopl(bp);
|
||||
@@ -277,7 +238,7 @@ update_topl(bp)
|
||||
}
|
||||
}
|
||||
remember_topl();
|
||||
(void)WWstrncpy(toplines, bp, TBUFSZ);
|
||||
(void) strncpy(toplines, bp, TBUFSZ);
|
||||
toplines[TBUFSZ - 1] = 0;
|
||||
|
||||
for(tl = toplines; n0 >= CO; ){
|
||||
@@ -285,11 +246,11 @@ update_topl(bp)
|
||||
for(tl+=CO-1; tl != otl && !isspace(*tl); --tl) ;
|
||||
if(tl == otl) {
|
||||
/* Eek! A huge token. Try splitting after it. */
|
||||
tl = Windex(otl, T(' '));
|
||||
tl = index(otl, ' ');
|
||||
if (!tl) break; /* No choice but to spit it out whole. */
|
||||
}
|
||||
*tl++ = T('\n');
|
||||
n0 = Wstrlen(tl);
|
||||
*tl++ = '\n';
|
||||
n0 = strlen(tl);
|
||||
}
|
||||
if(!notdied) cw->flags &= ~WIN_STOP;
|
||||
if(!(cw->flags & WIN_STOP)) redotoplin(toplines);
|
||||
@@ -298,21 +259,21 @@ update_topl(bp)
|
||||
STATIC_OVL
|
||||
void
|
||||
topl_putsym(c)
|
||||
nhwchar c;
|
||||
char c;
|
||||
{
|
||||
register struct WinDesc *cw = wins[WIN_MESSAGE];
|
||||
|
||||
if(cw == (struct WinDesc *) 0) panic("Putsym window MESSAGE nonexistant");
|
||||
|
||||
switch(c) {
|
||||
case T('\b'):
|
||||
case '\b':
|
||||
if(ttyDisplay->curx == 0 && ttyDisplay->cury > 0)
|
||||
tty_curs(BASE_WINDOW, CO, (int)ttyDisplay->cury-1);
|
||||
backsp();
|
||||
ttyDisplay->curx--;
|
||||
cw->curx = ttyDisplay->curx;
|
||||
return;
|
||||
case T('\n'):
|
||||
case '\n':
|
||||
cl_end();
|
||||
ttyDisplay->curx = 0;
|
||||
ttyDisplay->cury++;
|
||||
@@ -323,7 +284,7 @@ topl_putsym(c)
|
||||
break;
|
||||
default:
|
||||
if(ttyDisplay->curx == CO-1)
|
||||
topl_putsym(T('\n')); /* 1 <= curx <= CO; avoid CO */
|
||||
topl_putsym('\n'); /* 1 <= curx <= CO; avoid CO */
|
||||
#ifdef WIN32CON
|
||||
(void) putchar(c);
|
||||
#endif
|
||||
@@ -337,11 +298,11 @@ topl_putsym(c)
|
||||
}
|
||||
|
||||
void
|
||||
putsyms(symstr)
|
||||
const nhwchar *symstr;
|
||||
putsyms(str)
|
||||
const char *str;
|
||||
{
|
||||
while(*symstr)
|
||||
topl_putsym(*symstr++);
|
||||
while(*str)
|
||||
topl_putsym(*str++);
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
@@ -349,8 +310,7 @@ removetopl(n)
|
||||
register int n;
|
||||
{
|
||||
/* assume addtopl() has been done, so ttyDisplay->toplin is already set */
|
||||
while (n-- > 0)
|
||||
putsyms(T("\b \b"));
|
||||
while (n-- > 0) putsyms("\b \b");
|
||||
}
|
||||
|
||||
extern char erase_char; /* from xxxtty.c; don't need kill_char */
|
||||
@@ -413,7 +373,7 @@ char def;
|
||||
ttyDisplay->inread = sav;
|
||||
tty_clear_nhwindow(WIN_MESSAGE);
|
||||
cw->maxcol = cw->maxrow;
|
||||
Waddtopl(prompt);
|
||||
addtopl(prompt);
|
||||
} else {
|
||||
if(!doprev)
|
||||
(void) tty_doprev_message(); /* need two initially */
|
||||
@@ -429,7 +389,7 @@ char def;
|
||||
tty_clear_nhwindow(WIN_MESSAGE);
|
||||
cw->maxcol = cw->maxrow;
|
||||
doprev = 0;
|
||||
Waddtopl(prompt);
|
||||
addtopl(prompt);
|
||||
q = '\0'; /* force another loop iteration */
|
||||
continue;
|
||||
}
|
||||
@@ -450,14 +410,13 @@ char def;
|
||||
tty_nhbell();
|
||||
q = (char)0;
|
||||
} else if (q == '#' || digit_ok) {
|
||||
char z;
|
||||
nhwchar digit_string[2];
|
||||
char z, digit_string[2];
|
||||
int n_len = 0;
|
||||
long value = 0;
|
||||
addtopl(T("#")), n_len++;
|
||||
digit_string[1] = (nhwchar)0;
|
||||
addtopl("#"), n_len++;
|
||||
digit_string[1] = '\0';
|
||||
if (q != '#') {
|
||||
digit_string[0] = (nhwchar)q;
|
||||
digit_string[0] = q;
|
||||
addtopl(digit_string), n_len++;
|
||||
value = q - '0';
|
||||
q = '#';
|
||||
@@ -467,7 +426,7 @@ char def;
|
||||
if (digit(z)) {
|
||||
value = (10 * value) + (z - '0');
|
||||
if (value < 0) break; /* overflow: try again */
|
||||
digit_string[0] = (nhwchar)z;
|
||||
digit_string[0] = z;
|
||||
addtopl(digit_string), n_len++;
|
||||
} else if (z == 'y' || index(quitchars, z)) {
|
||||
if (z == '\033') value = -1; /* abort */
|
||||
@@ -492,7 +451,7 @@ char def;
|
||||
|
||||
if (q != '#') {
|
||||
Sprintf(rtmp, "%c", q);
|
||||
Waddtopl(rtmp);
|
||||
addtopl(rtmp);
|
||||
}
|
||||
clean_up:
|
||||
ttyDisplay->inread--;
|
||||
@@ -505,7 +464,7 @@ char def;
|
||||
}
|
||||
|
||||
/* shared by tty_getmsghistory() and tty_putmsghistory() */
|
||||
static nhwchar **snapshot_mesgs = 0;
|
||||
static char **snapshot_mesgs = 0;
|
||||
|
||||
/* collect currently available message history data into a sequential array;
|
||||
optionally, purge that data from the active circular buffer set as we go */
|
||||
@@ -513,7 +472,7 @@ STATIC_OVL void
|
||||
msghistory_snapshot(purge)
|
||||
boolean purge; /* clear message history buffer as we copy it */
|
||||
{
|
||||
nhwchar *mesg;
|
||||
char *mesg;
|
||||
int i, inidx, outidx;
|
||||
struct WinDesc *cw;
|
||||
|
||||
@@ -528,24 +487,24 @@ boolean purge; /* clear message history buffer as we copy it */
|
||||
history updating to take place because that could clobber them */
|
||||
if (!purge) cw->flags |= WIN_LOCKHISTORY;
|
||||
|
||||
snapshot_mesgs = (nhwchar **)alloc((cw->rows + 1) * sizeof (nhwchar *));
|
||||
snapshot_mesgs = (char **)alloc((cw->rows + 1) * sizeof (char *));
|
||||
outidx = 0;
|
||||
inidx = cw->maxrow;
|
||||
for (i = 0; i < cw->rows; ++i) {
|
||||
snapshot_mesgs[i] = (nhwchar *)0;
|
||||
snapshot_mesgs[i] = (char *)0;
|
||||
mesg = cw->data[inidx];
|
||||
if (mesg && *mesg) {
|
||||
snapshot_mesgs[outidx++] = mesg;
|
||||
if (purge) {
|
||||
/* we're taking this pointer away; subsequest history
|
||||
updates will eventually allocate a new one to replace it */
|
||||
cw->data[inidx] = (nhwchar *)0;
|
||||
cw->data[inidx] = (char *)0;
|
||||
cw->datlen[inidx] = 0;
|
||||
}
|
||||
}
|
||||
inidx = (inidx + 1) % cw->rows;
|
||||
}
|
||||
snapshot_mesgs[cw->rows] = (nhwchar *)0; /* sentinel */
|
||||
snapshot_mesgs[cw->rows] = (char *)0; /* sentinel */
|
||||
|
||||
/* for a destructive snapshot, history is now completely empty */
|
||||
if (purge) cw->maxcol = cw->maxrow = 0;
|
||||
@@ -565,7 +524,7 @@ boolean purged; /* True: took history's pointers, False: just cloned them */
|
||||
free((genericptr_t)snapshot_mesgs[i]);
|
||||
}
|
||||
|
||||
free((genericptr_t)snapshot_mesgs), snapshot_mesgs = (nhwchar **)0;
|
||||
free((genericptr_t)snapshot_mesgs), snapshot_mesgs = (char **)0;
|
||||
|
||||
/* history can resume being updated at will now... */
|
||||
if (!purged) wins[WIN_MESSAGE]->flags &= ~WIN_LOCKHISTORY;
|
||||
@@ -587,7 +546,7 @@ tty_getmsghistory(init)
|
||||
boolean init;
|
||||
{
|
||||
static int nxtidx;
|
||||
nhwchar *nextmesg;
|
||||
char *nextmesg;
|
||||
char *result = 0;
|
||||
|
||||
if (init) {
|
||||
@@ -598,11 +557,7 @@ boolean init;
|
||||
if (snapshot_mesgs) {
|
||||
nextmesg = snapshot_mesgs[nxtidx++];
|
||||
if (nextmesg) {
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
result = WNstrcpy(topl_nbuf, nextmesg); /* wide-to-narrow */
|
||||
#else
|
||||
result = (char *)nextmesg;
|
||||
#endif
|
||||
} else {
|
||||
free_msghistory_snapshot(FALSE);
|
||||
}
|
||||
@@ -648,12 +603,12 @@ boolean restoring_msghist;
|
||||
if (msg) {
|
||||
/* move most recent message to history, make this become most recent */
|
||||
remember_topl();
|
||||
(void)NWstrcpy(toplines, msg); /* narrow-to-wide */
|
||||
Strcpy(toplines, msg);
|
||||
} else if (snapshot_mesgs) {
|
||||
/* done putting arbitrary messages in; put the snapshot ones back */
|
||||
for (idx = 0; snapshot_mesgs[idx]; ++idx) {
|
||||
remember_topl();
|
||||
(void)WWstrcpy(toplines, snapshot_mesgs[idx]); /* wide-to-wide */
|
||||
Strcpy(toplines, snapshot_mesgs[idx]);
|
||||
}
|
||||
/* now release the snapshot */
|
||||
free_msghistory_snapshot(TRUE);
|
||||
|
||||
342
win/tty/wintty.c
342
win/tty/wintty.c
@@ -43,11 +43,6 @@ extern char mapped_menu_cmds[]; /* from options.c */
|
||||
/* this is only needed until tty_status_* routines are written */
|
||||
extern NEARDATA winid WIN_STATUS;
|
||||
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
void FDECL(tty_putmixed,(winid,int,const char *));
|
||||
void FDECL(tty_putstr_core,(winid,int,const nhwchar *));
|
||||
#endif
|
||||
|
||||
/* Interface definition, for windows.c */
|
||||
struct window_procs tty_procs = {
|
||||
"tty",
|
||||
@@ -75,11 +70,7 @@ struct window_procs tty_procs = {
|
||||
tty_destroy_nhwindow,
|
||||
tty_curs,
|
||||
tty_putstr,
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
tty_putmixed,
|
||||
#else
|
||||
genl_putmixed,
|
||||
#endif
|
||||
tty_display_file,
|
||||
tty_start_menu,
|
||||
tty_add_menu,
|
||||
@@ -151,12 +142,7 @@ static char obuf[BUFSIZ]; /* BUFSIZ is defined in stdio.h */
|
||||
#endif
|
||||
|
||||
static char winpanicstr[] = "Bad window id %d";
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
nhwchar defmorestr[] = L"--More--";
|
||||
#else
|
||||
nhwchar defmorestr[] = "--More--";
|
||||
#endif
|
||||
nhwchar emptysym[1] = {0};
|
||||
char defmorestr[] = "--More--";
|
||||
|
||||
#ifdef CLIPPING
|
||||
# if defined(USE_TILES) && defined(MSDOS)
|
||||
@@ -196,11 +182,8 @@ STATIC_DCL void FDECL(process_menu_window, (winid,struct WinDesc *));
|
||||
STATIC_DCL void FDECL(process_text_window, (winid,struct WinDesc *));
|
||||
STATIC_DCL tty_menu_item *FDECL(reverse, (tty_menu_item *));
|
||||
STATIC_DCL const char * FDECL(compress_str, (const char *));
|
||||
STATIC_DCL void FDECL(tty_putsym, (winid, int, int, NHWCHAR_P));
|
||||
STATIC_DCL void FDECL(tty_putsym, (winid, int, int, CHAR_P));
|
||||
STATIC_DCL char *FDECL(copy_of, (const char *));
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
STATIC_DCL nhwchar *FDECL(nhwchar_copy_of, (const nhwchar *));
|
||||
#endif
|
||||
STATIC_DCL void FDECL(bail, (const char *)); /* __attribute__((noreturn)) */
|
||||
|
||||
/*
|
||||
@@ -295,11 +278,7 @@ if(wc_tracelogf)
|
||||
for(i=WIN_INVEN; i < MAXWIN; i++)
|
||||
if(wins[i] && wins[i]->active) {
|
||||
/* cop-out */
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
addtopl(L"Press Return to continue: ");
|
||||
#else
|
||||
addtopl("Press Return to continue: ");
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
(void) fflush(stdout);
|
||||
@@ -1120,24 +1099,24 @@ tty_create_nhwindow(type)
|
||||
|
||||
if(newwin->maxrow) {
|
||||
newwin->data =
|
||||
(nhwchar **) alloc(sizeof(nhwchar *) * (unsigned)newwin->maxrow);
|
||||
(char **) alloc(sizeof(char *) * (unsigned)newwin->maxrow);
|
||||
newwin->datlen =
|
||||
(short *) alloc(sizeof(short) * (unsigned)newwin->maxrow);
|
||||
if(newwin->maxcol) {
|
||||
for (i = 0; i < newwin->maxrow; i++) {
|
||||
newwin->data[i] = (nhwchar *) alloc(sizeof(nhwchar) * (unsigned)newwin->maxcol);
|
||||
newwin->data[i] = (char *) alloc((unsigned)newwin->maxcol);
|
||||
newwin->datlen[i] = newwin->maxcol;
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < newwin->maxrow; i++) {
|
||||
newwin->data[i] = (nhwchar *) 0;
|
||||
newwin->data[i] = (char *) 0;
|
||||
newwin->datlen[i] = 0;
|
||||
}
|
||||
}
|
||||
if(newwin->type == NHW_MESSAGE)
|
||||
newwin->maxrow = 0;
|
||||
} else {
|
||||
newwin->data = (nhwchar **)0;
|
||||
newwin->data = (char **)0;
|
||||
newwin->datlen = (short *)0;
|
||||
}
|
||||
|
||||
@@ -1175,12 +1154,12 @@ free_window_info(cw, free_data)
|
||||
for(i=0; i<cw->maxrow; i++)
|
||||
if(cw->data[i]) {
|
||||
free((genericptr_t)cw->data[i]);
|
||||
cw->data[i] = (nhwchar *)0;
|
||||
cw->data[i] = (char *)0;
|
||||
if (cw->datlen) cw->datlen[i] = 0;
|
||||
}
|
||||
if (free_data) {
|
||||
free((genericptr_t)cw->data);
|
||||
cw->data = (nhwchar **)0;
|
||||
cw->data = (char **)0;
|
||||
if (cw->datlen) free((genericptr_t)cw->datlen);
|
||||
cw->datlen = (short *)0;
|
||||
cw->rows = 0;
|
||||
@@ -1254,25 +1233,15 @@ dmore(cw, s)
|
||||
register struct WinDesc *cw;
|
||||
const char *s; /* valid responses */
|
||||
{
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
char buf[BUFSZ];
|
||||
#endif
|
||||
const nhwchar *prompt = cw->morestr ? cw->morestr : defmorestr;
|
||||
|
||||
const char *prompt = cw->morestr ? cw->morestr : defmorestr;
|
||||
int offset = (cw->type == NHW_TEXT) ? 1 : 2;
|
||||
|
||||
tty_curs(BASE_WINDOW,
|
||||
(int)ttyDisplay->curx + offset, (int)ttyDisplay->cury);
|
||||
if(flags.standout)
|
||||
standoutbeg();
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
strnhwcpy(buf, prompt);
|
||||
xputs(buf);
|
||||
ttyDisplay->curx += strlen(buf);
|
||||
#else
|
||||
xputs(prompt);
|
||||
ttyDisplay->curx += strlen(prompt);
|
||||
#endif
|
||||
if(flags.standout)
|
||||
standoutend();
|
||||
|
||||
@@ -1387,13 +1356,13 @@ struct WinDesc *cw;
|
||||
long count;
|
||||
int n, curr_page, page_lines;
|
||||
boolean finished, counting, reset_count;
|
||||
char *cp, *rp, resp[QBUFSZ], gacc[QBUFSZ];
|
||||
nhwchar *msave, *morestr;
|
||||
char *cp, *rp, resp[QBUFSZ], gacc[QBUFSZ],
|
||||
*msave, *morestr;
|
||||
|
||||
curr_page = page_lines = 0;
|
||||
page_start = page_end = 0;
|
||||
msave = cw->morestr; /* save the morestr */
|
||||
cw->morestr = morestr = (nhwchar*) alloc(sizeof(nhwchar) * (unsigned) QBUFSZ);
|
||||
cw->morestr = morestr = (char*) alloc((unsigned) QBUFSZ);
|
||||
counting = FALSE;
|
||||
count = 0L;
|
||||
reset_count = TRUE;
|
||||
@@ -1510,41 +1479,20 @@ struct WinDesc *cw;
|
||||
Strcat(resp, gacc); /* group accelerators */
|
||||
Strcat(resp, mapped_menu_cmds);
|
||||
|
||||
if (cw->npages > 1) {
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
char buf[BUFSZ];
|
||||
Sprintf(buf, "(%d of %d)",
|
||||
curr_page + 1, (int) cw->npages);
|
||||
(void)nhwstrcpy(cw->morestr, buf);
|
||||
#else
|
||||
if (cw->npages > 1)
|
||||
Sprintf(cw->morestr, "(%d of %d)",
|
||||
curr_page + 1, (int) cw->npages);
|
||||
#endif
|
||||
} else if (msave) {
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
(void)nhwcpy(cw->morestr, msave);
|
||||
#else
|
||||
else if (msave)
|
||||
Strcpy(cw->morestr, msave);
|
||||
#endif
|
||||
} else {
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
(void)nhwcpy(cw->morestr, defmorestr);
|
||||
#else
|
||||
else
|
||||
Strcpy(cw->morestr, defmorestr);
|
||||
#endif
|
||||
}
|
||||
|
||||
tty_curs(window, 1, page_lines);
|
||||
cl_end();
|
||||
dmore(cw, resp);
|
||||
} else {
|
||||
/* just put the cursor back... */
|
||||
tty_curs(window,
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
(int) nhwlen(cw->morestr) + 2,
|
||||
#else
|
||||
(int) strlen(cw->morestr) + 2,
|
||||
#endif
|
||||
page_lines);
|
||||
tty_curs(window, (int) strlen(cw->morestr) + 2, page_lines);
|
||||
xwaitforspace(resp);
|
||||
}
|
||||
|
||||
@@ -1708,7 +1656,7 @@ winid window;
|
||||
struct WinDesc *cw;
|
||||
{
|
||||
int i, n, attr;
|
||||
register nhwchar *cp;
|
||||
register char *cp;
|
||||
|
||||
for (n = 0, i = 0; i < cw->maxrow; i++) {
|
||||
if (!cw->offx && (n + cw->offy == ttyDisplay->rows - 1)) {
|
||||
@@ -1746,11 +1694,7 @@ struct WinDesc *cw;
|
||||
*cp && (int) ttyDisplay->curx < (int) ttyDisplay->cols;
|
||||
cp++, ttyDisplay->curx++)
|
||||
#endif
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
u_putch(*cp);
|
||||
#else
|
||||
(void) putchar(*cp);
|
||||
#endif
|
||||
term_end_attr(attr);
|
||||
}
|
||||
}
|
||||
@@ -1996,7 +1940,7 @@ STATIC_OVL void
|
||||
tty_putsym(window, x, y, ch)
|
||||
winid window;
|
||||
int x, y;
|
||||
nhwchar ch;
|
||||
char ch;
|
||||
{
|
||||
register struct WinDesc *cw = 0;
|
||||
|
||||
@@ -2008,11 +1952,7 @@ tty_putsym(window, x, y, ch)
|
||||
case NHW_MAP:
|
||||
case NHW_BASE:
|
||||
tty_curs(window, x, y);
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
u_putch(ch);
|
||||
#else
|
||||
(void) putchar(ch);
|
||||
#endif
|
||||
ttyDisplay->curx++;
|
||||
cw->curx++;
|
||||
break;
|
||||
@@ -2055,14 +1995,9 @@ tty_putstr(window, attr, str)
|
||||
const char *str;
|
||||
{
|
||||
register struct WinDesc *cw = 0;
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
nhwchar symbuf[BUFSZ];
|
||||
register const nhwchar *symstr = symbuf;
|
||||
#else
|
||||
register const nhwchar *nb;
|
||||
register nhwchar *ob;
|
||||
register char *ob;
|
||||
register const char *nb;
|
||||
register int i, j, n0;
|
||||
#endif
|
||||
|
||||
/* Assume there's a real problem if the window is missing --
|
||||
* probably a panic message
|
||||
@@ -2077,52 +2012,21 @@ tty_putstr(window, attr, str)
|
||||
return;
|
||||
if(cw->type != NHW_MESSAGE)
|
||||
str = compress_str(str);
|
||||
#if defined(USER_SOUNDS) && defined(WIN32CON)
|
||||
else
|
||||
play_sound_for_message(str);
|
||||
#endif
|
||||
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
nhwstrcpy(symbuf, str);
|
||||
tty_putstr_core(window, attr, symstr);
|
||||
}
|
||||
|
||||
void
|
||||
tty_putstr_core(window, attr, symstr)
|
||||
winid window;
|
||||
int attr;
|
||||
const nhwchar *symstr;
|
||||
{
|
||||
register struct WinDesc *cw = wins[window];
|
||||
register const nhwchar *nb;
|
||||
register nhwchar *ob;
|
||||
register int i, j, n0;
|
||||
#endif
|
||||
|
||||
ttyDisplay->lastwin = window;
|
||||
|
||||
switch(cw->type) {
|
||||
case NHW_MESSAGE:
|
||||
/* really do this later */
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
update_topl(symstr);
|
||||
#else
|
||||
update_topl(str);
|
||||
#if defined(USER_SOUNDS) && defined(WIN32CON)
|
||||
play_sound_for_message(str);
|
||||
#endif
|
||||
update_topl(str);
|
||||
break;
|
||||
|
||||
case NHW_STATUS:
|
||||
ob = &cw->data[cw->cury][j = cw->curx];
|
||||
if(context.botlx) *ob = 0;
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
if(!cw->cury && (int)nhwlen(symstr) >= CO) {
|
||||
/* the characters before "St:" are unnecessary */
|
||||
nb = nhwindex(symstr, L':');
|
||||
if(nb && nb > symstr+2)
|
||||
symstr = nb - 2;
|
||||
}
|
||||
nb = symstr;
|
||||
#else
|
||||
if(!cw->cury && (int)strlen(str) >= CO) {
|
||||
/* the characters before "St:" are unnecessary */
|
||||
nb = index(str, ':');
|
||||
@@ -2130,8 +2034,6 @@ tty_putstr_core(window, attr, symstr)
|
||||
str = nb - 2;
|
||||
}
|
||||
nb = str;
|
||||
#endif
|
||||
|
||||
for(i = cw->curx+1, n0 = cw->cols; i < n0; i++, nb++) {
|
||||
if(!*nb) {
|
||||
if(*ob || context.botlx) {
|
||||
@@ -2146,31 +2048,19 @@ tty_putstr_core(window, attr, symstr)
|
||||
if(*ob) ob++;
|
||||
}
|
||||
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
(void) nhwncpy(&cw->data[cw->cury][j], symstr, cw->cols - j - 1);
|
||||
#else
|
||||
(void) strncpy(&cw->data[cw->cury][j], str, cw->cols - j - 1);
|
||||
#endif
|
||||
cw->data[cw->cury][cw->cols-1] = (nhwchar)0; /* null terminate */
|
||||
cw->data[cw->cury][cw->cols-1] = '\0'; /* null terminate */
|
||||
cw->cury = (cw->cury+1) % 2;
|
||||
cw->curx = 0;
|
||||
break;
|
||||
case NHW_MAP:
|
||||
tty_curs(window, cw->curx+1, cw->cury);
|
||||
term_start_attr(attr);
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
while(*symstr && (int) ttyDisplay->curx < (int) ttyDisplay->cols-1) {
|
||||
u_putch(*symstr);
|
||||
symstr++;
|
||||
ttyDisplay->curx++;
|
||||
}
|
||||
#else
|
||||
while(*str && (int) ttyDisplay->curx < (int) ttyDisplay->cols-1) {
|
||||
(void) putchar(*str);
|
||||
str++;
|
||||
ttyDisplay->curx++;
|
||||
}
|
||||
#endif
|
||||
cw->curx = 0;
|
||||
cw->cury++;
|
||||
term_end_attr(attr);
|
||||
@@ -2178,23 +2068,14 @@ tty_putstr_core(window, attr, symstr)
|
||||
case NHW_BASE:
|
||||
tty_curs(window, cw->curx+1, cw->cury);
|
||||
term_start_attr(attr);
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
while (*symstr) {
|
||||
#else
|
||||
while (*str) {
|
||||
#endif
|
||||
if ((int) ttyDisplay->curx >= (int) ttyDisplay->cols-1) {
|
||||
cw->curx = 0;
|
||||
cw->cury++;
|
||||
tty_curs(window, cw->curx+1, cw->cury);
|
||||
}
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
u_putch(*symstr);
|
||||
symstr++;
|
||||
#else
|
||||
(void) putchar(*str);
|
||||
str++;
|
||||
#endif
|
||||
ttyDisplay->curx++;
|
||||
}
|
||||
cw->curx = 0;
|
||||
@@ -2221,10 +2102,10 @@ tty_putstr_core(window, attr, symstr)
|
||||
}
|
||||
/* always grows one at a time, but alloc 12 at a time */
|
||||
if(cw->cury >= cw->rows) {
|
||||
nhwchar **tmp;
|
||||
char **tmp;
|
||||
|
||||
cw->rows += 12;
|
||||
tmp = (nhwchar **) alloc(sizeof(nhwchar *) * (unsigned)cw->rows);
|
||||
tmp = (char **) alloc(sizeof(char *) * (unsigned)cw->rows);
|
||||
for(i=0; i<cw->maxrow; i++)
|
||||
tmp[i] = cw->data[i];
|
||||
if(cw->data)
|
||||
@@ -2236,19 +2117,10 @@ tty_putstr_core(window, attr, symstr)
|
||||
}
|
||||
if(cw->data[cw->cury])
|
||||
free((genericptr_t)cw->data[cw->cury]);
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
n0 = nhwlen(symstr) + 1;
|
||||
#else
|
||||
n0 = strlen(str) + 1;
|
||||
#endif
|
||||
|
||||
ob = cw->data[cw->cury] = (nhwchar *)alloc(sizeof(nhwchar) * ((unsigned)n0 + 1));
|
||||
*ob++ = (nhwchar)(attr + 1); /* avoid nuls, for convenience */
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
(void)nhwcpy(ob, symstr);
|
||||
#else
|
||||
ob = cw->data[cw->cury] = (char *)alloc((unsigned)n0 + 1);
|
||||
*ob++ = (char)(attr + 1); /* avoid nuls, for convenience */
|
||||
Strcpy(ob, str);
|
||||
#endif
|
||||
|
||||
if(n0 > cw->maxcol)
|
||||
cw->maxcol = n0;
|
||||
@@ -2256,19 +2128,11 @@ tty_putstr_core(window, attr, symstr)
|
||||
cw->maxrow = cw->cury;
|
||||
if(n0 > CO) {
|
||||
/* attempt to break the line */
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
for(i = CO-1; i && symstr[i] != L' ' && symstr[i] != L'\n';)
|
||||
#else
|
||||
for(i = CO-1; i && str[i] != ' ' && str[i] != '\n';)
|
||||
#endif
|
||||
i--;
|
||||
if(i) {
|
||||
cw->data[cw->cury-1][++i] = (nhwchar)0;
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
tty_putstr_core(window, attr, &symstr[i]);
|
||||
#else
|
||||
cw->data[cw->cury-1][++i] = '\0';
|
||||
tty_putstr(window, attr, &str[i]);
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2276,60 +2140,6 @@ tty_putstr_core(window, attr, symstr)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
/*
|
||||
* This differs from putstr() because the str parameter can
|
||||
* contain a sequence of characters representing:
|
||||
* \GXXXXNNNN a glyph value, encoded by encglyph().
|
||||
*
|
||||
*/
|
||||
void
|
||||
tty_putmixed(window, attr, str)
|
||||
winid window;
|
||||
int attr;
|
||||
const char *str;
|
||||
{
|
||||
nhwchar wbuf[BUFSZ];
|
||||
const char *cp = str;
|
||||
nhwchar *put = wbuf;
|
||||
while (*cp) {
|
||||
if (*cp == '\\') {
|
||||
int rndchk = 0, so = 0, gv = 0, ch, oc, dcount;
|
||||
unsigned os;
|
||||
const char *dp, *hex = "00112233445566778899aAbBcCdDeEfF";
|
||||
const char *save_cp = cp;
|
||||
|
||||
cp++;
|
||||
switch(*cp) {
|
||||
case 'G': /* glyph value \GXXXXNNNN*/
|
||||
dcount = 0;
|
||||
for (++cp; *cp && (dp = index(hex, *cp)) && (dcount++ < 4); cp++)
|
||||
rndchk = (int)((rndchk * 16) + ((int)(dp - hex) / 2));
|
||||
|
||||
if (rndchk == context.rndencode) {
|
||||
dcount = 0;
|
||||
for (; *cp && (dp = index(hex, *cp)) && (dcount++ < 4); cp++)
|
||||
gv = (int)((gv * 16) + ((int)(dp - hex) / 2));
|
||||
so = mapglyph(gv, &ch, &oc, &os, 0, 0);
|
||||
*put++ = (nhwchar)showsyms[so];
|
||||
continue;
|
||||
} else {
|
||||
/* possible forgery - leave it the way it is */
|
||||
cp = save_cp;
|
||||
}
|
||||
break;
|
||||
case '\\':
|
||||
break;
|
||||
}
|
||||
}
|
||||
*put++ = (nhwchar)*cp++;
|
||||
}
|
||||
*put = (nhwchar)0;
|
||||
/* now send it to tty_putstr_core() */
|
||||
tty_putstr_core(window, attr, wbuf);
|
||||
}
|
||||
#endif /*UNICODE_WIDEWINPORT*/
|
||||
|
||||
void
|
||||
tty_display_file(fname, complain)
|
||||
const char *fname;
|
||||
@@ -2515,7 +2325,7 @@ tty_end_menu(window, prompt)
|
||||
/* Reverse the list so that items are in correct order. */
|
||||
cw->mlist = reverse(cw->mlist);
|
||||
|
||||
/* Put the prompt at the beginning of the menu. */
|
||||
/* Put the promt at the beginning of the menu. */
|
||||
if (prompt) {
|
||||
anything any;
|
||||
|
||||
@@ -2567,19 +2377,10 @@ tty_end_menu(window, prompt)
|
||||
/* produce the largest demo string */
|
||||
Sprintf(buf, "(%d of %d) ", cw->npages, cw->npages);
|
||||
len = strlen(buf);
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
cw->morestr = nhwchar_copy_of(emptysym);
|
||||
#else
|
||||
cw->morestr = copy_of("");
|
||||
#endif
|
||||
} else {
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
cw->morestr = nhwchar_copy_of(L"(end) ");
|
||||
len = nhwlen(cw->morestr);
|
||||
#else
|
||||
cw->morestr = copy_of("(end) ");
|
||||
len = strlen(cw->morestr);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (len > (int)ttyDisplay->cols) {
|
||||
@@ -2699,11 +2500,7 @@ tty_wait_synch()
|
||||
} else {
|
||||
tty_display_nhwindow(WIN_MAP, FALSE);
|
||||
if(ttyDisplay->inmore) {
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
addtopl(L"--More--");
|
||||
#else
|
||||
addtopl("--More--");
|
||||
#endif
|
||||
(void) fflush(stdout);
|
||||
} else if(ttyDisplay->inread > program_state.gameover) {
|
||||
/* this can only happen if we were reading and got interrupted */
|
||||
@@ -2775,58 +2572,6 @@ end_glyphout()
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef UNICODE_WIDEWINPORT
|
||||
/*
|
||||
* Parts of u_putch() were contributed by Adam Wozniak, 2005.
|
||||
*/
|
||||
void
|
||||
u_putch(sym)
|
||||
nhwchar sym;
|
||||
{
|
||||
unsigned long unicode = sym;
|
||||
if (!iflags.unicodedisp)
|
||||
putchar((char)sym);
|
||||
else {
|
||||
#if defined(UNIX) || defined(VMS)
|
||||
/* send utf8 to display */
|
||||
if (unicode < 0x80) {
|
||||
(void) putchar(unicode);
|
||||
} else if (unicode < 0x00000800) {
|
||||
(void) putchar(0xC0 | (unicode >> 6));
|
||||
(void) putchar(0x80 | (unicode & 0x3F));
|
||||
} else if (unicode < 0x00010000) {
|
||||
(void) putchar(0xE0 | (unicode >> 12));
|
||||
(void) putchar(0x80 | ((unicode >> 6) & 0x3F));
|
||||
(void) putchar(0x80 | (unicode & 0x3F));
|
||||
} else if (unicode < 0x00200000) {
|
||||
(void) putchar(0xF0 | (unicode >> 18));
|
||||
(void) putchar(0x80 | ((unicode >> 12) & 0x3F));
|
||||
(void) putchar(0x80 | ((unicode >> 6) & 0x3F));
|
||||
(void) putchar(0x80 | (unicode & 0x3F));
|
||||
} else if (unicode < 0x04000000) {
|
||||
(void) putchar(0xF8 | (unicode >> 24));
|
||||
(void) putchar(0x80 | ((unicode >> 18) & 0x3F));
|
||||
(void) putchar(0x80 | ((unicode >> 12) & 0x3F));
|
||||
(void) putchar(0x80 | ((unicode >> 6) & 0x3F));
|
||||
(void) putchar(0x80 | (unicode & 0x3F));
|
||||
} else {
|
||||
(void) putchar(0xFC | (unicode >> 30));
|
||||
(void) putchar(0x80 | ((unicode >> 24) & 0x3F));
|
||||
(void) putchar(0x80 | ((unicode >> 18) & 0x3F));
|
||||
(void) putchar(0x80 | ((unicode >> 12) & 0x3F));
|
||||
(void) putchar(0x80 | ((unicode >> 6) & 0x3F));
|
||||
(void) putchar(0x80 | (unicode & 0x3F));
|
||||
}
|
||||
#else
|
||||
/* it is assumed that whatever is being substituted for
|
||||
putchar() can handle unicode characters directly at
|
||||
this point (nttty's xputc() for example) */
|
||||
(void) putchar(sym);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif /*UNICODE_WIDEWINPORT*/
|
||||
|
||||
#ifndef WIN32
|
||||
void
|
||||
g_putch(in_ch)
|
||||
@@ -2835,11 +2580,6 @@ int in_ch;
|
||||
register char ch = (char)in_ch;
|
||||
|
||||
# if defined(ASCIIGRAPH) && !defined(NO_TERMS)
|
||||
# if defined(UNICODE_WIDEWINPORT) && defined(UNICODE_DRAWING)
|
||||
if (iflags.unicodedisp && symset[currentgraphics].name) {
|
||||
u_putch(in_ch);
|
||||
} else
|
||||
# endif
|
||||
if (SYMHANDLING(H_IBM) || iflags.eight_bit_tty) {
|
||||
/* IBM-compatible displays don't need other stuff */
|
||||
(void) putchar(ch);
|
||||
@@ -2923,9 +2663,9 @@ tty_print_glyph(window, x, y, glyph)
|
||||
xchar x, y;
|
||||
int glyph;
|
||||
{
|
||||
int ch, idx;
|
||||
int ch;
|
||||
boolean reverse_on = FALSE;
|
||||
int color;
|
||||
int color;
|
||||
unsigned special;
|
||||
|
||||
#ifdef CLIPPING
|
||||
@@ -2935,7 +2675,7 @@ tty_print_glyph(window, x, y, glyph)
|
||||
}
|
||||
#endif
|
||||
/* map glyph to character and color */
|
||||
idx = mapglyph(glyph, &ch, &color, &special, x, y);
|
||||
(void)mapglyph(glyph, &ch, &color, &special, x, y);
|
||||
|
||||
/* Move the cursor. */
|
||||
tty_curs(window, x,y);
|
||||
@@ -2968,11 +2708,6 @@ tty_print_glyph(window, x, y, glyph)
|
||||
if (iflags.grmode && iflags.tile_view)
|
||||
xputg(glyph,ch,special);
|
||||
else
|
||||
#endif
|
||||
#if defined(UNICODE_WIDEWINPORT) && defined(UNICODE_DRAWING)
|
||||
if (iflags.unicodedisp && symset[currentgraphics].name)
|
||||
g_putch(showsyms[idx]); /* use the unicode symset */
|
||||
else
|
||||
#endif
|
||||
g_putch(ch); /* print the character */
|
||||
|
||||
@@ -3127,15 +2862,6 @@ copy_of(s)
|
||||
return strcpy((char *) alloc((unsigned) (strlen(s) + 1)), s);
|
||||
}
|
||||
|
||||
# ifdef UNICODE_WIDEWINPORT
|
||||
STATIC_OVL nhwchar *
|
||||
nhwchar_copy_of(s)
|
||||
const nhwchar *s;
|
||||
{
|
||||
if (!s) s = emptysym;
|
||||
return nhwcpy((nhwchar *) alloc(sizeof(nhwchar) * (unsigned) (nhwlen(s) + 1)), s);
|
||||
}
|
||||
# endif /*UNICODE_WIDEWINPORT*/
|
||||
#endif /* TTY_GRAPHICS */
|
||||
|
||||
/*wintty.c*/
|
||||
|
||||
Reference in New Issue
Block a user