work in progess
This commit is contained in:
4
Makefile
4
Makefile
@@ -929,8 +929,8 @@ test:: libxtools/cllexer_test
|
||||
test:: libxtools/clcomp_test
|
||||
cd libxtools && ./clcomp_test
|
||||
|
||||
#test: libxtools/clconfig_test
|
||||
# cd libxtools && ./clconfig_test
|
||||
test:: libxtools/clconfig_test
|
||||
cd libxtools && ./clconfig_test
|
||||
|
||||
clean-local:
|
||||
rm -f *~
|
||||
|
||||
@@ -69,8 +69,8 @@ test:: libxtools/cllexer_test
|
||||
test:: libxtools/clcomp_test
|
||||
cd libxtools && ./clcomp_test
|
||||
|
||||
#test: libxtools/clconfig_test
|
||||
# cd libxtools && ./clconfig_test
|
||||
test:: libxtools/clconfig_test
|
||||
cd libxtools && ./clconfig_test
|
||||
|
||||
clean-local:
|
||||
rm -f *~
|
||||
|
||||
@@ -929,8 +929,8 @@ test:: libxtools/cllexer_test
|
||||
test:: libxtools/clcomp_test
|
||||
cd libxtools && ./clcomp_test
|
||||
|
||||
#test: libxtools/clconfig_test
|
||||
# cd libxtools && ./clconfig_test
|
||||
test:: libxtools/clconfig_test
|
||||
cd libxtools && ./clconfig_test
|
||||
|
||||
clean-local:
|
||||
rm -f *~
|
||||
|
||||
@@ -7,15 +7,25 @@
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <strings.h>
|
||||
|
||||
#include <cllexer.h>
|
||||
#include <clcomp.h>
|
||||
|
||||
void clcomp_init(clcomp_t* comp, vmapper_t* mapper, char** argv, int argc) {
|
||||
static char* strcopy(char* src) {
|
||||
size_t srcsize = strlen(src) + 1;
|
||||
char* dst = malloc(srcsize);
|
||||
memset(dst, '\0', srcsize);
|
||||
strcpy(dst, src);
|
||||
return dst;
|
||||
}
|
||||
|
||||
void clcomp_init(clcomp_t* comp, vmapper_t* vmapper, char** argv, int argc) {
|
||||
comp->argv = argv;
|
||||
comp->argc = argc;
|
||||
comp->argn = 1;
|
||||
comp->mapper = mapper;
|
||||
comp->pos = 0;
|
||||
comp->vmapper = vmapper;
|
||||
if (comp->argc > comp->argn) {
|
||||
cllexer_init(&(comp->lexer), comp->argv[comp->argn]);
|
||||
}
|
||||
@@ -38,19 +48,71 @@ int clcomp_gettok(clcomp_t* comp, char* token) {
|
||||
return toktype;
|
||||
}
|
||||
|
||||
|
||||
int clcomp_parse(clcomp_t* comp) {
|
||||
|
||||
char token[1024];
|
||||
int toktype = TOKEN_NULL;
|
||||
int i = 0;
|
||||
|
||||
char* key = NULL;
|
||||
char* val = NULL;
|
||||
|
||||
while (toktype != TOKEN_ENDF) {
|
||||
toktype = clcomp_gettok(comp, token);
|
||||
printf("cllexer_gettok res: %d: %d [%s]\n", i, toktype, token);
|
||||
i++;
|
||||
printf("cllexer_parse res: %d: %d [%s]\n", i, toktype, token);
|
||||
switch (comp->pos) {
|
||||
case 0: {
|
||||
if (toktype == TOKEN_PREF) {
|
||||
comp->pos = 1;
|
||||
printf("pos %d: TOKEN_PREF %s\n", comp->pos, token);
|
||||
continue;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
case 1: {
|
||||
if (toktype == TOKEN_WORD) {
|
||||
comp->pos = 2;
|
||||
key = strcopy(token);
|
||||
printf("pos %d: TOKEN_WORD %s\n", comp->pos, token);
|
||||
continue;
|
||||
} else {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
case 2: {
|
||||
if (toktype == TOKEN_DELIM || toktype == TOKEN_SPACE) {
|
||||
comp->pos = 3;
|
||||
printf("pos %d: TOKEN_DELIM %s\n", comp->pos, token);
|
||||
continue;
|
||||
} else {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
case 3: {
|
||||
if (toktype == TOKEN_WORD) {
|
||||
comp->pos = 0;
|
||||
printf("pos %d: TOKEN_WORD %s\n", comp->pos, token);
|
||||
val = strcopy(token);
|
||||
printf("keyval = [%s], [%s]\n", key, val);
|
||||
vmapper_set(comp->vmapper, key, val);
|
||||
free(key);
|
||||
free(val);
|
||||
continue;
|
||||
} else {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
error:
|
||||
free(key);
|
||||
free(val);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -14,11 +14,12 @@ typedef struct {
|
||||
char** argv;
|
||||
int argc;
|
||||
int argn;
|
||||
int pos;
|
||||
cllexer_t lexer;
|
||||
vmapper_t* mapper;
|
||||
vmapper_t* vmapper;
|
||||
} clcomp_t;
|
||||
|
||||
void clcomp_init(clcomp_t* clcomp, vmapper_t* mapper, char** argv, int argc);
|
||||
void clcomp_init(clcomp_t* clcomp, vmapper_t* vmapper, char** argv, int argc);
|
||||
int clcomp_gettok(clcomp_t* clcomp, char* token);
|
||||
int clcomp_parse(clcomp_t* clcomp);
|
||||
void clcomp_destroy(clcomp_t* clcomp);
|
||||
|
||||
@@ -11,54 +11,22 @@
|
||||
#include <clconfig.h>
|
||||
|
||||
void clconfig_init(clconfig_t* clconfig, int argc, char **argv) {
|
||||
//clcomp_init(&(clconfig->lexer), argv, argc);
|
||||
vmapper_init(&(clconfig->mapper));
|
||||
vmapper_init(&(clconfig->vmapper));
|
||||
clcomp_init(&(clconfig->comp), &(clconfig->vmapper), argv, argc);
|
||||
}
|
||||
|
||||
int clconfig_bind(clconfig_t* clconfig, int type, char* name, void* ptr) {
|
||||
vmapper_t* vmapper = &(clconfig->mapper);
|
||||
vmapper_t* vmapper = &(clconfig->vmapper);
|
||||
return vmapper_bind(vmapper, type, name, ptr);
|
||||
}
|
||||
|
||||
int clconfig_parse(clconfig_t* clconfig) {
|
||||
|
||||
char token[1024];
|
||||
int toktype = TOKEN_NULL;
|
||||
int i = 0;
|
||||
while (toktype != TOKEN_ENDF) {
|
||||
toktype = clcomp_gettok(&(clconfig->lexer), token);
|
||||
printf("clconfig_parse %d: %d [%s]\n", i, toktype, token);
|
||||
i++;
|
||||
|
||||
|
||||
}
|
||||
clcomp_parse(&(clconfig->comp));
|
||||
return 0;
|
||||
}
|
||||
|
||||
void clconfig_destroy(clconfig_t* clconfig) {
|
||||
clcomp_destroy(&(clconfig->lexer));
|
||||
vmapper_destroy(&(clconfig->mapper));
|
||||
clcomp_destroy(&(clconfig->comp));
|
||||
vmapper_destroy(&(clconfig->vmapper));
|
||||
}
|
||||
|
||||
int __main(int argc, char **argv) {
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
/*
|
||||
char*_argv[] = { argv[0], "--qwerty=-num12345", "--foo=-bar" };
|
||||
int _argc = 2;
|
||||
|
||||
clcomp_t clcomp;
|
||||
clcomp_init(&clcomp, _argv, _argc);
|
||||
|
||||
char token[1024];
|
||||
int toktype = TOKEN_NULL;
|
||||
int i = 0;
|
||||
while (toktype != TOKEN_ENDF) {
|
||||
toktype = clcomp_gettok(&lex, token);
|
||||
printf("%d: %d [%s]\n", i, toktype, token);
|
||||
i++;
|
||||
}
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
#include <vmapper.h>
|
||||
|
||||
typedef struct {
|
||||
clcomp_t lexer;
|
||||
vmapper_t mapper;
|
||||
clcomp_t comp;
|
||||
vmapper_t vmapper;
|
||||
int argc;
|
||||
char ** argv;
|
||||
} clconfig_t;
|
||||
|
||||
Reference in New Issue
Block a user