Exemplo n.º 1
0
Arquivo: sys.c Projeto: ilyak/vimol
struct sys *
sys_create(const char *path)
{
	struct sys *sys;

	sys = sys_create_empty();
	sys_add_frame(sys, atoms_create());

	if (path == NULL || !util_file_exists(path))
		return (sys);

	if (!read_file(sys, path, TRUE))
		return (NULL);

	sys->is_modified = FALSE;

	return (sys);
}
Exemplo n.º 2
0
/* this function will be called once by the server during startup */
int session_mem_module_init(u_config_t *config, session_opt_t *so)
{
    ppc_t *ppc;
    u_config_t *c;
    const char *v;

    /* config may be NULL */
    dbg_err_if (so == NULL);

    /* defaults */
    so->max_count = 0;  /* no limits */
    so->mem_limit = 0;  /* no limits */

    if(config && u_config_get_subkey(config, "memory", &c) == 0)
    {
        if((v = u_config_get_subkey_value(c, "max_count")) != NULL)
            so->max_count = atoi(v);

        if((v = u_config_get_subkey_value(c, "limit")) != NULL)
            so->mem_limit = atoi(v);
    }

    /* setup ppc parent <-> child channel */
    ppc = server_get_ppc(ctx->server);
    dbg_err_if(ppc == NULL);

    /* create an atom list to store in-memory session data */
    dbg_err_if(atoms_create(&so->atoms));

    /* register PPC commands callbacks */
    dbg_err_if(ppc_register(ppc, PPC_CMD_MSES_SAVE, session_cmd_save, so));
    dbg_err_if(ppc_register(ppc, PPC_CMD_MSES_GET, session_cmd_get, so));
    dbg_err_if(ppc_register(ppc, PPC_CMD_MSES_DELOLD, session_cmd_delold, so));
    dbg_err_if(ppc_register(ppc, PPC_CMD_MSES_REMOVE, session_cmd_remove, so));

    return 0;
err:
    return ~0;
}
Exemplo n.º 3
0
apr_status_t teeterl_init()
{
	xmod_bin_t *mp, *me;

	apr_initialize();
	atexit(apr_terminate);

	apr_pool_create(&g_mempool, 0);
	g_xpool = xpool_make(g_mempool);

	atoms_create(&g_atoms, g_mempool);
	g_base = code_base_make(g_mempool);

	module_bins = apr_array_make(g_mempool, 8, sizeof(xmod_bin_t));

	//teeterl_add_mod(init_xmod_bin);
	//...
#include "premods.inc"

	//preload all modules registered to date
	mp = (xmod_bin_t *)module_bins->elts;
	me = mp + module_bins->nelts;
	while (mp < me)
	{
		atom_cache_t *cache = atom_cache_make(g_xpool);
		term_t code = unpack_term(mp->data, mp->size, cache, g_atoms, g_xpool);

		mp->is_preloaded = 1;
		if (!code_base_load2(g_base, code))
			return APR_EBADF;

		mp++;
	}
	
	return APR_SUCCESS;
}
Exemplo n.º 4
0
Arquivo: sys.c Projeto: ilyak/vimol
static int
load_from_xyz(struct sys *sys, const char *path, int is_new)
{
	FILE *fp;
	char *buffer;
	struct atoms *atoms;
	struct atom atom;
	int i, n;

	if ((fp = fopen(path, "r")) == NULL) {
		error_set("unable to open %s", path);
		return (FALSE);
	}

	if ((buffer = util_next_line(NULL, fp)) == NULL) {
		error_set("unexpected end of file");
		goto error;
	}

	if (sscanf(buffer, "%d", &n) != 1 || n < 1) {
		error_set("unexpected number of atoms");
		goto error;
	}

	buffer = util_next_line(buffer, fp);

	for (i = 0; i < n; i++) {
		if ((buffer = util_next_line(buffer, fp)) == NULL) {
			error_set("unexpected end of file");
			goto error;
		}

		if (!parse_atom_xyz(buffer, &atom))
			goto error;

		sys_add_atom(sys, atom.name, atom.xyz);
	}

	if (!is_new) {
		free(buffer);
		fclose(fp);
		return (TRUE);
	}

	while ((buffer = util_next_line(buffer, fp)) != NULL) {
		if (util_is_empty(buffer))
			continue;

		if (sscanf(buffer, "%d", &n) != 1 || n != sys_get_atom_count(sys)) {
			error_set("unexpected number of atoms");
			goto error;
		}

		sys_add_frame(sys, atoms_create());
		sys_set_frame(sys, sys_get_frame_count(sys) - 1);

		buffer = util_next_line(buffer, fp);

		for (i = 0; i < n; i++) {
			if ((buffer = util_next_line(buffer, fp)) == NULL) {
				error_set("unexpected end of file");
				goto error;
			}

			if (!parse_atom_xyz(buffer, &atom))
				goto error;

			atoms = sys_get_atoms(sys, sys->current_frame);
			atoms_add(atoms, atom.name, atom.xyz);
		}
	}

	sys_set_frame(sys, 0);
	fclose(fp);
	return (TRUE);
error:
	free(buffer);
	fclose(fp);
	return (FALSE);
}