static void debug_print_object(int number) { int i; zword_t addr, len; glk_printf("Object %d:\nName: \"", number); print_object_name(number); glk_put_string("\"\nAttributes: "); for (i = 0; i < (zGameVersion < Z_VERSION_4 ? 32 : 48); i++) { if (get_attribute(number, i)) glk_printf("%d ", i); } glk_printf("\nParent: %3d \"", object_parent(number)); print_object_name(object_parent(number)); glk_printf("\"\nSibling: %3d \"", object_sibling(number)); print_object_name(object_sibling(number)); glk_printf("\"\nChild: %3d \"", object_child(number)); print_object_name(object_child(number)); glk_put_string("\"\nProperties:\n"); i = 0; while (i = get_next_property(number, i)) { glk_printf(" [%2d] ", i); addr = get_property_address(number, i); for (len = get_property_length(addr); len > 0; len--) glk_printf("%02x ", get_byte(addr++)); glk_put_string("\n"); } }
/******************************************************* * Description: * param * return: *********************************************************/ struct TLVs * FUNCTION_ATTRIBUTE get_sub_device_property( struct sub_device_buffer *device_buffer, struct pando_property *property_body) { struct pando_property *tmp_body = NULL; struct device_header *head = NULL; //reach the end of buffer if (s_current_property.position == device_buffer->buffer_length || s_current_property.position > device_buffer->buffer_length) { s_current_property.position = 0; return NULL; } if (s_current_property.position == 0) { //first property, need handle header length s_current_property.position += DEV_HEADER_LEN; head = (struct device_header *)device_buffer->buffer; base_params.data_sequence = net32_to_host(head->frame_seq); } tmp_body = (struct pando_property *)(device_buffer->buffer + s_current_property.position); s_current_property.position += sizeof(struct pando_property); return get_next_property(tmp_body, property_body); }