home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9203 / driver / doslib.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-04-06  |  26.1 KB  |  791 lines

  1. /* DOSLIB.H */
  2. #include <string.h>
  3. #include <dos.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <dir.h>
  7. #include <io.h>
  8. #if sizeof (void *) == 2
  9. #error Grosses Datenmodell benutzen!
  10. #endif
  11.  
  12. #define DOSLIBH
  13.  
  14. typedef enum { FALSE, TRUE } Boolean;
  15.  
  16. typedef struct         /* Struktur eines PSP-Segments */
  17.  { char INT20[2];      /* INT $20-Befehl */
  18.    unsigned MemEnd;    /* höchste Speicheradresse in Paragraphs */
  19.    char Fill1;         /* unbenutzt */
  20.    char DOSJmp[5];     /* JMP FAR zu DOS, mit 1. Prog-Seg */
  21.    void far *OrgInt22;/* Originalwert INT 0x22, d.h. Rücksprungadresse */
  22.    void far *OrgInt23;    /* Originalwert INT 0x23 */
  23.    void far *OrgInt24;    /* Originalwert INT 0x24 */
  24.    unsigned ParentPSP; /* PSP-Segment des aufrufenden Programms */
  25.    unsigned char JFT[20];  /* Offene Dateien */
  26.    unsigned EnvSeg;    /* Environment-Segment */
  27.    unsigned SPSave;    /* SP beim letzten DOS-Aufruf */
  28.    unsigned SSSave;    /* SS beim letzten DOS-Aufruf */
  29.    unsigned FILES;     /* DOS 3.x: Maximalzahl offener Dateien */
  30.    unsigned char far *JFTAddr;  /* DOS 3.x: Datei-Tabelle, normalerweise @FTable */
  31.    void far *PrevPSP;  /* DOS 3.x: vorangehendes PSP ($FFFFF) */
  32.    char Fill2[20];     /* unbenutzt */
  33.    char DOSCall[3];    /* INT $21 / RETF */
  34.    char Fill3[9];      /* unbenutzt */
  35.    /* FCB */
  36.    unsigned char Drive;         /* Laufwerksnummer: 1 = A:, 2 = B: usw. */
  37.    char Name[8];                /* Dateiname, aufgefüllt mit Leerz. */
  38.    char Suffix[3];              /* Suffix, aufgefüllt mit Leerzeichen */
  39.    unsigned CurrBlock;          /* momentane Blocknummer */
  40.    unsigned RecSize;            /* Datensatzgröße in Bytes */
  41.    unsigned char NewDrive;      /* für den FCB: FileSize, ModDate... */
  42.    char NewName[8];
  43.    char NewSuffix[3];
  44.    char Fill4[8];               /* ... bis fcb_random mit 3(!) Bytes */
  45.    unsigned char DTA[128];
  46.  } PSPSeg;
  47.  
  48. typedef struct   /* Spezial-FCB für "Rename" */
  49.  { unsigned char OrgDrive;  /* Laufwerks-Kennziffer */
  50.    char OrgName[8], OrgExt[3];  /* Name und Suffix */
  51.    char Fill[4];           /* unbenutzt */
  52.    unsigned char NewDrive;   /* muß == OrgDrive sein */
  53.    char NewName[8], NewExt[3];  /* neuer Name, Suffix */
  54.  } RenameFCBRec;
  55.  
  56. typedef struct
  57.   { unsigned char DriveNo;  /* 0 = A, 1 = B: etc. */
  58.     unsigned char SubUnit;  /* relative Lw.-Nummer des Treibers */
  59.     unsigned BytesSec;  /* Bytes pro Sektor */
  60.     unsigned char SecsClus;  /* Sektoren pro Cluster -1 */
  61.     unsigned char ClusSize;  /* Clustergröße in der Form 2^x */
  62.     unsigned SecsBoot;  /* Anzahl reservierter Sektoren */
  63.     unsigned char FATCount;  /* Anzahl FATs (2) */
  64.     unsigned RootEntries; /* Anzahl Einträge im Stammverz. */
  65.     unsigned FirstData;  /* Nummer d. ersten Datensektors */
  66.     unsigned MaxClus;  /* höchstmögliche Clusternummer */
  67.   } DPBStart;
  68.  
  69.   /* Zweiter Teil des DPB für DOS 2.x */
  70. typedef struct
  71.   { unsigned char FATSize;  /* Anzahl Sektoren pro FAT */
  72.     unsigned RootStart; /* Erster Sektor Stammverzeichnis */
  73.     void *DevDriver; /* Gerätetreiber für dieses Laufwerk */
  74.     unsigned char MediaID;   /* Media-Deskriptor */
  75.     unsigned char Dirty;   /* 0xFF -> Block muß neu aufgebaut werden */
  76.     void *Next;  /* Adresse nächster DPB */
  77.     unsigned CurrDir;  /* Start-Cluster aktuelles Verzeichnis */
  78.     char CurrPath[64];  /* Name akt. Verzeichnis */
  79.   } DPBPart2x;
  80.  
  81. typedef struct       /* dito für DOS 3.x */
  82.   { unsigned char FATSize;  /* Anzahl Sektoren pro FAT */
  83.     unsigned RootStart; /* Erster Sektor Stammverzeichnis */
  84.     void *DevDriver;  /* Gerätetreiber für dieses Laufwerk */
  85.     unsigned char MediaID;   /* Media-Deskriptor */
  86.     unsigned char Dirty;   /* 0xFF -> Block muß neu aufgebaut werden */
  87.     void *Next;  /* Adresse nächster DPB */
  88.     unsigned ScanStart;  /* Start-Clusternummer bei Suche nach freien Blocks */
  89.     unsigned FreeClus;  /* Anzahl freier Cluster */
  90.   } DPBPart3x;
  91.  
  92. typedef struct       /* dito für DOS 4.x und 5.0 */
  93.   { unsigned FATSize;  /* *** Anzahl Sektoren pro FAT *** */
  94.     unsigned RootStart; /* Erster Sektor Stammverzeichnis */
  95.     void *DevDriver;  /* Gerätetreiber für dieses Laufwerk */
  96.     unsigned char MediaID;   /* Media-Deskriptor */
  97.     unsigned char Dirty;   /* 0xFF -> Block muß neu aufgebaut werden */
  98.     void *Next;  /* Adresse nächster DPB */
  99.     unsigned ScanStart;  /* Start-Clusternummer bei Suche nach freien Blocks */
  100.     unsigned FreeClus;  /* Anzahl freier Cluster */
  101.   } DPBPart4x;
  102.  
  103. typedef DPBStart *DPBPtr;   /* Zeiger auf den ersten (gemeinsamen) Teil */
  104. typedef DPBPart2x *Part2Ptr;
  105. typedef DPBPart3x *Part3Ptr;
  106. typedef DPBPart4x *Part4Ptr;
  107.  
  108. /* Speicherkontrollblocks ab V 4.0 bzw. DR-DOS 5.0 */
  109. typedef struct
  110.   { unsigned char Flag;  /* 'M' oder 'Z' */
  111.     unsigned OwnerPSP;  /* PSP-Segment des "Besitzers" */
  112.     unsigned Size;  /* Größe in Paragraphs */
  113.     char Resvd[3];  /* "reserviert" */
  114.     char OwnerID[8];  /* Prog-Name (nur für PSP-Segmente) */
  115.  } MCBRec, far *MCBPtr;
  116.  
  117. /* Kopfinformation von Gerätetreibern */
  118. #ifndef DRVLIBINC
  119. typedef struct DHead
  120.   { struct DHead far *Next;  /* & nächster Treiber */
  121.     unsigned DAttr;      /* Treiber-Attribute */
  122.     unsigned DStrat;   /* Offset der Strategie-Routine */
  123.     unsigned DIntr;    /* Offset der Interrupt-Routine */
  124.     char NameOrUnits[8];
  125.   } DriverHead, far *DriverPointer;
  126. #endif
  127.  
  128. typedef struct  /* für die Funktionen 0x5Dyy */
  129.  { unsigned AX,BX,CX,DX,SI,DI,DS,ES,  /* Register */
  130.    Resvd,   /* sollte immer 0 sein */
  131.    SysID,   /* Stations-ID: 0 für die eigene Maschine */
  132.    ProcID;  /* = PSP-Segment des aufrufenden Prozesses */
  133.  } ServerCallBlock;
  134.  
  135. typedef struct   /* Struktur des DOS-Variablenbereichs */
  136.  { unsigned char CritErrFlag;  /* $FF für "Critial Error", sonst $00 */
  137.    unsigned char InDosFlag;    /* 0 für "DOS inaktiv", 1 für "aktiv" */
  138.    unsigned char CritErrDrv;   /* Laufwerksnummer CritErr oder $FF */
  139.    unsigned char ExtLocus;     /* Parameter "Locus" für ExtErr */
  140.    unsigned ExtCode;           /* Parameter "Errcode" für ExtErr */
  141.    unsigned char ExtAction;    /* Parameter "Action" für ExtErr */
  142.    unsigned char ExtClass;     /* Parameter "Class" für ExtErr */
  143.    void *LastErr;              /* ES:DI beim letzten Fehler */
  144.    void *CurrDTA;              /* momentane DTA-Adresse */
  145.    unsigned CurrPSP;           /* Segmentadresse aktives PSP */
  146.    unsigned INT23SP;           /* SP bei INT23-Aufrufen */
  147.    unsigned ExitCode;          /* vom letzten Programmende */
  148.    unsigned char DosDrive;     /* Kennziffer DOS-Laufwerk */
  149.    unsigned char ExtBreak;     /* 0 für BREAK=OFF, 1 für BREAK=ON */
  150.    unsigned char Resvd1,Resvd2;  /* unbekannter Zweck */
  151.  } DosVarArea, far *DosVarP;
  152.  
  153. /* Erweiterte landesspezifische Informationen */
  154. typedef struct
  155.  { char co_subfuncno;    /* immer 0x01 */
  156.    int  co_datasize;     /* Umfang der folgenden Daten */
  157.    int  co_countrycode;  /* Nummer d. aktuellen/angegebenen Landes */
  158.    int  co_codepage;     /* aktuelle/angegebene Codeseite (CON) */
  159.    /* die restlichen Felder wie in struct country (Funktion 0x38) */
  160.    int  co_date;         /* 0=USA,1=Europa,2=Japan */
  161.    char co_curr[5];      /* Währungszeichen (ASCIIZ) */
  162.    char co_thsep[2];     /* Tausender-Trennzeichen */
  163.    char co_desep[2];     /* Dezimalpunkt */
  164.    char co_dtsep[2];     /* Trennzeichen für Datum */
  165.    char co_tmsep[2];     /* Trennzeichen für Uhrzeit */
  166.    char co_currstyle;    /* Bit 0 ? xxxx DM : DM xxxx */
  167.                          /* Bit 1 ? DM xxxx : DMxxxx */
  168.    char co_digits;       /* Anzahl Nachkommastellen */
  169.    char co_time;         /* co_time ? 24 Std : 12 Std */
  170.    long co_case;         /* char far (*Upcase)(char s) */
  171.    char co_dasep[2];     /* Daten-Trennzeichen */
  172.    char co_fill[10];     /* unbenutzt */
  173.  } ExtCountry;
  174.  
  175. typedef struct  /* Datenträger-Info f. Funktionen 0x69xx und 0x440D/46, 66 */
  176.  { unsigned InfoLevel;   /* immer 0(?) */
  177.    long SerialNo;        /* Seriennummer */
  178.    char VLabel[11];      /* Volume-Label */
  179.    char FileSystem[8];   /* Dateisystem ('FATxx...') */
  180.  } DiskSerialInfo;
  181.  
  182. typedef struct  /* für ExecLoad: SS:SP und CS:IP des Programms */
  183.  { unsigned rSP,rSS,  /* SS:SP */
  184.         rIP,rCS;  /* CS:IP */
  185.  } SSIPBlock;
  186.  
  187. typedef struct EXTDOSERROR /* Parameterblock für die Funktion 0x59 */
  188.  { int exterror;
  189.    char class, action, locus;  /* wie DOSERROR */
  190.    void far *Ptr;       /* Fehlerzeiger (ES:DI) */
  191.  } ;
  192.  
  193. /* * * * * * * * * * DIVERSES * * * * * * * * * */
  194. unsigned SwapValInCS(unsigned OldVal);   /* bringt einen Wert im CSeg unter */
  195.  
  196. /********************* DOS-FUNKTIONEN ********************/
  197. /* 0x01 - Eingabe eines Zeichens */
  198. unsigned char GetChar01(void);
  199.  
  200. /* 0x02 - Ausgabe eines Zeichens */
  201. void PutChar02(unsigned char Ch);
  202.  
  203. /* 0x03 - Eingabe eines Zeichens über die serielle Schnittstelle */
  204. unsigned char GetChar03(void);
  205.  
  206. /* 0x04 - Ausgabe eines Zeichens über die serielle Schnittstelle */
  207. void PutChar04(unsigned char Ch);
  208.  
  209. /* 0x05 - Ausgabe eines Zeichens über die parallele Schnittstelle */
  210. void PutChar05(unsigned char Ch);
  211.  
  212. /* 0x06 - Eingabe eines Zeichens */
  213. unsigned char GetChar06(void);
  214.  
  215. /* Funktion 0x07 - in conio.h */
  216. int getch(void);
  217.  
  218. /* 0x08 - Eingabe eines Zeichens */
  219. unsigned char GetChar08(void);
  220.  
  221. /* 0x09 - Ausgabe eines Strings in CP/M-Manier */
  222. int WriteString09(char far *s);
  223.  
  224. /* Funktion 0x0A - in conio.h */
  225. char *cgets(char *str);
  226.  
  227. /* Funktion 0x0B - in conio.h */
  228. int kbhit(void);
  229.  
  230. /* 0x0C - Tastaturpuffer löschen (und Funktion ausführen) */
  231. void ClearKbd(void);
  232.  
  233. /* 0x0D - Erzwingt das physikalische Schreiben der Treiber-Puffer */
  234. void DriverFlush0D(void);
  235.  
  236. /* 0x0E - in dir.h */
  237. int setdisk(int drive);
  238.  
  239. /* 0x0F - CP/M-kompatibles OPEN */
  240. int OpenFileFCB(struct fcb far *fcb);
  241.  
  242. /* 0x10 - CP/M-kompatibles CLOSE */
  243. int CloseFileFCB(struct fcb far *fcb);
  244.  
  245. /* 0x11 - CP/M-kompatibles FINDFIRST */
  246. int FindFirstCPM(struct fcb far *fcb);
  247.  
  248. /* 0x12 - CP/M-kompatibles FINDNEXT */
  249. int FindNextCPM(struct fcb far *fcb);
  250.  
  251. /* 0x13 - CP/M-kompatibles DELETE */
  252. int DeleteFileFCB(struct fcb far *fcb);
  253.  
  254. /* 0x14 - Sequentielles Lesen via FCB */
  255. int ReadSequential(struct fcb far *fcb);
  256.  
  257. /* 0x15 - Sequentielles Schreiben via FCB */
  258. int WriteSequential(struct fcb far *fcb);
  259.  
  260. /* 0x16 - Anlegen einer Datei via FCB */
  261. int CreateFileFCB(struct fcb far *fcb);
  262.  
  263. /* 0x17 - Umbenennen einer Datei via Spezial-FCB */
  264. int RenameFCB(struct fcb far *fcb);
  265.  
  266. /* 0x18 - undefiniert */
  267. /* void DOSFunc18(void); */
  268.  
  269. /* 0x19 - in dir.h */
  270. int getdisk(void);
  271.  
  272. /* 0x1A - in dos.h */
  273. void setdta(char far *dta);
  274.  
  275. /* 0x1B - in dos.h */
  276. void getfatd(struct fatinfo *etable);
  277.  
  278. /* 0x1C - in dos.h */
  279. void getfat(unsigned char drive,struct fatinfo *etable);
  280.  
  281. /* 0x1D - undefiniert */
  282. /* void DosFunc1D(void); */
  283.  
  284. /* 0x1E - undefiniert */
  285. /* void DosFunc1E(void); */
  286.  
  287. /* 0x1F - Disk Parameter Block des aktuellen Laufwerks ermitteln */
  288. DPBPtr far GetCurrentDPB(void);
  289.  
  290. /* 0x20 - undefiniert */
  291. /* void DosFunc20(void); */
  292.  
  293. /* 0x21 - "Read Random" via FCB */
  294. int ReadFCBRandom(struct fcb far *fcb,long RecNo);
  295.  
  296. /* 0x22 - "Write Random" via FCB */
  297. int WriteFCBRandom(struct fcb far *fcb,long RecNo);
  298.  
  299. /* 0x23 - Ermitteln der Dateigröße via FCB */
  300. long GetFileSizeFCB(struct fcb far *fcb);
  301.  
  302. /* 0x24 - "Set Random Record" (FCB) */
  303. void SetRandRecNo(struct fcb far *fcb);
  304.  
  305. /* 0x25 - in dos.h */
  306. void setvect(int interruptno, void interrupt(*isr)());
  307.  
  308. /* 0x26 - Anlegen eines neuen PSP */
  309. void MakeNewPSP(unsigned PSPAddr);
  310.  
  311. /* 0x27 - in dos.h */
  312. int randbrd(struct fcb *fcb, int rcnt);
  313.  
  314. /* Funktion 0x28 - in dos.h */
  315. int randbwr(struct fcb *fcb,int rcnt);
  316.  
  317. /* 0x29 - in dos.h */
  318. char *parsfnm(const char *cmdline, struct fcb *fcb, int option);
  319.  
  320. /* 0x2A - in dos.h */
  321. void getdate(struct date *datep);
  322.  
  323. /* 0x2B - in dos.h */
  324. void setdate(struct date *datep);
  325.  
  326. /* 0x2C - in dos.h */
  327. void gettime(struct time *timep);
  328.  
  329. /* 0x2D - in dos.h */
  330. void settime(struct time *timep);
  331.  
  332. /* 0x2E - in dos.h */
  333. void setverify(int value);
  334.  
  335. /* 0x2F - in dos.h */
  336. char far *getdta (void);
  337.  
  338. /* 0x30 - Ermittlung der (echten) DOS-Versionsnummer */
  339. unsigned DosVersion(void);
  340.  
  341. /* 0x31 - in dos.h */
  342. void keep(unsigned char status, unsigned size);
  343.  
  344. /* 0x32 - DOS Parameter Block eines beliebigen Laufwerks */
  345. DPBPtr GetAnyDPB(int Drive);
  346.  
  347. /* 0x3300 - in dos.h */
  348. int getcbrk(void);
  349.  
  350. /* 0x3301 - in dos.h */
  351. int setcbrk(int cbrkvalue);
  352.  
  353. /* 0x3302 - Austausch des Break-Flags */
  354. int SwapCBrk(int cbrkvalue);
  355.  
  356. /* 0x3304 - nicht definiert */
  357. /* void DosFunc3304(void); */
  358.  
  359. /* 0x3305 - Ermittlung des Start-Laufwerks */
  360. unsigned char GetBootDrive (void);
  361.  
  362. /* 0x3306 - Ermittlung des von DOS belegten Speicherbereichs */
  363. int GetDosHIGH(void);
  364.  
  365.  
  366. /* 0x34 - Liefert die Adresse des InDOS- und des "Critical Error"-Flags */
  367. void GetDOSFlags(unsigned char far **InDosPtr, unsigned char far **CritErrPtr);
  368.  
  369. /* 0x35 - in dos.h */
  370. void interrupt (*getvect(int interruptno))();
  371.  
  372. /* 0x36 - in dos.h */
  373. void getdfree(unsigned char drive, struct dfree *dtable);
  374.  
  375. /* 0x3700 - Ermittelt das aktuelle Trennzeichen in Kommandozeilen */
  376. char GetSwitChar(void);
  377.  
  378. /* 0x3701 - Versucht, ein neues Trennzeichen zu setzen */
  379. int SetSwitChar(char NewSwitch);
  380.  
  381. /* 0x3702 - Liefert TRUE, wenn Geräte auch ohne
  382.    vorangestelltes \DEV verfügbar sind
  383. */
  384. int GetDevAvail(void);
  385.  
  386. /* 0x3703 - Versucht beim Aufruf mit FALSE, das Voranstellen von
  387.    \DEV\ zwingend zu machen (nur für DOS 2.x)
  388. */
  389. void SetDevAvail(Boolean NewState);
  390.  
  391. /* 0x38 - in dos.h */
  392. /* struct country *country(int xcode, struct country *cp); */
  393.  
  394. /* 0x39 - in dir.h */
  395. int mkdir(const char *path);
  396.  
  397. /* 0x3A - in dir.h */
  398. int rmdir(const char *path);
  399.  
  400. /* 0x3B - in dir.h */
  401. int chdir(const char *path);
  402.  
  403. /* 0x3C - in io.h */
  404. int _creat(const char *path, int attrib);
  405.  
  406. /* 0x3D - in io.h */
  407. int _open(const char *filename, int oflags);
  408.  
  409. /* 0x3E - in io.h */
  410. int close (int handle);
  411.  
  412. /* 0x3F - in io.h */
  413. int _read(int handle, void *buf, unsigned len);
  414.  
  415. /* 0x40 - in io.h */
  416. int _write(int handle, void *buf, unsigned len);
  417.  
  418. /* 0x41 - in dos.h, io.h, stdio.h */
  419. int unlink(const char *filename);
  420.  
  421. /* 0x42xx - in io.h */
  422. long lseek(int handle, long offset, int action);
  423.  
  424. /* 0x4300, 0x4301 - in io.h */
  425. int _chmod(const char *filename, int func, ...);
  426.  
  427. /* 0x4302 - Ermittelt die Paßwort-Bits einer Datei (nur DR-DOS) */
  428. int GetFPass(const char far *FName);
  429.  
  430. /* 0x4303 - Setzt das Paßwort und -Modus (nur DR-DOS) */
  431. int SetFPass(const char *FName, const char *Pass,
  432.               unsigned char Mode);
  433.  
  434. /* 0x4400 - im Prinzip via ioctl() in io.h */
  435. int GetDevAttributes(int Handle);
  436.  
  437. /* 0x4401 - im Prinzip via ioctl() in io.h */
  438. int SetDevAttributes(int Handle, unsigned Attr);
  439.  
  440. /* 0x4402 - Lesen von Steuerdaten von einem Gerätetreiber */
  441. int IOCTLReadHandle(int Handle, int Count, void far *Buf);
  442.  
  443. /* 0x4403 - Schreiben von Steuerdaten zu einem Gerätetreiber via Handle */
  444. int IOCTLWriteHandle(int Handle, int Count, void far *Buf);
  445.  
  446. /* 0x4404 - Lesen von Steuerdaten von einem Blocktreiber */
  447. int IOCTLReadBlock(int Drive, int Count, void far *Buf);
  448.  
  449. /* 0x4405 - Schreiben von Steuerdaten zu einem Blocktreiber */
  450. int IOCTLWriteBlock(int Drive, int Count, void far *Buf);
  451.  
  452. /* 0x4406 - Ermitteln des Eingabestatus eines Gerätes bzw. einer Datei */
  453. int IOCTLGetInputStatus(int Handle);
  454.  
  455. /* 0x4407 - Ermitteln des Ausgabestatus eines Gerätes bzw. einer Datei */
  456. int IOCTLGetOutputStatus(int Handle);
  457.  
  458. /* 0x4408 - Prüfung, ob ein Speichermedium wechselbar ist */
  459. int IOCTLChangeable(unsigned char Drive);
  460.  
  461. /* 0x4409 - Prüfung, ob ein Speichermedium lokal ist */
  462. unsigned IOCTLDevLocal(unsigned char Drive);
  463.  
  464. /* 0x440A - Prüfung, ob ein Handle sich auf ein lokales Gerät bezieht */
  465. unsigned IOCTLHandleLocal(int Handle);
  466.  
  467. /* 0x440B - Setzt den Wiederholungszähler von SHARE */
  468. void IOCTLSetRetry(unsigned Repeats, unsigned Counter);
  469.  
  470. /* 0x440C - Generischer IOCTL-Aufruf (Handle) */
  471. int IOCTLGenericHandle(int Handle, int Category, int Subcode, void far *Block);
  472.  
  473. /* 0x440D - Generischer IOCTL-Aufruf (Block) */
  474. int IOCTLGenericBlock(unsigned char Drive,
  475.               unsigned char Subcode, void far *Block);
  476.  
  477. /* 0x440E - Aktive Kennziffer eines umschaltbaren Laufwerks ermitteln */
  478. int IOCTLGetLogMap(unsigned char Drive);
  479.  
  480. /* 0x440F - Aktive Kennziffer eines Laufwerks umschalten */
  481. void IOCTLSetLogMap(unsigned char NewDrive);
  482.  
  483. /* 0x4410 - Prüfung unterstützter IOCTL-Funktionen (Handle) */
  484. int IOCTLSupportH(int Handle, int Category, int Subcode);
  485.  
  486. /* 0x4411 - Prüfung unterstützter IOCTL-Funktionen (Block) */
  487. int IOCTLSupportB(int Drive, int Subcode);
  488.  
  489. /* 0x45 - in dos.h */
  490. int dup(int handle);
  491.  
  492. /* 0x46 - in dos.h */
  493. int dup2(int oldhandle, int newhandle);
  494.  
  495. /* 0x47 - in dir.h */
  496. int getcurdir(int drive, char *directory);
  497.  
  498. /* 0x48 - in alloc.h */
  499. int allocmem(unsigned size, unsigned *segp);
  500.  
  501. /* 0x49 - in alloc.h */
  502. int freemem(unsigned seg);
  503.  
  504. /* 0x4A - in alloc.h */
  505. int setblock(unsigned segx, unsigned newsize);
  506.  
  507. /* 0x4B00 - in process.h */
  508. /* int spawn...(int mode, char *path, char *argv[]); */
  509.  
  510. /* 0x4B01 - Lädt ein Programm, ohne es auszuführen */
  511. int ExecLoad(char *far Path, char far *ProgArgs,
  512.              SSIPBlock far *ProgRegs);
  513.  
  514. /* 0x4B03 - Laden eines Overlays in Microsoft-Manier */
  515. int LoadOverlay(const char far *Name,
  516.                 unsigned LoadAddr, unsigned Reloc);
  517.  
  518. /* 0x4B05 - Ankündigigung eines Programmstarts */
  519. /* ... funktioniert noch nicht */
  520.  
  521. /* 0x4C - in process.h, stdlib.h */
  522. void exit(int status);
  523.  
  524. /* 0x4D - Ermittelt den Exitcode eines Programms */
  525. unsigned DosExitCode(void);
  526.  
  527. /* 0x4E - in dir.h */
  528. int findfirst(const char *path, struct ffblk *ffblk, int attrib);
  529.  
  530. /* 0x4F - in dir.h */
  531. int findnext(struct ffblk *ffblk);
  532.  
  533. /* 0x50 - setzt die Segmentadresse des aktiven PSP */
  534. void SetPSP(unsigned NewPSP);
  535.  
  536. /* 0x51 - im Prinzip (nämlich über Funktion 0x62) in dos.h */
  537. unsigned GetPSP51(void);
  538.  
  539. /* 0x52 - ermittelt die Adresse des DOS-Datenbereichs */
  540. void far *GetDosDataArea(void);
  541.  
  542. /* 0x53 - Rechnet einen BIOS Parameter Block in
  543.           einen DOS Parameter Block um
  544. */
  545. void MakeDPB(void far *BPB, void far *DPB);
  546.  
  547. /* 0x54 - in dos.h */
  548. int getverify (void);
  549.  
  550. /* 0x55 - Erweiterte Version der Funktion 0x26: legt ein neues PSP an */
  551. void CreateNewPSP(unsigned NewSeg, unsigned MemTop);
  552.  
  553. /* 0x56 - in stdio.h */
  554. int rename(const char *oldname, const char *newname);
  555.  
  556. /* 0x5700 - in dos.h, io.h */
  557. int getftime(int handle, struct ftime *timep);
  558.  
  559. /* 0x5701 - in dos.h, io.h */
  560. int setftime(int handle, struct ftime *timep);
  561.  
  562. /* 0x5800 - Liefert eine Kenziffer für die momentan verwendete
  563.             Logik beim Belegen von Speicherblocks
  564. */
  565. unsigned char GetAllocStrat(void);
  566.  
  567. /* 0x5801 - Setzt die Logik für folgende Belegungen von Speicherplatz */
  568. void SetAllocStrat(unsigned char NewStrat);
  569.  
  570. /* 0x5802 - Prüft, ob ein eventuell vorhandene
  571.             UMBs mit berücksichtigt werden
  572. */
  573. int GetUMBLink(void);
  574.  
  575. /* 0x5803 - Versucht, UMBs mit in die Logik einzubinden */
  576. int SetUMBLink(unsigned char LinkState);
  577.  
  578. /* 0x59 - im Prinzip in dos.h */
  579. /* int dosexterr(struct DOSERROR *eblkp); */
  580. int DosExtErr(struct EXTDOSERROR *ErrBlock);
  581.  
  582. /* NB: Die Routinen zur Ermittlung der Fehlerklassen etc.
  583.    sind in EXTERR.H definiert!
  584. */
  585. /* 0x5A - in io.h */
  586. int creattemp(char *path, int attrib);
  587.  
  588. /* 0x5B - in io.h */
  589. int creatnew(const char *path, int attrib);
  590.  
  591. /* 0x5C00 - in io.h */
  592. int lock(int handle, long offset, long length);
  593.  
  594. /* 0x5C01 - in io.h */
  595. int unlock(int handle, long offset, long length);
  596.  
  597. /* 0x5D00 - Indirekter Funktionsaufruf */
  598. void ServerCall(ServerCallBlock far *PBlock);
  599.  
  600. /* 0x5D01 - Bringt sämtliche Dateien eines Prozesses
  601.             auf den neuesten Stand
  602. */
  603. void UpdateAllFiles(void);
  604.  
  605. /* 0x5D02 - Schließt eine Datei über ihren Namen */
  606. int CloseFileName(unsigned ProcID, const char far *FName);
  607.  
  608. /* 0x5D03 - Schließt sämtliche Dateien einer Station */
  609. int CloseMachineFiles(unsigned MachID);
  610.  
  611. /* 0x5D04 - Schließt sämtliche Dateien eines Prozesses */
  612. int CloseProcessFiles(unsigned ProcID);
  613.  
  614. /* 0x5D05 - Liefert die Werte eines SHARE-Eintrags */
  615. int GetSHAREEntry(ServerCallBlock far *PBlock);
  616.  
  617. /* 0x5D06 - Liefert den DOS-Variablenbereich */
  618. int GetDosVars(DosVarP *p, unsigned *Header, unsigned *MaxSize);
  619.  
  620. /* 0x5D07 - Ermittelt, ob Druckjobs getrennt behandelt werden */
  621. unsigned char ReDirPrinterGetJob(void);
  622.  
  623. /* 0x5D08 - Legt fest, ob Druckjobs getrennt behandelt werden */
  624. void ReDirPrinterSetJob(unsigned char Join);
  625.  
  626. /* 0x5D09 - Startet einen neuen Druckjob */
  627. void ReDirPrinterNewJob(void);
  628.  
  629. /* 0x5D0A - Direktes Setzen der Fehlerinformationen */
  630. void SetExtErr(unsigned ErrCode, unsigned char Class,
  631.                unsigned char Locus, unsigned char Action,
  632.                void far *ErrPtr);
  633.  
  634. /* 0x5D0B - DOS-Variablenbereich ermitteln (nur Version 4.x) */
  635. void far *GetDos4VarAreas(void);
  636.  
  637. /* 0x5E00 - Ermittelt den Namen einer Station */
  638. int GetStationName(unsigned char far *Node, char far *Name);
  639.  
  640. /* 0x5E01 - Setzt Namen und Knotennummer einer Station */
  641. int SetStationName(unsigned char Node, const char far *Name);
  642.  
  643. /* 0x5E02 - Legt einen Initialisierungsstring für
  644.             einen Netzwerk-Drucker fest
  645. */
  646. int SetReDirPrinterSetup(const char far *DevName,
  647.                          unsigned char Len,
  648.                          const char far *Init);
  649. /* 0x5E03 - Ermittelt den aktuellen Initialisierungsstring
  650.             für einen Netzwerk-Drucker
  651. */
  652. int GetReDirPrinterSetup(const char far *DevName,
  653.        unsigned char far *Len, char far *Init);
  654.  
  655. /* 0x5E04 - Legt fest, ob Tabulatoren auf einem Netz-
  656.             Drucker interpretiert werden
  657. */
  658. int ReDirPrinterSetTabs(char far *DevName, unsigned char NewState);
  659.  
  660. /* 0x5E05 - Ermittelt, ob Tabulatoren auf einem Netz-Drucker
  661.             interpretiert werden
  662. */
  663. int ReDirPrinterGetTabs(char far *DevName);
  664.  
  665.  
  666. /* 0x5F00 - Liefert TRUE, wenn Druckerumleitungen aktiv sind */
  667. int ReDirPrinterGetMode(void);
  668.  
  669. /* 0x5F00 - Liefert TRUE, wenn Laufwerks-Umleitungen aktiv sind */
  670. int ReDirDriveGetMode(void);
  671.  
  672. /* 0x5F01 - Schaltet Druckerumleitungen an bzw. ab */
  673. int ReDirPrinterSetMode(unsigned char NewMode);
  674.  
  675. /* 0x5F01 - Schaltet Laufwerks-Umleitungen an bzw. ab */
  676. int ReDirDriveSetMode(unsigned char NewMode);
  677.  
  678. /* 0x5F02 - Sucht die Redirektionsliste nach einem Eintrag ab.
  679.             Aufruf mit dem lokalen Namen des Gerätes, zurückgeliefert
  680.             wird der Netz-Name und die Indexnummer.
  681. */
  682. int ReDirGetEntry(const char far *LocalName, char far *NetName);
  683.  
  684. /* 0x5F03 - Ordnet einem lokalen Gerät einen Netz-Namen zu */
  685. int ReDirSetEntry(unsigned char DevCode, unsigned UserVal,
  686.                   char far *LocalName, char far *NetName);
  687.  
  688. /* 0x5F04 - Löscht die Zuordnung zwischen einem
  689.             lokalen und einem Netz-Namen
  690. */
  691. int ReDirDeleteEntry(char *far LocalName);
  692.  
  693. /* 0x5F05 - Sucht die Redirektionsliste nach einem Eintrag ab.
  694.             Aufruf mit dem lokalen Namen des Gerätes, zurückgeliefert
  695.             wird der Netz-Name, die Indexnummer und die (temporäre)
  696.             Kennziffer des NETBIOS (vgl. Funktion 0x5F02).
  697. */
  698. int ReDirGetExtEntry(const char far *LocalName,
  699.              char far *NetName, unsigned far *NetNo);
  700.  
  701. /* 0x5F06 - unbekannter Zweck */
  702.  
  703. /* 0x5F07 - Stellt ein (zuvor via 0x5F08 unterdrücktes)
  704.             lokales Laufwerk wieder zur Verfügung
  705. */
  706. int ActivateLocalDrive(unsigned char Drive);
  707.  
  708. /* 0x5F08 - Unterdrückt ein lokales Laufwerk (DOS 4.x:
  709.             unterdrückt sämtliche Laufwerke ab der
  710.             angegebenen Kennziffer)
  711. */
  712. int DeactivateLocalDrive(unsigned char Drive);
  713.  
  714. /* 0x60 - Wandelt einen Dateinamen in seine "absolute" Form um */
  715. char *RealFName(char *FName);
  716.  
  717. /* 0x61 - nicht definiert */
  718.  
  719. /* 0x62 - in dos.h */
  720. unsigned getpsp(void);
  721.  
  722. /* 0x63 - nicht für europäische DOS-Versionen */
  723. void DosFunc63(void);
  724.  
  725. /* 0x64 - Setzt das von PRINT benutzte und von
  726.           der Funktion 0x08 abgefragte Flag unbekannnten Zwecks
  727. */
  728. void SetPRINTFlag(unsigned char NewVal);
  729.  
  730. /* 0x6501 - Liefert Informationen über das aktuelle/angegebene Land */
  731. ExtCountry *far ExtCountryInfo(int CCode,
  732.                 int CPage, ExtCountry far *E);
  733.  
  734. /* 0x6502 - Liefert die Tabelle für Klein/Großbuchstaben */
  735. int GetASCIIHiXLate(unsigned far *Size, unsigned char far **Table);
  736.  
  737. /* 0x6504 - Liefert die Tabelle für Dateinamen-Großbuchstaben */
  738. int GetFNameHiXLate(unsigned far *Size, unsigned char far **Table);
  739.  
  740. /* 0x6505 - Liefert die Tabelle mit Dateinamen-Trennzeichen */
  741. int GetFNameTerminators(unsigned far *Size, unsigned char far **Table);
  742.  
  743. /* 0x6506 - Liefert eine Tabelle mit Sortier-Gewichtungen */
  744. int GetSortOrder(unsigned far *Size, unsigned char far **Table);
  745.  
  746. /* 0x6507 - Liefert die DBCS-Tabelle */
  747. int GetDBCSVecs(unsigned far *Size, unsigned char far **Table);
  748.  
  749. /* 0x6520 - Setzt ein Zeichen von Klein- auf Großbuchstaben um */
  750. char Upcase6520(char ch);
  751.  
  752. /* 0x6521 - Setzt einen beliebigen String von Klein auf Groß um */
  753. char far *Upcase6521(char far *Str, unsigned Len);
  754.  
  755. /* 0x6522 - Setzt einen ASCIIZ-String von Klein auf Groß um */
  756. char far *Upcase6522(char far *Str);
  757.  
  758. /* 0x6523 - Prüfung auf "Nein"/"Ja"/"Weder noch" (== 0/1/2) */
  759. int Query6523(char ch);
  760.  
  761. /* 0x6600 - undefiniert */
  762.  
  763. /* 0x6601 - Legt die Kennziffer der zukünftigen Codeseite fest */
  764. int SetCodePage(unsigned NewPage);
  765.  
  766. /* 0x6602 - Ermittelt die momentan gesetzten Codeseiten */
  767. int GetCodePage(unsigned far *CurrPage, unsigned far *SysPage);
  768.  
  769. /* 0x67 - Legt die Maximalzahl von Handles neu fest */
  770. int SetHandleCount(int Handles);
  771.  
  772. /* 0x68 - Bringt eine Datei auf den neuesten Stand,
  773.           ohne sie zu schließen
  774. */
  775. int UpdateFile(int Handle);
  776.  
  777. /* 0x6900 - Liefert die Seriennummer eines Speichermediums */
  778. int GetDiskSerialInfo(unsigned char Drive, DiskSerialInfo *DSInfo);
  779.  
  780. /* 0x6901 - Setzt die Seriennummer eines Speichermediums */
  781. int SetDiskSerialInfo(unsigned char Drive, DiskSerialInfo *DSInfo);
  782.  
  783. /* 0x6A (Update Network Units) - unbekannt */
  784.  
  785. /* 0x6B - undefiniert */
  786. void DosFunc6B(void);
  787.  
  788. /* 0x6C - Erweiterte Version von Open/Create */
  789. int CreateExtended(const char *FName, unsigned Mode,
  790.                    unsigned Attr, unsigned char Action);
  791.