ifndef CONVERTER_H define CONVERTER_H //class string_converter; //typedef string_converter converter;
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(const char *s) { _argc = unflatten((char*)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; } };
endif
Hush Online Technology
hush@cs.vu.nl
11/03/98 |
![]() |
![]() |