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 >
C/C++ Source or Header  |  1996-07-11  |  2KB  |  80 lines

  1. /*
  2.  *        オブジェクト名、アトリビュート名の照合
  3.  *        (4ページ使用)
  4.  *
  5.  *            Copyright    T.Kobayashi
  6.  */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <assert.h>
  11.  
  12. #include "reader.h"
  13.  
  14. /*
  15.     proto -s objatr.c > temp
  16. */
  17. static    Pointer(Atr*)    setatr( char*, Pointer(Atr*) );
  18.  
  19. int        objatr( pobj, patr )
  20. Pointer(Object*)    pobj ;
  21. Pointer(Atr*)    patr ;
  22. {
  23.     int        i, n ;
  24.     Pointer(Atr*)    ap ;
  25.     Object    *obj ;
  26.     Poly    *poly ;
  27.     AtrName    *atrname ;
  28.     int        lockid1, lockid2, lockid3 ;
  29.  
  30.     while( pobj != NULL )
  31.     {
  32.         obj = pointer( pobj );
  33.         lockid1 = datalock();
  34.  
  35.         atrname = (AtrName*)pointer( obj->atrname );
  36.         lockid2 = datalock();
  37.         n = obj->polynum ;
  38.         poly = pointer( obj->poly );
  39.         for( i = 0 ; i < n ; ++i )
  40.         {
  41.             assert( poly != NULL );
  42.             lockid3 = datalock();
  43.             ap = setatr( atrname[ poly->atrid ], patr );
  44.             poly->atr = ap ;
  45.             dataunlock( lockid3 );
  46.             poly = pointer( poly->next );
  47.             if ( ap == NULL )
  48.                 return( FALSE );
  49.         }
  50.         dataunlock( lockid2 );
  51.         dataunlock( lockid1 );
  52.         pobj = obj->next ;
  53.     }
  54.     return( TRUE );
  55. }
  56.  
  57. static    Pointer(Atr*)    setatr( name, patr )
  58. char    *name ;
  59. Pointer(Atr*)    patr ;
  60. {
  61.     Atr        *atr ;
  62.  
  63.     while( patr != NULL )
  64.     {
  65.         atr = pointer( patr );
  66.         if ( strcmpi( name, atr->name ) == NULL )
  67.             break ;
  68.         patr = atr->next ;
  69.     }
  70.  
  71.     if ( patr == NULL ) {
  72. #ifdef MESSAGE
  73.         extern int printwarning(const char *format, ...);
  74.         printwarning("アトリビュート %s が登録されていません。", name );
  75. #endif
  76.         fprintf( errfp, "アトリビュート %s が登録されていません。", name );
  77.     }
  78.     return( patr );
  79. }
  80.