/* * DoAutoSave - try to do autosave of current file */ void DoAutoSave( void ) { char path[FILENAME_MAX]; char path2[FILENAME_MAX]; char tmp[FILENAME_MAX]; bool quiet; FILE *f; vi_rc rc; status_type lastst; if( EditVars.AutoSaveInterval == 0 ) { return; } if( clock() < NextAutoSave ) { return; } if( CurrentFile == NULL ) { return; } if( CurrentFile->is_stdio || CurrentFile->viewonly || !CurrentFile->need_autosave ) { SetNextAutoSaveTime(); return; } MakeTmpPath( path, "" ); if( !CurrentFile->been_autosaved ) { getTmpName( path, CurrentFile->as_name ); } strcat( path, CurrentFile->as_name ); quiet = EditFlags.Quiet; EditFlags.Quiet = TRUE; lastst = UpdateCurrentStatus( CSTATUS_AUTOSAVE ); rc = SaveFile( path, -1, -1, TRUE ); EditFlags.Quiet = quiet; UpdateCurrentStatus( lastst ); if( rc != ERR_NO_ERR ) { SetNextAutoSaveTime(); return; } /* * update history file */ CurrentFile->need_autosave = FALSE; if( !CurrentFile->been_autosaved ) { GetCurrentFilePath( path2 ); CurrentFile->been_autosaved = TRUE; MakeTmpPath( tmp, checkFileName ); f = fopen( tmp, "a" ); if( f != NULL ) { MyFprintf( f, "%s %s\n", path, path2 ); fclose( f ); } } SetNextAutoSaveTime(); } /* DoAutoSave */
/* * IDEGetKeys - try to get keys from the IDE */ void IDEGetKeys( void ) { char buff[MAX_STR]; char path[FILENAME_MAX]; if( !EditFlags.UseIDE ) { return; } if( !VxDPutPending() ) { return; } VxDGet( buff, sizeof( buff ) ); KeyAddString( buff ); GetCurrentFilePath( path ); MySprintf( buff, "(%ld, %d) %s\r\n", CurrentLineNumber, CurrentColumn, path ); VxDPut( buff, strlen( buff ) + 1 ); VxDPut( TERMINATE_COMMAND_STR, sizeof( TERMINATE_COMMAND_STR ) ); } /* IDEGetKeys */
/* * RemoveFromAutoSaveList - take a file that we are quitting out of the list */ void RemoveFromAutoSaveList( void ) { FILE *f, *f2; char as_path[FILENAME_MAX]; char as2_path[FILENAME_MAX]; char path[FILENAME_MAX]; char path2[FILENAME_MAX]; char data[FILENAME_MAX]; // bool found; int i; if( EditVars.AutoSaveInterval == 0 ) { return; } if( CurrentFile == NULL ) { return; } if( !CurrentFile->been_autosaved ) { return; } MakeTmpPath( as_path, checkFileName ); MakeTmpPath( as2_path, checkFileTmpName ); GetCurrentFilePath( path ); // found = FALSE; f = fopen( as_path, "r" ); if( f == NULL ) { return; } f2 = fopen( as2_path, "w" ); if( f2 == NULL ) { fclose( f ); return; } while( fgets( path2, FILENAME_MAX, f ) != NULL ) { for( i = strlen( path2 ); i && isWSorCtrlZ( path2[i - 1] ); --i ) { path2[i - 1] = '\0'; } NextWord1( path2, data ); RemoveLeadingSpaces( path2 ); if( !strcmp( path, path2 ) ) { MakeTmpPath( path2, CurrentFile->as_name ); if( !strcmp( data, path2 ) ) { // found = TRUE; remove( path2 ); while( fgets( data, FILENAME_MAX, f ) != NULL ) { for( i = strlen( data ); i && isWSorCtrlZ( data[i - 1] ); --i ) { data[i - 1] = '\0'; } MyFprintf( f2, "%s\n", data ); } break; } } MyFprintf( f2, "%s %s\n", data, path2 ); } fclose( f ); fclose( f2 ); remove( as_path ); rename( as2_path, as_path ); } /* RemoveFromAutoSaveList */