home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / i / iritsm3s.zip / cagd_lib / cagdread.c < prev    next >
C/C++ Source or Header  |  1991-05-18  |  4KB  |  134 lines

  1. /******************************************************************************
  2. * CagdRead.c - Generic Curve/Surface reading from files.              *
  3. *******************************************************************************
  4. * Written by Gershon Elber, July. 90.                          *
  5. ******************************************************************************/
  6.  
  7. #include "cagd_loc.h"
  8.  
  9. /*****************************************************************************
  10. * Generic routine to read curve(s) from the given file.                 *
  11. *****************************************************************************/
  12. CagdCrvStruct *CagdCrvReadFromFile(char *FileName, char **ErrStr, int *Line)
  13. {
  14.     FILE *f;
  15.     TokenNumType Token;
  16.     char StringToken[LINE_LEN];
  17.  
  18.     if ((f = fopen(FileName, "r")) == NULL) {
  19.     *ErrStr = "File not found";
  20.     return NULL;
  21.     }
  22.  
  23.     while ((Token = _CagdGetToken(f, StringToken)) != TOKEN_EOF &&
  24.        Token != TOKEN_OPEN_PAREN);
  25.  
  26.     /* We found beginning of definition - read one: */
  27.     if (_CagdGetToken(f, StringToken) != TOKEN_CURVE ||
  28.     (Token =_CagdGetToken(f, StringToken)) == TOKEN_EOF) {
  29.         *ErrStr = "CURVE key words expected";
  30.     *Line = _CagdGlblLineCount;
  31.     return NULL;
  32.     }
  33.  
  34.     fclose(f);
  35.  
  36.     switch (Token) {
  37.     case TOKEN_BEZIER:
  38.         return BzrCrvReadFromFile(FileName, ErrStr, Line);
  39.     case TOKEN_BSPLINE:
  40.         return BspCrvReadFromFile(FileName, ErrStr, Line);
  41.     case TOKEN_POWER:
  42.         FATAL_ERROR(CAGD_ERR_POWER_NO_SUPPORT);
  43.         return NULL;
  44.     default:
  45.         FATAL_ERROR(CAGD_ERR_UNDEF_CRV);
  46.         return NULL;
  47.     }
  48. }
  49.  
  50. /*****************************************************************************
  51. * Generic routine to read surface(s) from the given file.             *
  52. *****************************************************************************/
  53. CagdSrfStruct *CagdSrfReadFromFile(char *FileName, char **ErrStr, int *Line)
  54. {
  55.     FILE *f;
  56.     TokenNumType Token;
  57.     char StringToken[LINE_LEN];
  58.  
  59.     if ((f = fopen(FileName, "r")) == NULL) {
  60.     *ErrStr = "File not found";
  61.     return NULL;
  62.     }
  63.  
  64.     while ((Token = _CagdGetToken(f, StringToken)) != TOKEN_EOF &&
  65.        Token != TOKEN_OPEN_PAREN);
  66.  
  67.     /* We found beginning of definition - read one: */
  68.     if (_CagdGetToken(f, StringToken) != TOKEN_SURFACE ||
  69.     (Token = _CagdGetToken(f, StringToken)) == TOKEN_EOF) {
  70.         *ErrStr = "CURVE key words expected";
  71.     *Line = _CagdGlblLineCount;
  72.     return NULL;
  73.     }
  74.  
  75.     fclose(f);
  76.  
  77.     switch (Token) {
  78.     case TOKEN_BEZIER:
  79.         return BzrSrfReadFromFile(FileName, ErrStr, Line);
  80.     case TOKEN_BSPLINE:
  81.         return BspSrfReadFromFile(FileName, ErrStr, Line);
  82.     case TOKEN_POWER:
  83.         FATAL_ERROR(CAGD_ERR_POWER_NO_SUPPORT);
  84.         return NULL;
  85.     default:
  86.         FATAL_ERROR(CAGD_ERR_UNDEF_SRF);
  87.         return NULL;
  88.     }
  89. }
  90.  
  91. /*****************************************************************************
  92. * Generic routine to read a curve from the given file. It is assumed         *
  93. * the "[CURVE" has been read and the next token is type (BEZIER/BSPLINE etc. *
  94. *****************************************************************************/
  95. CagdCrvStruct *CagdCrvReadFromFile2(FILE *f, char **ErrStr, int *Line)
  96. {
  97.     char StringToken[LINE_LEN];
  98.  
  99.     switch (_CagdGetToken(f, StringToken)) {
  100.     case TOKEN_BEZIER:
  101.         return BzrCrvReadFromFile2(f, TRUE, ErrStr, Line);
  102.     case TOKEN_BSPLINE:
  103.         return BspCrvReadFromFile2(f, TRUE, ErrStr, Line);
  104.     case TOKEN_POWER:
  105.         FATAL_ERROR(CAGD_ERR_POWER_NO_SUPPORT);
  106.         return NULL;
  107.     default:
  108.         FATAL_ERROR(CAGD_ERR_UNDEF_CRV);
  109.         return NULL;
  110.     }
  111. }
  112.  
  113. /*****************************************************************************
  114. * Generic routine to read a surface from the given file. It is assumed the   *
  115. * "[SURFACE" has been read and the next token is type (BEZIER/BSPLINE etc.   *
  116. *****************************************************************************/
  117. CagdSrfStruct *CagdSrfReadFromFile2(FILE *f, char **ErrStr, int *Line)
  118. {
  119.     char StringToken[LINE_LEN];
  120.  
  121.     switch (_CagdGetToken(f, StringToken)) {
  122.     case TOKEN_BEZIER:
  123.         return BzrSrfReadFromFile2(f, TRUE, ErrStr, Line);
  124.     case TOKEN_BSPLINE:
  125.         return BspSrfReadFromFile2(f, TRUE, ErrStr, Line);
  126.     case TOKEN_POWER:
  127.         FATAL_ERROR(CAGD_ERR_POWER_NO_SUPPORT);
  128.         return NULL;
  129.     default:
  130.         FATAL_ERROR(CAGD_ERR_UNDEF_SRF);
  131.         return NULL;
  132.     }
  133. }
  134.