MCPcopy Create free account
hub / github.com/DFHack/dfhack / memview

Function memview

plugins/devel/memview.cpp:156–214  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

154
155}
156command_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;

Callers

nothing calls this directly

Calls 13

toLower_cp437Function · 0.85
convertFunction · 0.85
lua_expr_to_addrFunction · 0.85
DeinitFunction · 0.85
vector_getFunction · 0.85
detect_sizeFunction · 0.85
getMemRangesMethod · 0.80
c_strMethod · 0.80
isInRangeMethod · 0.80
lockMethod · 0.45
emptyMethod · 0.45
unlockMethod · 0.45

Tested by

no test coverage detected