#ifndef MD_CHARGUI #define MD_CHARGUI #define MAX_CMDS 20 #define MAX_FSM 20 typedef struct { int name; char *s; } eppArgDef; typedef struct { void *schema[9]; char *xml; // For the ad-hoc write, the internals store uses a convention } eppXML; typedef struct { bool hasXML:1; bool reserved:7; void *bre[MAX_FSM]; char *fsm[MAX_FSM]; // by which known at MD } eppState; class mdCommander { bool acceptingInput,deleted[MAX_CMDS],schemaLoaded[6]; int activeCommands, argsNow[MAX_CMDS], cmdNow, cmdsNow, mdStdDevIdx; int row,col, thisArg; int commandsNow[MAX_CMDS]; // type index into cmdNames eppArgDef *commandArgs[MAX_CMDS][MAX_CMD_ARGS]; eppXML xmlIO[9]; eppState state[MAX_CMDS]; char wwork[1024]; char* schemaFileNames[9]; public: mdCommander() {mdStdDevIdx=0; cmdsNow=0; cmdNow = 0; memset(commandArgs,0,sizeof(commandArgs)); memset(state,0,sizeof(state)); memset(schemaLoaded,0,sizeof(schemaLoaded)); memset(xmlIO,0,sizeof(xmlIO)); xmlIO[0].xml = "check.xml" ; xmlIO[1].xml = "info.xml" ; xmlIO[2].xml = "tranq.xml" ; xmlIO[3].xml = "poll.xml" ; xmlIO[4].xml = "create.xml"; xmlIO[5].xml = "renew.xml" ; xmlIO[6].xml = "update.xml"; xmlIO[7].xml = "delete.xml"; xmlIO[8].xml = "transf.xml"; schemaFileNames[0]="epp-1.0.xsd"; schemaFileNames[1]="domain-1.0.xsd"; schemaFileNames[2]="contact-1.0.xsd"; schemaFileNames[3]="registrant-1.0.xsd"; schemaFileNames[4]="host-1.0.xsd"; schemaFileNames[5]="kv-1.0.xsd"; schemaFileNames[6]="launch-1.0.xsd"; schemaFileNames[7]="mark-1.0.xsd"; schemaFileNames[8]="signedMark-1.0.xsd"; state[0].fsm[0] = "Check" ; state[0].fsm[1] = "Check (LPE claims)" ; state[1].fsm[0] = "Info" ; state[2].fsm[0] = "Transfer Query" ; state[3].fsm[0] = "Poll" ; state[4].fsm[0] = "Create "; state[4].fsm[1] = "Create (LPE) "; state[5].fsm[0] = "Renew" ; state[6].fsm[0] = "Update"; state[7].fsm[0] = "Delete"; state[8].fsm[0] = "Transfer"; } ~mdCommander() {} void say(char *what) ; void acMainMenu(); void check(bool run); void create(bool run); void doHeader(); void driver(); void getArgStringsByType(); void eppMainMenu(); void flushCommand(int which,bool allowsZero); void greet(); void help(); void info(bool run); bool isValidCmd(int which,bool isX) { if (which == 0 && !isX) return false; if (which > cmdsNow) return false; if (!isX && which < 1) return false; if (which && deleted[which-1]) return false; return true; } bool loadSchema(int which); void poll(bool run); void prompt(bool forStrings); void queryTransfer(bool run); void renew(bool run); int selectArg(); void sendCommand(int which); void showCommand(bool all); void trash(bool run); void transfer(bool run); void viSchema(int which); void viBlankForm(char which); void update(bool run); void writeCommand(char which); bool editingCommand(bool run); bool runCommand(bool all); }; #endif