Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
298 | serge | 1 | // Emacs style mode select -*- C++ -*- |
2 | //----------------------------------------------------------------------------- |
||
3 | // |
||
4 | // $Id:$ |
||
5 | // |
||
6 | // Copyright (C) 1993-1996 by id Software, Inc. |
||
7 | // |
||
8 | // This source is available for distribution and/or modification |
||
9 | // only under the terms of the DOOM Source Code License as |
||
10 | // published by id Software. All rights reserved. |
||
11 | // |
||
12 | // The source is distributed in the hope that it will be useful, |
||
13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
14 | // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License |
||
15 | // for more details. |
||
16 | // |
||
17 | // $Log:$ |
||
18 | // |
||
19 | // DESCRIPTION: |
||
20 | // Cheat sequence checking. |
||
21 | // |
||
22 | //----------------------------------------------------------------------------- |
||
23 | |||
24 | |||
25 | static const char |
||
26 | rcsid[] = "$Id: m_cheat.c,v 1.1 1997/02/03 21:24:34 b1 Exp $"; |
||
27 | |||
28 | #include "m_cheat.h" |
||
29 | |||
30 | // |
||
31 | // CHEAT SEQUENCE PACKAGE |
||
32 | // |
||
33 | |||
34 | static int firsttime = 1; |
||
35 | static unsigned char cheat_xlate_table[256]; |
||
36 | |||
37 | |||
38 | // |
||
39 | // Called in st_stuff module, which handles the input. |
||
40 | // Returns a 1 if the cheat was successful, 0 if failed. |
||
41 | // |
||
42 | int |
||
43 | cht_CheckCheat |
||
44 | ( cheatseq_t* cht, |
||
45 | char key ) |
||
46 | { |
||
47 | int i; |
||
48 | int rc = 0; |
||
49 | |||
50 | if (firsttime) |
||
51 | { |
||
52 | firsttime = 0; |
||
53 | for (i=0;i<256;i++) cheat_xlate_table[i] = SCRAMBLE(i); |
||
54 | } |
||
55 | |||
56 | if (!cht->p) |
||
57 | cht->p = cht->sequence; // initialize if first time |
||
58 | |||
59 | if (*cht->p == 0) |
||
60 | *(cht->p++) = key; |
||
61 | else if |
||
62 | (cheat_xlate_table[(unsigned char)key] == *cht->p) cht->p++; |
||
63 | else |
||
64 | cht->p = cht->sequence; |
||
65 | |||
66 | if (*cht->p == 1) |
||
67 | cht->p++; |
||
68 | else if (*cht->p == 0xff) // end of sequence character |
||
69 | { |
||
70 | cht->p = cht->sequence; |
||
71 | rc = 1; |
||
72 | } |
||
73 | |||
74 | return rc; |
||
75 | } |
||
76 | |||
77 | void |
||
78 | cht_GetParam |
||
79 | ( cheatseq_t* cht, |
||
80 | char* buffer ) |
||
81 | { |
||
82 | |||
83 | unsigned char *p, c; |
||
84 | |||
85 | p = cht->sequence; |
||
86 | while (*(p++) != 1); |
||
87 | |||
88 | do |
||
89 | { |
||
90 | c = *p; |
||
91 | *(buffer++) = c; |
||
92 | *(p++) = 0; |
||
93 | } |
||
94 | while (c && *p!=0xff ); |
||
95 | |||
96 | if (*p==0xff) |
||
97 | *buffer = 0; |
||
98 | |||
99 | }256;i++)> |
||
100 |