#include <u.h>
#include <libc.h>
#include <libg.h>
#include "menu.h"
#include "term.h"
#include "proto.h"
extern Bitmap *grey;;
extern Bitmap screen;
/*
only move NMOVE !!
*/
#define NMOVE 100
static Chip *ch[NMOVE], **nch;
static Point icorr;
static Point
snappy(Point p)
{
return(sub(snap(add(icorr, pstob(p))), icorr));
}
static
void
chd(Rectangle r)
{
Point p;
register Chip **cp;
p = sub(r.origin, ch[0]->br.origin);
rectf(&screen, rbtos(raddp(Rect(-50, -50, 50, 50), add(ch[0]->pmin, p))), F_XOR);
rectf(&screen, rbtos(r), F_XOR);
for(cp = ch+1; cp < nch; cp++)
Crectf(&screen, rbtos(raddp((*cp)->br, p)), F_XOR);
track();
}
int moved;
void
move(void)
{
Rectangle r;
Point op;
register Chip *c;
extern int errfd;
if(b.chips == 0)
return;
for(c = b.chips, nch = ch; !(c->flags&EOLIST); c++)
if(((c->flags&(SELECTED|WSIDE))
== (scrn.selws ? (SELECTED|WSIDE) : SELECTED))
&& (nch < &ch[NMOVE]))
*nch++ = c;
if(nch == ch)
return;
cursorswitch(&blank);
r = ch[0]->br;
op = r.origin;
icorr = Pt(0,0);
icorr = sub(snap(ch[0]->pmin), op);
r = pan_it(mouse.buttons, r, scrn.br, snappy, pbtos, chd);
op = sub(op, r.origin);
cursorswitch((Cursor *) 0);
put1(CHMOVE);
while(--nch >= ch) {
putn((*nch)->id);
if (moved)
select(*nch);
}
putn(0);
putp(op); /* why use this?? */
while(rcv());
}