2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
14 * $Source: /cvs/cvsroot/d2x/main/editor/autosave.c,v $
17 * $Date: 2004-12-19 13:54:27 $
20 * Saves current mine to disk to prevent loss of work, and support undo.
22 * $Log: not supported by cvs2svn $
23 * Revision 1.1.1.1 1999/06/14 22:02:47 donut
24 * Import of d1x 1.37 source.
26 * Revision 2.0 1995/02/27 11:34:53 john
27 * Version 2.0! No anonymous unions, Watcom 10.0, with no need
30 * Revision 1.25 1994/11/19 00:04:40 john
31 * Changed some shorts to ints.
33 * Revision 1.24 1994/11/17 11:38:59 matt
34 * Ripped out code to load old mines
36 * Revision 1.23 1994/07/28 17:00:01 mike
37 * fix diagnostic_message erasing.
39 * Revision 1.22 1994/07/21 12:48:28 mike
40 * Make time of day a global, fix clock so it doesn't show 10:2 instead of 10:02
42 * Revision 1.21 1994/05/14 17:17:58 matt
43 * Got rid of externs in source (non-header) files
45 * Revision 1.20 1994/05/02 18:04:14 yuan
48 * Revision 1.19 1994/05/02 17:59:04 yuan
49 * Changed undo_status into an array rather than malloced pointers.
51 * Revision 1.18 1994/03/16 09:55:48 mike
54 * Revision 1.17 1994/02/11 10:27:36 matt
55 * Changed 'if !DEMO' to 'ifndef DEMO'
57 * Revision 1.16 1994/02/08 12:43:18 yuan
58 * Crippled save game function from demo version
60 * Revision 1.15 1994/02/01 13:27:26 yuan
61 * autosave default off.
63 * Revision 1.14 1994/01/05 09:57:37 yuan
64 * Fixed calendar/clock problem.
66 * Revision 1.13 1993/12/17 16:09:59 yuan
67 * Changed clock font from Red to Black.
69 * Revision 1.12 1993/12/15 13:08:38 yuan
70 * Fixed :0x times, so that the 0 shows up.
72 * Revision 1.11 1993/12/15 11:19:52 yuan
73 * Added code to display clock in upper right.
75 * Revision 1.10 1993/12/14 21:18:51 yuan
76 * Added diagnostic message to display
78 * Revision 1.9 1993/12/14 18:32:59 yuan
79 * Added timed autosave code
81 * Revision 1.8 1993/12/13 17:23:25 yuan
82 * Fixed bugs with undo.
83 * They were caused by badly changed extensions.
85 * Revision 1.7 1993/12/09 16:42:32 yuan
86 * Changed extension of temp mines from .mi? -> .mn?
87 * and now to .m? (So it doesn't interfere with .mnu)
89 * Revision 1.6 1993/12/09 16:27:06 yuan
90 * Added toggle for autosave
92 * Revision 1.5 1993/11/29 19:46:32 matt
95 * Revision 1.4 1993/11/11 15:54:11 yuan
96 * Added display message for Undo...
97 * Eg. Attach Segment UNDONE.
99 * Revision 1.3 1993/11/09 18:53:11 yuan
100 * Autosave/Undo works up to 10 moves.
102 * Revision 1.2 1993/11/08 19:14:03 yuan
103 * Added Undo command (not working yet)
105 * Revision 1.1 1993/11/08 16:57:59 yuan
113 static char rcsid[] = "$Id: autosave.c,v 1.1 2004-12-19 13:54:27 btb Exp $";
134 #define AUTOSAVE_PERIOD 5 // Number of minutes for timed autosave
137 int Autosave_numfiles;
142 int Timer_save_flag=0;
146 char undo_status[10][100];
148 void init_autosave(void) {
152 Autosave_numfiles = 0;
155 //MALLOC( undo_status, char *, 10 );
156 //for (i=0; i<10; i++)
157 // MALLOC( undo_status[i], char, 100 );
158 autosave_mine(mine_filename);
161 void close_autosave(void) {
165 for (i=0;i<Autosave_total;i++) {
167 MALLOC(delname, char, 128);
169 strcpy ( delname, mine_filename );
171 if ( !strcmp(delname, "*.MIN") ) strcpy(delname, "TEMP.MIN");
173 ext = strstr(delname, ".MIN");
174 sprintf( ext, ".M%d", i );
179 //for (i=0;i<10;i++) free( undo_status[i] );
180 //free( undo_status );
184 void autosave_mine(char *name) {
185 char *savename, *ext;
189 MALLOC(savename, char, 128);
192 strcpy ( savename, name );
194 if ( !strcmp(savename, "*.MIN") ) strcpy(savename, "TEMP.MIN");
196 ext = strstr(savename, ".MIN");
197 sprintf( ext, ".M%d", Autosave_count );
199 //mprintf( 0, "Autosave: %s\n", savename );
200 med_save_mine( savename );
202 if (undo_count > 0) undo_count--;
203 if (Autosave_count > 9) Autosave_count -= 10;
204 if (Autosave_numfiles < 10)
206 if (Autosave_total < 10)
216 void print_clock( int seconds, char message[10] ) {
222 if ((p = strchr(message, ':')) != NULL)
225 gr_set_current_canvas( NULL );
226 gr_set_fontcolor( CBLACK, CGREY );
227 gr_get_string_size( message, &w, &h, &aw );
228 gr_setcolor( CGREY );
229 gr_rect( 700, 0, 799, h+1 );
230 gr_string( 700, 0, message );
231 gr_set_fontcolor( CBLACK, CWHITE );
234 static char the_time[14]; // changed from 10, I don't think that was long enough
236 void clock_message( int seconds, char *format, ... ) {
239 va_start(ap, format);
240 vsprintf(the_time, format, ap);
243 print_clock(seconds, the_time);
247 struct tm Editor_time_of_day;
249 void set_editor_time_of_day()
254 Editor_time_of_day = *localtime( <ime );
257 void TimedAutosave(char *name)
259 int month,day,hour,minute,second;
261 month = (Editor_time_of_day.tm_mon) + 1;
262 day = Editor_time_of_day.tm_mday;
263 minute = Editor_time_of_day.tm_min;
264 hour = Editor_time_of_day.tm_hour;
265 second = Editor_time_of_day.tm_sec;
267 if (hour > 12) hour-=12;
269 if (second!=save_second) {
270 save_second = second;
271 clock_message(second, "%d/%d %d:%02d", month, day, hour, minute);
276 if (minute%AUTOSAVE_PERIOD != 0)
279 if ((minute%AUTOSAVE_PERIOD == 0) && (Timer_save_flag)) {
285 diagnostic_message("Mine Autosaved at %s\n", ctime(<ime));
296 //@@ char *loadname, *ext;
297 //@@ if (undo_count == 0) original = Autosave_count;
299 //@@ if (!Autosave_flag)
302 //@@ if (Autosave_numfiles > 1) {
304 //@@ MALLOC(loadname, char, 128);
306 //@@ strcpy ( loadname, mine_filename );
307 //@@ strupr( loadname );
308 //@@ if ( !strcmp(loadname, "*.MIN") ) strcpy(loadname, "TEMP.MIN");
311 //@@ Autosave_count = original - undo_count;
312 //@@ if (Autosave_count < 0) Autosave_count = Autosave_count+10;
313 //@@ Autosave_numfiles--;
314 //@@ //mprintf(0, "u=%d a=%d o=%d num=%d\n", undo_count, Autosave_count, original, Autosave_numfiles);
316 //@@ ext = strstr(loadname, ".MIN");
317 //@@ if (Autosave_count == 0) sprintf( ext, ".M9" );
318 //@@ else sprintf( ext, ".M%d", Autosave_count-1 );
319 //@@ //mprintf( 0, "Loading: %s\n", loadname );
320 //@@ med_load_mine( loadname );
326 //@@ //diagnostic_message("Can't undo\n");