diff options
| author | Bdale Garbee <bdale@gag.com> | 2018-02-12 16:38:57 -0700 | 
|---|---|---|
| committer | Bdale Garbee <bdale@gag.com> | 2018-02-12 16:38:57 -0700 | 
| commit | ee79a205e118ea8730a02cc327d8fb79cc5f74ff (patch) | |
| tree | be0b0c9fbccaa84acadb1d18688aae9b8db3e048 /src/scheme/ao_scheme_string.c | |
| parent | 365eee3ebfe73204033089b363687228f97e5d98 (diff) | |
| parent | 78a90fc760b88ab66c5c238289afc38356e29d8a (diff) | |
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Diffstat (limited to 'src/scheme/ao_scheme_string.c')
| -rw-r--r-- | src/scheme/ao_scheme_string.c | 208 | 
1 files changed, 0 insertions, 208 deletions
| diff --git a/src/scheme/ao_scheme_string.c b/src/scheme/ao_scheme_string.c deleted file mode 100644 index dfc74966..00000000 --- a/src/scheme/ao_scheme_string.c +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright © 2016 Keith Packard <keithp@keithp.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -#include "ao_scheme.h" - -static void string_mark(void *addr) -{ -	(void) addr; -} - -static int string_size(void *addr) -{ -	struct ao_scheme_string	*string = addr; -	if (!addr) -		return 0; -	return strlen(string->val) + 2; -} - -static void string_move(void *addr) -{ -	(void) addr; -} - -const struct ao_scheme_type ao_scheme_string_type = { -	.mark = string_mark, -	.size = string_size, -	.move = string_move, -	.name = "string", -}; - -static struct ao_scheme_string * -ao_scheme_string_alloc(int len) -{ -	struct ao_scheme_string	*s; - -	s = ao_scheme_alloc(len + 2); -	if (!s) -		return NULL; -	s->type = AO_SCHEME_STRING; -	return s; -} - -struct ao_scheme_string * -ao_scheme_string_copy(struct ao_scheme_string *a) -{ -	int			alen = strlen(a->val); -	struct ao_scheme_string	*r; - -	ao_scheme_string_stash(a); -	r = ao_scheme_string_alloc(alen); -	a = ao_scheme_string_fetch(); -	if (!r) -		return NULL; -	strcpy(r->val, a->val); -	return r; -} - -struct ao_scheme_string * -ao_scheme_string_make(char *a) -{ -	struct ao_scheme_string	*r; - -	r = ao_scheme_string_alloc(strlen(a)); -	if (!r) -		return NULL; -	strcpy(r->val, a); -	return r; -} - -struct ao_scheme_string * -ao_scheme_atom_to_string(struct ao_scheme_atom *a) -{ -	int			alen = strlen(a->name); -	struct ao_scheme_string	*r; - -	ao_scheme_atom_stash(a); -	r = ao_scheme_string_alloc(alen); -	a = ao_scheme_atom_fetch(); -	if (!r) -		return NULL; -	strcpy(r->val, a->name); -	return r; -} - -struct ao_scheme_string * -ao_scheme_string_cat(struct ao_scheme_string *a, struct ao_scheme_string *b) -{ -	int				alen = strlen(a->val); -	int				blen = strlen(b->val); -	struct ao_scheme_string 	*r; - -	ao_scheme_string_stash(a); -	ao_scheme_string_stash(b); -	r = ao_scheme_string_alloc(alen + blen); -	b = ao_scheme_string_fetch(); -	a = ao_scheme_string_fetch(); -	if (!r) -		return NULL; -	strcpy(r->val, a->val); -	strcpy(r->val+alen, b->val); -	return r; -} - -ao_poly -ao_scheme_string_pack(struct ao_scheme_cons *cons) -{ -	struct ao_scheme_string	*r; -	char			*rval; -	int			len; - -	len = ao_scheme_cons_length(cons); -	ao_scheme_cons_stash(cons); -	r = ao_scheme_string_alloc(len); -	cons = ao_scheme_cons_fetch(); -	if (!r) -		return AO_SCHEME_NIL; -	rval = r->val; - -	while (cons) { -		bool fail = false; -		ao_poly	car = cons->car; -		*rval++ = ao_scheme_poly_integer(car, &fail); -		if (fail) -			return ao_scheme_error(AO_SCHEME_INVALID, "non-int passed to pack"); -		cons = ao_scheme_cons_cdr(cons); -	} -	*rval++ = 0; -	return ao_scheme_string_poly(r); -} - -ao_poly -ao_scheme_string_unpack(struct ao_scheme_string *a) -{ -	struct ao_scheme_cons	*cons = NULL, *tail = NULL; -	int			c; -	int			i; - -	for (i = 0; (c = a->val[i]); i++) { -		struct ao_scheme_cons	*n; -		ao_scheme_cons_stash(cons); -		ao_scheme_cons_stash(tail); -		ao_scheme_string_stash(a); -		n = ao_scheme_cons_cons(ao_scheme_int_poly(c), AO_SCHEME_NIL); -		a = ao_scheme_string_fetch(); -		tail = ao_scheme_cons_fetch(); -		cons = ao_scheme_cons_fetch(); - -		if (!n) { -			cons = NULL; -			break; -		} -		if (tail) -			tail->cdr = ao_scheme_cons_poly(n); -		else -			cons = n; -		tail = n; -	} -	return ao_scheme_cons_poly(cons); -} - -void -ao_scheme_string_write(ao_poly p, bool write) -{ -	struct ao_scheme_string	*s = ao_scheme_poly_string(p); -	char			*sval = s->val; -	char			c; - -	if (write) { -		putchar('"'); -		while ((c = *sval++)) { -			switch (c) { -			case '\n': -				printf ("\\n"); -				break; -			case '\r': -				printf ("\\r"); -				break; -			case '\t': -				printf ("\\t"); -				break; -			default: -				if (c < ' ') -					printf("\\%03o", c); -				else -					putchar(c); -				break; -			} -		} -		putchar('"'); -	} else { -		while ((c = *sval++)) -			putchar(c); -	} -} | 
