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