/* Copyright (C) 2006-2009 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the this software. If not, see . */ #include "readwrite.h" #include "types.h" int read8le(uint8_t *Bufo, EMUFILE *is) { if (is->_fread(Bufo, 1) != 1) return 0; return 1; } int read32le(uint32_t *Bufo, EMUFILE *fp) { uint32_t buf; if (fp->_fread(&buf, 4) < 4) return 0; #ifdef LOCAL_LE *Bufo = buf; #else *Bufo = ((buf & 0xFF) << 24) | ((buf & 0xFF00) << 8) | ((buf & 0xFF0000) >> 8) | ((buf & 0xFF000000) >> 24); #endif return 1; } int read16le(uint16_t *Bufo, EMUFILE *is) { uint16_t buf; if (is->_fread(&buf, 2) != 2) return 0; #ifdef LOCAL_LE *Bufo = buf; #else *Bufo = LE_TO_LOCAL_16(buf); #endif return 1; } int read64le(uint64_t *Bufo, EMUFILE *is) { uint64_t buf; if (is->_fread(&buf, 8) != 8) return 0; #ifdef LOCAL_LE *Bufo = buf; #else *Bufo = LE_TO_LOCAL_64(buf); #endif return 1; } int readbool(bool *b, EMUFILE *is) { uint32_t temp = 0; int ret = read32le(&temp, is); *b = !!temp; return ret; } int readbuffer(std::vector &vec, EMUFILE *is) { uint32_t size; if (read32le(&size, is) != 1) return 0; vec.resize(size); if (size > 0) is->fread(&vec[0], size); return 1; }