(no commit message)
[pom.git] / misc.cc
1
2 //////////////////////////////////////////////////////////////////////////////////
3 // This program is free software: you can redistribute it and/or modify         //
4 // it under the terms of the version 3 of the GNU General Public License        //
5 // as published by the Free Software Foundation.                                //
6 //                                                                              //
7 // This program is distributed in the hope that it will be useful, but          //
8 // WITHOUT ANY WARRANTY; without even the implied warranty of                   //
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU             //
10 // General Public License for more details.                                     //
11 //                                                                              //
12 // You should have received a copy of the GNU General Public License            //
13 // along with this program. If not, see <http://www.gnu.org/licenses/>.         //
14 //                                                                              //
15 // Written by Francois Fleuret                                                  //
16 // (C) Ecole Polytechnique Federale de Lausanne                                 //
17 // Contact <pom@epfl.ch> for comments & bug reports                             //
18 //////////////////////////////////////////////////////////////////////////////////
19
20 #include <iostream>
21 #include <fstream>
22
23 using namespace std;
24
25 #include "misc.h"
26
27 char *next_word(char *buffer, char *r, int buffer_size) {
28   char *s;
29   s = buffer;
30   if(r != 0) {
31     while((*r == ' ') || (*r == '\t') || (*r == ',')) r++;
32     if(*r == '"') {
33       r++;
34       while((*r != '"') && (*r != '\0') &&
35             (s<buffer+buffer_size-1))
36         *s++ = *r++;
37       if(*r == '"') r++;
38     } else {
39       while((*r != '\r') && (*r != '\n') && (*r != '\0') &&
40             (*r != '\t') && (*r != ' ') && (*r != ',')) {
41         if(s == buffer + buffer_size) {
42           cerr << "Buffer overflow in next_word." << endl;
43           exit(1);
44         }
45         *s++ = *r++;
46       }
47     }
48
49     while((*r == ' ') || (*r == '\t') || (*r == ',')) r++;
50     if((*r == '\0') || (*r=='\r') || (*r=='\n')) r = 0;
51   }
52   *s = '\0';
53
54   return r;
55 }
56
57 int pomsprintf(char *buffer, int buffer_length, char *format, int n_camera, int n_frame, int n_iteration) {
58   char *s = buffer, *t = format;
59
60   while(*t && s < buffer + buffer_length - 1) {
61     if(*t == '%') {
62       t++;
63       int v;
64       switch(*t) {
65       case 'c':
66         v = n_camera;
67         t++;
68         break;
69       case 'f':
70         v = n_frame;
71         t++;
72         break;
73       case 'i':
74         v = n_iteration;
75         t++;
76         break;
77       default:
78         cerr << "Unknown format type in " << format << "." << endl;
79         exit(1);
80       }
81
82       s += snprintf(s, buffer + buffer_length - s, "%d", v);
83     } else *(s++) = *(t++);
84   }
85
86   *(s++) = '\0';
87
88   return s - buffer;
89 }