Esempio n. 1
0
value type_num_str(value f)
	{
	if (!f->L) return 0;
	{
	value x = arg(f->R);
	if (x->T == type_num)
		f = reduce_str(f,num_str(get_num(x)));
	else
		f = reduce_void(f);
	drop(x);
	return f;
	}
	}
Esempio n. 2
0
/* (var_get var) returns val, where val is the current value of var. */
value type_var_get(value f)
	{
	if (!f->L) return 0;
	{
	value x = arg(f->R);
	if (x->T == type_var)
		f = hold(get_var(x));
	else
		f = reduce_void(f);
	drop(x);
	return f;
	}
	}
Esempio n. 3
0
/* (fclose fh) Close the file handle. */
value type_fclose(value f)
	{
	if (!f->L) return 0;
	{
	value out = arg(f->R);
	if (out->T == type_file)
		{
		fclose(get_fh(out));
		f = hold(&QI);
		}
	else
		f = reduce_void(f);
	drop(out);
	return f;
	}
	}
Esempio n. 4
0
/* (remove path) Remove path from file system; return 0 if successful or -1
otherwise. */
value type_remove(value f)
	{
	if (!f->L) return 0;
	{
	value x = arg(f->R);
	if (x->T == type_str)
		{
		string path = get_str(x);
		int code = remove(path->data);
		f = Qnum0(code);
		}
	else
		f = reduce_void(f);
	drop(x);
	return f;
	}
	}
Esempio n. 5
0
/* (var_put var val) replaces the value of the variable. */
value type_var_put(value f)
	{
	if (!f->L || !f->L->L) return 0;
	{
	value x = arg(f->L->R);
	if (x->T == type_var)
		{
		value v = arg(f->R);
		drop(x->R->R);
		x->R->R = v;
		f = hold(&QI);
		}
	else
		f = reduce_void(f);
	drop(x);
	return f;
	}
	}
Esempio n. 6
0
/* (fopen path mode) Open a file and return fh, where fh is the open file
handle or void on failure. */
value type_fopen(value f)
	{
	if (!f->L || !f->L->L) return 0;
	{
	value x = arg(f->L->R);
	value y = arg(f->R);
	if (x->T == type_str && y->T == type_str)
		{
		string path = get_str(x);
		string mode = get_str(y);
		FILE *fh = fopen(path->data,mode->data);
		f = fh ? Qfile(fh) : hold(&Qvoid);
		}
	else
		f = reduce_void(f);
	drop(x);
	drop(y);
	return f;
	}
	}
Esempio n. 7
0
static value op_flock(value f, int operation)
	{
	if (!f->L) return 0;
	{
	value x = arg(f->R);
	if (x->T == type_file)
		{
		int code = flock(fileno(get_fh(x)),operation);
		if (code < 0)
			{
			perror("flock");
			die(0);
			}
		f = hold(&QI);
		}
	else
		f = reduce_void(f);
	drop(x);
	return f;
	}
	}
Esempio n. 8
0
/* (void x) = void */
value type_void(value f)
	{
	if (!f->L) return 0;
	return reduce_void(f);
	}