Exemple #1
0
const char *
mfn_with(MFUNARGS)
{
    char vbuf[BUFFER_LEN];
    char *ptr, *valptr;
    int v, cnt;

    ptr = MesgParse(argv[0], argv[0]);
    CHECKRETURN(ptr,"WITH","arg 1");
    v = new_mvar(ptr, vbuf);
    if (v == 1)
	ABORT_MPI("WITH","Variable name too long");
    if (v == 2)
	ABORT_MPI("WITH","Too many variables already defined");
    valptr = MesgParse(argv[1], argv[1]);
    CHECKRETURN(valptr,"WITH","arg 2");
    *buf = '\0';
    strcpy(vbuf, valptr);
    for (cnt = 2; cnt < argc; cnt++) {
	ptr = MesgParse(argv[cnt],argv[cnt]);
	if (!ptr) {
	    sprintf(buf, "%s %cWITH%c (%d)", get_mvar("how"),
		    MFUN_LEADCHAR, MFUN_ARGEND, cnt);
	    notify(player, buf);
	    return NULL;
	}
    }
    free_top_mvar();
    return ptr;
}
Exemple #2
0
const char *
mfn_func(MFUNARGS)
{
	char *funcname;
	char *ptr=NULL, *def;
	char namebuf[BUFFER_LEN];
	char argbuf[BUFFER_LEN];
	char defbuf[BUFFER_LEN];
	int i;

	funcname = MesgParse(argv[0], namebuf, sizeof(namebuf));
	CHECKRETURN(funcname, "FUNC", "name argument (1)");

	def = argv[argc - 1];
	for (i = 1; i < argc - 1; i++) {
		ptr = MesgParse(argv[i], argbuf, sizeof(argbuf));
		CHECKRETURN(ptr, "FUNC", "variable name argument");
		snprintf(defbuf, sizeof(defbuf), "{with:%.*s,{:%d},%.*s}", MAX_MFUN_NAME_LEN, ptr, i,
				(BUFFER_LEN - MAX_MFUN_NAME_LEN - 20), def);
	}
	i = new_mfunc(funcname, defbuf);
	if (i == 1)
		ABORT_MPI("FUNC", "Function Name too long.");
	if (i == 2)
		ABORT_MPI("FUNC", "Too many functions defined.");

	return "";
}
Exemple #3
0
const char *
mfn_commas(MFUNARGS)
{
    int v, i, count;
    char *ptr;
    char buf2[BUFFER_LEN];
    char tmp[BUFFER_LEN];

    if (argc == 3)
	ABORT_MPI("COMMAS","Takes 1, 2, or 4 arguments");

    ptr = MesgParse(argv[0], argv[0]);
    CHECKRETURN(ptr,"COMMAS","arg 1");
    count = countlitems(argv[0], "\r");
    if (count == 0) return "";

    if (argc > 1) {
	ptr = MesgParse(argv[1], argv[1]);
	CHECKRETURN(ptr,"COMMAS","arg 2");
    } else {
	strcpy(argv[1], " and ");
    }

    if (argc > 2) {
	ptr = MesgParse(argv[2], buf2);
	CHECKRETURN(ptr,"COMMAS","arg 3");
	v = new_mvar(ptr, tmp);
	if (v == 1)
	    ABORT_MPI("COMMAS","Variable name too long");
	if (v == 2)
	    ABORT_MPI("COMMAS","Too many variables already defined");
    }

    *buf = '\0';
    for (i = 1; i <= count; i++) {
	ptr = getlitem(buf2, argv[0], "\r", i);
	if (argc > 2) {
	    strcpy(tmp, ptr);
	    ptr = MesgParse(argv[3], buf2);
	    CHECKRETURN(ptr,"COMMAS","arg 3");
	}
	strcat(buf, ptr);
	switch (count - i) {
	  case 0:
	    if (argc > 2) free_top_mvar();
	    return buf;
	    break;
	  case 1:
	    strcat(buf, argv[1]);
	    break;
	  default:
	    strcat(buf, ", ");
	    break;
	}
    }
    if (argc > 2) free_top_mvar();
    return buf;
}
const char *
mfn_filter(MFUNARGS)
{
    int iter_limit = MAX_MFUN_LIST_LEN;
    char buf2[BUFFER_LEN];
    char tmp[BUFFER_LEN];
    char   *ptr, *ptr2, *dptr;
    char *sepin = argv[3];
    char *sepbuf = argv[4];
    int seplen, v;

    ptr = MesgParse(argv[0],argv[0]);
    CHECKRETURN(ptr,"FILTER","arg 1");
    v = new_mvar(ptr, tmp);
    if (v == 1)
        ABORT_MPI("FILTER","Variable name too long.");
    if (v == 2)
        ABORT_MPI("FILTER","Too many variables already defined.");

    dptr = MesgParse(argv[1],argv[1]);
    CHECKRETURN(dptr,"FILTER","arg 2");
    if (argc > 3) {
        ptr = MesgParse(sepin,sepin);
        CHECKRETURN(ptr,"FILTER","arg 4");
        if (!*ptr)
            ABORT_MPI("FILTER","Can't use Null seperator string");
    } else {
        strcpy(sepin, "\r");
    }
    if (argc > 4) {
        ptr = MesgParse(sepbuf,sepbuf);
        CHECKRETURN(ptr,"FILTER","arg 5");
    } else {
        strcpy(sepbuf, sepin);
    }
    seplen = strlen(sepin);
    *buf = '\0';
    ptr = dptr;
    while (*ptr) {
        for (ptr2 = ptr; *ptr2 && strncmp(ptr2, sepin, seplen); ptr2++);
        if (*ptr2) {
            *ptr2 = '\0';
            ptr2 += seplen;
        }
        strcpy(tmp, ptr);
        dptr = MesgParse(argv[2],buf2);
        CHECKRETURN(dptr,"FILTER","arg 3");
        if (truestr(buf2)) {
            if (*buf) strcat(buf, sepbuf);
            strcat(buf, ptr);
        }
        ptr = ptr2;
        if (!(--iter_limit))
            ABORT_MPI("FILTER","Iteration limit exceeded");
    }
    free_top_mvar();
    return buf;
}
Exemple #5
0
const char *
mfn_debugif(MFUNARGS)
{
    char *ptr = MesgParse(argv[0], argv[0]);
    CHECKRETURN(ptr,"DEBUGIF","arg 1");
    if (truestr(argv[0])) {
	ptr = mesg_parse(player, what, perms, argv[1],
			   buf, BUFFER_LEN, (mesgtyp | MPI_ISDEBUG));
    } else {
	ptr = MesgParse(argv[1], buf);
    }
    CHECKRETURN(ptr,"DEBUGIF","arg 2");
    return buf;
}
Exemple #6
0
const char *
mfn_rand(MFUNARGS)
{
	int num = 0;
	dbref trg = (dbref) 0, obj = what;
	const char *pname, *ptr;
	int blessed = 0;

	pname = argv[0];
	if (argc == 2) {
		obj = mesg_dbref(descr, player, what, perms, argv[1], mesgtyp);
	}
	if (obj == PERMDENIED)
		ABORT_MPI("RAND", "Permission denied.");
	if (obj == UNKNOWN || obj == AMBIGUOUS || obj == NOTHING || obj == HOME)
		ABORT_MPI("RAND", "Match failed.");
	num = get_list_count(what, obj, perms, (char *)pname, mesgtyp, &blessed);
	if (!num)
		ABORT_MPI("RAND", "Failed list read.");
	ptr = get_list_item(what, obj, perms, (char *)pname, (((RANDOM() / 256) % num) + 1), mesgtyp, &blessed);
	if (!ptr)
		ABORT_MPI("RAND", "Failed list read.");
	trg = what;
	if (blessed) {
		mesgtyp |= MPI_ISBLESSED;
	} else {
		mesgtyp &= ~MPI_ISBLESSED;
	}
	if (Prop_ReadOnly(ptr) || Prop_Private(ptr) || Prop_SeeOnly(ptr) || Prop_Hidden(ptr))
		trg = obj;
	ptr = mesg_parse(descr, player, obj, trg, ptr, buf, BUFFER_LEN, mesgtyp);
	CHECKRETURN(ptr, "RAND", "listval");
	return ptr;
}
Exemple #7
0
const char *
mfn_evalbang(MFUNARGS)
{
	int i, len, len2;
	char buf2[BUFFER_LEN];
	char* ptr;

	strcpyn(buf, buflen, argv[0]);
	len = strlen(buf);
	for (i = 1; i < argc; i++) {
		len2 = strlen(argv[i]);
		if (len2 + len + 3 >= BUFFER_LEN) {
			if (len + 3 < BUFFER_LEN) {
				strncpy(buf + len, argv[i], (BUFFER_LEN - len - 3));
				buf[BUFFER_LEN - 3] = '\0';
			}
			break;
		}
		strcpyn(buf + len, buflen - len, ",");
		strcpyn(buf + len, buflen - len, argv[i]);
		len += len2;
	}
	strcpyn(buf2, sizeof(buf2), buf);
	ptr = mesg_parse(descr, player, what, perms, buf2, buf, BUFFER_LEN, mesgtyp);
	CHECKRETURN(ptr, "EVAL!", "arg 1");
	return buf;
}
Exemple #8
0
const char *
mfn_lexec(MFUNARGS)
{
	dbref trg = (dbref) 0, obj = what;
	char *pname;
	const char *ptr;
	int blessed = 0;

	pname = argv[0];
	if (argc == 2) {
		obj = mesg_dbref(descr, player, what, perms, argv[1], mesgtyp);
	}
	if (obj == PERMDENIED)
		ABORT_MPI("LEXEC", "Permission denied.");
	if (obj == UNKNOWN || obj == AMBIGUOUS || obj == NOTHING || obj == HOME)
		ABORT_MPI("LEXEC", "Match failed.");
	while (*pname == PROPDIR_DELIMITER)
		pname++;
	ptr = get_concat_list(player, what, perms, obj, (char *)pname, buf, BUFFER_LEN, 2, mesgtyp, &blessed);
	if (!ptr)
		ptr = "";
	trg = what;
	if (blessed) {
		mesgtyp |= MPI_ISBLESSED;
	} else {
		mesgtyp &= ~MPI_ISBLESSED;
	}
	if (Prop_ReadOnly(pname) || Prop_Private(pname) || Prop_SeeOnly(pname) || Prop_Hidden(pname))
		trg = obj;
	ptr = mesg_parse(descr, player, obj, trg, ptr, buf, BUFFER_LEN, mesgtyp);
	CHECKRETURN(ptr, "LEXEC", "listval");
	return ptr;
}
Exemple #9
0
const char *
mfn_default(MFUNARGS)
{
	char *ptr;

	*buf = '\0';
	ptr = MesgParse(argv[0], buf, buflen);
	CHECKRETURN(ptr, "DEFAULT", "arg 1");
	if (ptr && truestr(buf)) {
		if (!ptr)
			ptr = "";
	} else {
		ptr = MesgParse(argv[1], buf, buflen);
		CHECKRETURN(ptr, "DEFAULT", "arg 2");
	}
	return ptr;
}
Exemple #10
0
int DeviceIOClient::GetVideoOutputs(DevIOGetVideoOutputsResponse & resp)
{
	DevIOGetVideoOutputs req(m_proxy.soap);

	int nRes = m_proxy.GetVideoOutputs(req.d, resp.d);

	CHECKRETURN(nRes, "DeviceIOClient::GetVideoOutputs");
}
int DeviceServiceImpl::GetSystemDateAndTime(_tds__GetSystemDateAndTime *tds__GetSystemDateAndTime, _tds__GetSystemDateAndTimeResponse *tds__GetSystemDateAndTimeResponse)
{
	DevGetSystemDateAndTimeResponse dt(tds__GetSystemDateAndTimeResponse);

    int nRes = m_pBaseServer->GetDateAndTime(dt);

	CHECKRETURN(nRes, "DeviceServiceImpl::GetSystemDateAndTime");
};
int DeviceServiceImpl::GetUsers(_tds__GetUsers *tds__GetUsers, _tds__GetUsersResponse *tds__GetUsersResponse)
{
	DevGetUsersResponse resp(tds__GetUsersResponse);

    int nRes = m_pBaseServer->GetUsers(resp);

	CHECKRETURN(nRes, "DeviceServiceImpl::GetUsers");
}
Exemple #13
0
const char *
mfn_debug(MFUNARGS)
{
    char *ptr = mesg_parse(player, what, perms, argv[0],
			   buf, BUFFER_LEN, (mesgtyp | MPI_ISDEBUG));
    CHECKRETURN(ptr,"DEBUG","arg 1");
    return buf;
}
int ReceiverClient::GetReceivers(RecvGetReceiversResponse & resp)
{
	RecvGetReceivers req(m_proxy.soap);

	int nRes = m_proxy.GetReceivers(req.d, resp.d);

    CHECKRETURN(nRes, "ReceiverClient::GetReceivers");
}
int DisplayServiceImpl::SetLayout(_tls__SetLayout *tls__SetLayout, _tls__SetLayoutResponse *tls__SetLayoutResponse)
{
    DispSetLayout req(tls__SetLayout);

    int iRet = m_pBaseServer->SetLayout(req);

    CHECKRETURN(iRet, "DisplayServiceImpl::SetLayout");
}
int DisplayServiceImpl::CreatePaneConfiguration(_tls__CreatePaneConfiguration *tls__CreatePaneConfiguration, _tls__CreatePaneConfigurationResponse *tls__CreatePaneConfigurationResponse)
{
    DispCreatePaneConfiguration req(tls__CreatePaneConfiguration);
    DispCreatePaneConfigurationResponse resp(tls__CreatePaneConfigurationResponse);

    int iRet = m_pBaseServer->CreatePaneConfiguration(req, resp);

       // FIXME NO RESP SETTING
    CHECKRETURN(iRet, "DisplayServiceImpl::CreatePaneConfiguration");
}
Exemple #17
0
const char *
mfn_while(MFUNARGS)
{
	int iter_limit = MAX_MFUN_LIST_LEN;
	char buf2[BUFFER_LEN];
	char *ptr;

	*buf = '\0';
	while (1) {
		ptr = MesgParse(argv[0], buf2, sizeof(buf2));
		CHECKRETURN(ptr, "WHILE", "arg 1");
		if (!truestr(ptr))
			break;
		ptr = MesgParse(argv[1], buf, buflen);
		CHECKRETURN(ptr, "WHILE", "arg 2");
		if (!(--iter_limit))
			ABORT_MPI("WHILE", "Iteration limit exceeded");
	}
	return buf;
}
int DisplayServiceImpl::GetDisplayOptions(_tls__GetDisplayOptions *tls__GetDisplayOptions, _tls__GetDisplayOptionsResponse *tls__GetDisplayOptionsResponse)
{
	DispGetDisplayOptions req(tls__GetDisplayOptions);
    DispGetDisplayOptionsResponse resp(tls__GetDisplayOptionsResponse);

	std::string VOToken;
	req.GetVO(VOToken);

    int iRet = m_pBaseServer->GetDisplayOptions(VOToken, resp);

	CHECKRETURN(iRet, "DisplayServiceImpl::GetDisplayOptions");
}
int ReceiverClient::CreateReceiver(const std::string &uri, std::string & recvToken)
{
    RecvCreateReceiver req(m_proxy.soap);
    RecvCreateReceiverResponse resp(m_proxy.soap);

    req.setUri(uri);
    req.setMode(0);

    int nRes = m_proxy.CreateReceiver(req.d, resp.d);
    recvToken = resp.getToken();
    CHECKRETURN(nRes, "ReceiverClient::CreateReceiver");
}
Exemple #20
0
const char *
mfn_for(MFUNARGS)
{
    int   iter_limit = MAX_MFUN_LIST_LEN;
    char  tmp[BUFFER_LEN];
    char *ptr, *dptr;
    int   v, i, start, end, incr;

    ptr = MesgParse(argv[0],argv[0]);
    CHECKRETURN(ptr,"FOR","arg 1 (varname)");
    v = new_mvar(ptr, tmp);
    if (v == 1)
	ABORT_MPI("FOR","Variable name too long");
    if (v == 2)
	ABORT_MPI("FOR","Too many variables already defined");

    dptr = MesgParse(argv[1],argv[1]);
    CHECKRETURN(dptr,"FOR","arg 2 (start num)");
    start = atoi(dptr);

    dptr = MesgParse(argv[2],argv[2]);
    CHECKRETURN(dptr,"FOR","arg 3 (end num)");
    end = atoi(dptr);

    dptr = MesgParse(argv[3],argv[3]);
    CHECKRETURN(dptr,"FOR","arg 4 (increment)");
    incr = atoi(dptr);

    *buf = '\0';
    for (i = start; ((incr>=0 && i<=end) || (incr<0 && i>=end)); i += incr) {
	sprintf(tmp, "%d", i);
	dptr = MesgParse(argv[4],buf);
	CHECKRETURN(dptr,"FOR","arg 5 (repeated command)");
	if (!(--iter_limit))
	    ABORT_MPI("FOR","Iteration limit exceeded");
    }
    free_top_mvar();
    return buf;
}
int ReceiverClient::SetReceiverMode(const std::string & recvToken, bool bMode)
{
    RecvSetReceiverMode req(m_proxy.soap);
    RecvSetReceiverModeResponse resp(m_proxy.soap);

    req.setToken(recvToken);
    req.setMode(bMode);

    SIGRLOG(SIGRDEBUG2, "ReceiverClient::SetReceiverMode %s %d", req.getToken().c_str(), req.getMode());

    int nRes = m_proxy.SetReceiverMode(req.d, resp.d);
    CHECKRETURN(nRes, "ReceiverClient::SetReceiverMode");
}
int DeviceServiceImpl::SetSystemDateAndTime(_tds__SetSystemDateAndTime *tds__SetSystemDateAndTime, _tds__SetSystemDateAndTimeResponse *tds__SetSystemDateAndTimeResponse)
{
	if(tds__SetSystemDateAndTime->DateTimeType != tt__SetDateTimeType__Manual)
	{
		SIGRLOG(SIGRWARNING, "DeviceServiceImpl::SetSystemDateAndTime Time is not Manual");
		return SOAP_ERR;
	}

	DevSetSystemDateAndTime dt(tds__SetSystemDateAndTime);

    int nRes = m_pBaseServer->SetDateAndTime(dt);

	CHECKRETURN(nRes, "DeviceServiceImpl::SetSystemDateAndTime");
}
Exemple #23
0
const char *
mfn_if(MFUNARGS)
{
	char *fbr, *ptr;

	if (argc == 3) {
		fbr = argv[2];
	} else {
		fbr = "";
	}
	ptr = MesgParse(argv[0], buf, buflen);
	CHECKRETURN(ptr, "IF", "arg 1");
	if (ptr && truestr(buf)) {
		ptr = MesgParse(argv[1], buf, buflen);
		CHECKRETURN(ptr, "IF", "arg 2");
	} else if (*fbr) {
		ptr = MesgParse(fbr, buf, buflen);
		CHECKRETURN(ptr, "IF", "arg 3");
	} else {
		*buf = '\0';
		ptr = "";
	}
	return ptr;
}
int DisplayServiceImpl::GetLayout(_tls__GetLayout *tls__GetLayout, _tls__GetLayoutResponse *tls__GetLayoutResponse)
{

	DispGetLayout req(tls__GetLayout);
	DispGetLayoutResponse resp(tls__GetLayoutResponse);

	std::string requestedLayoutToken;
	req.GetLayout(requestedLayoutToken);

	
    int iRet = m_pBaseServer->GetLayout(requestedLayoutToken, resp);


	CHECKRETURN(iRet, "DisplayServiceImpl::GetLayout");
};
Exemple #25
0
const char *
mfn_and(MFUNARGS)
{
	char *ptr;
	char buf2[16];
	int i;

	for (i = 0; i < argc; i++) {
		ptr = MesgParse(argv[i], buf, buflen);
		snprintf(buf2, sizeof(buf2), "arg %d", i + 1);
		CHECKRETURN(ptr, "AND", buf2);
		if (!truestr(ptr)) {
			return "0";
		}
	}
	return "1";
}
Exemple #26
0
const char *
mfn_timesub(MFUNARGS)
{
	int num = 0;
	dbref trg = (dbref) 0, obj = what;
	const char *pname, *ptr;
	int period = 0, offset = 0;
	int blessed = 0;

	period = atoi(argv[0]);
	offset = atoi(argv[1]);
	pname = argv[2];
	if (argc == 4) {
		obj = mesg_dbref(descr, player, what, perms, argv[3], mesgtyp);
	}
	if (obj == PERMDENIED)
		ABORT_MPI("TIMESUB", "Permission denied.");
	if (obj == UNKNOWN || obj == AMBIGUOUS || obj == NOTHING || obj == HOME)
		ABORT_MPI("TIMESUB", "Match failed.");
	num = get_list_count(what, obj, perms, (char *)pname, mesgtyp, &blessed);
	if (!num)
		ABORT_MPI("TIMESUB", "Failed list read.");
	if (period < 1)
		ABORT_MPI("TIMESUB", "Time period too short.");
	offset = (int)((((long) time(NULL) + offset) % period) * num) / period;
	if (offset < 0)
		offset = -offset;
	ptr = get_list_item(what, obj, perms, (char *)pname, offset + 1, mesgtyp, &blessed);
	if (!ptr)
		ABORT_MPI("TIMESUB", "Failed list read.");
	trg = what;
	if (blessed) {
		mesgtyp |= MPI_ISBLESSED;
	} else {
		mesgtyp &= ~MPI_ISBLESSED;
	}
	if (Prop_ReadOnly(ptr) || Prop_Private(ptr) || Prop_SeeOnly(ptr) || Prop_Hidden(ptr))
		trg = obj;
	ptr = mesg_parse(descr, player, obj, trg, ptr, buf, BUFFER_LEN, mesgtyp);
	CHECKRETURN(ptr, "TIMESUB", "listval");
	return ptr;
}
Exemple #27
0
const char *
mfn_indexbang(MFUNARGS)
{
	dbref trg = (dbref) 0, obj = what;
	dbref tmpobj = (dbref) 0;
	const char *pname, *ptr;
	int blessed = 0;

	pname = argv[0];
	if (argc == 2) {
		obj = mesg_dbref(descr, player, what, perms, argv[1], mesgtyp);
	}
	if (obj == UNKNOWN || obj == AMBIGUOUS || obj == NOTHING || obj == HOME)
		ABORT_MPI("INDEX!", "Match failed.");
	if (obj == PERMDENIED)
		ABORT_MPI("INDEX!", "Permission denied.");
	tmpobj = obj;
	ptr = safegetprop_strict(player, obj, perms, pname, mesgtyp, &blessed);
	if (!ptr)
		ABORT_MPI("INDEX!", "Failed read.");
	if (!*ptr)
		return "";
	obj = tmpobj;
	ptr = safegetprop_strict(player, obj, perms, ptr, mesgtyp, &blessed);
	if (!ptr)
		ABORT_MPI("INDEX!", "Failed read.");
	trg = what;
	if (blessed) {
		mesgtyp |= MPI_ISBLESSED;
	} else {
		mesgtyp &= ~MPI_ISBLESSED;
	}
	if (Prop_ReadOnly(ptr) || Prop_Private(ptr) || Prop_SeeOnly(ptr) || Prop_Hidden(ptr))
		trg = obj;
	ptr = mesg_parse(descr, player, obj, trg, ptr, buf, BUFFER_LEN, mesgtyp);
	CHECKRETURN(ptr, "INDEX!", "listval");
	return ptr;
}
Exemple #28
0
const char *
mfn_lsort(MFUNARGS)
{
    char *litem[MAX_MFUN_LIST_LEN];
    char vbuf[BUFFER_LEN];
    char vbuf2[BUFFER_LEN];
    char *ptr, *ptr2, *tmp;
    int i, j, count;

    if (argc > 1 && argc < 4)
	ABORT_MPI("LSORT","Takes 1 or 4 arguments");
    for (i = 0; i < MAX_MFUN_LIST_LEN; i++)
	litem[i] = NULL;
    ptr = MesgParse(argv[0],argv[0]);
    CHECKRETURN(ptr,"LSORT","arg 1");
    if (argc > 1) {
	ptr2 = MesgParse(argv[1], argv[1]);
	CHECKRETURN(ptr2,"LSORT","arg 2");
	j = new_mvar(ptr2, vbuf);
	if (j == 1)
	    ABORT_MPI("LSORT","Variable name too long");
	if (j == 2)
	    ABORT_MPI("LSORT","Too many variables already defined");
	ptr2 = MesgParse(argv[2],argv[2]);
	CHECKRETURN(ptr2,"LSORT","arg 3");
	j = new_mvar(ptr2, vbuf2);
	if (j == 1)
	    ABORT_MPI("LSORT","Variable name too long");
	if (j == 2)
	    ABORT_MPI("LSORT","Too many variables already defined");
    }
    count = 0;
    while (*ptr) {
	for (ptr2 = ptr; *ptr2 && *ptr2 != '\r'; ptr2++);
	if (*ptr2 == '\r') *(ptr2++) = '\0';
	litem[count++] = ptr;
	ptr = ptr2;
	if (count >= MAX_MFUN_LIST_LEN)
	    ABORT_MPI("LSORT","Iteration limit exceeded");
    }
    for (i = 0; i < count; i++) {
	for (j = i + 1; j < count; j++) {
	    if (argc > 1) {
		strcpy(vbuf, litem[i]);
		strcpy(vbuf2, litem[j]);
		ptr = MesgParse(argv[3],buf);
		CHECKRETURN(ptr,"LSORT","arg 4");
		if (truestr(buf)) {
		    tmp = litem[i];
		    litem[i] = litem[j];
		    litem[j] = tmp;
		}
	    } else {
		if (alphanum_compare(litem[i], litem[j]) > 0) {
		    tmp = litem[i];
		    litem[i] = litem[j];
		    litem[j] = tmp;
		}
	    }
	}
    }
    *buf = '\0';
    for (i = 0; i < count; i++) {
	if (*buf) strcat(buf, "\r");
	strcat(buf, litem[i]);
    }
    if (argc > 1) {
	free_top_mvar();
	free_top_mvar();
    }
    return buf;
}
Exemple #29
0
/**
 *	Handles the message sent for the creation of housing hooks in the world.
 *
 *	This function is called whenever a housing hook should be created for a client.
 *
 *	@return cMessage - Returns a Create Object (0x0000F745) server message.
 */
cMessage cHooks::CreatePacket()
{
	cMessage cmCreate;

	char	szCommand[200];
	RETCODE	retcode;
	
	char	OwnerIDBuff[9];
	DWORD	OwnerID = 0x0L;

	sprintf( szCommand, "SELECT OwnerID FROM houses_covenants WHERE HouseID = %d;",m_dwHouseID);
	retcode = SQLPrepare( cDatabase::m_hStmt, (unsigned char *)szCommand, SQL_NTS );			CHECKRETURN(1, SQL_HANDLE_STMT, cDatabase::m_hStmt, NULL)
	retcode = SQLExecute( cDatabase::m_hStmt );
	
	retcode = SQLBindCol( cDatabase::m_hStmt, 1, SQL_C_CHAR, OwnerIDBuff, sizeof( OwnerIDBuff ), NULL );	CHECKRETURN(1, SQL_HANDLE_STMT, cDatabase::m_hStmt, 1)

	// Return SQL_SUCCESS if there is a house that corresponds to the hook's HouseID
	if (SQLFetch( cDatabase::m_hStmt ) == SQL_SUCCESS) {
		sscanf(OwnerIDBuff,"%08x",&OwnerID);
	}
	retcode = SQLCloseCursor( cDatabase::m_hStmt );					CHECKRETURN(0, SQL_HANDLE_STMT, cDatabase::m_hStmt, NULL)
	retcode = SQLFreeStmt( cDatabase::m_hStmt, SQL_UNBIND );


	float	flpScale;				// Scale used in Packet being Sent
	float	flmScale = 0;			// Model Data Scale
	DWORD	dwFlags1 = 0x00009081;  // Flags1
	
	/*
	dwModel
	0x0A8D	Floor Hook
	0x0A8E	Wall Hook
	0x0A8C	Ceiling Hook
	0x0A8D	Yard Hook
	0x0A8D	Roof Hook

	wModelID
	0x2DB1	Floor Hook
	0x25D6	Wall Hook
	0x2DB2	Ceiling Hook
	0x3187	Yard Hook
	0x3186	Roof Hook

	wIconID
	0x20C0
	*/

	WORD tBurden = 0;

	if (IsUsed == 1)
	{
//		cItemModels *h_model = cItemModels::FindModel(m_hook_item->GetItemModelID());
//		h_model->m_wBurden		//Burden (WORD, no padding)
//		tBurden += h_model->m_wBurden;
	}
/*
		//Loop through inventory and find all items.				
		for (int i = 0; i < this->m_hook_lstInventory.size(); i++)
		{
			//Find each item by it's GUID
			cObject *v_item = this->FindInventory(this->v_guids[i]);

			//Associate model with item
			cItemModels *v_model = cItemModels::FindModel(v_item->GetItemModelID());
//			v_item->GetGUID()		//Item GUID
//			v_model->m_dwFlags2		//10254018
//			v_model->m_strName.c_str()	//Item Name
//			v_model->m_wModel		//Model
//			v_model->m_wIcon		//Icon
//			v_model->m_wBurden		//Burden (WORD, no padding)
//			v_model->m_wHooks;		//Hook Type (WORD, no padding)
		}
*/
	cmCreate	<< 0xF745L 
				<< m_dwGUID 
				<< BYTE( 0x11 ) 
				<< BYTE( 0 ) 
				<< BYTE( 0 ) 
				<< BYTE( 0 );

	cmCreate << dwFlags1;

	cmCreate << WORD(0x0014);	// Type of portal 
	cmCreate << WORD(0x0000);	// Unknown
	
	//Flags1 Mask: 0x00009081
	{
		//Flags1 & 0x00008000 -- Location 
		cmCreate.pasteData( (UCHAR*)&m_Location, sizeof(m_Location) );	//Next comes the location

		//Flags1 & 0x00001000 -- DWORD ResourceID
		cmCreate << 0x3400002B;		// unknown ResourceID

		//Flags1 & 0x00000001 -- DWORD dwModel = 0x02000001; // the model.
		DWORD dwModel = 0x02000000L + m_dwModel;
		cmCreate << dwModel;

		//Flags1 & 0x00000080 -- unknown_green
			
		if (flmScale > 0)
		{
			flpScale = flmScale;// FLOAT flpScale
		}
		else
		{
			flpScale = 0.5;
		}
		cmCreate << flpScale;
	}

	// SeaGreens
	WORD wUnkFlag2 = 0x0000;
	WORD wUnkFlag3 = 0x0002;
	WORD wUnkFlag4 = 0x0000;
	WORD wUnkFlag6 = 0x0000;
	WORD wUnkFlag7 = 0x0000;
	WORD wUnkFlag8 = 0x0000;
	WORD wUnkFlag10 = 0x0000;

	cmCreate	<< m_wPositionSequence	// movement 0x0001
				<< wUnkFlag2			// animations
				<< wUnkFlag3			// bubble modes
				<< wUnkFlag4			// num jumps
				<< m_wNumPortals 
				<< wUnkFlag6			// anim count
				<< wUnkFlag7			// overrides
				<< wUnkFlag8
				<< WORD(0x7A51)			// m_wNumLogins // 0x0D4B
				<< wUnkFlag10;
	
	DWORD dwFlags2 = 0x3220003A;		// Flags2 -- Defines what data comes next

	cmCreate << dwFlags2;
	
	cmCreate << Name( );	// Object's Name
	
	cmCreate << WORD(m_wModel) << WORD(m_wIcon);

	DWORD dwObjectFlags1 = 0x00000200; // 0x0200 Containers
	DWORD dwObjectFlags2 = 0x00000015; // 0x0010 is not an npc; 0x0004 cannot be picked up; 0x0001 can be opened (false if locked) 

	cmCreate << dwObjectFlags1 << dwObjectFlags2;

	// Flags2 & 0x00000002 -- BYTE itemSlots
	cmCreate << BYTE(0x01);		// number of item slots

	// Flags2 & 0x00000008 -- BYTE value
	cmCreate << BYTE(0x0A);		// object value

	// Flags2 & 0x00000010 -- DWORD unknown10
	cmCreate << 0x30000000L;
	
	// Unknown
	cmCreate	<< BYTE( 0 )
				<< BYTE( 0 )
				<< BYTE( 0 );

	// Flags2 & 0x00000020 -- float approachDistance
	float flApproach = 10.0f;	// 0x41200000
	cmCreate << flApproach;		// distance a player will walk to use the object

	// Flags2 & 0x00200000 -- WORD burden
	tBurden += WORD(0x0005);
	cmCreate << tBurden;		// total burden of this object

	// Flags2 & 0x02000000 -- ObjectID owner
	cmCreate << OwnerID;		// the owner of this object

	// Flags2 & 0x20000000 -- hookType Unknown
	cmCreate << WORD(0xFFFF);	// always -1

	// Flags2 & 0x10000000 -- hookable On
/*
	0x0001	floor hook
	0x0002	wall hook
	0x0004	ceiling hook
	0x0008	yard hook
	0x0010	roof hook
*/
	cmCreate << WORD(0xFFFF);	// the types of hooks this object may be placed on (-1 for hooks)

	return cmCreate;
}
Exemple #30
0
/* Main method. */
int main (int argc, const char * argv[])
{
	kern_return_t err;
	
	mach_port_t masterPort = 0;
	bool suspend;
	SInt32 productId, vendorId;	
	SInt32 count;
	CFMutableDictionaryRef matcher;
	CFNumberRef numberRef;
	io_iterator_t iterator;
	io_service_t usbService;
    IOCFPlugInInterface **pluginInterface;
	IOUSBDeviceInterface245 **deviceInterface;
	SInt32 score;

	// Display usage info
	if(argc != 4)
	{
		printf("Usage:\n"
			"  usbpower suspend <product id> <vendor id>\n"
			"  usbpower resume <product id> <vendor id>\n"
			"\n"
			"Vendor and product IDs can be obtained by running the command:\n"
			"  system_profiler SPUSBDataType\n"
			"\n"
			"They must be given as four-digit hexadecimal numbers beginning with 0x\n"
			"(as shown by the above command).\n"
			"\n"
			"Example:\n"
			"  usbpower suspend 0x0040 0x045e\n"
			"\n"
			"Copyright 2009 Samuel Marshall - http://www.leafdigital.com/software/\n"
			"Released under Gnu Public License v3.\n");
		return 0;
	}
	
	// Check first parameter
	if(strcmp(argv[1], "suspend") == 0)
	{
		suspend = true;
	}
	else if(strcmp(argv[1], "resume") == 0)
	{
		suspend = false;
	}
	else
	{
		fprintf(stderr, "Invalid argument '%s': expecting suspend, resume\n", argv[1]);
		return -1;
	}
	
	// Check other two parameters
	productId = convertHexId(argv[2]);
	if(productId == -1)
	{
		fprintf(stderr, "Invalid product id '%s': expecting four-digit hexadecimal e.g. 0x0040\n", argv[2]);
		return -1;
	}
	vendorId = convertHexId(argv[3]);
	if(vendorId == -1)
	{
		fprintf(stderr, "Invalid vendor id '%s': expecting four-digit hexadecimal e.g. 0x045e\n", argv[3]);
		return -1;
	}
	
	// Allocate master IO port
	err = IOMasterPort(MACH_PORT_NULL, &masterPort);
	CHECKRETURN(err, "Failed to open master port");
	
	// Create matching dictionary
    matcher = IOServiceMatching(kIOUSBDeviceClassName);
    if(!matcher)
    {
		fprintf(stderr, "Failed to create matching dictionary\n");
		return -1;
    }
	
	// Create number references and add to dictionary
    numberRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &productId);
    if(!numberRef)
    {
        fprintf(stderr, "Failed to create number reference for product ID\n");
        return -1;
    }
    CFDictionaryAddValue(matcher, CFSTR(kUSBProductID), numberRef);
    CFRelease(numberRef);
    numberRef = 0;
    numberRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &vendorId);
    if(!numberRef)
    {
        fprintf(stderr, "Failed to create number reference for vendor ID\n");
        return -1;
    }
    CFDictionaryAddValue(matcher, CFSTR(kUSBVendorID), numberRef);
    CFRelease(numberRef);
    numberRef = 0;
	
	// Get matches from dictionary (this eats the dictionary)
    err = IOServiceGetMatchingServices(masterPort, matcher, &iterator);
	CHECKRETURN(err, "Failed to get matching servivces");
    matcher = 0;
    
	count = 0;
    while((usbService = IOIteratorNext(iterator)))
    {
		// Get plugin interface
		err = IOCreatePlugInInterfaceForService(
			usbService, kIOUSBDeviceUserClientTypeID, kIOCFPlugInInterfaceID, &pluginInterface, &score);
		CHECKRETURN(err, "Failed to create plugin interface for service");
		if(!pluginInterface)
		{
			fprintf(stderr, "Service did not return plugin interface\n");
			return -1;
		}
		
		// Now query for suitable USB device interface
		err = (*pluginInterface)->QueryInterface(pluginInterface, 
			CFUUIDGetUUIDBytes(kIOUSBDeviceInterfaceID245), (LPVOID)&deviceInterface);
		IODestroyPlugInInterface(pluginInterface);

		// Open device
		err = (*deviceInterface)->USBDeviceOpen(deviceInterface);
		CHECKRETURN(err, "Error opening device");
		
		// Suspend or resume device
		err = (*deviceInterface)->USBDeviceSuspend(deviceInterface, suspend);
		CHECKRETURN(err, "Error suspending or resuming device");
		
		// Close device
		err = (*deviceInterface)->USBDeviceClose(deviceInterface);
		CHECKRETURN(err, "Error closing device");
		err = (*deviceInterface)->Release(deviceInterface);
		CHECKRETURN(err, "Error releading device interface");
		
		// Release service
		IOObjectRelease(usbService);
		count++;
    }
	
	// Release iterator
    IOObjectRelease(iterator);
    iterator = 0;
	
	// Free master IO port
    mach_port_deallocate(mach_task_self(), masterPort);
	
	// Check count
	if(!count)
	{
		fprintf(stderr, "Device with product ID 0x%04x and vendor ID 0x%04x not found\n", productId, vendorId);
		return -1;
	}
	
    return 0;	
}