main.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "__virtualmath.h"
  2. jmp_buf ctrl_c;
  3. bool set_ctrl_c = false;
  4. void sighandler(int signum);
  5. int main(int argc, char *argv[]) {
  6. Inter *inter = NULL;
  7. if (getArgs(argc, argv))
  8. goto args_error;
  9. inter = makeInter(args.out_file, args.error_file, NULL);
  10. if (setjmp(ctrl_c) == -1 || setjmp(memVirtualMath_Env) == -1) {
  11. freeArgs();
  12. freeInter(inter, true);
  13. return 1;
  14. }
  15. memVirtualMathUseJmp = true;
  16. set_ctrl_c = true;
  17. signal(SIGINT, sighandler);
  18. for (ResultType status = not_return; status != error_return && argv[optind] != NULL; optind++)
  19. status = runCodeBlock(argv[optind], inter);
  20. if (args.run_commandLine) {
  21. printf("%s", HelloString);
  22. while (1) {
  23. runCodeStdin(inter);
  24. if (ferror(stdin) || feof(stdin))
  25. break;
  26. }
  27. }
  28. freeInter(inter, true);
  29. args_error: freeArgs();
  30. return 0;
  31. }
  32. void sighandler(int signum) {
  33. if (set_ctrl_c)
  34. longjmp(ctrl_c, -1);
  35. else
  36. exit(1);
  37. }
  38. /** TODO-szh List
  39. * 官方函数
  40. * 官方类
  41. */