1 /***********************************************************
2 *                      K O U L E S                         *
3 *----------------------------------------------------------*
4 *  C1995 JAHUSOFT                                          *
5 *        Jan Hubicka                                       *
6 *        Dukelskych Bojovniku 1944                         *
7 *        390 03 Tabor                                      *
8 *        Czech Republic                                    *
9 *        Phone: 0041-361-32613                             *
10 *        eMail: hubicka@limax.paru.cas.cz                  *
11 *----------------------------------------------------------*
12 *   Copyright(c)1995,1996 by Jan Hubicka.See README for    *
13 *                     licence  details.                    *
14 *----------------------------------------------------------*
15 *  rcfiles.c saving and loading of rc files                *
16 ***********************************************************/
17 /* Changes for OS/2 Warp with Dive.                        *
18  *  Copyright(c)1996 by Thomas A. K. Kjaer                 *
19  ***********************************************************/
20 /* Changes for joystick "accelerate by deflection"         *
21  *  (c) 1997 by Ludvik Tesar (Ludv\'{\i}k Tesa\v{r})       *
22  ************************LT*********************************/
23 #include "koules.h"
24 #ifdef XSUPPORT
25 static CONST char *name = ".xkoules-controls";
26 #else
27 #ifdef OS2DIVE
28 static CONST char *name = "koules.cfg";
29 #else
30 static CONST char *name = ".koules.svga-controls";
31 #endif
32 #endif
33 
34 #ifdef OS2DIVE
35 static CONST char *levelsname = "koules.lev";
36 #else
37 static CONST char *levelsname = ".koules-levels";
38 #endif
mygetenv(char * name)39 static char * mygetenv(char *name)
40 {
41   static char name1[200];
42   char *var=getenv(name);
43   int i=strlen(var);
44   if(i>199) i=199;
45   memcpy(name1,var,i+1);
46   name1[199]=0;
47   return name1;
48 }
49 
50 void
save_rc()51 save_rc ()
52 {
53   FILE           *controls, *levels;
54   int             zeros[] =
55   {0, 0, 0, 0, 0, 0, 0, 0};
56   char            fullname[256];
57 #ifdef NETSUPPORT
58   if (client || server)
59     return;
60 #endif
61 #ifdef OS2DIVE
62   sprintf (fullname, "%s", name);
63 #else
64   sprintf (fullname, "%s/%s", mygetenv ("HOME"), name);
65 #endif
66   if ((controls = fopen (fullname, "w")) == NULL)
67     {
68       printf ("could not open save file:%s\n"
69 	      "saving of controls skippen\n", fullname);
70       perror ("error");
71       return;
72     }
73   fwrite (keys, 1, sizeof (keys), controls);	/*save user defined keys */
74 #ifdef MOUSE
75   fwrite (&mouseplayer, 1, sizeof (int), controls);	/*save mouseplayer */
76 #else
77   fwrite (zeros, 1, sizeof (int), controls);
78 #endif
79 #ifdef JOYSTICK
80   fwrite (joystickplayer, 1, sizeof (joystickplayer), controls);
81 #else
82   fwrite (zeros, 2, sizeof (int), controls);
83 #endif
84   fwrite (rotation, 1, sizeof (rotation), controls);
85 #ifdef JOYSTICK
86   fwrite (joystickmul, 1, sizeof (joystickmul), controls);
87 #else
88   fwrite (zeros, 2, sizeof (float), controls);
89 #endif
90   fclose (controls);
91 #ifdef OS2DIVE
92   sprintf (fullname, "%s", levelsname);
93 #else
94   sprintf (fullname, "%s/%s", mygetenv ("HOME"), levelsname);
95 #endif
96   if ((levels = fopen (fullname, "w")) == NULL)
97     {
98       printf ("could not open save file:%s\n"
99 	      "saving of controls skippen\n", fullname);
100       perror ("error");
101       return;
102     }
103   fwrite (&maxlevel, 1, sizeof (int), levels);
104   fwrite (&lastlevel, 1, sizeof (int), levels);
105   fwrite (&nrockets, 1, sizeof (int), levels);
106   fwrite (&gameplan, 1, sizeof (int), levels);
107   fwrite (&difficulty, 1, sizeof (int), levels);
108   fclose (levels);
109 }
110 
111 
112 void
load_rc()113 load_rc ()
114 {
115   FILE           *controls, *levels;
116   int             dummy[8];
117   char            fullname[256];
118 #ifdef NETSUPPORT
119   if (client || server)
120     return;
121 #endif
122 #ifdef OS2DIVE
123   sprintf (fullname, "%s", name);
124 #else
125   sprintf (fullname, "%s/%s", mygetenv ("HOME"), name);
126 #endif
127   if ((controls = fopen (fullname, "r")) == NULL)
128     {
129       printf ("could not open save file:%s\n"
130 	      "using default values\n", fullname);
131       perror ("error");
132       goto skip;
133     }
134   fread (keys, 1, sizeof (keys), controls);	/*save user defined keys */
135 #ifdef MOUSE
136   if(!fread (&mouseplayer, 1, sizeof (int), controls)) mouseplayer=-1;	/*save mouseplayer */
137 #else
138   fread (dummy, 1, sizeof (int), controls);
139 #endif
140 #ifdef JOYSTICK
141   if(!fread (joystickplayer, 1, sizeof (joystickplayer), controls)) joystickplayer[0]=joystickplayer[1]=-1;
142 #else
143   fread (dummy, 2, sizeof (int), controls);
144 #endif
145   fread (rotation, 1, sizeof (rotation), controls);
146 #ifdef JOYSTICK
147   fread (joystickmul, 1, sizeof (joystickmul), controls);
148 #else
149   fread (dummy, 2, sizeof (float), controls);
150 #endif
151   fclose (controls);
152 skip:;
153 #ifdef OS2DIVE
154   sprintf (fullname, "%s", levelsname);
155 #else
156   sprintf (fullname, "%s/%s", mygetenv ("HOME"), levelsname);
157 #endif
158   if ((levels = fopen (fullname, "r")) == NULL)
159     {
160       printf ("could not open save file:%s\n"
161 	      "using default values\n", fullname);
162       perror ("error");
163       return;
164     }
165 
166   fread (&maxlevel, 1, sizeof (int), levels);
167   fread (&lastlevel, 1, sizeof (int), levels);
168   if(maxlevel>=100||maxlevel<0) maxlevel=0;
169   if(lastlevel>maxlevel||lastlevel<0) lastlevel=0;
170   fread (&nrockets, 1, sizeof (int), levels);
171   if(nrockets<1) nrockets=1;
172   if(nrockets>4) nrockets=1;
173   if (fread (&gameplan, 1, sizeof (int), levels) != sizeof (int))
174                     gameplan = COOPERATIVE;
175   if(gameplan<0||gameplan>1) gameplan=COOPERATIVE;
176   if (fread (&difficulty, 1, sizeof (int), levels) != sizeof (int))
177                     difficulty = 2;
178   if(difficulty<0||difficulty>4) difficulty=COOPERATIVE;
179   fclose (levels);
180 }
181