ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/mgflib/object.c
Revision: 1.6
Committed: Fri Feb 28 20:11:29 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R7P1, rad4R0, rad3R5, rad3R6, rad3R6P1, rad3R8, rad3R9, rad3R7P2
Changes since 1.5: +2 -4 lines
Log Message:
Updates for 3.5 release

File Contents

# User Rev Content
1 greg 1.1 #ifndef lint
2 greg 1.6 static const char RCSid[] = "$Id$";
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.1 free((MEM_PTR)obj_name[--obj_nnames]);
31     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     obj_name = (char **)realloc((MEM_PTR)obj_name,
44     (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     free((MEM_PTR)obj_name[--obj_nnames]);
63     if (obj_maxname) {
64     free((MEM_PTR)obj_name);
65     obj_maxname = 0;
66     }
67     }