keep()

函式名: keep 功 能: 退出並繼續駐留 用 法: void keep(int status, int size);

函式名: 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;

}

相關詞條

熱門詞條

聯絡我們