| 22 |  |  | 
| 23 |  | FUN  ofun[NUMOTYPE] = INIT_OTYPE; | 
| 24 |  |  | 
| 25 | + | static int      nextlist, nlistleft = 0; | 
| 26 |  |  | 
| 27 | + |  | 
| 28 |  | static | 
| 29 |  | initotypes()                    /* initialize ofun array */ | 
| 30 |  | { | 
| 71 |  | int | 
| 72 |  | newglist()                      /* allocate an OGL list id */ | 
| 73 |  | { | 
| 74 | < | static int      nextlist, nleft = 0; | 
| 73 | < |  | 
| 74 | < | if (!nleft--) { | 
| 74 | > | if (!nlistleft--) { | 
| 75 |  | nextlist = glGenLists(NLIST2ALLOC); | 
| 76 | < | nleft = NLIST2ALLOC-1; | 
| 76 | > | if (!nextlist) | 
| 77 | > | error(SYSTEM, "no list space left in newglist"); | 
| 78 | > | nlistleft = NLIST2ALLOC-1; | 
| 79 |  | } | 
| 80 |  | return(nextlist++); | 
| 81 |  | } | 
| 95 |  |  | 
| 96 |  |  | 
| 97 |  | int | 
| 98 | < | rgl_filelist(ic, inp)           /* load scene files into display list */ | 
| 98 | > | rgl_filelist(ic, inp, nl)       /* load scene files into display list */ | 
| 99 |  | int     ic; | 
| 100 |  | char    **inp; | 
| 101 | + | int     *nl;                    /* returned number of lists (optional) */ | 
| 102 |  | { | 
| 103 |  | int     listid; | 
| 104 |  |  | 
| 113 |  | glEndList();            /* end of top display list */ | 
| 114 |  | lightdefs();            /* define light sources */ | 
| 115 |  | loadoctrees();          /* load octrees (sublists) for instances */ | 
| 116 | + | if (nl != NULL)         /* return total number of lists allocated */ | 
| 117 | + | *nl = nextlist - listid; | 
| 118 |  | return(listid);         /* all done -- return list id */ | 
| 119 |  | } | 
| 120 |  |  | 
| 121 |  |  | 
| 122 |  | int | 
| 123 | < | rgl_octlist(fname, cent, radp)  /* load octree objects into display list */ | 
| 123 | > | rgl_octlist(fname, cent, radp, nl)      /* load scen into display list */ | 
| 124 |  | char    *fname; | 
| 125 |  | FVECT   cent;                   /* returned octree center (optional) */ | 
| 126 | < | double  *radp;                  /* returned octree size (optional) */ | 
| 126 | > | FLOAT   *radp;                  /* returned octree size (optional) */ | 
| 127 | > | int     *nl;                    /* returned number of lists (optional) */ | 
| 128 |  | { | 
| 129 |  | double  r; | 
| 130 |  | int     listid; | 
| 143 |  | glEndList();            /* close top list */ | 
| 144 |  | lightdefs();            /* define light sources */ | 
| 145 |  | loadoctrees();          /* load referenced octrees into sublists */ | 
| 146 | + | if (nl != NULL)         /* return total number of lists allocated */ | 
| 147 | + | *nl = nextlist - listid; | 
| 148 |  | return(listid); | 
| 149 |  | } | 
| 150 |  |  |