Revision 135
more organized
lab5.c | ||
---|---|---|
401 | 401 |
int i = Nt-1; |
402 | 402 |
int good = 1; |
403 | 403 |
while (good) { |
404 |
|
|
405 | 404 |
/* Get a request message. */ |
406 | 405 |
if ((r = driver_receive(ANY, &msg, &ipc_status)) != 0) { |
407 | 406 |
printf("driver_receive failed with %d", r); |
... | ... | |
410 | 409 |
if (is_ipc_notify(ipc_status)) { /* received notification */ |
411 | 410 |
switch (_ENDPOINT_P(msg.m_source)) { |
412 | 411 |
case HARDWARE: /* hardware interrupt notification */ |
412 |
if (msg.m_notify.interrupts & kbc_irq) { /* subscribed interrupt */ |
|
413 |
kbc_ih(); |
|
414 |
if (scancode[0] == ESC_BREAK_CODE) good = 0; |
|
415 |
} |
|
413 | 416 |
if (msg.m_notify.interrupts & timer_irq) { /* subscribed interrupt */ |
414 |
timer_int_handler(); |
|
415 | 417 |
if(no_interrupts == dt){ |
416 | 418 |
no_interrupts = 0; |
417 | 419 |
i = (i+1)%Nt; |
418 |
if(i == 0 && (dx || dy)){ |
|
420 |
if(i == 0){ |
|
421 |
sprite_set_pos(sp,x,y); |
|
422 |
sprite_draw(sp); |
|
423 |
static int cnt = 0; |
|
424 |
cnt++; printf("printed %d times\n", cnt); |
|
419 | 425 |
if(dx) draw_rectangle(min(x,x+dframe),y , abs(dframe) , sprite_get_h(sp), 0); |
420 | 426 |
if(dy) draw_rectangle(x ,min(y,y+dframe),sprite_get_w(sp), abs(dframe) , 0); |
421 | 427 |
if(dx) x += dframe; |
422 | 428 |
if(dy) y += dframe; |
423 |
if(dx && (x-xi)*(x-xf) >= 0){ |
|
424 |
x = xf; |
|
425 |
dx = 0; |
|
426 |
} |
|
427 |
if(dy && (y-yi)*(y-yf) >= 0){ |
|
428 |
y = yf; |
|
429 |
dy = 0; |
|
430 |
} |
|
431 |
sprite_set_pos(sp,x,y); |
|
432 |
sprite_draw(sp); |
|
429 |
if(dx && (x-xi)*(x-xf) >= 0){ x = xf; dx = 0; } |
|
430 |
if(dy && (y-yi)*(y-yf) >= 0){ y = yf; dy = 0; } |
|
433 | 431 |
} |
434 | 432 |
} |
433 |
timer_int_handler(); |
|
435 | 434 |
} |
436 |
if (msg.m_notify.interrupts & kbc_irq) { /* subscribed interrupt */ |
|
437 |
kbc_ih(); |
|
438 |
if (scancode[0] == ESC_BREAK_CODE) good = 0; |
|
439 |
} |
|
440 | 435 |
break; |
441 | 436 |
default: |
442 | 437 |
break; /* no other notifications expected: do nothing */ |
Also available in: Unified diff