#ifndef _FLAGS_
#define _FLAGS_ 
#include <limits.h>
#include <stdio.h>
#include "memory.h"
#include "misc.h"
#include "array.h"
#include "strings.h"
typedef struct flag {
  char *flagsname;
  char *flaglname;
  char *flagexpl;
  int deflt;
  int value;
  int min;
  int max;
} FLAG_NODE, *FLAG;
typedef struct flagstore {
  ARRAY store;
} FLAGSTORE_NODE, *FLAGSTORE;
typedef NAT FLAGID;
FLAGSTORE flag_CreateStore(MEMORY);
void flag_DeleteStore(MEMORY, FLAGSTORE);
void flag_PrintStore(FLAGSTORE);
void flag_PrintStoreUsage(FLAGSTORE);
void flag_PrintPartialStoreUsage(FLAGSTORE, unsigned, unsigned);
FLAGID flag_CreateFlag(MEMORY, FLAGSTORE, const char *, const char *, const char *, int, int, int);
char* flag_StoreGetFlagSName(FLAGSTORE, FLAGID);
char* flag_StoreGetFlagLName(FLAGSTORE, FLAGID);
int flag_StoreGetFlagValue(FLAGSTORE, FLAGID);
void flag_StoreSetFlagValue(FLAGSTORE, FLAGID, int);
int flag_StoreGetFlagMin(FLAGSTORE, FLAGID);
int flag_StoreGetFlagMax(FLAGSTORE, FLAGID);
int flag_StoreGetNumberOfFlags(FLAGSTORE);
#endif
