+int main(int argc, char* argv[]) {
+ srand(time(0));
+
+ 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");
+ flushAfterWrite = 1;
+ }
+
+ 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();
+
+ // open uart
+ if (!waitCOMPort) {
+ sp = uart_open(argv[1]);
+ } else {
+ printf("Waiting for Proxmark to appear on %s ", argv[1]);
+ fflush(stdout);
+ int openCount = 0;
+ do {
+ sp = uart_open(argv[1]);
+ msleep(1000);
+ printf(".");
+ fflush(stdout);
+ } while(++openCount < 20 && (sp == INVALID_SERIAL_PORT || sp == CLAIMED_SERIAL_PORT));
+ printf("\n");
+ }
+
+ // check result of uart opening
+ if (sp == INVALID_SERIAL_PORT) {
+ printf("ERROR: invalid serial port\n");
+ usb_present = false;
+ offline = 1;
+ } else if (sp == CLAIMED_SERIAL_PORT) {
+ printf("ERROR: serial port is claimed by another process\n");
+ usb_present = false;