Пример #1
0
void
sort_by_field(char *name)
{
	int field;

	select_none();

	name = (name == NULL) ? opt_get_str(STR_SORT_FIELD) : name;
	find_field_number(name, &field);

	if(field < 0) {
		if(name == opt_get_str(STR_SORT_FIELD))
			statusline_msg(_("Invalid field value defined "
				"in configuration"));
		else
			statusline_msg(_("Invalid field value for sorting"));

		return;
	}

	sort_field = field;

	qsort((void *)database, items, sizeof(list_item), namecmp);

	refresh_screen();
}
Пример #2
0
static int
check_options()
{
	char *str;
	int err = 0;

	str = opt_get_str(STR_PRESERVE_FIELDS);
	if(strcasecmp(str, "all") && strcasecmp(str, "none") &&
			strcasecmp(str, "standard")) {
		fprintf(stderr, _("valid values for the 'preserve_fields' "
					"option are 'all', 'standard' "
					"(default), and 'none'\n"));
		restore_default(&abook_vars[STR_PRESERVE_FIELDS]);
		err++;
	}
	str = opt_get_str(STR_ADDRESS_STYLE);
	if(strcasecmp(str, "eu") && strcasecmp(str, "uk") &&
			strcasecmp(str, "us")) {
		fprintf(stderr, _("valid values for the 'address_style' "
					"option are 'eu' (default), 'uk', "
					"and 'us'\n"));
		restore_default(&abook_vars[STR_ADDRESS_STYLE]);
		err++;
	}

	return err;
}
Пример #3
0
void
ui_print_database()
{
    FILE *handle;
    char *command = opt_get_str(STR_PRINT_COMMAND);
    int mode;

    if(list_is_empty())
        return;

    switch(statusline_askchoice(_("Print <a>ll, print <s>elected, or <c>ancel?"), S_("keybindings:all/selected/cancel|asc"), 3)) {
    case 1:
        mode = ENUM_ALL;
        break;
    case 2:
        if( !selected_items() ) {
            statusline_msg(_("No selected items"));
            return;
        }
        mode = ENUM_SELECTED;
        break;
    default:
        refresh_screen();
        return;
    }

    clear_statusline();

    if( ! *command || (handle = popen(command, "w")) == NULL)
        return;

    fexport("text", handle, mode);

    pclose(handle);
}
Пример #4
0
void wopt_init(struct imwindow *imwindow, const char *target) {
	char nnick[NUSER_LEN];
	char buf[NUSER_LEN + 256];
	char *pork_dir;
	char *p;
	pref_val_t *wopt = imwindow->opts;

	memset(wopt, 0, sizeof(pref_val_t) * WOPT_NUM_OPTS);

	wopt[WOPT_ACTIVITY_TYPES].i = opt_get_int(OPT_ACTIVITY_TYPES);
	wopt[WOPT_BEEP_ON_OUTPUT].b = opt_get_bool(OPT_BEEP_ON_OUTPUT);
	wopt[WOPT_HISTORY_LEN].i = opt_get_int(OPT_HISTORY_LEN);
	wopt[WOPT_LOG].b = opt_get_bool(OPT_LOG);
	wopt[WOPT_LOG_TYPES].i = opt_get_int(OPT_LOG_TYPES);
	wopt[WOPT_PRIVATE_INPUT].b = opt_get_bool(OPT_PRIVATE_INPUT);
	wopt[WOPT_SCROLL_ON_INPUT].b = opt_get_bool(OPT_SCROLL_ON_INPUT);
	wopt[WOPT_SCROLL_ON_OUTPUT].b = opt_get_bool(OPT_SCROLL_ON_OUTPUT);
	wopt[WOPT_SCROLLBUF_LEN].i = opt_get_int(OPT_SCROLLBUF_LEN);
	wopt[WOPT_TIMESTAMP].b = opt_get_bool(OPT_TIMESTAMP);
	wopt[WOPT_WORDWRAP].b = opt_get_bool(OPT_WORDWRAP);
	wopt[WOPT_WORDWRAP_CHAR].c = opt_get_char(OPT_WORDWRAP_CHAR);

	normalize(nnick, target, sizeof(nnick));
	while ((p = strchr(nnick, '/')) != NULL)
		*p = '_';

	pork_dir = opt_get_str(OPT_NCIC_DIR);

	snprintf(buf, sizeof(buf), "%s/%s/logs/%s.log",
		pork_dir, imwindow->owner->username, nnick);

	wopt[WOPT_LOGFILE].s = xstrdup(buf);
}
Пример #5
0
static void set_work_lib(void)
{
   const char *work_name = opt_get_str("work-name");
   lib_t work = lib_find(work_name, false, false);
   if (work == NULL)
      work = lib_new(work_name);

   lib_set_work(work);
}
Пример #6
0
int
parse_database(FILE *in)
{
        char *line = NULL;
	char *tmp;
	int sec=0, field;
	list_item item;

	item = item_create();

	for(;;) {
		line = getaline(in);
		if(feof(in)) {
			if(item[field_id(NAME)] && sec) {
				add_item2database(item);
			} else {
				item_empty(item);
			}
			break;
		}

		if(!*line || *line == '\n' || *line == '#') {
			goto next;
		} else if(*line == '[') {
			if(item[field_id(NAME)] && sec ) {
				add_item2database(item);
			} else {
				item_empty(item);
			}
			sec = 1;
			memset(item, 0, ITEM_SIZE);
			if(!(tmp = strchr(line, ']')))
				sec = 0; /*incorrect section lines are skipped*/
		} else if((tmp = strchr(line, '=') ) && sec) {
			*tmp++ = '\0';
			find_field_number(line, &field);
			if(field != -1) {
				item[field] = xstrdup(tmp);
				goto next;
			} else if(!strcasecmp(opt_get_str(STR_PRESERVE_FIELDS),
						"all")){
				declare_unknown_field(line);
				item = xrealloc(item, ITEM_SIZE);
				item[fields_count - 1] = xstrdup(tmp);
				goto next;
			}
		}
next:
		xfree(line);
	}

	xfree(line);
	item_free(&item);
	return 0;
}
Пример #7
0
void input_init(struct input *input, u_int32_t width) {
	char *prompt;

	memset(input, 0, sizeof(*input));
	input->width = width;
	input->max_history_len = MAX_HISTORY_LEN;
	input->dirty = 1;

	prompt = opt_get_str(OPT_PROMPT);
	if (prompt != NULL)
		input_set_prompt(input, prompt);
}
Пример #8
0
void
init_default_views()
{
	char *str;
	int i, j, add_custom_fields, add_custom_view = 0;
	
	add_custom_fields =
		!strcasecmp(opt_get_str(STR_PRESERVE_FIELDS), "standard");

	/* if the user has configured views, no need to provide defaults */
	if(abook_views)
		goto out;
	add_custom_view = 1;

	struct {
		char *name;
		int fields[MAX_DEFAULT_FIELDS_PER_VIEW + 1];
	} default_views[] = {
		{ N_("CONTACT"), {NAME, EMAIL, -1} },
		{ N_("ADDRESS"),
			{ ADDRESS, ADDRESS2, CITY, STATE, ZIP, COUNTRY, -1 } },
		{ N_("PHONE"), { PHONE, WORKPHONE, FAX, MOBILEPHONE, -1 } },
		{ N_("OTHER"), { NICK, URL, NOTES, ANNIVERSARY, -1 } },
		{ 0 }
	};

	for(i = 0; default_views[i].name; i++) {
		for(j = 0; j < MAX_DEFAULT_FIELDS_PER_VIEW; j++) {
			if(default_views[i].fields[j] == -1)
				break;
			str = standard_fields[default_views[i].fields[j]].key;
			add_field_to_view(gettext(default_views[i].name), str);
		}
	}
out:

#define init_view(view, key, name) do { \
	if(add_custom_fields || add_custom_view) \
		declare_new_field(key, name, "string", \
				0 /*"standard" field already declared above*/);\
	if(add_custom_view) \
		add_field_to_view(view, key); \
} while(0);

	init_view(_("CUSTOM"), "custom1", _("Custom1"));
	init_view(_("CUSTOM"), "custom2", _("Custom2"));
	init_view(_("CUSTOM"), "custom3", _("Custom3"));
	init_view(_("CUSTOM"), "custom4", _("Custom4"));
	init_view(_("CUSTOM"), "custom5", _("Custom5"));
}
Пример #9
0
static void append_room(struct aim_chat *chat, char *sn) {
	char filename[65536];
	char *pork_dir = opt_get_str(OPT_PORK_DIR);
	FILE *file;

	if (pork_dir == NULL) {
		sprintf(filename, ".");
		opt_set(OPT_PORK_DIR, filename);
	}

	snprintf(filename, 65535, "%s/%s", pork_dir, chat->title);

	file = fopen(filename, "ab");
	if (file == NULL) {
		screen_err_msg("Unable to append %s to list for room %s.", sn, chat->title);
		return;
	}
	fputs(sn, file);
	fclose(file);
	return;
}
Пример #10
0
int
load_opts(char *filename)
{
	FILE *in;
	char *line = NULL;
	int n;
	int err = 0;

	if((in = fopen(filename, "r")) == NULL)
		return -1;

	for(n = 1;!feof(in); n++) {
		line = getaline(in);

		if(feof(in))
			break;

		if(line && *line) {
			opt_line_remove_comments(line);
			if(*line)
				err += opt_parse_line(line, n, filename) ? 1:0;
		}

		free(line);
		line = NULL;
	}

	free(line);

	/* post-initialization */
	err += check_options();
	if(!strcasecmp(opt_get_str(STR_PRESERVE_FIELDS), "standard"))
		init_standard_fields();

	return err;
}
Пример #11
0
char *text_to_html(const char *src) {
	static char buf[8192];
	u_int32_t i = 0;
	char *font_face;
	char *font_size;
	char *font_bgcolor;
	char *font_fgcolor;
	int ret;

	/*
	** Message is already formatted as HTML -- leave it alone.
	*/
	if (!strncasecmp(src, "<html>", 6)) {
		xstrncpy(buf, src, sizeof(buf));
		return (buf);
	}

	buf[0] = '\0';

	font_face = opt_get_str(OPT_OUTGOING_MSG_FONT);
	font_size = opt_get_str(OPT_OUTGOING_MSG_FONT_SIZE);
	font_bgcolor = opt_get_str(OPT_OUTGOING_MSG_FONT_BGCOLOR);
	font_fgcolor = opt_get_str(OPT_OUTGOING_MSG_FONT_FGCOLOR);

	ret = snprintf(buf, sizeof(buf), "<FONT LANG=\"0\"");
	if (ret < 0 || (size_t) ret >= sizeof(buf))
		return (NULL);
	i += ret;

	if (font_face != NULL && *font_face != '\0') {
		ret = snprintf(&buf[i], sizeof(buf) - i,
				" FACE=\"%s\"", font_face);
		if (ret < 0 || (size_t) ret >= sizeof(buf) - i)
			return (NULL);
		i += ret;
	}

	if (font_size != NULL && *font_size != '\0') {
		ret = snprintf(&buf[i], sizeof(buf) - i,
				" SIZE=\"%s\"", font_size);
		if (ret < 0 || (size_t) ret >= sizeof(buf) - i)
			return (NULL);
		i += ret;
	}

	if (font_bgcolor != NULL && *font_bgcolor != '\0') {
		ret = snprintf(&buf[i], sizeof(buf) - i,
				" BACK=\"%s\"", font_bgcolor);
		if (ret < 0 || (size_t) ret >= sizeof(buf) - i)
			return (NULL);
		i += ret;
	}

	if (font_fgcolor != NULL && *font_fgcolor != '\0') {
		ret = snprintf(&buf[i], sizeof(buf) - i,
				" COLOR=\"%s\"", font_fgcolor);
		if (ret < 0 || (size_t) ret >= sizeof(buf) - i)
			return (NULL);
		i += ret;
	}

	if (i < sizeof(buf) - 1)
		buf[i++] = '>';

	while (*src != '\0' && i < sizeof(buf) - 1) {
		switch (*src) {
			int ret;

			case '<':
				ret = xstrncpy(&buf[i], "&lt;", sizeof(buf) - i);
				if (ret == -1)
					return (buf);
				i += ret;
				break;

			case '>':
				ret = xstrncpy(&buf[i], "&gt;", sizeof(buf) - i);
				if (ret == -1)
					return (buf);
				i += ret;
				break;

			case '&':
				ret = xstrncpy(&buf[i], "&amp;", sizeof(buf) - i);
				if (ret == -1)
					return (buf);
				i += ret;
				break;

			default:
				buf[i++] = *src;
				break;
		}

		src++;
	}

	buf[i] = '\0';
	return (buf);
}
Пример #12
0
void
init_index()
{
	assert(!index_elements);
	parse_index_format(opt_get_str(STR_INDEX_FORMAT));
}
Пример #13
0
static void opt_changed_prompt(void) {
	input_set_prompt(&screen.input, opt_get_str(OPT_PROMPT));
}
Пример #14
0
static int write_room(struct aim_chat *chat) {
	char filename[65536];
	char buf[MAXSNLEN+1024];
	char *pork_dir = opt_get_str(OPT_PORK_DIR);
	FILE *file;
	dlist_t *cur;

	if (pork_dir == NULL) {
		sprintf(filename, ".");
		opt_set(OPT_PORK_DIR, filename);
	}

	snprintf(filename, 65535, "%s/%s", pork_dir, chat->title);

	file = fopen(filename, "wb");
	if (file == NULL)
		return 0;

	cur = chat->downers;
	while (cur != NULL) {
		snprintf(buf, MAXSNLEN+3, "d:%s\n", (char*)cur->data);
		fputs(buf, file);
		buf[strcspn(buf, "\n")] = '\0';
		screen_err_msg("%s", buf);
		cur = cur->next;
	}

	cur = chat->fullops;
	while (cur != NULL) {
		snprintf(buf, MAXSNLEN+3, "f:%s\n", (char*)cur->data);
		fputs(buf, file);
		buf[strcspn(buf, "\n")] = '\0';
		screen_err_msg("%s", buf);
		cur = cur->next;
	}

	cur = chat->oparray;
	while (cur != NULL) {
		snprintf(buf, MAXSNLEN+3, "o:%s\n", (char*)cur->data);
		fputs(buf, file);
		buf[strcspn(buf, "\n")] = '\0';
		screen_err_msg("%s", buf);
		cur = cur->next;
	}

	cur = chat->halfops;
	while (cur != NULL) {
		snprintf(buf, MAXSNLEN+3, "h:%s\n", (char*)cur->data);
		fputs(buf, file);
		buf[strcspn(buf, "\n")] = '\0';
		screen_err_msg("%s", buf);
		cur = cur->next;
	}

	cur = chat->immlist;
	while (cur != NULL) {
		snprintf(buf, MAXSNLEN+3, "i:%s\n", (char*)cur->data);
		fputs(buf, file);
		buf[strcspn(buf, "\n")] = '\0';
		screen_err_msg("%s", buf);
		cur = cur->next;
	}

	cur = chat->abarray;
	while (cur != NULL) {
		snprintf(buf, MAXSNLEN+3, "b:%s\n", (char*)cur->data);
		fputs(buf, file);
		buf[strcspn(buf, "\n")] = '\0';
		screen_err_msg("%s", buf);
		cur = cur->next;
	}

	cur = chat->akarray;
	while (cur != NULL) {
		snprintf(buf, MAXSNLEN+3, "k:%s\n", (char*)cur->data);
		fputs(buf, file);
		buf[strcspn(buf, "\n")] = '\0';
		screen_err_msg("%s", buf);
		cur = cur->next;
	}

	cur = chat->awarray;
	while (cur != NULL) {
		snprintf(buf, MAXSNLEN+3, "w:%s\n", (char*)cur->data);
		fputs(buf, file);
		buf[strcspn(buf, "\n")] = '\0';
		screen_err_msg("%s", buf);
		cur = cur->next;
	}

	fclose(file);
	return 1;
}