#include "emscripten.h" #include #include #include #include #include "expression.h" #include "parser.tab.h" #include "lex.yy.h" EM_JS(void, console_print, (const char* str), { console.log(UTF8ToString(str)); }) EM_JS(void, output_print, (const char* str), { var div = document.getElementById('output'); div.innerHTML = UTF8ToString(str) + div.innerHTML; }) int yyerror(void* scanner, void* lvalp, char* str){ console_print(str); return 0; } void EMSCRIPTEN_KEEPALIVE webdice(char* str){ union expression* root = NULL; struct expression_result result; int length; char* in_block; char* out_block; static char seeded = 0; if (!seeded){ seeded = 1; srand(time(NULL)); } in_block = (char*) malloc((2 + strlen(str)) * sizeof(char)); sprintf(in_block,"%s\n",str); yyscan_t scanner; yylex_init(&scanner); yy_scan_string (in_block, scanner); yyparse((void*) scanner, &root); if(root != NULL){ result = resolve(root); length = strlen(result.text) + 4 * ceill(10 + log10l(result.max)) + 100; out_block = (char*) malloc(length * sizeof(char)); sprintf(out_block,"

%s = %Lg

", result.text, result.min, result.expected, result.max, result.actual); output_print(out_block); free(out_block); free(result.text); free_expression(root); }else{ output_print("

Error!

"); } free(in_block); yylex_destroy(scanner); }