| 154 | |
| 155 | } |
| 156 | command_result memview (color_ostream &out, vector <string> & parameters) |
| 157 | { |
| 158 | mymutex->lock(); |
| 159 | Core::getInstance().p->getMemRanges(memdata.ranges); |
| 160 | if (parameters.empty()) |
| 161 | { |
| 162 | memdata.addr = 0; |
| 163 | } |
| 164 | else if (toLower_cp437(parameters[0].substr(0, 2)) == "0x") |
| 165 | { |
| 166 | memdata.addr = (void *)convert(parameters[0],true); |
| 167 | } |
| 168 | else |
| 169 | { |
| 170 | memdata.addr = memutils::lua_expr_to_addr(parameters[0].c_str()); |
| 171 | } |
| 172 | |
| 173 | if(memdata.addr==0) |
| 174 | { |
| 175 | Deinit(); |
| 176 | memdata.state=STATE_OFF; |
| 177 | is_enabled = false; |
| 178 | mymutex->unlock(); |
| 179 | return CR_OK; |
| 180 | } |
| 181 | else |
| 182 | { |
| 183 | Deinit(); |
| 184 | bool isValid=false; |
| 185 | for(size_t i=0;i<memdata.ranges.size();i++) |
| 186 | if(memdata.ranges[i].isInRange(memdata.addr)) |
| 187 | isValid=true; |
| 188 | if(!isValid) |
| 189 | { |
| 190 | out.printerr("Invalid address: {}\n",memdata.addr); |
| 191 | mymutex->unlock(); |
| 192 | return CR_OK; |
| 193 | } |
| 194 | is_enabled = true; |
| 195 | memdata.state=STATE_ON; |
| 196 | } |
| 197 | if (vector_get(parameters, 1, string("a")).substr(0, 1) == "a") |
| 198 | memdata.len = detect_size(memdata.addr); |
| 199 | else if (parameters.size()>1) |
| 200 | memdata.len=convert(parameters[1]); |
| 201 | else |
| 202 | memdata.len=20*16; |
| 203 | |
| 204 | if(parameters.size()>2) |
| 205 | memdata.refresh=convert(parameters[2]); |
| 206 | else |
| 207 | memdata.refresh=0; |
| 208 | |
| 209 | memdata.buf=new uint8_t[memdata.len]; |
| 210 | memdata.lbuf=new uint8_t[memdata.len]; |
| 211 | Core::getInstance().p->getMemRanges(memdata.ranges); |
| 212 | mymutex->unlock(); |
| 213 | return CR_OK; |
nothing calls this directly
no test coverage detected