更新时间:2024-08-28 22:36
这是一个头文件,里面包含了很多BIOS和DOS调用函数
/*
* dos.h
* This file has no copyright assigned and is placed in the Public Domain.
* This file is a part of the mingw-runtime package.
* No warranty is given; refer to the file DISCLAIMER within the package.
*
* DOS-specific functions and structures.
*
*/
#ifndef _DOS_H_
#define _DOS_H_
/* All the headers include this file. */
#include <_mingw.h>
#define __need_wchar_t
#ifndef RC_INVOKED
#include
#endif /* Not RC_INVOKED */
/* For DOS file attributes */
#include
#ifndef RC_INVOKED
#ifdef __cplusplus
#endif
#ifndef __MSVCRT__ /* these are in CRTDLL, but not MSVCRT */
#ifndef __DECLSPEC_SUPPORTED
extern unsigned int *_imp___basemajor_dll;
extern unsigned int *_imp___baseminor_dll;
extern unsigned int *_imp___baseversion_dll;
extern unsigned int *_imp___osmajor_dll;
extern unsigned int *_imp___osminor_dll;
extern unsigned int *_imp___osmode_dll;
#define _basemajor (*_imp___basemajor_dll)
#define _baseminor (*_imp___baseminor_dll)
#define _baseversion (*_imp___baseversion_dll)
#define _osmajor (*_imp___osmajor_dll)
#define _osminor (*_imp___osminor_dll)
#define _osmode (*_imp___osmode_dll)
#else /* __DECLSPEC_SUPPORTED */
__MINGW_IMPORT unsigned int _basemajor_dll;
__MINGW_IMPORT unsigned int _baseminor_dll;
__MINGW_IMPORT unsigned int _baseversion_dll;
__MINGW_IMPORT unsigned int _osmajor_dll;
__MINGW_IMPORT unsigned int _osminor_dll;
__MINGW_IMPORT unsigned int _osmode_dll;
#define _basemajor _basemajor_dll
#define _baseminor _baseminor_dll
#define _baseversion _baseversion_dll
#define _osmajor _osmajor_dll
#define _osminor _osminor_dll
#define _osmode _osmode_dll
#endif /* __DECLSPEC_SUPPORTED */
#endif /* ! __MSVCRT__ */
#ifndef _DISKFREE_T_DEFINED
/* needed by _getdiskfree (also in direct.h) */
struct _diskfree_t {
unsigned total_clusters;
unsigned avail_clusters;
unsigned sectors_per_cluster;
unsigned bytes_per_sector;
};
#define _DISKFREE_T_DEFINED
#endif
_CRTIMP unsigned __cdecl _getdiskfree (unsigned, struct _diskfree_t *);
#ifndef _NO_OLDNAMES
# define diskfree_t _diskfree_t
#endif
#ifdef __cplusplus
}
#endif
#endif /* Not RC_INVOKED */
#endif /* Not _DOS_H_ */
peekb
函数名称: peekb
函数原型: int peekb(unsigned segment, unsigned offset)
函数功能: 内存中读出一个字(8位)
函数返回: 读出的字内容
参数说明: segmemt-段地址,offset-段内偏移地址
所属文件:
#include
#include
#include
int main()
{
int value=0;
value=peek(0x0040,0x0017);
if (value&1)
else
if (value&2)
else
if (value&4)
else
if (value&8)
else
if (value&16)
else
if (value&32)
else
if (value&64)
else
return 0;
}
poke
函数名称: poke
函数原型: void poke(unsigned segment, unsigned offset,int word)
函数功能: 往内存中写入一个字(16位)
函数返回:
参数说明: segmemt-段地址,offset-段内偏移地址,word-要写入的字
所属文件:
#include
#include
int main()
{
clrscr();
getch();
poke(0x0000,0x0417,16);
return 0;
}
pokeb
函数名称: pokeb
函数原型: void pokeb(unsigned segment, unsigned offset,char ch)
函数功能: 往内存中写入一个字(8位)
函数返回:
参数说明: segmemt-段地址,offset-段内偏移地址,ch-要写入的字
所属文件:
#include
#include
int main()
{
clrscr();
getch();
pokeb(0x0000,0x0417,16);
return 0;
}
ranbrd
函数名称: randbrd
函数原型: int randbrd(struct fcb *fcb, int rcnt)
函数功能: 使用DOS 0x27中断,将文件内容读入磁盘缓冲区
函数返回: 0-读取所有记录
1-文件结束
2-循环读取
3-文件结束,但最后一条记录未完成
参数说明: rcnt-记录条数
所属文件: <dos.h>
#include
#include
#include
#include
int main()
{
char far *save_dta;
char line[80],buffer[256];
struct fcb blk;
int i,result;
gets(line);
if (!parsfnm(line,&blk,1))
{
exit(1);
}
bdosptr(0x0F,&blk,0);
save_dta=getdta();
setdta(buffer);
blk.fcb_recsize=128;
blk.fcb_random=0L;
result=randbrd(&blk,1);
if (!result)
else
{
exit(1);
}
for (i=0;i<128;i++)
putchar(buffer);
setdta(save_dta);
return 0;
}
randbwr
函数名称: randbwr
函数原型: int randbwr(struct fcb *fcb, int rcnt)
函数功能: 使用DOS 0x28中断,将磁盘缓冲区内容写入文件
函数返回: 0-写完所有记录
1-磁盘空间不足,未操作
2-写记录绕回 0xFFFF
参数说明: rcnt-记录条数
所属文件: <dos.h>
#include
#include
#include
#include
int main()
{
char far *save_dta;
char line[80];
struct fcb blk;
int result;
gets(line);
parsfnm(line,&blk,1);
if (bdosptr(0x16,&blk,0)==-1)
{
exit(1);
}
save_dta=getdta();
setdta(buffer);
blk.fcb_recsize=256;
blk.fcb_random=0L;
result=randbwr(&blk,1);
if (!result)
else
{
exit(1);
}
if (bdosptr(0x10,&blk,0)==-1)
{
exit(1);
}
setdta(save_dta);
return 0;
}
segread
函数名称: segread
函数原型: void segread(struct SREGS *segp)
函数功能: 按SREGS格式设置断寄存器的数值
函数返回:
参数说明: 该函数得到的segp参数供intdosx和int86函数使用segp段寄存器内容,结构SREGS定义如下:
struct SREGS{
unsigned int es;
unsigned int cs;
unsigned int ss;
unsigned int ds;
};
所属文件:
#include
#include
int main()
{
struct SREGS segs;
segread(&segs);
return 0;
}
sleep
函数名称: sleep
函数原型: void sleep(unsigned seconds)
函数功能: seconds-停止运行的秒数
函数返回:
参数说明:
所属文件:
#include
#include
int main()
{
int i;
for (i=1;i<5;i++)
{
sleep(i);
}
return 0;
}
setblock
函数名称: setblock
函数原型: int setblock(unsigned segx,unsigned newsize)
函数功能: 修改段地址为segx的内存块的大小
函数返回:
参数说明: segx-内存块的段地址,该地址是使用allocmem分配的
所属文件:
#include
#include
#include
#include
int main()
{
unsigned int size,segp;
int stat;
size=64; /* (64 x 16)=1024 bytes */
stat=allocmem(size,&segp);
if (stat==-1)
else
{
exit(1);
}
stat=setblock(segp,size*2);
if (stat==-1)
else
freemem(segp);
return 0;
}
unlink
函数名称: unlink
函数原型: int unlink(const char *fname)
函数功能: 删除一个指定文件
函数返回: 0:操作成功,-1:操作失败
参数说明: fname-要删除的文件名称
所属文件:
#include
#include
int main()
{
int status;
if (status == 0)
else
fclose(fp);
if (status==0)
else
return 0;
}
dostounix
函数名称: dostounix
函数原型: long dostounix(struct data *d,struct time *t)
函数功能: 将DOS的日期和时间格式转换成UNIX标准
函数返回:
参数说明: d,t-日期和时间指针
所属文件:
#include
#include
#include
#include
int main()
{
time_t t;
struct time d_time;
struct date d_date;
struct tm *local;
getdate(&d_date);
gettime(&d_time);
t=dostounix(&d_date,&d_time);
local=localtime(&t);
return 0;
}
unixtodos
函数名称: unixtodos
函数原型: void unixtodos(long utime, struct date *d, struct time *t)
函数功能: 将UNIX格式的时间和日期转换成DOS格式
函数返回:
参数说明: utime-UNIX格式的时间日期.d,t-DOS格式的日期时间
所属文件:
#include
#include
#define SECONDS_PER_DAY 86400L
struct date dt;
struct time tm;
int main()
{
unsigned long val;
getdate(&dt);
gettime(&tm);
val=dostounix(&dt,&tm);
val-=(SECONDS_PER_DAY*42);
unixtodos(val,&dt,&tm);
return 0;
}
未完待续.