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)20UINT8 hilo_getbyte (UINT8 *mem) 21 { 22 return mem[0]; 23 } 24 25 /** 26 * 27 */ hilo_getword(UINT8 * mem)28UINT16 hilo_getword (UINT8 *mem) 29 { 30 return ((UINT16)mem[0] << 8) + (mem[1]); 31 } 32 33 /** 34 * 35 */ hilo_getpword(UINT8 * mem)36UINT32 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)44UINT32 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)53UINT8 lohi_getbyte (UINT8 *mem) 54 { 55 return mem[0]; 56 } 57 58 /** 59 * 60 */ lohi_getword(UINT8 * mem)61UINT16 lohi_getword (UINT8 *mem) 62 { 63 return ((UINT16)mem[1] << 8) + (mem[0]); 64 } 65 66 /** 67 * 68 */ lohi_getpword(UINT8 * mem)69UINT32 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)77UINT32 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)87int 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)98void 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)112void 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)123void setvar (int var, int val) 124 { 125 game.vars[var] = val; 126 } 127 128 /** 129 * 130 */ getvar(int var)131int getvar (int var) 132 { 133 return game.vars[var]; 134 } 135 136 /** 137 * 138 */ decrypt(UINT8 * mem,int len)139void 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