99 |
VMFnResult* CoreVMFunction_wait::exec(VMFnArgs* args) { |
VMFnResult* CoreVMFunction_wait::exec(VMFnArgs* args) { |
100 |
ExecContext* ctx = dynamic_cast<ExecContext*>(vm->currentVMExecContext()); |
ExecContext* ctx = dynamic_cast<ExecContext*>(vm->currentVMExecContext()); |
101 |
VMIntExpr* expr = dynamic_cast<VMIntExpr*>(args->arg(0)); |
VMIntExpr* expr = dynamic_cast<VMIntExpr*>(args->arg(0)); |
102 |
ctx->suspendMicroseconds = expr->evalInt(); |
int us = expr->evalInt(); |
103 |
this->result.flags = STMT_SUSPEND_SIGNALLED; |
if (us < 0) { |
104 |
|
wrnMsg("wait(): argument may not be negative! Aborting script!"); |
105 |
|
this->result.flags = STMT_ABORT_SIGNALLED; |
106 |
|
} else if (us == 0) { |
107 |
|
wrnMsg("wait(): argument may not be zero! Aborting script!"); |
108 |
|
this->result.flags = STMT_ABORT_SIGNALLED; |
109 |
|
} else { |
110 |
|
ctx->suspendMicroseconds = us; |
111 |
|
this->result.flags = STMT_SUSPEND_SIGNALLED; |
112 |
|
} |
113 |
return &result; |
return &result; |
114 |
} |
} |
115 |
|
|
180 |
} |
} |
181 |
|
|
182 |
/////////////////////////////////////////////////////////////////////////// |
/////////////////////////////////////////////////////////////////////////// |
183 |
|
// built-in script function: in_range() |
184 |
|
|
185 |
|
VMFnResult* CoreVMFunction_in_range::exec(VMFnArgs* args) { |
186 |
|
int i = args->arg(0)->asInt()->evalInt(); |
187 |
|
int lo = args->arg(1)->asInt()->evalInt(); |
188 |
|
int hi = args->arg(2)->asInt()->evalInt(); |
189 |
|
if (lo > hi) { // swap lo and hi |
190 |
|
int tmp = lo; |
191 |
|
lo = hi; |
192 |
|
hi = tmp; |
193 |
|
} |
194 |
|
return successResult(i >= lo && i <= hi); |
195 |
|
} |
196 |
|
|
197 |
|
/////////////////////////////////////////////////////////////////////////// |
198 |
// built-in script function: sh_left() |
// built-in script function: sh_left() |
199 |
|
|
200 |
VMFnResult* CoreVMFunction_sh_left::exec(VMFnArgs* args) { |
VMFnResult* CoreVMFunction_sh_left::exec(VMFnArgs* args) { |