1 REM > printer library for mal in BBC BASIC
3 DEF FNpr_str(val%, print_readably%)
5 IF FNis_nil(val%) THEN ="nil"
6 IF FNis_boolean(val%) THEN
7 IF FNunbox_boolean(val%) THEN ="true" ELSE ="false"
9 IF FNis_int(val%) THEN =STR$(FNunbox_int(val%))
10 IF FNis_string(val%) THEN
11 val$ = FNunbox_string(val%)
12 IF LEFT$(val$, 1) = CHR$(127) THEN =":" + MID$(val$, 2)
13 IF print_readably% THEN =FNformat_string(val$) ELSE =val$
15 IF FNis_symbol(val%) THEN =FNunbox_symbol(val%)
16 IF FNis_corefn(val%) OR FNis_fn(val%) THEN ="#<function>"
17 IF FNis_list(val%) THEN
19 WHILE NOT FNis_empty(val%)
20 IF LEN(ret$) > 1 THEN ret$ += " "
21 ret$ += FNpr_str(FNlist_car(val%), print_readably%)
22 val% = FNlist_cdr(val%)
26 IF FNis_atom(val%) THEN
27 ="(atom "+FNpr_str(FNatom_deref(val%), print_readably%)+")"
29 ERROR &40E809F0, "Unprintable value"
31 DEF FNformat_string(strval$)
33 IF strval$ = "" THEN =""""""
34 FOR ptr% = 1 TO LEN(strval$)
35 c$ = MID$(strval$, ptr%, 1)
37 WHEN "\", """": out$ += "\" + c$
38 WHEN CHR$(10): out$ += "\n"
45 REM indent-tabs-mode: nil