示例#1
0
void create_conf(GETS4_CONFIG *new_pools,char* fileName)
{
    cJSON *root,*fld,*array;
    char *out;
    FILE* fp = fopen(fileName, "w+");
     if(fp==NULL)
    {
     printf("open error\n");
    }

    root=cJSON_CreateObject();
	cJSON_AddItemToObject(root, "pools", array=cJSON_CreateArray());;
    int i;
    for(i=0;i<3;i++)
    {
    cJSON_AddItemToArray(array,fld=cJSON_CreateObject());
    cJSON_AddStringToObject(fld, "url", new_pools->pools_data[i].url);
    cJSON_AddStringToObject(fld, "user", new_pools->pools_data[i].user);
    cJSON_AddStringToObject(fld, "pass", new_pools->pools_data[i].pass);
    }
    //cJSON_AddStringToObject(root, "api-listen", new_pools->api_listen);
    //cJSON_AddStringToObject(root, "api-network",new_pools->api_network);
    if(1==new_pools->api_listen)
     cJSON_AddTrueToObject(root, "api-listen");
    else if(0==new_pools->api_listen)
     cJSON_AddFalseToObject(root, "api-listen");

    if(1==new_pools->api_network)
     cJSON_AddTrueToObject(root, "api-network");
    else if(0==new_pools->api_network)
     cJSON_AddFalseToObject(root, "api-network");

    if(1==new_pools->bitmain_nobeeper)
     cJSON_AddTrueToObject(root, "bitmain-nobeeper");
	if(1==new_pools->bitmain_notempoverctrl)
     cJSON_AddTrueToObject(root, "bitmain-notempoverctrl");

    cJSON_AddStringToObject(root, "api-allow" , new_pools->api_allow);
    cJSON_AddStringToObject(root, "bitmain-freq", new_pools->bitmain_freq);
    cJSON_AddStringToObject(root, "bitmain-voltage", new_pools->bitmain_voltage);

    out=cJSON_Print(root);
    /*//
    //no use
     char *more_str=",\n    \"api-listen\":	true,\n     \"api-network\":	true\n}";
     i=strlen(out);
     out[i-2]='\0';
     out=(char *)realloc(out,(i+50)*sizeof(char));
     strcat(out,more_str);
   //*/
    fprintf(fp,"%s",out);
    fclose(fp);

    cJSON_Delete(root);
    free(out);
    out = NULL;
    root = NULL;

}
示例#2
0
static void cjson_add_true_should_fail_with_null_pointers(void)
{
    cJSON *root = cJSON_CreateObject();

    TEST_ASSERT_NULL(cJSON_AddTrueToObject(NULL, "true"));
    TEST_ASSERT_NULL(cJSON_AddTrueToObject(root, NULL));

    cJSON_Delete(root);
}
示例#3
0
/*create a json
 * {
 *	"name":"duanqi",
 *	"info":{
 *		"age":30,
 *		"sex":"male",
 *		"height":165,
 *		"work":true,
 *		"son":true
 *	}
 * }*/
void createOne(cJSON *root)
{
	cJSON *item = NULL;
	//root = cJSON_CreateObject();
	cJSON_AddStringToObject(root,"name","duanqi");
	cJSON_AddItemToObject(root,"info",item = cJSON_CreateObject());
	cJSON_AddNumberToObject(item,"age",30);
	cJSON_AddStringToObject(item,"sex","male");
	cJSON_AddNumberToObject(item,"height",165);
	cJSON_AddTrueToObject(item,"work");
	cJSON_AddTrueToObject(item,"son");
}
int PublishData(jNet *pJnet, int source)
{
    int res;

    cJSON *root, *son1, *son2;
    char *out;

    root = cJSON_CreateArray();

    cJSON_AddItemToArray(root, son1=cJSON_CreateObject());
    cJSON_AddStringToObject(son1, "hwid", gAgent);
    cJSON_AddStringToObject(son1, "type", "AGENT");
    cJSON_AddItemToObject(son1, "values", son2=cJSON_CreateObject());
    cJSON_AddNumberToObject(son2, "temperature", GetRandTemp());
    if (source == 0)  cJSON_AddFalseToObject(son2, "error");
    else cJSON_AddTrueToObject(son2, "error");

    cJSON_AddItemToArray(root, son1=cJSON_CreateObject());
    cJSON_AddStringToObject(son1, "hwid", "ABCDEF0123456");
    cJSON_AddStringToObject(son1, "type", "SENSOR");
    cJSON_AddItemToObject(son1, "values", son2=cJSON_CreateObject());
    cJSON_AddNumberToObject(son2, "lumen", Read8591(0));
    cJSON_AddNumberToObject(son2, "Volt", Read8591(3));

    out=cJSON_PrintUnformatted(root);
    cJSON_Delete(root);
    printf("Publishing %s\n", out);

    res = jNetPublishT(pJnet, gTopicUp, out);
    //printf("result %d\n", res);
    free(out);
    return res;
}
示例#5
0
void COMMUNICATION_chat_to_all( char *msg, CONNECTED_CLIENT *client ) {
    cJSON *root = cJSON_CreateObject();
    cJSON *data = cJSON_CreateObject();
    char *output;

    cJSON_AddTrueToObject( root, "success" );
    cJSON_AddStringToObject( root, "data_type", "chat_message" );
    cJSON_AddItemToObject( root, "data", data );

    cJSON_AddStringToObject( data, "text", msg );
    if( strlen( client->name ) > 0 ) {
        cJSON_AddStringToObject( data, "user", client->name );
    } else {
        cJSON_AddNumberToObject( data, "user", client->socket_descriptor );
    }

    output = cJSON_Print( root );

    COMMUNICATION_send_to_all( output );

    cJSON_Delete( root );
    root = NULL;

    free( output );
    output = NULL;
}
示例#6
0
文件: JSON.cpp 项目: eranif/codelite
void JSONItem::append(const JSONItem& element)
{
    if(!_json) { return; }

    switch(element.getType()) {
    case cJSON_False:
        cJSON_AddFalseToObject(_json, element.getName().mb_str(wxConvUTF8).data());
        break;

    case cJSON_True:
        cJSON_AddTrueToObject(_json, element.getName().mb_str(wxConvUTF8).data());
        break;

    case cJSON_NULL:
        cJSON_AddNullToObject(_json, element.getName().mb_str(wxConvUTF8).data());
        break;

    case cJSON_Number:
        cJSON_AddNumberToObject(_json, element.getName().mb_str(wxConvUTF8).data(), element.getValue().GetLong());
        break;

    case cJSON_String:
        cJSON_AddStringToObject(_json, element.getName().mb_str(wxConvUTF8).data(),
                                element.getValue().GetString().mb_str(wxConvUTF8).data());
        break;

    case cJSON_Array:
    case cJSON_Object:
        cJSON_AddItemToObject(_json, element.getName().mb_str(wxConvUTF8).data(), element._json);
        break;
    }
}
示例#7
0
    void Client::startGame(bool isDefaultLogic, std::string firstTurn)
    {
        if((_state != ConnectionState::connected) || (_socket == NULL)){
            if(_turnlistener != NULL)
			{
				_turnlistener->onStartGameDone(ResultCode::connection_error);
			}
            return;
        }
        
        int byteLen;
        byte *req;
        
        std::string payload;
        cJSON *payloadJSON;
        payloadJSON = cJSON_CreateObject();
        if(isDefaultLogic == true)
            cJSON_AddTrueToObject(payloadJSON, "isDefaultLogic");
        else
            cJSON_AddFalseToObject(payloadJSON, "isDefaultLogic");
        cJSON_AddStringToObject(payloadJSON, "nextTurn", firstTurn.c_str());
        char *cRet =  cJSON_PrintUnformatted(payloadJSON);
        payload = cRet;
        
		req = buildWarpRequest(RequestType::start_game, payload, byteLen);
        
		_socket->sockSend((char*)req, byteLen);
        
        delete[] req;
        cJSON_Delete(payloadJSON);
        free(cRet);
    }
示例#8
0
	// lua_to_json
	inline cJSON* lua_to_json(lua_State* L){
		if(lua_objlen(L, -1) > 0){
			cJSON* ele =cJSON_CreateArray();
			const int len =lua_objlen(L, -1);
			for(int i=1; i<=len; ++i){
				lua_rawgeti(L, -1, i);
				if(lua_isnil(L, -1)){
					cJSON_AddItemToArray(ele, cJSON_CreateNull());
				}
				else if(lua_isboolean(L, -1)){
					if(lua_toboolean(L, -1)){
						cJSON_AddItemToArray(ele, cJSON_CreateTrue());
					}
					else{
						cJSON_AddItemToArray(ele, cJSON_CreateFalse());
					}
				}
				else if(lua_isnumber(L, -1)){
					cJSON_AddItemToArray(ele, cJSON_CreateNumber(lua_tonumber(L, -1)));
				}
				else if(lua_isstring(L, -1)){
					cJSON_AddItemToArray(ele, cJSON_CreateString(lua_tostring(L, -1)));
				}
				else if(lua_istable(L, -1)){
					cJSON_AddItemToArray(ele, lua_to_json(L));
				}
				lua_pop(L, 1);
			}
			return ele;
		}
		else{
			cJSON* ele =cJSON_CreateObject();
			lua_pushnil(L);
			while(0 != lua_next(L, -2)){
				if(lua_isstring(L, -2)){
					const char* name =lua_tostring(L, -2);
					if(lua_isboolean(L, -1)){
						if(lua_toboolean(L, -1)){
							cJSON_AddTrueToObject(ele, name);
						}
						else{
							cJSON_AddFalseToObject(ele, name);
						}
					}
					else if(lua_isnumber(L, -1)){
						cJSON_AddNumberToObject(ele, name, lua_tonumber(L, -1));
					}
					else if(lua_isstring(L, -1)){
						cJSON_AddStringToObject(ele, name, lua_tostring(L, -1));
					}
					else if(lua_istable(L, -1)){
						cJSON_AddItemToObject(ele, name, lua_to_json(L));
					}
				}
				lua_pop(L, 1);
			}
			return ele;
		}
	}
	void App42Object::setObject(const char *key, bool value)
	{
		if (value)
		{
			cJSON_AddTrueToObject(jsonObject, key);
		}
		else
		{
			cJSON_AddFalseToObject(jsonObject, key);
		}
	}
示例#10
0
		byte * buildLobbyRequest(int requestType, int &len)
		{
			std::string payload;
			cJSON *payloadJSON;
			payloadJSON = cJSON_CreateObject();
			cJSON_AddTrueToObject(payloadJSON, "isPrimary");
			char* cRet = cJSON_PrintUnformatted(payloadJSON);			
			payload = cRet;
			free(cRet);
			cJSON_Delete(payloadJSON);
			return buildWarpRequest(requestType, payload, len);
		}
示例#11
0
static void cjson_add_true_should_fail_on_allocation_failure(void)
{
    cJSON *root = cJSON_CreateObject();

    cJSON_InitHooks(&failing_hooks);

    TEST_ASSERT_NULL(cJSON_AddTrueToObject(root, "true"));

    cJSON_InitHooks(NULL);

    cJSON_Delete(root);
}
示例#12
0
static cJSON *create_response_wrong_id()
{
	cJSON *root = cJSON_CreateObject();
	BOOST_REQUIRE(root != NULL);
	cJSON_AddTrueToObject(root, "id");
	cJSON_AddStringToObject(root, "result", "o.k.");

	cJSON *params = cJSON_CreateObject();
	BOOST_REQUIRE(params != NULL);
	cJSON_AddItemToObject(root, "params", params);
	return root;
}
示例#13
0
static void cjson_add_true_should_add_true(void)
{
    cJSON *root = cJSON_CreateObject();
    cJSON *true_item = NULL;

    cJSON_AddTrueToObject(root, "true");

    TEST_ASSERT_NOT_NULL(true_item = cJSON_GetObjectItemCaseSensitive(root, "true"));
    TEST_ASSERT_EQUAL_INT(true_item->type, cJSON_True);

    cJSON_Delete(root);
}
示例#14
0
文件: method_test.cpp 项目: mloy/cjet
static cJSON *create_call_json_rpc_wrong_id_type(const char *path_string)
{
	cJSON *root = cJSON_CreateObject();
	BOOST_REQUIRE(root != NULL);
	cJSON_AddStringToObject(root, "method", "call");
	cJSON_AddTrueToObject(root, "id");
	cJSON *params = cJSON_CreateObject();
	BOOST_REQUIRE(params != NULL);
	cJSON_AddItemToObject(root, "params", params);
	cJSON_AddStringToObject(params, "path", path_string);

	return root;
}
示例#15
0
    bool BeckhoffdListJSON::run(std::vector<Value> &params) {
        cJSON *root = cJSON_CreateArray();
        std::map<std::string, IOComponent*>::const_iterator iter = IOComponent::devices.begin();
        while (iter != IOComponent::devices.end()) {
			std::string name_str = (*iter).first;
            IOComponent *ioc = (*iter++).second;
			if (name_str == "!") continue; //TBD
			cJSON *node = cJSON_CreateObject();
    		cJSON_AddStringToObject(node, "name", name_str.c_str());
			cJSON_AddStringToObject(node, "class", ioc->type());
			cJSON_AddNumberToObject(node, "value", ioc->value());
			cJSON_AddNumberToObject(node, "module", ioc->address.module_position);
			ECModule *mod = ECInterface::findModule(ioc->address.module_position);
			if (mod) {
				cJSON_AddStringToObject(node, "module_name", mod->name.c_str());
			}
			if (strcmp(ioc->type(), "Output") == 0)
    				cJSON_AddStringToObject(node, "tab", "Outputs");
			else if (strcmp(ioc->type(), "AnalogueOutput") == 0)
    				cJSON_AddStringToObject(node, "tab", "Ana.Out");
			else if (strcmp(ioc->type(), "AnalogueInput") == 0)
    				cJSON_AddStringToObject(node, "tab", "Ana.In");
			else
    				cJSON_AddStringToObject(node, "tab", "Inputs");

			cJSON_AddStringToObject(node, "state", ioc->getStateString());
//			if (ioc->isOn())
//    			cJSON_AddStringToObject(node, "state", "on");
//			else if (ioc->isOff())
//    			cJSON_AddStringToObject(node, "state", "off");
//			else
//    			cJSON_AddStringToObject(node, "state", "unknown");
		cJSON_AddTrueToObject(node, "enabled");

   		    cJSON_AddItemToArray(root, node);
        }
        char *res = cJSON_Print(root);
        cJSON_Delete(root);
        bool done;
		char *p = res; while (*p) { *p &= 0x7f; ++p; }
        if (res) {
            result_str = res;
            free(res);
            done = true;
        }
        else {
            error_str = "JSON error";
            done = false;
        }
        return done;
    }
示例#16
0
		byte * buildCreateRoomRequest(std::string name,std::string owner,int max, std::string properties, int time, int &len)
		{
			std::string payload;
			cJSON *payloadJSON;
			payloadJSON = cJSON_CreateObject();
			cJSON_AddStringToObject(payloadJSON, "name",name.c_str());
			cJSON_AddStringToObject(payloadJSON, "owner",owner.c_str());
			cJSON_AddNumberToObject(payloadJSON, "maxUsers", max);
			cJSON_AddStringToObject(payloadJSON, "properties", properties.c_str());
            cJSON_AddNumberToObject(payloadJSON, "turnTime", time);
            cJSON_AddTrueToObject(payloadJSON, "inox");
			char* cRet = cJSON_PrintUnformatted(payloadJSON);			
			payload = cRet;
			free(cRet);
			cJSON_Delete(payloadJSON);
			return buildWarpRequest(RequestType::create_room, payload, len);
		}
int MSG_SetReportedState( int payload_len, char * payload, bool rep_state)
{
	//Publish the new state
	cJSON *root, *state, *reported_state;
	root = cJSON_CreateObject();
	cJSON_AddItemToObject(root, "state", state = cJSON_CreateObject() );
	cJSON_AddItemToObject(state, "reported", reported_state = cJSON_CreateObject() );

	if (rep_state)
		cJSON_AddTrueToObject(reported_state, "active");
	else
		cJSON_AddFalseToObject(reported_state, "active");

	snprintf( payload, payload_len, "%s", cJSON_Print(root) );


JSON_CLEAN:
	if(root)
		cJSON_Delete(root);

	return 0;
}
示例#18
0
    void Client::joinRoomInUserRange(int minJoinedUsers, int maxJoinedUsers, bool maxPreferred)
    {
        if((_state != ConnectionState::connected) || (_socket == NULL)){
            if(_roomlistener != NULL)
			{
				room _room;
				_room.result = ResultCode::connection_error;
				_roomlistener->onJoinRoomDone(_room);
			}
            return;
        }
        int byteLen;
		byte *req;
        
		std::string payload;
		cJSON *payloadJSON;
		payloadJSON = cJSON_CreateObject();
		cJSON_AddNumberToObject(payloadJSON, "minUsers", minJoinedUsers);
		cJSON_AddNumberToObject(payloadJSON, "maxUsers", maxJoinedUsers);
        maxPreferred ? cJSON_AddTrueToObject(payloadJSON, "maxPreferred") : cJSON_AddFalseToObject(payloadJSON, "maxPreferred");
		char *cRet =  cJSON_PrintUnformatted(payloadJSON);
		payload = cRet;
        
		req = buildWarpRequest(RequestType::join_room_range, payload, byteLen);
        
		char *data = new char[byteLen];
		for(int i=0; i< byteLen; ++i)
		{
			data[i] = req[i];
		}
        
		_socket->sockSend(data, byteLen);
        
		delete[] data;
		delete[] req;
		cJSON_Delete(payloadJSON);
		free(cRet);
    }
示例#19
0
void save_presets(int do_update)
{
    char * outputdata;
    int count, i;
    cJSON *root, *userobj, *versionobj, *graphicsobj;
    FILE* f;

    root = cJSON_CreateObject();

    cJSON_AddStringToObject(root, "Powder Toy Preferences", "Don't modify this file unless you know what you're doing. P.S: editing the admin/mod fields in your user info doesn't give you magical powers");

    //User Info
    if(svf_login) {
        cJSON_AddItemToObject(root, "user", userobj=cJSON_CreateObject());
        cJSON_AddStringToObject(userobj, "name", svf_user);
        cJSON_AddStringToObject(userobj, "id", svf_user_id);
        cJSON_AddStringToObject(userobj, "session_id", svf_session_id);
        if(svf_admin) {
            cJSON_AddTrueToObject(userobj, "admin");
            cJSON_AddFalseToObject(userobj, "mod");
        } else if(svf_mod) {
            cJSON_AddFalseToObject(userobj, "admin");
            cJSON_AddTrueToObject(userobj, "mod");
        } else {
            cJSON_AddFalseToObject(userobj, "admin");
            cJSON_AddFalseToObject(userobj, "mod");
        }
    }

    //Version Info
    cJSON_AddItemToObject(root, "version", versionobj=cJSON_CreateObject());
    cJSON_AddNumberToObject(versionobj, "major", SAVE_VERSION);
    cJSON_AddNumberToObject(versionobj, "minor", MINOR_VERSION);
    cJSON_AddNumberToObject(versionobj, "build", BUILD_NUM);
    if(do_update) {
        cJSON_AddTrueToObject(versionobj, "update");
    } else {
        cJSON_AddFalseToObject(versionobj, "update");
    }

    //Display settings
    cJSON_AddItemToObject(root, "graphics", graphicsobj=cJSON_CreateObject());
    cJSON_AddNumberToObject(graphicsobj, "colour", colour_mode);
    count = 0;
    i = 0;
    while(display_modes[i++]) {
        count++;
    }
    cJSON_AddItemToObject(graphicsobj, "display", cJSON_CreateIntArray(display_modes, count));
    count = 0;
    i = 0;
    while(render_modes[i++]) {
        count++;
    }
    cJSON_AddItemToObject(graphicsobj, "render", cJSON_CreateIntArray(render_modes, count));

    //General settings
    cJSON_AddStringToObject(root, "proxy", http_proxy_string);
    cJSON_AddNumberToObject(root, "scale", sdl_scale);

    outputdata = cJSON_Print(root);
    cJSON_Delete(root);

    f = fopen("powder.pref", "wb");
    if(!f)
        return;
    fwrite(outputdata, 1, strlen(outputdata), f);
    fclose(f);
    free(outputdata);
    //Old format, here for reference only
    /*FILE *f=fopen("powder.def", "wb");
    unsigned char sig[4] = {0x50, 0x44, 0x65, 0x68};
    unsigned char tmp = sdl_scale;
    if (!f)
    	return;
    fwrite(sig, 1, 4, f);
    save_string(f, svf_user);
    //save_string(f, svf_pass);
    save_string(f, svf_user_id);
    save_string(f, svf_session_id);
    fwrite(&tmp, 1, 1, f);
    tmp = cmode;
    fwrite(&tmp, 1, 1, f);
    tmp = svf_admin;
    fwrite(&tmp, 1, 1, f);
    tmp = svf_mod;
    fwrite(&tmp, 1, 1, f);
    save_string(f, http_proxy_string);
    tmp = SAVE_VERSION;
    fwrite(&tmp, 1, 1, f);
    tmp = MINOR_VERSION;
    fwrite(&tmp, 1, 1, f);
    tmp = BUILD_NUM;
    fwrite(&tmp, 1, 1, f);
    tmp = do_update;
    fwrite(&tmp, 1, 1, f);
    fclose(f);*/
}
示例#20
0
void save_presets(int do_update)
{
	//*/
	int i, count;
	char * outputdata;
	cJSON *root, *userobj, *versionobj, *recobj, *graphicsobj, *hudobj;
	FILE *f = fopen("powder.pref", "wb");
	if(!f)
		return;
	root = cJSON_CreateObject();
	
	cJSON_AddStringToObject(root, "Powder Toy Preferences", "Don't modify this file unless you know what you're doing. P.S: editing the admin/mod fields in your user info doesn't give you magical powers");
	
	//User Info
	if(svf_login){
		cJSON_AddItemToObject(root, "user", userobj=cJSON_CreateObject());
		cJSON_AddStringToObject(userobj, "name", svf_user);
		cJSON_AddStringToObject(userobj, "id", svf_user_id);
		cJSON_AddStringToObject(userobj, "session_id", svf_session_id);
		if(svf_admin){
			cJSON_AddTrueToObject(userobj, "admin");
			cJSON_AddFalseToObject(userobj, "mod");
		} else if(svf_mod){
			cJSON_AddFalseToObject(userobj, "admin");
			cJSON_AddTrueToObject(userobj, "mod");
		} else {
			cJSON_AddFalseToObject(userobj, "admin");
			cJSON_AddFalseToObject(userobj, "mod");
		}
	}
	
	//Version Info
	cJSON_AddItemToObject(root, "version", versionobj=cJSON_CreateObject());
	cJSON_AddNumberToObject(versionobj, "major", SAVE_VERSION);
	cJSON_AddNumberToObject(versionobj, "minor", MINOR_VERSION);
	cJSON_AddNumberToObject(versionobj, "build", BUILD_NUM);
	if(do_update){
		cJSON_AddTrueToObject(versionobj, "update");
	} else {
		cJSON_AddFalseToObject(versionobj, "update");
	}
	
	//Fav Menu/Records
	cJSON_AddItemToObject(root, "records", recobj=cJSON_CreateObject());
	cJSON_AddNumberToObject(recobj, "num elements in menu", locked);
	for (i = 0; i < locked; i++)
	{
		char eltext[128] = "";
		sprintf(eltext,"element %i",i);
		cJSON_AddNumberToObject(recobj, eltext, favMenu[18-i]);
	}
	cJSON_AddNumberToObject(recobj, "Alternate HUD ON", alt_hud);
	cJSON_AddNumberToObject(recobj, "Total Time Played", ((double)currentTime/1000)+((double)totaltime/1000)-((double)totalafktime/1000)-((double)afktime/1000));
	cJSON_AddNumberToObject(recobj, "Average FPS", totalfps/frames);
	cJSON_AddNumberToObject(recobj, "Number of frames", frames);
	cJSON_AddNumberToObject(recobj, "Max FPS", maxfps);
	cJSON_AddNumberToObject(recobj, "Total AFK Time", ((double)totalafktime/1000)+((double)afktime/1000)+((double)prevafktime/1000));
	cJSON_AddNumberToObject(recobj, "Times Played", timesplayed);

	//Display settings
	cJSON_AddItemToObject(root, "graphics", graphicsobj=cJSON_CreateObject());
	cJSON_AddNumberToObject(graphicsobj, "colour", colour_mode);
	count = 0; i = 0; while(display_modes[i++]){ count++; }
	cJSON_AddItemToObject(graphicsobj, "display", cJSON_CreateIntArray(display_modes, count));
	count = 0; i = 0; while(render_modes[i++]){ count++; }
	cJSON_AddItemToObject(graphicsobj, "render", cJSON_CreateIntArray(render_modes, count));
	
	//HUDs
	cJSON_AddItemToObject(root, "HUD", hudobj=cJSON_CreateObject());
	cJSON_AddItemToObject(hudobj, "normal", cJSON_CreateIntArray(hud_normal, HUD_OPTIONS));
	cJSON_AddItemToObject(hudobj, "debug", cJSON_CreateIntArray(hud_debug, HUD_OPTIONS));
	cJSON_AddItemToObject(hudobj, "modnormal", cJSON_CreateIntArray(hud_modnormal, HUD_OPTIONS));
	cJSON_AddItemToObject(hudobj, "moddebug", cJSON_CreateIntArray(hud_moddebug, HUD_OPTIONS));

	//General settings
	cJSON_AddStringToObject(root, "proxy", http_proxy_string);
	cJSON_AddNumberToObject(root, "scale", sdl_scale);
	cJSON_AddNumberToObject(root, "Debug mode", DEBUG_MODE);
	
	outputdata = cJSON_Print(root);
	cJSON_Delete(root);
	
	fwrite(outputdata, 1, strlen(outputdata), f);
	fclose(f);
	free(outputdata);
	//Old format, here for reference only
	/*/FILE *f=fopen("powder.def", "wb");
	unsigned char sig[4] = {0x50, 0x44, 0x65, 0x68};
	unsigned char tmp = sdl_scale;
	if (!f)
		return;
	fwrite(sig, 1, 4, f);
	save_string(f, svf_user);
	//save_string(f, svf_pass);
	save_string(f, svf_user_id);
	save_string(f, svf_session_id);
	fwrite(&tmp, 1, 1, f);
	tmp = cmode;
	fwrite(&tmp, 1, 1, f);
	tmp = svf_admin;
	fwrite(&tmp, 1, 1, f);
	tmp = svf_mod;
	fwrite(&tmp, 1, 1, f);
	save_string(f, http_proxy_string);
	tmp = SAVE_VERSION;
	fwrite(&tmp, 1, 1, f);
	tmp = MINOR_VERSION;
	fwrite(&tmp, 1, 1, f);
	tmp = BUILD_NUM;
	fwrite(&tmp, 1, 1, f);
	tmp = do_update;
	fwrite(&tmp, 1, 1, f);
	fclose(f);
	/*/
}