⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dos.h

📁 C语言库函数介绍
💻 H
📖 第 1 页 / 共 2 页
字号:
    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 + -