| 17 |  | #define POPEN_SUPPORT           1       /* support "!command" i/o */ | 
| 18 |  | #endif | 
| 19 |  | /* face flags */ | 
| 20 | < | #define FACE_SELECTED           01 | 
| 21 | < | #define FACE_DEGENERATE         02 | 
| 22 | < | #define FACE_DUPLICATE          04 | 
| 20 | > | #define FACE_DEGENERATE         01 | 
| 21 | > | #define FACE_DUPLICATE          02 | 
| 22 | > | #define FACE_SELECTED           04 | 
| 23 | > | #define FACE_CUSTOM(n)          (FACE_SELECTED<<(n)) | 
| 24 |  |  | 
| 25 |  | struct Face;                            /* forward declaration */ | 
| 26 |  |  | 
| 89 |  | /* Add a .OBJ file to a scene */ | 
| 90 |  | Scene *         loadOBJ(Scene *sc, const char *fspec); | 
| 91 |  |  | 
| 92 | < | /* Duplicate a scene */ | 
| 93 | < | Scene *         dupScene(const Scene *sc); | 
| 92 | > | /* Duplicate a scene, optionally selecting faces */ | 
| 93 | > | Scene *         dupScene(const Scene *sc, int flreq, int flexc); | 
| 94 |  |  | 
| 95 |  | /* Transform entire scene */ | 
| 96 |  | int             xfScene(Scene *sc, int xac, char *xav[]); | 
| 99 |  | /* Add a descriptive comment */ | 
| 100 |  | void            addComment(Scene *sc, const char *comment); | 
| 101 |  |  | 
| 102 | + | /* Find index for comment containing the given string (starting from n) */ | 
| 103 | + | int             findComment(Scene *sc, const char *match, int n); | 
| 104 | + |  | 
| 105 |  | /* Clear comments */ | 
| 106 |  | void            clearComments(Scene *sc); | 
| 107 |  |  | 
| 176 |  |  | 
| 177 |  | /* Add a new face to our scene, using current group and material */ | 
| 178 |  | Face *          addFace(Scene *sc, VNDX vid[], int nv); | 
| 179 | + |  | 
| 180 | + | /* Delete unreferenced vertices, normals, texture coords */ | 
| 181 | + | void            deleteUnreferenced(Scene *sc); | 
| 182 |  |  | 
| 183 |  | /* Free a scene */ | 
| 184 |  | void            freeScene(Scene *sc); |