diff --git a/c/.cproject b/c/.cproject new file mode 100644 index 0000000..612e212 --- /dev/null +++ b/c/.cproject @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/c/.project b/c/.project new file mode 100644 index 0000000..87a0d19 --- /dev/null +++ b/c/.project @@ -0,0 +1,26 @@ + + + cmdlineoptions-c + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/c/Makefile b/c/Makefile new file mode 100644 index 0000000..3bc33ab --- /dev/null +++ b/c/Makefile @@ -0,0 +1,16 @@ + + +all: build lib static + +build: + gcc -c cmdlineoptions.c + +lib: + rm -f libcmdlineoptions.a + ar cq libcmdlineoptions.a cmdlineoptions.o + + +static: + rm -f cmdlineoptions-static.o libcmdlineoptions.so + gcc -c -fPIC -o cmdlineoptions-static.o cmdlineoptions.c + ld -G cmdlineoptions-static.o -o libcmdlineoptions.so diff --git a/c/cmdlineoptions.c b/c/cmdlineoptions.c index 74ee562..6ce4a7a 100644 --- a/c/cmdlineoptions.c +++ b/c/cmdlineoptions.c @@ -1,33 +1,65 @@ #include "cmdlineoptions.h" - +#include +#include CmdOptions cmdoptions; -void CmdOptions_Init(){ +void CmdOptions_Init() { if (cmdoptions.init == 0) { cmdoptions.init = 1; // do we have to init something? // add the help option - CmdOptions_Add("help","--help"); - CmdOptions_Add("help","-h"); - CmdOptions_Add("help","-?"); - CmdOptions_AddDescription("help","Display the help text."); + CmdOptions_Add("help", "--help"); + CmdOptions_Add("help", "-h"); + CmdOptions_Add("help", "-?"); + CmdOptions_AddDescription("help", "Display the help text."); } } -int CmdOptions_Parse(int argc, char** argv){ +int CmdOptions_Create(char* name) { + if (CmdOptions_NodeGet(name) == 0) { + CONode* newnode = 0; + newnode = malloc(sizeof(CONode)); + if (cmdoptions.options == 0) { + cmdoptions.options = newnode; + } else { + CONode* last = cmdoptions.options; + while (last->next != 0) + last = last->next; + last->next = newnode; + } + newnode->next = 0; + newnode->option = malloc(sizeof(Option)); + newnode->option->name = name; + } +} + +CONode* CmdOptions_NodeGet(char* name) { + if (cmdoptions.options != 0) { + CONode* node = cmdoptions.options; + while (node != 0) { + if (strcmp(name, node->option->name) == 0) { + return node; + } + node = node->next; + } + } + return 0; +} + +int CmdOptions_Parse(int argc, char** argv) { } -int CmdOptions_Add(char* name, char* option){ +int CmdOptions_Add(char* name, char* option) { } -int CmdOptions_AddDefaultParameter(char* name, char* defaultparameter){ +int CmdOptions_AddDefaultParameter(char* name, char* defaultparameter) { } -int CmdOptions_AddPossibleParameter(char* name, char* possibleParameter){ +int CmdOptions_AddPossibleParameter(char* name, char* possibleParameter) { } @@ -35,26 +67,26 @@ int CmdOptions_AddDescription(char* name, char* description) { } -bool CmdOptions_IsSet(char* name) { +int CmdOptions_IsSet(char* name) { } -char* CmdOptions_Get(char* name) { +char* CmdOptions_Get(char* name) { } -int CmdOptions_GetInt(char* name) { +int CmdOptions_GetInt(char* name) { } -long CmdOptions_GetLong(char* name){ +long CmdOptions_GetLong(char* name) { } -double CmdOptions_GetDouble(char* name) { +double CmdOptions_GetDouble(char* name) { } -int CmdOptions_GetAll(char* name, char** values, unsigned int* count) { +int CmdOptions_GetAll(char* name, char** values, unsigned int* count) { } diff --git a/c/cmdlineoptions.h b/c/cmdlineoptions.h index a552f3a..b47f8d7 100644 --- a/c/cmdlineoptions.h +++ b/c/cmdlineoptions.h @@ -1,7 +1,7 @@ #ifndef CMDLINEOPTIONS_H #define CMDLINEOPTIONS_H -struct Option { +typedef struct { char* name; // the name of this option char** options; //dashed option name and alternatives unsigned int optionscount; // count of option alternatives @@ -13,19 +13,20 @@ struct Option { char** values; // values unsigned int valuecount; // size of the values, if more than one... - bool set; // boolean if this option has been set -}; + char set; // boolean if this option has been set +} Option; -struct CONode { - CONode* prev; - CONode* next; + +typedef struct _CONode { + //CONode* prev; + struct _CONode* next; Option* option; -}; +} CONode; -struct CmdOptions { - bool init; +typedef struct { + char init; CONode* options; -}; +} CmdOptions; /* * Main structure @@ -62,7 +63,7 @@ int CmdOptions_AddDescription(char* name, char* description); /** * Check if the option specified by name is set. */ -bool CmdOptions_IsSet(char* name); +int CmdOptions_IsSet(char* name); /** * Get first parameter of the option specified by name. */ @@ -85,5 +86,7 @@ double CmdOptions_GetDouble(char* name); */ int CmdOptions_GetAll(char* name, char** values, unsigned int* count); +int CmdOptions_Create(char* name); +CONode* CmdOptions_NodeGet(char* name); #endif