]> icculus.org git repositories - theoddone33/hhexen.git/blob - base/i_action.c
Round 2: Added --help and --version, as well as HHEXEN_DATA environment variable...
[theoddone33/hhexen.git] / base / i_action.c
1 //**************************************************************************
2 //**
3 //** i_action.c : HHexen 1.3 : Dan Olson.
4 //**
5 //** $RCSfile$
6 //** $Revision$
7 //** $Date$
8 //** $Author$
9 //**
10 //**************************************************************************
11
12 // HEADER FILES ------------------------------------------------------------
13 #include <string.h>
14 #include "h2def.h"
15
16 // MACROS ------------------------------------------------------------------
17
18 // TYPES -------------------------------------------------------------------
19
20 // EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
21
22 // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
23
24 int C_BindControl(char *con_name, boolean *ga);
25 void C_RegisterControl(control_t *con);
26 void C_ScanCodeDown(int code);
27 void C_ScanCodeUp(int code);
28 char *C_ScanToKey(int code);
29
30 // PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
31
32 control_t *FindControl(char *con_name);
33
34 // EXTERNAL DATA DECLARATIONS ----------------------------------------------
35
36 extern boolean ga[NUMGAMEACTIONS];
37
38 // PUBLIC DATA DEFINITIONS -------------------------------------------------
39
40 // PRIVATE DATA DEFINITIONS ------------------------------------------------
41
42 control_t *controllist;
43
44 // CODE --------------------------------------------------------------------
45
46 control_t *FindControl(char *con_name)
47 {
48         control_t *con;
49
50         for(con = controllist ; con ; con=con->next)
51                 if(!strcmp(con_name, con->name))
52                         return con;
53         return NULL;
54 }
55
56 int C_BindControl(char *con_name, int action)
57 {
58         control_t *con;
59
60         con = FindControl(con_name);
61         if(!con)
62                 return -1;      //Bad key name
63         con->action = &ga[action];
64         return 0;
65 }
66 void C_RegisterControl(control_t *con)
67 {
68         //Is name used?
69         if(FindControl(con->name))
70         {
71                 fprintf(stderr, "Can't register control %s, name in use\n",
72                         con->name);
73                 return;
74         }
75         
76         //Link her in
77         con->next = controllist;
78         controllist = con;
79 }
80
81 void C_ScanCodeDown(int code)
82 {
83         control_t *con;
84
85         for(con = controllist; con; con=con->next) {
86                 if(con->scancode == code) {
87                         *con->action = true;
88                 }
89         }
90 }
91
92 void C_ScanCodeUp(int code)
93 {
94         control_t *con;
95
96         for(con = controllist; con; con=con->next) {
97                 if(con->scancode == code) {
98                         *con->action = false;
99                 }
100         }
101
102 char *C_ScanToKey(int code)
103 {
104         control_t *con;
105
106         for(con = controllist;con;con=con->next)
107                 if (con->scancode == code)
108                         return con->name;
109         return NULL;
110 }