argument.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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",required_argument,NULL,'n'},
  10. {NULL,0,NULL,0}
  11. };
  12. static const char *short_option = "o:e:i:n";
  13. Args args = {.out_file=NULL, .error_file=NULL, .in_file=NULL, .run_commandLine=true};
  14. /**
  15. * 参数设置, args是全局结构体, 保存全局的参数设置
  16. * @param argc
  17. * @param argv
  18. * @return
  19. */
  20. int getArgs(const int argc, char **argv)
  21. {
  22. int opt;
  23. opterr = true;
  24. while((opt=getopt_long(argc, argv, short_option ,long_option,NULL))!=-1)
  25. {
  26. switch(opt)
  27. {
  28. case 0:
  29. break;
  30. case 'o':
  31. args.out_file = memStrcpy(optarg);
  32. break;
  33. case 'e':
  34. args.error_file = memStrcpy(optarg);
  35. break;
  36. case 'i':
  37. args.in_file = memStrcpy(optarg);
  38. break;
  39. case 'n':
  40. args.run_commandLine = false;
  41. break;
  42. case '?':
  43. fprintf(stderr, "[Error]: get not success args : -%c\n", (char)optopt);
  44. return -1;
  45. default:
  46. break;
  47. }
  48. }
  49. return 0;
  50. }
  51. /**
  52. * 释放args的成员而不包括其本身
  53. */
  54. void freeArgs(void){
  55. memFree(args.out_file);
  56. memFree(args.error_file);
  57. memFree(args.in_file);
  58. }