##- # Author: Brian Tiffin # Dedicated to the public domain # # Date: October 2016 # Modified: 2016-10-25/06:18-0400 ##+ # # unificl.icn, Forth scripting with ficl # # tectonics: # gcc -o unificl.so -shared -fpic unificl.c -lficl # link fullimag procedure main() unificl := loadfunc("./unificl.so", "unificl") unificlStack := loadfunc("./unificl.so", "unificlStack") unificlFloatStack := loadfunc("./unificl.so", "unificlFloatStack") unificlRundown := loadfunc("./unificl.so", "unificlRundown") # say hello, and leave a number on the stack code := ".( Hello, world) cr 123454321" write("\nUnicon evaluate: ", image(code)) result := unificl(code) write("Unicon ficl (", result, "): ", fullimage(unificlStack())) # display the left over number from previous invocation code := ". cr" write("\nUnicon evaluate: ", image(code)) result := unificl(code) write("Unicon ficl (", result, "): ", fullimage(unificlStack())) # rundown the ficl system unificlRundown() # start a fresh copy, and leave some numbers on the data stack code := ": unificl-test 6 7 * dup 1+ dup 1+ ; unificl-test" write("\nUnicon evaluate: ", image(code)) result := unificl(code) write("Unicon ficl (", result, "): ", fullimage(unificlStack())) # try the floating point stack code := ": unificl-float 1e 4.2e ; unificl-float" write("\nUnicon evaluate: ", image(code)) result := unificl(code) write("Unicon ficl (", result, "): ", fullimage(unificlFloatStack())) # try addresses, add the Xt of the sample definition to the stack code := "' unificl-test" write("\nUnicon evaluate: ", image(code)) result := unificl(code) write("Unicon ficl (", result, "): ", fullimage(unificlStack())) # execute that Xt code := "execute" write("\nUnicon evaluate: ", image(code)) result := unificl(code) write("Unicon ficl (", result, "): ", fullimage(unificlStack())) # and a test with an error code := "nonsense forth code" write("\nUnicon evaluate: ", image(code)) write("Unicon expect ficl error") result := unificl(code) write("Unicon ficl (", result, "): ", fullimage(unificlStack())) # and a test with a crash code := "0 ?" write("\nUnicon evaluate: ", image(code)) write("Unicon expect ficl segfault") result := unificl(code) write("Unicon ficl (", result, "): ", fullimage(unificlStack())) end