mirror of https://github.com/arendst/Tasmota.git
commit
2ea0594f8b
|
@ -420,8 +420,11 @@ struct SCRIPT_MEM {
|
|||
#ifdef USE_SCRIPT_GLOBVARS
|
||||
UDP_FLAGS udp_flags;
|
||||
#endif
|
||||
char web_mode;
|
||||
} glob_script_mem;
|
||||
|
||||
|
||||
|
||||
bool event_handeled = false;
|
||||
|
||||
|
||||
|
@ -768,8 +771,14 @@ char *script;
|
|||
script_mem += size;
|
||||
|
||||
#ifdef SCRIPT_LARGE_VNBUFF
|
||||
glob_script_mem.vnp_offset = (uint16_t*)script_mem;
|
||||
size = vars*sizeof(uint16_t);
|
||||
uint32_t alignedmem = (uint32_t)script_mem;
|
||||
if (alignedmem&1) {
|
||||
alignedmem++;
|
||||
size = vars*sizeof(uint16_t)+1;
|
||||
} else {
|
||||
size = vars*sizeof(uint16_t);
|
||||
}
|
||||
glob_script_mem.vnp_offset = (uint16_t*)alignedmem;
|
||||
#else
|
||||
glob_script_mem.vnp_offset = (uint8_t*)script_mem;
|
||||
size = vars*sizeof(uint8_t);
|
||||
|
@ -3107,7 +3116,10 @@ chknext:
|
|||
goto exit;
|
||||
}
|
||||
#endif // USE_FT5206
|
||||
|
||||
if (!strncmp(vname, "wm", 2)) {
|
||||
fvar = glob_script_mem.web_mode;
|
||||
goto exit;
|
||||
}
|
||||
if (!strncmp(vname, "wday", 4)) {
|
||||
fvar = RtcTime.day_of_week;
|
||||
goto exit;
|
||||
|
@ -3718,6 +3730,29 @@ void esp32_beep(int32_t freq ,uint32_t len) {
|
|||
|
||||
//#define IFTHEN_DEBUG
|
||||
|
||||
char *scripter_sub(char *lp, uint8_t fromscriptcmd) {
|
||||
lp += 1;
|
||||
char *slp = lp;
|
||||
uint8_t plen = 0;
|
||||
while (*lp) {
|
||||
if (*lp=='\n'|| *lp=='\r'|| *lp=='(') {
|
||||
break;
|
||||
}
|
||||
lp++;
|
||||
plen++;
|
||||
}
|
||||
if (fromscriptcmd) {
|
||||
char *sp = glob_script_mem.scriptptr;
|
||||
glob_script_mem.scriptptr = glob_script_mem.scriptptr_bu;
|
||||
Run_Scripter(slp, plen, 0);
|
||||
glob_script_mem.scriptptr = sp;
|
||||
} else {
|
||||
Run_Scripter(slp, plen, 0);
|
||||
}
|
||||
lp = slp;
|
||||
return lp;
|
||||
}
|
||||
|
||||
#define IF_NEST 8
|
||||
// execute section of scripter
|
||||
int16_t Run_Scripter(const char *type, int8_t tlen, char *js) {
|
||||
|
@ -4107,7 +4142,16 @@ int16_t Run_script_sub(const char *type, int8_t tlen, JsonParserObject *jo) {
|
|||
goto next_line;
|
||||
}
|
||||
#endif //ESP32
|
||||
|
||||
else if (!strncmp(lp, "wcs", 3)) {
|
||||
lp+=4;
|
||||
// skip one space after cmd
|
||||
char tmp[256];
|
||||
Replace_Cmd_Vars(lp ,1 , tmp, sizeof(tmp));
|
||||
WSContentFlush();
|
||||
WSContentSend_P(PSTR("%s"),tmp);
|
||||
WSContentFlush();
|
||||
goto next_line;
|
||||
}
|
||||
else if (!strncmp(lp,"=>",2) || !strncmp(lp,"->",2) || !strncmp(lp,"+>",2) || !strncmp(lp,"print",5)) {
|
||||
// execute cmd
|
||||
uint8_t sflag = 0,pflg = 0,svmqtt,swll;
|
||||
|
@ -4170,25 +4214,7 @@ int16_t Run_script_sub(const char *type, int8_t tlen, JsonParserObject *jo) {
|
|||
goto next_line;
|
||||
} else if (!strncmp(lp, "=#", 2)) {
|
||||
// subroutine
|
||||
lp += 1;
|
||||
char *slp = lp;
|
||||
uint8_t plen = 0;
|
||||
while (*lp) {
|
||||
if (*lp=='\n'|| *lp=='\r'|| *lp=='(') {
|
||||
break;
|
||||
}
|
||||
lp++;
|
||||
plen++;
|
||||
}
|
||||
if (fromscriptcmd) {
|
||||
char *sp = glob_script_mem.scriptptr;
|
||||
glob_script_mem.scriptptr = glob_script_mem.scriptptr_bu;
|
||||
Run_Scripter(slp, plen, 0);
|
||||
glob_script_mem.scriptptr = sp;
|
||||
} else {
|
||||
Run_Scripter(slp, plen, 0);
|
||||
}
|
||||
lp = slp;
|
||||
lp = scripter_sub(lp, fromscriptcmd);
|
||||
goto next_line;
|
||||
} else if (!strncmp(lp, "=(", 2)) {
|
||||
lp += 2;
|
||||
|
@ -6474,10 +6500,10 @@ uint32_t cnt;
|
|||
}
|
||||
|
||||
void ScriptWebShow(char mc) {
|
||||
uint8_t web_script,xflg = 0;
|
||||
uint8_t web_script;
|
||||
glob_script_mem.web_mode = mc;
|
||||
if (mc=='w' || mc=='x') {
|
||||
if (mc=='x') {
|
||||
xflg = 1;
|
||||
mc='$';
|
||||
}
|
||||
web_script = Run_Scripter(">w", -2, 0);
|
||||
|
@ -6543,11 +6569,22 @@ void ScriptWebShow(char mc) {
|
|||
} else {
|
||||
goto nextwebline;
|
||||
}
|
||||
} else if (!strncmp(lp, "%=#", 3)) {
|
||||
// subroutine
|
||||
lp = scripter_sub(lp + 1, 0);
|
||||
goto nextwebline;
|
||||
}
|
||||
|
||||
Replace_Cmd_Vars(lp, 1, tmp, sizeof(tmp));
|
||||
char *lin = tmp;
|
||||
if ((!mc && (*lin!='$')) || (mc=='w' && (*lin!='$'))) {
|
||||
/*if (!mc || mc=='w') {
|
||||
if (*lin=='$') {
|
||||
lin++;
|
||||
if (!strncmp(lin,"gc(", 3)) {
|
||||
goto exgc;
|
||||
}
|
||||
}*/
|
||||
// normal web section
|
||||
if (*lin=='@') {
|
||||
lin++;
|
||||
|
|
Loading…
Reference in New Issue