Metropoli BBS
VIEWER: dos.h MODE: TEXT (ASCII)
#ifndef __DOS_H__
#define __DOS_H__

#include <stddef.h>

struct BYTEREGS  {
  byte  al, ah;  word _1;
  byte  bl, bh;  word _2;
  byte  cl, ch;  word _3;
  byte  dl, dh;  word _4;
};

struct WORDREGS  {
  word  ax,_1;
  word  bx,_2;
  word  cx,_3;
  word  dx,_4;
  word  si,_5;
  word  di,_6;
  word  cflag,_7;
  word  flags,_8;
};

struct DWORDREGS  {
  dword  eax, ebx, ecx, edx;
  dword  esi, edi, cflag, flags;
};

union REGS {
  struct  DWORDREGS  x;
  struct  WORDREGS  w;
  struct  BYTEREGS  h;
};

// NOTE: int86x() & int386x() ignores ss,cs
struct SREGS {
  word  es;
  word  cs;
  word  ss;
  word  ds;
  word  fs;
  word  gs;
};

struct ffblk {
  byte ff_reserved[21]; /* reserved by DOS */
  byte ff_attrib;       /* attribute found */
  word ff_ftime;        /* file time */
  word ff_fdate;        /* file date */
  dword ff_fsize;        /* file size */
  byte ff_name[13];     /* found file name */
};

struct time {
  byte ti_min;   /* minutes */
  byte ti_hour;  /* hours */
  byte ti_hund;  /* hundredths of seconds */
  byte ti_sec;   /* seconds */
};

struct date {
  word da_year;     /* current year */
  byte da_day;     /* day of the month */
  byte da_mon;     /* month (1 = Jan) */
};

#ifdef __cplusplus
  extern "C" {
#endif

extern void int86(byte i,union REGS *rin,union REGS *rout);
extern void int86x(byte i,union REGS *rin,union REGS *rout,struct SREGS *sreg);
extern void int386(byte i,union REGS *rin,union REGS *rout);
extern void int386x(byte i,union REGS *rin,union REGS *rout,struct SREGS *sreg);

extern word errno;

extern sword open(char *strg,word acc);
extern void close(sword hand);
extern word creat(char *strg,word attr);
extern sdword read(sword hand,void* buf,dword len);
extern sdword write(sword hand,void* buf,dword len);
extern sdword lseek(sword hand,dword pos,byte typ);
extern sdword tell(sword hand);
extern sdword filelength(sword hand);
extern sword eof(sword hand);
extern sword unlink(char * strg);
extern sword getdisk(void);
extern sword setdisk(byte drv);
extern sword mkdir(char * strg);
extern sword chdir(char * strg);
extern sword rmdir(char * strg);
extern sword rename(char * _old,char * _new);
extern char *getcwd(char * buf);
extern char *getdcwd(byte drv,char * buf);
extern sword findfirst(byte* str1,word attr,void * ffb);
extern sword findnext(void* ffb);

extern void gettime(struct time*);
extern void settime(struct time*);
extern void getdate(struct date*);
extern void setdate(struct date*);

extern void sleep(word);
extern void delay(word);
extern void sound(word);
extern void nosound(void);

#ifndef SEEK_SET

#define SEEK_SET 0   // Seeks from beginning of file
#define SEEK_CUR 1   // Seeks from current position
#define SEEK_END 2   // Seeks from end of file

#define O_NOINHERIT 0x80
#define O_DENYALL   0x10
#define O_DENYWRITE 0x20
#define O_DENYREAD  0x30
#define O_DENYNONE  0x40

#define O_BINARY   0        // Binary mode
#define O_RDONLY   0        // Read only                                   
#define O_WRONLY   1        // Write only                                  
#define O_RDWR     2        // Read and write                              

#define O_CREAT     0x0100  /* create and open file */
#define O_TRUNC     0x0200  /* open with truncation */
#define O_EXCL      0x0400  /* exclusive open */
#define O_APPEND    0x0800  /* to end of file */

#define FA_NORMAL   0x00        /* Normal file, no attributes */
#define FA_RDONLY   0x01        /* Read only attribute */
#define FA_HIDDEN   0x02        /* Hidden file */
#define FA_SYSTEM   0x04        /* System file */
#define FA_LABEL    0x08        /* Volume label */
#define FA_DIREC    0x10        /* Directory */
#define FA_ARCH     0x20        /* Archive */

#endif  //SEEK_SET

#ifdef __cplusplus
  }
#endif

#endif
[ RETURN TO DIRECTORY ]