home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR2 / CBUFF09.ZIP / SRC.ZIP / ERROR.C < prev    next >
C/C++ Source or Header  |  1993-11-16  |  5KB  |  181 lines

  1. /*  $Id$
  2.  *  
  3.  *  File    error.c
  4.  *  Part of    ChessBase utilities file format (CBUFF)
  5.  *  Author    Anjo Anjewierden, anjo@swi.psy.uva.nl
  6.  *  Purpose    Error handling and reporting
  7.  *  Works with    GNU CC 2.4.5
  8.  *  
  9.  *  Notice    Copyright (c) 1993  Anjo Anjewierden
  10.  *  
  11.  *  History    10/10/93  (Created)
  12.  *          17/10/93  (Last modified)
  13.  */ 
  14.  
  15.  
  16. /*------------------------------------------------------------
  17.  *  Directives
  18.  *------------------------------------------------------------*/
  19.  
  20. #include "cbuff.h"
  21.  
  22.  
  23. int        errorCode;
  24. CBase        errorCBase;
  25. CbHeader    errorCBHeader;
  26. CbGame        errorCBGame;
  27. Game        errorGame;
  28. long        errorGameNumber;
  29.  
  30. char        errorName[256];
  31. int        errorInt;
  32.  
  33.  
  34. /*------------------------------------------------------------
  35.  *  Functions
  36.  *------------------------------------------------------------*/
  37.  
  38. void
  39. clearError()
  40. { errorCode = 0;
  41. }
  42.  
  43.  
  44. void
  45. setError(int code)
  46. { errorCode = code;
  47. }
  48.  
  49.  
  50. void
  51. setNameError(char *s)
  52. { strcpy(errorName, s);
  53. }
  54.  
  55.  
  56. void
  57. setIntError(int i)
  58. { errorInt = i;
  59. }
  60.  
  61.  
  62. void
  63. environmentError(CBase cb, Game game, long n)
  64. { errorCBase = cb;
  65.   errorGame = game;
  66.   errorGameNumber = n;
  67. }
  68.  
  69.  
  70. bool
  71. foundError()
  72. { if (errorCode)
  73.     return TRUE;
  74.   return FALSE;
  75. }
  76.  
  77.  
  78. void
  79. reportError(FILE *fd)
  80. { int code = errorCode;
  81.  
  82.   clearError();
  83.   switch(code)
  84.   { case ERR_INCORRECT_CHECKSUM:
  85.       fprintf(fd, "\nGame %6ld: [%3d] Incorrect checksum (alien data)",
  86.           errorGameNumber, code);
  87.       return;
  88.     case ERR_COULD_NOT_CREATE_FILE:
  89.       fprintf(fd, "\nFatal [%3d]: Could not create file (%s)",
  90.           code, errorName);
  91.       exit(1);
  92.       return;
  93.     case ERR_COULD_NOT_OVERWRITE_FILE:
  94.       fprintf(fd, "\nFatal [%3d]: Could not overwrite existing file (%s)",
  95.           code, errorName);
  96.       exit(1);
  97.       return;
  98.     case ERR_COULD_NOT_OPEN_WRITE:
  99.       fprintf(fd, "\nFatal [%3d]: Could not open file for writing (%s)",
  100.           code, errorName);
  101.       exit(1);
  102.       return;
  103.     case ERR_COULD_NOT_OPEN_READ:
  104.       fprintf(fd, "\nFatal [%3d]: Could not open file for reading (%s)",
  105.           code, errorName);
  106.       exit(1);
  107.       return;
  108.     case ERR_GAME_NUMBER_OUT_OF_RANGE:
  109.       fprintf(fd, "\nGame %6ld: [%3d] Game number out of range (%ld in base)",
  110.           errorGameNumber, code, errorCBase->noGames);
  111.       return;
  112.     case ERR_CANNOT_SEEK:
  113.     case ERR_CANNOT_READ_HEADER:
  114.     case ERR_CANNOT_READ_TEXT:
  115.     case ERR_CANNOT_READ_MOVES:
  116.     case ERR_CANNOT_READ_COMMENTS:
  117.     case ERR_CANNOT_READ_POSITION:
  118.     case ERR_CANNOT_READ_MOVE_NUMBER:
  119.       fprintf(fd, "\nGame %6ld: [%3d] Could not extract game header (data error)",
  120.           errorGameNumber, code);
  121.       return;
  122.     case ERR_UNEXPECTED_EOF:
  123.       fprintf(fd, "\nFatal [%3d]: Unexpected end-of-file",
  124.           code);
  125.       exit(1);
  126.       return;
  127.     case ERR_ILLEGAL_RESULT:
  128.       fprintf(fd, "\nGame %6ld: [%3d] Illegal result in game",
  129.           errorGameNumber, code);
  130.       return;
  131.     case ERR_VARIATION_SEEN:
  132.       fprintf(fd, "\nGame %6ld: [%3d] Variation seen that should not be there",
  133.           errorGameNumber, code);
  134.       return;
  135.     case ERR_CANNOT_INTERPRET_MOVE:
  136.       fprintf(fd, "\nGame %6ld: [%3d] Cannot interpret all moves of the game (data error)",
  137.           errorGameNumber, code);
  138.       return;
  139.     case ERR_MOVE_COUNT_INCORRECT:
  140.       fprintf(fd, "\nGame %6ld: [%3d] Incorrect move count in game",
  141.           errorGameNumber, code);
  142.       return;
  143.     case ERR_COMMENT_NOT_TERMINATED:
  144.       fprintf(fd, "\nGame %6ld: [%3d] Comment not properly terminated",
  145.           errorGameNumber, code);
  146.       return;
  147.     case ERR_FORMAT_ERROR_ANNOTATIONS:
  148.       fprintf(fd, "\nGame %6ld: [%3d] Format error in annotations",
  149.           errorGameNumber, code);
  150.       return;
  151.     case ERR_UNKNOWN_MOVE_EVALUATION:
  152.       fprintf(fd, "\nGame %6ld: [%3d] Unknown move evalution",
  153.           errorGameNumber, code);
  154.       return;
  155.     case ERR_UNKNOWN_POSITION_EVALUATION:
  156.       fprintf(fd, "\nGame %6ld: [%3d] Unknown position evaluation",
  157.           errorGameNumber, code);
  158.       return;
  159.     case ERR_UNKNOWN_EXTRA_EVALUATION:
  160.       fprintf(fd, "\nGame %6ld: [%3d] Unknown additional evaluation",
  161.           errorGameNumber, code);
  162.       return;
  163.     case ERR_UNKNOWN_CHARACTER:
  164.       fprintf(fd, "\nGame %6ld: [%3d] Unknown character in name ``%s''",
  165.           errorGameNumber, code, errorName);
  166.       return;
  167.     case ERR_UNKNOWN_PIECE:
  168.       fprintf(fd, "\nGame %6ld: [%3d] Unknown piece (internal error)",
  169.           errorGameNumber, code);
  170.       return;
  171.     case ERR_UNKNOWN_SYMBOL:
  172.       fprintf(fd, "\nGame %6ld: [%3d] Unknown symbol (ASCII octal %o)",
  173.           errorGameNumber, code, errorInt);
  174.       return;
  175.     default:
  176.       fprintf(fd, "\n** Internal error: Incorrect error code (%d)",
  177.           code);
  178.       return;
  179.   }
  180. }
  181.