词条 | keep() |
释义 | 函数名: keep 功 能: 退出并继续驻留 用 法: void keep(int status, int size); 程序例: /***NOTE: This is an interrupt service routine. You can NOT compile this program with Test Stack Overflow turned on and get an executable file which will operate correctly. Due to the nature of this function the formula used to compute the number of paragraphs may not necessarily work in all cases. Use with care! Terminate Stay Resident (TSR) programs are complex and no other support for them is provided. Refer to the MS-DOS technical documentation for more information. */ #include <dos.h> /* The clock tick interrupt */ #define INTR 0x1C /* Screen attribute (blue on grey) */ #define ATTR 0x7900 /* reduce heaplength and stacklength to make a smaller program in memory */ extern unsigned _heaplen = 1024; extern unsigned _stklen = 512; void interrupt ( *oldhandler)(void); void interrupt handler(void) { unsigned int (far *screen)[80]; static int count; /* For a color screen the video memory is at B800:0000. For a monochrome system use B000:000 */ screen = MK_FP(0xB800,0); /* increase the counter and keep it within 0 to 9 */ count++; count %= 10; /* put the number on the screen */ screen[0][79] = count + '0' + ATTR; /* call the old interrupt handler */ oldhandler(); } int main(void) { /* get the address of the current clock tick interrupt */ oldhandler = getvect(INTR); /* install the new interrupt handler */ setvect(INTR, handler); /* _psp is the starting address of the program in memory. The top of the stack is the end of the program. Using _SS and _SP together we can get the end of the stack. You may want to allow a bit of saftey space to insure that enough room is being allocated ie: (_SS + ((_SP + safety space)/16) - _psp) */ keep(0, (_SS + (_SP/16) - _psp)); return 0; } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。