home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * QINT TEST ROUTINE
- *
- * 1> test
- * Ctl D -quit
- * Ctl E -cause test interrupt #1
- * Ctl F -cause test interrupt #0
- *
- * (see printf's to understand what it is printing)
- *
- * Basic idea: Cycle through various priorities. The Q interrupts
- * are both set for priority 16, and thus only work when the counter
- * is 0...15
- *
- * If you set one of the Q interrupts to, say, 17, you would then
- * have to worry about the level 17 Q interrupt interrupting the
- * level 16 interrupt, and thus surround the level 16 interrupt
- * with:
- * char oldpri = SetQPri(127);
- * puts("blah");
- * SetQPri(oldpri);
- *
- * As it is, with both at level 16, they cannot interrupt each other
- * (if one occurs while the other is running, it is queued till the
- * other one finishes).
- */
-
- #include <exec/types.h>
- #include <exec/tasks.h>
-
- typedef struct Task TASK;
-
- extern TASK *FindTask();
-
- int X;
- int Enable_Abort;
-
- void
- myhan(sig)
- {
- ++X;
- printf("test# %ld\n", sig);
- }
-
- main()
- {
- short i;
- int j;
-
- Enable_Abort = 0;
-
- printf("tcexcept: %08lx\n", FindTask(NULL)->tc_ExceptCode);
- SetQVector(SIGBREAKB_CTRL_F, myhan, 0, 16);
- SetQVector(SIGBREAKB_CTRL_E, myhan, 1, 16);
- printf("tcexcept: %08lx\n", FindTask(NULL)->tc_ExceptCode);
- printf("tcexmask: %08lx\n", FindTask(NULL)->tc_SigExcept);
- for (i = 0; ; ++i) {
- i &= 31;
- SetQPri(127);
- printf("i = %2ld rcvd: %08lx excp: %08lx cnt: %6ld\n", i,
- FindTask(NULL)->tc_SigRecvd, FindTask(NULL)->tc_SigExcept,
- X
- );
- SetQPri(i);
- for (j = 0; j < 100; ++j);
- if (SetSignal(0,SIGBREAKF_CTRL_D) & SIGBREAKF_CTRL_D)
- break;
- }
- SetQVector(SIGBREAKB_CTRL_E, NULL, 0, 0);
- SetQVector(SIGBREAKB_CTRL_F, NULL, 0, 0);
- puts("exiting");
- printf("tcexcept: %08lx\n", FindTask(NULL)->tc_ExceptCode);
- }
-
-