--- ray/src/cv/mgflib/object.c 1994/06/21 14:45:46 1.1 +++ ray/src/cv/mgflib/object.c 2003/02/28 20:11:29 1.6 @@ -1,14 +1,12 @@ -/* Copyright (c) 1994 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: object.c,v 1.6 2003/02/28 20:11:29 greg Exp $"; #endif - /* * Header file for tracking hierarchical object names */ #include +#include #include #include "parser.h" @@ -18,7 +16,7 @@ char **obj_name; /* name list */ static int obj_maxname; /* allocated list size */ -#define ALLOC_INC 16 /* list increment */ +#define ALLOC_INC 16 /* list increment ( > 1 ) */ int @@ -28,14 +26,16 @@ char **av; { if (ac == 1) { /* just pop top object */ if (obj_nnames < 1) - return(MG_OK); /* should be error? */ + return(MG_ECNTXT); free((MEM_PTR)obj_name[--obj_nnames]); obj_name[obj_nnames] = NULL; return(MG_OK); } if (ac != 2) return(MG_EARGC); - if (obj_nnames >= obj_maxname) { /* enlarge array */ + if (!isname(av[1])) + return(MG_EILL); + if (obj_nnames >= obj_maxname-1) { /* enlarge array */ if (!obj_maxname) obj_name = (char **)malloc( (obj_maxname=ALLOC_INC)*sizeof(char *)); @@ -52,4 +52,16 @@ char **av; strcpy(obj_name[obj_nnames++], av[1]); obj_name[obj_nnames] = NULL; return(MG_OK); +} + + +void +obj_clear() /* clear object stack */ +{ + while (obj_nnames) + free((MEM_PTR)obj_name[--obj_nnames]); + if (obj_maxname) { + free((MEM_PTR)obj_name); + obj_maxname = 0; + } }