# HG changeset patch # User Mychaela Falconia # Date 1669528750 0 # Node ID ecfbced76feaf12dd5fec933b3a8173810f6ae58 # Parent 7f43089e9a7aef932c44bbc0fff6121841825a9f gsm-amr2efr: add -w option to simulate common wrong implementation diff -r 7f43089e9a7a -r ecfbced76fea miscutil/amr2efr.c --- a/miscutil/amr2efr.c Sun Nov 27 05:43:26 2022 +0000 +++ b/miscutil/amr2efr.c Sun Nov 27 05:59:10 2022 +0000 @@ -18,27 +18,37 @@ main(argc, argv) char **argv; { + char *infname, *outfname; FILE *inf, *outf; - int hdrb; + int wrong_flag, hdrb; uint8_t frm_in[31], frm_out[31]; unsigned bit_a, bit_n; - if (argc != 3) { - fprintf(stderr, "usage: %s input.amr output.gsmx\n", argv[0]); + if (argc == 3 && argv[1][0] != '-') { + wrong_flag = 0; + infname = argv[1]; + outfname = argv[2]; + } else if (argc == 4 && !strcmp(argv[1], "-w")) { + wrong_flag = 1; + infname = argv[2]; + outfname = argv[3]; + } else { + fprintf(stderr, "usage: %s [-w] input.amr output.gsmx\n", + argv[0]); exit(1); } - inf = fopen(argv[1], "r"); + inf = fopen(infname, "r"); if (!inf) { - perror(argv[1]); + perror(infname); exit(1); } if (fread(frm_in, 1, 6, inf) != 6 || bcmp(frm_in, amr_file_hdr, 6)) { - fprintf(stderr, "error: %s is not in AMR format\n", argv[1]); + fprintf(stderr, "error: %s is not in AMR format\n", infname); exit(1); } - outf = fopen(argv[2], "w"); + outf = fopen(outfname, "w"); if (!outf) { - perror(argv[2]); + perror(outfname); exit(1); } for (;;) { @@ -47,17 +57,20 @@ break; if ((hdrb & 0x78) != 0x38) { fprintf(stderr, "error: unexpected content in %s\n", - argv[1]); + infname); exit(1); } if (fread(frm_in, 1, 31, inf) != 31) { - fprintf(stderr, "error: short read from %s\n", argv[1]); + fprintf(stderr, "error: short read from %s\n", infname); exit(1); } bzero(frm_out, 31); frm_out[0] = 0xC0; for (bit_a = 0; bit_a < 244; bit_a++) { - bit_n = amr_122_bit_order[bit_a]; + if (wrong_flag) + bit_n = bit_a; + else + bit_n = amr_122_bit_order[bit_a]; msb_set_bit(frm_out, 4 + bit_n, msb_get_bit(frm_in, bit_a)); }