#include #include #include #include #include #include #include #include #include #include #include #include #include #include // Path to the GAP root (for the library) #ifndef SYS_DEFAULT_PATHS #define SYS_DEFAULT_PATHS "/usr/share/gap" #endif extern char **environ; void print_stack_start() { printf("frame addres = %p\n", __builtin_frame_address(0)); } void stacker() { print_stack_start(); } void error_handler(char* msg) { printf("Error handler: %s", msg); } void eval(char* cmd) { printf("Input:\n%s", cmd); libgap_start_interaction(cmd); libgap_enter(); libGAP_ReadEvalCommand(libGAP_BottomLVars, 0); libGAP_ViewObjHandler(libGAP_ReadEvalResult); libgap_exit() char* out = libgap_get_output(); printf("Output:\n%s", out); libgap_finish_interaction(); } int main() { print_stack_start(); stacker(); char* argv[9]; argv[0] = "gap"; argv[1] = "-l"; argv[2] = SYS_DEFAULT_PATHS; argv[3] = "-m"; argv[4] = "32M"; argv[5] = "-q"; argv[6] = "-A"; argv[7] = "-T"; argv[8] = NULL; int argc=8; // gap_main_loop(argc, argv, environ); libgap_set_error_handler(&error_handler); libgap_initialize(argc, argv); printf("Initialized\n"); libGAP_CollectBags(0,1); // full GC eval("1+2+3;\n"); eval("g:=FreeGroup(2);\n"); eval("a:=g.1;\n"); eval("b:=g.2;\n"); eval("lis:=[a^2, a^2, b*a];\n"); eval("h:=g/lis;\n"); eval("c:=h.1;\n"); eval("Set([1..300000], i->Order(c));\n"); return 0; }