|
|
|
/*
|
|
|
|
Checks if a valid Command Line is avaiable
|
|
|
|
Copyright (C) 1998 Martin Vogt
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU Library General Public License as published by
|
|
|
|
the Free Software Foundation.
|
|
|
|
|
|
|
|
For more information look at the file COPYRIGHT in this package
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#include "parser.h"
|
|
|
|
|
|
|
|
|
|
|
|
Parser::Parser() {
|
|
|
|
commandLine=new CommandLine();
|
|
|
|
parseString=new Buffer(200);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Parser::~Parser() {
|
|
|
|
delete commandLine;
|
|
|
|
delete parseString;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Parser::setParseString(char* parseString){
|
|
|
|
(this->parseString)->setData(parseString);
|
|
|
|
// clear everything in commandline
|
|
|
|
commandLine->clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Parser::parse() {
|
|
|
|
int commandCounter=0;
|
|
|
|
|
|
|
|
parse(parseString->getData(),&commandCounter);
|
|
|
|
commandLine->setCommandCount(commandCounter);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Parser::parse(char* strStart,int* nCommand){
|
|
|
|
char* doppelPkt;
|
|
|
|
char* current;
|
|
|
|
char* space;
|
|
|
|
|
|
|
|
if (strlen(strStart) == 0) return;
|
|
|
|
|
|
|
|
doppelPkt=strchr(strStart,':');
|
|
|
|
if (doppelPkt == NULL) return;
|
|
|
|
(*doppelPkt)='\0';
|
|
|
|
commandLine->setIdentifier(*nCommand,strStart);
|
|
|
|
strStart=++doppelPkt;
|
|
|
|
current=strStart;
|
|
|
|
|
|
|
|
// Now two possibilities:
|
|
|
|
// a command with Msg : means the rest ist the value
|
|
|
|
// a command different from Msg means: further processing
|
|
|
|
|
|
|
|
if (strcmp("Msg",commandLine->getIdentifier(*nCommand)) == 0) {
|
|
|
|
commandLine->setValue((*nCommand),current);
|
|
|
|
(*nCommand)++;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Now two possibilities:
|
|
|
|
// a command with "Ret:" means string until the the ")" is the value
|
|
|
|
// a command different from "Ret:" means: the string until the first space
|
|
|
|
// ist the value
|
|
|
|
if (strcmp("Ret",commandLine->getIdentifier(*nCommand)) == 0) {
|
|
|
|
char* seperator;
|
|
|
|
seperator=strchr(current,')');
|
|
|
|
if (seperator == NULL) {
|
|
|
|
commandLine->setValue((*nCommand),current);
|
|
|
|
(*nCommand)++;
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
(*seperator)='\0';
|
|
|
|
current++;
|
|
|
|
commandLine->setValue((*nCommand),current);
|
|
|
|
(*nCommand)++;
|
|
|
|
seperator++;
|
|
|
|
if (strlen(seperator) == 0) return;
|
|
|
|
parse(++seperator,&(*nCommand));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
space=strchr(current,' ');
|
|
|
|
if (space == NULL) {
|
|
|
|
commandLine->setValue((*nCommand),current);
|
|
|
|
(*nCommand)++;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
(*space)='\0';
|
|
|
|
commandLine->setValue((*nCommand),current);
|
|
|
|
parse(++space,&(++(*nCommand)));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int Parser::isOK(){
|
|
|
|
// a Commandline ist valid when it contains :
|
|
|
|
|
|
|
|
// * 2 * (identifer/value)
|
|
|
|
// * first identifier ist "Command"
|
|
|
|
// * second identifier is "Msg"
|
|
|
|
|
|
|
|
|
|
|
|
// or:
|
|
|
|
// 3 identifier
|
|
|
|
// first: "Command"
|
|
|
|
// second "Ret"
|
|
|
|
// third: "Msg"
|
|
|
|
|
|
|
|
if (commandLine->getCommandCount() == 2){
|
|
|
|
if (strcmp("Command",commandLine->getIdentifier(0)) != 0) return 0;
|
|
|
|
if (strcmp("Msg",commandLine->getIdentifier(1)) != 0) return 0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (commandLine->getCommandCount() == 3){
|
|
|
|
if (strcmp("Command",commandLine->getIdentifier(0)) != 0) return 0;
|
|
|
|
if (strcmp("Ret",commandLine->getIdentifier(1)) != 0) return 0;
|
|
|
|
if (strcmp("Msg",commandLine->getIdentifier(2)) != 0) return 0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
CommandLine* Parser::getCommandLine(){
|
|
|
|
return commandLine;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|