文書番号: 402037
最終更新日: 2004/04/27
/* * このプログラムは、NEC PC-9801 シリーズの [Stop] キーの割り込みベクタを * 書き換えるサンプルです。 */ #include <dos.h> #include <stdio.h> void main(void); void (interrupt far *oldst)(void); /* 保存用 */ void interrupt far newst (void); /* 変更する関数 */ int far volatile keyflg; void main(void) int cnt=0; oldst = _dos_getvect( 6 ); /* [Stop] キーの割り込みアドレスを保存*/ _dos_setvect( 6, newst ); /* ベクタ 6 番に newst 関数を割り当てる*/ while( cnt<10 ) /* [Stop] キーが 10 回押されるまでループ*/ if ( keyflg==1 ) printf("[STOP]"); cnt++; keyflg = 0; _dos_setvect( 6, oldst); /* 割り込みアドレスを元に戻す */ /* 割り込み関数の実体 */ /* newst 関数の中では、MS-DOS コールを使用しないものであれば利用できます。 * MS-DOS コール (INT21h) を利用できないのは、INT21h を実行中に STOP キーをタイプ * されると、2重コールとなり、システムが暴走するためです */ void interrupt far newst(void) keyflg = 1; /* * このプログラムは、NEC PC-9801 シリーズの [Copy] キーの割り込みベクタを * 書き換えるサンプルです。 */ #include <dos.h> #include <stdio.h> void main(void); void (interrupt far *oldcopy)(void); /* 保存用 */ void interrupt far newcopy (void); /* 変更する関数 */ int far volatile keyflag; void main(void) int cnt=0; oldcopy = _dos_getvect( 5 ); /* [Copy] キーの割り込みアドレスを保存 */ _dos_setvect( 5, newcopy ); /* ベクタ 5 番に newcopy 関数を割り当てる */ while( cnt<10 ) /* [Copy] キーが 10 回押されるまでループ */ if ( keyflag==1 ) keyflag = 0; printf("[COPY]"); cnt++; _dos_setvect( 5, oldcopy); /* 割り込みアドレスを元に戻す */ /* 割り込み関数の実体 */ /* newcopy 関数の中では、MS-DOS コールを使用しないものであれば利用できます。 * MS-DOS コール (INT21h) を利用できないのは、INT21h を実行中に COPY キーをタ * イプされると、2重コールとなり、システムが暴走するためです */ void interrupt far newcopy(void) keyflag = 1; }
Keywords: C6 C7 KBHOWTO QC20 VC10 VC15 KB402037
Technology: kbAudDeveloper kbCCompPDS600DOS kbCCompSearch kbQC200 kbvc150 kbVCsearch kbZNotKeyword3 kbZNotKeyword8