home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- * CagdRead.c - Generic Curve/Surface reading from files. *
- *******************************************************************************
- * Written by Gershon Elber, July. 90. *
- ******************************************************************************/
-
- #include "cagd_loc.h"
-
- /*****************************************************************************
- * Generic routine to read curve(s) from the given file. *
- *****************************************************************************/
- CagdCrvStruct *CagdCrvReadFromFile(char *FileName, char **ErrStr, int *Line)
- {
- FILE *f;
- TokenNumType Token;
- char StringToken[LINE_LEN];
-
- if ((f = fopen(FileName, "r")) == NULL) {
- *ErrStr = "File not found";
- return NULL;
- }
-
- while ((Token = _CagdGetToken(f, StringToken)) != TOKEN_EOF &&
- Token != TOKEN_OPEN_PAREN);
-
- /* We found beginning of definition - read one: */
- if (_CagdGetToken(f, StringToken) != TOKEN_CURVE ||
- (Token =_CagdGetToken(f, StringToken)) == TOKEN_EOF) {
- *ErrStr = "CURVE key words expected";
- *Line = _CagdGlblLineCount;
- return NULL;
- }
-
- fclose(f);
-
- switch (Token) {
- case TOKEN_BEZIER:
- return BzrCrvReadFromFile(FileName, ErrStr, Line);
- case TOKEN_BSPLINE:
- return BspCrvReadFromFile(FileName, ErrStr, Line);
- case TOKEN_POWER:
- FATAL_ERROR(CAGD_ERR_POWER_NO_SUPPORT);
- return NULL;
- default:
- FATAL_ERROR(CAGD_ERR_UNDEF_CRV);
- return NULL;
- }
- }
-
- /*****************************************************************************
- * Generic routine to read surface(s) from the given file. *
- *****************************************************************************/
- CagdSrfStruct *CagdSrfReadFromFile(char *FileName, char **ErrStr, int *Line)
- {
- FILE *f;
- TokenNumType Token;
- char StringToken[LINE_LEN];
-
- if ((f = fopen(FileName, "r")) == NULL) {
- *ErrStr = "File not found";
- return NULL;
- }
-
- while ((Token = _CagdGetToken(f, StringToken)) != TOKEN_EOF &&
- Token != TOKEN_OPEN_PAREN);
-
- /* We found beginning of definition - read one: */
- if (_CagdGetToken(f, StringToken) != TOKEN_SURFACE ||
- (Token = _CagdGetToken(f, StringToken)) == TOKEN_EOF) {
- *ErrStr = "CURVE key words expected";
- *Line = _CagdGlblLineCount;
- return NULL;
- }
-
- fclose(f);
-
- switch (Token) {
- case TOKEN_BEZIER:
- return BzrSrfReadFromFile(FileName, ErrStr, Line);
- case TOKEN_BSPLINE:
- return BspSrfReadFromFile(FileName, ErrStr, Line);
- case TOKEN_POWER:
- FATAL_ERROR(CAGD_ERR_POWER_NO_SUPPORT);
- return NULL;
- default:
- FATAL_ERROR(CAGD_ERR_UNDEF_SRF);
- return NULL;
- }
- }
-
- /*****************************************************************************
- * Generic routine to read a curve from the given file. It is assumed *
- * the "[CURVE" has been read and the next token is type (BEZIER/BSPLINE etc. *
- *****************************************************************************/
- CagdCrvStruct *CagdCrvReadFromFile2(FILE *f, char **ErrStr, int *Line)
- {
- char StringToken[LINE_LEN];
-
- switch (_CagdGetToken(f, StringToken)) {
- case TOKEN_BEZIER:
- return BzrCrvReadFromFile2(f, TRUE, ErrStr, Line);
- case TOKEN_BSPLINE:
- return BspCrvReadFromFile2(f, TRUE, ErrStr, Line);
- case TOKEN_POWER:
- FATAL_ERROR(CAGD_ERR_POWER_NO_SUPPORT);
- return NULL;
- default:
- FATAL_ERROR(CAGD_ERR_UNDEF_CRV);
- return NULL;
- }
- }
-
- /*****************************************************************************
- * Generic routine to read a surface from the given file. It is assumed the *
- * "[SURFACE" has been read and the next token is type (BEZIER/BSPLINE etc. *
- *****************************************************************************/
- CagdSrfStruct *CagdSrfReadFromFile2(FILE *f, char **ErrStr, int *Line)
- {
- char StringToken[LINE_LEN];
-
- switch (_CagdGetToken(f, StringToken)) {
- case TOKEN_BEZIER:
- return BzrSrfReadFromFile2(f, TRUE, ErrStr, Line);
- case TOKEN_BSPLINE:
- return BspSrfReadFromFile2(f, TRUE, ErrStr, Line);
- case TOKEN_POWER:
- FATAL_ERROR(CAGD_ERR_POWER_NO_SUPPORT);
- return NULL;
- default:
- FATAL_ERROR(CAGD_ERR_UNDEF_SRF);
- return NULL;
- }
- }
-