ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/mgflib/object.c
Revision: 1.4
Committed: Wed May 10 17:46:08 1995 UTC (28 years, 11 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 1.3: +2 -0 lines
Log Message:
added check for illegal names and identifiers

File Contents

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