File: pckeys.c

package info (click to toggle)
nethack 3.6.7-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 21,468 kB
  • sloc: ansic: 266,495; cpp: 13,652; yacc: 2,903; perl: 1,426; lex: 581; sh: 535; xml: 372; awk: 98; makefile: 68; fortran: 51; sed: 11
file content (137 lines) | stat: -rw-r--r-- 3,094 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/* NetHack 3.6	pckeys.c	$NHDT-Date: 1501465420 2017/07/31 01:43:40 $  $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.12 $ */
/* Copyright (c) NetHack PC Development Team 1996                 */
/* NetHack may be freely redistributed.  See license for details. */

/*
 *  MSDOS tile-specific key handling.
 */

#include "hack.h"

#ifdef MSDOS
#ifdef USE_TILES
#include "wintty.h"
#include "pcvideo.h"

boolean FDECL(pckeys, (unsigned char, unsigned char));
static void FDECL(userpan, (BOOLEAN_P));
static void FDECL(overview, (BOOLEAN_P));
static void FDECL(traditional, (BOOLEAN_P));
static void NDECL(refresh);

extern struct WinDesc *wins[MAXWIN]; /* from wintty.c */
extern boolean inmap;                /* from video.c */

#define SHIFT (0x1 | 0x2)
#define CTRL 0x4
#define ALT 0x8

/*
 * Check for special interface manipulation keys.
 * Returns TRUE if the scan code triggered something.
 *
 */
boolean
pckeys(scancode, shift)
unsigned char scancode;
unsigned char shift;
{
    boolean opening_dialog;

    opening_dialog = pl_character[0] ? FALSE : TRUE;
    switch (scancode) {
#ifdef SIMULATE_CURSOR
    case 0x3d: /* F3 = toggle cursor type */
        HideCursor();
        cursor_type += 1;
        if (cursor_type >= NUM_CURSOR_TYPES)
            cursor_type = 0;
        DrawCursor();
        break;
#endif
    case 0x74: /* Control-right_arrow = scroll horizontal to right */
        if ((shift & CTRL) && iflags.tile_view && !opening_dialog)
            userpan(1);
        break;
    case 0x73: /* Control-left_arrow = scroll horizontal to left */
        if ((shift & CTRL) && iflags.tile_view && !opening_dialog)
            userpan(0);
        break;
    case 0x3E: /* F4 = toggle overview mode */
        if (iflags.tile_view && !opening_dialog && !Is_rogue_level(&u.uz)) {
            iflags.traditional_view = FALSE;
            overview(iflags.over_view ? FALSE : TRUE);
            refresh();
        }
        break;
    case 0x3F: /* F5 = toggle traditional mode */
        if (iflags.tile_view && !opening_dialog && !Is_rogue_level(&u.uz)) {
            iflags.over_view = FALSE;
            traditional(iflags.traditional_view ? FALSE : TRUE);
            refresh();
        }
        break;
    default:
        return FALSE;
    }
    return TRUE;
}

static void
userpan(on)
boolean on;
{
#ifdef SCREEN_VGA
    if (iflags.usevga)
        vga_userpan(on);
#endif
#ifdef SCREEN_VESA
    if (iflags.usevesa)
        vesa_userpan(on);
#endif
}

static void
overview(on)
boolean on;
{
#ifdef SCREEN_VGA
    if (iflags.usevga)
        vga_overview(on);
#endif
#ifdef SCREEN_VESA
    if (iflags.usevesa)
        vesa_overview(on);
#endif
}

static void
traditional(on)
boolean on;
{
#ifdef SCREEN_VGA
    if (iflags.usevga)
        vga_traditional(on);
#endif
#ifdef SCREEN_VESA
    if (iflags.usevesa)
        vesa_traditional(on);
#endif
}

static void
refresh()
{
#ifdef SCREEN_VGA
    if (iflags.usevga)
        vga_refresh();
#endif
#ifdef SCREEN_VESA
    if (iflags.usevesa)
        vesa_refresh();
#endif
}
#endif /* USE_TILES */
#endif /* MSDOS */

/*pckeys.c*/