int Itypeof (int argc, lvar_t *argv) { if (T_ISTABLE (argv[0].o)) rtno = Tstring ("table"); else if (T_ISSTRING (argv[0].o)) rtno = Tstring ("string"); else if (T_ISNUMBER (argv[0].o)) rtno = Tstring ("number"); return L_SUCCESS; }
CGPacket::CGPacket(LPBYTE lpData, DWORD dwLen, CProperty& Property) { if (lpData == NULL || dwLen == 0)return; m_pBuf = new BYTE[dwLen]; memcpy(m_pBuf, lpData, dwLen); m_dwSize = dwLen; m_property = Property; m_pRawBuf = lpData; m_bFiltered = FALSE; if (Property.s != INVALID_SOCKET) { sockaddr_in sin; int sinlen = sizeof(sin); if (0 == getpeername(Property.s, (sockaddr*)&sin, &sinlen)) { TCHAR tszTemp[256], tszIP[64]; DWORD dwLen = sizeof(tszTemp), dwPort; if (0 == WSAAddressToString((SOCKADDR *)&sin, sizeof(SOCKADDR), NULL, tszTemp, (LPDWORD)&dwLen)) { _stscanf_s(tszTemp, _T("%[0-9,.]:%d"), tszIP, sizeof(tszIP), &dwPort); m_property.strIpAddr = tszIP; m_property.dwPort = dwPort; TCHAR szBuf[32]; _itot(dwPort, szBuf, 10); m_property.strPort = Tstring(szBuf); } } } }
int Iconcat (int argc, lvar_t *argv) { Tobj ao; char buf2[50]; char *s; int i, n, bufi; for (bufi = 0, i = 0; i < argc; i++) { ao = argv[i].o; switch (Tgettype (argv[i].o)) { case T_STRING: if (bufi + (n = strlen (Tgetstring (ao)) + 1) > bufn) growbufp (bufi + n); for (s = Tgetstring (ao); *s; s++) bufp[bufi++] = *s; break; case T_INTEGER: if (bufi + 50 > bufn) growbufp (bufi + 50); sprintf (buf2, "%ld", Tgetinteger (ao)); for (s = buf2; *s; s++) bufp[bufi++] = *s; break; case T_REAL: if (bufi + 50 > bufn) growbufp (bufi + 50); sprintf (buf2, "%f", Tgetreal (ao)); for (s = buf2; *s; s++) bufp[bufi++] = *s; break; } } bufp[bufi] = '\000'; rtno = Tstring (bufp); return L_SUCCESS; }
int Iread (int argc, lvar_t *argv) { if (IOread ((int) Tgetnumber (argv[0].o), bufp, bufn) > 0) rtno = Tstring (bufp); else rtno = NULL; return L_SUCCESS; }
int Iquote (int argc, lvar_t *argv) { Tobj so, ao, qo; char *s, *s1, *s2, *qs, *as; char buf2[50]; int n, bufi; if ( (Tgettype ((so = argv[0].o)) != T_STRING && !T_ISNUMBER (so)) || (argc > 1 && Tgettype ((qo = argv[1].o)) != T_STRING) || (argc > 2 && Tgettype ((ao = argv[2].o)) != T_STRING) ) return L_FAILURE; switch (Tgettype (so)) { case T_STRING: s = Tgetstring (so); break; case T_INTEGER: sprintf (buf2, "%ld", Tgetinteger (so)); s = &buf2[0]; break; case T_REAL: sprintf (buf2, "%f", Tgetreal (so)); s = &buf2[0]; break; } if (argc > 1) qs = Tgetstring (qo); else qs = "'\""; if (argc > 2) as = Tgetstring (ao); else as = NULL; bufi = 0; if ((n = strlen (s) + 3) * 2 > bufn) growbufp (n * 2); /* the *2 is max for chars to quote */ if (as) bufp[bufi++] = *as; for (s1 = s; *s1; s1++) { for (s2 = qs; *s2; s2++) if (*s1 == *s2) { bufp[bufi++] = '\\', bufp[bufi++] = *s1; break; } if (!*s2) { switch (*s1) { case '\n': bufp[bufi++] = '\\', bufp[bufi++] = 'n'; break; case '\r': bufp[bufi++] = '\\', bufp[bufi++] = 'r'; break; default: bufp[bufi++] = *s1; break; } } } if (as) bufp[bufi++] = *as; bufp[bufi] = '\000'; rtno = Tstring (bufp); return L_SUCCESS; }
int Igetenv (int argc, lvar_t *argv) { char *s; if (!T_ISSTRING (argv[0].o)) return L_FAILURE; rtno = NULL; if (!(s = getenv (Tgetstring (argv[0].o))) || !*s) return L_SUCCESS; rtno = Tstring (s); return L_SUCCESS; }
int Intos (int argc, lvar_t *argv) { double d; d = Tgetnumber (argv[0].o); if ((long) d == d) sprintf (bufp, "%ld", (long) d); else sprintf (bufp, "%f", d); rtno = Tstring (bufp); return L_SUCCESS; }
/* LEFTY builtin */ int TXTask (int argc, lvar_t *argv) { Tobj so, ao; char buf[1200]; char *sp, *ap; int mode; mode = 0; ap = NULL; if (argc < 2) mode = G_QWSTRING; else { so = argv[1].o; if (T_ISSTRING (so)) { sp = Tgetstring (so); if (strcmp (sp, "string") == 0) mode = G_QWSTRING; else if (strcmp (sp, "file") == 0) mode = G_QWFILE; else if (strcmp (sp, "choice") == 0) mode = G_QWCHOICE; else mode = 0; } } if (argc < 3) ap = NULL; else { ao = argv[2].o; if (T_ISSTRING (ao)) ap = Tgetstring (ao); } if (Gqueryask (queryws[mode], Tgetstring (argv[0].o), ap, buf, 1200) == 0) rtno = Tstring (buf); else rtno = NULL; #ifndef NOQUERYFIX if (mode == G_QWCHOICE) { Gwattr_t data[1]; data[0].id = G_ATTRMODE; data[0].u.t = "choice"; Gdestroywidget (queryws[mode]); queryws[mode] = Gcreatewidget (-1, G_QUERYWIDGET, 1, &data[0]); } #endif return L_SUCCESS; }
int Ihtmlquote (int argc, lvar_t *argv) { Tobj so; char *s, *s1; int n, bufi; if (Tgettype ((so = argv[0].o)) != T_STRING) return L_FAILURE; s = Tgetstring (so); bufi = 0; if ((n = strlen (s) + 1) * 4 > bufn) growbufp (n * 4); /* the *4 is max for chars to quote */ for (s1 = s; *s1; s1++) { switch (*s1) { case '%': bufp[bufi++] = '%'; bufp[bufi++] = '2'; bufp[bufi++] = '5'; break; case ';': bufp[bufi++] = '%'; bufp[bufi++] = '3'; bufp[bufi++] = 'B'; break; case '&': bufp[bufi++] = '%'; bufp[bufi++] = '2'; bufp[bufi++] = '6'; break; case '+': bufp[bufi++] = '%'; bufp[bufi++] = '2'; bufp[bufi++] = 'B'; break; case ' ': bufp[bufi++] = '+'; break; default: bufp[bufi++] = *s1; break; } } bufp[bufi] = '\000'; rtno = Tstring (bufp); return L_SUCCESS; }
int Ireadline (int argc, lvar_t *argv) { char *s; int m, n; s = bufp, n = bufn; while ((m = IOreadline ((int) Tgetnumber (argv[0].o), s, n)) != -1) { if (m < n - 1) break; m += (s - bufp); growbufp (bufn + BUFINCR); s = bufp + m, n = bufn - m; } if (m != -1) rtno = Tstring (bufp); else rtno = NULL; return L_SUCCESS; }
static Tobj eeval(Tobj co, int ci) { Tobj v1o, v2o, v3o; Ttype_t ttype; Ctype_t ctype; tnk_t tnk; num_tt lnum, rnum; long m1, m2; int i1, i2, res; tailrec: errdo = TRUE; v1o = NULL; ctype = TCgettype(co, ci); switch (ctype) { case C_ASSIGN: i1 = TCgetfp(co, ci); if ((v1o = eeval(co, TCgetnext(co, i1))) == NULL) { err(ERRNORHS, ERR4, co, TCgetnext(co, i1)); return NULL; } m1 = Mpushmark(v1o); res = getvar(co, i1, &tnk); Mpopmark(m1); if (res == -1) { err(ERRNOLHS, ERR3, co, i1); return NULL; } setvar(tnk, v1o); return v1o; case C_OR: case C_AND: case C_NOT: i1 = TCgetfp(co, ci); if ((v1o = eeval(co, i1)) == NULL) err(ERRNORHS, ERR4, co, i1); switch (ctype) { case C_OR: if (boolop(v1o) == TRUE) return Ttrue; if ((v1o = eeval(co, TCgetnext(co, i1))) == NULL) err(ERRNORHS, ERR4, co, TCgetnext(co, i1)); return (boolop(v1o) == TRUE) ? Ttrue : Tfalse; case C_AND: if (boolop(v1o) == FALSE) return Tfalse; if ((v1o = eeval(co, TCgetnext(co, i1))) == NULL) err(ERRNORHS, ERR4, co, TCgetnext(co, i1)); return (boolop(v1o) == FALSE) ? Tfalse : Ttrue; case C_NOT: return (boolop(v1o) == TRUE) ? Tfalse : Ttrue; } /* NOT REACHED */ return Tfalse; case C_EQ: case C_NE: case C_LT: case C_LE: case C_GT: case C_GE: i1 = TCgetfp(co, ci); if ((v1o = eeval(co, i1)) == NULL) err(ERRNORHS, ERR4, co, i1); else m1 = Mpushmark(v1o); if ((v2o = eeval(co, TCgetnext(co, i1))) == NULL) err(ERRNORHS, ERR4, co, TCgetnext(co, i1)); if (v1o) Mpopmark(m1); return (orderop(v1o, ctype, v2o) == TRUE) ? Ttrue : Tfalse; case C_PLUS: case C_MINUS: case C_MUL: case C_DIV: case C_MOD: case C_UMINUS: i1 = TCgetfp(co, ci); if ((lnum.type = TCgettype(co, i1)) == C_INTEGER) lnum.u.i = TCgetinteger(co, i1); else if (lnum.type == C_REAL) lnum.u.d = TCgetreal(co, i1); else if ((lnum.u.no = eeval(co, i1)) == NULL) { err(ERRNORHS, ERR4, co, i1); return NULL; } if (ctype == C_UMINUS) { if (!(v1o = arithop(&lnum, ctype, NULL))) err(ERRNORHS, ERR4, co, ci); return v1o; } if (lnum.type != C_INTEGER && lnum.type != C_REAL) m1 = Mpushmark(lnum.u.no); i1 = TCgetnext(co, i1); if ((rnum.type = TCgettype(co, i1)) == C_INTEGER) rnum.u.i = TCgetinteger(co, i1); else if (rnum.type == C_REAL) rnum.u.d = TCgetreal(co, i1); else if ((rnum.u.no = eeval(co, i1)) == NULL) err(ERRNORHS, ERR4, co, i1); if (lnum.type != C_INTEGER && lnum.type != C_REAL) Mpopmark(m1); if (!(v1o = arithop(&lnum, ctype, &rnum))) err(ERRNORHS, ERR4, co, ci); return v1o; case C_PEXPR: ci = TCgetfp(co, ci); goto tailrec; case C_FCALL: return efcall(co, ci); case C_INTEGER: return Tinteger(TCgetinteger(co, ci)); case C_REAL: return Treal(TCgetreal(co, ci)); case C_STRING: return Tstring(TCgetstring(co, ci)); case C_GVAR: case C_LVAR: case C_PVAR: return getval(co, ci); case C_FUNCTION: return Tcode(TCgetaddr(co, ci), ci, (int) TCgetinteger(co, TCgetfp(co, ci))); case C_TCONS: v1o = Ttable(0); m1 = Mpushmark(v1o); for (i1 = TCgetfp(co, ci); i1 != C_NULL; i1 = TCgetnext(co, TCgetnext(co, i1))) { if (!(v3o = eeval(co, TCgetnext(co, i1)))) { err(ERRNORHS, ERR4, co, TCgetnext(co, i1)); continue; } m2 = Mpushmark(v3o); if (!(v2o = eeval(co, i1))) { err(ERRNOLHS, ERR3, co, i1); Mpopmark(m2); continue; } ttype = Tgettype(v2o); if (ttype == T_INTEGER || ttype == T_REAL || ttype == T_STRING) Tinso(v1o, v2o, v3o); else err(ERRNOLHS, ERR1, co, i1); } Mpopmark(m1); return v1o; case C_STMT: for (i1 = TCgetfp(co, ci); i1 != C_NULL;) if ((i2 = TCgetnext(co, i1)) != C_NULL) { eeval(co, i1); i1 = i2; } else { ci = i1; goto tailrec; } /* NOT REACHED */ break; case C_IF: i1 = TCgetfp(co, ci); if (!(v1o = eeval(co, i1))) err(ERRNORHS, ERR5, co, i1); if (boolop(v1o) == TRUE) { ci = TCgetnext(co, i1); goto tailrec; } else if ((ci = TCgetnext(co, TCgetnext(co, i1))) != C_NULL) goto tailrec; break; case C_WHILE: ewhilest(co, ci); break; case C_FOR: eforst(co, ci); break; case C_FORIN: eforinst(co, ci); break; case C_BREAK: pljtype = PLJ_BREAK; longjmp(*pljbufp1, 1); /* NOT REACHED */ break; case C_CONTINUE: pljtype = PLJ_CONTINUE; longjmp(*pljbufp1, 1); /* NOT REACHED */ break; case C_RETURN: if ((i1 = TCgetfp(co, ci)) != C_NULL) rtno = eeval(co, i1); pljtype = PLJ_RETURN; longjmp(*pljbufp2, 1); /* NOT REACHED */ break; default: panic1(POS, "eeval", "unknown program token type %d", ctype); } return v1o; }
//2,高级过滤 L=20|01=0C|02=0B|20=CC|IP=211.1.1.1|P=9900 条件必须都要满足 BOOL CGPacket::AdvancedMach(Tstring& str) { std::map<Tstring, Tstring> matchmap; int splitpos = 0, pos = 0; while (TRUE) { splitpos = str.find(_T('|'), pos); Tstring strSub; if (Tstring::npos != splitpos) { strSub = str.substr(pos, splitpos - pos); } else { strSub = str.substr(pos); } int assignpos; assignpos = strSub.find(_T('=')); if (Tstring::npos != assignpos) { Tstring key, value; key = strSub.substr(0, assignpos); value = strSub.substr(assignpos+1); matchmap[key] = value; } if (splitpos == Tstring::npos) break; pos = splitpos + 1; } //2,高级过滤 L=20|01=0C|02=0B|20=CC|IP=211.1.1.1|P=9900 条件必须都要满足 std::map<Tstring, Tstring>::iterator i; for (i = matchmap.begin(); i != matchmap.end(); i++) { Tstring Key, Value; Key = (*i).first; Value = (*i).second; if (Key == Tstring(_T("L"))) { if (m_dwSize != _ttoi(Value.c_str())) { return FALSE; } } else if (Key == Tstring(_T("IP"))) { if (m_property.strIpAddr != Value) { return FALSE; } } else if (Key == Tstring(_T("P"))) { if (m_property.strPort != Value) { return FALSE; } } else { if (m_pBuf[_ttoi(Key.c_str())] != _ttoi(Value.c_str())) { return FALSE; } } } return TRUE; }
int Isplit (int argc, lvar_t *argv) { Tobj so, fo; char *sp, *sp2, *s; char fc, tc, qmode; long rtnm, rtni; int bufi, qflag; if ( Tgettype ((so = argv[0].o)) != T_STRING || Tgettype ((fo = argv[1].o)) != T_STRING ) return L_FAILURE; qflag = (argc == 3) ? FALSE : TRUE; sp = Tgetstring (so); s = Tgetstring (fo); if (s[0] == '\\' && s[1] == 'n') fc = '\n'; else fc = s[0]; rtno = Ttable (4); rtnm = Mpushmark (rtno); rtni = 0; if (s[0] == 0) { for (sp2 = sp; *sp2; sp2++) { tc = *(sp2 + 1), *(sp2 + 1) = '\000'; Tinsi (rtno, rtni++, Tstring (sp2)); *(sp2 + 1) = tc; } } else if (qflag && (fc == ' ' || fc == ' ')) { while (*sp == fc) sp++; while (*sp) { bufi = 0; qmode = 0; for (sp2 = sp; *sp2; sp2++) { if (bufi == bufn) growbufp (bufn + BUFINCR); if (*sp2 == '"' || *sp2 == '\'') { if (qmode) { if (qmode == *sp2) qmode = 0; else bufp[bufi++] = *sp2; } else qmode = *sp2; } else if (*sp2 == fc && !qmode) break; else bufp[bufi++] = *sp2; } if (bufi == bufn) growbufp (bufn + BUFINCR); bufp[bufi] = 0; Tinsi (rtno, rtni++, Tstring (bufp)); while (*sp2 == fc) sp2++; sp = sp2; } } else { while (*sp) { for (sp2 = sp; *sp2 && *sp2 != fc; sp2++) ; tc = *sp2, *sp2 = '\000'; Tinsi (rtno, rtni++, Tstring (sp)); *sp2 = tc; if (*sp2) { sp2++; if (!*sp2) Tinsi (rtno, rtni++, Tstring ("")); } sp = sp2; } } Mpopmark (rtnm); return L_SUCCESS; }
Tstring CSendPage::PreProcessPackeTstring(Tstring& tstrStr ) { Tstring tstrTemp, tstrRet; Tstring::size_type posLeftBracket = 0, posRightBracket = -1; posLeftBracket = tstrStr.find(_T("[")); if (posLeftBracket == Tstring::npos) { return tstrStr; } tstrRet = tstrStr.substr( 0, posLeftBracket); ParseRightBracket: DWORD dwBracketDataSize; posRightBracket = tstrStr.find(_T("]"), posLeftBracket); if (posRightBracket == Tstring::npos) { return _T(""); } dwBracketDataSize = posRightBracket - posLeftBracket -1 ; tstrTemp = tstrStr.substr(posLeftBracket + 1, dwBracketDataSize); TCHAR tszTemp[1024]; INT iInc; TCHAR tszBracket[32], tszNum[32]; TCHAR ch, *ptStr, sign; int i, j, flag; i=0, j=0, flag=0; ptStr = (TCHAR*)tstrTemp.c_str(); do{ ch = *ptStr++; if(ch == _T('+') || ch == _T('-')) { sign = ch; flag = !flag; } else if(!flag) { tszBracket[i++] = ch; }else { tszNum[j++] = ch; } }while(ch != _T('\0')); tszBracket[i] = _T('\0'); tszNum[j] = _T('\0'); //todo inc or dec the string tstrRet += Tstring(tszBracket); BYTE *pHexBuf = new BYTE[i]; DWORD dwSelHexSize = Utility::StringLib::Tstring2Hex(tszBracket, pHexBuf); switch (dwSelHexSize) { case 1: *pHexBuf += (sign == _T('+') ? _ttoi(tszNum) : 0 - _ttoi(tszNum)); break; case 2: *(WORD*)pHexBuf = htons(htons(*(WORD*)pHexBuf) + (sign == _T('+') ? _ttoi(tszNum) : 0 - _ttoi(tszNum))); break; case 4: *(DWORD*)pHexBuf = htonl(htonl(*(DWORD*)pHexBuf) + (sign == _T('+') ? _ttoi(tszNum) : 0 - _ttoi(tszNum))); break; default: delete[]pHexBuf; return _T(""); } tstrTemp = Utility::StringLib::Hex2Tstring(pHexBuf, dwSelHexSize); delete[]pHexBuf; tstrTemp = Tstring(_T("[")) + tstrTemp + (sign == _T('+') ?Tstring(_T("+")):Tstring(_T("-"))) + Tstring(tszNum) + Tstring(_T("]")); tstrStr.replace(posLeftBracket, dwBracketDataSize + 2, tstrTemp); posLeftBracket = tstrStr.find(_T("["), posRightBracket); if (posLeftBracket != Tstring::npos){ tstrRet += tstrStr.substr( posRightBracket+1, posLeftBracket - posRightBracket - 1 ); goto ParseRightBracket; }else { tstrRet += tstrStr.substr( posRightBracket+1 ); } return tstrRet; }
Tstring LvGetItemText(HWND hLv, int iid, int subid) { TCHAR tcTemp[256]; ListView_GetItemText(hLv, iid, subid, tcTemp, 256); return Tstring(tcTemp); }