home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_122 / 3.ddi / CHESS.ZIP / SAVEREST.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-10  |  3.4 KB  |  136 lines

  1. // ObjectWindows - (C) Copyright 1992 by Borland International
  2.  
  3. #include <windows.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <ctype.h>
  7.  
  8. #include "wcdefs.h"
  9. #include "externs.h"
  10.  
  11.  
  12. struct SAVERESTORE
  13. {
  14. COLORTYPE Player, Opponent, ProgramColor;
  15. BOOL Turned;
  16. BOOL MultiMove, AutoPlay, SingleStep;
  17. LEVELTYPE Level;
  18. double AverageTime;
  19. BOOL MaxLevel;
  20. int MoveNo;
  21. double ChessClockTotalTime, BlackTotalTime, WhiteTotalTime;
  22. int PieceValue[7];
  23. };
  24.  
  25.  
  26. static BOOL SaveBoard(char *savefile)
  27. {
  28.     FILE *gameboard;
  29.    SAVERESTORE *Save;
  30.  
  31.    Save = new SAVERESTORE;
  32.    if (Save == NULL)
  33.       {
  34.       MessageBox(hWndMain, "Not enough memory to perform operation",
  35.          "OWL Chess", MB_OK | MB_ICONHAND);
  36.       return 0;
  37.       }
  38.     if ((gameboard = fopen(savefile, "wb")) == NULL)
  39.     {
  40.         sprintf(buf, "Cannot open %s for writing", savefile);
  41.         MessageBox(hWndMain, buf, "OWL Chess", MB_OK | MB_ICONHAND);
  42.         delete Save;
  43.         return 0;
  44.     }
  45.  
  46.    Save->Player = Player;
  47.    Save->Opponent = Opponent;
  48.    Save->ProgramColor = ProgramColor;
  49.    Save->Turned = Turned;
  50.    Save->MultiMove = MultiMove;
  51.    Save->AutoPlay = AutoPlay;
  52.    Save->SingleStep = SingleStep;
  53.    Save->Level = Level;
  54.    Save->AverageTime = AverageTime;
  55.    Save->MaxLevel = MaxLevel;
  56.    Save->MoveNo = MoveNo;
  57.    Save->ChessClockTotalTime = ChessClock.totaltime;
  58.    Save->BlackTotalTime = ChessTime[black].totaltime;
  59.    Save->WhiteTotalTime = ChessTime[white].totaltime;
  60.    memcpy(Save->PieceValue, PieceValue, 7 * sizeof(int));
  61.    fwrite(Save, sizeof(SAVERESTORE), 1, gameboard);
  62.    fwrite(Board, sizeof(Board), 1, gameboard);
  63.    fclose(gameboard);
  64.    delete Save;
  65.    return 1;
  66. }
  67.  
  68.  
  69. void SaveGame(char *savefile)
  70. {
  71.     if (strlen(savefile) > 0)
  72.     {
  73.         if (!SaveBoard(savefile))
  74.         {
  75.             Error("Error during Save");
  76.         }
  77.     }
  78. }
  79.  
  80.  
  81. void LoadBoard(char *loadfile)
  82. {
  83.    FILE *load;
  84.    SAVERESTORE *Restore;
  85.  
  86.    Restore = new SAVERESTORE;
  87.  
  88.    if (!Restore)
  89.       {
  90.       MessageBox(hWndMain, "Not enough memory to perform operation",
  91.          "OWL Chess", MB_OK | MB_ICONHAND);
  92.       return;
  93.       }
  94.  
  95.     if ((load = fopen(loadfile, "rb")) == NULL)
  96.         Error("File not found");
  97.     else
  98.     {
  99.         fread(Restore, sizeof(SAVERESTORE), 1, load);
  100.         fread(Board, sizeof(Board), 1, load);
  101.         fclose(load);
  102.         Player = Restore->Player;
  103.         Opponent = Restore->Opponent;
  104.         ProgramColor = Restore->ProgramColor;
  105.         Turned = Restore->Turned;
  106.         MultiMove = Restore->MultiMove;
  107.         AutoPlay = Restore->AutoPlay;
  108.         SingleStep = Restore->SingleStep;
  109.         Level = Restore->Level;
  110.         AverageTime = Restore->AverageTime;
  111.         MaxLevel = Restore->MaxLevel;
  112.         MoveNo = Restore->MoveNo;
  113.         ChessClock.totaltime = Restore->ChessClockTotalTime;
  114.         ChessTime[black].totaltime = Restore->BlackTotalTime ;
  115.         ChessTime[white].totaltime = Restore->WhiteTotalTime;
  116.         memcpy(PieceValue, Restore->PieceValue, 7 * sizeof(int));
  117.         ClearDisplay();
  118.         InitDisplay();
  119.         InvalidateRect(hWndMain, NULL, TRUE);
  120.         PrintCurLevel();
  121.         ResetNewPos();
  122.     }
  123.    delete Restore;
  124. }
  125.  
  126. /****************************************************************************/
  127.  
  128. void RestoreGame(char *loadfile)
  129. {
  130.     if (strlen(loadfile))
  131.        LoadBoard(loadfile);
  132.     else
  133.       Error("Game not loaded");
  134. }
  135.  
  136.