Example #1
0
char		*ft_readline(char *prompt, int settings)
{
	t_rl	rl;
	char	*line;
	int		code;

	ft_initcap();
	if (rl_init(&rl, settings, prompt) < 0)
		return (NULL);
	write(1, prompt, rl.promptsize);
	while (!ISIN(rl.bitset, RL_BS_FLUSH))
	{
		dumpdyn(rl.dyn);
		if (!(code = rl_read()))
			continue ;
		if (rl_maj(&rl, code) < 0)
		{
			rl_destroy(&rl);
			return (NULL);
		}
	}
	line = ft_strjoin(rl.dyn.str, rl.dyn.strend - rl.dyn.post);
	rl_destroy(&rl);
	return (line);
}
Example #2
0
int rl_read_header(rlite *db)
{
	db->page_size = HEADER_SIZE;
	int retval;
	if (db->driver_type == RL_MEMORY_DRIVER) {
		db->page_size = DEFAULT_PAGE_SIZE;
		RL_CALL(rl_create_db, RL_OK, db);
	}
	else if (db->driver_type == RL_FILE_DRIVER) {
		RL_CALL(file_driver_fp, RL_OK, db);
		RL_CALL(rl_apply_wal, RL_OK, db);
		retval = rl_read(db, &rl_data_type_header, 0, NULL, NULL, 1);
		if (retval == RL_NOT_FOUND && rl_has_flag(db, RLITE_OPEN_CREATE)) {
			db->page_size = DEFAULT_PAGE_SIZE;
			RL_CALL(rl_create_db, RL_OK, db);
			RL_CALL(rl_write, RL_OK, db, &rl_data_type_header, 0, NULL);
		}
		else if (retval != RL_FOUND) {
			goto cleanup;
		}
	} else {
		fprintf(stderr, "Unknown driver type %d\n", db->driver_type);
		retval = RL_UNEXPECTED;
		goto cleanup;
	}
	retval = RL_OK;
cleanup:
	return retval;
}
Example #3
0
static int		readline_loop(t_rl *rl)
{
	long int	input;

	while (42)
	{
		if (ISIN(rl->bitset, RL_BS_FLUSH) || ISIN(rl->bitset, RL_BS_QFLUSH))
			break ;
		if (!(input = rl_read()))
			continue ;
		if (rl_maj(rl, input) < 0)
		{
			rl_destroy(rl);
			return (-1);
		}
	}
	return (0);
}
Example #4
0
static int		readline_loop(t_rl *rl)
{
	long int	input;

	while (42)
	{
		if (ISIN(rl->bitset, RL_BS_FLUSH) || ISIN(rl->bitset, RL_BS_QFLUSH))	//If \n, \0, errors occurs, break the loop
			break ;
		if (!(input = rl_read()))												//Get an user input (if error just continue)
			continue ;
		if (rl_maj(rl, input) < 0)												//Maj buffers and screen depending of the input
		{
			rl_destroy(rl);
			return (-1);
		}
	}
	return (0);
}