initial fce ultra 0.81 import
[fceu.git] / drivers / cli / sdl.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include "sdl.h"
6 #include "sdl-video.h"
7 #ifdef NETWORK
8 #include "unix-netplay.h"
9 #endif
10
11 DSETTINGS Settings;
12 CFGSTRUCT DriverConfig[]={
13         AC(_xscale),
14         AC(_yscale),
15         AC(_xscalefs),
16         AC(_yscalefs),
17         AC(_efx),
18         AC(_efxfs),
19         AC(_sound),
20         #ifdef DSPSOUND
21         AC(_f8bit),
22         #else
23         AC(_ebufsize),
24         AC(_lbufsize),
25         #endif
26         AC(_fullscreen),
27         AC(_xres),
28         AC(_yres),
29         ACA(joyBMap),
30         ACA(joyAMap),
31         ACA(joy),
32         //ACS(_fshack),
33         ENDCFGSTRUCT
34 };
35
36 //-fshack x       Set the environment variable SDL_VIDEODRIVER to \"x\" when
37 //                entering full screen mode and x is not \"0\".
38
39 char *DriverUsage=
40 "-xres   x       Set horizontal resolution to x for full screen mode.\n\
41 -yres   x       Set vertical resolution to x for full screen mode.\n\
42 -xscale(fs) x   Multiply width by x.\n\
43 -yscale(fs) x   Multiply height by x.\n\
44 -efx(fs) x      Enable scanlines effect if x is non zero.  yscale must be >=2\n\
45                 and preferably a multiple of 2.\n\
46 -fs      x      Select full screen mode if x is non zero.\n\
47 -joyx   y       Use joystick y as virtual joystick x.\n\
48 -sound x        Sound.\n\
49                  0 = Disabled.\n\
50                  Otherwise, x = playback rate.\n\
51 "
52 #ifdef DSPSOUND
53 "-f8bit x        Force 8-bit sound.\n\
54                  0 = Disabled.\n\
55                  1 = Enabled.\n\
56 "
57 #else
58 "-lbufsize x    Internal FCE Ultra sound buffer size. Size = 2^x samples.\n\
59 -ebufsize x     External SDL sound buffer size. Size = 2^x samples.\n\
60 "
61 #endif
62 "-connect s      Connect to server 's' for TCP/IP network play.\n\
63 -server         Be a host/server for TCP/IP network play.\n\
64 -netport x      Use TCP/IP port x for network play.";
65
66 static int docheckie[2]={0,0};
67 ARGPSTRUCT DriverArgs[]={
68          {"-joy1",0,&joy[0],0},{"-joy2",0,&joy[1],0},
69          {"-joy3",0,&joy[2],0},{"-joy4",0,&joy[3],0},
70          {"-xscale",0,&_xscale,0},
71          {"-yscale",0,&_yscale,0},
72          {"-efx",0,&_efx,0},
73          {"-xscalefs",0,&_xscalefs,0},
74          {"-yscalefs",0,&_yscalefs,0},
75          {"-efxfs",0,&_efxfs,0},
76          {"-xres",0,&_xres,0},
77          {"-yres",0,&_yres,0},
78          {"-fs",0,&_fullscreen,0},
79          //{"-fshack",0,&_fshack,0x4001},
80          {"-sound",0,&_sound,0},
81          #ifdef DSPSOUND
82          {"-f8bit",0,&_f8bit,0},
83          #else
84          {"-lbufsize",0,&_lbufsize,0},
85          {"-ebufsize",0,&_ebufsize,0},
86          #endif
87          #ifdef NETWORK
88          {"-connect",&docheckie[0],&netplayhost,0x4001},
89          {"-server",&docheckie[1],0,0},
90          {"-netport",0,&Port,0},
91          #endif
92          {0,0,0,0}
93 };
94
95 static void SetDefaults(void)
96 {
97  _xres=320;
98  _yres=240;
99  _fullscreen=0;
100  _sound=48000;
101  #ifdef DSPSOUND
102  _f8bit=0;
103  #else
104  _lbufsize=10;
105  _ebufsize=8;
106  #endif
107  _xscale=_yscale=_xscalefs=_yscalefs=1;
108  _efx=_efxfs=0;
109  //_fshack=_fshacksave=0;
110  memset(joy,0,sizeof(joy));
111 }
112
113 void DoDriverArgs(void)
114 {
115         int x;
116
117         #ifdef BROKEN
118         if(_fshack)
119         {
120          if(_fshack[0]=='0')
121           if(_fshack[1]==0)
122           {
123            free(_fshack);
124            _fshack=0;
125           }
126         }
127         #endif
128
129         #ifdef NETWORK
130         if(docheckie[0])
131          netplay=2;
132         else if(docheckie[1])
133          netplay=1;
134
135         if(netplay)
136          FCEUI_SetNetworkPlay(netplay);
137         #endif
138
139         for(x=0;x<4;x++)
140          if(!joy[x]) 
141          {
142           memset(joyBMap[x],0,sizeof(joyBMap[0]));
143           memset(joyAMap[x],0,sizeof(joyAMap[0]));
144          }
145 }
146 int InitMouse(void)
147 {
148  return(0);
149 }
150 void KillMouse(void){}
151 void GetMouseData(uint32 *d)
152 {
153  int x,y;
154  uint32 t;
155
156  t=SDL_GetMouseState(&x,&y);
157  d[2]=0;
158  if(t&SDL_BUTTON(1))
159   d[2]|=1;
160  if(t&SDL_BUTTON(3))
161   d[2]|=2;
162  t=PtoV(x,y); 
163  d[0]=t&0xFFFF;
164  d[1]=(t>>16)&0xFFFF;
165 }
166
167 int InitKeyboard(void)
168 {
169  return(1);
170 }
171
172 int UpdateKeyboard(void)
173 {
174  return(1);
175 }
176
177 void KillKeyboard(void)
178 {
179
180 }
181
182 char *GetKeyboard(void)
183 {
184  SDL_PumpEvents();
185  return(SDL_GetKeyState(0));
186 }
187 #include "unix-basedir.h"
188
189 int main(int argc, char *argv[])
190 {
191         puts("\nStarting FCE Ultra "VERSION_STRING"...\n");
192         if(SDL_Init(0))
193         {
194          printf("Could not initialize SDL: %s.\n", SDL_GetError());
195          return(-1);
196         }
197         SetDefaults();
198
199         #ifdef BROKEN
200         if(getenv("SDL_VIDEODRIVER"))
201         {
202          if((_fshacksave=malloc(strlen(getenv("SDL_VIDEODRIVER"))+1)))
203           strcpy(_fshacksave,getenv("SDL_VIDEODRIVER"));
204         }
205         else
206          _fshacksave=0;
207         #endif
208
209         {
210          int ret=CLImain(argc,argv);
211          SDL_Quit();
212          return(ret);
213         }
214 }
215