void filebrowser_backend_copy_files_async(FilebrowserBackend *filebackend, GFile *destdir, gchar *sources) { Tcopyfile *cf; gchar **splitted, **tmp; cf = g_slice_new0(Tcopyfile); cf->destdir = destdir; cf->fbback=filebackend; g_object_ref(cf->destdir); /* create the source and destlist ! */ tmp = splitted = g_strsplit(sources, "\n",0); while (*tmp) { trunc_on_char(trunc_on_char(*tmp, '\r'), '\n'); if (strlen(*tmp) > 1) { GFile *src; src = g_file_new_for_commandline_arg(*tmp); cf->sourcelist = g_slist_append(cf->sourcelist, src); } tmp++; } g_strfreev(splitted); copy_uris_process_queue(cf); }
static gboolean parse_config_file(GList * config_list, gchar * filename) { gboolean retval = FALSE; gchar *tmpstring = NULL, *tmpstring2; gchar **tmparray; GList *rclist, *tmplist, *tmplist2; Tconfig_list_item *tmpitem; DEBUG_MSG("parse_config_file, started\n"); rclist = NULL; rclist = get_list(filename, rclist,FALSE); if (rclist == NULL) { DEBUG_MSG("no rclist, returning!\n"); return retval; } /* empty all variables that have type GList ('l') */ tmplist = g_list_first(config_list); while (tmplist != NULL) { tmpitem = (Tconfig_list_item *) tmplist->data; DEBUG_MSG("parse_config_file, type=%c, identifier=%s\n", tmpitem->type, tmpitem->identifier); if (tmpitem->type == 'l' || tmpitem->type == 'a') { DEBUG_MSG("parse_config_file, freeing list before filling it\n"); free_stringlist((GList *) * (void **) tmpitem->pointer); *(void **) tmpitem->pointer = (GList *)NULL; } DEBUG_MSG("parse_config_file, type=%c, identifier=%s\n", tmpitem->type, tmpitem->identifier); tmplist = g_list_next(tmplist); } DEBUG_MSG("parse_config_file, all the type 'l' and 'a' have been emptied\n"); DEBUG_MSG("parse_config_file, length rclist=%d\n", g_list_length(rclist)); /* And now for parsing every line in the config file, first check if there is a valid identifier at the start. */ tmplist = g_list_first(rclist); while (tmplist) { tmpstring = (gchar *) tmplist->data; if (tmpstring != NULL) { DEBUG_MSG("parse_config_file, tmpstring=%s\n", tmpstring); g_strchug(tmpstring); tmplist2 = g_list_first(config_list); while (tmplist2) { tmpitem = (Tconfig_list_item *) tmplist2->data; #ifdef DEVELOPMENT if (!tmpitem || !tmpitem->identifier || !tmpstring) { g_print("WARNING: almost a problem!\n"); } #endif if (g_strncasecmp(tmpitem->identifier, tmpstring, strlen(tmpitem->identifier)) == 0) { /* we have found the correct identifier */ retval = TRUE; DEBUG_MSG("parse_config_file, identifier=%s, string=%s\n", tmpitem->identifier, tmpstring); /* move pointer past the identifier */ tmpstring += strlen(tmpitem->identifier); trunc_on_char(tmpstring, '\n'); g_strstrip(tmpstring); switch (tmpitem->type) { case 'i': *(int *) (void *) tmpitem->pointer = atoi(tmpstring); break; case 's': *(void **) tmpitem->pointer = (char *) realloc((char *) *(void **) tmpitem->pointer, strlen(tmpstring) + 1); strcpy((char *) *(void **) tmpitem->pointer, tmpstring); break; case 'e': tmpstring2 = unescape_string(tmpstring, FALSE); /* I wonder if that should be TRUE */ *(void **) tmpitem->pointer = (char *) realloc((char *) *(void **) tmpitem->pointer, strlen(tmpstring2) + 1); strcpy((char *) *(void **) tmpitem->pointer, tmpstring2); g_free(tmpstring2); break; case 'l': case 'm': tmpstring2 = g_strdup(tmpstring); * (void **) tmpitem->pointer = g_list_prepend((GList *) * (void **) tmpitem->pointer, tmpstring2); DEBUG_MSG("parse_config_file, *(void **)tmpitem->pointer=%p\n", *(void **) tmpitem->pointer); break; case 'a': tmparray = string_to_array(tmpstring); if (tmpitem->len <= 0 || tmpitem->len == count_array(tmparray)) { * (void **) tmpitem->pointer = g_list_prepend((GList *) * (void **) tmpitem->pointer, tmparray); } else { DEBUG_MSG("parse_config_file, not storing array, count_array() != tmpitem->len\n"); g_strfreev(tmparray); } DEBUG_MSG("parse_config_file, *(void **)tmpitem->pointer=%p\n", *(void **) tmpitem->pointer); break; default: break; } tmplist2 = g_list_last(tmplist2); } tmplist2 = g_list_next(tmplist2); } } tmplist = g_list_next(tmplist); } DEBUG_MSG("parse_config_file, parsed all entries, freeing list read from file\n"); free_stringlist(rclist); return retval; }
void parse_integer_for_dialog(gchar * valuestring, GtkWidget * spin, GtkWidget * entry, GtkWidget * checkbox) { gchar *tmp; gint value = 0; gboolean found = FALSE; gchar *sign = NULL; gboolean percentage = FALSE; DEBUG_MSG("parse_integer_for_dialog, started, valuestring=%s\n", valuestring); if (!valuestring) { if (spin) gtk_entry_set_text(GTK_ENTRY(GTK_SPIN_BUTTON(spin)), ""); if (entry) gtk_entry_set_text(GTK_ENTRY(entry), ""); return; } tmp = strrchr(valuestring, '-'); if (tmp) { DEBUG_MSG("parse_integer_for_dialog, found a -!, tmp=%s\n", tmp); value = strtod(++tmp, NULL); sign = "-"; found = TRUE; DEBUG_MSG("parse_integer_for_dialog, value=%d\n", value); } tmp = strrchr(valuestring, '+'); if (tmp) { DEBUG_MSG("parse_integer_for_dialog, found a +!, tmp=%s\n", tmp); value = strtod(++tmp, NULL); sign = "+"; found = TRUE; DEBUG_MSG("parse_integer_for_dialog, value=%d\n", value); } tmp = strchr(valuestring, '%'); if (tmp) { DEBUG_MSG("parse_integer_for_dialog, found a percentage!\n"); valuestring = trunc_on_char(valuestring, '%'); value = strtod(valuestring, NULL); percentage = TRUE; found = TRUE; DEBUG_MSG("parse_integer_for_dialog, value=%d\n", value); } if (!found) { value = strtod(valuestring, NULL); } if (spin) { gtk_entry_set_text(GTK_ENTRY (spin), "0"); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), value); } if (entry) { if (sign) { gtk_entry_set_text(GTK_ENTRY(entry), sign); } else { gtk_entry_set_text(GTK_ENTRY(entry), ""); } } if (checkbox) { DEBUG_MSG("parse_integer_for_dialog, checkbox set\n"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox), percentage); } else { DEBUG_MSG("parse_integer_for_dialog, NO checkbox set\n"); } }
static void parse_tagstring(Tbfwin *bfwin, gchar * tagstring, gint pos, gint end) { GList *tmplist = NULL; gchar *tmpstring, *item, *value, *tmp; gint count, prevtag, item_value_delimiter; Ttagitem *tag_item; Ttagpopup *tag_popup; gboolean in_quote, has_quotes; Ttagdialog tagdia[] = { {"body", G_CALLBACK(body_dialog)}, {"a", G_CALLBACK(quickanchor_dialog)}, {"p", G_CALLBACK(p_dialog)}, {"div", G_CALLBACK(div_dialog)}, {"span", G_CALLBACK(span_dialog)}, {"h1", G_CALLBACK(h1_dialog)}, {"h2", G_CALLBACK(h2_dialog)}, {"h3", G_CALLBACK(h3_dialog)}, {"h4", G_CALLBACK(h4_dialog)}, {"h5", G_CALLBACK(h5_dialog)}, {"h6", G_CALLBACK(h6_dialog)}, {"hr", G_CALLBACK(quickrule_dialog)}, {"font", G_CALLBACK(font_dialog)}, {"basefont", G_CALLBACK(basefont_dialog)}, {"table", G_CALLBACK(tabledialog_dialog)}, {"tr", G_CALLBACK(tablerowdialog_dialog)}, {"th", G_CALLBACK(tableheaddialog_dialog)}, {"td", G_CALLBACK(tabledatadialog_dialog)}, {"frameset", G_CALLBACK(frameset_dialog)}, {"frame",G_CALLBACK(frame_dialog)}, {"form",G_CALLBACK(formdialog_dialog)}, {"textarea",G_CALLBACK(textareadialog_dialog)}, {"select",G_CALLBACK(selectdialog_dialog)}, {"option",G_CALLBACK(optiondialog_dialog)}, {"meta",G_CALLBACK(meta_dialog)}, {"img",G_CALLBACK(image_insert_dialog)}, {"input",G_CALLBACK(inputdialog_rpopup)}, {"button",G_CALLBACK(buttondialog_dialog)}, {"link",G_CALLBACK(linkdialog_dialog)} }; DEBUG_MSG("parse_tagstring, started, tagstring=%s\n", tagstring); /* parsing the values from this tag */ tmpstring = g_strdup(tagstring); strip_any_whitespace(tmpstring); item_value_delimiter = prevtag = count = 0; has_quotes = in_quote = FALSE; while (tmpstring[count] != '\0') { /* extra spacing like between the name = value can be ignored */ if (g_ascii_isspace((gchar)tmpstring[count])) { gint count2 = count+1; /* search for the next character, is that a = or a " then we will ignore this space */ while (tmpstring[count2] != '\0') { if (g_ascii_isspace((gchar)tmpstring[count2]) || tmpstring[count2]=='\n') { count2++; } else { if (tmpstring[count2] == '=' || tmpstring[count2] == '"') { DEBUG_MSG("found ignorable spaces, increasing count from %d to %d\n", count, count2); count = count2; } break; } } } DEBUG_MSG("tmpstring[%d]=%c\n",count,tmpstring[count]); /* spaces (delimiters) are allowed within quotes, so we have to keep track of quotes */ if (tmpstring[count] == '"') { has_quotes = TRUE; if (in_quote) { in_quote = FALSE; } else { in_quote = TRUE; } } /* to split the item and the value we have to keep track of '=' characters */ if (tmpstring[count] == '=' && !in_quote) { item_value_delimiter = count; } /* it is a delimiter if it a space (or tab, newline), outside a quote or the last character of the string */ if ((g_ascii_isspace((gchar)tmpstring[count]) && (in_quote == FALSE)) || (tmpstring[count + 1] == '\0')) { if (prevtag == (count - 1)) { DEBUG_MSG("parse_tagstring, two spaces!\n"); prevtag = count; } else if (prevtag == 0) { DEBUG_MSG("parse_tagstring, this is the name of the tag itself\n"); prevtag = count; } else { DEBUG_MSG("parse_tagstring, making split, count=%d, prevtag=%d\n", count, prevtag); if (item_value_delimiter > prevtag) { item = g_strndup(&tmpstring[prevtag + 1], item_value_delimiter - prevtag - 1); DEBUG_MSG("item from %d to %d=%s\n", prevtag+1, item_value_delimiter - prevtag - 1, item); if (has_quotes == TRUE) { gchar *tmp; tmp = g_strndup(&tmpstring[item_value_delimiter + 1], count - item_value_delimiter - 1); g_strstrip(tmp); value = g_strndup(&tmp[1], strlen(tmp)-1); g_free(tmp); value = trunc_on_char(value, '"'); DEBUG_MSG("value from %d to %d=%s", item_value_delimiter + 2, count - item_value_delimiter - 2, value); } else { value = g_strndup(&tmpstring[item_value_delimiter + 1], count - item_value_delimiter); g_strstrip(value); } } else { item = g_strndup(&tmpstring[prevtag + 1], count - prevtag); value = g_strdup(""); } tmp = item; item = g_utf8_strdown(item, -1); g_free (tmp); g_strstrip(item); tag_item = g_malloc(sizeof(Ttagitem)); tag_item->item = item; tag_item->value = value; tmplist = g_list_append(tmplist, tag_item); DEBUG_MSG("parse_tagstring, item=%s with value=%s appended to list %p\n", item, value, tmplist); prevtag = count; has_quotes = FALSE; } } count++; } g_free(tmpstring); tag_popup = g_malloc(sizeof(Ttagpopup)); tag_popup->taglist = tmplist; tag_popup->pos = pos; tag_popup->end = end; DEBUG_MSG("parse_tagstring, tag_popup->pos=%d, tag_popup->end=%d\n", tag_popup->pos, tag_popup->end); tmpstring = g_strdup(tagstring); tmpstring = trunc_on_char(tmpstring, ' '); tmp = tmpstring; tmpstring = g_utf8_strdown(tmpstring, -1); g_free (tmp); /* identifying which tag we have */ DEBUG_MSG("parse_tagstring, searching for dialog for %s\n", tmpstring); { gint i, numitems = (sizeof(tagdia)/sizeof(Ttagdialog)); for (i=0;i<numitems;i++) { if (strcmp(tmpstring, tagdia[i].tag) == 0) { tagdia[i].func(bfwin, tag_popup); break; } } } /* if (strcmp(tmpstring, "card") == 0) { carddialog_cb(NULL, tag_popup); } else if (strcmp(tmpstring, "postfield") == 0) { postfielddialog_cb(NULL, tag_popup); } else if (strcmp(tmpstring, "setvar") == 0) { vardialog_cb(NULL, tag_popup); } else if (strcmp(tmpstring, "go") == 0) { godialog_cb(NULL, tag_popup); } else if (strcmp(tmpstring, "do") == 0) { dodialog_cb(NULL, tag_popup); } else if (strcmp(tmpstring, "anchor") == 0) { anchordialog_cb(NULL, tag_popup); } else if (strcmp(tmpstring, "access") == 0) { accessdialog_cb(NULL, tag_popup); } else if (strcmp(tmpstring, "script") == 0) { script_cb(NULL, tag_popup); } else if (strcmp(tmpstring, "link") == 0) { link_cb(NULL, tag_popup); } else*/ /* if (strcmp(tmpstring, "input") == 0) { DEBUG_MSG("parse_tagstring, identified as INPUT tag, splitting tag!\n"); input_tag_splitter(bfwin, tag_popup); }*/ tmplist = g_list_first(tmplist); while (tmplist) { g_free(((Ttagitem *) tmplist->data)->item); g_free(((Ttagitem *) tmplist->data)->value); g_free(tmplist->data); tmplist = g_list_next(tmplist); } g_list_free(tmplist); g_free(tag_popup); g_free(tmpstring); }