问题在哪?DOS下的驻留内存,TC编写,很急!!
下面一段驻留内存的程序
为什么我一对文件进行操作,在DOS下就死机。
如果我把对文件操作去掉,一切正常。
请哪位大侠帮忙?
我一定给分的。
源程序如下:
#include <stdio.h>
#include <dos.h>
#include <stddef.h>
#include <stdlib.h>
#define INTR 0x1C
#define ATTR 0x7900
unsigned intsp,intss;
extern unsigned _heaplen = 1024;
extern unsigned _stklen = 512;
unsigned sp,ss;
unsigned char stack[0x1000];
void interrupt ( *oldhandler)(void);
void interrupt handler(void)
{
char line[80], far *save_dta;
struct time t;
int th1,th2,th3;
int tm1,tm2,tm3;
int ts1,ts2,ts3;
int temp=0;
char buffer[256] = "登录者:中国上海 开始时间:10:30:45 离开时间:";
struct fcb blk;
unsigned int (far *screen)[80];
static long count;
disable();
ss=_SS;
sp=_SP;
_SS=_DS;
_SP=(unsigned)&stack[0x1000-2];
enable();
screen = MK_FP(0xB800,0);
count++;
count %= 900;
temp=count%10;
screen[0][79] = temp + '0' +ATTR;
if(count==890)
{
strcpy(buffer,"登录者:中国上海 开始时间:10:30:45 离开时间:");
gettime(&t);
th1=t.ti_hour;
tm1=t.ti_min;
ts1=t.ti_sec;
th2=th1/10;
th3=th1%10;
tm2=tm1/10;
tm3=tm1%10;
ts2=ts1/10;
ts3=ts1%10;
buffer[48]='0'+th2;
buffer[49]='0'+th3;
buffer[50]=':';
buffer[51]='0'+tm2;
buffer[52]='0'+tm3;
buffer[53]=':';
buffer[54]='0'+ts2;
buffer[55]='0'+ts3;
buffer[56]='\0';
strcpy(line,"memotext.txt");
parsfnm(line, &blk, 1);
bdosptr(0x16,&blk,0);
save_dta = getdta();
setdta(buffer);
blk.fcb_recsize = 64;
blk.fcb_filsize = 0;
blk.fcb_curblk = 0;
blk.fcb_date = 0;
blk.fcb_currec = 0;
blk.fcb_random = 0L;
randbwr(&blk, 1);
bdosptr(0x10,&blk,0);
setdta(save_dta);
}
oldhandler();
disable();
_SS=ss;
_SP=sp;
enable();
}
main()
{
oldhandler = getvect(INTR);
setvect(INTR, handler);
keep(0, (_SS + (_SP/16) - _psp));
return 0;
}