Prepare new maemo release
[maemo-rb.git] / apps / plugins / doom / m_cheat.c
blobe46111293f0b50106575202549e60d0c81752a26
1 // Emacs style mode select -*- C++ -*-
2 //-----------------------------------------------------------------------------
3 //
4 // $Id$
5 //
6 // Copyright (C) 1993-1996 by id Software, Inc.
7 //
8 // This program is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU General Public License
10 // as published by the Free Software Foundation; either version 2
11 // of the License, or (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // $Log$
19 // Revision 1.1 2006/03/28 15:44:01 dave
20 // Patch #2969 - Doom! Currently only working on the H300.
23 // DESCRIPTION:
24 // Cheat sequence checking.
26 //-----------------------------------------------------------------------------
28 #include "m_cheat.h"
31 // CHEAT SEQUENCE PACKAGE
34 static int firsttime = 1;
35 static unsigned char cheat_xlate_table[256];
39 // Called in st_stuff module, which handles the input.
40 // Returns a 1 if the cheat was successful, 0 if failed.
42 int
43 cht_CheckCheat
44 ( cheatseq_t* cht,
45 char key )
47 int i;
48 int rc = 0;
50 if (firsttime)
52 firsttime = 0;
53 for (i=0;i<256;i++)
54 cheat_xlate_table[i] = SCRAMBLE(i);
57 if (!cht->p)
58 cht->p = cht->sequence; // initialize if first time
60 if (*cht->p == 0)
61 *(cht->p++) = key;
62 else if
63 (cheat_xlate_table[(unsigned char)key] == *cht->p)
64 cht->p++;
65 else
66 cht->p = cht->sequence;
68 if (*cht->p == 1)
69 cht->p++;
70 else if (*cht->p == 0xff) // end of sequence character
72 cht->p = cht->sequence;
73 rc = 1;
76 return rc;
79 void
80 cht_GetParam
81 ( cheatseq_t* cht,
82 char* buffer )
85 unsigned char *p, c;
87 p = cht->sequence;
88 while (*(p++) != 1)
93 c = *p;
94 *(buffer++) = c;
95 *(p++) = 0;
97 while (c && *p!=0xff );
99 if (*p==0xff)
100 *buffer = 0;