Subversion Repositories Kolibri OS

Rev

Rev 9085 | Rev 9220 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9085 Rev 9088
Line 632... Line 632...
632
	ir.sym_name_set = sym_name_set;
632
	ir.sym_name_set = sym_name_set;
633
	ir.number_of_symbols = number_of_symbols;
633
	ir.number_of_symbols = number_of_symbols;
634
	return ir;
634
	return ir;
635
}
635
}
Line 636... Line -...
636
 
-
 
637
int first_arg(int argc, char **argv, const char *arg) {
-
 
638
	return argc >= 2 && !strcmp(argv[1], arg);
-
 
639
}
-
 
640
 
636
 
641
int arg_got_flag(int argc, char **argv, ...) {
637
int arg_got_flag(int argc, char **argv, ...) {
642
	char *arg_names[8];
638
	char *arg_names[8];
Line 643... Line 639...
643
	int arg_name_c = 0;
639
	int arg_name_c = 0;
Line 652... Line 648...
652
		arg_names[arg_name_c++] = arg_name;
648
		arg_names[arg_name_c++] = arg_name;
653
	}
649
	}
654
	va_end(ap);
650
	va_end(ap);
Line 655... Line 651...
655
 
651
 
-
 
652
	for (int i = 1; i < argc; i++) {
-
 
653
		// If an argumetns was handled already then it's NULL here
-
 
654
		if (argv[i] == NULL) {
-
 
655
			continue;
656
	for (int i = 1; i < argc; i++) {
656
		}
657
		for (int arg_name_i = 0; arg_name_i < arg_name_c; arg_name_i++) {
657
		for (int arg_name_i = 0; arg_name_i < arg_name_c; arg_name_i++) {
658
			char *arg_name = arg_names[arg_name_i];
658
			char *arg_name = arg_names[arg_name_i];
659
			if (!strcmp(argv[i], arg_name)) {
659
			if (!strcmp(argv[i], arg_name)) {
660
				argv[i] = NULL; // Do not handle this argument as a input name
660
				argv[i] = NULL; // Do not handle this argument as a input name
661
				return 1;
661
				return i;
662
			}
662
			}
663
		}
663
		}
664
	}
664
	}
665
	return 0;
665
	return 0;
Line -... Line 666...
-
 
666
}
-
 
667
 
-
 
668
char *arg_got_param(int argc, char **argv, char *arg) {
-
 
669
	int i = arg_got_flag(argc, argv, arg, 0);
-
 
670
	if (i == 0) {
-
 
671
		return NULL;
-
 
672
	}
-
 
673
 
-
 
674
	if (i + 1 >= argc) {
-
 
675
		printf("Warning: %s parameter expects a value (like %s )", arg, arg);
-
 
676
		return NULL;
-
 
677
	}
-
 
678
	char *result = argv[i + 1];
-
 
679
	argv[i + 1] = NULL;
-
 
680
	return result;
-
 
681
}
-
 
682
 
-
 
683
int usage(char *name, char *remark) {
-
 
684
	if (remark) {
-
 
685
		printf("Error: %s\n\n", remark);
-
 
686
	}
-
 
687
	printf("Usage: %s [option]... [object file name]...\n", name);
-
 
688
	printf("  Link multiple COFF files into one\n");
-
 
689
	printf("\n");
-
 
690
	printf("Options:\n");
-
 
691
	printf("  -o   Output into \n");
-
 
692
	printf("  -v, --verbose Emit information logs\n");
-
 
693
	printf("  -h, --help    Output this help and exit\n");
-
 
694
	return 0;
666
}
695
}
-
 
696
 
667
 
697
int main(int argc, char **argv) {
-
 
698
	if (arg_got_flag(argc, argv, "-h", "-help", "--help", 0)) {
Line 668... Line -...
668
int main(int argc, char **argv) {
-
 
669
	const char *outname = "a.out.obj";
-
 
670
 
-
 
671
	if (argc >= 3 && !strcmp(argv[1], "-o")) {
-
 
672
		outname = argv[2];
699
		return usage(argv[0], NULL);
673
		argv += 2;
-
 
674
		argc -= 2;
-
 
675
	} else if (first_arg(argc, argv, "-h")
700
	}
676
		|| first_arg(argc, argv, "-help")
701
 
677
		|| first_arg(argc, argv, "--help")
-
 
678
		|| argc == 1) {
-
 
679
		printf("Usage cases:\n");
-
 
680
		printf("  %s [-o outname] object files list\n", argv[0]);
-
 
681
		printf("    Link COFF files into one, optionally set name of output\n");
-
 
682
		printf("  %s [-h|-help|--help]\n", argv[0]);
702
	const char *outname = arg_got_param(argc, argv, "-o");
Line 683... Line 703...
683
		printf("    Output this help\n");
703
	if (outname == NULL) {
Line -... Line 704...
-
 
704
		outname = "a.out.obj";
-
 
705
	}
-
 
706
 
-
 
707
	emit_logs = arg_got_flag(argc, argv, "-v", "-verbose", "--verbose", 0);
-
 
708
 
-
 
709
	// After handling arguments there only leaven unhandled ones
-
 
710
	// They should be names if inputs. But if there's no input - exit
-
 
711
	int input_file_count = 0;
-
 
712
	for (int i = 1; i < argc; i++) {
-
 
713
		if (argv[i] != NULL) {
-
 
714
			input_file_count++;
-
 
715
		}
684
		return 0;
716
	}
685
	}
717
	if (input_file_count == 0) {
686
 
718
		return usage(argv[0], "No input file names supplied");
687
	emit_logs = arg_got_flag(argc, argv, "-v", "-verbose", "--verbose", 0);
719
	}