[49] | 1 | #include "system.h" |
---|
| 2 | |
---|
| 3 | #ifdef __UNIX_XWIN |
---|
| 4 | #include <stdio.h> |
---|
| 5 | #include <sys/time.h> |
---|
| 6 | #include <stdlib.h> |
---|
| 7 | #include <signal.h> |
---|
| 8 | #include <unistd.h> |
---|
| 9 | #include <signal.h> |
---|
| 10 | |
---|
| 11 | |
---|
| 12 | //#ifndef setitimer |
---|
| 13 | //extern "C" { |
---|
| 14 | //int setitimer(int Which, struct itimerval *Value, |
---|
| 15 | // struct itimerval *Ovalue); |
---|
| 16 | //} ; |
---|
| 17 | //#endif |
---|
| 18 | |
---|
| 19 | struct sigaction sa; |
---|
| 20 | typedef void (*int_handler)(); |
---|
| 21 | #define SETSIG(sig,fun) (int_handler)sa.sa_handler=fun; \ |
---|
| 22 | sa.sa_flags=0; \ |
---|
| 23 | sigemptyset(&sa.sa_mask); \ |
---|
| 24 | sigaddset(&sa.sa_mask,SIGALRM); \ |
---|
| 25 | sigaction(sig,&sa,NULL); |
---|
| 26 | |
---|
| 27 | |
---|
| 28 | |
---|
| 29 | //void timer_handler() |
---|
| 30 | //{ |
---|
| 31 | // SETSIG(SIGALRM,timer_handler); |
---|
| 32 | // printf("%ld\n",jclock++); |
---|
| 33 | // fflush(stdout); |
---|
| 34 | //} |
---|
| 35 | |
---|
| 36 | |
---|
| 37 | void init_timer(int_handler int_proc, long utime) |
---|
| 38 | { |
---|
| 39 | itimerval newt; |
---|
| 40 | SETSIG(SIGALRM,int_proc); |
---|
| 41 | newt.it_interval.tv_sec=0; |
---|
| 42 | newt.it_interval.tv_usec=utime; |
---|
| 43 | newt.it_value.tv_sec=0; |
---|
| 44 | newt.it_value.tv_usec=utime; |
---|
| 45 | setitimer(ITIMER_REAL,&newt,NULL); |
---|
| 46 | } |
---|
| 47 | #else |
---|
| 48 | #ifdef __BCPLUSPLUS__ |
---|
| 49 | #include <stdio.h> |
---|
| 50 | #include <dos.h> |
---|
| 51 | #include <conio.h> |
---|
| 52 | |
---|
| 53 | #define INTR 0X1C /* The clock tick interrupt */ |
---|
| 54 | void interrupt ( *oldhandler)(...); |
---|
| 55 | |
---|
| 56 | int count=0; |
---|
| 57 | |
---|
| 58 | void interrupt handler(...) |
---|
| 59 | { |
---|
| 60 | /* increase the global counter */ |
---|
| 61 | count++; |
---|
| 62 | |
---|
| 63 | /* call the old routine */ |
---|
| 64 | oldhandler(); |
---|
| 65 | } |
---|
| 66 | |
---|
| 67 | int main(void) |
---|
| 68 | { |
---|
| 69 | /* save the old interrupt vector */ |
---|
| 70 | oldhandler = getvect(INTR); |
---|
| 71 | |
---|
| 72 | /* install the new interrupt handler */ |
---|
| 73 | setvect(INTR, handler); |
---|
| 74 | |
---|
| 75 | /* loop until the counter exceeds 20 */ |
---|
| 76 | while (count < 20) |
---|
| 77 | printf("count is %d\n",count); |
---|
| 78 | |
---|
| 79 | /* reset the old interrupt handler */ |
---|
| 80 | setvect(INTR, oldhandler); |
---|
| 81 | |
---|
| 82 | return 0; |
---|
| 83 | } |
---|
| 84 | |
---|
| 85 | |
---|
| 86 | |
---|
| 87 | #else |
---|
| 88 | #error Timer not supported for this compiler! Use Borland or gcc |
---|
| 89 | #endif |
---|
| 90 | #endif |
---|
| 91 | |
---|
| 92 | |
---|
| 93 | |
---|
| 94 | |
---|
| 95 | |
---|
| 96 | |
---|
| 97 | |
---|
| 98 | |
---|
| 99 | |
---|
| 100 | |
---|
| 101 | |
---|
| 102 | |
---|