diff options
author | 2007-12-17 15:19:59 +0000 | |
---|---|---|
committer | 2007-12-17 15:19:59 +0000 | |
commit | 7b77f1218624ea26dbb2efd85a19f795f5d4e02e (patch) | |
tree | 19209304095572b4fd61c2a2d6a5aa75c4e471ad /src/emu/inputseq.h | |
parent | 3da7f476068b3ffef713218ba2fc1bd5030f2c38 (diff) |
Initial checkin of MAME 0.121.mame0121
Diffstat (limited to 'src/emu/inputseq.h')
-rw-r--r-- | src/emu/inputseq.h | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/src/emu/inputseq.h b/src/emu/inputseq.h new file mode 100644 index 00000000000..748b0440e8d --- /dev/null +++ b/src/emu/inputseq.h @@ -0,0 +1,177 @@ +/*************************************************************************** + + inputseq.h + + Input sequence abstractions. + + Copyright (c) 1996-2007, Nicola Salmoria and the MAME Team. + Visit http://mamedev.org for licensing and usage restrictions. + +***************************************************************************/ + +#pragma once + +#ifndef __INPUTSEQ_H__ +#define __INPUTSEQ_H__ + +#include "input.h" + + +/*************************************************************************** + CONSTANTS +***************************************************************************/ + +/* additional expanded input codes for sequences */ +enum +{ + /* special codes */ + SEQCODE_END = INTERNAL_CODE(0), + SEQCODE_DEFAULT = INTERNAL_CODE(1), + SEQCODE_NOT = INTERNAL_CODE(2), + SEQCODE_OR = INTERNAL_CODE(3) +}; + + + +/*************************************************************************** + TYPE DEFINITIONS +***************************************************************************/ + +/* a sequence of inputs */ +typedef struct _input_seq input_seq; +struct _input_seq +{ + input_code code[16]; +}; + + + +/*************************************************************************** + MACROS +***************************************************************************/ + +#define SEQ_DEF_7(a,b,c,d,e,f,g) {{ a, b, c, d, e, f, g, SEQCODE_END }} +#define SEQ_DEF_6(a,b,c,d,e,f) {{ a, b, c, d, e, f, SEQCODE_END }} +#define SEQ_DEF_5(a,b,c,d,e) {{ a, b, c, d, e, SEQCODE_END }} +#define SEQ_DEF_4(a,b,c,d) {{ a, b, c, d, SEQCODE_END }} +#define SEQ_DEF_3(a,b,c) {{ a, b, c, SEQCODE_END }} +#define SEQ_DEF_2(a,b) {{ a, b, SEQCODE_END }} +#define SEQ_DEF_1(a) {{ a, SEQCODE_END }} +#define SEQ_DEF_0 {{ SEQCODE_END }} + + + +/*************************************************************************** + FUNCTION PROTOTYPES +***************************************************************************/ + + +/* ----- state queries ----- */ + +/* return TRUE if the given switch sequence has been pressed */ +int input_seq_pressed(const input_seq *seq); + +/* return the value of an axis sequence */ +INT32 input_seq_axis_value(const input_seq *seq, input_item_class *itemclass_ptr); + + + +/* ----- sequence polling ----- */ + +/* begin polling for a new sequence of the given itemclass */ +void input_seq_poll_start(input_item_class itemclass, const input_seq *startseq); + +/* continue polling for a sequence */ +int input_seq_poll(input_seq *finalseq); + + + +/* ----- strings and tokenization ----- */ + +/* generate the friendly name of an input sequence */ +astring *input_seq_name(astring *string, const input_seq *seq); + +/* convert an input sequence to tokens, returning the length */ +astring *input_seq_to_tokens(astring *string, const input_seq *seq); + +/* convert a set of tokens back to an input sequence */ +int input_seq_from_tokens(const char *string, input_seq *seq); + + + +/*************************************************************************** + INLINE FUNCTIONS +***************************************************************************/ + +/*------------------------------------------------- + input_seq_get_1 - fetch the first item of an + input sequence +-------------------------------------------------*/ + +INLINE input_code input_seq_get_1(const input_seq *seq) +{ + return seq->code[0]; +} + + +/*------------------------------------------------- + input_seq_set_n - set a sequence of n codes + as an input sequence +-------------------------------------------------*/ + +INLINE void input_seq_set_5(input_seq *seq, input_code code0, input_code code1, input_code code2, input_code code3, input_code code4) +{ + int codenum; + seq->code[0] = code0; + seq->code[1] = code1; + seq->code[2] = code2; + seq->code[3] = code3; + seq->code[4] = code4; + for (codenum = 5; codenum < ARRAY_LENGTH(seq->code); codenum++) + seq->code[codenum] = SEQCODE_END; +} + +INLINE void input_seq_set_4(input_seq *seq, input_code code0, input_code code1, input_code code2, input_code code3) +{ + input_seq_set_5(seq, code0, code1, code2, code3, SEQCODE_END); +} + +INLINE void input_seq_set_3(input_seq *seq, input_code code0, input_code code1, input_code code2) +{ + input_seq_set_5(seq, code0, code1, code2, SEQCODE_END, SEQCODE_END); +} + +INLINE void input_seq_set_2(input_seq *seq, input_code code0, input_code code1) +{ + input_seq_set_5(seq, code0, code1, SEQCODE_END, SEQCODE_END, SEQCODE_END); +} + +INLINE void input_seq_set_1(input_seq *seq, input_code code0) +{ + input_seq_set_5(seq, code0, SEQCODE_END, SEQCODE_END, SEQCODE_END, SEQCODE_END); +} + +INLINE void input_seq_set_0(input_seq *seq) +{ + input_seq_set_5(seq, SEQCODE_END, SEQCODE_END, SEQCODE_END, SEQCODE_END, SEQCODE_END); +} + + +/*------------------------------------------------- + input_seq_cmp - compare two input sequences +-------------------------------------------------*/ + +INLINE int input_seq_cmp(const input_seq *seqa, const input_seq *seqb) +{ + int codenum; + for (codenum = 0; codenum < ARRAY_LENGTH(seqa->code); codenum++) + { + if (seqa->code[codenum] != seqb->code[codenum]) + return -1; + if (seqa->code[codenum] == SEQCODE_END) + break; + } + return 0; +} + +#endif /* __INPUTSEQ_H__ */ |