mirror of
https://github.com/geohot/qira
synced 2025-03-13 10:33:30 +03:00
70 lines
2.3 KiB
JavaScript
70 lines
2.3 KiB
JavaScript
stream = io.connect(STREAM_URL);
|
|
|
|
// TODO: parameter should be dynamic?
|
|
var backward_context_size = 6;
|
|
|
|
// arch is public data
|
|
arch = undefined;
|
|
function on_arch(msg) { DS("arch");
|
|
//p(msg);
|
|
arch = msg;
|
|
} stream.on("arch", on_arch);
|
|
|
|
function on_instructions(msg) { DS("instructions");
|
|
var clnum = Session.get("clnum");
|
|
var idump = "";
|
|
var addrs = [];
|
|
for (var i = 0; i<msg.length;i++) {
|
|
var ins = msg[i];
|
|
|
|
if (ins.clnum === clnum) {
|
|
Session.set('iaddr', ins.address);
|
|
Session.set('iview', ins.address);
|
|
}
|
|
|
|
if (ins.name == undefined) {
|
|
ins.name = "";
|
|
}
|
|
|
|
// track the addresses
|
|
addrs.push([ins.clnum-clnum, ins.address]);
|
|
|
|
// compute the dynamic stuff
|
|
// TODO: hacks for trail stuff working, shitty off by ones here
|
|
if (i >= 10 || ins.clnum >= (clnum - backward_context_size)) {
|
|
idump +=
|
|
'<div class="instruction" style="margin-left: '+(ins.depth*10)+'px">'+
|
|
'<div class="change '+(ins.slice ? "halfhighlight": "")+' clnum clnum_'+ins.clnum+'">'+ins.clnum+'</div> '+
|
|
'<span class="insaddr datainstruction addr addr_'+ins.address+'">'+ins.address+'</span> '+
|
|
'<div class="instructiondesc">'+highlight_instruction(ins.instruction)+'</div> '+
|
|
'<span class="comment comment_'+ins.address+'">'+(ins.comment !== undefined && ins.comment !== "" ? "; "+ins.comment : "")+'</span>'+
|
|
'</div>';
|
|
}
|
|
}
|
|
Session.set('trail', addrs);
|
|
$('#idump').html(idump);
|
|
rehighlight();
|
|
replace_names();
|
|
} stream.on('instructions', on_instructions);
|
|
|
|
Deps.autorun(function() { DA("emit getinstructions");
|
|
var forknum = Session.get("forknum");
|
|
var clnum = Session.get("clnum");
|
|
var maxclnum = Session.get("max_clnum");
|
|
if (maxclnum === undefined) return;
|
|
maxclnum = maxclnum[forknum];
|
|
|
|
// correct place for this clamp?
|
|
if (clnum > (maxclnum[1]+1)) { clnum = (maxclnum[1]+1); Session.set("clnum", clnum); }
|
|
if (clnum < maxclnum[0]) { clnum = maxclnum[0]; Session.set("clnum", clnum); }
|
|
|
|
// TODO: make this clean
|
|
var size = get_size("#idump");
|
|
var end = Math.min(maxclnum[1]+1, clnum+size-backward_context_size);
|
|
var start = Math.max(maxclnum[0], end-size);
|
|
if (maxclnum[0] > (end-size)) end += maxclnum[0] - (end-size) + 1;
|
|
|
|
stream.emit('getinstructions', forknum, clnum, start-10, end);
|
|
});
|
|
|