static void html_iframe_do(unsigned char *a, unsigned char *object_src, struct html_context *html_context) { unsigned char *name, *url = NULL; url = null_or_stracpy(object_src); if (!url) url = get_url_val(a, (unsigned char *)"src", html_context->doc_cp); if (!url) return; name = get_attr_val(a, (unsigned char *)"name", html_context->doc_cp); if (!name) name = get_attr_val(a, (unsigned char *)"id", html_context->doc_cp); if (!name) name = stracpy((const unsigned char *)""); if (!name) { mem_free(url); return; } html_focusable(html_context, a); if (*name) { put_link_line((unsigned char *)"IFrame: ", name, url, html_context->options->framename, html_context); } else { put_link_line((unsigned char *)"", (unsigned char *)"IFrame", url, html_context->options->framename, html_context); } mem_free(name); mem_free(url); }
void html_source(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { unsigned char *src, *title; struct document_options *options = html_context->options; int display_style = options->image_link.display_style; src = get_url_val(a, "src", html_context->doc_cp); if (!src) return; title = get_attr_val(a, "title", html_context->doc_cp); if (!title || !*title) { if (display_style == 3) { mem_free_set(&title, get_image_filename_from_src(options->image_link.filename_maxlen, src)); } } html_focusable(html_context, a); if (title && *title) { put_link_line("Source: ", title, src, html_context->options->framename, html_context); } else { put_link_line("", "Source", src, html_context->options->framename, html_context); } mem_free_if(title); mem_free(src); }
void html_a(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { unsigned char *href; href = get_url_val(a, (unsigned char *)"href", html_context->doc_cp); if (href) { unsigned char *target; mem_free_set(&format.link, join_urls(html_context->base_href, trim_chars(href, ' ', 0))); mem_free(href); target = get_target(html_context->options, a); if (target) { mem_free_set(&format.target, target); } else { mem_free_set(&format.target, stracpy(html_context->base_target)); } if (0) { ; /* Shut up compiler */ #ifdef CONFIG_GLOBHIST } else if (get_global_history_item(format.link)) { format.style.color.foreground = format.color.vlink; html_top->pseudo_class &= ~ELEMENT_LINK; html_top->pseudo_class |= ELEMENT_VISITED; #endif #ifdef CONFIG_BOOKMARKS } else if (get_bookmark(format.link)) { format.style.color.foreground = format.color.bookmark_link; html_top->pseudo_class &= ~ELEMENT_VISITED; /* XXX: Really set ELEMENT_LINK? --pasky */ html_top->pseudo_class |= ELEMENT_LINK; #endif } else { format.style.color.foreground = format.color.clink; html_top->pseudo_class &= ~ELEMENT_VISITED; html_top->pseudo_class |= ELEMENT_LINK; } mem_free_set(&format.title, get_attr_val(a, (unsigned char *)"title", html_context->doc_cp)); html_focusable(html_context, a); } else { pop_html_element(html_context); } set_fragment_identifier(html_context, a, (unsigned char *)"name"); }
void html_object(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { unsigned char *type, *url; /* This is just some dirty wrapper. We emulate various things through * this, which is anyway in the spirit of <object> element, unifying * <img> and <iframe> etc. */ url = get_url_val(a, (unsigned char *)"data", html_context->doc_cp); if (!url) url = get_url_val(a, (unsigned char *)"codebase", html_context->doc_cp); if (!url) return; type = get_attr_val(a, (unsigned char *)"type", html_context->doc_cp); if (!type) { mem_free(url); return; } if (!c_strncasecmp((const char *)type, "text/", 5)) { /* We will just emulate <iframe>. */ html_iframe_do(a, url, html_context); html_skip(html_context, a); } else if (!c_strncasecmp((const char *)type, "image/", 6)) { /* <img> emulation. */ /* TODO: Use the enclosed text as 'alt' attribute. */ html_img_do(a, url, html_context); } else { unsigned char *name; name = get_attr_val(a, (unsigned char *)"standby", html_context->doc_cp); html_focusable(html_context, a); if (name && *name) { put_link_line((unsigned char *)"Object: ", name, url, html_context->options->framename, html_context); } else { put_link_line((unsigned char *)"Object: ", type, url, html_context->options->framename, html_context); } mem_free_if(name); } mem_free(type); mem_free(url); }
static void do_html_select_multiple(struct html_context *html_context, unsigned char *a, unsigned char *html, unsigned char *eof, unsigned char **end) { unsigned char *al = get_attr_val(a, (unsigned char *)"name", html_context->doc_cp); if (!al) return; html_focusable(html_context, a); html_top->type = ELEMENT_DONT_KILL; mem_free_set(&format.select, al); format.select_disabled = has_attr(a, (unsigned char *)"disabled", html_context->doc_cp) ? FORM_MODE_DISABLED : FORM_MODE_NORMAL; }
void html_button(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { unsigned char *al; struct form_control *fc; enum form_type type = FC_SUBMIT; int cp = html_context->doc_cp; html_focusable(html_context, a); al = get_attr_val(a, (unsigned char *)"type", cp); if (!al) goto no_type_attr; if (!c_strcasecmp((const char *)al, "button")) { type = FC_BUTTON; } else if (!c_strcasecmp((const char *)al, "reset")) { type = FC_RESET; } else if (c_strcasecmp((const char *)al, "submit")) { /* unknown type */ mem_free(al); return; } mem_free(al); no_type_attr: fc = init_form_control(type, a, html_context); if (!fc) return; fc->id = get_attr_val(a, (unsigned char *)"id", cp); fc->name = get_attr_val(a, (unsigned char *)"name", cp); fc->default_value = get_attr_val(a, (unsigned char *)"value", cp); if (!fc->default_value) { if (fc->type == FC_SUBMIT) fc->default_value = stracpy((const unsigned char *)"Submit"); else if (fc->type == FC_RESET) fc->default_value = stracpy((const unsigned char *)"Reset"); else if (fc->type == FC_BUTTON) fc->default_value = stracpy((const unsigned char *)"Button"); } if (!fc->default_value) fc->default_value = stracpy((const unsigned char *)""); html_context->special_f(html_context, SP_CONTROL, fc); format.form = fc; format.style.attr |= AT_BOLD; }
void html_video(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { unsigned char *url; /* This just places a link where a video element would be. */ url = get_url_val(a, (unsigned char *)"src", html_context->doc_cp); if (!url) return; html_focusable(html_context, a); put_link_line((unsigned char *)"Video: ", (unsigned char *)basename((char *)url), url, html_context->options->framename, html_context); html_skip(html_context, a); mem_free(url); }
static void put_image_label(unsigned char *a, unsigned char *label, struct html_context *html_context) { color_T saved_foreground; int saved_attr; /* This is not 100% appropriate for <img>, but well, accepting * accesskey and tabindex near <img> is just our little * extension to the standard. After all, it makes sense. */ html_focusable(html_context, a); saved_foreground = format.style.color.foreground; saved_attr = format.style.attr; format.style.color.foreground = format.color.image_link; format.style.attr |= AT_NO_ENTITIES; put_chrs(html_context, label, strlen((const char *)label)); format.style.color.foreground = saved_foreground; format.style.attr = saved_attr; }
void html_frame(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { unsigned char *name, *src, *url; src = get_url_val(a, (unsigned char *)"src", html_context->doc_cp); if (!src) { url = stracpy((const unsigned char *)"about:blank"); } else { url = join_urls(html_context->base_href, src); mem_free(src); } if (!url) return; name = get_attr_val(a, (unsigned char *)"name", html_context->doc_cp); if (!name) { name = stracpy(url); } else if (!name[0]) { /* When name doesn't have a value */ mem_free(name); name = stracpy(url); } if (!name) return; if (!html_context->options->frames || !html_top->frameset) { html_focusable(html_context, a); put_link_line((unsigned char *)"Frame: ", name, url, (unsigned char *)"", html_context); } else { if (html_context->special_f(html_context, SP_USED, NULL)) { html_context->special_f(html_context, SP_FRAME, html_top->frameset, name, url); } } mem_free(name); mem_free(url); }
void html_applet(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { unsigned char *code, *alt; code = get_url_val(a, (unsigned char *)"code", html_context->doc_cp); if (!code) return; alt = get_attr_val(a, (unsigned char *)"alt", html_context->doc_cp); html_focusable(html_context, a); if (alt && *alt) { put_link_line((unsigned char *)"Applet: ", alt, code, html_context->options->framename, html_context); } else { put_link_line((unsigned char *)"", (unsigned char *)"Applet", code, html_context->options->framename, html_context); } mem_free_if(alt); mem_free(code); }
void html_link(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { int link_display = html_context->options->meta_link_display; unsigned char *name; struct hlink link; struct string text; int name_neq_title = 0; int first = 1; #ifndef CONFIG_CSS if (!link_display) return; #endif if (!html_link_parse(html_context, a, &link)) return; if (!link.href) goto free_and_return; #ifdef CONFIG_CSS if (link.type == LT_STYLESHEET && supports_html_media_attr(link.media)) { int len = strlen((const char *)link.href); import_css_stylesheet(&html_context->css_styles, html_context->base_href, link.href, len); } if (!link_display) goto free_and_return; #endif /* Ignore few annoying links.. */ if (link_display < 5 && (link.type == LT_ICON || link.type == LT_AUTHOR || link.type == LT_STYLESHEET || link.type == LT_ALTERNATE_STYLESHEET)) goto free_and_return; if (!link.name || link.type != LT_UNKNOWN) /* Give preference to our default names for known types. */ name = get_lt_default_name(&link); else name = link.name; if (!name) goto free_and_return; if (!init_string(&text)) goto free_and_return; html_focusable(html_context, a); if (link.title) { add_to_string(&text, link.title); name_neq_title = strcmp((const char *)link.title, (const char *)name); } else add_to_string(&text, name); if (link_display == 1) goto put_link_line; /* Only title */ #define APPEND(what) do { \ add_to_string(&text, first ? (const unsigned char *)" (" : (const unsigned char *)", "); \ add_to_string(&text, (what)); \ first = 0; \ } while (0) if (name_neq_title) { APPEND(name); } if (link_display >= 3 && link.hreflang) { APPEND(link.hreflang); } if (link_display >= 4 && link.content_type) { APPEND(link.content_type); } if (link.lang && link.type == LT_ALTERNATE_LANG && (link_display < 3 || (link.hreflang && c_strcasecmp((const char *)link.hreflang, (const char *)link.lang)))) { APPEND(link.lang); } if (link.media) { APPEND(link.media); } #undef APPEND if (!first) add_char_to_string(&text, ')'); put_link_line: { unsigned char *prefix = (link.direction == LD_REL) ? (unsigned char *)"Link: " : (unsigned char *)"Reverse link: "; unsigned char *link_name = (text.length) ? text.source : name; put_link_line(prefix, link_name, link.href, html_context->base_target, html_context); if (text.source) done_string(&text); } free_and_return: html_link_clear(&link); }
void html_textarea(struct html_context *html_context, unsigned char *attr, unsigned char *html, unsigned char *eof, unsigned char **end) { struct form_control *fc; unsigned char *p, *t_name, *wrap_attr; int t_namelen; int cols, rows; int i; html_focusable(html_context, attr); while (html < eof && (*html == '\n' || *html == '\r')) html++; p = html; while (p < eof && *p != '<') { pp: p++; } if (p >= eof) { *end = eof; return; } if (parse_element(p, eof, &t_name, &t_namelen, NULL, end)) goto pp; if (c_strlcasecmp(t_name, t_namelen, (const unsigned char *)"/TEXTAREA", 9)) goto pp; fc = init_form_control(FC_TEXTAREA, attr, html_context); if (!fc) return; fc->id = get_attr_val(attr, (unsigned char *)"id", html_context->doc_cp); fc->name = get_attr_val(attr, (unsigned char *)"name", html_context->doc_cp); fc->default_value = convert_string(NULL, html, p - html, html_context->doc_cp, CSM_DEFAULT, NULL, NULL, NULL); for (p = fc->default_value; p && p[0]; p++) { /* FIXME: We don't cope well with entities here. Bugzilla uses * inside of textarea and we fail miserably upon that * one. --pasky */ if (p[0] == '\r') { if (p[1] == '\n' || (p > fc->default_value && p[-1] == '\n')) { memmove(p, p + 1, strlen((const char *)p)); p--; } else { p[0] = '\n'; } } } cols = get_num(attr, (unsigned char *)"cols", html_context->doc_cp); if (cols <= 0) cols = html_context->options->default_form_input_size; cols++; /* Add 1 column, other browsers may have different behavior here (mozilla adds 2) --Zas */ if (cols > html_context->options->box.width) cols = html_context->options->box.width; fc->cols = cols; rows = get_num(attr, (unsigned char *)"rows", html_context->doc_cp); if (rows <= 0) rows = 1; if (rows > html_context->options->box.height) rows = html_context->options->box.height; fc->rows = rows; html_context->options->needs_height = 1; wrap_attr = get_attr_val(attr, (unsigned char *)"wrap", html_context->doc_cp); if (wrap_attr) { if (!c_strcasecmp((const char *)wrap_attr, "hard") || !c_strcasecmp((const char *)wrap_attr, "physical")) { fc->wrap = FORM_WRAP_HARD; } else if (!c_strcasecmp((const char *)wrap_attr, "soft") || !c_strcasecmp((const char *)wrap_attr, "virtual")) { fc->wrap = FORM_WRAP_SOFT; } else if (!c_strcasecmp((const char *)wrap_attr, "none") || !c_strcasecmp((const char *)wrap_attr, "off")) { fc->wrap = FORM_WRAP_NONE; } mem_free(wrap_attr); } else if (has_attr(attr, (unsigned char *)"nowrap", html_context->doc_cp)) { fc->wrap = FORM_WRAP_NONE; } else { fc->wrap = FORM_WRAP_SOFT; } fc->maxlength = get_num(attr, (unsigned char *)"maxlength", html_context->doc_cp); if (fc->maxlength == -1) fc->maxlength = INT_MAX; if (rows > 1) ln_break(html_context, 1); else put_chrs(html_context, (unsigned char *)" ", 1); html_stack_dup(html_context, ELEMENT_KILLABLE); format.form = fc; format.style.attr |= AT_BOLD; for (i = 0; i < rows; i++) { int j; for (j = 0; j < cols; j++) put_chrs(html_context, (unsigned char *)"_", 1); if (i < rows - 1) ln_break(html_context, 1); } pop_html_element(html_context); if (rows > 1) ln_break(html_context, 1); else put_chrs(html_context, (unsigned char *)" ", 1); html_context->special_f(html_context, SP_CONTROL, fc); }
static void do_html_select(unsigned char *attr, unsigned char *html, unsigned char *eof, unsigned char **end, struct html_context *html_context) { struct conv_table *ct = (struct conv_table *)html_context->special_f(html_context, SP_TABLE, NULL); struct form_control *fc; struct string lbl = NULL_STRING, orig_lbl = NULL_STRING; unsigned char **values = NULL; unsigned char **labels; unsigned char *name, *t_attr, *en; int namelen; int nnmi = 0; int order = 0; int preselect = -1; int group = 0; int i, max_width; int closing_tag; html_focusable(html_context, attr); init_menu(&lnk_menu); se: en = html; see: html = en; while (html < eof && *html != '<') html++; if (html >= eof) { abort: *end = html; if (lbl.source) done_string(&lbl); if (orig_lbl.source) done_string(&orig_lbl); if (values) { int j; for (j = 0; j < order; j++) mem_free_if(values[j]); mem_free(values); } destroy_menu(&lnk_menu); *end = en; return; } if (lbl.source) { unsigned char *q, *s = en; int l = html - en; while (l && isspace(s[0])) s++, l--; while (l && isspace(s[l-1])) l--; q = convert_string(ct, s, l, html_context->options->cp, CSM_DEFAULT, NULL, NULL, NULL); if (q) add_to_string(&lbl, q), mem_free(q); add_bytes_to_string(&orig_lbl, s, l); } if (html + 2 <= eof && (html[1] == '!' || html[1] == '?')) { html = skip_comment(html, eof); goto se; } if (parse_element(html, eof, &name, &namelen, &t_attr, &en)) { html++; goto se; } if (!namelen) goto see; if (name[0] == '/') { namelen--; if (!namelen) goto see; name++; closing_tag = 1; } else { closing_tag = 0; } if (closing_tag && !c_strlcasecmp(name, namelen, (const unsigned char *)"SELECT", 6)) { add_select_item(&lnk_menu, &lbl, &orig_lbl, values, order, nnmi); goto end_parse; } if (!c_strlcasecmp(name, namelen, (const unsigned char *)"OPTION", 6)) { add_select_item(&lnk_menu, &lbl, &orig_lbl, values, order, nnmi); if (!closing_tag) { unsigned char *value, *label; if (has_attr(t_attr, (unsigned char *)"disabled", html_context->doc_cp)) goto see; if (preselect == -1 && has_attr(t_attr, (unsigned char *)"selected", html_context->doc_cp)) preselect = order; value = get_attr_val(t_attr, (unsigned char *)"value", html_context->doc_cp); if (!mem_align_alloc(&values, order, order + 1, 0xFF)) goto abort; values[order++] = value; label = get_attr_val(t_attr, (unsigned char *)"label", html_context->doc_cp); if (label) new_menu_item(&lnk_menu, label, order - 1, 0); if (!value || !label) { init_string(&lbl); init_string(&orig_lbl); nnmi = !!label; } } goto see; } if (!c_strlcasecmp(name, namelen, (const unsigned char *)"OPTGROUP", 8)) { add_select_item(&lnk_menu, &lbl, &orig_lbl, values, order, nnmi); if (group) new_menu_item(&lnk_menu, NULL, -1, 0), group = 0; if (!closing_tag) { unsigned char *label; label = get_attr_val(t_attr, (unsigned char *)"label", html_context->doc_cp); if (!label) { label = stracpy((const unsigned char *)""); if (!label) goto see; } new_menu_item(&lnk_menu, label, -1, 0); group = 1; } } goto see; end_parse: *end = en; if (!order) goto abort; labels = (unsigned char **)mem_calloc(order, sizeof(unsigned char *)); if (!labels) goto abort; fc = init_form_control(FC_SELECT, attr, html_context); if (!fc) { mem_free(labels); goto abort; } fc->id = get_attr_val(attr, (unsigned char *)"id", html_context->doc_cp); fc->name = get_attr_val(attr, (unsigned char *)"name", html_context->doc_cp); fc->default_state = preselect < 0 ? 0 : preselect; fc->default_value = order ? stracpy(values[fc->default_state]) : stracpy((const unsigned char *)""); fc->nvalues = order; fc->values = values; fc->menu = detach_menu(&lnk_menu); fc->labels = labels; menu_labels(fc->menu, (unsigned char *)"", labels); put_chrs(html_context, (unsigned char *)"[", 1); html_stack_dup(html_context, ELEMENT_KILLABLE); format.form = fc; format.style.attr |= AT_BOLD; max_width = 0; for (i = 0; i < order; i++) { if (!labels[i]) continue; #ifdef CONFIG_UTF8 if (html_context->options->utf8) int_lower_bound(&max_width, utf8_ptr2cells(labels[i], NULL)); else #endif /* CONFIG_UTF8 */ int_lower_bound(&max_width, strlen((const char *)labels[i])); } for (i = 0; i < max_width; i++) put_chrs(html_context, (unsigned char *)"_", 1); pop_html_element(html_context); put_chrs(html_context, (unsigned char *)"]", 1); html_context->special_f(html_context, SP_CONTROL, fc); }
static void html_input_format(struct html_context *html_context, unsigned char *a, struct form_control *fc) { put_chrs(html_context, (unsigned char *)" ", 1); html_stack_dup(html_context, ELEMENT_KILLABLE); html_focusable(html_context, a); format.form = fc; if (format.title) mem_free(format.title); format.title = get_attr_val(a, (unsigned char *)"title", html_context->doc_cp); switch (fc->type) { case FC_TEXT: case FC_PASSWORD: case FC_FILE: { int i; format.style.attr |= AT_BOLD; for (i = 0; i < fc->size; i++) put_chrs(html_context, (unsigned char *)"_", 1); break; } case FC_CHECKBOX: format.style.attr |= AT_BOLD; put_chrs(html_context, (unsigned char *)"[ ]", 8); break; case FC_RADIO: format.style.attr |= AT_BOLD; put_chrs(html_context, (unsigned char *)"( )", 8); break; case FC_IMAGE: { unsigned char *al; mem_free_set(&format.image, NULL); al = get_url_val(a, (unsigned char *)"src", html_context->doc_cp); if (!al) al = get_url_val(a, (unsigned char *)"dynsrc", html_context->doc_cp); if (al) { format.image = join_urls(html_context->base_href, al); mem_free(al); } format.style.attr |= AT_BOLD; put_chrs(html_context, (unsigned char *)"[ ", 7); format.style.attr |= AT_NO_ENTITIES; if (fc->alt) put_chrs(html_context, fc->alt, strlen((const char *)fc->alt)); else if (fc->name) put_chrs(html_context, fc->name, strlen((const char *)fc->name)); else put_chrs(html_context, (unsigned char *)"Submit", 6); format.style.attr &= ~AT_NO_ENTITIES; put_chrs(html_context, (unsigned char *)" ]", 7); break; } case FC_SUBMIT: case FC_RESET: case FC_BUTTON: format.style.attr |= AT_BOLD; put_chrs(html_context, (unsigned char *)"[ ", 7); if (fc->default_value) { format.style.attr |= AT_NO_ENTITIES; put_chrs(html_context, fc->default_value, strlen((const char *)fc->default_value)); format.style.attr &= ~AT_NO_ENTITIES; } put_chrs(html_context, (unsigned char *)" ]", 7); break; case FC_TEXTAREA: case FC_SELECT: case FC_HIDDEN: INTERNAL("bad control type"); } pop_html_element(html_context); put_chrs(html_context, (unsigned char *)" ", 1); }
void html_a( struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5 ) { int eax; int ecx; int edx; unsigned char *href; if ( get_attr_value( a, "href", html_context->doc_cp, HTML_ATTR_EAT_NL ) ) { unsigned char *target; if ( html_context->stack.list_head_elinks ) { mem_free( &html_context->stack.list_head_elinks ); } strlen( &href[0] ); if ( href[0] == ' ' ) { do { href[0] = href[1]; *(int*)(strlen( &href[0] ))--; } while ( href[0] == ' ' ); } if ( eax ) { if ( href[ eax - 1 ] == ' ' ) { do { *(char*)(edx - 1) = 0; if ( eax == 1 ) href[0] = href[0]; else } while ( *(char*)(edx - 2) != ' ' ); href[0] = href[0]; } eax += 0; memmove( &href[0], &href[0], 1 ); &html_context->stack.list_head_elinks = ((void)( struct css_stylesheet *, struct uri *, unsigned char *, int )*)join_urls( html_context->base_href, &href[0] ); mem_free( &href[0] ); if ( get_target( html_context->options, a ) ) { if ( html_context->stack.list_head_elinks ) { mem_free( &html_context->stack.list_head_elinks ); html_context->stack.next = html_context->stack.next; } &html_context->stack.list_head_elinks = &target[0]; } else { if ( html_context->stack.list_head_elinks ) { mem_free( &html_context->stack.list_head_elinks ); } &html_context->stack.list_head_elinks = ((void)( struct css_stylesheet *, struct uri *, unsigned char *, int )*)stracpy( html_context->base_target ); } if ( get_global_history_item( &html_context->stack.list_head_elinks ) ) { &html_context->stack.list_head_elinks = &html_context->stack.list_head_elinks; &html_context->stack.list_head_elinks &= -2; &html_context->stack.list_head_elinks |= 2; } else { &html_context->stack.list_head_elinks = html_context->stack.next ? &html_context->stack.list_head_elinks : &html_context->stack.list_head_elinks; &html_context->stack.list_head_elinks &= -3; &html_context->stack.list_head_elinks |= 1; } if ( html_context->stack.list_head_elinks ) { mem_free( &html_context->stack.list_head_elinks ); } &html_context->stack.list_head_elinks = ((void)( struct css_stylesheet *, struct uri *, unsigned char *, int )*)get_attr_value( a, "title", html_context->doc_cp, HTML_ATTR_NONE ); html_focusable( &html_context[0], a ); xxx3 = "name"; html_context = &html_context[0]; a = a; } memmove( &href[0], &href[0], 1 ); &html_context->stack.list_head_elinks = ((void)( struct css_stylesheet *, struct uri *, unsigned char *, int )*)join_urls( html_context->base_href, &href[0] ); mem_free( &href[0] ); } else