class string_converter {
int _argc;
char** _argv;
char _argvb[12][80];
char buf[BUFSIZ];
public:
string_converter(int argc, char** argv) {
flatten(argc,argv);
_argc = argc;
_argv = argv;
}
string_converter(char *s) {
_argc = unflatten(s, _argvb);
_argv = (char**)_argvb;
strcpy(buf,s);
}
char* str() { return buf; }
int argc() { return _argc; }
char* operator[](int i) { return _argvb[i]; }
private:
char* flatten(int argc, char* argv[]) {
char temp[BUFSIZ];
buf[0]='\0';
if (argc > 0) { strcpy(buf,*argv++); argc--; }
while (--argc >= 0) {
temp[0] = '\0';
sprintf(temp,"%s %s",buf,*argv++);
strcpy(buf,temp);
}
return buf;
}
int unflatten(char* in, char argv[12][80]) {
int quoteon = 0; int cont = 1;
char inbuf[BUFSIZ];
strcpy(inbuf,in);
char* b = inbuf;
while (*b == ' ') b++;
char* p = b;
int i = 0;
while ( *p != '\0' ) {
i++;
quoteon = 0; cont = 1;
while ( *p != '\0' && cont ) {
if ( *p == ' ' && !quoteon ) cont = 0;
if ( *p == '"' ) quoteon = quoteon?0:1;
if (cont) p++;
}
if ( *p == '\0' ) {
strcpy(argv[i],b);
return i;
} else {
*p = '\0';
strcpy(argv[i],b);
p++;
b = p;
}
}
return i;
}
};
slide: string_converter