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 >
Wrap
C/C++ Source or Header
|
1991-05-18
|
4KB
|
134 lines
/******************************************************************************
* 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;
}
}