cleanups, savestates, input (combos), menu
[fceu.git] / endian.c
1 /* FCE Ultra - NES/Famicom Emulator
2  *
3  * Copyright notice for this file:
4  *  Copyright (C) 2002 Ben Parnell
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; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 /*      Contains file I/O functions that write/read data    */
22 /*      LSB first.                                          */
23
24
25 #include <stdio.h>
26 #include "types.h"
27 #include "endian.h"
28
29 static uint8 s[4];
30
31 int write16(uint16 b, FILE *fp)
32 {
33  s[0]=b;
34  s[1]=b>>8;
35  return((fwrite(s,1,2,fp)<2)?0:2);
36 }
37
38 int write32(uint32 b, FILE *fp)
39 {
40  s[0]=b;
41  s[1]=b>>8;
42  s[2]=b>>16;
43  s[3]=b>>24;
44  return((fwrite(s,1,4,fp)<4)?0:4);
45 }
46
47 int read32(void *Bufo, FILE *fp)
48 {
49  uint32 buf;
50  if(fread(&buf,1,4,fp)<4)
51   return 0;
52  #ifdef LSB_FIRST
53  *(uint32*)Bufo=buf;
54  #else
55  *(uint32*)Bufo=((buf&0xFF)<<24)|((buf&0xFF00)<<8)|((buf&0xFF0000)>>8)|((buf&0xFF000000)>>24);
56  #endif
57  return 1;
58 }
59
60 int read16(char *d, FILE *fp)
61 {
62  #ifdef LSB_FIRST
63  return((fread(d,1,2,fp)<2)?0:2);
64  #else
65  int ret;
66  ret=fread(d+1,1,1,fp);
67  ret+=fread(d,1,1,fp);
68  return ret<2?0:2;
69  #endif
70 }
71