summaryrefslogtreecommitdiff
path: root/misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'misc.c')
-rw-r--r--misc.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/misc.c b/misc.c
index 1f908f9..02a5bca 100644
--- a/misc.c
+++ b/misc.c
@@ -94,7 +94,40 @@ mknumber(int type, vlong ival, double dval)
Term *
mkstring(Rune *text)
{
- Term *t = mkterm(StringTerm);
- t->text = text;
+ Term *t = nil;
+ Rune *r;
+
+ switch(flagdoublequotes){
+ case DoubleQuotesChars:
+ for(r = text; *r != '\0'; r++){
+ Rune *chtext = runesmprint("%C", *r);
+ Term *ch = mkatom(chtext);
+ t = appendterm(t, ch);
+ }
+ t = mklist(t);
+ break;
+ case DoubleQuotesCodes:
+ for(r = text; *r != '\0'; r++){
+ Term *code = mknumber(NumberInt, *r, 0);
+ t = appendterm(t, code);
+ }
+ t = mklist(t);
+ break;
+ break;
+ case DoubleQuotesAtom:
+ t = mkatom(text);
+ }
return t;
}
+
+Term *
+mklist(Term *elems)
+{
+ if(elems == nil)
+ return mkatom(L"[]");
+ else{
+ Term *t = copyterm(elems, nil);
+ t->next = mklist(elems->next);
+ return mkcompound(L".", 2, t);
+ }
+}