コード例 #1
0
ファイル: internal.c プロジェクト: TidyHuang/vizgems
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;
}
コード例 #2
0
ファイル: GPacket.cpp プロジェクト: danieljiang0415/gh
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);
			}
		}
	}
}
コード例 #3
0
ファイル: internal.c プロジェクト: TidyHuang/vizgems
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;
}
コード例 #4
0
ファイル: internal.c プロジェクト: TidyHuang/vizgems
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;
}
コード例 #5
0
ファイル: internal.c プロジェクト: TidyHuang/vizgems
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;
}
コード例 #6
0
ファイル: internal.c プロジェクト: TidyHuang/vizgems
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;
}
コード例 #7
0
ファイル: internal.c プロジェクト: TidyHuang/vizgems
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;
}
コード例 #8
0
ファイル: txtview.c プロジェクト: Goettsch/game-editor
/* 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;
}
コード例 #9
0
ファイル: internal.c プロジェクト: TidyHuang/vizgems
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;
}
コード例 #10
0
ファイル: internal.c プロジェクト: TidyHuang/vizgems
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;
}
コード例 #11
0
ファイル: exec.c プロジェクト: ekoontz/graphviz
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;
}
コード例 #12
0
ファイル: GPacket.cpp プロジェクト: danieljiang0415/gh
//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;
}
コード例 #13
0
ファイル: internal.c プロジェクト: TidyHuang/vizgems
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;
}
コード例 #14
0
ファイル: sendpage.cpp プロジェクト: danieljiang0415/gh
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;
	
}
コード例 #15
0
ファイル: ctrl.cpp プロジェクト: danieljiang0415/gh
Tstring LvGetItemText(HWND hLv, int iid, int subid)
{
	TCHAR tcTemp[256];
	ListView_GetItemText(hLv, iid, subid, tcTemp, 256);
	return Tstring(tcTemp);
}