-
Notifications
You must be signed in to change notification settings - Fork 9
/
scpi.cpp
68 lines (58 loc) · 2.68 KB
/
scpi.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "scpi.h"
bool SCPI::commandCompare(const QString& command, const QString& shortForm, const QString& longForm, bool getSuffix, QString *suffix, bool getArgument, QString *argument) {
bool res = true;
if (getSuffix) {
QString cmdCompareTo = command.left(command.indexOf(' '));
bool longFormUsed = false;
if (cmdCompareTo.left(longForm.length()).compare(longForm, Qt::CaseInsensitive) == 0)
longFormUsed = true;
else if (cmdCompareTo.left(shortForm.length()).compare(shortForm, Qt::CaseInsensitive) == 0)
longFormUsed = false;
else
res = false;
if (res) {
if (getArgument && argument)
*argument = command.right(command.length() - command.lastIndexOf(' ') - 1);
if (suffix) {
if ((longFormUsed && longForm.length() == cmdCompareTo.length()) ||
(!longFormUsed && shortForm.length() == cmdCompareTo.length()))
*suffix = "1"; //Çíà÷åíèå ïî óìîë÷àíèþ, åñëè íå óêàçàíî
else {
if (longFormUsed)
*suffix = cmdCompareTo.right(cmdCompareTo.length() - longForm.length());
else
*suffix = cmdCompareTo.right(cmdCompareTo.length() - shortForm.length());
//res = convertOk;
}
}
}
} else {
QString commandToCheck = command;
if (getArgument) {
if (argument)
*argument = command.right(command.length() - command.lastIndexOf(' ') - 1);
commandToCheck = command.left(command.indexOf(' '));
}
if (commandToCheck.compare(shortForm, Qt::CaseInsensitive) == 0 || commandToCheck.compare(longForm, Qt::CaseInsensitive) == 0) {
// nothing to do
} else {
res = false;
}
}
return res;
}
bool SCPI::scpiParse(const QStringList& command, const QString& shortForm, const QString& longForm, bool getSuffix, QString *suffix, bool getArgument, QString *argument, QStringList& commandSequence, int level) {
bool res = false;
if (command.size() > level) {
if (commandCompare(command[level], shortForm, longForm, getSuffix, suffix, getArgument, argument)) {
if (!getArgument) { //Íå ïîñëåäíÿÿ âåòêà äåðåâà êîìàíä
if (commandSequence.size() < level + 1)
commandSequence.push_back(command[level]);
else
commandSequence[level] = command[level];
}
res = true;
}
}
return res;
}