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

# Content
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 #define ALLOC_INC 16 /* list increment ( > 1 ) */
22
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 if (!isname(av[1]))
39 return(MG_EILL);
40 if (obj_nnames >= obj_maxname-1) { /* enlarge array */
41 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
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 }