1 /*  Sarien - A Sierra AGI resource interpreter engine
2  *  Copyright (C) 1999-2001 Stuart George and Claudio Matsuoka
3  *
4  *  $Id: global.c,v 1.20 2001/06/17 12:59:54 cmatsuoka Exp $
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; see docs/COPYING for further details.
9  */
10 
11 #include <stdio.h>
12 #include <string.h>
13 #include <limits.h>
14 #include "sarien.h"
15 #include "agi.h"
16 
17 /**
18  *
19  */
hilo_getbyte(UINT8 * mem)20 UINT8 hilo_getbyte (UINT8 *mem)
21 {
22 	return mem[0];
23 }
24 
25 /**
26  *
27  */
hilo_getword(UINT8 * mem)28 UINT16 hilo_getword (UINT8 *mem)
29 {
30 	return ((UINT16)mem[0] << 8) + (mem[1]);
31 }
32 
33 /**
34  *
35  */
hilo_getpword(UINT8 * mem)36 UINT32 hilo_getpword (UINT8 *mem)
37 {
38 	return ((UINT32)mem[0] << 16) + ((UINT32)mem[1] << 8) + (mem[2]);
39 }
40 
41 /**
42  *
43  */
hilo_getdword(UINT8 * mem)44 UINT32 hilo_getdword (UINT8 *mem)
45 {
46 	return ((UINT32)mem[0] << 24) + ((UINT32)mem[1] << 16) +
47 		((UINT32)mem[2] << 8) + (mem[3]);
48 }
49 
50 /**
51  *
52  */
lohi_getbyte(UINT8 * mem)53 UINT8 lohi_getbyte (UINT8 *mem)
54 {
55 	return mem[0];
56 }
57 
58 /**
59  *
60  */
lohi_getword(UINT8 * mem)61 UINT16 lohi_getword (UINT8 *mem)
62 {
63 	return ((UINT16)mem[1] << 8) + (mem[0]);
64 }
65 
66 /**
67  *
68  */
lohi_getpword(UINT8 * mem)69 UINT32 lohi_getpword (UINT8 *mem)
70 {
71 	return ((UINT32)mem[2] << 16) + ((UINT32)mem[1] << 8) + (mem[0]);
72 }
73 
74 /**
75  *
76  */
lohi_getdword(UINT8 * mem)77 UINT32 lohi_getdword (UINT8 *mem)
78 {
79 	return ((UINT32)mem[3] << 24) + ((UINT32)mem[2] << 16) +
80 		((UINT32)mem[1] << 8) + (mem[0]);
81 
82 }
83 
84 /**
85  *
86  */
getflag(int n)87 int getflag (int n)
88 {
89 	UINT8 *set = (UINT8 *)&game.flags;
90 
91 	set += n >> 3;
92 	return (*set & (1 << (n & 0x07))) != 0;
93 }
94 
95 /**
96  *
97  */
setflag(int n,int v)98 void setflag (int n, int v)
99 {
100 	UINT8 *set = (UINT8 *)&game.flags;
101 
102 	set += n >> 3;
103 	if (v)
104 		*set |= 1 << (n & 0x07);		/* set bit  */
105 	else
106 		*set &= ~(1 << (n & 0x07));		/* clear bit */
107 }
108 
109 /**
110  *
111  */
flipflag(int n)112 void flipflag (int n)
113 {
114 	UINT8 *set = (UINT8 *)&game.flags;
115 
116 	set += n >> 3;
117 	*set ^= 1 << (n & 0x07);			/* flip bit */
118 }
119 
120 /**
121  *
122  */
setvar(int var,int val)123 void setvar (int var, int val)
124 {
125 	game.vars[var] = val;
126 }
127 
128 /**
129  *
130  */
getvar(int var)131 int getvar (int var)
132 {
133 	return game.vars[var];
134 }
135 
136 /**
137  *
138  */
decrypt(UINT8 * mem,int len)139 void decrypt (UINT8 *mem, int len)
140 {
141 	UINT8 *key;
142 	int i;
143 
144 	key = opt.agds ? (UINT8*)CRYPT_KEY_AGDS : (UINT8*)CRYPT_KEY_SIERRA;
145 
146 	for (i = 0; i < len; i++)
147 		*(mem + i) ^= *(key + (i % 11));
148 }
149 
150 /* end: global.c */
151 
152