home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
REND.LZH
/
READER
/
OBJATR.C
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-11
|
2KB
|
80 lines
/*
* オブジェクト名、アトリビュート名の照合
* (4ページ使用)
*
* Copyright T.Kobayashi
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "reader.h"
/*
proto -s objatr.c > temp
*/
static Pointer(Atr*) setatr( char*, Pointer(Atr*) );
int objatr( pobj, patr )
Pointer(Object*) pobj ;
Pointer(Atr*) patr ;
{
int i, n ;
Pointer(Atr*) ap ;
Object *obj ;
Poly *poly ;
AtrName *atrname ;
int lockid1, lockid2, lockid3 ;
while( pobj != NULL )
{
obj = pointer( pobj );
lockid1 = datalock();
atrname = (AtrName*)pointer( obj->atrname );
lockid2 = datalock();
n = obj->polynum ;
poly = pointer( obj->poly );
for( i = 0 ; i < n ; ++i )
{
assert( poly != NULL );
lockid3 = datalock();
ap = setatr( atrname[ poly->atrid ], patr );
poly->atr = ap ;
dataunlock( lockid3 );
poly = pointer( poly->next );
if ( ap == NULL )
return( FALSE );
}
dataunlock( lockid2 );
dataunlock( lockid1 );
pobj = obj->next ;
}
return( TRUE );
}
static Pointer(Atr*) setatr( name, patr )
char *name ;
Pointer(Atr*) patr ;
{
Atr *atr ;
while( patr != NULL )
{
atr = pointer( patr );
if ( strcmpi( name, atr->name ) == NULL )
break ;
patr = atr->next ;
}
if ( patr == NULL ) {
#ifdef MESSAGE
extern int printwarning(const char *format, ...);
printwarning("アトリビュート %s が登録されていません。", name );
#endif
fprintf( errfp, "アトリビュート %s が登録されていません。", name );
}
return( patr );
}