Example #1
0
void myNotifyWayFunc (OSMWay* psWay, OSMContext* psOSMContext, void* user_data)
{
    VSILFILE* fp = (VSILFILE*) user_data;

    int l;
    struct tm mytm;

    WRITE_STR(" <way id=\"");
    VSIFPrintfL(fp, "%d", (int)psWay->nID);
    WRITE_STR("\" version=\"");
    VSIFPrintfL(fp, "%d", psWay->sInfo.nVersion);
    WRITE_STR("\" changeset=\"");
    VSIFPrintfL(fp, "%d", (int) psWay->sInfo.nChangeset);
    if (psWay->sInfo.nUID >= 0)
    {
        WRITE_STR("\" uid=\"");
        VSIFPrintfL(fp, "%d", psWay->sInfo.nUID);
        WRITE_STR("\" user=\"");
        WRITE_ESCAPED(psWay->sInfo.pszUserSID);
    }

    if( !(psWay->sInfo.bTimeStampIsStr) )
    {
        WRITE_STR("\" timestamp=\"");
        myCPLUnixTimeToYMDHMS(psWay->sInfo.ts.nTimeStamp, &mytm);
        VSIFPrintfL(fp, "%04d-%02d-%02dT%02d:%02d:%02dZ",
                1900 + mytm.tm_year, mytm.tm_mon + 1, mytm.tm_mday,
                mytm.tm_hour, mytm.tm_min, mytm.tm_sec);
    }
    else if (psWay->sInfo.ts.pszTimeStamp != NULL &&
             psWay->sInfo.ts.pszTimeStamp[0] != '\0')
    {
        WRITE_STR("\" timestamp=\"");
        WRITE_STR(psWay->sInfo.ts.pszTimeStamp);
    }

    WRITE_STR("\">\n");

    for(l=0;l<psWay->nRefs;l++)
        VSIFPrintfL(fp, "  <nd ref=\"%d\"/>\n", (int)psWay->panNodeRefs[l]);

    for(l=0;l<psWay->nTags;l++)
    {
        WRITE_STR("  <tag k=\"");
        WRITE_ESCAPED(psWay->pasTags[l].pszK);
        WRITE_STR("\" v=\"");
        WRITE_ESCAPED(psWay->pasTags[l].pszV);
        WRITE_STR("\" />\n");
    }
    VSIFPrintfL(fp, " </way>\n");
}
/* prefs_write_xml_pref:
 *	stores specified value to the disk
 */
static void 
prefs_write_xml_pref(const gchar * prefs_name, struct prefs_value * value, FILE * prefs_f)
{
	gchar * esc;
	GList * entry;

	g_assert(prefs_name && value && prefs_f);

#define WRITE_ESCAPED(format, ...) \
	do { \
		esc = g_markup_printf_escaped(format, __VA_ARGS__); \
		fputs(esc, prefs_f); \
		g_free(esc); \
	} while(0);

	WRITE_ESCAPED("\t\t<pref name=\"%s\"", prefs_name);

	switch(value->type) {
	case PREFS_TYPE_UINT:
		WRITE_ESCAPED(" type=\"uint\">%u</pref>\n", value->value.integer);
		break;
		
	case PREFS_TYPE_BOOL:
		WRITE_ESCAPED(" type=\"bool\">%s</pref>\n",
				value->value.boolean ? "TRUE": "FALSE");
		break;
		
	case PREFS_TYPE_STR:
		WRITE_ESCAPED(" type=\"string\">%s</pref>\n", value->value.string);
		break;
		
	case PREFS_TYPE_LIST:
		fputs(" type=\"list\">", prefs_f);
		if(value->value.list) {
			fputs("\n", prefs_f);
			
			for(entry = value->value.list; entry; entry = entry->next)
				WRITE_ESCAPED("\t\t\t<entry>%s</entry>\n",
						(const gchar*)entry->data);

			fputs("\t\t", prefs_f);
		}
		fputs("</pref>\n", prefs_f);
		break;
	}
}
Example #3
0
void myNotifyRelationFunc (OSMRelation* psRelation, OSMContext* psOSMContext, void* user_data)
{
    VSILFILE* fp = (VSILFILE*) user_data;

    int l;
    const OSMTag* pasTags = psRelation->pasTags;
    const OSMMember* pasMembers = psRelation->pasMembers;
    struct tm mytm;

    WRITE_STR(" <relation id=\"");
    VSIFPrintfL(fp, "%d", (int)psRelation->nID);
    WRITE_STR("\" version=\"");
    VSIFPrintfL(fp, "%d", psRelation->sInfo.nVersion);
    WRITE_STR("\" changeset=\"");
    VSIFPrintfL(fp, "%d", (int) psRelation->sInfo.nChangeset);
    if (psRelation->sInfo.nUID >= 0)
    {
        WRITE_STR("\" uid=\"");
        VSIFPrintfL(fp, "%d", psRelation->sInfo.nUID);
        WRITE_STR("\" user=\"");
        WRITE_ESCAPED(psRelation->sInfo.pszUserSID);
    }

    if( !(psRelation->sInfo.bTimeStampIsStr) )
    {
        myCPLUnixTimeToYMDHMS(psRelation->sInfo.ts.nTimeStamp, &mytm);
        WRITE_STR("\" timestamp=\"");
        VSIFPrintfL(fp, "%04d-%02d-%02dT%02d:%02d:%02dZ",
                1900 + mytm.tm_year, mytm.tm_mon + 1, mytm.tm_mday,
                mytm.tm_hour, mytm.tm_min, mytm.tm_sec);
    }
    else if (psRelation->sInfo.ts.pszTimeStamp != NULL &&
             psRelation->sInfo.ts.pszTimeStamp[0] != '\0')
    {
        WRITE_STR("\" timestamp=\"");
        WRITE_STR(psRelation->sInfo.ts.pszTimeStamp);
    }

    WRITE_STR("\">\n");

    for(l=0;l<psRelation->nMembers;l++)
    {
        WRITE_STR("  <member type=\"");
        VSIFPrintfL(fp, "%s", pasMembers[l].eType == MEMBER_NODE ? "node": pasMembers[l].eType == MEMBER_WAY ? "way": "relation");
        WRITE_STR("\" ref=\"");
        VSIFPrintfL(fp, "%d", (int)pasMembers[l].nID);
        WRITE_STR("\" role=\"");
        WRITE_ESCAPED(pasMembers[l].pszRole);
        WRITE_STR("\"/>\n");
    }

    for(l=0;l<psRelation->nTags;l++)
    {
        WRITE_STR("  <tag k=\"");
        WRITE_ESCAPED(pasTags[l].pszK);
        WRITE_STR("\" v=\"");
        WRITE_ESCAPED(pasTags[l].pszV);
        WRITE_STR("\" />\n");
    }
    VSIFPrintfL(fp, " </relation>\n");
}
Example #4
0
void myNotifyNodesFunc (unsigned int nNodes, OSMNode* pasNodes, OSMContext* psOSMContext, void* user_data)
{
    VSILFILE* fp = (VSILFILE*) user_data;
    int k;

    for(k=0;k<nNodes;k++)
    {
        int l;
        const OSMNode* psNode = &pasNodes[k];
        OSMTag *pasTags = psNode->pasTags;
        struct tm mytm;

        WRITE_STR(" <node id=\"");
        VSIFPrintfL(fp, "%d", (int)psNode->nID);
        WRITE_STR("\" lat=\"");
        VSIFPrintfL(fp, "%.7f", psNode->dfLat);
        WRITE_STR("\" lon=\"");
        VSIFPrintfL(fp, "%.7f", psNode->dfLon);
        WRITE_STR("\" version=\"");
        VSIFPrintfL(fp, "%d", psNode->sInfo.nVersion);
        WRITE_STR("\" changeset=\"");
        VSIFPrintfL(fp, "%d", (int) psNode->sInfo.nChangeset);
        if (psNode->sInfo.nUID >= 0)
        {
            WRITE_STR("\" user=\"");
            WRITE_ESCAPED(psNode->sInfo.pszUserSID);
            WRITE_STR("\" uid=\"");
            VSIFPrintfL(fp, "%d", psNode->sInfo.nUID);
        }

        if( !(psNode->sInfo.bTimeStampIsStr) )
        {
            WRITE_STR("\" timestamp=\"");
            myCPLUnixTimeToYMDHMS(psNode->sInfo.ts.nTimeStamp, &mytm);
            VSIFPrintfL(fp, "%04d-%02d-%02dT%02d:%02d:%02dZ",
                    1900 + mytm.tm_year, mytm.tm_mon + 1, mytm.tm_mday,
                    mytm.tm_hour, mytm.tm_min, mytm.tm_sec);
        }
        else if (psNode->sInfo.ts.pszTimeStamp != NULL &&
                 psNode->sInfo.ts.pszTimeStamp[0] != '\0')
        {
            WRITE_STR("\" timestamp=\"");
            WRITE_STR(psNode->sInfo.ts.pszTimeStamp);
        }

        if (psNode->nTags)
        {
            WRITE_STR("\">\n");
            for(l=0;l<psNode->nTags;l++)
            {
                WRITE_STR("  <tag k=\"");
                WRITE_ESCAPED(pasTags[l].pszK);
                WRITE_STR("\" v=\"");
                WRITE_ESCAPED(pasTags[l].pszV);
                WRITE_STR("\" />\n");
            }
            WRITE_STR(" </node>\n");
        }
        else
        {
            WRITE_STR("\"/>\n");
        }
    }
}
Example #5
0
/* UART_writeFrame writes an UART frame on the wire
 * Argument :
 *  pt : pointer to the memory area where the frame will be read.
 *  size : size of data to read at pt.
 * Return value :
 *  >0 : nb of bytes written on success (excluding escape char and UART_framing overhead)
 *  <=0 : error (ex : writing error, size too big)
 */
int UART_writeFrame(const void *pt,int size){
    uint8_t cSum=0; //checksum
    int j=0;
    int ret;
#ifdef ARCH_X86_LINUX
    uint8_t c;
    int i;
#endif

    //check size :
    if ( size > UART_MTU ) return -ERR_UART_OVERSIZE;

#ifdef ARCH_X86_LINUX
    if(framebased){
        uint8_t *buf = (uint8_t *)malloc(1+(size+3)*2); // worst case size
        if(!buf){
            return -ERR_INSUFFICIENT_MEMORY;
        }

        i=0;

#define WRITE_ESCAPED(byte) do{\
                    if ( byte == UART_FRAME_START || byte == UART_XOFF || byte == UART_XON || byte == UART_ESCAPE_CHAR ){\
                        buf[i] = UART_ESCAPE_CHAR;\
                        i++;\
                        buf[i] = (byte)^UART_ESCAPE_MASK;\
                        i++;\
                    }\
                    else{\
                        buf[i] = (byte);\
                        i++;\
                    }\
                }while(0)
        //write start byte
        buf[i] = UART_FRAME_START;
        i++;

        //write size
        c=(uint8_t)(size>>8);
        WRITE_ESCAPED(c);
        c=(uint8_t)(size&0xff);
        WRITE_ESCAPED(c);

        //write data
        for(j=0;j<size;j++){
            c=((uint8_t*)pt)[j];
            WRITE_ESCAPED(c);
            cSum+=c;
        }

        //compute and write checksum
        cSum=0xff-cSum;
        WRITE_ESCAPED(cSum);
#undef WRITE_ESCAPED

        //actual sending of data
        ret=serialWriteBytes(buf, i);
        free(buf);
        return ret==i?size:(ret<0?ret:0);
    }
    else{
#endif
        //write start byte
        if ( (ret=serialWrite(UART_FRAME_START)) <= 0 ) return ret;