FreeCalypso > hg > fc-pcsc-tools
comparison simtool/readcmd.c @ 107:f1836c8d36cb
hexdump output commands reworked to support redirection
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Fri, 19 Feb 2021 06:43:01 +0000 |
| parents | 5390dce9faa4 |
| children | 4d747b86da00 |
comparison
equal
deleted
inserted
replaced
| 106:dcfec53643c5 | 107:f1836c8d36cb |
|---|---|
| 3 #include <stdio.h> | 3 #include <stdio.h> |
| 4 #include <stdlib.h> | 4 #include <stdlib.h> |
| 5 #include "simresp.h" | 5 #include "simresp.h" |
| 6 #include "curfile.h" | 6 #include "curfile.h" |
| 7 | 7 |
| 8 cmd_readbin(argc, argv) | 8 cmd_readbin(argc, argv, outf) |
| 9 char **argv; | 9 char **argv; |
| 10 FILE *outf; | |
| 10 { | 11 { |
| 11 unsigned offset, len; | 12 unsigned offset, len; |
| 12 int rc; | 13 int rc; |
| 13 | 14 |
| 14 offset = strtoul(argv[1], 0, 0); | 15 offset = strtoul(argv[1], 0, 0); |
| 22 return(-1); | 23 return(-1); |
| 23 } | 24 } |
| 24 rc = readbin_op(offset, len); | 25 rc = readbin_op(offset, len); |
| 25 if (rc < 0) | 26 if (rc < 0) |
| 26 return(rc); | 27 return(rc); |
| 27 display_sim_resp_in_hex(); | 28 display_sim_resp_in_hex(outf); |
| 28 return(0); | 29 return(0); |
| 29 } | 30 } |
| 30 | 31 |
| 31 cmd_readrec(argc, argv) | 32 cmd_readrec(argc, argv, outf) |
| 32 char **argv; | 33 char **argv; |
| 34 FILE *outf; | |
| 33 { | 35 { |
| 34 unsigned recno, len; | 36 unsigned recno, len; |
| 35 int rc; | 37 int rc; |
| 36 | 38 |
| 37 recno = strtoul(argv[1], 0, 0); | 39 recno = strtoul(argv[1], 0, 0); |
| 56 len = curfile_record_len; | 58 len = curfile_record_len; |
| 57 } | 59 } |
| 58 rc = readrec_op(recno, 0x04, len); | 60 rc = readrec_op(recno, 0x04, len); |
| 59 if (rc < 0) | 61 if (rc < 0) |
| 60 return(rc); | 62 return(rc); |
| 61 display_sim_resp_in_hex(); | 63 display_sim_resp_in_hex(outf); |
| 62 return(0); | 64 return(0); |
| 63 } | 65 } |
| 64 | 66 |
| 65 cmd_readef(argc, argv) | 67 cmd_readef(argc, argv, outf) |
| 66 char **argv; | 68 char **argv; |
| 69 FILE *outf; | |
| 67 { | 70 { |
| 68 int file_id, rc; | 71 int file_id, rc; |
| 69 unsigned readlen; | 72 unsigned readlen; |
| 70 | 73 |
| 71 if (isxdigit(argv[1][0]) && isxdigit(argv[1][1]) && | 74 if (isxdigit(argv[1][0]) && isxdigit(argv[1][1]) && |
| 87 if (curfile_structure != 0x00) { | 90 if (curfile_structure != 0x00) { |
| 88 fprintf(stderr, | 91 fprintf(stderr, |
| 89 "error: readef command is only for transparent EFs\n"); | 92 "error: readef command is only for transparent EFs\n"); |
| 90 return(-1); | 93 return(-1); |
| 91 } | 94 } |
| 92 printf("Transparent EF of %u byte(s)\n", curfile_total_size); | 95 if (outf == stdout) { |
| 93 printf("File status: %02X\n", sim_resp_data[11]); | 96 printf("Transparent EF of %u byte(s)\n", curfile_total_size); |
| 94 show_access_conditions("UPDATE", sim_resp_data[8] & 0xF); | 97 printf("File status: %02X\n", sim_resp_data[11]); |
| 95 show_access_conditions("READ & SEEK", sim_resp_data[8] >> 4); | 98 show_access_conditions("UPDATE", sim_resp_data[8] & 0xF); |
| 96 show_access_conditions("INCREASE", sim_resp_data[9] >> 4); | 99 show_access_conditions("READ & SEEK", sim_resp_data[8] >> 4); |
| 97 show_access_conditions("INVALIDATE", sim_resp_data[10] & 0xF); | 100 show_access_conditions("INCREASE", sim_resp_data[9] >> 4); |
| 98 show_access_conditions("REHABILITATE", sim_resp_data[10] >> 4); | 101 show_access_conditions("INVALIDATE", sim_resp_data[10] & 0xF); |
| 102 show_access_conditions("REHABILITATE", sim_resp_data[10] >> 4); | |
| 103 } | |
| 99 if (!curfile_total_size) | 104 if (!curfile_total_size) |
| 100 return(0); | 105 return(0); |
| 101 readlen = curfile_total_size; | 106 readlen = curfile_total_size; |
| 102 if (readlen > 256) | 107 if (readlen > 256) |
| 103 readlen = 256; | 108 readlen = 256; |
| 104 rc = readbin_op(0, readlen); | 109 rc = readbin_op(0, readlen); |
| 105 if (rc < 0) | 110 if (rc < 0) |
| 106 return(rc); | 111 return(rc); |
| 107 display_sim_resp_in_hex(); | 112 display_sim_resp_in_hex(outf); |
| 108 return(0); | 113 return(0); |
| 109 } | 114 } |
