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 }