Using the C API

prevnext

Code Sample Using the C API


The following simple code sample opens an Understand database, reports a couple of project metrics, a list of function names and a reference for where the function is defined, and then closes the database.

The API calls have been bolded for illustration.

 /* sample program using Understand C API */
 #include <stdio.h>
 #include <stdlib.h
 #include "../sti/src/udb/udb.h"
 
 main(
   int argc,
   char *argv[])  
 {
    UdbEntity    *ents;               /* list of entities */
    int          entsSize;            /* number of entities */
    UdbReference *refs;               /* list of references for entity */
    UdbReference *filterrefs;         /* list of filtered references for entity */
    int          i;                   /* counter */
    UdbStatus    status;              /* return status */
   
    /* set Understand license location */
    udbSetLicense("c:\\program files\\sti\\conf\\license");  
    
    /* open Understand database */
    status = udbDbOpen("sample.udc");
    if (status)   {
       printf ("unable to open valid Understand database: %s ", "sample.udc");
       switch (status)    {
          case Udb_statusDBAlreadOpen:  
                          printf("database is already open\n");                break;
          case Udb_statusDBOldVersion: 
                          printf("database is old version\n");                 break;
          case Udb_statusDBUnknownVersion:
                          printf("database is unknown version\n");             break;
          case Udb_statusDBUnableOpen: 
                          printf("unable to locate database\n");               break;
 
          case Udb_statusNoApiLicenseAda: 
                          printf("no Understand/Ada license available\n");     break;
          case Udb_statusNoApiLicenseC:  
                          printf("no Understand/C license available\n");       break;
          case Udb_statusNoApiLicenseFtn: 
                          printf("no Understand/Fortran license available\n"); break;
          default:        printf("unable to access database\n");               break;
        }
        exit (EXIT_FAILURE);
    }
    /* get list of all entities */
    udbListEntity(&ents, &entsSize);         
 
    /* report on some project metrics */
    printf ("Entities in Project: %d\n", entsSize);
    printf ("Files in Project: %d\n", udbMetricProject(Udb_cProjMetricCountFile));
    printf ("Functions in Project: %d\n", 
                                   udbMetricProject(Udb_cProjMetricCountFunction));
 
    /* filter list to include only non-member object kinds */
    udbListEntityFilter (ents, 
                         udbKindParse("object ~member"), 
                          &ents, &entsSize);
    /* loop through all the list of filtered entities */
    for (i=0; i<entsSize; i++)   {
       printf ("%s\n", udbEntityNameLong(ents[i]));
 
       /* get references  for this entity */
       udbListReference(ents[i], &refs, NULL);
       /* filter the references to the desired kinds (in this case, where defined)*/
       udbListReferenceFilter(refs, 
                              udbKindParse("definedin"), 
                              NULL, 
                              0, &filterrefs, NULL);
 
       /* output reference info if reference of specified kind is found */
       if (filterrefs != NULL && filterrefs[0] != 0)	   {
            printf ("   %s: %s in %s at line:%d \n\n",
                     udbKindShortname(udbReferenceKind(filterrefs[0])),
                     udbEntityNameShort(udbReferenceEntity(filterrefs[0])),
                     udbEntityNameShort(udbReferenceFile(filterrefs[0])),
                     udbReferenceLine(filterrefs[0]) );
            /* free the filtered ref list, if any */
            udbListReferenceFree(filterrefs);
            }
       /* free the ref list for the entity */
       udbListReferenceFree(refs);
       }
    /* free the entity list */
    udbListEntityFree(ents);
    /* close Understand database */
    udbDbClose();	   
    }
 exit (EXIT_SUCCESS);
 }
 

prevnext


Scientific Toolworks, Inc.
http://www.scitools.com
Voice: (802) 763-2995
Fax: (802) 763-3066
support@scitools.com
sales@scitools.com