1
0

argument.c 2.1 KB

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