📄 dos.h
字号:
printf("Enter a file name to create:");
gets(line);
/* pass the new file name to the dta */
parsfnm(line,&blk,1);
printf("%d %s\n",blk.fcb_drive,blk.fcb_name);
/* request DOS services to create file */
if(bdosptr(0x16,&blk,0)==-1)
{
perror("Error creating file");
exit(1);
}
/* save old dta and set new dta */
save_dta=getdta();
setdta(buffer);
/* write new records */
blk.fcb_recsize=256;
blk.fcb_random=0L;
result=randbwr(&blk,1);
printf("result=%d\n",result);
if (!result)
printf("Write OK\n");
else
{
perror("Disk error");
exit(1);
}
/* request DOS services to close the file */
if (bdosptr(0x10,&blk,0)==-1)
{
perror("Error closing file");
exit(1);
}
/* reset the old dta */
setdta(save_dta);
return 0;
}
@函数名称: getdta
函数原型: char far * getdta(void)
函数功能: 得到磁盘传送地址(DTA)的指针
函数返回: 磁盘传送地址(DTA)的指针
参数说明:
所属文件: <dos.h>
#include <dos.h>
#include <stdio.h>
int main()
{
char far *dta;
dta=getdta();
printf("The current disk transfer address is: %Fp",dta);
return 0;
}
@函数名称: getfat
函数原型: void getfat(int drive, struct fatinfo *fptr)
函数功能: 得到磁盘驱动器的信息
函数返回:
参数说明: drive-驱动器号:1-A盘,2-B盘,以此类推.fptr-磁盘驱动器的信息
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
int main()
{
struct fatinfo diskinfo;
int flag=0;
printf("Please insert disk in drive A");
getchar();
getfat(1,&diskinfo);
printf("Drive A: is ");
switch((unsigned char) diskinfo.fi_fatid)
{
case 0xFD:printf("360K low density");break;
case 0xF9:printf("1.2 Meg high density");break;
default:printf("unformatted");flag=1;
}
if(!flag)
{
printf("sectors per cluster %5d",diskinfo.fi_sclus);
printf("number of clusters %5d",diskinfo.fi_nclus);
printf("bytes per sector %5d",diskinfo.fi_bysec);
}
return 0;
}
@函数名称: getfatd
函数原型: void getfatd(struct fatinfo *fptr)
函数功能: 得到缺省驱动磁盘驱动器的信息
函数返回:
参数说明: fptr-磁盘驱动器的信息
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
int main()
{
struct fatinfo diskinfo;
int flag=0;
printf("Please insert disk in drive A");
getchar();
getfat(1,&diskinfo);
printf("Drive A: is ");
switch((unsigned char) diskinfo.fi_fatid)
{
case 0xFD:printf("360K low density");break;
case 0xF9:printf("1.2 Meg high density");break;
default:printf("unformatted");flag=1;
}
if(!flag)
{
printf("sectors per cluster %5d",diskinfo.fi_sclus);
printf("number of clusters %5d",diskinfo.fi_nclus);
printf("bytes per sector %5d",diskinfo.fi_bysec);
}
return 0;
}
@函数名称: getpsp
函数原型: unsigned getpsp(void)
函数功能: 得到程序段前缀PSP的段地址(dos3.0的产物)
函数返回: PSP的段地址
参数说明:
所属文件: <dos.h>
include <stdio.h>
#include <dos.h>
int main()
{
static char command[128];
char far *cp;
int len,i;
printf("The program segment prefix is: %u\n",getpsp());
/* _psp is preset to segment of the PSP
Command line is located at offset 0x81 from start of PSP */
cp=(char *)MK_FP(_psp, 0x80);
len=*cp;
for(i=0;i<len;i++)
command[i]=cp[i+1];
printf("Command line: %s\n",command);
return 0;
}
@函数名称: setverify
函数原型: void setverify(int value)
函数功能: 设置DOS磁盘操作中确认标志的状态
函数返回:
参数说明: value=0:磁盘操作无需确认,value=1:磁盘操作需要确认
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0X1C
void interrupt(*oldhandler)();
int count=0;
void interrupt handler()
{
count++;
oldhandler();
}
int main()
{
oldhandler=getvect(INTR);
setvect(INTR,handler);
while (count<20)
printf("count is %d",count);
setvect(INTR,oldhandler);
return 0;
}
@函数名称: getverify
函数原型: int getverify(void)
函数功能: 得到DOS确认标志的状态
函数返回: 0-标识为off,1-标识为on
参数说明:
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
int main()
{
if (getverify())
printf("DOS verify flag is on");
else
printf("DOS verify flag is off");
return 0;
}
@函数名称: geninterrupt
函数原型: void geninterrupt(int intr)
函数功能: 产生DOS软中断
函数返回:
参数说明: intr-中断号
所属文件: <dos.h>
#include <conio.h>
#include <dos.h>
void writechar(char ch);
int main()
{
clrscr();
gotoxy(80,25);
writechar('*');
getch();
return 0;
}
void writechar(char ch)
{
struct text_info ti;
gettextinfo(&ti);
_AH=9;
_AL=ch;
_BH=0;
_BL=ti.attribute;
_CX=1;
geninterrupt(0x10);
}
@函数名称: enable
函数原型: void enable(void)
函数功能: 允许中断
函数返回:
参数说明:
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0X1C
void interrupt (*oldhandler)();
int count=0;
void interrupt handler()
{
disable();
count++;
enable();
oldhandler();
}
int main()
{
oldhandler=getvect(INTR);
setvect(INTR,handler);
while (count<20)
printf("count is %d",count);
setvect(INTR,oldhandler);
return 0;
}
@函数名称: disable
函数原型: void disable(void)
函数功能: 禁止所有中断(不包括NMI中断)
函数返回:
参数说明:
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0X1C
void interrupt (*oldhandler)();
int count=0;
void interrupt handler()
{
disable();
count++;
enable();
oldhandler();
}
int main()
{
oldhandler=getvect(INTR);
setvect(INTR,handler);
while (count<20)
printf("count is %d",count);
setvect(INTR,oldhandler);
return 0;
}
@函数名称: interrupt
函数原型: void interrupt(*getvect(int intr)) (void)
函数功能: 申明一个函数为中断函数,该中断函数的中断号为intr
函数返回: 以上不是一个函数,实际上是说明了中断函数的格式,
比如我们要将一个函数fun()说明成中断函数,可写成: void interrupt( *fun )();
参数说明:
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
void interrupt yourisr() /* Interrupt Service Routine (ISR) */
{
disable();
/* Body of ISR goes here */
oldhandler();
outportb(0x20,0x20); /* Send EOI to PIC1 */
enable();
}
#define INTNO 0x0B
int main()
{
oldhandler = getvect(INTNO); /* Save Old Interrupt Vector */
setvect(INTNO, yourisr); /* Set New Interrupt Vector Entry */
outportb(0x21,(inportb(0x21) & 0xF7)); /* Un-Mask (Enable) IRQ3 */
/* Set Card - Port to Generate Interrupts */
/* Body of Program Goes Here */
/* Reset Card - Port as to Stop Generating Interrupts */
outportb(0x21,(inportb(0x21) | 0x08)); /* Mask (Disable) IRQ3 */
setvect(INTNO, oldhandler); /* Restore old Interrupt Vector Before Exit */
return 0;
}
@函数名称: setvect,getvect
函数原型: void setvect(int interruptno, void interrupt (*isr)())
函数功能: 为指定的中断向量设置中断服务函数
函数返回: getvect返回interruptno中保存的4字节值
参数说明: interruptno-中断向量,isr-中断函数,该函数应使用interrupt关键字声明
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0X1C /* The clock tick interrupt */
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
void interrupt ( *oldhandler)(__CPPARGS);
int count=0;
void interrupt handler(__CPPARGS)
{ /* increase the global counter */
count++;
/* call the old routine */
oldhandler();
}
int main()
{
/* save the old interrupt vector */
oldhandler = getvect(INTR);
/* install the new interrupt handler */
setvect(INTR,handler);
/* loop until the counter exceeds 20 */
while (count<20)
printf("count is %d\n",count);
/* reset the old interrupt handler */
setvect(INTR,oldhandler);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -