ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/mgflib/object.c
Revision: 1.7
Committed: Fri Jan 14 05:46:12 2011 UTC (13 years, 4 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 1.6: +5 -5 lines
Log Message:
Eliminated unnecessary MEM_PTR

File Contents

# User Rev Content
1 greg 1.1 #ifndef lint
2 greg 1.7 static const char RCSid[] = "$Id: object.c,v 1.6 2003/02/28 20:11:29 greg Exp $";
3 greg 1.1 #endif
4     /*
5     * Header file for tracking hierarchical object names
6     */
7    
8     #include <stdio.h>
9 greg 1.6 #include <stdlib.h>
10 greg 1.1 #include <string.h>
11     #include "parser.h"
12    
13    
14     int obj_nnames; /* depth of name hierarchy */
15     char **obj_name; /* name list */
16    
17     static int obj_maxname; /* allocated list size */
18    
19 greg 1.3 #define ALLOC_INC 16 /* list increment ( > 1 ) */
20 greg 1.1
21    
22     int
23     obj_handler(ac, av) /* handle an object entity statement */
24     int ac;
25     char **av;
26     {
27     if (ac == 1) { /* just pop top object */
28     if (obj_nnames < 1)
29 greg 1.5 return(MG_ECNTXT);
30 greg 1.7 free(obj_name[--obj_nnames]);
31 greg 1.1 obj_name[obj_nnames] = NULL;
32     return(MG_OK);
33     }
34     if (ac != 2)
35     return(MG_EARGC);
36 greg 1.4 if (!isname(av[1]))
37     return(MG_EILL);
38 greg 1.3 if (obj_nnames >= obj_maxname-1) { /* enlarge array */
39 greg 1.1 if (!obj_maxname)
40     obj_name = (char **)malloc(
41     (obj_maxname=ALLOC_INC)*sizeof(char *));
42     else
43 greg 1.7 obj_name = (char **)realloc(obj_name,
44 greg 1.1 (obj_maxname+=ALLOC_INC)*sizeof(char *));
45     if (obj_name == NULL)
46     return(MG_EMEM);
47     }
48     /* allocate new entry */
49     obj_name[obj_nnames] = (char *)malloc(strlen(av[1])+1);
50     if (obj_name[obj_nnames] == NULL)
51     return(MG_EMEM);
52     strcpy(obj_name[obj_nnames++], av[1]);
53     obj_name[obj_nnames] = NULL;
54     return(MG_OK);
55     }
56 greg 1.2
57    
58     void
59     obj_clear() /* clear object stack */
60     {
61     while (obj_nnames)
62 greg 1.7 free(obj_name[--obj_nnames]);
63 greg 1.2 if (obj_maxname) {
64 greg 1.7 free(obj_name);
65 greg 1.2 obj_maxname = 0;
66     }
67     }