void CTable::Load() { int SavShowCards = 0; FILE* sav = fopen( GAMESDIR "/solitair.sav", "rb" ); if( sav == NULL ) return; fread( &SavShowCards, 1, sizeof( SavShowCards ), sav ); if( ( SavShowCards != 3 ) && ( SavShowCards != 1 ) ) { return; } ShowCards = SavShowCards; fread( &win_counter, 1, sizeof( win_counter ), sav ); CCard card; unsigned char CardsStored; CBuffer buffer; //Restore BLOCK block.RemoveAll(); fread( &CardsStored, 1, sizeof( CardsStored ), sav ); buffer.RemoveAll(); for( unsigned char i = 0; i < CardsStored; i++ ) { fread( &card, 1, sizeof( card ), sav ); buffer.PushCard( card, true ); } for( unsigned char i = 0; i < CardsStored; i++ ) { block.PushCard( buffer.PopCard(), true ); } //Restore Wastepile fread( &CardsStored, 1, sizeof( CardsStored ), sav ); buffer.RemoveAll(); for( unsigned char i = 0; i < CardsStored; i++ ) { fread( &card, 1, sizeof( card ), sav ); buffer.PushCard( card, true ); } for( unsigned char i = 0; i < CardsStored; i++ ) { wastepile.PushCard( buffer.PopCard(), true ); } //Restore HAND int HSource; fread( &HSource, 1, sizeof( HSource ), sav ); switch( HSource ) { case 0: hand.SetSource(NULL); break; case BLOCK: hand.SetSource(&block); break; case WASTEPILE: hand.SetSource(&wastepile); break; case FOUNDATION1: hand.SetSource(&foundation[0]); break; case FOUNDATION2: hand.SetSource(&foundation[1]); break; case FOUNDATION3: hand.SetSource(&foundation[2]); break; case FOUNDATION4: hand.SetSource(&foundation[3]); break; case TABLEAU1: hand.SetSource(&tableau[0]); break; case TABLEAU2: hand.SetSource(&tableau[1]); break; case TABLEAU3: hand.SetSource(&tableau[2]); break; case TABLEAU4: hand.SetSource(&tableau[3]); break; case TABLEAU5: hand.SetSource(&tableau[4]); break; case TABLEAU6: hand.SetSource(&tableau[5]); break; case TABLEAU7: hand.SetSource(&tableau[6]); break; } fread( &CardsStored, 1, sizeof( CardsStored ), sav ); buffer.RemoveAll(); for( unsigned char i = 0; i < CardsStored; i++ ) { fread( &card, 1, sizeof( card ), sav ); buffer.PushCard( card, true ); } for( unsigned char i = 0; i < CardsStored; i++ ) { hand.PushCard( buffer.PopCard(), true ); } //Restore Tableaus for( int j = 0; j < 7; j++ ) { fread( &CardsStored, 1, sizeof( CardsStored ), sav ); buffer.RemoveAll(); for( unsigned char i = 0; i < CardsStored; i++ ) { fread( &card, 1, sizeof( card ), sav ); buffer.PushCard( card, true ); } for( unsigned char i = 0; i < CardsStored; i++ ) { tableau[j].PushCard( buffer.PopCard(), true ); } } //Restore Foundations for( int j = 0; j < 4; j++ ) { fread( &CardsStored, 1, sizeof( CardsStored ), sav ); buffer.RemoveAll(); for( unsigned char i = 0; i < CardsStored; i++ ) { fread( &card, 1, sizeof( card ), sav ); buffer.PushCard( card, true ); } for( unsigned char i = 0; i < CardsStored; i++ ) { foundation[j].PushCard( buffer.PopCard(), true ); } } fclose( sav ); }