#include #include #include #include "apl9.h" Rune * ppdatum(Datum d) { Rune *result; switch(d.tag){ case ArrayTag: result = pparray(d.array); break; case FunctionTag: result = runesmprint("%C", primfuncnames[d.code]); break; case HybridTag: result = runesmprint("%C", primhybridnames[d.code]); break; case MonadicOpTag: result = runesmprint("%C", primmonopnames[d.code]); break; case DyadicOpTag: result = runesmprint("%C", primdyadopnames[d.code]); break; case LParTag: result = runestrdup(L"("); break; case RParTag: result = runestrdup(L")"); break; case LCurlTag: result = runestrdup(L"{"); break; case RCurlTag: result = runestrdup(L"}"); break; case LBracketTag: result = runestrdup(L"["); break; case RBracketTag: result = runestrdup(L"]"); break; default: result = runesmprint("", d.tag); } return result; } Rune * ppdatums(Datum *ds, int n) { int i; Rune *res = runesmprint(""); Rune *tmp; for(i = 0; i < n; i++){ tmp = res; res = runesmprint("%S %S", res, ppdatum(ds[i])); free(tmp); } return res; } Rune * pparray(Array *a) { /* can only print integer vectors and scalars for now, also nested */ if(a->type == AtypeArray){ Rune *res = runesmprint("["); Rune *tmp; for(int i = 0; i < a->size; i++){ tmp = res; res = runesmprint("%S%S%s", res, pparray(a->arraydata[i]), (i+1size)?" ":"]"); free(tmp); } return res; }else{ Rune *res = runesmprint(""); Rune *tmp; for(int i = 0; i < a->size; i++){ tmp = res; res = runesmprint("%S%lld%s", res, a->intdata[i], (i+1size)?" ":""); free(tmp); } return res; } }