+ bool usb_present = false;
+ bool waitCOMPort = false;
+ bool executeCommand = false;
+ bool addLuaExec = false;
+ char *script_cmds_file = NULL;
+ char *script_cmd = NULL;
+
+ if (argc < 2) {
+ show_help(true, argv[0]);
+ return 1;
+ }
+
+ for (int i = 1; i < argc; i++) {
+ if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i],"-help") == 0) {
+ show_help(false, argv[0]);
+ dumpAllHelp(0);
+ return 0;
+ }
+
+ if (strcmp(argv[i], "-m") == 0) {
+ dumpAllHelp(1);
+ return 0;
+ }
+
+ if(strcmp(argv[i],"-f") == 0 || strcmp(argv[i],"-flush") == 0){
+ printf("Output will be flushed after every print.\n");
+ SetFlushAfterWrite(true);
+ }
+
+ if(strcmp(argv[i],"-w") == 0 || strcmp(argv[i],"-wait") == 0){
+ waitCOMPort = true;
+ }
+
+ if(strcmp(argv[i],"-c") == 0 || strcmp(argv[i],"-command") == 0){
+ executeCommand = true;
+ }
+
+ if(strcmp(argv[i],"-l") == 0 || strcmp(argv[i],"-lua") == 0){
+ executeCommand = true;
+ addLuaExec = true;
+ }
+ }
+
+ // If the user passed the filename of the 'script' to execute, get it from last parameter
+ if (argc > 2 && argv[argc - 1] && argv[argc - 1][0] != '-') {
+ if (executeCommand){
+ script_cmd = argv[argc - 1];
+
+ while(script_cmd[strlen(script_cmd) - 1] == ' ')
+ script_cmd[strlen(script_cmd) - 1] = 0x00;
+
+ if (strlen(script_cmd) == 0) {
+ script_cmd = NULL;
+ } else {
+ if (addLuaExec){
+ // add "script run " to command
+ char *ctmp = NULL;
+ int len = strlen(script_cmd) + 11 + 1;
+ if ((ctmp = (char*) malloc(len)) != NULL) {
+ memset(ctmp, 0, len);
+ strcpy(ctmp, "script run ");
+ strcpy(&ctmp[11], script_cmd);
+ script_cmd = ctmp;
+ }
+ }
+
+ printf("Execute command from commandline: %s\n", script_cmd);
+ }
+ } else {
+ script_cmds_file = argv[argc - 1];
+ }
+ }
+
+ // check command
+ if (executeCommand && (!script_cmd || strlen(script_cmd) == 0)){
+ printf("ERROR: execute command: command not found.\n");
+ return 2;
+ }
+
+ // set global variables
+ set_my_executable_path();
+
+ // try to open USB connection to Proxmark
+ usb_present = OpenProxmark(argv[1], waitCOMPort, 20);
+
+#ifdef HAVE_GUI
+#ifdef _WIN32
+ InitGraphics(argc, argv, script_cmds_file, script_cmd, usb_present);
+ MainGraphics();
+#else
+ char* display = getenv("DISPLAY");
+
+ if (display && strlen(display) > 1)
+ {
+ InitGraphics(argc, argv, script_cmds_file, script_cmd, usb_present);
+ MainGraphics();
+ }
+ else
+ {
+ main_loop(script_cmds_file, script_cmd, usb_present);
+ }
+#endif
+#else
+ main_loop(script_cmds_file, script_cmd, usb_present);
+#endif
+
+ // Switch off field and clean up the port
+ if (usb_present) {
+ UsbCommand c = {CMD_FPGA_MAJOR_MODE_OFF};
+ SendCommand(&c);
+ CloseProxmark();
+ }
+
+ exit(0);