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, 1 month 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

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id$";
3 #endif
4 /*
5 * Header file for tracking hierarchical object names
6 */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #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 #define ALLOC_INC 16 /* list increment ( > 1 ) */
20
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 return(MG_ECNTXT);
30 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 if (!isname(av[1]))
37 return(MG_EILL);
38 if (obj_nnames >= obj_maxname-1) { /* enlarge array */
39 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
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 }