argument.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "hellovm.h"
  2. char *HelloString = "Welcome To VirtualMath ("__TIME__", "__DATE__") \n"
  3. "On "SYS" ("CC")\n"
  4. "VirtualMath Command Line Mode (CLI: hellovm)\n";
  5. static const struct option long_option[]={
  6. {"stderr",required_argument,NULL,'o'},
  7. {"stdout",required_argument,NULL,'e'},
  8. {"stdin",required_argument,NULL,'i'},
  9. {"not-run-cl",no_argument,NULL,'n'},
  10. {"print-clock",no_argument,NULL,'p'},
  11. {NULL,0,NULL,0}
  12. };
  13. static const char *short_option = "o:e:i:np";
  14. Args args = {.out_file=NULL, .error_file=NULL, .in_file=NULL, .run_commandLine=true, .p_clock=false};
  15. /**
  16. * 参数设置, args是全局结构体, 保存全局的参数设置
  17. * @param argc
  18. * @param argv
  19. * @return
  20. */
  21. int getArgs(const int argc, char **argv)
  22. {
  23. int opt;
  24. opterr = true;
  25. while((opt=getopt_long(argc, argv, short_option ,long_option,NULL))!=-1)
  26. {
  27. switch(opt)
  28. {
  29. case 0:
  30. break;
  31. case 'o':
  32. args.out_file = memStrcpy(optarg);
  33. break;
  34. case 'e':
  35. args.error_file = memStrcpy(optarg);
  36. break;
  37. case 'i':
  38. args.in_file = memStrcpy(optarg);
  39. break;
  40. case 'n':
  41. args.run_commandLine = false;
  42. break;
  43. case 'p':
  44. args.p_clock = true;
  45. break;
  46. case '?':
  47. fprintf(stderr, "[Error]: get not success args : -%c\n", (char)optopt);
  48. return -1;
  49. default:
  50. break;
  51. }
  52. }
  53. return 0;
  54. }
  55. /**
  56. * 释放args的成员而不包括其本身
  57. */
  58. void freeArgs(void){
  59. memFree(args.out_file);
  60. memFree(args.error_file);
  61. memFree(args.in_file);
  62. }