Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
// ‚лЄ«оз Ґ¬ Їа®ўҐаЄг б⥪ Ё гЄ § ⥫Ґ©
#pragma check_stack( off )
#pragma check_pointer( off )
// Њ Єа® ¤«п Ї®¤ зЁ §ўгЄ®ў®Ј® бЁЈ «
#define BEEP() _asm { \
_asm xor bx, bx \
_asm mov ax, 0E07h \
_asm int 10h \
}
// “Є § ⥫м бв аго дгЄжЁо ®Ўа Ў®вЄЁ
// 9-Ј® ЇаҐалў Ёп
void (_interrupt _far *oldkey)( void );
// ЋЎкпў«ҐЁҐ ®ў®© дгЄжЁЁ ®Ўа Ў®вЄЁ
// 9-Ј® ЇаҐалў Ёп
void _interrupt _far newkey( void );
void main(void);
void main(void) {
unsigned size; // ђ §¬Ґа १Ё¤Ґв®© з бвЁ
// TSR-Їа®Ја ¬¬л
char _far *newstack; // “Є § вҐ«м ®ўл© б⥪,
// Є®в®ал© Ўг¤Ґв ЁбЇ®«м§®ў вм
// TSR-Їа®Ја ¬¬
char _far *tsrbottm; // “Є § вҐ«м Є®Ґж
// TSR-Їа®Ја ¬¬л, ЁбЇ®«м§гҐвбп
// ¤«п ®ЇаҐ¤Ґ«ҐЁп а §¬Ґа
// १Ё¤Ґв®© з бвЁ
// ‡ ЇЁблў Ґ¬ ¤аҐб б⥪ TSR-Їа®Ја ¬¬л
_asm mov WORD PTR newstack[0], sp
_asm mov WORD PTR newstack[2], ss
FP_SEG(tsrbottm) = _psp; // “Є § вҐ«м Є®ж
FP_OFF(tsrbottm) = 0; // Їа®Ја ¬¬л гбв ў«Ёў Ґ¬
// з «® PSP
// ‚лзЁб«пҐ¬ а §¬Ґа Їа®Ја ¬¬л ў Ї а Ја д е
// „®Ў ў«пҐ¬ 1 Ї а Ја д б«гз ©
// ҐЄа в®© Ї а Ја дг ¤«Ёл
size = ((newstack - tsrbottm) >> 4) + 1;
// ‚бва Ёў Ґ¬ бў®© ®Ўа Ў®взЁЄ ЇаҐалў Ёп 9,
// § Ї®¬Ё Ґ¬ бв ал© ўҐЄв®а ЇаҐалў Ёп 9
oldkey = _dos_getvect(0x9);
_dos_setvect(0x9, newkey);
// ‡ ўҐаи Ґ¬ Їа®Ја ¬¬г Ё ®бв Ґ¬бп ў Ї ¬пвЁ
_dos_keep(0, size);
}
// Ќ®ўл© ®Ўа Ў®взЁЄ Є« ўЁ вга®Ј® ЇаҐалў Ёп
void _interrupt _far newkey() {
BEEP(); // ‚л¤ Ґ¬ §ўгЄ®ў®© бЁЈ «
// ‚л§лў Ґ¬ бв ¤ авл© ®Ўа Ў®взЁЄ ЇаҐалў Ёп 9
_chain_intr( oldkey );
}