Exemplo n.º 1
0
nbool wbxmlDecoder_decode(NWbxmlDecoder* decoder)
{
    nbool result = N_FALSE;
    WBXMLParser *wbxml_parser = NULL;
    WBXMLContentHandler parse_handler = {
        NULL,
        NULL,
        wbxml_start_element,
        wbxml_end_element,
        wbxml_characters,
        NULL};
    
    if (decoder->srcPos <= 0)
        return N_FALSE;

    wbxml_parser = wbxml_parser_create();
    if (wbxml_parser) {
        WBXMLError ret = WBXML_OK;
        
        decoder->dstMax = decoder->srcMax * 2;
        decoder->dst = (char*)NBK_malloc(decoder->dstMax);
        decoder->dstPos = 0;
        
#if DEBUG_DECODER
        dump_char(decoder->page, "decoding...", -1);
        dump_return(decoder->page);
#endif
        wbxml_parser_set_user_data(wbxml_parser, decoder);
        wbxml_parser_set_content_handler(wbxml_parser, &parse_handler);
        ret = wbxml_parser_parse(wbxml_parser, decoder->src, decoder->srcPos);
        wbxml_parser_destroy(wbxml_parser);

#if DEBUG_DECODER
        dump_char(decoder->page, "decoded!", -1);
        dump_int(decoder->page, decoder->srcPos);
        dump_int(decoder->page, decoder->dstPos);
        dump_return(decoder->page);
#endif
        
        if (ret == WBXML_OK)
            result = N_TRUE;
    }
    
    return result;
}
Exemplo n.º 2
0
static void grow_buffer(uint8** buf, int* max, int length, void* page)
{
    int size = BUFFER_GROW * ((length * 2 / BUFFER_GROW) + 1);
    *max += size;
    *buf = (uint8*)NBK_realloc(*buf, *max);
    
#if DEBUG_DECODER
    dump_char(page, "grow buffer", -1);
    dump_int(page, *max);
    dump_return(page);
#endif
}
Exemplo n.º 3
0
void wbxmlDecoder_addSourceData(NWbxmlDecoder* decoder, uint8* data, int length)
{
#if DEBUG_DECODER
    dump_char(decoder->page, "add data", -1);
    dump_int(decoder->page, length);
    dump_return(decoder->page);
#endif
    
    if (decoder->srcMax - decoder->srcPos < length)
        grow_buffer(&decoder->src, &decoder->srcMax, length, decoder->page);
    
    NBK_memcpy(&decoder->src[decoder->srcPos], data, length);
    decoder->srcPos += length;
}
Exemplo n.º 4
0
void dump_bkod()
{
   opcode_type opcode;
   int i, line;
   char text[50000];
   char opcode_char;
   static int last_line = 0;

//   printf("at %08X\n",index);
   
   inst_start = index;

   line = find_linenum(index);
   if (line != last_line)
   {
      printf("*** Line %d\n", line);
      last_line = line;
   }
   
   opcode_char = get_byte();

   memcpy(&opcode,&opcode_char,1);

/*   opcode = (opcode_type)get_byte();  can't get to compile */

   switch (opcode.command)
   {
   case UNARY_ASSIGN : dump_unary_assign(opcode,text); break;
   case BINARY_ASSIGN : dump_binary_assign(opcode,text); break;
   case GOTO : dump_goto(opcode,text); break;
   case CALL : dump_call(opcode,text); break;
   case RETURN : dump_return(opcode,text); break;
   case DEBUG_LINE : dump_debug_line(opcode,text); break;
   default : sprintf(text,"INVALID"); break;
   }

   if (dump_hex)
   {
      printf("BKOD raw: ");
      for (i=0;i<index-inst_start;i++)
	 print_hex_byte(file_mem[inst_start+i]);
      printf("\n");
   }
   printf("@%08X: ",inst_start);
   printf("%s\n",text);
}
Exemplo n.º 5
0
void wbxmlDecoder_setSourceLength(NWbxmlDecoder* decoder, int length)
{
    int size = 0;
    
    if (length > 0)
        size = BUFFER_GROW * ((length / BUFFER_GROW) + 1);
    else
        size = BUFFER_GROW;
    
    decoder->src = (uint8*)NBK_malloc(size);
    decoder->dstMax = size;
    
#if DEBUG_DECODER
    dump_char(decoder->page, "init alloc", -1);
    dump_int(decoder->page, length);
    dump_int(decoder->page, decoder->srcMax);
    dump_return(decoder->page);
#endif
}