home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C++ Games Programming
/
CPPGAMES.ISO
/
digmid
/
real
/
doscalls.h
< prev
next >
Wrap
Text File
|
1994-01-03
|
12KB
|
218 lines
/******************************************************************************/
/* DOSCALLS.ASM, DOSCALLS.H */
/* Written by John W. Ratcliff, December 1991. */
/******************************************************************************/
/* DOSCALLS is a linkable object module that provides many of the functions */
/* available through the standard C libraries. There are number of reasons to*/
/* use DOSCALLS.OBJ rather than C library function calls. */
/* */
/* 1. Portability: These functions work the same regardless of what */
/* C compiler you are using. */
/* */
/* 2. Size: These functions are extremely small compared to */
/* equivalent C library functions. The C library */
/* functions are general while the DOSCALLS */
/* function calls are very specific. Accessing C */
/* library function calls causes large amounts of */
/* library code to get drug in that you probably */
/* don't want. */
/* */
/* 3. TSR capability: If you program TSR's you will find that */
/* dragging in C library functions will kill you */
/* for a whole number of reasons. Using */
/* DOSCALLS.OBJ you have no DGROUP dependencies and */
/* you can easily write single segment TSR's and */
/* even write both COM modules and DOS device */
/* drivers. */
/* */
/* 4. Assembly language: If you don't program in C and need basic */
/* DOS support functions, you can just use DOSCALLS */
/* for this purpose. */
/* */
/* 5. Simplicity: DOSCALLS don't ignore the fact that you are programming*/
/* on an MS-DOS machine. They in fact simply provide */
/* C callable access to INT 21h calls. Because of this */
/* they are all easy to use. */
/******************************************************************************/
#define NEW_FILE 0 // MFOPEN file types, 0 open as a new file for read/write
#define OLD_FILE 1 // file type 1, open as an old file for read/write access
#define FILE_NOT_FOUND 0 // file handle of zero, is file not found.
int far cdecl mfopen(char far *filename,long int far *size,int type);
int far cdecl mpfopen(char far *filename,long int far *size,int type);
/******************************************************************************/
/* mfopen -> Does a DOS file open. Returns a DOS file handle, which is simply*/
/* an integer. You can open a file as a new file or as an old file */
/* by specifying the file type. A return code of zero means that */
/* the file couldn't be opened. You pass the address of a long int */
/* who's contents will be filled with the total length of the file. */
/* If you pass a null address then the size will not be reported. */
/* After a file open, the file pointer will always be sitting at */
/* byte position zero. */
/******************************************************************************/
int far cdecl mfclose(int fhand);
int far cdecl mpfclose(int fhand);
/******************************************************************************/
/* mfclose -> Close a file that was opened with mfopen. */
/******************************************************************************/
long int far cdecl mfpos(int fhand);
/******************************************************************************/
/* mfpos -> report current file position of this file. */
/******************************************************************************/
long int far cdecl mfseek(int fhand,long int fpos);
/******************************************************************************/
/* mfseek -> seek file to this position passed. Return code is actual file */
/* seek position achieved. (In case request went past end of file.) */
/******************************************************************************/
int far cdecl mfread(void far *address,long int size,int fhand);
/******************************************************************************/
/* mfread -> read from file, into address, for length of size, from fhand. */
/* return code of 1, successful file read, return code of zero, */
/* file read failed. */
/******************************************************************************/
int far cdecl mfwrite(void far *address,long int size,int fhand);
/******************************************************************************/
/* mfwrite -> write data to file, from address, for length of size, to fhand. */
/* return code of 1, success, return code of zero, write failed. */
/******************************************************************************/
char far * far cdecl fload(char far *name,long int far *siz);
char far * far cdecl fpload(char far *name,long int far *siz);
/******************************************************************************/
/* fload -> allocate memory, and read entire file in. Uses name as filename */
/* and returns the length read in, in siz. If siz is null then siz */
/* not set. If return code is NULL then was unable to load file. */
/* Either the file wasn't found, or there wasn't enough memory to */
/* read it in. Otherwise return code is the address of the file */
/* read in at. Uses MEMALLOC (provided by application program) to */
/* allocate memory, and caller must do MEMFREE when finished with */
/* this memory. */
/******************************************************************************/
char far * far cdecl floadpara(char far *name,long int far *siz,int far *segment);
/******************************************************************************/
/* floadpara -> a special version of fload, that reads in the file into */
/* allocated memory, but forces it at a paragraph boundary. */
/* The return code is still the address of allocated memory for */
/* the file read, but the variable segment is loaded with the */
/* actual segment boundary that the file was read in at. This */
/* is used by digplay's LoadDriver call, which loads a binary */
/* image into memory, that must fall on a paragraph boundary. */
/******************************************************************************/
int far cdecl keystat(void);
/******************************************************************************/
/* keystat-> report DOS key status. Zero, no key pending, 1, key pending. */
/******************************************************************************/
int far cdecl getkey(void);
/******************************************************************************/
/* getkey -> DOS getkey function. Returns keypress pending. Automatically */
/* handles extended key codes, by adding 256 to them. */
/******************************************************************************/
void far cdecl farcop(char far *dest,char far *source);
/******************************************************************************/
/* farcop -> string copy routine, but uses far pointers. */
/******************************************************************************/
void far cdecl farcat(char far *dest,char far *source);
/******************************************************************************/
/* farcat -> string concatenate routine, but with far pointers. */
/******************************************************************************/
int far cdecl farlen(char far *string); // Return length of string.
int far cdecl farcompare(char far *source,char far *dest); // String compare.
void far cdecl ucase(char far *string); // Upper case a string.
char far * far cdecl fmalloc(long int size);
/******************************************************************************/
/* fmalloc -> DOS memory allocation. Works fine by itself but conflicts with */
/* C compiler's far memory allocation. DOS likes memory to be */
/* de-allocated in the order that it was originally allocated, in */
/* order for it to cleanly defragment memory pools. These function*/
/* calls are valid if you are writing a TSR or must do DOS memory */
/* allocation exclusively. */
/******************************************************************************/
void far cdecl ffree(char far *tmp);
/******************************************************************************/
/* ffree -> free dos allocated memory. */
/******************************************************************************/
void far cdecl writeln(char far *string);
/******************************************************************************/
/* writeln -> echo a string to the console. Avoids dragging all of the printf*/
/* library code, which is HUGE! */
/******************************************************************************/
void far * far cdecl GetTimerInterruptVector(void);
/******************************************************************************/
/* GetTimerInterruptVector -> reports the current far address of the timer */
/* interrupt vector. This function call is used to report the */
/* original address of the timer interrupt vector, should your */
/* application choose to change it. These services are provided */
/* because some of the sound drivers use the Timer interrupt to play */
/* back sound. (Use AudioCapabilities to find out which ones.) Even*/
/* though the sound drivers all still service the original 18.2 timer*/
/* interrupt, some application software may have already modified */
/* the timer for it's own purposes. In these cases you will */
/* want to disable that timer while digitized sound playback is */
/* occuring, and then put it back when sound playback has completed. */
/* If your application doesn't reprogram the timer interrupt vector */
/* rate, you needn't worry about any of this stuff. */
/******************************************************************************/
void far cdecl SetTimerInterruptVector(void far *address,unsigned int divisor);
/******************************************************************************/
/* SetTimerInterruptVector -> set the timer interupt vector to a new address */
/* and specify a new interupt rate. */
/******************************************************************************/
int far cdecl mdelete(char far *fname); // Delete a file by filename.
int far cdecl ifexists(char far *fname); // Does this file exist? 1 yes, 0 no.
#define BLACK 0
#define BLUE 1
#define GREEN 2
#define CYAN 3
#define RED 4
#define MAGENTA 5
#define BROWN 6
#define GRAY 7
#define GREY 7
#define DARK_GREY 8
#define DARK_GRAY 8
#define LIGHT_BLUE 9
#define LIGHT_GREEN 10
#define LIGHT_CYAN 11
#define LIGHT_RED 12
#define LIGHT_MAGENTA 13
#define YELLOW 14
#define WHITE 15
#define BEHIND << 4 |
void far cdecl tprint(int x,int y,int len,char far *string,int color);
void far cdecl tcolor(int x,int y,int len,int color); // Change text background color.
void far cdecl TextCursor(int xloc,int yloc);
void far cdecl farmov(char far *dest,char far *source,int length);
void far cdecl MemStosb(char far *dest,int value,int length);
int far cdecl scale(int a,int b,int c);
void far * far cdecl MakeFP(int offset,int segment);
int far cdecl MakeSeg(char far *address);
void far cdecl DBUG(long int value,int xloc,int yloc);