#include #include #include #define INTR 0X1C /* interrupcao de clock */ #define VIDEO 0XB800 /* area de video */ void interrupt (*oldhandler)(void); unsigned int cont=0; int segundos=0, minutos=0, horas=0; void interrupt handler(void) { unsigned int far *tela; cont++; tela = MK_FP (VIDEO,140); if (!(cont%18)) { segundos++; if (segundos==60) { minutos++; segundos=0; } if (minutos==60) { horas++; minutos=0; } tela[9] = 0x0700 | ((segundos%10) + '0'); tela[8] = 0x0700 | ((segundos/10) + '0'); tela[7] = 0x0700 | ':'; tela[6] = 0x0700 | ((minutos%10) + '0'); tela[5] = 0x0700 | ((minutos/10) + '0'); tela[4] = 0x0700 | ':'; tela[3] = 0x0700 | ((horas%10) + '0'); tela[2] = 0x0700 | ((horas/10) + '0'); } oldhandler(); } int main(void) { int n1, n2; clrscr(); /* salva o handler antigo */ oldhandler = getvect(INTR); /* instala o novo handler */ setvect(INTR, handler); /* espera */ for (;;) { printf ("Entre com o primeiro numero: "); scanf ("%d", &n1); if (n1 < 0) break; printf ("Entre com o segundo numero: "); scanf ("%d", &n2); printf ("%d + %d = %d\n", n1, n2, n1+n2); } /* volta o hander antigo */ setvect(INTR, oldhandler); return 0; }