1 /***********************************************************************/
2 /* Open Visualization Data Explorer */
3 /* (C) Copyright IBM Corp. 1989,1999 */
4 /* ALL RIGHTS RESERVED */
5 /* This code licensed under the */
6 /* "IBM PUBLIC LICENSE - Open Visualization Data Explorer" */
7 /***********************************************************************/
8
9 #include <dxconfig.h>
10 #include "../base/defines.h"
11
12
13 #include "ErrorDialogManager.h"
14 #include "LinkHandler.h"
15 #include "Dictionary.h"
16 #include "CmdEntry.h"
17 #include "PacketIF.h"
18 #include <ctype.h>
19 #include <stdarg.h>
20
LinkHandler(PacketIF * packetIF)21 LinkHandler::LinkHandler(PacketIF *packetIF)
22 {
23 this->packetIF = packetIF;
24 Dictionary *dict = new Dictionary();
25 this->commandEntry = new CmdEntry(dict, (void *)this);
26 }
27
~LinkHandler()28 LinkHandler::~LinkHandler()
29 {
30 delete this->commandEntry;
31 }
32
addCommand(const char * command,CmdEntryFunction func)33 void LinkHandler::addCommand(const char *command, CmdEntryFunction func)
34 {
35 CmdEntry *cmd;
36 Dictionary *dict = this->commandEntry->getDictionary();
37
38 if (func == NULL)
39 {
40 Dictionary *d = new Dictionary;
41 cmd = new CmdEntry(d, (void *)this);
42 }
43 else
44 {
45 cmd = new CmdEntry(func, (void *)this);
46 }
47
48 dict->addDefinition(command, (void*)cmd);
49 }
50
addSubCommand(const char * command,const char * subcommand,CmdEntryFunction func)51 void LinkHandler::addSubCommand(const char *command,
52 const char *subcommand, CmdEntryFunction func)
53 {
54 Dictionary *dict = this->commandEntry->getDictionary();
55 Dictionary *subdict;
56 CmdEntry *oe = (CmdEntry *)dict->findDefinition(command);
57 CmdEntry *ne;
58
59 if (! oe)
60 {
61 fprintf(stderr, "adding subcommand (%s) to nonexistent command (%s)\n",
62 subcommand, command);
63 }
64
65 subdict = oe->getDictionary();
66 if (! subdict)
67 {
68 fprintf(stderr, "adding subcommand (%s) to bad command (%s)\n",
69 subcommand, command);
70 }
71
72 ne = new CmdEntry(func, (void *)this);
73 subdict->addDefinition(subcommand, (void*)ne);
74 }
75
addCommand(const char * command,Command * func)76 void LinkHandler::addCommand(const char *command,
77 Command *func)
78 {
79 CmdEntry *cmd;
80 Dictionary *dict = this->commandEntry->getDictionary();
81
82 if (func == NULL)
83 {
84 Dictionary *d = new Dictionary;
85 cmd = new CmdEntry(d, (void *)this);
86 }
87 else
88 {
89 cmd = new CmdEntry(func);
90 }
91
92 dict->addDefinition(command, (void*)cmd);
93 }
94
addSubCommand(const char * command,const char * subcommand,Command * func)95 void LinkHandler::addSubCommand(const char *command,
96 const char *subcommand,
97 Command *func)
98 {
99 Dictionary *dict = this->commandEntry->getDictionary();
100 Dictionary *subdict;
101 CmdEntry *oe = (CmdEntry *)dict->findDefinition(command);
102 CmdEntry *ne;
103
104 if (! oe)
105 {
106 fprintf(stderr, "adding subcommand (%s) to nonexistent command (%s)\n",
107 subcommand, command);
108 }
109
110 subdict = oe->getDictionary();
111 if (! subdict)
112 {
113 fprintf(stderr, "adding subcommand (%s) to bad command (%s)\n",
114 subcommand, command);
115 }
116
117 ne = new CmdEntry(func);
118 subdict->addDefinition(subcommand, (void*)ne);
119 }
120
executeLinkCommand(const char * commandString,int id)121 boolean LinkHandler::executeLinkCommand(const char *commandString, int id)
122 {
123 return this->commandEntry->parse(commandString, id);
124 }
125
126 //
127 // We implement this so that
128 // 1) LinkHandlers can send packets, and
129 // 2) LinkHandlers don't have to be complete friends of PacketIF
130 //
sendPacket(int packetType,int packetid,const char * data,int length)131 void LinkHandler::sendPacket(int packetType, int packetid,
132 const char *data, int length)
133 {
134 this->getPacketIF()->sendPacket(packetType, packetid, data,length);
135 }
136
137