Beispiel #1
0
newtRef NsGetEnv(newtRefArg rcvr, newtRefArg r)
{
    if (! NewtRefIsString(r))
        return NewtThrow(kNErrNotAString, r);

    return NewtGetEnv(NewtRefToString(r));
}
Beispiel #2
0
void NewtInitSysEnv(void)
{
	struct {
		char *			name;
		newtRefVar  	slot;
		const char *	defaultValue;
	} envs[] = {
		{"NEWTLIB",		NSSYM0(NEWTLIB),	__LIBDIR__ ":."},
		{"PLATFORM",	NSSYM(PLATFORM),	__PLATFORM__},
		{"DYLIBSUFFIX",	NSSYM(DYLIBSUFFIX),	__DYLIBSUFFIX__},
		{NULL,			kNewtRefUnbind,		NULL}
	};

	newtRefVar  env;
	newtRefVar  proto;
	newtRefVar  v;
	uint16_t	i;

	env = NcMakeFrame();
	proto = NcMakeFrame();

	for (i = 0; envs[i].name != NULL; i++)
	{
		NcSetSlot(proto, envs[i].slot, NewtMakeString(envs[i].defaultValue, true));
	}

	/* NEWTLIB is a special case, it can be overridden from the value in
	   the global variables. */
	v = NewtGetEnv("NEWTLIB");
	if (NewtRefIsString(v))
	{
		v = NcSplit(v, NewtMakeCharacter(':'));
		NcSetSlot(proto, NSSYM0(NEWTLIB), v);
	}
	else
	{
		newtRefVar default_newtlib_array[] = {NSSTR(__LIBDIR__), NSSTR(".")};
		newtRefVar default_newtlib = NewtMakeArray2(
				kNewtRefNIL,
				sizeof(default_newtlib_array) / sizeof(newtRefVar),
				default_newtlib_array);
		NcSetSlot(proto, NSSYM0(NEWTLIB), default_newtlib);
	}

	NcSetSlot(env, NSSYM0(_proto), NewtPackLiteral(proto));
    NcSetSlot(GLOBALS, NSSYM0(_ENV_), env);
}