1 /* $Id: autosave.c,v 1.6 2005-02-26 10:13:51 chris Exp $ */
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
18 * Saves current mine to disk to prevent loss of work, and support undo.
23 static char rcsid[] = "$Id: autosave.c,v 1.6 2005-02-26 10:13:51 chris Exp $";
48 #define AUTOSAVE_PERIOD 5 // Number of minutes for timed autosave
51 int Autosave_numfiles;
56 int Timer_save_flag=0;
60 char undo_status[10][100];
62 void init_autosave(void) {
66 Autosave_numfiles = 0;
69 //MALLOC( undo_status, char *, 10 );
70 //for (i=0; i<10; i++)
71 // MALLOC( undo_status[i], char, 100 );
72 autosave_mine(mine_filename);
75 void close_autosave(void) {
79 for (i=0;i<Autosave_total;i++) {
81 MALLOC(delname, char, PATH_MAX);
83 strcpy ( delname, mine_filename );
85 if ( !strcmp(delname, "*.MIN") ) strcpy(delname, "TEMP.MIN");
87 ext = strstr(delname, ".MIN");
88 sprintf( ext, ".M%d", i );
93 //for (i = 0; i < 10; i++) d_free( undo_status[i] );
94 //d_free( undo_status );
98 void autosave_mine(char *name) {
103 MALLOC(savename, char, PATH_MAX);
106 strcpy ( savename, name );
108 if ( !strcmp(savename, "*.MIN") ) strcpy(savename, "TEMP.MIN");
110 ext = strstr(savename, ".MIN");
111 sprintf( ext, ".M%d", Autosave_count );
113 //mprintf( 0, "Autosave: %s\n", savename );
114 med_save_mine( savename );
116 if (undo_count > 0) undo_count--;
117 if (Autosave_count > 9) Autosave_count -= 10;
118 if (Autosave_numfiles < 10)
120 if (Autosave_total < 10)
130 void print_clock( int seconds, char message[10] ) {
136 if ((p = strchr(message, ':')) != NULL)
139 gr_set_current_canvas( NULL );
140 gr_set_fontcolor( CBLACK, CGREY );
141 gr_get_string_size( message, &w, &h, &aw );
142 gr_setcolor( CGREY );
143 gr_rect( 700, 0, 799, h+1 );
144 gr_string( 700, 0, message );
145 gr_set_fontcolor( CBLACK, CWHITE );
148 static char the_time[14]; // changed from 10, I don't think that was long enough
150 void clock_message( int seconds, char *format, ... ) {
153 va_start(ap, format);
154 vsprintf(the_time, format, ap);
157 print_clock(seconds, the_time);
161 struct tm Editor_time_of_day;
163 void set_editor_time_of_day()
168 Editor_time_of_day = *localtime( <ime );
171 void TimedAutosave(char *name)
173 int month,day,hour,minute,second;
175 month = (Editor_time_of_day.tm_mon) + 1;
176 day = Editor_time_of_day.tm_mday;
177 minute = Editor_time_of_day.tm_min;
178 hour = Editor_time_of_day.tm_hour;
179 second = Editor_time_of_day.tm_sec;
181 if (hour > 12) hour-=12;
183 if (second!=save_second) {
184 save_second = second;
185 clock_message(second, "%d/%d %d:%02d", month, day, hour, minute);
190 if (minute%AUTOSAVE_PERIOD != 0)
193 if ((minute%AUTOSAVE_PERIOD == 0) && (Timer_save_flag)) {
199 diagnostic_message("Mine Autosaved at %s\n", ctime(<ime));
210 //@@ char *loadname, *ext;
211 //@@ if (undo_count == 0) original = Autosave_count;
213 //@@ if (!Autosave_flag)
216 //@@ if (Autosave_numfiles > 1) {
218 //@@ MALLOC(loadname, char, PATH_MAX);
220 //@@ strcpy ( loadname, mine_filename );
221 //@@ strupr( loadname );
222 //@@ if ( !strcmp(loadname, "*.MIN") ) strcpy(loadname, "TEMP.MIN");
225 //@@ Autosave_count = original - undo_count;
226 //@@ if (Autosave_count < 0) Autosave_count = Autosave_count+10;
227 //@@ Autosave_numfiles--;
228 //@@ //mprintf(0, "u=%d a=%d o=%d num=%d\n", undo_count, Autosave_count, original, Autosave_numfiles);
230 //@@ ext = strstr(loadname, ".MIN");
231 //@@ if (Autosave_count == 0) sprintf( ext, ".M9" );
232 //@@ else sprintf( ext, ".M%d", Autosave_count-1 );
233 //@@ //mprintf( 0, "Loading: %s\n", loadname );
234 //@@ med_load_mine( loadname );
236 //@@ d_free(loadname);
240 //@@ //diagnostic_message("Can't undo\n");