// Коды клавиш
#define HotKeyRecording 0x13 // "R"
#define ShiftKey        0x04 // <Ctrl>

// Экранный атрибут - голубой на сером
#define ATTR 0x7900

// Стек TSR при запуске
#define STACK_SYSTEM	512

// Размер кучи, доступный для использования
// в момент активизации
#define HEAP_RESERVED   2048

// Размер стека, доступного для использования
// в момент активизации
#define STACK_SIZE      1024

// Размер области статических данных
#define STATIC_SIZE     2000

// Адрес завершения в нашем PSP
#define PSP_TERMINATE   0x0A

// Родительский PSP из нашего PSP
#define PSP_PARENT_PSP  0x16

// Функция MS-DOS для завершения программы
#define DOS_EXIT        0x4C

// Порт данных клавиатуры
#define KEYBOARD_PORT   0x60

struct ExtErr
{
  unsigned int errax;
  unsigned int errbx;
  unsigned int errcx;
};

void interrupt far new_int2f(
  unsigned bp, unsigned di, unsigned si,
  unsigned ds, unsigned es, unsigned dx,
  unsigned cx, unsigned bx, unsigned ax);
void interrupt far new_int28(
  unsigned bp, unsigned di, unsigned si,
  unsigned ds, unsigned es, unsigned dx,
  unsigned cx, unsigned bx, unsigned ax);
void interrupt far new_int9(
  unsigned bp, unsigned di, unsigned si,
  unsigned ds, unsigned es, unsigned dx,
  unsigned cx, unsigned bx, unsigned ax);
void interrupt far new_int8(
  unsigned bp, unsigned di, unsigned si,
  unsigned ds, unsigned es, unsigned dx,
  unsigned cx, unsigned bx, unsigned ax);
void interrupt far new_int1b(
  unsigned bp, unsigned di, unsigned si,
  unsigned ds, unsigned es, unsigned dx,
  unsigned cx, unsigned bx, unsigned ax);
void interrupt far new_int23(
  unsigned bp, unsigned di, unsigned si,
  unsigned ds, unsigned es, unsigned dx,
  unsigned cx, unsigned bx, unsigned ax);
void interrupt far new_int24(
  unsigned bp, unsigned di, unsigned si,
  unsigned ds, unsigned es, unsigned dx,
  unsigned cx, unsigned bx, unsigned ax);

typedef void (interrupt far *INTADDR)();

void far idle_int_chain(void);

void interrupt far new_int10(void);
void interrupt far new_int13(void);
void interrupt far new_int25(void);
void interrupt far new_int26(void);

void far timer_int_chain(void);

extern char far * indos_ptr;
extern char far * crit_err_ptr;

void main(int argc,char *argv[]);
void Beep(void);
void application(void);
void unload(void);
int  tsrloaded(void);
int  tsrinit(void);
void getInDosFlag(void);
void get_int_13(void);
int  DosBusy(void);
int  Int28DosBusy(void);
void GetExtErr(struct ExtErr * ErrInfo);
void SetExtErr(struct ExtErr near * ErrInfo);
unsigned GetPSP(void);
void SetPSP(unsigned segPSP);
void activate_tsr(void);
void tsr_exit(void);
void usage(char *);
int  RestoreIntVect(int Vect, INTADDR NewInt,  INTADDR OldInt);
void set_stack(void);
void restore_stack(void);
int  tsrunload(void);
