Anhang C - Strukturen und Laufzeitvariablen
 

C.1. BIOS-Strukturen

struct bioshd_t {
  int hdnum;  /* Nummer der Platte (0-x) */
  int head;   /* Nummer des Kopfes */
  int cyl;    /* Zylinder */
  int sector; /* Sektor */
  int count;  /* Anzahl Sektoren */
  void *buf;  /* Zeiger auf Sektorpuffer im DOS-Speicher */
};
Verwendung in :
BiosHdFormat
BiosHdQuery
BiosHdRead
BiosHdVerify
BiosHdWrite

C.2. DOS-Strukturen

struct diskfree_t {
  unsigned short total_clusters;       /* Anzahl Cluster gesamt */
  unsigned short avail_clusters;       /* freie Cluster */
  unsigned short sectors_per_cluster;  /* Sektoren pro Cluster */
  unsigned short bytes_per_sector;     /* Bytes pro Sektor */
};
Verwendung in :
DosGetDiskInfo
_dos_getdiskfree

struct dosdate_t {
  unsigned char day;       /* Tag (1-31) */
  unsigned char month;     /* Monat (1-12) */
  unsigned year;           /* Jahr 0=1980, 1=1981, ... */
  unsigned char dayofweek; /* Wochentag (1-7) */
};
Verwendung in :
DosGetDate
DosSetDate
_dos_getdate
_dos_setdate

struct dostime_t {
  unsigned char hour;    /* Stunde (0-23) */
  unsigned char minute;  /* Minute (0-59) */
  unsigned char second;  /* Sekunde (0-59) */
  unsigned char hsecond; /* Hundertstel-Sekunde */
};
Verwendung in :
DosGetTime
DosSetTime
_dos_gettime
_dos_settime

struct find_t {
  char reserved[21];   /* reserviert für DOS */
  char attrib;         /* Attribute der gefundenen Datei */
  unsigned short time; /* Zeit der Datei */
  unsigned short date; /* Datum der Datei */
  long size;           /* Grösse der Datei in Bytes */
  char name[13];       /* Name der Datei */
};
Verwendung in :
DosFindFirst
DosFindNext
_dos_findfirst
_dos_findnext

union REGS {
  struct WORDREGS x; /* 16Bit-Register */
  struct BYTEREGS h; /* 8Bit-Register */
};
Verwendung in :
int86
int86x
intdos
intdosx

struct WORDREGS {
  unsigned short ax;    /* AX */
  unsigned short bx;    /* BX */
  unsigned short cx;    /* CX */
  unsigned short dx;    /* DX */
  unsigned short si;    /* SI */
  unsigned short di;    /* DI */
  unsigned short cflag; /* Carry-Flag */
  unsigned short flags; /* Flag-Register */
};
struct BYTEREGS {
  unsigned char al, ah; /* AL, AH */
  unsigned char bl, bh; /* BL, BH */
  unsigned char cl, ch; /* CL, CH */
  unsigned char dl, dh; /* DL, DH */
};
struct SEGREGS {
  unsigned short es; /* ES */
  unsigned short cs; /* CS */
  unsigned short ss; /* SS */
  unsigned short ds; /* DS */
};
Verwendung in :
int86x
intdosx
 

C.3. DPMI-Strukturen

struct dpmimem_t {
  void *address;         /* Zeiger auf Speicherblock */
  unsigned handle;  /* Handle des Speicherblocks */
};
Verwendung in :
DpmiAllocMem
DpmiFreeMem
DpmiResizeMem

struct dpmimeminfo_t {
  unsigned _largestblockfree;
  unsigned _maxunlockedpages;
  unsigned _maxlockedpages;
  unsigned _linearaddresssize;
  unsigned _unlockedpages;
  unsigned _freepages;
  unsigned _physicalpages;
  unsigned _freelinearaddressspace;
  unsigned _pagefilesize;
  char _reserved[12];
};
Verwendung in :
DpmiGetFreeMem

struct dpmiproc_t {
  int _pmcs; /* Code-Segment einer ProtectedMode-Prozedur */
  unsigned _pmeip;  /* Offset einer ProtectedMode-Prozedur */
  int _rmcs; /* Code-Segment einer RealMode-Prozedur */
  int _rmip; /* Offset einer RealMode-Prozedur */
};
Verwendung in :
DpmiAllocCallback
DpmiFreeCallback
DpmiGetPmInt
DpmiGetSaveRest
DpmiRawSwitchAddr
DpmiSetPmInt

struct dpmiver_t {
  unsigned char _major, _minor;        /* Haupt- und Unterversion des Hosts */
  unsigned short _flags;               /* Eigenschaften des Hosts */
  unsigned char _cpu;                  /* Prozessor-Typ */
  unsigned char _picmaster, _picslave; /* PIC-Werte für Master und Slave */
};
Verwendung in :
DpmiGetVersion

typedef union {
  struct DREGS e; /* 32Bit-Register */
  struct WREGS x; /* 16Bit-Register */
  struct BREGS h; /* 8Bit-Register */
} REGS32;
Verwendung in :
DpmiAllocCallback
DpmiRmProcIret
DpmiRmProcRetf
DpmiSimRmInt

struct DREGS {
  DWORD _edi;   /* EDI */
  DWORD _esi;   /* ESI */
  DWORD _ebp;   /* EBP */
  DWORD dum15;  /* --- */
  DWORD _ebx;   /* EBX */
  DWORD _edx;   /* EDX */
  DWORD _ecx;   /* ECX */
  DWORD _eax;   /* EAX */
  WORD dum16;   /* Flag-Register */
  WORD dum17;   /* ES */
  WORD dum18;   /* DS */
  WORD dum19;   /* FS */
  WORD dum20;   /* GS */
  DWORD _csip;  /* CS:IP */
  DWORD _sssp;  /* SS:SP */
};
struct WREGS {
  WORD _di,dum1;    /* DI */
  WORD _si,dum2;    /* SI */
  WORD _bp,dum3;    /* BP */
  WORD dum21,dum22; /* --- */
  WORD _bx,dum4;    /* BX */
  WORD _dx,dum5;    /* DX */
  WORD _cx,dum6;    /* CX */
  WORD _ax,dum7;    /* AX */
  WORD _flags;      /* Flag-Register */
  WORD _es;         /* ES */
  WORD _ds;         /* DS */
  WORD _fs;         /* FS */
  WORD _gs;         /* GS */
  WORD _ip;         /* IP */
  WORD _cs;         /* CS */
  WORD _sp;         /* SP */
  WORD _ss;         /* SS */
};
struct BREGS {
  BYTE dum8[16];         /* EDI,ESI,EBP,--- */
  BYTE _bl,_bh,dum12[2]; /* BL, BH */
  BYTE _dl,_dh,dum11[2]; /* DL, DH */
  BYTE _cl,_ch,dum13[2]; /* CL, CH */
  BYTE _al,_ah,dum14[2]; /* AL, AH */
};
 

C.4. API-Strukturen

struct sysvars_t {
  int _cpu;     /* Prozessortyp : (3/4/5) */
  int _fpu;     /* Coprozessor vorhanden (1) oder nicht (0) */
  int _dos;     /* MS-DOS-Version */
  int _dpmi;    /* DPMI-Version */
  void *_ebase; /* Basisadresse Environment */
  void *_pbase; /* Basisadresse PSP */
};
Verwendung in :
GetSysData

struct execerr_t {
  int code;                /* negativer Fehlercode */
  char module[16];         /* Modul, bei dem Fehler auftrat */

  /* erweiterte Info bei code -6 : */
  int symtype;             /* Symboltyp, 0:Name 1:Ordinal */
  union {
    char symbol[256];      /* Symbolname falls symtype 0 */
    int ordinal;           /* Ordinal falls symtype 1 */
  } sym;
  char dllmodule[16];      /* Importmodul ohne Symbol */
};
Verwendung in :
GetExecErr


C.5. C-Strukturen

typedef struct {
  int quot; /* Quotient (Divisionsergebnis) */
  int rem;  /* Divisionsrest */
} div_t;
Verwendung in :
div

typedef struct {
  long int quot; /* Quotient */
  long int rem;  /* Divisionsrest */
} ldiv_t;
Verwendung in :
ldiv

struct tm {
  int tm_sec;   /* Sekunden (0-59) */
  int tm_min;   /* Minuten (0-59) */
  int tm_hour;  /* Stunden (0-23) */
  int tm_mday;  /* Tag des Monats (1-31) */
  int tm_mon;   /* Monat (0-11) */
  int tm_year;  /* Jahr ab 1900 */
  int tm_wday;  /* Wochentag (0=Sonntag, 1=Montag ... 6=Samstag) */
  int tm_yday;  /* Tag des Jahres (0-365) */
  int tm_isdst; /* Flag für Sommerzeitkonvertierung */
};
Verwendung in :
asctime
gmtime
localtime
mktime
 

C.6. C-Laufzeitvariablen

Die Variable _fmode legt fest, ob Dateien im Binär- oder Textmodus geöffnet werden, falls beim Aufruf einer open-Funktion kein expliziter Modus angegeben wurde. Der Inhalt von _fmode kann auf O_TEXT und O_BINARY gesetzt werden (siehe FCNTL.H), per Voreinstellung ist O_TEXT eingestellt. Werden Dateien im Textmodus geöffnet, wird die Zeichenfolge CR/LF beim Lesen in LF und die Zeichenfolge LF beim Schreiben in CR/LF übersetzt. Im Binärmodus findet diese automatische Konvertierung nicht statt.