1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "script_basicinstruction.h"
16 #include <unistd.h>
17 #include "script_loadscript.h"
18 #include "script_manager_impl.h"
19 #include "script_registercmd.h"
20 #include "script_utils.h"
21
22 using namespace uscript;
23 using namespace std;
24
25 namespace BasicInstruction {
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)26 int32_t UScriptInstructionAbort::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
27 {
28 int32_t result = 1;
29 int32_t ret = context.GetParam(0, result);
30 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
31 return ((result == 0) ? USCRIPT_ABOART : USCRIPT_SUCCESS);
32 }
33
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)34 int32_t UScriptInstructionAssert::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
35 {
36 int32_t result = 1;
37 int32_t ret = context.GetParam(0, result);
38 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
39 return ((result == 0) ? USCRIPT_ASSERT : USCRIPT_SUCCESS);
40 }
41
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)42 int32_t UScriptInstructionSleep::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
43 {
44 int32_t seconds = 1;
45 int32_t ret = context.GetParam(0, seconds);
46 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
47 sleep(seconds);
48 return USCRIPT_SUCCESS;
49 }
50
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)51 int32_t UScriptInstructionConcat::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
52 {
53 int32_t ret = 0;
54 std::string str;
55 ret = context.GetParam(0, str);
56 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
57
58 for (int32_t i = 1; i < context.GetParamCount(); i++) {
59 switch (context.GetParamType(i)) {
60 case UScriptContext::PARAM_TYPE_INTEGER: {
61 int32_t v;
62 ret = context.GetParam(i, v);
63 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
64 str.append(to_string(v));
65 break;
66 }
67 case UScriptContext::PARAM_TYPE_FLOAT: {
68 float v;
69 ret = context.GetParam(i, v);
70 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
71 str.append(to_string(v));
72 break;
73 }
74 case UScriptContext::PARAM_TYPE_STRING: {
75 std::string v;
76 ret = context.GetParam(i, v);
77 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
78 str.append(v);
79 break;
80 }
81 default:
82 break;
83 }
84 }
85 context.PushParam(str);
86 return USCRIPT_SUCCESS;
87 }
88
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)89 int32_t UScriptInstructionIsSubString::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
90 {
91 std::string str;
92 std::string subStr;
93 int32_t ret = context.GetParam(0, str);
94 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
95 ret = context.GetParam(1, subStr);
96 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
97 string::size_type last = str.find(subStr);
98 if (last == string::npos) {
99 context.PushParam(0);
100 } else {
101 context.PushParam(1);
102 }
103 return USCRIPT_SUCCESS;
104 }
105
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)106 int32_t UScriptInstructionStdout::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
107 {
108 int32_t ret;
109 for (int32_t i = 0; i < context.GetParamCount(); i++) {
110 if (context.GetParamType(i) == UScriptContext::PARAM_TYPE_INTEGER) {
111 int32_t v;
112 ret = context.GetParam(i, v);
113 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
114 std::cout << v << " ";
115 } else if (context.GetParamType(i) == UScriptContext::PARAM_TYPE_FLOAT) {
116 float v;
117 ret = context.GetParam(i, v);
118 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
119 std::cout << v << " ";
120 } else if (context.GetParamType(i) == UScriptContext::PARAM_TYPE_STRING) {
121 std::string v;
122 ret = context.GetParam(i, v);
123 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
124 std::cout << v << " ";
125 }
126 }
127 std::cout << std::endl;
128 return USCRIPT_SUCCESS;
129 }
130 } // namespace BasicInstruction
131